Esempio n. 1
0
    def add_peer(self, addr, process_check_connections=True):
        log.info("Adding peer (addr=[{}]).".format(addr))

        peer = Peer()
        peer.address = addr

        added = yield from self.add_peers([peer], process_check_connections)

        if added:
            return added[0]
Esempio n. 2
0
    def add_peer(self, addr, process_check_connections=True):
        log.info("Adding peer (addr=[{}]).".format(addr))

        peer = Peer()
        peer.address = addr

        added = yield from self.add_peers([peer], process_check_connections)

        if added:
            return added[0]
Esempio n. 3
0
            def dbcall():
                with self.node.db.open_session() as sess:
                    self.node.db.lock_table(sess, Peer)
                    dbpeer = sess.query(Peer)\
                        .filter(Peer.node_id == peer.node_id).first()

                    if not dbpeer:
                        # An incoming connection from an unknown Peer.
                        dbpeer = Peer()
                        dbpeer.node_id = peer.node_id
                        dbpeer.pubkey = peer.node_key.asbytes()

                        dbpeer.distance = peer.distance
                        dbpeer.direction = peer.direction

                        if dbpeer.distance == 0:
                            log.info("Peer is us! (Has the same ID!)")
                            sess.rollback()
                            return False, None

                        dbpeer.address = peer.address

                        sess.add(dbpeer)
                    else:
                        # Known Peer has connected to us.
                        if dbpeer.distance == 0:
                            log.warning("Found ourselves in the Peer table!")
                            log.info("Peer is us! (Has the same ID!)")
                            dbpeer.connected = False
                            sess.delete(dbpeer)
                            sess.commit()
                            return False, None

                        if dbpeer.connected:
                            log.info("Already connected to Peer, disconnecting redundant connection.")
                            sess.rollback()

                            fetch_id_in_thread = dbpeer.id

                            sess.expunge(dbpeer)

                            return False, dbpeer

#                        host, port = dbpeer.address.split(':')
#                        if host != peer.protocol.address[0]:
#                            log.info("Remote Peer host has changed, updating our db record.")
#                            dbpeer.address = "{}:{}".format(\
#                            peer.protocol.address[0],\
#                            port)

                    dbpeer.connected = True

                    sess.commit()

                    fetch_id_in_thread = dbpeer.id

                    sess.expunge(dbpeer)

                    return True, dbpeer
Esempio n. 4
0
    def parse(self):
        super().parse()
        i = 1
        pcnt = struct.unpack(">L", self.buf[i:i + 4])[0]
        i += 4
        self.peers = []
        for n in range(pcnt):
            if log.isEnabledFor(logging.DEBUG):
                log.debug("Reading record {}.".format(n))
            peer = Peer()  # db.Peer.
            l, peer.address = sshtype.parseString(self.buf[i:])
            i += l
            l, peer.node_id = sshtype.parseBinary(self.buf[i:])
            i += l
            l, peer.pubkey = sshtype.parseBinary(self.buf[i:])
            i += l

            self.peers.append(peer)
Esempio n. 5
0
            def dbcall():
                with self.node.db.open_session() as sess:
                    self.node.db.lock_table(sess, Peer)
                    dbpeer = sess.query(Peer)\
                        .filter(Peer.node_id == peer.node_id).first()

                    if not dbpeer:
                        # An incoming connection from an unknown Peer.
                        dbpeer = Peer()
                        dbpeer.node_id = peer.node_id
                        dbpeer.pubkey = peer.node_key.asbytes()

                        dbpeer.distance = peer.distance
                        dbpeer.direction = peer.direction

                        if dbpeer.distance == 0:
                            log.info("Peer is us! (Has the same ID!)")
                            sess.rollback()
                            return False, None

                        dbpeer.address = peer.address

                        sess.add(dbpeer)
                    else:
                        # Known Peer has connected to us.
                        if dbpeer.distance == 0:
                            log.warning("Found ourselves in the Peer table!")
                            log.info("Peer is us! (Has the same ID!)")
                            dbpeer.connected = False
                            sess.delete(dbpeer)
                            sess.commit()
                            return False, None

                        if dbpeer.connected:
                            log.info(
                                "Already connected to Peer, disconnecting redundant connection."
                            )
                            sess.rollback()

                            fetch_id_in_thread = dbpeer.id

                            sess.expunge(dbpeer)

                            return False, dbpeer

#                        host, port = dbpeer.address.split(':')
#                        if host != peer.protocol.address[0]:
#                            log.info("Remote Peer host has changed, updating our db record.")
#                            dbpeer.address = "{}:{}".format(\
#                            peer.protocol.address[0],\
#                            port)

                    dbpeer.connected = True

                    sess.commit()

                    fetch_id_in_thread = dbpeer.id

                    sess.expunge(dbpeer)

                    return True, dbpeer