answer.gid = config.user[1] answer.config = proxyConfig answer.key = config.key answer.mode = MODE except Exception,e: exception(e) error("We cannot answer an init query.") return False return True ipc.onQuery('init', ipcOnQueryInit) # ---------- initialize proxy processes for proxyName in config.listProxies(): proxyCommand = config.getProxyInitParameters(proxyName, ipc, args.debug) processes.new(proxyName, proxyCommand) # ---------- drop root privileges dropRoot(coreConfig.uid, coreConfig.gid) ############################################################################## # register exit function, and start IO loop reads = [ipc, tun] # for `select` function def doExit(signum, frame): global reads, processes info("Exit now.") # first close TUN devices
'-l', str(proxyConfig["client"]["port"]), # local port(entrance) '-m', ENCRYPTION_METHOD, # encryption method ] elif 's' == queried['mode']: # SERVER mode sscmd = [ proxyConfig["server"]["bin"], # shadowsocks-libev '-U', # UDP relay only '-k', sharedsecret, # key '-s', proxyConfig["server"]["ip"], # server host '-p', str(proxyConfig["server"]["port"]), # server port '-m', ENCRYPTION_METHOD, # encryption method ] else: sys.exit(127) procmgr.new('shadowsocks', sscmd) ############################################################################## proxySocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if 's' == queried["mode"]: proxySocket.bind(('127.0.0.1', forwardToPort)) proxyPeer = None # not knowing where to send data back else: # send to local tunnel entrance proxyPeer = ('127.0.0.1', proxyConfig["client"]["port"]) ##############################################################################