|
|
@@ -2,6 +2,7 @@ package shadowsocks
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
+ "github.com/v2fly/v2ray-core/v5/common/net/packetaddr"
|
|
|
"time"
|
|
|
|
|
|
core "github.com/v2fly/v2ray-core/v5"
|
|
|
@@ -70,10 +71,23 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn internet
|
|
|
}
|
|
|
|
|
|
func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection, dispatcher routing.Dispatcher) error {
|
|
|
- udpServer := udp.NewSplitDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
|
|
|
+ udpDispatcherConstructor := udp.NewSplitDispatcher
|
|
|
+ switch s.config.PacketEncoding {
|
|
|
+ case packetaddr.PacketAddrType_None:
|
|
|
+ break
|
|
|
+ case packetaddr.PacketAddrType_Packet:
|
|
|
+ packetAddrDispatcherFactory := udp.NewPacketAddrDispatcherCreator(ctx)
|
|
|
+ udpDispatcherConstructor = packetAddrDispatcherFactory.NewPacketAddrDispatcher
|
|
|
+ }
|
|
|
+
|
|
|
+ udpServer := udpDispatcherConstructor(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
|
|
|
request := protocol.RequestHeaderFromContext(ctx)
|
|
|
if request == nil {
|
|
|
- return
|
|
|
+ request = &protocol.RequestHeader{
|
|
|
+ Port: packet.Source.Port,
|
|
|
+ Address: packet.Source.Address,
|
|
|
+ User: s.user,
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
payload := packet.Payload
|