From 2d028bb4b4e64fe97e217707c4757d324c983568 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 6 Mar 2016 11:20:35 -0800 Subject: [PATCH] version packet handling. --- lib/bcoin/peer.js | 22 +++++++++++++++++++++- lib/bcoin/pool.js | 32 ++++++-------------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/lib/bcoin/peer.js b/lib/bcoin/peer.js index 68c17246..439ca067 100644 --- a/lib/bcoin/peer.js +++ b/lib/bcoin/peer.js @@ -444,7 +444,27 @@ Peer.prototype._emitMerkle = function _emitMerkle(payload) { Peer.prototype._handleVersion = function handleVersion(payload) { if (payload.v < constants.minVersion) - return this._error('peer doesn\'t support required protocol version'); + return this._error('Peer doesn\'t support required protocol version.'); + + if (this.options.headers) { + if (payload.v < 31800) + return this._error('Peer doesn\'t support getheaders.'); + } + + if (this.options.network) { + if (!payload.network) + return this._error('Peer does not support network services.'); + } + + if (this.options.spv) { + if (!payload.bloom && payload.v < 70011) + return this._error('Peer does not support bip37.'); + } + + if (this.options.witness) { + if (!payload.witness) + return this._error('Peer does not support segregated witness.'); + } // ACK this._write(this.framer.verack()); diff --git a/lib/bcoin/pool.js b/lib/bcoin/pool.js index 0817f014..b5a91944 100644 --- a/lib/bcoin/pool.js +++ b/lib/bcoin/pool.js @@ -59,7 +59,7 @@ function Pool(node, options) { options.headers = true; } else { if (options.headers == null) - options.headers = false; + options.headers = true; } this.syncing = false; @@ -789,7 +789,11 @@ Pool.prototype._createPeer = function _createPeer(options) { createSocket: this.options.createSocket, relay: this.options.relay, priority: options.priority, - socket: options.socket + socket: options.socket, + network: options.network, + spv: options.spv, + witness: options.witness, + headers: this.options.headers }); peer.on('error', function(err) { @@ -852,30 +856,6 @@ Pool.prototype._createPeer = function _createPeer(options) { if (version.height > self.block.versionHeight) self.block.versionHeight = version.height; - if (options.network) { - if (!version.network) { - utils.debug('Peer does not support network services. Killing.'); - self.setMisbehavior(peer, 100); - return; - } - } - - if (options.spv) { - if (!version.bloom || version.v < 70011) { - utils.debug('Peer does not support bip37. Killing.'); - self.setMisbehavior(peer, 100); - return; - } - } - - if (options.witness) { - if (!version.witness) { - utils.debug('Peer does not support segregated witness. Killing.'); - self.setMisbehavior(peer, 100); - return; - } - } - utils.debug( 'Received version from %s: version=%d height=%d agent=%s', peer.host, version.v, version.height, version.agent);