Browse Source

Update freedom connection for UDP

V2Ray 10 years ago
parent
commit
557f411f85
1 changed files with 16 additions and 4 deletions
  1. 16 4
      proxy/freedom/freedom.go

+ 16 - 4
proxy/freedom/freedom.go

@@ -48,7 +48,7 @@ func (vconn *FreedomConnection) Start(ray core.OutboundRay) error {
 		go dumpInput(conn, input, &writeMutex)
 	}
 
-	go dumpOutput(conn, output, &readMutex)
+	go dumpOutput(conn, output, &readMutex, vconn.packet.Destination().IsUDP())
 
 	go func() {
 		writeMutex.Lock()
@@ -67,8 +67,20 @@ func dumpInput(conn net.Conn, input <-chan []byte, finish *sync.Mutex) {
 	finish.Unlock()
 }
 
-func dumpOutput(conn net.Conn, output chan<- []byte, finish *sync.Mutex) {
+func dumpOutput(conn net.Conn, output chan<- []byte, finish *sync.Mutex, udp bool) {
+	defer finish.Unlock()
+	defer close(output)
+
+	response, err := v2net.ReadFrom(conn)
+	if len(response) > 0 {
+		output <- response
+	}
+	if err != nil {
+		return
+	}
+	if udp {
+		return
+	}
+
 	v2net.ReaderToChan(output, conn)
-	finish.Unlock()
-	close(output)
 }