1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-12-30 14:05:26 -05:00

Fix Socks UDP implementation

This commit is contained in:
V2Ray
2015-10-05 16:57:50 +02:00
parent 3ac8b9caa5
commit eb94f7a51c
2 changed files with 27 additions and 3 deletions

View File

@@ -22,6 +22,28 @@ func (request *Socks5UDPRequest) Destination() v2net.Destination {
return v2net.NewUDPDestination(request.Address)
}
func (request *Socks5UDPRequest) Bytes(buffer []byte) []byte {
if buffer == nil {
buffer = make([]byte, 0, 2*1024)
}
buffer = append(buffer, 0, 0, request.Fragment)
switch {
case request.Address.IsIPv4():
buffer = append(buffer, AddrTypeIPv4)
buffer = append(buffer, request.Address.IP()...)
case request.Address.IsIPv6():
buffer = append(buffer, AddrTypeIPv6)
buffer = append(buffer, request.Address.IP()...)
case request.Address.IsDomain():
buffer = append(buffer, AddrTypeDomain)
buffer = append(buffer, byte(len(request.Address.Domain())))
buffer = append(buffer, []byte(request.Address.Domain())...)
}
buffer = append(buffer, request.Address.PortBytes()...)
buffer = append(buffer, request.Data...)
return buffer
}
func ReadUDPRequest(packet []byte) (request Socks5UDPRequest, err error) {
// packet[0] and packet[1] are reserved
request.Fragment = packet[2]