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 {Network|String} network - The network to connect
|
||||||
|
* @param {Object} options - Options object
|
||||||
* @returns {Pool}
|
* @returns {Pool}
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
@ -37,27 +38,21 @@ function Pool(network, options) {
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
this.network = Networks.get(network) || Networks.defaultNetwork;
|
this.network = Networks.get(network) || Networks.defaultNetwork;
|
||||||
this.keepalive = false;
|
this.keepalive = false;
|
||||||
|
|
||||||
this._connectedPeers = {};
|
this._connectedPeers = {};
|
||||||
this._addrs = [];
|
this._addrs = [];
|
||||||
|
|
||||||
this.listenAddr = true;
|
this.listenAddr = options.listenAddr === false ? false : true;
|
||||||
this.dnsSeed = 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.addrs) {
|
||||||
if (options) {
|
for(var i = 0; i < options.addrs.length; i++) {
|
||||||
if (options.listenAddr === false) {
|
this._addAddr(options.addrs[i]);
|
||||||
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]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +147,7 @@ Pool.prototype.numberConnected = function numberConnected() {
|
|||||||
Pool.prototype._fillConnections = function _fillConnections() {
|
Pool.prototype._fillConnections = function _fillConnections() {
|
||||||
var length = this._addrs.length;
|
var length = this._addrs.length;
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
if (this.numberConnected() >= Pool.MaxConnectedPeers) {
|
if (this.numberConnected() >= this.size) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var addr = this._addrs[i];
|
var addr = this._addrs[i];
|
||||||
@ -186,7 +181,7 @@ Pool.prototype._connectPeer = function _connectPeer(addr) {
|
|||||||
function addConnectedPeer(addr) {
|
function addConnectedPeer(addr) {
|
||||||
var port = addr.port || self.network.port;
|
var port = addr.port || self.network.port;
|
||||||
var ip = addr.ip.v4 || addr.ip.v6;
|
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() {
|
peer.on('disconnect', function peerDisconnect() {
|
||||||
self.emit('peerdisconnect', peer, addr);
|
self.emit('peerdisconnect', peer, addr);
|
||||||
});
|
});
|
||||||
|
|||||||
28
test/pool.js
28
test/pool.js
@ -194,12 +194,8 @@ describe('Pool', function() {
|
|||||||
this.emit('disconnect', this, {});
|
this.emit('disconnect', this, {});
|
||||||
});
|
});
|
||||||
|
|
||||||
var pool = new Pool();
|
var pool = new Pool(null, { size: 1 });
|
||||||
pool._addAddr({
|
pool._addAddr({ ip: { v4: 'localhost' } });
|
||||||
ip: {
|
|
||||||
v4: 'localhost'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Not great, but needed so pool won't catch its on event and fail the test
|
// Not great, but needed so pool won't catch its on event and fail the test
|
||||||
pool.removeAllListeners('peerdisconnect');
|
pool.removeAllListeners('peerdisconnect');
|
||||||
@ -227,4 +223,24 @@ describe('Pool', function() {
|
|||||||
pool.connect();
|
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