peer version handling.
This commit is contained in:
parent
1da30562c4
commit
3953f392f6
@ -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
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user