Browse Source

breaking change: update the way in vmess response validation

Darien Raymond 10 years ago
parent
commit
cab29a7bc9
2 changed files with 5 additions and 4 deletions
  1. 3 2
      proxy/vmess/inbound.go
  2. 2 2
      proxy/vmess/outbound.go

+ 3 - 2
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 {

+ 2 - 2
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) {