net: add hasServices method.
This commit is contained in:
parent
14f2851929
commit
1a4984d533
@ -308,6 +308,16 @@ VersionPacket.prototype.hasWitness = function hasWitness() {
|
|||||||
return (this.services & constants.services.WITNESS) !== 0;
|
return (this.services & constants.services.WITNESS) !== 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test whether required services are available.
|
||||||
|
* @param {Number} services
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
|
||||||
|
VersionPacket.prototype.hasServices = function hasServices(services) {
|
||||||
|
return (this.services & services) === services;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether the protocol version supports getheaders.
|
* Test whether the protocol version supports getheaders.
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
|
|||||||
@ -121,6 +121,10 @@ function Pool(options) {
|
|||||||
this.banTime = constants.BAN_TIME;
|
this.banTime = constants.BAN_TIME;
|
||||||
this.banScore = constants.BAN_SCORE;
|
this.banScore = constants.BAN_SCORE;
|
||||||
|
|
||||||
|
// Required services.
|
||||||
|
this.needed = constants.services.NETWORK;
|
||||||
|
this.needed |= constants.services.WITNESS;
|
||||||
|
|
||||||
this.syncing = false;
|
this.syncing = false;
|
||||||
|
|
||||||
this.loadTimeout = 120000;
|
this.loadTimeout = 120000;
|
||||||
@ -178,8 +182,10 @@ Pool.prototype._initOptions = function _initOptions() {
|
|||||||
if (this.options.headers == null)
|
if (this.options.headers == null)
|
||||||
this.options.headers = this.options.spv;
|
this.options.headers = this.options.spv;
|
||||||
|
|
||||||
if (!this.options.witness)
|
if (!this.options.witness) {
|
||||||
this.address.services &= ~constants.services.WITNESS;
|
this.address.services &= ~constants.services.WITNESS;
|
||||||
|
this.needed &= ~constants.services.WITNESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.options.host != null) {
|
if (this.options.host != null) {
|
||||||
assert(typeof this.options.host === 'string');
|
assert(typeof this.options.host === 'string');
|
||||||
@ -265,8 +271,10 @@ Pool.prototype._initOptions = function _initOptions() {
|
|||||||
if (this.options.preferredSeed)
|
if (this.options.preferredSeed)
|
||||||
this.hosts.setSeeds([this.options.preferredSeed]);
|
this.hosts.setSeeds([this.options.preferredSeed]);
|
||||||
|
|
||||||
if (this.options.spv)
|
if (this.options.spv) {
|
||||||
this.spvFilter = Bloom.fromRate(10000, 0.001, constants.bloom.ALL);
|
this.spvFilter = Bloom.fromRate(10000, 0.001, constants.bloom.ALL);
|
||||||
|
this.needed |= constants.services.BLOOM;
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.options.mempool)
|
if (!this.options.mempool)
|
||||||
this.txFilter = new Bloom.Rolling(50000, 0.000001);
|
this.txFilter = new Bloom.Rolling(50000, 0.000001);
|
||||||
@ -1031,19 +1039,9 @@ Pool.prototype.handleAddr = function handleAddr(addrs, peer) {
|
|||||||
if (addr.isNull())
|
if (addr.isNull())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!addr.hasNetwork())
|
if (!addr.hasServices(this.needed))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (this.options.spv) {
|
|
||||||
if (!addr.hasBloom())
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.options.witness) {
|
|
||||||
if (!addr.hasWitness())
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.hosts.add(addr, peer.address))
|
if (this.hosts.add(addr, peer.address))
|
||||||
this.emit('host', addr, peer);
|
this.emit('host', addr, peer);
|
||||||
}
|
}
|
||||||
@ -1575,7 +1573,7 @@ Pool.prototype.getHost = function getHost(unique) {
|
|||||||
if (addr.isNull())
|
if (addr.isNull())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!addr.hasNetwork())
|
if (!addr.hasServices(this.needed))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (now - entry.lastAttempt < 600 && i < 30)
|
if (now - entry.lastAttempt < 600 && i < 30)
|
||||||
|
|||||||
@ -119,6 +119,16 @@ NetAddress.prototype.hasWitness = function hasWitness() {
|
|||||||
return (this.services & constants.services.WITNESS) !== 0;
|
return (this.services & constants.services.WITNESS) !== 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test whether required services are available.
|
||||||
|
* @param {Number} services
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
|
||||||
|
NetAddress.prototype.hasServices = function hasServices(services) {
|
||||||
|
return (this.services & services) === services;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether the host is null.
|
* Test whether the host is null.
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user