|  | @@ -5,11 +5,11 @@ import (
 | 
	
		
			
				|  |  |  	"crypto/aes"
 | 
	
		
			
				|  |  |  	"crypto/cipher"
 | 
	
		
			
				|  |  |  	"encoding/binary"
 | 
	
		
			
				|  |  | -	"errors"
 | 
	
		
			
				|  |  |  	"hash/fnv"
 | 
	
		
			
				|  |  |  	"io"
 | 
	
		
			
				|  |  |  	"time"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/common/errors"
 | 
	
		
			
				|  |  |  	v2io "github.com/v2ray/v2ray-core/common/io"
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/common/log"
 | 
	
		
			
				|  |  |  	v2net "github.com/v2ray/v2ray-core/common/net"
 | 
	
	
		
			
				|  | @@ -29,12 +29,6 @@ const (
 | 
	
		
			
				|  |  |  	blockSize = 16
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -var (
 | 
	
		
			
				|  |  | -	ErrorInvalidUser   = errors.New("Invalid User")
 | 
	
		
			
				|  |  | -	ErrorInvalidVerion = errors.New("Invalid Version")
 | 
	
		
			
				|  |  | -	ErrorInvalidHash   = errors.New("Invalid Hash")
 | 
	
		
			
				|  |  | -)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  // VMessRequest implements the request message of VMess protocol. It only contains the header of a
 | 
	
		
			
				|  |  |  // request message. The data part will be handled by conection handler directly, in favor of data
 | 
	
		
			
				|  |  |  // streaming.
 | 
	
	
		
			
				|  | @@ -82,7 +76,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	userId, timeSec, valid := r.vUserSet.GetUser(buffer[:nBytes])
 | 
	
		
			
				|  |  |  	if !valid {
 | 
	
		
			
				|  |  | -		return nil, ErrorInvalidUser
 | 
	
		
			
				|  |  | +		return nil, errors.NewAuthenticationError(buffer[:nBytes])
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	aesCipher, err := aes.NewCipher(userId.CmdKey())
 | 
	
	
		
			
				|  | @@ -108,8 +102,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if request.Version != Version {
 | 
	
		
			
				|  |  | -		log.Error("Unknown VMess version %d", request.Version)
 | 
	
		
			
				|  |  | -		return nil, ErrorInvalidVerion
 | 
	
		
			
				|  |  | +		return nil, errors.NewProtocolVersionError(int(request.Version))
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	copy(request.RequestIV[:], buffer[1:17])       // 16 bytes
 | 
	
	
		
			
				|  | @@ -159,7 +152,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 | 
	
		
			
				|  |  |  	expectedHash := binary.BigEndian.Uint32(buffer[bufferLen : bufferLen+4])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if actualHash != expectedHash {
 | 
	
		
			
				|  |  | -		return nil, ErrorInvalidHash
 | 
	
		
			
				|  |  | +		return nil, errors.NewCorruptedPacketError()
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	return request, nil
 |