Пример #1
0
	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
Пример #3
0
    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
Пример #4
0
	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())
Пример #5
0
    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())