def get(self): """ @return: remoteServerConnectLocalHander """ self.remoteConnectListLoop += 1; remoteServerList = settingConfig.setting(settingConfig.remoteServerList) if self.remoteConnectListLoop >= len(remoteServerList)*maxConnectByOnServer: self.remoteConnectListLoop = 0 i = 0 for remoteServer in remoteServerList: connectList = None port = int(remoteServer["port"]) if remoteServer["port"] else 8082 remoteServerKey = remoteServer["host"]+":"+str(port) if remoteServerKey in self.remoteConnectList: connectList = self.remoteConnectList[remoteServerKey] else: self.remoteConnectList[remoteServerKey] = connectList = {} if self.remoteConnectListLoop >= i and self.remoteConnectListLoop < i + maxConnectByOnServer: index = self.remoteConnectListLoop-i connect = None if index in connectList: connect = connectList[index] else: connect = remoteServerConnectLocalHander(self.server) connect.connect((remoteServer["host"],port),True) connect.auth(remoteServer["auth"]) connect.setConnectCloseCallBack(-1,self.onConnectClose) connectList[index] = connect return connect i += maxConnectByOnServer return None
def get(self): """ @return: remoteServerConnectLocalHander """ self.remoteConnectListLoop += 1; remoteServerList = settingConfig.setting(settingConfig.remoteServerList) if remoteServerList == None: return None if self.remoteConnectListLoop >= len(remoteServerList)*maxConnectByOnServer: self.remoteConnectListLoop = 0 i = 0 for remoteServer in remoteServerList: connectList = None port = int(remoteServer["port"]) if remoteServer["port"] else 8082 remoteServerKey = remoteServer["host"]+":"+str(port) if remoteServerKey in self.remoteConnectList: connectList = self.remoteConnectList[remoteServerKey] else: self.remoteConnectList[remoteServerKey] = connectList = {} if self.remoteConnectListLoop >= i and self.remoteConnectListLoop < i + maxConnectByOnServer: index = self.remoteConnectListLoop-i connect = None if index in connectList: connect = connectList[index] if not connect.connectStatus() or ( remoteConnectMaxTime > 600 and connect.info["startTime"] + remoteConnectMaxTime < time.time()): connect = None if not connect: connect = remoteServerConnecter(self.server) connect.connect((remoteServer["host"],port),True) connect.auth(remoteServer["auth"]) connectList[index] = connect return connect i += maxConnectByOnServer return None
def get(self): """ @return: remoteServerConnectLocalHander """ remoteServerList = settingConfig.setting( settingConfig.remoteServerList) if remoteServerList == None: return None self.remoteConnectListLoop += 1 if self.remoteConnectListLoop >= maxConnectByOnServer: self.remoteConnectListLoop = 0 remoteConnect = None if self.remoteConnectListLoop < len(self.remoteConnectList): remoteConnect = self.remoteConnectList[self.remoteConnectListLoop] requestRemove = True for remoteServer in remoteServerList: port = int( remoteServer["port"]) if remoteServer["port"] else 8082 if (remoteServer['host'] == remoteConnect.address[0] and port == remoteConnect.address[1]): requestRemove = False break if ((not remoteConnect.connectStatus()) # or (connect.info["startTime"] + max(remoteConnectMaxTime, 600) < time.time()) or requestRemove or remoteConnect.slowConnectStatus): del self.remoteConnectList[self.remoteConnectListLoop] remoteConnect.requestIdleClose() remoteConnect = None if not remoteConnect: remoteConnect = remoteServerConnecter(self.server) remoteServer = random.choice(remoteServerList) def connectDone(ok): if ok: remoteConnect.auth(remoteServer["auth"]) port = int(remoteServer["port"]) if remoteServer["port"] else 8082 remoteConnect.connect((remoteServer["host"], port), True, connectDone) self.remoteConnectList.append(remoteConnect) return remoteConnect
def onHTTP(self, header, method, path, query, post): # log.log(1,self,header,method,path,query,post) if method == "POST": postJson = json.loads(post) opt = postJson["opt"] respons = {} if(opt == "status"): respons = self.server.dumpConnects() elif(opt == "serverList"): respons["pac"] = "http://" + self.httpMessageParse.getHeader("host") + "/pac" respons["list"] = settingConfig.setting(settingConfig.remoteServerList) respons["version"] = version.version elif opt == "setServerList": settingConfig.setting(settingConfig.remoteServerList, postJson["data"]) respons["status"] = "ok" # elif opt == "testRemoteProxy": # respons["status"] = "" elif opt == "domainList": if "action" in postJson: action = postJson["action"] domain = postJson["domain"] respons={"status":"ok"} if action == "delete": domainConfig.config.removeDomain(domain) elif action == "open": domainConfig.config.openDomain(domain) elif action == "close": domainConfig.config.closeDomain(domain) else: respons={"status":"no found action"} else: respons["domainList"] = domainConfig.config.getDomainListWithAnalysis() elif opt == "analysisData": respons["analysisData"] = analysis.getAnalysisData( selectDomain=postJson["domain"], startTime=postJson["startTime"], todayStartTime=postJson["todayStartTime"] ) elif opt == "addDomain": url = postJson["url"] host = parserUrlAddrPort(url)[0] if host: host = getDomainName(host) else: host = url if getDomainName(url) else "" respons["status"] = "ok" if domainConfig.config.addDomain(host) else "error" self.reseponse(respons,connection=self.httpMessageParse.connection()) elif path == "/pac": content = self.getFileContent(dirname(__file__) + "/template/pac.js") content = content.replace("{{domainWhiteListJson}}", json.dumps(domainConfig.config.getDomainList(0))) content = content.replace("{{domainListJson}}", json.dumps(domainConfig.config.getDomainList(1))) content = content.replace("{{proxy_ddr}}", self.httpMessageParse.getHeader("host")) self.reseponse(content,connection=self.httpMessageParse.connection()) else: if path == "/": path = "/index.html" content = self.getFileContent(dirname(__file__) + "/template" +path) if content: self.reseponse(content,ContentType=get_mime_type(path),connection=self.httpMessageParse.connection()) else: self.reseponse("\"" + path + "\" not found", code=404,connection=self.httpMessageParse.connection())
def onHTTP(self, header, method, path, query, post): # log.log(1,self,header,method,path,query,post) if method == "POST": postJson = json.loads(post) opt = postJson["opt"] respons = {} if (opt == "status"): respons = self.server.dumpConnects() elif (opt == "serverList"): respons["pac"] = "http://" + self.httpMessageParse.getHeader( "host") + "/pac" respons["proxyAddr"] = parserUrlAddrPort(respons["pac"]) respons["list"] = settingConfig.setting( settingConfig.remoteServerList) respons["version"] = version.version elif opt == "setServerList": settingConfig.setting(settingConfig.remoteServerList, postJson["data"]) respons["status"] = "ok" # elif opt == "testRemoteProxy": # respons["status"] = "" elif opt == "domainList": if "action" in postJson: action = postJson["action"] domain = postJson["domain"] respons = {"status": "ok"} if action == "delete": domainConfig.config.removeDomain(domain) elif action == "open": domainConfig.config.openDomain(domain) elif action == "close": domainConfig.config.closeDomain(domain) else: respons = {"status": "no found action"} else: respons[ "domainList"] = domainConfig.config.getDomainListWithAnalysis( ) elif opt == "analysisData": respons["analysisData"] = analysis.getAnalysisData( selectDomain=postJson["domain"], startTime=postJson["startTime"], todayStartTime=postJson["todayStartTime"]) elif opt == "restore": if postJson["clearAll"]: domainConfig.config.setting = {} domainList = postJson["domainList"] for domain in domainList: domainConfig.config.addDomain( domain[0], Open=domain[1], updateTime=domain[2] if len(domain) > 2 else 0) respons["status"] = "ok" elif opt == "addDomain": url = postJson["url"] host = parserUrlAddrPort(url)[0] if host: host = getDomainName(host) else: host = url if getDomainName(url) else "" respons["status"] = "ok" if domainConfig.config.addDomain( host) else "error" self.reseponse(respons, connection=self.httpMessageParse.connection()) elif path == "/pac": content = self.getFileContent( dirname(__file__) + "/template/pac.js") content = content.replace( "{{domainWhiteListJson}}", json.dumps(domainConfig.config.getDomainList(0))) content = content.replace( "{{domainListJson}}", json.dumps(domainConfig.config.getDomainList(1))) content = content.replace("{{proxy_ddr}}", self.httpMessageParse.getHeader("host")) self.reseponse(content, connection=self.httpMessageParse.connection()) else: if path == "/": path = "/index.html" content = self.getFileContent( dirname(__file__) + "/template" + path) if content and path.find("..") == -1: self.reseponse(content, ContentType=get_mime_type(path), connection=self.httpMessageParse.connection()) else: self.reseponse("\"" + path + "\" not found", code=404, connection=self.httpMessageParse.connection())