| 
					
				 | 
			
			
				@@ -5,6 +5,7 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"io" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"strconv" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/v2ray/v2ray-core" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	v2io "github.com/v2ray/v2ray-core/common/io" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -14,6 +15,14 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/v2ray/v2ray-core/proxy/vmess/protocol/user" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  requestReadTimeOut = 4 * time.Second 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  zeroTime time.Time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type VMessInboundHandler struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	vPoint    *core.Point 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	clients   user.UserSet 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,12 +63,16 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	reader := protocol.NewVMessRequestReader(handler.clients) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Timeout 4 seconds to prevent DoS attack 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  connection.SetReadDeadline(time.Now().Add(requestReadTimeOut)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	request, err := reader.Read(connection) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		log.Warning("VMessIn: Invalid request from (%s): %v", connection.RemoteAddr().String(), err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	log.Debug("VMessIn: Received request for %s", request.Address.String()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Clear read timeout 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  connection.SetReadDeadline(zeroTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ray := handler.vPoint.NewInboundConnectionAccepted(request.Destination()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	input := ray.InboundInput() 
			 |