From cab29a7bc9e44d8be558b1d9bbbe946b507cf618 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Tue, 1 Dec 2015 13:54:49 +0000 Subject: [PATCH] breaking change: update the way in vmess response validation --- proxy/vmess/inbound.go | 5 +++-- proxy/vmess/outbound.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/proxy/vmess/inbound.go b/proxy/vmess/inbound.go index ad39c5a1..67dd77c4 100644 --- a/proxy/vmess/inbound.go +++ b/proxy/vmess/inbound.go @@ -18,6 +18,7 @@ import ( "github.com/v2ray/v2ray-core/proxy/vmess/protocol/user" ) +// Inbound connection handler that handles messages in VMess format. type VMessInboundHandler struct { dispatcher app.PacketDispatcher clients user.UserSet @@ -101,8 +102,8 @@ func (this *VMessInboundHandler) HandleConnection(connection *net.TCPConn) error // Optimize for small response packet buffer := alloc.NewLargeBuffer().Clear() - buffer.AppendBytes(request.ResponseHeader[0] | request.ResponseHeader[1]) - buffer.AppendBytes(request.ResponseHeader[2] | request.ResponseHeader[3]) + buffer.AppendBytes(request.ResponseHeader[0] ^ request.ResponseHeader[1]) + buffer.AppendBytes(request.ResponseHeader[2] ^ request.ResponseHeader[3]) buffer.AppendBytes(byte(0), byte(0)) if data, open := <-output; open { diff --git a/proxy/vmess/outbound.go b/proxy/vmess/outbound.go index 3707c2a6..b7277deb 100644 --- a/proxy/vmess/outbound.go +++ b/proxy/vmess/outbound.go @@ -150,8 +150,8 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2 } func headerMatch(request *protocol.VMessRequest, responseHeader []byte) bool { - return ((request.ResponseHeader[0] | request.ResponseHeader[1]) == responseHeader[0]) && - ((request.ResponseHeader[2] | request.ResponseHeader[3]) == responseHeader[1]) + return ((request.ResponseHeader[0] ^ request.ResponseHeader[1]) == responseHeader[0]) && + ((request.ResponseHeader[2] ^ request.ResponseHeader[3]) == responseHeader[1]) } func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<- *alloc.Buffer, finish *sync.Mutex, isUDP bool) {