|
@@ -251,7 +251,9 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn internet
|
|
|
func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReader, clientWriter *PacketWriter, dispatcher routing.Dispatcher) error {
|
|
func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReader, clientWriter *PacketWriter, dispatcher routing.Dispatcher) error {
|
|
|
udpServer := udp.NewDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
|
|
udpServer := udp.NewDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
|
|
|
udpPayload := packet.Payload
|
|
udpPayload := packet.Payload
|
|
|
- udpPayload.UDP = &packet.Source
|
|
|
|
|
|
|
+ if udpPayload.UDP == nil {
|
|
|
|
|
+ udpPayload.UDP = &packet.Source
|
|
|
|
|
+ }
|
|
|
common.Must(clientWriter.WriteMultiBuffer(buf.MultiBuffer{udpPayload}))
|
|
common.Must(clientWriter.WriteMultiBuffer(buf.MultiBuffer{udpPayload}))
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -274,23 +276,30 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
mb2, b := buf.SplitFirst(mb)
|
|
mb2, b := buf.SplitFirst(mb)
|
|
|
|
|
+ if b == nil {
|
|
|
|
|
+ continue
|
|
|
|
|
+ }
|
|
|
destination := *b.UDP
|
|
destination := *b.UDP
|
|
|
- ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
|
|
|
|
- From: inbound.Source,
|
|
|
|
|
- To: destination,
|
|
|
|
|
- Status: log.AccessAccepted,
|
|
|
|
|
- Reason: "",
|
|
|
|
|
- Email: user.Email,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+
|
|
|
|
|
+ currentPacketCtx := ctx
|
|
|
|
|
+ if inbound.Source.IsValid() {
|
|
|
|
|
+ currentPacketCtx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
|
|
|
|
+ From: inbound.Source,
|
|
|
|
|
+ To: destination,
|
|
|
|
|
+ Status: log.AccessAccepted,
|
|
|
|
|
+ Reason: "",
|
|
|
|
|
+ Email: user.Email,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
newError("tunnelling request to ", destination).WriteToLog(session.ExportIDToError(ctx))
|
|
newError("tunnelling request to ", destination).WriteToLog(session.ExportIDToError(ctx))
|
|
|
|
|
|
|
|
if !buf.Cone || dest == nil {
|
|
if !buf.Cone || dest == nil {
|
|
|
dest = &destination
|
|
dest = &destination
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- udpServer.Dispatch(ctx, *dest, b) // first packet
|
|
|
|
|
|
|
+ udpServer.Dispatch(currentPacketCtx, *dest, b) // first packet
|
|
|
for _, payload := range mb2 {
|
|
for _, payload := range mb2 {
|
|
|
- udpServer.Dispatch(ctx, *dest, payload)
|
|
|
|
|
|
|
+ udpServer.Dispatch(currentPacketCtx, *dest, payload)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|