def onFailure(self, callback = None): peer = Peer() peer.host = self.addrFrom Peers.removePeer(peer) callback( 'error: Invalid ping message' )
def onSuccess(self, callback=None): if len(self.addrList) > 0: peers = [] for addr in self.addrList: peer = Peer() peer.host = addr peers.append(peer) Peers.addPeers(peers)
def send(self): payload = Network.sendData(self.addrRecv, self.serialize()) message = MessageFactory.getInstance(MessageType.ADDR) if message.deserialize(payload): message.onSuccess() else: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
def send(self): payload = Network.sendData(self.addrRecv, self.serialize()) isValid = True message = MessageFactory.getInstance(MessageType.PONG) if message.deserialize(payload): if message.nonce == self.nonce: message.onSuccess() else: isValid = False else: isValid = False if isValid == False: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
def send(self): peer = Peers.getPeerByHost(self.addrRecv) if peer.lastVersionNonce == None: peer.lastVersionNonce = self.nonce Peers.addPeer(peer) else: self.nonce = peer.lastVersionNonce chainHeadBlock = Chain.getChain().getChainHeadBlock() self.chainHeadBlockHash = chainHeadBlock.hash() payload = Network.sendData(self.addrRecv, self.serialize()) message = MessageFactory.getInstance(MessageType.VERACK) message.addrFrom = self.addrRecv if message.deserialize(payload): message.onSuccess() else: peer = Peer() peer.host = self.addrRecv Peers.removePeer(peer) message.onFailure(self.sendFailure)
class Peers: db = Config.getValue("PEERS_DB") subDb = Config.getValue("PEERS_SUB_DB") peers = Storage(db, subDb) hostname = Network.getHostname() ipAddress = Network.getIpAddress() if Config.getBoolValue('PEERS_ENABLE_SEEDS'): with open(Config.getValue('SEEDS_DIR')) as seeds: hosts = json.load(seeds) for host in hosts: if host != hostname and host != ipAddress: hostBytes = DataType.serialize(host) if peers.get(hostBytes) == None: peer = Peer() peer.host = host peer.lastUpdate = DataType.asTime() peers.set(hostBytes, peer.serialize())
def onSuccess(self, callback=None): peer = Peers.getPeerByHost(self.addrFrom) syncVersion = False if peer == None: peer = Peer() else: syncVersion = peer.lastVersionNonce == None if peer.lastVersionNonce == None or peer.lastVersionNonce == self.nonce: peer.host = self.addrFrom peer.version = self.version peer.lastVersionNonce = self.nonce peer.chainHeadBlockHash = self.chainHeadBlockHash Peers.addPeer(peer) if syncVersion: Sync.synchronizeMessage(MessageType.VERSION, peer.host) message = MessageFactory.getInstance(MessageType.VERACK) callback(message.serialize())
def getPeerFromBytes(peerBytes): if peerBytes != None: peer = Peer() peer.deserialize(peerBytes) return peer return None