示例#1
0
    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}
示例#2
0
    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)}