def system_init(): lock_file_exists = os.path.exists(get_file_directory()+"/.init.lock") if lock_file_exists == False: init() else: send_pack = { "command": "register_server", "info":{ "listen_port":config["SERVER_LISTEN_PORT"], "location":config["SERVER_LOCATION"], "service_quota":config["SERVICE_QUOTA"] } } # send for i in range(0,3): return_data = send_socket_request( config["CONTROL_SERVER_IP"], config["CONTROL_SERVER_TCP_PORT"], json.dumps(send_pack), type="TCP" ) if return_data["status"] == "success": print("register succeed.") break else: time.sleep(1) # initialize database ssServerDatabase() serviceInfo() # remove the lock os.remove(get_file_directory()+"/.init.lock") init() pass
def halt_shadowsocks_service(service_idf): rtn = returnModel() from model.db_ss_server import ssServerDatabase from proc.proc_ss import ssProcess ssDB = ssServerDatabase() ssProc = ssProcess() item = ssDB.getItem(service_idf) if item == None: return rtn.error(500) elif item["status"] == "error": return rtn.error(item["code"]) else: port = int(item["info"]["server_port"]) kill_proc = ssProc.checkProcess(port=port) # can not find pid in the system if len(kill_proc) == 0: return rtn.error(450) else: _pid = kill_proc[0]["pid"] result = ssProc.killProcess(_pid) if result == False: return rtn.error(450) else: # kill record in database ssDB.deleteInstance(service_idf) return rtn.success(200)
def start_shadowsocks(): return_data_config = { "server_port" : "", "password" : "", "method" : "", "timeout" : "" } return_data = { "service_idf":"", "config":return_data_config } rtn = returnModel() from model.db_ss_server import ssServerDatabase from proc.proc_ss import ssProcess ssDB = ssServerDatabase() ssProc = ssProcess() port = 0 # lock: to prevent infinite loop (for any reason) lock = 20 while lock > 0: lock -= 1 rand_port = randint(config["SHADOWSOCKS_MIN_PORT"],config["SHADOWSOCKS_MAX_PORT"]) if ssDB.portCollision(int(rand_port)) == False: port = rand_port break if port == 0: return rtn.error(422) else: # first generate params service_idf = gen_service_idf() service_port = port service_password = gen_password(16) service_method = config["SS_DEFAULT_METHOD"] service_timeout = config["SS_DEFAULT_TIMEOUT"] res = ssDB.insertServerInstance(service_idf,service_port ,service_password,service_method,service_timeout) if res == None: return rtn.error(423) elif res["status"] == "error": return rtn.error(423) elif res["status"] == "success": # insert success, then create real process result = ssProc.createProcess(service_port,service_password,service_timeout,service_method) # if the process not open successfully (maybe... just not install ss-server LOL) # (2015-12-06)UPDATE : DO NOT CHECK THE RESULT OF PROCESS CREATION!! # insert config data return_data_config["server_port"] = service_port return_data_config["password"] = service_password return_data_config["method"] = service_method return_data_config["timeout"] = service_timeout return_data["service_idf"] = service_idf return rtn.success(return_data) pass
def get_shadowsocks_conf(service_idf): rtn = returnModel() from model.db_ss_server import ssServerDatabase ssDB = ssServerDatabase() item = ssDB.getItem(service_idf) if item == None: return rtn.error(500) elif item["status"] == "error": return rtn.error(item['code']) else: return rtn.success(item['info'])