Пример #1
0
    def worker(self):
        """Process nodes from toscan to scanned until network walked."""
        while True:
            time.sleep(THREAD_SLEEP)

            # get next node to scan
            with self.mutex:
                node = self.get_next_node()
                if node is None and len(self.scanning) == 0:
                    return  # done! Nothing to scan and nothing being scanned

            # no node to scan but other workers still scanning, more may come
            if node is None:
                continue

            # get neighbors
            address = storjnode.util.node_id_to_address(node.id)
            _log.info("Scanning {0}".format(address))
            d = self.server.protocol.callFindNode(node, node)
            d = util.default_defered(d, [])
            try:
                neighbours = util.wait_for_defered(d, timeout=QUERY_TIMEOUT)
            except TimeoutError:  # pragma: no cover
                msg = "Timeout getting neighbors of %s"  # pragma: no cover
                _log.warning(msg % address)  # pragma: no cover
                neighbours = []  # pragma: no cover

            # add to results and neighbours to scanned
            self.processed(node, neighbours)
Пример #2
0
    def worker(self):
        """Process nodes from toscan to scanned until network walked."""
        while True:
            time.sleep(0.002)

            # get next node to scan
            with self.mutex:
                node = self.get_next_node()
                if node is None and len(self.scanning) == 0:
                    return  # done! Nothing to scan and nothing being scanned

            # no node to scan but other workers still scanning, so more may come
            if node is None:
                continue

            # get neighbors
            d = self.server.protocol.callFindNode(node, node)
            d = util.default_defered(d, [])
            try:
                neighbours = util.wait_for_defered(d, timeout=QUERY_TIMEOUT)
            except TimeoutError:  # pragma: no cover
                msg = "Timeout when getting neighbors of %s"  # pragma: no cover
                hexid = binascii.hexlify(node.id)
                _log.debug(msg % hexid)  # pragma: no cover
                neighbours = []  # pragma: no cover

            # add to results and neighbours to scanned
            self.processed(node, neighbours)
Пример #3
0
    def worker(self):
        """Process nodes from toscan to scanned until network walked."""
        while True:
            time.sleep(0.002)

            # get next node to scan
            with self.mutex:
                node = self.get_next_node()
                if node is None and len(self.scanning) == 0:
                    return  # done! Nothing to scan and nothing being scanned

            # no node to scan but other workers still scanning, so more may come
            if node is None:
                continue

            # get neighbors
            d = self.server.protocol.callFindNode(node, node)
            d = util.default_defered(d, [])
            try:
                neighbours = util.wait_for_defered(d, timeout=QUERY_TIMEOUT)
            except TimeoutError:  # pragma: no cover
                msg = "Timeout when getting neighbors of %s"  # pragma: no cover
                hexid = binascii.hexlify(node.id)
                _log.debug(msg % hexid)  # pragma: no cover
                neighbours = []  # pragma: no cover

            # add to results and neighbours to scanned
            self.processed(node, neighbours)
Пример #4
0
    def _relay_message(self, entry):
        """Returns entry if failed to relay to a closer node or None"""

        dest = Node(entry["dest"])
        nearest = self.protocol.router.findNeighbors(dest, exclude=self.node)
        self.log.debug("Relaying to nearest: %s" % repr(nearest))
        for relay_node in nearest:

            # do not relay away from node
            if dest.distanceTo(self.node) <= dest.distanceTo(relay_node):
                msg = "Skipping %s, farther then self."
                self.log.debug(msg % repr(relay_node))
                continue

            # relay message
            hexid = binascii.hexlify(relay_node.id)
            self.log.debug("Attempting to relay message for %s" % hexid)
            defered = self.protocol.callRelayMessage(
                relay_node, entry["dest"], entry["hop_limit"], entry["message"]
            )
            defered = util.default_defered(defered, None)

            # wait for relay result
            try:
                result = util.wait_for_defered(defered, timeout=QUERY_TIMEOUT)
            except TimeoutError:  # pragma: no cover
                msg = "Timeout while relayed message to %s"  # pragma: no cover
                self.log.debug(msg % hexid)  # pragma: no cover
                result = None  # pragma: no cover

            # successfull relay
            if result is not None:
                self.log.debug("Successfully relayed message to %s" % hexid)
                return  # relay to nearest peer, avoid amplification attacks

        # failed to relay message
        dest_hexid = binascii.hexlify(entry["dest"])
        self.log.debug("Failed to relay message for %s" % dest_hexid)
Пример #5
0
    def _relay_message(self, entry):
        """Returns entry if failed to relay to a closer node or None"""

        dest = Node(entry["dest"])
        nearest = self.protocol.router.findNeighbors(dest, exclude=self.node)
        self.log.debug("Relaying to nearest: %s" % repr(nearest))
        for relay_node in nearest:

            # do not relay away from node
            if dest.distanceTo(self.node) <= dest.distanceTo(relay_node):
                msg = "Skipping %s, farther then self."
                self.log.debug(msg % repr(relay_node))
                continue

            # relay message
            hexid = binascii.hexlify(relay_node.id)
            self.log.debug("Attempting to relay message for %s" % hexid)
            defered = self.protocol.callRelayMessage(relay_node, entry["dest"],
                                                     entry["hop_limit"],
                                                     entry["message"])
            defered = util.default_defered(defered, None)

            # wait for relay result
            try:
                result = util.wait_for_defered(defered, timeout=QUERY_TIMEOUT)
            except TimeoutError:  # pragma: no cover
                msg = "Timeout while relayed message to %s"  # pragma: no cover
                self.log.debug(msg % hexid)  # pragma: no cover
                result = None  # pragma: no cover

            # successfull relay
            if result is not None:
                self.log.debug("Successfully relayed message to %s" % hexid)
                return  # relay to nearest peer, avoid amplification attacks

        # failed to relay message
        dest_hexid = binascii.hexlify(entry["dest"])
        self.log.debug("Failed to relay message for %s" % dest_hexid)