Exemple #1
0
        def func(address, *args):
            msgID = sha1(str(random.getrandbits(255))).digest()
            d = defer.Deferred()
            if name != "hole_punch":
                seed = SEED_NODE_TESTNET if self.multiplexer.testnet else SEED_NODE
                if address in self.multiplexer and self.multiplexer[address].state == State.CONNECTED:
                    timeout = timeout = reactor.callLater(self._waitTimeout, self.timeout, address)
                else:
                    timeout = reactor.callLater(self._waitTimeout, self.hole_punch, seed,
                                                address[0], address[1], "True", msgID)
                self._outstanding[msgID] = [d, address, timeout]
                self.log.debug("calling remote function %s on %s (msgid %s)" % (name, address, b64encode(msgID)))
            elif args[3] in self._outstanding:
                prev_msgID = args[3]
                args = args[:3]
                deferred, addr, hp = self._outstanding[prev_msgID]  # pylint: disable=W0612
                timeout = reactor.callLater(3, self.timeout, addr)
                self._outstanding[prev_msgID] = [deferred, addr, timeout]
                self.log.debug("sending hole punch message to %s" % args[0] + ":" + str(args[1]))

            m = Message()
            m.messageID = msgID
            m.sender.MergeFrom(self.sourceNode.getProto())
            m.command = Command.Value(name.upper())
            m.protoVer = PROTOCOL_VERSION
            for arg in args:
                m.arguments.append(str(arg))
            m.testnet = self.multiplexer.testnet
            data = m.SerializeToString()

            self.multiplexer.send_message(data, address)
            return d
Exemple #2
0
 def func(address, *args):
     msgID = sha1(str(random.getrandbits(255))).digest()
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.sourceNode.getProto())
     m.command = Command.Value(name.upper())
     m.protoVer = PROTOCOL_VERSION
     for arg in args:
         m.arguments.append(str(arg))
     m.testnet = self.multiplexer.testnet
     data = m.SerializeToString()
     d = defer.Deferred()
     if name != "hole_punch":
         seed = SEED_NODE_TESTNET if self.multiplexer.testnet else SEED_NODE
         hole_punch = reactor.callLater(3, self.hole_punch, seed,
                                        address[0], address[1], "True")
         if address in self.multiplexer:
             hole_punch.cancel()
         self._outstanding[msgID] = [d, address, hole_punch]
         self.log.debug("calling remote function %s on %s (msgid %s)" %
                        (name, address, b64encode(msgID)))
     else:
         self.log.debug("sending hole punch message to %s" % args[0] +
                        ":" + str(args[1]))
     self.multiplexer.send_message(data, address)
     return d
        def func(node, *args):
            msgID = sha1(str(random.getrandbits(255))).digest()

            m = Message()
            m.messageID = msgID
            m.sender.MergeFrom(self.sourceNode.getProto())
            m.command = Command.Value(name.upper())
            m.protoVer = PROTOCOL_VERSION
            for arg in args:
                m.arguments.append(str(arg))
            m.testnet = self.multiplexer.testnet
            data = m.SerializeToString()

            address = (node.ip, node.port)
            relay_addr = None
            if node.nat_type == SYMMETRIC or \
                    (node.nat_type == RESTRICTED and self.sourceNode.nat_type == SYMMETRIC):
                relay_addr = node.relay_node

            d = defer.Deferred()
            if m.command != HOLE_PUNCH:
                timeout = reactor.callLater(self._waitTimeout, self.timeout, node)
                self._outstanding[msgID] = [d, address, timeout]
                self.log.debug("calling remote function %s on %s (msgid %s)" % (name, address, b64encode(msgID)))

            self.multiplexer.send_message(data, address, relay_addr)

            if self.multiplexer[address].state != State.CONNECTED and \
                            node.nat_type == RESTRICTED and \
                            self.sourceNode.nat_type != SYMMETRIC:
                self.hole_punch(Node(digest("null"), node.relay_node[0], node.relay_node[1], nat_type=FULL_CONE),
                                address[0], address[1], "True")
                self.log.debug("sending hole punch message to %s" % address[0] + ":" + str(address[1]))

            return d
        def func(node, *args):
            msgID = sha1(str(random.getrandbits(255))).digest()

            m = Message()
            m.messageID = msgID
            m.sender.MergeFrom(self.sourceNode.getProto())
            m.command = Command.Value(name.upper())
            m.protoVer = PROTOCOL_VERSION
            for arg in args:
                m.arguments.append(str(arg))
            m.testnet = self.multiplexer.testnet
            data = m.SerializeToString()

            address = (node.ip, node.port)
            relay_addr = None
            if node.nat_type == SYMMETRIC or \
                    (node.nat_type == RESTRICTED and self.sourceNode.nat_type == SYMMETRIC):
                relay_addr = node.relay_node

            d = defer.Deferred()
            if m.command != HOLE_PUNCH:
                timeout = reactor.callLater(self._waitTimeout, self.timeout, node)
                self._outstanding[msgID] = [d, address, timeout]
                self.log.debug("calling remote function %s on %s (msgid %s)" % (name, address, b64encode(msgID)))

            self.multiplexer.send_message(data, address, relay_addr)

            if self.multiplexer[address].state != State.CONNECTED and \
                            node.nat_type == RESTRICTED and \
                            self.sourceNode.nat_type != SYMMETRIC:
                self.hole_punch(Node(digest("null"), node.relay_node[0], node.relay_node[1], nat_type=FULL_CONE),
                                address[0], address[1], "True")
                self.log.debug("sending hole punch message to %s" % address[0] + ":" + str(address[1]))

            return d
 def _sendResponse(self, response, funcname, msgID, sender, connection):
     self.log.debug("sending response for msg id %s to %s" % (b64encode(msgID), sender))
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.proto)
     m.protoVer = PROTOCOL_VERSION
     m.testnet = self.multiplexer.testnet
     if response is None:
         m.command = NOT_FOUND
     else:
         m.command = Command.Value(funcname.upper())
         for arg in response:
             m.arguments.append(str(arg))
     data = m.SerializeToString()
     connection.send_message(data)
