peer version handling.

This commit is contained in:
Christopher Jeffrey 2016-03-14 22:21:28 -07:00
parent 1da30562c4
commit 3953f392f6
3 changed files with 30 additions and 15 deletions

View File

@ -167,7 +167,7 @@ Peer.prototype._init = function init() {
self._write(self.framer.packet('getaddr', new Buffer([])));
if (self.pool.options.headers) {
if (self.version && self.version.v > 70012)
if (self.version && self.version.version > 70012)
self._write(self.framer.packet('sendheaders', new Buffer([])));
}
});
@ -444,27 +444,42 @@ 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.');
if (payload.version < constants.minVersion) {
this._error('Peer doesn\'t support required protocol version.');
this.pool.setMisbehavior(this, 100);
return;
}
if (this.options.headers) {
if (payload.v < 31800)
return this._error('Peer doesn\'t support getheaders.');
if (payload.version < 31800) {
this._error('Peer doesn\'t support getheaders.');
this.pool.setMisbehavior(this, 100);
return;
}
}
if (this.options.network) {
if (!payload.network)
return this._error('Peer does not support network services.');
if (!payload.network) {
this._error('Peer does not support network services.');
this.pool.setMisbehavior(this, 100);
return;
}
}
if (this.options.spv) {
if (!payload.bloom && payload.v < 70011)
return this._error('Peer does not support bip37.');
if (!payload.bloom && payload.version < 70011) {
this._error('Peer does not support bip37.');
this.pool.setMisbehavior(this, 100);
return;
}
}
if (this.options.witness) {
if (!payload.witness)
return this._error('Peer does not support segregated witness.');
if (!payload.witness) {
this._error('Peer does not support segregated witness.');
this.pool.setMisbehavior(this, 100);
return;
}
}
// ACK

View File

@ -857,7 +857,7 @@ Pool.prototype._createPeer = function _createPeer(options) {
utils.debug(
'Received version from %s: version=%d height=%d agent=%s',
peer.host, version.v, version.height, version.agent);
peer.host, version.version, version.height, version.agent);
self.emit('version', version, peer);
});

View File

@ -176,11 +176,11 @@ Parser.parsePong = function parsePong(p) {
};
Parser.parseVersion = function parseVersion(p) {
var v, services, ts, recv, from, nonce, agent, height, relay;
var version, services, ts, recv, from, nonce, agent, height, relay;
p = new BufferReader(p);
v = p.readU32();
version = p.readU32();
services = p.readU64();
// Timestamp
@ -221,7 +221,7 @@ Parser.parseVersion = function parseVersion(p) {
}
return {
v: v,
version: version,
services: services,
network: (services & constants.services.network) !== 0,
getutxo: (services & constants.services.getutxo) !== 0,