Explorar el Código

allow multiple UDP incoming packets in freedom

Darien Raymond hace 9 años
padre
commit
3b1f92b7e8
Se han modificado 2 ficheros con 7 adiciones y 13 borrados
  1. 1 1
      common/net/timed_io.go
  2. 6 12
      proxy/freedom/freedom.go

+ 1 - 1
common/net/timed_io.go

@@ -16,7 +16,7 @@ type TimeOutReader struct {
 	worker     io.Reader
 }
 
-func NewTimeOutReader(timeout int, connection net.Conn) *TimeOutReader {
+func NewTimeOutReader(timeout int /* seconds */, connection net.Conn) *TimeOutReader {
 	reader := &TimeOutReader{
 		connection: connection,
 		timeout:    -100,

+ 6 - 12
proxy/freedom/freedom.go

@@ -1,6 +1,7 @@
 package freedom
 
 import (
+  "io"
 	"net"
 	"sync"
 
@@ -58,21 +59,14 @@ func (this *FreedomConnection) Dispatch(firstPacket v2net.Packet, ray ray.Outbou
 		defer readMutex.Unlock()
 		defer close(output)
 
-		response, err := v2io.ReadFrom(conn, nil)
-		log.Info("Freedom receives ", response.Len(), " bytes from ", conn.RemoteAddr())
-		if response.Len() > 0 {
-			output <- response
-		} else {
-			response.Release()
-		}
-		if err != nil {
-			return
-		}
+		var reader io.Reader
+		reader = conn
+
 		if firstPacket.Destination().IsUDP() {
-			return
+			reader = v2net.NewTimeOutReader(4 /* seconds */, conn)
 		}
 
-		v2io.RawReaderToChan(output, conn)
+		v2io.RawReaderToChan(output, reader)
 	}()
 
 	writeMutex.Lock()