version packet handling.

This commit is contained in:
Christopher Jeffrey 2016-03-06 11:20:35 -08:00
parent 786aed49dd
commit 2d028bb4b4
2 changed files with 27 additions and 27 deletions

View File

@ -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());

View File

@ -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);