Skip to content

Commit cb1dcac

Browse files
committed
refine recv size
try more data_size_list
1 parent 7dddf07 commit cb1dcac

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

shadowsocks/obfsplugin/auth_chain.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,16 +640,22 @@ def __init__(self, method):
640640
self.salt = b"auth_chain_b"
641641
self.no_compatible_method = 'auth_chain_b'
642642
self.data_size_list = []
643+
self.data_size_list2 = []
643644

644645
def init_data_size(self, key):
645646
if self.data_size_list:
646647
self.data_size_list = []
648+
self.data_size_list2 = []
647649
random = xorshift128plus()
648650
random.init_from_bin(key)
649-
list_len = random.next() % 16 + 4;
651+
list_len = random.next() % 16 + 4
650652
for i in range(0, list_len):
651653
self.data_size_list.append((int)(random.next() % 1440))
652654
self.data_size_list.sort()
655+
list_len = random.next() % 32 + 32
656+
for i in range(0, list_len):
657+
self.data_size_list2.append((int)(random.next() % 1440))
658+
self.data_size_list2.sort()
653659

654660
def set_server_info(self, server_info):
655661
self.server_info = server_info
@@ -669,6 +675,11 @@ def rnd_data_len(self, buf_size, last_hash, random):
669675
if final_pos < len(self.data_size_list):
670676
return self.data_size_list[final_pos] - buf_size - self.server_info.overhead
671677

678+
pos = bisect.bisect_left(self.data_size_list2, buf_size + self.server_info.overhead)
679+
final_pos = pos + random.next() % (len(self.data_size_list2) + 1 - pos)
680+
if final_pos < len(self.data_size_list2):
681+
return self.data_size_list2[final_pos] - buf_size - self.server_info.overhead
682+
672683
if buf_size > 1300:
673684
return random.next() % 31
674685
if buf_size > 900:

shadowsocks/tcprelay.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -816,15 +816,15 @@ def _get_read_size(self, sock, recv_buffer_size, up):
816816
if self._overhead == 0:
817817
return recv_buffer_size
818818
buffer_size = len(sock.recv(recv_buffer_size, socket.MSG_PEEK))
819+
frame_size = self._tcp_mss - self._overhead
819820
if up:
820821
buffer_size = min(buffer_size, self._recv_u_max_size)
821-
self._recv_u_max_size = min(self._recv_u_max_size + self._tcp_mss - self._overhead, BUF_SIZE)
822+
self._recv_u_max_size = min(self._recv_u_max_size + frame_size, BUF_SIZE)
822823
else:
823824
buffer_size = min(buffer_size, self._recv_d_max_size)
824-
self._recv_d_max_size = min(self._recv_d_max_size + self._tcp_mss - self._overhead, BUF_SIZE)
825+
self._recv_d_max_size = min(self._recv_d_max_size + frame_size, BUF_SIZE)
825826
if buffer_size == recv_buffer_size:
826827
return buffer_size
827-
frame_size = self._tcp_mss - self._overhead
828828
if buffer_size > frame_size:
829829
buffer_size = int(buffer_size / frame_size) * frame_size
830830
return buffer_size

0 commit comments

Comments
 (0)