| 
					
				 | 
			
			
				@@ -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() 
			 |