X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht_Khashmir%2Fkrpc.py;h=1428545430c104a20fc729e5d042715436295a5f;hb=a839a3f5c0091d275c64159ded0e12d36b5e2bdb;hp=40ab8d84145e3e7e5650f67abbb7edd95b785861;hpb=e6beef78406c3093fc4eb98c4293b9257b44aa61;p=quix0rs-apt-p2p.git diff --git a/apt_dht_Khashmir/krpc.py b/apt_dht_Khashmir/krpc.py index 40ab8d8..1428545 100644 --- a/apt_dht_Khashmir/krpc.py +++ b/apt_dht_Khashmir/krpc.py @@ -8,8 +8,11 @@ from traceback import format_exception from twisted.internet.defer import Deferred from twisted.internet import protocol, reactor +from twisted.python import log from twisted.trial import unittest +from khash import newID + KRPC_TIMEOUT = 20 KRPC_ERROR = 1 @@ -71,22 +74,22 @@ class KRPC: self.addr = addr self.noisy = spew self.tids = {} - self.mtid = 0 self.stopped = False def datagramReceived(self, str, addr): if self.stopped: if self.noisy: - print "stopped, dropping message from", addr, str + log.msg("stopped, dropping message from %r: %s" % (addr, str)) # bdecode try: msg = bdecode(str) except Exception, e: if self.noisy: - print "response decode error: " + `e` + log.msg("response decode error: ") + log.err(e) else: if self.noisy: - print self.factory.port, "received from", addr, self.addr, ":", msg + log.msg("%d received from %r: %s" % (self.factory.port, addr, msg)) # look at msg type if msg[TYP] == REQ: ilen = len(str) @@ -103,12 +106,12 @@ class KRPC: olen = self._sendResponse(addr, msg[TID], RSP, ret) else: if self.noisy: - print "don't know about method %s" % msg[REQ] + log.msg("don't know about method %s" % msg[REQ]) # unknown method olen = self._sendResponse(addr, msg[TID], ERR, KRPC_ERROR_METHOD_UNKNOWN) if self.noisy: - print "%s %s >>> %s - %s %s %s" % (asctime(), addr, self.factory.node.port, - ilen, msg[REQ], olen) + log.msg("%s >>> %s - %s %s %s" % (addr, self.factory.node.port, + ilen, msg[REQ], olen)) elif msg[TYP] == RSP: # if response # lookup tid @@ -118,8 +121,9 @@ class KRPC: del(self.tids[msg[TID]]) df.callback({'rsp' : msg[RSP], '_krpc_sender': addr}) else: - print 'timeout ' + `msg[RSP]['id']` # no tid, this transaction timed out already... + if self.noisy: + log.msg('timeout: %r' % msg[RSP]['id']) elif msg[TYP] == ERR: # if error # lookup tid @@ -132,7 +136,8 @@ class KRPC: # day late and dollar short pass else: - print "unknown message type " + `msg` + if self.noisy: + log.msg("unknown message type: %r" % msg) # unknown message type df = self.tids[msg[TID]] # callback @@ -146,7 +151,7 @@ class KRPC: msg = {TID : tid, TYP : msgType, msgType : response} if self.noisy: - print self.factory.port, "responding to", addr, ":", msg + log.msg("%d responding to %r: %s" % (self.factory.port, addr, msg)) out = bencode(msg) self.transport.write(out, addr) @@ -157,10 +162,9 @@ class KRPC: raise ProtocolError, "connection has been stopped" # make message # send it - msg = {TID : chr(self.mtid), TYP : REQ, REQ : method, ARG : args} - self.mtid = (self.mtid + 1) % 256 + msg = {TID : newID(), TYP : REQ, REQ : method, ARG : args} if self.noisy: - print self.factory.port, "sending to", self.addr, ":", msg + log.msg("%d sending to %r: %s" % (self.factory.port, self.addr, msg)) str = bencode(msg) d = Deferred() self.tids[msg[TID]] = d @@ -168,7 +172,7 @@ class KRPC: if tids.has_key(id): df = tids[id] del(tids[id]) - print ">>>>>> KRPC_ERROR_TIMEOUT" + log.msg(">>>>>> KRPC_ERROR_TIMEOUT") df.errback(ProtocolError('timeout waiting for %r' % msg)) later = reactor.callLater(KRPC_TIMEOUT, timeOut) def dropTimeOut(dict, later_call = later):