diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index eabafcf01..8a29ded16 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -1,4 +1,4 @@ -package vmess +package inbound import ( "crypto/md5" diff --git a/proxy/vmess/outbound/command.go b/proxy/vmess/outbound/command.go new file mode 100644 index 000000000..8f1415719 --- /dev/null +++ b/proxy/vmess/outbound/command.go @@ -0,0 +1,5 @@ +package outbound + +func handleCommand(command byte, data []byte) error { + return nil +} diff --git a/proxy/vmess/outbound/outbound.go b/proxy/vmess/outbound/outbound.go index e593431c1..01b82e03e 100644 --- a/proxy/vmess/outbound/outbound.go +++ b/proxy/vmess/outbound/outbound.go @@ -178,7 +178,21 @@ func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<- } log.Info("VMessOut received %d bytes from %s", buffer.Len()-4, conn.RemoteAddr().String()) - buffer.SliceFrom(4) + responseBegin := 4 + if buffer.Value[2] != 0 { + dataLen := int(buffer.Value[3]) + if buffer.Len() < dataLen+4 { // Rare case + diffBuffer := make([]byte, dataLen+4-buffer.Len()) + v2net.ReadAllBytes(decryptResponseReader, diffBuffer) + buffer.Append(diffBuffer) + } + command := buffer.Value[2] + data := buffer.Value[4 : 4+dataLen] + go handleCommand(command, data) + responseBegin = 4 + dataLen + } + + buffer.SliceFrom(responseBegin) output <- buffer if !isUDP {