Exemple #1
0
    def getPeersReceived(self, res, address):
        """
        回应get_peers请求, 差不多跟findNodeReceived一样, 只回复nodes. 懒得维护peer信息
        """
        try:
            infohash = res["a"]["info_hash"]
            closeNodes = self.table.findCloseNodes(infohash, 16)
            if not closeNodes: return

            nid = res["a"]["id"]
            h = sha1()
            h.update(infohash + nid)
            token = h.hexdigest()[:TOKEN_LENGTH]
            msg = {
                "t": res["t"],
                "y": "r",
                "r": {
                    "id": self.table.nid,
                    "nodes": encodeNodes(closeNodes),
                    "token": token
                }
            }
            (ip, port) = address
            self.table.append(KNode(nid, ip, port))
            self.sendResponse(msg, address)
        except KeyError:
            pass
Exemple #2
0
    def findNodeReceived(self, res, address):
        """
        回应find_node请求
        """
        try:
            target = res["a"]["target"]
            closeNodes = self.table.findCloseNodes(target, 16)
            if not closeNodes: return

            msg = {
                "t": res["t"],
                "y": "r",
                "r": {"id": self.table.nid, "nodes": encodeNodes(closeNodes)}
            }
            nid = res["a"]["id"]
            (ip, port) = address
            self.table.append(KNode(nid, ip, port))
            self.sendResponse(msg, address)
        except KeyError:
            pass
Exemple #3
0
    def getPeersReceived(self, res, address):
        """
        回应get_peers请求, 差不多跟findNodeReceived一样, 只回复nodes. 懒得维护peer信息
        """
        try:
            infohash = res["a"]["info_hash"]
            closeNodes = self.table.findCloseNodes(infohash, 16)
            if not closeNodes: return

            nid = res["a"]["id"]
            h = sha1()
            h.update(infohash+nid)
            token = h.hexdigest()[:TOKEN_LENGTH]
            msg = {
                "t": res["t"],
                "y": "r",
                "r": {"id": self.table.nid, "nodes": encodeNodes(closeNodes), "token": token}
            }
            (ip, port) = address
            self.table.append(KNode(nid, ip, port))
            self.sendResponse(msg, address)
        except KeyError:
            pass