def krpc_find_node(self, target, id, _krpc_sender, **kwargs): """Incoming RPC: got find_node""" if len(id) != 20: raise KrpcProtocolError("invalid id length: %d" % len(id)) if len(target) != 20: raise KrpcProtocolError("invalid target id length: %d" % len(target)) nodes = self.table.findNodes(target) nodes = map(lambda node: node.senderDict(), nodes) n = self.Node().init(id, *_krpc_sender) self.insertNode(n, contacted = False) return {"nodes" : encodeNodes(nodes), "id" : self.node.id}
def krpc_get_peers(self, id, info_hash, _krpc_sender, **kwargs): """Incoming RPC: got get_peers""" if len(id) != 20: raise KrpcProtocolError("invalid id length: %d" % len(id)) if len(info_hash) != 20: raise KrpcProtocolError("invalid info_hash length: %d" % len(info_hash)) if id == NULL_ID: raise KrpcProtocolError("invalid id (NULL ID)") n = self.Node().init(id, *_krpc_sender) self.insertNode(n, contacted = False) l = self._retrieveValue(info_hash) if len(l) > 0: return {'values' : l, "id": self.node.id, "token" : self.tokensHandler.tokenToSend(info_hash, *_krpc_sender)} else: nodes = self.table.findNodes(info_hash) nodes = map(lambda node: node.senderDict(), nodes) return {'nodes' : encodeNodes(nodes), "id": self.node.id, "token" : self.tokensHandler.tokenToSend(info_hash, *_krpc_sender)}