From ed1a8ef718b01988871fb5dc0c5232e5fe454f67 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 19 May 2016 11:56:11 -0700 Subject: [PATCH] pool.listen. --- bin/node | 19 ++++++++++++------- lib/bcoin/fullnode.js | 11 +++++++++-- lib/bcoin/pool.js | 24 +++++++++++------------- lib/bcoin/script.js | 5 +++-- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/bin/node b/bin/node index 19f477ef..5799bc59 100755 --- a/bin/node +++ b/bin/node @@ -26,12 +26,17 @@ node.open(function(err) { if (err) throw err; - if (node.options.mine) { - if (bcoin.network.get().type !== 'regtest') - node.pool.connect(); - node.miner.start(); - return; - } + node.listen(function(err) { + if (err) + throw err; - node.startSync(); + if (node.options.mine) { + if (bcoin.network.get().type !== 'regtest') + node.pool.connect(); + node.miner.start(); + return; + } + + node.startSync(); + }); }); diff --git a/lib/bcoin/fullnode.js b/lib/bcoin/fullnode.js index d011e086..5cf19a57 100644 --- a/lib/bcoin/fullnode.js +++ b/lib/bcoin/fullnode.js @@ -21,7 +21,6 @@ var assert = utils.assert; * @param {Boolean?} options.requireStandard * @param {Boolean?} options.rejectInsaneFees * @param {Boolean?} options.replaceByFee - * @param {Boolean?} options.listen * @param {Boolean?} options.selfish * @param {Base58Address?} options.payoutAddress * @param {String?} options.coinbaseFlags @@ -86,7 +85,6 @@ Fullnode.prototype._init = function _init() { chain: this.chain, mempool: this.mempool, witness: this.network.witness, - listen: this.options.listen, selfish: this.options.selfish, broadcast: this.options.broadcast, spv: false @@ -267,6 +265,15 @@ Fullnode.prototype.sendTX = function sendTX(item, wait, callback) { }); }; +/** + * Listen on a server socket on + * the p2p network (accepts leech peers). + */ + +Fullnode.prototype.listen = function listen(callback) { + return this.pool.listen(callback); +}; + /** * Connect to the network. */ diff --git a/lib/bcoin/pool.js b/lib/bcoin/pool.js index f5fb41f9..51d4d3d1 100644 --- a/lib/bcoin/pool.js +++ b/lib/bcoin/pool.js @@ -112,6 +112,7 @@ function Pool(options) { this.destroyed = false; this.loaded = false; this.size = options.size || 8; + this.maxLeeches = options.maxLeeches || 8; this.connected = false; this.uid = 0; @@ -264,8 +265,6 @@ Pool.prototype.connect = function connect() { this.connected = true; } - - this.startServer(); }; Pool.prototype._init = function _init() { @@ -395,7 +394,7 @@ Pool.prototype.getHeaders = function getHeaders(peer, top, stop, callback) { * @param {Function} callback */ -Pool.prototype.startServer = function startServer(callback) { +Pool.prototype.listen = function listen(callback) { var self = this; var net; @@ -406,14 +405,15 @@ Pool.prototype.startServer = function startServer(callback) { net = require('n' + 'et'); - if (!this.options.listen) - return utils.nextTick(callback); - - assert(!this.server); + assert(!this.server, 'Server already listening.'); this.server = new net.Server(); this.server.on('connection', function(socket) { + if (self.peers.leeches.length >= self.maxLeeches) { + socket.destroy(); + return; + } self._addLeech(socket); }); @@ -432,7 +432,7 @@ Pool.prototype.startServer = function startServer(callback) { * @param {Function} callback */ -Pool.prototype.stopServer = function stopServer(callback) { +Pool.prototype.unlisten = function unlisten(callback) { callback = utils.ensure(callback); if (bcoin.isBrowser) @@ -442,7 +442,7 @@ Pool.prototype.stopServer = function stopServer(callback) { return utils.nextTick(callback); this.server.close(callback); - delete this.server; + this.server = null; }; Pool.prototype._startTimer = function _startTimer() { @@ -525,8 +525,6 @@ Pool.prototype._addLoader = function _addLoader() { witness: this.options.witness }); - assert(peer); - bcoin.debug('Added loader peer: %s', peer.host); this.peers.load = peer; @@ -1074,7 +1072,7 @@ Pool.prototype._addLeech = function _addLeech(socket) { witness: false }); - assert(peer); + bcoin.debug('Added leech peer: %s', peer.host); this.peers.leeches.push(peer); this.peers.all.push(peer); @@ -1714,7 +1712,7 @@ Pool.prototype.destroy = function destroy(callback) { peer.destroy(); }); - this.stopServer(callback); + this.unlisten(callback); }; /** diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 0ab9976d..0b1175d8 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -1882,8 +1882,9 @@ Script.num = function num(value, flags, size) { * account negative zero, minimaldata, etc. * @example * assert.deepEqual(Script.array(0), new Buffer([])); - * assert.deepEqual(Script.array(0xffee), new Buffer([0xee, 0xff])); - * assert.deepEqual(Script.array(new bn(0xffee)), new Buffer([0xee, 0xff])); + * assert.deepEqual(Script.array(0xffee), new Buffer([0xee, 0xff, 0x00])); + * assert.deepEqual(Script.array(new bn(0xffee)), new Buffer([0xee, 0xff, 0x00])); + * assert.deepEqual(Script.array(new bn(0x1e).ineg()), new Buffer([0x9e])); * @param {Buffer|Number|BN} value * @returns {Buffer} */