diff --git a/lib/net/peer.js b/lib/net/peer.js index 021f41b1..56ead682 100644 --- a/lib/net/peer.js +++ b/lib/net/peer.js @@ -566,6 +566,9 @@ Peer.prototype.announceBlock = function announceBlock(blocks) { var inv = []; var i, block; + if (!this.ack) + return; + if (this.destroyed) return; @@ -614,7 +617,10 @@ Peer.prototype.announceBlock = function announceBlock(blocks) { Peer.prototype.announceTX = function announceTX(txs) { var inv = []; - var i, tx, entry; + var i, tx, hash, entry; + + if (!this.ack) + return; if (this.destroyed) return; @@ -640,7 +646,8 @@ Peer.prototype.announceTX = function announceTX(txs) { } if (this.feeRate !== -1 && this.mempool) { - entry = this.mempool.getEntry(tx.hash('hex')); + hash = tx.hash('hex'); + entry = this.mempool.getEntry(hash); if (entry && entry.getRate() < this.feeRate) continue; } @@ -693,6 +700,9 @@ Peer.prototype.announceList = function announceList() { Peer.prototype.sendInv = function sendInv(items) { var i, item, chunk; + if (!this.ack) + return; + if (this.destroyed) return; @@ -724,6 +734,9 @@ Peer.prototype.sendInv = function sendInv(items) { Peer.prototype.sendHeaders = function sendHeaders(items) { var i, item, chunk; + if (!this.ack) + return; + if (this.destroyed) return; @@ -794,6 +807,9 @@ Peer.prototype.sendPing = function sendPing() { */ Peer.prototype.updateWatch = function updateWatch() { + if (!this.ack) + return; + if (!this.options.spv) return; @@ -806,6 +822,9 @@ Peer.prototype.updateWatch = function updateWatch() { */ Peer.prototype.sendFeeRate = function sendFeeRate(rate) { + if (!this.ack) + return; + this.send(new packets.FeeFilterPacket(rate)); }; @@ -866,6 +885,8 @@ Peer.prototype.destroy = function destroy() { entry.destroy(); } + this.locker.destroy(); + this.emit('close'); }; @@ -2451,6 +2472,9 @@ Peer.prototype.handleBlockTxn = co(function* handleBlockTxn(packet) { */ Peer.prototype.sendAlert = function sendAlert(alert) { + if (!this.ack) + return; + if (!this.invFilter.added(alert.hash())) return; @@ -2523,6 +2547,9 @@ Peer.prototype.sendGetBlocks = function getBlocks(locator, stop) { */ Peer.prototype.sendMempool = function sendMempool() { + if (!this.ack) + return; + if (!this.version) return; diff --git a/lib/net/pool.js b/lib/net/pool.js index 8d714a53..abdc0c92 100644 --- a/lib/net/pool.js +++ b/lib/net/pool.js @@ -87,7 +87,6 @@ var VerifyResult = errors.VerifyResult; * @emits Pool#version * @emits Pool#ack * @emits Pool#watched - * @emits Pool#leech */ function Pool(options) { @@ -439,7 +438,7 @@ Pool.prototype.listen = function listen() { } this.server.on('connection', function(socket) { - self.handleLeech(socket); + self.handleInbound(socket); }); this.server.on('listening', function() { @@ -480,7 +479,7 @@ Pool.prototype.unlisten = function unlisten() { * @param {net.Socket} socket */ -Pool.prototype.handleLeech = function handleLeech(socket) { +Pool.prototype.handleInbound = function handleInbound(socket) { var addr; if (!socket.remoteAddress) { @@ -706,7 +705,7 @@ Pool.prototype.sync = function sync() { var peer; for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.outbound || !peer.ack) + if (!peer.outbound) continue; peer.sync(); } @@ -721,7 +720,7 @@ Pool.prototype.forceSync = function forceSync() { var peer; for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.outbound || !peer.ack) + if (!peer.outbound) continue; peer.syncSent = false; peer.sync(); @@ -747,7 +746,7 @@ Pool.prototype.stopSync = co(function* stopSync() { this.stopTimeout(); for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.outbound || !peer.ack) + if (!peer.outbound) continue; peer.syncSent = false; } @@ -760,11 +759,8 @@ Pool.prototype.stopSync = co(function* stopSync() { Pool.prototype.sendMempool = function sendMempool() { var peer; - for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = this.peers.head(); peer; peer = peer.next) peer.sendMempool(); - } }; /** @@ -775,11 +771,8 @@ Pool.prototype.sendMempool = function sendMempool() { Pool.prototype.sendAlert = function sendAlert(alert) { var peer; - for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = this.peers.head(); peer; peer = peer.next) peer.sendAlert(alert); - } }; /** @@ -893,7 +886,7 @@ Pool.prototype.bindPeer = function bindPeer(peer) { } })); - peer.on('txs', function (txs) { + peer.on('txs', function(txs) { self.handleTXInv(txs, peer); }); @@ -1524,7 +1517,7 @@ Pool.prototype.addInbound = function addInbound(socket) { this.peers.add(peer); util.nextTick(function() { - self.emit('leech', peer); + self.emit('peer', peer); }); }; @@ -1657,11 +1650,8 @@ Pool.prototype.updateWatch = function updateWatch() { this.pendingWatch = setTimeout(function() { self.pendingWatch = null; - for (peer = self.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = self.peers.head(); peer; peer = peer.next) peer.updateWatch(); - } }, 50); }; @@ -1899,11 +1889,8 @@ Pool.prototype.broadcast = function broadcast(msg) { Pool.prototype.announceBlock = function announceBlock(msg) { var peer; - for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = this.peers.head(); peer; peer = peer.next) peer.announceBlock(msg); - } }; /** @@ -1914,11 +1901,8 @@ Pool.prototype.announceBlock = function announceBlock(msg) { Pool.prototype.announceTX = function announceTX(msg) { var peer; - for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = this.peers.head(); peer; peer = peer.next) peer.announceTX(msg); - } }; /** @@ -1931,11 +1915,8 @@ Pool.prototype.setFeeRate = function setFeeRate(rate) { this.feeRate = rate; - for (peer = this.peers.head(); peer; peer = peer.next) { - if (!peer.ack) - continue; + for (peer = this.peers.head(); peer; peer = peer.next) peer.sendFeeRate(rate); - } }; /**