Browse Source

refine UDP over TCP

dev
破娃酱 7 years ago
parent
commit
f31a81665c
  1. 9
      shadowsocks/tcprelay.py

9
shadowsocks/tcprelay.py

@ -347,15 +347,11 @@ class TCPRelayHandler(object):
#logging.info('UDP over TCP sendto %d %s' % (len(data), binascii.hexlify(data))) #logging.info('UDP over TCP sendto %d %s' % (len(data), binascii.hexlify(data)))
while len(self._udp_data_send_buffer) > 6: while len(self._udp_data_send_buffer) > 6:
length = struct.unpack('>H', self._udp_data_send_buffer[:2])[0] length = struct.unpack('>H', self._udp_data_send_buffer[:2])[0]
if length >= 0xff00:
length = struct.unpack('>H', self._udp_data_send_buffer[1:3])[0] + 0xff00
if length > len(self._udp_data_send_buffer): if length > len(self._udp_data_send_buffer):
break break
data = self._udp_data_send_buffer[:length] data = self._udp_data_send_buffer[:length]
if length >= 0xff00:
data = data[1:]
self._udp_data_send_buffer = self._udp_data_send_buffer[length:] self._udp_data_send_buffer = self._udp_data_send_buffer[length:]
frag = common.ord(data[2]) frag = common.ord(data[2])
@ -953,10 +949,7 @@ class TCPRelayHandler(object):
ip = socket.inet_pton(socket.AF_INET6, addr[0]) ip = socket.inet_pton(socket.AF_INET6, addr[0])
data = b'\x00\x04' + ip + port + data data = b'\x00\x04' + ip + port + data
size = len(data) + 2 size = len(data) + 2
if size >= 0xff00: data = struct.pack('>H', size) + data
data = common.chr(0xff) + struct.pack('>H', size - 0xff00 + 1) + data
else:
data = struct.pack('>H', size) + data
#logging.info('UDP over TCP recvfrom %s:%d %d bytes to %s:%d' % (addr[0], addr[1], len(data), self._client_address[0], self._client_address[1])) #logging.info('UDP over TCP recvfrom %s:%d %d bytes to %s:%d' % (addr[0], addr[1], len(data), self._client_address[0], self._client_address[1]))
else: else:
if self._is_local: if self._is_local:

Loading…
Cancel
Save