Propogate 'relay' from Pool() to its Peer()s

This commit is contained in:
William Wolf 2015-02-18 12:02:00 -08:00
parent 05e5c37230
commit 63ad4e5438
2 changed files with 33 additions and 22 deletions

View File

@ -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);
});

View File

@ -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();
});
});