|  | @@ -178,7 +178,21 @@ func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<-
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	log.Info("VMessOut received %d bytes from %s", buffer.Len()-4, conn.RemoteAddr().String())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	buffer.SliceFrom(4)
 | 
	
		
			
				|  |  | +	responseBegin := 4
 | 
	
		
			
				|  |  | +	if buffer.Value[2] != 0 {
 | 
	
		
			
				|  |  | +		dataLen := int(buffer.Value[3])
 | 
	
		
			
				|  |  | +		if buffer.Len() < dataLen+4 { // Rare case
 | 
	
		
			
				|  |  | +			diffBuffer := make([]byte, dataLen+4-buffer.Len())
 | 
	
		
			
				|  |  | +			v2net.ReadAllBytes(decryptResponseReader, diffBuffer)
 | 
	
		
			
				|  |  | +			buffer.Append(diffBuffer)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		command := buffer.Value[2]
 | 
	
		
			
				|  |  | +		data := buffer.Value[4 : 4+dataLen]
 | 
	
		
			
				|  |  | +		go handleCommand(command, data)
 | 
	
		
			
				|  |  | +		responseBegin = 4 + dataLen
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	buffer.SliceFrom(responseBegin)
 | 
	
		
			
				|  |  |  	output <- buffer
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if !isUDP {
 |