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