|  | @@ -28,15 +28,13 @@ type VNextServer struct {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type VMessOutboundHandler struct {
 | 
	
		
			
				|  |  |  	vPoint       *core.Point
 | 
	
		
			
				|  |  | -	packet       v2net.Packet
 | 
	
		
			
				|  |  |  	vNextList    []VNextServer
 | 
	
		
			
				|  |  |  	vNextListUDP []VNextServer
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func NewVMessOutboundHandler(vp *core.Point, vNextList, vNextListUDP []VNextServer, firstPacket v2net.Packet) *VMessOutboundHandler {
 | 
	
		
			
				|  |  | +func NewVMessOutboundHandler(vp *core.Point, vNextList, vNextListUDP []VNextServer) *VMessOutboundHandler {
 | 
	
		
			
				|  |  |  	return &VMessOutboundHandler{
 | 
	
		
			
				|  |  |  		vPoint:       vp,
 | 
	
		
			
				|  |  | -		packet:       firstPacket,
 | 
	
		
			
				|  |  |  		vNextList:    vNextList,
 | 
	
		
			
				|  |  |  		vNextListUDP: vNextListUDP,
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -65,28 +63,28 @@ func pickVNext(serverList []VNextServer) (v2net.Destination, user.User) {
 | 
	
		
			
				|  |  |  	return vNext.Destination, vNextUser
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (handler *VMessOutboundHandler) Start(ray core.OutboundRay) error {
 | 
	
		
			
				|  |  | +func (handler *VMessOutboundHandler) Dispatch(firstPacket v2net.Packet, ray core.OutboundRay) error {
 | 
	
		
			
				|  |  |  	vNextList := handler.vNextList
 | 
	
		
			
				|  |  | -	if handler.packet.Destination().IsUDP() {
 | 
	
		
			
				|  |  | +	if firstPacket.Destination().IsUDP() {
 | 
	
		
			
				|  |  |  		vNextList = handler.vNextListUDP
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	vNextAddress, vNextUser := pickVNext(vNextList)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	command := protocol.CmdTCP
 | 
	
		
			
				|  |  | -	if handler.packet.Destination().IsUDP() {
 | 
	
		
			
				|  |  | +	if firstPacket.Destination().IsUDP() {
 | 
	
		
			
				|  |  |  		command = protocol.CmdUDP
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	request := &protocol.VMessRequest{
 | 
	
		
			
				|  |  |  		Version: protocol.Version,
 | 
	
		
			
				|  |  |  		UserId:  vNextUser.Id,
 | 
	
		
			
				|  |  |  		Command: command,
 | 
	
		
			
				|  |  | -		Address: handler.packet.Destination().Address(),
 | 
	
		
			
				|  |  | +		Address: firstPacket.Destination().Address(),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	rand.Read(request.RequestIV[:])
 | 
	
		
			
				|  |  |  	rand.Read(request.RequestKey[:])
 | 
	
		
			
				|  |  |  	rand.Read(request.ResponseHeader[:])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	go startCommunicate(request, vNextAddress, ray, handler.packet)
 | 
	
		
			
				|  |  | +	go startCommunicate(request, vNextAddress, ray, firstPacket)
 | 
	
		
			
				|  |  |  	return nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -195,7 +193,7 @@ func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<-
 | 
	
		
			
				|  |  |  type VMessOutboundHandlerFactory struct {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (factory *VMessOutboundHandlerFactory) Create(vp *core.Point, rawConfig interface{}, firstPacket v2net.Packet) (core.OutboundConnectionHandler, error) {
 | 
	
		
			
				|  |  | +func (factory *VMessOutboundHandlerFactory) Create(vp *core.Point, rawConfig interface{}) (core.OutboundConnectionHandler, error) {
 | 
	
		
			
				|  |  |  	config := rawConfig.(*VMessOutboundConfig)
 | 
	
		
			
				|  |  |  	servers := make([]VNextServer, 0, len(config.VNextList))
 | 
	
		
			
				|  |  |  	udpServers := make([]VNextServer, 0, len(config.VNextList))
 | 
	
	
		
			
				|  | @@ -207,7 +205,7 @@ func (factory *VMessOutboundHandlerFactory) Create(vp *core.Point, rawConfig int
 | 
	
		
			
				|  |  |  			udpServers = append(udpServers, server.ToVNextServer("udp"))
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	return NewVMessOutboundHandler(vp, servers, udpServers, firstPacket), nil
 | 
	
		
			
				|  |  | +	return NewVMessOutboundHandler(vp, servers, udpServers), nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func init() {
 |