Browse Source

move udp packet to protocol

Darien Raymond 6 years ago
parent
commit
21f8bfe476

+ 13 - 0
common/protocol/udp/packet.go

@@ -0,0 +1,13 @@
+package udp
+
+import (
+	"v2ray.com/core/common/buf"
+	"v2ray.com/core/common/net"
+)
+
+// Packet is a UDP packet together with its source and destination address.
+type Packet struct {
+	Payload *buf.Buffer
+	Source  net.Destination
+	Target  net.Destination
+}

+ 1 - 0
common/protocol/udp/udp.go

@@ -0,0 +1 @@
+package udp

+ 1 - 1
transport/internet/kcp/listener.go

@@ -76,7 +76,7 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, stream
 func (l *Listener) handlePackets() {
 func (l *Listener) handlePackets() {
 	receive := l.hub.Receive()
 	receive := l.hub.Receive()
 	for payload := range receive {
 	for payload := range receive {
-		l.OnReceive(payload.Content, payload.Source)
+		l.OnReceive(payload.Payload, payload.Source)
 	}
 	}
 }
 }
 
 

+ 10 - 16
transport/internet/udp/hub.go

@@ -5,16 +5,10 @@ import (
 
 
 	"v2ray.com/core/common/buf"
 	"v2ray.com/core/common/buf"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/net"
+	"v2ray.com/core/common/protocol/udp"
 	"v2ray.com/core/transport/internet"
 	"v2ray.com/core/transport/internet"
 )
 )
 
 
-// Payload represents a single UDP payload.
-type Payload struct {
-	Content             *buf.Buffer
-	Source              net.Destination
-	OriginalDestination net.Destination
-}
-
 type HubOption func(h *Hub)
 type HubOption func(h *Hub)
 
 
 func HubCapacity(capacity int) HubOption {
 func HubCapacity(capacity int) HubOption {
@@ -31,7 +25,7 @@ func HubReceiveOriginalDestination(r bool) HubOption {
 
 
 type Hub struct {
 type Hub struct {
 	conn         *net.UDPConn
 	conn         *net.UDPConn
-	cache        chan *Payload
+	cache        chan *udp.Packet
 	capacity     int
 	capacity     int
 	recvOrigDest bool
 	recvOrigDest bool
 }
 }
@@ -62,7 +56,7 @@ func ListenUDP(ctx context.Context, address net.Address, port net.Port, streamSe
 	}
 	}
 	newError("listening UDP on ", address, ":", port).WriteToLog()
 	newError("listening UDP on ", address, ":", port).WriteToLog()
 	hub.conn = udpConn.(*net.UDPConn)
 	hub.conn = udpConn.(*net.UDPConn)
-	hub.cache = make(chan *Payload, hub.capacity)
+	hub.cache = make(chan *udp.Packet, hub.capacity)
 
 
 	go hub.start()
 	go hub.start()
 	return hub, nil
 	return hub, nil
@@ -106,14 +100,14 @@ func (h *Hub) start() {
 			continue
 			continue
 		}
 		}
 
 
-		payload := &Payload{
-			Content: buffer,
+		payload := &udp.Packet{
+			Payload: buffer,
 			Source:  net.UDPDestination(net.IPAddress(addr.IP), net.Port(addr.Port)),
 			Source:  net.UDPDestination(net.IPAddress(addr.IP), net.Port(addr.Port)),
 		}
 		}
 		if h.recvOrigDest && noob > 0 {
 		if h.recvOrigDest && noob > 0 {
-			payload.OriginalDestination = RetrieveOriginalDest(oobBytes[:noob])
-			if payload.OriginalDestination.IsValid() {
-				newError("UDP original destination: ", payload.OriginalDestination).AtDebug().WriteToLog()
+			payload.Target = RetrieveOriginalDest(oobBytes[:noob])
+			if payload.Target.IsValid() {
+				newError("UDP original destination: ", payload.Target).AtDebug().WriteToLog()
 			} else {
 			} else {
 				newError("failed to read UDP original destination").WriteToLog()
 				newError("failed to read UDP original destination").WriteToLog()
 			}
 			}
@@ -123,7 +117,7 @@ func (h *Hub) start() {
 		case c <- payload:
 		case c <- payload:
 		default:
 		default:
 			buffer.Release()
 			buffer.Release()
-			payload.Content = nil
+			payload.Payload = nil
 		}
 		}
 
 
 	}
 	}
@@ -134,6 +128,6 @@ func (h *Hub) Addr() net.Addr {
 	return h.conn.LocalAddr()
 	return h.conn.LocalAddr()
 }
 }
 
 
-func (h *Hub) Receive() <-chan *Payload {
+func (h *Hub) Receive() <-chan *udp.Packet {
 	return h.cache
 	return h.cache
 }
 }