Propogate 'relay' from Pool() to its Peer()s
This commit is contained in:
parent
05e5c37230
commit
63ad4e5438
27
lib/pool.js
27
lib/pool.js
@ -30,6 +30,7 @@ function now() {
|
||||
* ```
|
||||
*
|
||||
* @param {Network|String} network - The network to connect
|
||||
* @param {Object} options - Options object
|
||||
* @returns {Pool}
|
||||
* @constructor
|
||||
*/
|
||||
@ -37,27 +38,21 @@ function Pool(network, options) {
|
||||
|
||||
var self = this;
|
||||
|
||||
options = options || {};
|
||||
this.network = Networks.get(network) || Networks.defaultNetwork;
|
||||
this.keepalive = false;
|
||||
|
||||
this._connectedPeers = {};
|
||||
this._addrs = [];
|
||||
|
||||
this.listenAddr = true;
|
||||
this.dnsSeed = true;
|
||||
this.listenAddr = options.listenAddr === false ? false : true;
|
||||
this.dnsSeed = options.dnsSeed === false ? false : true;
|
||||
this.relay = options.relay === false ? false : true;
|
||||
this.size = options.size || Pool.MaxConnectedPeers;
|
||||
|
||||
// define configuration options
|
||||
if (options) {
|
||||
if (options.listenAddr === false) {
|
||||
this.listenAddr = false;
|
||||
}
|
||||
if (options.dnsSeed === false) {
|
||||
this.dnsSeed = false;
|
||||
}
|
||||
if (options.addrs) {
|
||||
for(var i = 0; i < options.addrs.length; i++) {
|
||||
this._addAddr(options.addrs[i]);
|
||||
}
|
||||
if (options.addrs) {
|
||||
for(var i = 0; i < options.addrs.length; i++) {
|
||||
this._addAddr(options.addrs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,7 +147,7 @@ Pool.prototype.numberConnected = function numberConnected() {
|
||||
Pool.prototype._fillConnections = function _fillConnections() {
|
||||
var length = this._addrs.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
if (this.numberConnected() >= Pool.MaxConnectedPeers) {
|
||||
if (this.numberConnected() >= this.size) {
|
||||
break;
|
||||
}
|
||||
var addr = this._addrs[i];
|
||||
@ -186,7 +181,7 @@ Pool.prototype._connectPeer = function _connectPeer(addr) {
|
||||
function addConnectedPeer(addr) {
|
||||
var port = addr.port || self.network.port;
|
||||
var ip = addr.ip.v4 || addr.ip.v6;
|
||||
var peer = new Peer(ip, port, self.network);
|
||||
var peer = new Peer(ip, port, self.network, self.relay);
|
||||
peer.on('disconnect', function peerDisconnect() {
|
||||
self.emit('peerdisconnect', peer, addr);
|
||||
});
|
||||
|
||||
28
test/pool.js
28
test/pool.js
@ -194,12 +194,8 @@ describe('Pool', function() {
|
||||
this.emit('disconnect', this, {});
|
||||
});
|
||||
|
||||
var pool = new Pool();
|
||||
pool._addAddr({
|
||||
ip: {
|
||||
v4: 'localhost'
|
||||
}
|
||||
});
|
||||
var pool = new Pool(null, { size: 1 });
|
||||
pool._addAddr({ ip: { v4: 'localhost' } });
|
||||
|
||||
// Not great, but needed so pool won't catch its on event and fail the test
|
||||
pool.removeAllListeners('peerdisconnect');
|
||||
@ -227,4 +223,24 @@ describe('Pool', function() {
|
||||
pool.connect();
|
||||
});
|
||||
|
||||
it('should propagate Pool.relay property to peers', function(done) {
|
||||
var count = 0;
|
||||
var peerConnectStub = sinon.stub(Peer.prototype, 'connect', function() {
|
||||
this.emit('connect', this, {});
|
||||
});
|
||||
[true, false].forEach(function(relay) {
|
||||
var pool = new Pool(null,{ relay: relay, size: 1, dnsSeed: false });
|
||||
pool._addAddr({ ip: { v4: 'localhost' } });
|
||||
pool.on('peerconnect', function(peer, addr) {
|
||||
peer.relay.should.equal(relay);
|
||||
pool.disconnect();
|
||||
if(++count == 2) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
pool.connect();
|
||||
});
|
||||
peerConnectStub.restore();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user