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([])));
|
self._write(self.framer.packet('getaddr', new Buffer([])));
|
||||||
|
|
||||||
if (self.pool.options.headers) {
|
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([])));
|
self._write(self.framer.packet('sendheaders', new Buffer([])));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -444,27 +444,42 @@ Peer.prototype._emitMerkle = function _emitMerkle(payload) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Peer.prototype._handleVersion = function handleVersion(payload) {
|
Peer.prototype._handleVersion = function handleVersion(payload) {
|
||||||
if (payload.v < constants.minVersion)
|
if (payload.version < constants.minVersion) {
|
||||||
return this._error('Peer doesn\'t support required protocol version.');
|
this._error('Peer doesn\'t support required protocol version.');
|
||||||
|
this.pool.setMisbehavior(this, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.options.headers) {
|
if (this.options.headers) {
|
||||||
if (payload.v < 31800)
|
if (payload.version < 31800) {
|
||||||
return this._error('Peer doesn\'t support getheaders.');
|
this._error('Peer doesn\'t support getheaders.');
|
||||||
|
this.pool.setMisbehavior(this, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.options.network) {
|
if (this.options.network) {
|
||||||
if (!payload.network)
|
if (!payload.network) {
|
||||||
return this._error('Peer does not support network services.');
|
this._error('Peer does not support network services.');
|
||||||
|
this.pool.setMisbehavior(this, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.options.spv) {
|
if (this.options.spv) {
|
||||||
if (!payload.bloom && payload.v < 70011)
|
if (!payload.bloom && payload.version < 70011) {
|
||||||
return this._error('Peer does not support bip37.');
|
this._error('Peer does not support bip37.');
|
||||||
|
this.pool.setMisbehavior(this, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.options.witness) {
|
if (this.options.witness) {
|
||||||
if (!payload.witness)
|
if (!payload.witness) {
|
||||||
return this._error('Peer does not support segregated witness.');
|
this._error('Peer does not support segregated witness.');
|
||||||
|
this.pool.setMisbehavior(this, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ACK
|
// ACK
|
||||||
|
|||||||
@ -857,7 +857,7 @@ Pool.prototype._createPeer = function _createPeer(options) {
|
|||||||
|
|
||||||
utils.debug(
|
utils.debug(
|
||||||
'Received version from %s: version=%d height=%d agent=%s',
|
'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);
|
self.emit('version', version, peer);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -176,11 +176,11 @@ Parser.parsePong = function parsePong(p) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Parser.parseVersion = function parseVersion(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);
|
p = new BufferReader(p);
|
||||||
|
|
||||||
v = p.readU32();
|
version = p.readU32();
|
||||||
services = p.readU64();
|
services = p.readU64();
|
||||||
|
|
||||||
// Timestamp
|
// Timestamp
|
||||||
@ -221,7 +221,7 @@ Parser.parseVersion = function parseVersion(p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
v: v,
|
version: version,
|
||||||
services: services,
|
services: services,
|
||||||
network: (services & constants.services.network) !== 0,
|
network: (services & constants.services.network) !== 0,
|
||||||
getutxo: (services & constants.services.getutxo) !== 0,
|
getutxo: (services & constants.services.getutxo) !== 0,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user