Skip to content

Commit 82f8fef

Browse files
committed
allow set speed limit in runtime
1 parent f22ef99 commit 82f8fef

File tree

5 files changed

+40
-17
lines changed

5 files changed

+40
-17
lines changed

db_transfer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def del_server_out_of_bound_safe(self, last_rows, rows):
123123
continue
124124

125125
if allow:
126-
allow_users[port] = passwd
126+
allow_users[port] = cfg
127127
if 'protocol' in cfg and 'protocol_param' in cfg and common.to_str(cfg['protocol']) in obfs.mu_protocol():
128128
if '#' in common.to_str(cfg['protocol_param']):
129129
mu_servers[port] = passwd

mujson_mgr.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def print_server_help():
239239

240240

241241
def main():
242-
shortopts = 'adeclu:i:p:k:O:o:G:g:m:t:f:h'
242+
shortopts = 'adeclu:i:p:k:O:o:G:g:m:t:f:hs:S:'
243243
longopts = ['help']
244244
action = None
245245
user = {}
@@ -302,6 +302,10 @@ def main():
302302
user['obfs_param'] = value
303303
elif key == '-G':
304304
user['protocol_param'] = value
305+
elif key == '-s':
306+
user['speed_limit_per_con'] = int(value)
307+
elif key == '-S':
308+
user['speed_limit_per_user'] = int(value)
305309
elif key == '-m':
306310
if value in fast_set_method:
307311
user['method'] = fast_set_method[value]

server_pool.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from shadowsocks import shell, eventloop, tcprelay, udprelay, asyncdns, common
2929
import threading
3030
import sys
31+
import traceback
3132
from socket import *
3233
from configloader import load_config, get_config
3334

@@ -80,12 +81,10 @@ def _loop(loop, dns_resolver, mgr):
8081
loop.run()
8182
except (KeyboardInterrupt, IOError, OSError) as e:
8283
logging.error(e)
83-
import traceback
8484
traceback.print_exc()
8585
os.exit(0)
8686
except Exception as e:
8787
logging.error(e)
88-
import traceback
8988
traceback.print_exc()
9089

9190
def server_is_run(self, port):

shadowsocks/tcprelay.py

+25-6
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,11 @@ def _create_encryptor(self, config):
273273
def _update_user(self, user):
274274
self._user = user
275275
self._user_id = struct.unpack('<I', user)[0]
276+
if self._user in self._server.server_users_cfg:
277+
cfg = self._server.server_users_cfg[self._user]
278+
speed = cfg.get('speed_limit_per_con', 0)
279+
self.speed_tester_u.update_limit(speed)
280+
self.speed_tester_d.update_limit(speed)
276281

277282
def _update_activity(self, data_len=0):
278283
# tell the TCP Relay we have activities recently
@@ -1168,6 +1173,7 @@ def __init__(self, config, dns_resolver, is_local, stat_callback=None, stat_coun
11681173
self.server_transfer_ul = 0
11691174
self.server_transfer_dl = 0
11701175
self.server_users = {}
1176+
self.server_users_cfg = {}
11711177
self.server_user_transfer_ul = {}
11721178
self.server_user_transfer_dl = {}
11731179
self.mu = False
@@ -1258,9 +1264,9 @@ def _update_users(self, protocol_param, acl):
12581264
self.del_user(uid)
12591265
else:
12601266
passwd = items[1]
1261-
self.add_user(uid, passwd)
1267+
self.add_user(uid, {'password':passwd})
12621268

1263-
def update_user(self, id, passwd):
1269+
def _update_user(self, id, passwd):
12641270
uid = struct.pack('<I', id)
12651271
self.add_user(uid, passwd)
12661272

@@ -1273,12 +1279,25 @@ def update_users(self, users):
12731279
uid = struct.pack('<I', id)
12741280
self.add_user(uid, users[id])
12751281

1276-
def add_user(self, user, passwd): # user: binstr[4], passwd: str
1277-
self.server_users[user] = common.to_bytes(passwd)
1282+
def add_user(self, uid, cfg): # user: binstr[4], passwd: str
1283+
passwd = cfg['password']
1284+
self.server_users[uid] = common.to_bytes(passwd)
1285+
self.server_users_cfg[uid] = cfg
1286+
speed = cfg.get("speed_limit_per_user", 0)
1287+
if uid in self._speed_tester_u:
1288+
self._speed_tester_u[uid].update_limit(speed)
1289+
else:
1290+
self._speed_tester_u[uid] = SpeedTester(speed)
1291+
if uid in self._speed_tester_d:
1292+
self._speed_tester_d[uid].update_limit(speed)
1293+
else:
1294+
self._speed_tester_d[uid] = SpeedTester(speed)
12781295

1279-
def del_user(self, user):
1296+
def del_user(self, uid):
12801297
if user in self.server_users:
1281-
del self.server_users[user]
1298+
del self.server_users[uid]
1299+
if user in self.server_users_cfg:
1300+
del self.server_users_cfg[uid]
12821301

12831302
def add_transfer_u(self, user, transfer):
12841303
if user is None:

shadowsocks/udprelay.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,9 @@ def _update_users(self, protocol_param, acl):
249249
self.del_user(uid)
250250
else:
251251
passwd = items[1]
252-
self.add_user(uid, passwd)
252+
self.add_user(uid, {'password':passwd})
253253

254-
def update_user(self, id, passwd):
254+
def _update_user(self, id, passwd):
255255
uid = struct.pack('<I', id)
256256
self.add_user(uid, passwd)
257257

@@ -264,12 +264,13 @@ def update_users(self, users):
264264
uid = struct.pack('<I', id)
265265
self.add_user(uid, users[id])
266266

267-
def add_user(self, user, passwd): # user: binstr[4], passwd: str
268-
self.server_users[user] = common.to_bytes(passwd)
267+
def add_user(self, uid, cfg): # user: binstr[4], passwd: str
268+
passwd = cfg['password']
269+
self.server_users[uid] = common.to_bytes(passwd)
269270

270-
def del_user(self, user):
271-
if user in self.server_users:
272-
del self.server_users[user]
271+
def del_user(self, uid):
272+
if uid in self.server_users:
273+
del self.server_users[uid]
273274

274275
def add_transfer_u(self, user, transfer):
275276
if user is None:

0 commit comments

Comments
 (0)