def handleGotNodes(self, dict):
     _krpc_sender = dict['_krpc_sender']
     dict = dict['rsp']
     sender = {'id' : dict["id"]}
     sender['port'] = _krpc_sender[1]        
     sender['host'] = _krpc_sender[0]        
     sender = self.table.Node().initWithDict(sender)
     try:
         l = unpackNodes(dict.get("nodes", []))
         if not self.answered.has_key(sender.id):
             self.answered[sender.id] = sender
         insort(self.answeredq, NodeWrap(sender, self.num))
     except:
         l = []
         self.table.invalidateNode(sender)
         
     if self.finished:
         # a day late and a dollar short
         return
     self.outstanding = self.outstanding - 1
     for node in l:
         n = self.table.Node().initWithDict(node)
         if not self.found.has_key(n.id) and not self.queried.has_key(n.id):
             self.found[n.id] = n
             insort(self.foundq, NodeWrap(n, self.num))
             self.table.insertNode(n, contacted=0)
     self.schedule()
Example #2
0
    def handleGotNodes(self, dict):
        _krpc_sender = dict['_krpc_sender']
        dict = dict['rsp']
        sender = {'id': dict["id"]}
        sender['port'] = _krpc_sender[1]
        sender['host'] = _krpc_sender[0]
        sender = self.table.Node().initWithDict(sender)
        try:
            l = unpackNodes(dict.get("nodes", []))
            if not self.answered.has_key(sender.id):
                self.answered[sender.id] = sender
            insort(self.answeredq, NodeWrap(sender, self.num))
        except:
            l = []
            self.table.invalidateNode(sender)

        if self.finished:
            # a day late and a dollar short
            return
        self.outstanding = self.outstanding - 1
        for node in l:
            n = self.table.Node().initWithDict(node)
            if not self.found.has_key(n.id) and not self.queried.has_key(n.id):
                self.found[n.id] = n
                insort(self.foundq, NodeWrap(n, self.num))
                self.table.insertNode(n, contacted=0)
        self.schedule()
Example #3
0
    def handleGotNodes(self, dict):
        _krpc_sender = dict['_krpc_sender']
        dict = dict['rsp']
        sender = {'id': dict["id"]}
        sender['port'] = _krpc_sender[1]
        sender['host'] = _krpc_sender[0]
        sender = self.table.Node().initWithDict(sender)

        if self.finished or self.answered.has_key(sender.id):
            # a day late and a dollar short
            return
        self.outstanding = self.outstanding - 1

        answered = True

        # go through nodes
        # if we have any closer than what we already got, query them
        if dict.has_key('nodes'):
            try:
                l = unpackNodes(dict.get('nodes', []))
            except:
                # considered an incorrect answer
                answered = False
                l = []

            for node in l:
                n = self.table.Node().initWithDict(node)
                if not self.found.has_key(n.id):
                    self.table.insertNode(n)
                    self.found[n.id] = n
                    insort(self.foundq, NodeWrap(n, self.num))
        elif dict.has_key('values'):

            def x(y, z=self.results):
                if not z.has_key(y):
                    z[y] = 1
                    return y
                else:
                    return None

            z = len(dict.get('values', []))
            v = filter(None, map(x, dict.get('values', [])))
            if (len(v)):
                self.callLater(0, self.callback, v)

        if answered:
            self.answered[sender.id] = sender
            insort(self.answeredq, NodeWrap(sender, self.num))

        self.schedule()
    def handleGotNodes(self, dict):
        _krpc_sender = dict['_krpc_sender']
        dict = dict['rsp']
        sender = {'id' : dict["id"]}
        sender['port'] = _krpc_sender[1]
        sender['host'] = _krpc_sender[0]                
        sender = self.table.Node().initWithDict(sender)
        
        if self.finished or self.answered.has_key(sender.id):
            # a day late and a dollar short
            return
        self.outstanding = self.outstanding - 1

        answered = True
        
        # go through nodes
        # if we have any closer than what we already got, query them
        if dict.has_key('nodes'):
            try:
                l = unpackNodes(dict.get('nodes',[]))
            except:
                # considered an incorrect answer
                answered = False
                l = []
            
            for node in l:
                n = self.table.Node().initWithDict(node)
                if not self.found.has_key(n.id):
                    self.table.insertNode(n)
                    self.found[n.id] = n
                    insort(self.foundq, NodeWrap(n, self.num))
        elif dict.has_key('values'):
            def x(y, z=self.results):
                if not z.has_key(y):
                    z[y] = 1
                    return y
                else:
                    return None
            z = len(dict.get('values', []))
            v = filter(None, map(x, dict.get('values',[])))
            if(len(v)):
                self.callLater(0, self.callback, v)

        if answered:
            self.answered[sender.id] = sender
            insort(self.answeredq, NodeWrap(sender, self.num))
            
        self.schedule()
Example #5
0
    def handleGotNodes(self, dict):
        _krpc_sender = dict["_krpc_sender"]
        dict = dict["rsp"]
        sender = {"id": dict["id"]}
        sender["port"] = _krpc_sender[1]
        sender["host"] = _krpc_sender[0]
        sender = self.table.Node().initWithDict(sender)

        if self.finished or self.answered.has_key(sender.id):
            # a day late and a dollar short
            return
        self.outstanding = self.outstanding - 1

        self.answered[sender.id] = sender
        # go through nodes
        # if we have any closer than what we already got, query them
        if dict.has_key("nodes"):
            try:
                l = unpackNodes(dict.get("nodes", []))
            except:
                l = []
                del (self.answered[sender.id])

            for node in l:
                n = self.table.Node().initWithDict(node)
                if not self.found.has_key(n.id):
                    self.table.insertNode(n)
                    self.found[n.id] = n
                    insort(self.foundq, NodeWrap(n, self.num))
        elif dict.has_key("values"):

            def x(y, z=self.results):
                if not z.has_key(y):
                    z[y] = 1
                    return y
                else:
                    return None

            z = len(dict.get("values", []))
            v = filter(None, map(x, dict.get("values", [])))
            if len(v):
                self.callLater(0, self.callback, v)
        self.schedule()