X-Git-Url: https://git.mxchange.org/?p=quix0rs-apt-p2p.git;a=blobdiff_plain;f=apt_dht_Khashmir%2Factions.py;h=6766cd9c6169dd8301cd6ff6c052d663175b0541;hp=8da4431dcd1d110e05c9cf429ea58fc4ab3bb435;hb=8f102eb1964db2ac18d4bac9e399c069a4cb616e;hpb=b4ad0e73eced53fb46c41fe1511d03c4f2466dba diff --git a/apt_dht_Khashmir/actions.py b/apt_dht_Khashmir/actions.py index 8da4431..6766cd9 100644 --- a/apt_dht_Khashmir/actions.py +++ b/apt_dht_Khashmir/actions.py @@ -2,8 +2,10 @@ # see LICENSE.txt for license information from twisted.internet import reactor +from twisted.python import log from khash import intify +from util import uncompact class ActionBase: """ base class for some long running asynchronous proccesses like finding nodes or values """ @@ -43,13 +45,16 @@ class FindNode(ActionBase): dict = dict['rsp'] n = self.caller.Node(dict["id"], _krpc_sender[0], _krpc_sender[1]) self.caller.insertNode(n) + if dict["id"] in self.found: + self.found[dict["id"]].updateToken(dict.get('token', '')) l = dict["nodes"] if self.finished or self.answered.has_key(dict["id"]): # a day late and a dollar short return self.outstanding = self.outstanding - 1 self.answered[dict["id"]] = 1 - for node in l: + for compact_node in l: + node = uncompact(compact_node) n = self.caller.Node(node) if not self.found.has_key(n.id): self.found[n.id] = n @@ -83,7 +88,8 @@ class FindNode(ActionBase): def makeMsgFailed(self, node): def defaultGotNodes(err, self=self, node=node): - print ">>> find failed (%s) %s/%s" % (self.config['PORT'], node.host, node.port), err + log.msg("find failed (%s) %s/%s" % (self.config['PORT'], node.host, node.port)) + log.err(err) self.caller.table.nodeFailed(node) self.outstanding = self.outstanding - 1 self.schedule() @@ -123,7 +129,8 @@ class GetValue(FindNode): # go through nodes # if we have any closer than what we already got, query them if dict.has_key('nodes'): - for node in dict['nodes']: + for compact_node in dict['nodes']: + node = uncompact(compact_node) n = self.caller.Node(node) if not self.found.has_key(n.id): self.found[n.id] = n @@ -153,7 +160,7 @@ class GetValue(FindNode): try: f = getattr(node, self.findValue) except AttributeError: - print ">>> findValue %s doesn't have a %s method!" % (node, self.findValue) + log.msg("findValue %s doesn't have a %s method!" % (node, self.findValue)) else: df = f(self.target, self.caller.node.id) df.addCallback(self.handleGotNodes) @@ -184,10 +191,9 @@ class GetValue(FindNode): class StoreValue(ActionBase): - def __init__(self, caller, target, value, originated, callback, config, store="storeValue"): + def __init__(self, caller, target, value, callback, config, store="storeValue"): ActionBase.__init__(self, caller, target, callback, config) self.value = value - self.originated = originated self.stored = [] self.store = store @@ -206,7 +212,7 @@ class StoreValue(ActionBase): return t def storeFailed(self, t, node): - print ">>> store failed %s/%s" % (node.host, node.port) + log.msg("store failed %s/%s" % (node.host, node.port)) self.caller.nodeFailed(node) self.outstanding -= 1 if self.finished: @@ -233,9 +239,9 @@ class StoreValue(ActionBase): try: f = getattr(node, self.store) except AttributeError: - print ">>> %s doesn't have a %s method!" % (node, self.store) + log.msg("%s doesn't have a %s method!" % (node, self.store)) else: - df = f(self.target, self.value, self.originated, self.caller.node.id) + df = f(self.target, self.value, node.token, self.caller.node.id) df.addCallback(self.storedValue, node=node) df.addErrback(self.storeFailed, node=node)