From 7c64093a7ac75db10d4d3eb4a573f87357166b1a Mon Sep 17 00:00:00 2001 From: v2ray Date: Tue, 5 Jan 2016 00:08:00 +0100 Subject: [PATCH] Output debug info when parsing VMess request --- proxy/vmess/protocol/vmess.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/proxy/vmess/protocol/vmess.go b/proxy/vmess/protocol/vmess.go index f74463db3..65f83259d 100644 --- a/proxy/vmess/protocol/vmess.go +++ b/proxy/vmess/protocol/vmess.go @@ -72,6 +72,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { nBytes, err := v2net.ReadAllBytes(reader, buffer.Value[:vmess.IDBytesLen]) if err != nil { + log.Debug("VMess: Failed to read request ID (%d bytes): %v", nBytes, err) return nil, err } @@ -82,6 +83,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { aesStream, err := v2crypto.NewAesDecryptionStream(userObj.ID().CmdKey(), user.Int64Hash(timeSec)) if err != nil { + log.Debug("VMess: Failed to create AES stream: %v", err) return nil, err } @@ -89,6 +91,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[:41]) if err != nil { + log.Debug("VMess: Failed to read request header (%d bytes): %v", nBytes, err) return nil, err } bufferLen := nBytes @@ -99,7 +102,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { } if request.Version != Version { - log.Warning("Invalid protocol version %d", request.Version) + log.Warning("VMess: Invalid protocol version %d", request.Version) return nil, proxy.InvalidProtocolVersion } @@ -112,30 +115,34 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { switch buffer.Value[40] { case addrTypeIPv4: - _, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:45]) // 4 bytes + nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:45]) // 4 bytes bufferLen += 4 if err != nil { + log.Debug("VMess: Failed to read target IPv4 (%d bytes): %v", nBytes, err) return nil, err } request.Address = v2net.IPAddress(buffer.Value[41:45]) case addrTypeIPv6: - _, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:57]) // 16 bytes + nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:57]) // 16 bytes bufferLen += 16 if err != nil { + log.Debug("VMess: Failed to read target IPv6 (%d bytes): %v", nBytes, err) return nil, err } request.Address = v2net.IPAddress(buffer.Value[41:57]) case addrTypeDomain: - _, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:42]) + nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:42]) if err != nil { + log.Debug("VMess: Failed to read target domain (%d bytes): %v", nBytes, err) return nil, err } domainLength := int(buffer.Value[41]) if domainLength == 0 { return nil, transport.CorruptedPacket } - _, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength]) + nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength]) if err != nil { + log.Debug("VMess: Failed to read target domain (%d bytes): %v", nBytes, err) return nil, err } bufferLen += 1 + domainLength @@ -143,8 +150,9 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) { request.Address = v2net.DomainAddress(string(domainBytes)) } - _, err = v2net.ReadAllBytes(decryptor, buffer.Value[bufferLen:bufferLen+4]) + nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[bufferLen:bufferLen+4]) if err != nil { + log.Debug("VMess: Failed to read checksum (%d bytes): %v", nBytes, err) return nil, err }