diff --git a/proxy/vmess/inbound.go b/proxy/vmess/inbound.go index ad39c5a10..67dd77c40 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 3707c2a61..b7277deb5 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) {