X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=knode.py;h=30d19fb7ca369ee1154d6a7f90b94d65e2b5bfba;hb=7d427317cab577b54ab377100fdce5dc7d5366dc;hp=52abbed41f81d217b029e578579868274faade69;hpb=e04df494d939e3bb644f788a02123ec05f4c8df4;p=quix0rs-apt-p2p.git diff --git a/knode.py b/knode.py index 52abbed..30d19fb 100644 --- a/knode.py +++ b/knode.py @@ -1,27 +1,40 @@ from node import Node from twisted.internet.defer import Deferred from xmlrpcclient import XMLRPCClientFactory as factory -from const import reactor -from base64 import encodestring as encode +from const import reactor, NULL_ID +from xmlrpclib import Binary + class KNode(Node): + def makeResponse(self, df): + def _callback(args, d=df): + try: + l, sender = args + except: + d.callback(args) + else: + if self.id != NULL_ID and sender['id'].data != self.id: + d.errback() + else: + d.callback(args) + return _callback def ping(self, sender): df = Deferred() - f = factory('ping', (sender,), df.callback, df.errback) + f = factory('ping', (sender,), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def findNode(self, target, sender): df = Deferred() - f = factory('find_node', (target, sender), df.callback, df.errback) + f = factory('find_node', (Binary(target), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def storeValue(self, key, value, sender): df = Deferred() - f = factory('store_value', (encode(key), encode(value), sender), df.callback, df.errback) + f = factory('store_value', (Binary(key), Binary(value), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def findValue(self, key, sender): df = Deferred() - f = factory('find_value', (encode(key), sender), df.callback, df.errback) + f = factory('find_value', (Binary(key), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df