Exemple #6
0
 def _sendResponse(self, response, funcname, msgID, sender, connection):
     self.log.debug("sending response for msg id %s to %s" %
                    (b64encode(msgID), sender))
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.sourceNode.getProto())
     m.protoVer = PROTOCOL_VERSION
     m.testnet = self.multiplexer.testnet
     if response is None:
         m.command = NOT_FOUND
     else:
         m.command = Command.Value(funcname.upper())
         for arg in response:
             m.arguments.append(str(arg))
     data = m.SerializeToString()
     connection.send_message(data)
Exemple #7
0
 def func(address, *args):
     msgID = sha1(str(random.getrandbits(255))).digest()
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.proto)
     m.command = Command.Value(name.upper())
     m.protoVer = PROTOCOL_VERSION
     for arg in args:
         m.arguments.append(str(arg))
     m.testnet = self.multiplexer.testnet
     data = m.SerializeToString()
     d = defer.Deferred()
     self._outstanding[msgID] = [d, address]
     self.multiplexer.send_message(data, address)
     self.log.debug("calling remote function %s on %s (msgid %s)" % (name, address, b64encode(msgID)))
     return d
 def _sendResponse(self, response, funcname, msgID, sender, connection):
     self.log.debug("sending response for msg id %s to %s" % (b64encode(msgID), sender))
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.sourceNode.getProto())
     m.protoVer = PROTOCOL_VERSION
     m.testnet = self.multiplexer.testnet
     if response is None:
         m.command = NOT_FOUND
     else:
         m.command = Command.Value(funcname.upper())
         if not isinstance(response, list):
             response = [response]
         for arg in response:
             m.arguments.append(str(arg))
     m.signature = self.signing_key.sign(m.SerializeToString())[:64]
     connection.send_message(m.SerializeToString())
 def func(address, *args):
     msgID = sha1(str(random.getrandbits(255))).digest()
     m = Message()
     m.messageID = msgID
     m.sender.MergeFrom(self.sourceNode.getProto())
     m.command = Command.Value(name.upper())
     m.protoVer = PROTOCOL_VERSION
     for arg in args:
         m.arguments.append(str(arg))
     m.testnet = self.multiplexer.testnet
     data = m.SerializeToString()
     d = defer.Deferred()
     if name != "hole_punch":
         seed = SEED_NODE_TESTNET if self.multiplexer.testnet else SEED_NODE
         hole_punch = reactor.callLater(3, self.hole_punch, seed, address[0], address[1], "True")
         if address in self.multiplexer:
             hole_punch.cancel()
         self._outstanding[msgID] = [d, address, hole_punch]
         self.log.debug("calling remote function %s on %s (msgid %s)" % (name, address, b64encode(msgID)))
     else:
         self.log.debug("sending hole punch message to %s" % args[0] + ":" + str(args[1]))
     self.multiplexer.send_message(data, address)
     return d