|
@@ -4,6 +4,7 @@ import (
|
|
|
"v2ray.com/core/common/bitmask"
|
|
"v2ray.com/core/common/bitmask"
|
|
|
"v2ray.com/core/common/buf"
|
|
"v2ray.com/core/common/buf"
|
|
|
"v2ray.com/core/common/net"
|
|
"v2ray.com/core/common/net"
|
|
|
|
|
+ "v2ray.com/core/common/protocol"
|
|
|
"v2ray.com/core/common/serial"
|
|
"v2ray.com/core/common/serial"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -27,14 +28,6 @@ const (
|
|
|
TargetNetworkUDP TargetNetwork = 0x02
|
|
TargetNetworkUDP TargetNetwork = 0x02
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-type AddressType byte
|
|
|
|
|
-
|
|
|
|
|
-const (
|
|
|
|
|
- AddressTypeIPv4 AddressType = 0x01
|
|
|
|
|
- AddressTypeDomain AddressType = 0x02
|
|
|
|
|
- AddressTypeIPv6 AddressType = 0x03
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
/*
|
|
/*
|
|
|
Frame format
|
|
Frame format
|
|
|
2 bytes - length
|
|
2 bytes - length
|
|
@@ -79,16 +72,16 @@ func (f FrameMetadata) AsSupplier() buf.Supplier {
|
|
|
addr := f.Target.Address
|
|
addr := f.Target.Address
|
|
|
switch addr.Family() {
|
|
switch addr.Family() {
|
|
|
case net.AddressFamilyIPv4:
|
|
case net.AddressFamilyIPv4:
|
|
|
- b = append(b, byte(AddressTypeIPv4))
|
|
|
|
|
|
|
+ b = append(b, byte(protocol.AddressTypeIPv4))
|
|
|
b = append(b, addr.IP()...)
|
|
b = append(b, addr.IP()...)
|
|
|
length += 5
|
|
length += 5
|
|
|
case net.AddressFamilyIPv6:
|
|
case net.AddressFamilyIPv6:
|
|
|
- b = append(b, byte(AddressTypeIPv6))
|
|
|
|
|
|
|
+ b = append(b, byte(protocol.AddressTypeIPv6))
|
|
|
b = append(b, addr.IP()...)
|
|
b = append(b, addr.IP()...)
|
|
|
length += 17
|
|
length += 17
|
|
|
case net.AddressFamilyDomain:
|
|
case net.AddressFamilyDomain:
|
|
|
nDomain := len(addr.Domain())
|
|
nDomain := len(addr.Domain())
|
|
|
- b = append(b, byte(AddressTypeDomain), byte(nDomain))
|
|
|
|
|
|
|
+ b = append(b, byte(protocol.AddressTypeDomain), byte(nDomain))
|
|
|
b = append(b, addr.Domain()...)
|
|
b = append(b, addr.Domain()...)
|
|
|
length += nDomain + 2
|
|
length += nDomain + 2
|
|
|
}
|
|
}
|
|
@@ -115,18 +108,18 @@ func ReadFrameFrom(b []byte) (*FrameMetadata, error) {
|
|
|
if f.SessionStatus == SessionStatusNew {
|
|
if f.SessionStatus == SessionStatusNew {
|
|
|
network := TargetNetwork(b[0])
|
|
network := TargetNetwork(b[0])
|
|
|
port := net.PortFromBytes(b[1:3])
|
|
port := net.PortFromBytes(b[1:3])
|
|
|
- addrType := AddressType(b[3])
|
|
|
|
|
|
|
+ addrType := protocol.AddressType(b[3])
|
|
|
b = b[4:]
|
|
b = b[4:]
|
|
|
|
|
|
|
|
var addr net.Address
|
|
var addr net.Address
|
|
|
switch addrType {
|
|
switch addrType {
|
|
|
- case AddressTypeIPv4:
|
|
|
|
|
|
|
+ case protocol.AddressTypeIPv4:
|
|
|
addr = net.IPAddress(b[0:4])
|
|
addr = net.IPAddress(b[0:4])
|
|
|
b = b[4:]
|
|
b = b[4:]
|
|
|
- case AddressTypeIPv6:
|
|
|
|
|
|
|
+ case protocol.AddressTypeIPv6:
|
|
|
addr = net.IPAddress(b[0:16])
|
|
addr = net.IPAddress(b[0:16])
|
|
|
b = b[16:]
|
|
b = b[16:]
|
|
|
- case AddressTypeDomain:
|
|
|
|
|
|
|
+ case protocol.AddressTypeDomain:
|
|
|
nDomain := int(b[0])
|
|
nDomain := int(b[0])
|
|
|
addr = net.DomainAddress(string(b[1 : 1+nDomain]))
|
|
addr = net.DomainAddress(string(b[1 : 1+nDomain]))
|
|
|
b = b[nDomain+1:]
|
|
b = b[nDomain+1:]
|