diff --git a/common/protocol/headers.go b/common/protocol/headers.go index 33dbe5b29..0d9d2d96a 100644 --- a/common/protocol/headers.go +++ b/common/protocol/headers.go @@ -39,6 +39,13 @@ func (v Security) Is(t SecurityType) bool { return v == Security(t) } +func NormSecurity(s Security) Security { + if s.Is(SecurityType_UNKNOWN) { + return Security(SecurityType_LEGACY) + } + return s +} + type RequestHeader struct { Version byte User *User @@ -100,5 +107,5 @@ func (v *SecurityConfig) AsSecurity() Security { } return Security(SecurityType_CHACHA20_POLY1305) } - return Security(v.Type) + return NormSecurity(Security(v.Type)) } diff --git a/common/protocol/headers.pb.go b/common/protocol/headers.pb.go index 82d460d12..8e13ace0b 100644 --- a/common/protocol/headers.pb.go +++ b/common/protocol/headers.pb.go @@ -35,26 +35,29 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type SecurityType int32 const ( - SecurityType_NONE SecurityType = 0 + SecurityType_UNKNOWN SecurityType = 0 SecurityType_LEGACY SecurityType = 1 SecurityType_AUTO SecurityType = 2 SecurityType_AES128_GCM SecurityType = 3 SecurityType_CHACHA20_POLY1305 SecurityType = 4 + SecurityType_NONE SecurityType = 5 ) var SecurityType_name = map[int32]string{ - 0: "NONE", + 0: "UNKNOWN", 1: "LEGACY", 2: "AUTO", 3: "AES128_GCM", 4: "CHACHA20_POLY1305", + 5: "NONE", } var SecurityType_value = map[string]int32{ - "NONE": 0, + "UNKNOWN": 0, "LEGACY": 1, "AUTO": 2, "AES128_GCM": 3, "CHACHA20_POLY1305": 4, + "NONE": 5, } func (x SecurityType) String() string { @@ -79,7 +82,7 @@ func init() { func init() { proto.RegisterFile("v2ray.com/core/common/protocol/headers.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 227 bytes of a gzipped FileDescriptorProto + // 241 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x29, 0x33, 0x2a, 0x4a, 0xac, 0xd4, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x2f, 0x4a, 0xd5, 0x4f, 0xce, 0xcf, 0xcd, 0xcd, 0xcf, 0xd3, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0xce, 0xcf, 0xd1, 0xcf, 0x48, 0x4d, 0x4c, 0x49, @@ -87,12 +90,13 @@ var fileDescriptor0 = []byte{ 0x54, 0x2a, 0xf9, 0x71, 0xf1, 0x05, 0xa7, 0x26, 0x97, 0x16, 0x65, 0x96, 0x54, 0x3a, 0xe7, 0xe7, 0xa5, 0x65, 0xa6, 0x0b, 0xd9, 0x70, 0xb1, 0x94, 0x54, 0x16, 0xa4, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x19, 0x69, 0xe8, 0xe1, 0xd6, 0xac, 0x07, 0xd3, 0x19, 0x52, 0x59, 0x90, 0x1a, 0x04, 0xd6, - 0xa5, 0x15, 0xca, 0xc5, 0x83, 0x2c, 0x2a, 0xc4, 0xc1, 0xc5, 0xe2, 0xe7, 0xef, 0xe7, 0x2a, 0xc0, - 0x20, 0xc4, 0xc5, 0xc5, 0xe6, 0xe3, 0xea, 0xee, 0xe8, 0x1c, 0x29, 0xc0, 0x08, 0x12, 0x75, 0x0c, - 0x0d, 0xf1, 0x17, 0x60, 0x12, 0xe2, 0xe3, 0xe2, 0x72, 0x74, 0x0d, 0x36, 0x34, 0xb2, 0x88, 0x77, - 0x77, 0xf6, 0x15, 0x60, 0x16, 0x12, 0xe5, 0x12, 0x74, 0xf6, 0x70, 0x74, 0xf6, 0x70, 0x34, 0x32, - 0x88, 0x0f, 0xf0, 0xf7, 0x89, 0x34, 0x34, 0x36, 0x30, 0x15, 0x60, 0x71, 0xb2, 0xe0, 0x92, 0x4b, - 0xce, 0xcf, 0xc5, 0xe3, 0x16, 0x27, 0x1e, 0x0f, 0x88, 0x9f, 0x03, 0x40, 0x02, 0x51, 0x1c, 0x30, - 0xf1, 0x24, 0x36, 0x30, 0xcb, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x1e, 0x65, 0x93, 0x33, - 0x01, 0x00, 0x00, + 0xa5, 0x95, 0xc4, 0xc5, 0x83, 0x2c, 0x2a, 0xc4, 0xcd, 0xc5, 0x1e, 0xea, 0xe7, 0xed, 0xe7, 0x1f, + 0xee, 0x27, 0xc0, 0x20, 0xc4, 0xc5, 0xc5, 0xe6, 0xe3, 0xea, 0xee, 0xe8, 0x1c, 0x29, 0xc0, 0x28, + 0xc4, 0xc1, 0xc5, 0xe2, 0x18, 0x1a, 0xe2, 0x2f, 0xc0, 0x24, 0xc4, 0xc7, 0xc5, 0xe5, 0xe8, 0x1a, + 0x6c, 0x68, 0x64, 0x11, 0xef, 0xee, 0xec, 0x2b, 0xc0, 0x2c, 0x24, 0xca, 0x25, 0xe8, 0xec, 0xe1, + 0xe8, 0xec, 0xe1, 0x68, 0x64, 0x10, 0x1f, 0xe0, 0xef, 0x13, 0x69, 0x68, 0x6c, 0x60, 0x2a, 0xc0, + 0x02, 0xd2, 0xe0, 0xe7, 0xef, 0xe7, 0x2a, 0xc0, 0xea, 0x64, 0xc1, 0x25, 0x97, 0x9c, 0x9f, 0x8b, + 0xc7, 0x61, 0x4e, 0x3c, 0x1e, 0x90, 0x00, 0x08, 0x00, 0x09, 0x44, 0x71, 0xc0, 0xc4, 0x93, 0xd8, + 0xc0, 0x2c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xda, 0x88, 0xd8, 0x40, 0x01, 0x00, + 0x00, } diff --git a/common/protocol/headers.proto b/common/protocol/headers.proto index b2d841cfa..25c5fdceb 100644 --- a/common/protocol/headers.proto +++ b/common/protocol/headers.proto @@ -6,11 +6,12 @@ option java_package = "com.v2ray.core.common.protocol"; option java_outer_classname = "HeadersProto"; enum SecurityType { - NONE = 0; + UNKNOWN = 0; LEGACY = 1; AUTO = 2; AES128_GCM = 3; CHACHA20_POLY1305 = 4; + NONE = 5; } message SecurityConfig { diff --git a/proxy/vmess/encoding/server.go b/proxy/vmess/encoding/server.go index dee9e759b..8fbb65ed2 100644 --- a/proxy/vmess/encoding/server.go +++ b/proxy/vmess/encoding/server.go @@ -92,7 +92,7 @@ func (v *ServerSession) DecodeRequestHeader(reader io.Reader) (*protocol.Request v.responseHeader = buffer[33] // 1 byte request.Option = protocol.RequestOption(buffer[34]) // 1 byte padingLen := int(buffer[35] >> 4) - request.Security = protocol.Security(buffer[35] & 0x0F) + request.Security = protocol.NormSecurity(protocol.Security(buffer[35] & 0x0F)) // 1 bytes reserved request.Command = protocol.RequestCommand(buffer[37]) diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index 1c212ab29..0d57f8bec 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -187,6 +187,7 @@ func (v *VMessInboundHandler) HandleConnection(connection internet.Connection) { go func() { bodyReader := session.DecodeRequestBody(request, reader) if err := buf.PipeUntilEOF(bodyReader, input); err != nil { + log.Debug("VMess|Inbound: Error when sending data to outbound: ", err) connection.SetReusable(false) } bodyReader.Release() @@ -219,6 +220,7 @@ func (v *VMessInboundHandler) HandleConnection(connection internet.Connection) { writer.SetCached(false) if err := buf.PipeUntilEOF(output, bodyWriter); err != nil { + log.Debug("VMess|Inbound: Error when sending data to downstream: ", err) connection.SetReusable(false) }