示例#1
0
文件: kwebd.py 项目: paul-axe/darknet
    def _fetchUrl(self, url, headers, htl):
        doHttp = False
        if htl <= 0:
            doHttp = True
        # if random, doHttp = True
        if not doHttp:
            addr = kenosis.randomNodeAddress()
            nodes = self.node_.findNearestNodes(nodeAddress=addr, serviceName="kweb")
            for nodeAddr, netAddr in nodes:
                if nodeAddr == self.node_.nodeAddress():
                    continue
                sys.stderr.write("forwarding request to nodeAddress %s, netAddr %s\n" % (nodeAddr, netAddr))
                return self.node_.rpc(nodeAddress=nodeAddr).kweb.fetchUrl(url, headers, htl-1)
            doHttp = True

        if doHttp:
            sys.stderr.write("making HTTP request for %s\n" % url)
            
            request = urllib2.Request(url)
            for k,v in headers.items():
                k = k.capitalize()
                request.add_header(k,v)
            opener = urllib2.build_opener()
            try:
                urlHandle = opener.open(request)
            except urllib2.HTTPError, e:
                response = e.code
                urlHandle = e
            else:
                response = 200

            urlHandle.headers["connection"] = "close"
            headersReturn = dict(urlHandle.headers.items())
            return response, headersReturn, xmlrpclib.Binary(urlHandle.read())
示例#2
0
文件: kwebd.py 项目: paul-axe/darknet
    def do_GET(self):
        host = self.headers["Host"]
        realHost = host.replace(kwebSuffix, "")

        # fixme: remove once we're running as *.kweb.kenosisp2p.org
        if hostOverride:
            realHost = hostOverride

        self.headers["Host"] = realHost
        self.headers["Connection"] = "close"
        
        realUrl = "http://%s" % (realHost + self.path)
        addr = kenosis.randomNodeAddress()

        nodes = self.node_.findNearestNodes(nodeAddress=addr, serviceName="kweb")
        if not nodes:
            nodes = [(self.node_.nodeAddress(), "")]
        headersToSend = dict(self.headers.items())
        for nodeAddr, netAddr in nodes:
            try:
                response_code, headers, data = self.node_.rpc(nodeAddress=nodeAddr).kweb.fetchUrl(realUrl, headersToSend, 0)
            except kenosis.KenosisError, e:
                dsunittest.traceException("error with nodeAddress %s, netAddress %s" % (nodeAddr, netAddr))
                lastError = e
            else:
                break
示例#3
0
文件: test.py 项目: paul-axe/darknet
    def testFindNearestOnRealNetwork(self):
        import kenosis
        n = kenosis.Node()

        # findNearestNodes is slow because it wants to find 20 working
        # nodes but most of the time our network does not have that
        # many nodes so it has to try to contact every on the network
        # before giving up.
        nodeAddress = kenosis.randomNodeAddress()
        for x in range(2):
            nodeInfos = n.findNearestNodes(
                nodeAddress=nodeAddress, serviceName="kenosis")
            print("Found nodes: %s" % nodeInfos)

        n.stopEvent_.set()
示例#4
0
文件: test.py 项目: paul-axe/darknet
 def testJunk(self):
     import kenosis
     n = kenosis.Node(useUpnp=False, useZeroconf=False)
     print("node %s on port %s" % (n.nodeAddress(), n.port()))
     print("found: %s" % n.findNearestNodes(nodeAddress=kenosis.randomNodeAddress(), serviceName="kenosis"))