Browse Source

add packetaddr support for socks

Shelikhoo 3 years ago
parent
commit
690b4924ae
2 changed files with 12 additions and 7 deletions
  1. 9 1
      proxy/socks/server.go
  2. 3 6
      transport/internet/udp/dispatcher_packetaddr.go

+ 9 - 1
proxy/socks/server.go

@@ -2,6 +2,7 @@ package socks
 
 
 import (
 import (
 	"context"
 	"context"
+	"github.com/v2fly/v2ray-core/v4/common/net/packetaddr"
 	"io"
 	"io"
 	"time"
 	"time"
 
 
@@ -186,7 +187,14 @@ func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writ
 }
 }
 
 
 func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection, dispatcher routing.Dispatcher) error {
 func (s *Server) handleUDPPayload(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:
+		udpDispatcherConstructor = udp.NewPacketAddrDispatcherCreator(ctx).NewPacketAddrDispatcher
+	}
+	udpServer := udpDispatcherConstructor(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
 		payload := packet.Payload
 		payload := packet.Payload
 		newError("writing back UDP response with ", payload.Len(), " bytes").AtDebug().WriteToLog(session.ExportIDToError(ctx))
 		newError("writing back UDP response with ", payload.Len(), " bytes").AtDebug().WriteToLog(session.ExportIDToError(ctx))
 
 

+ 3 - 6
transport/internet/udp/dispatcher_packetaddr.go

@@ -46,12 +46,9 @@ func NewPacketAddrDispatcherCreator(ctx context.Context) PacketAddrDispatcherCre
 }
 }
 
 
 func (pdc *PacketAddrDispatcherCreator) NewPacketAddrDispatcher(
 func (pdc *PacketAddrDispatcherCreator) NewPacketAddrDispatcher(
-	dispatcher routing.Dispatcher, callback ResponseCallback) (DispatcherI, error) {
-	packetConn, err := packetaddr.CreatePacketAddrConn(pdc.ctx, dispatcher, false)
-	if err != nil {
-		return nil, err
-	}
+	dispatcher routing.Dispatcher, callback ResponseCallback) DispatcherI {
+	packetConn, _ := packetaddr.CreatePacketAddrConn(pdc.ctx, dispatcher, false)
 	pd := &PacketAddrDispatcher{conn: packetConn, callback: callback, ctx: pdc.ctx}
 	pd := &PacketAddrDispatcher{conn: packetConn, callback: callback, ctx: pdc.ctx}
 	go pd.readWorker()
 	go pd.readWorker()
-	return pd, nil
+	return pd
 }
 }