net: start using btcp and bdns.
This commit is contained in:
parent
424370bc1f
commit
ce8b6f483f
@ -75,11 +75,9 @@ bcoin.net = require('./net');
|
|||||||
bcoin.bip150 = require('./net/bip150');
|
bcoin.bip150 = require('./net/bip150');
|
||||||
bcoin.bip151 = require('./net/bip151');
|
bcoin.bip151 = require('./net/bip151');
|
||||||
bcoin.bip152 = require('./net/bip152');
|
bcoin.bip152 = require('./net/bip152');
|
||||||
bcoin.dns = require('./net/dns');
|
|
||||||
bcoin.packets = require('./net/packets');
|
bcoin.packets = require('./net/packets');
|
||||||
bcoin.peer = require('./net/peer');
|
bcoin.peer = require('./net/peer');
|
||||||
bcoin.pool = require('./net/pool');
|
bcoin.pool = require('./net/pool');
|
||||||
bcoin.tcp = require('./net/tcp');
|
|
||||||
|
|
||||||
// Node
|
// Node
|
||||||
bcoin.node = require('./node');
|
bcoin.node = require('./node');
|
||||||
|
|||||||
@ -110,11 +110,9 @@ bcoin.define('net', './net');
|
|||||||
bcoin.define('bip150', './net/bip150');
|
bcoin.define('bip150', './net/bip150');
|
||||||
bcoin.define('bip151', './net/bip151');
|
bcoin.define('bip151', './net/bip151');
|
||||||
bcoin.define('bip152', './net/bip152');
|
bcoin.define('bip152', './net/bip152');
|
||||||
bcoin.define('dns', './net/dns');
|
|
||||||
bcoin.define('packets', './net/packets');
|
bcoin.define('packets', './net/packets');
|
||||||
bcoin.define('peer', './net/peer');
|
bcoin.define('peer', './net/peer');
|
||||||
bcoin.define('pool', './net/pool');
|
bcoin.define('pool', './net/pool');
|
||||||
bcoin.define('tcp', './net/tcp');
|
|
||||||
|
|
||||||
// Node
|
// Node
|
||||||
bcoin.define('node', './node');
|
bcoin.define('node', './node');
|
||||||
|
|||||||
@ -12,6 +12,7 @@ const assert = require('assert');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const fs = require('bfile');
|
const fs = require('bfile');
|
||||||
|
const dns = require('bdns');
|
||||||
const IP = require('binet');
|
const IP = require('binet');
|
||||||
const Logger = require('blgr');
|
const Logger = require('blgr');
|
||||||
const ccmp = require('bcrypto/lib/ccmp');
|
const ccmp = require('bcrypto/lib/ccmp');
|
||||||
@ -24,7 +25,6 @@ const encoding = require('bbuf/lib/encoding');
|
|||||||
const base58 = require('bstr/lib/base58');
|
const base58 = require('bstr/lib/base58');
|
||||||
const co = require('../utils/co');
|
const co = require('../utils/co');
|
||||||
const packets = require('./packets');
|
const packets = require('./packets');
|
||||||
const dns = require('./dns');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a BIP150 input/output stream.
|
* Represents a BIP150 input/output stream.
|
||||||
|
|||||||
@ -1,35 +0,0 @@
|
|||||||
/*!
|
|
||||||
* dns.js - dns backend for bcoin
|
|
||||||
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve host (no getaddrinfo).
|
|
||||||
* @ignore
|
|
||||||
* @param {String} host
|
|
||||||
* @param {String?} proxy - Tor socks proxy.
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.resolve = function resolve(host, proxy) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
reject(new Error('DNS not supported.'));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve host (getaddrinfo).
|
|
||||||
* @ignore
|
|
||||||
* @param {String} host
|
|
||||||
* @param {String?} proxy - Tor socks proxy.
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.lookup = function lookup(host, proxy) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
reject(new Error('DNS not supported.'));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@ -1,99 +0,0 @@
|
|||||||
/*!
|
|
||||||
* dns.js - dns backend for bcoin
|
|
||||||
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @module net/dns
|
|
||||||
*/
|
|
||||||
|
|
||||||
const dns = require('dns');
|
|
||||||
const socks = require('./socks');
|
|
||||||
|
|
||||||
const options = {
|
|
||||||
family: 4,
|
|
||||||
hints: dns.ADDRCONFIG | dns.V4MAPPED,
|
|
||||||
all: true
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve host (async w/ libcares).
|
|
||||||
* @param {String} host
|
|
||||||
* @param {String?} proxy - Tor socks proxy.
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.resolve = function resolve(host, proxy) {
|
|
||||||
if (proxy)
|
|
||||||
return socks.resolve(proxy, host);
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
dns.resolve(host, 'A', to((err, result) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.length === 0) {
|
|
||||||
reject(new Error('No DNS results.'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(result);
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve host (getaddrinfo).
|
|
||||||
* @param {String} host
|
|
||||||
* @param {String?} proxy - Tor socks proxy.
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.lookup = function lookup(host, proxy) {
|
|
||||||
if (proxy)
|
|
||||||
return socks.resolve(proxy, host);
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
dns.lookup(host, options, to((err, result) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.length === 0) {
|
|
||||||
reject(new Error('No DNS results.'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const addrs = [];
|
|
||||||
|
|
||||||
for (const addr of result)
|
|
||||||
addrs.push(addr.address);
|
|
||||||
|
|
||||||
resolve(addrs);
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Helpers
|
|
||||||
*/
|
|
||||||
|
|
||||||
function to(callback) {
|
|
||||||
const timeout = setTimeout(() => {
|
|
||||||
callback(new Error('DNS request timed out.'));
|
|
||||||
callback = null;
|
|
||||||
}, 5000);
|
|
||||||
|
|
||||||
return function(err, result) {
|
|
||||||
if (callback) {
|
|
||||||
clearTimeout(timeout);
|
|
||||||
callback(err, result);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -9,17 +9,17 @@
|
|||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('bfile');
|
const fs = require('bfile');
|
||||||
|
const IP = require('binet');
|
||||||
|
const dns = require('bdns');
|
||||||
|
const Logger = require('blgr');
|
||||||
const murmur3 = require('bfilter/lib/murmur3');
|
const murmur3 = require('bfilter/lib/murmur3');
|
||||||
const util = require('../utils/util');
|
const util = require('../utils/util');
|
||||||
const IP = require('binet');
|
|
||||||
const co = require('../utils/co');
|
const co = require('../utils/co');
|
||||||
const Network = require('../protocol/network');
|
const Network = require('../protocol/network');
|
||||||
const NetAddress = require('../primitives/netaddress');
|
const NetAddress = require('../primitives/netaddress');
|
||||||
const List = require('../utils/list');
|
const List = require('../utils/list');
|
||||||
const common = require('./common');
|
const common = require('./common');
|
||||||
const seeds = require('./seeds');
|
const seeds = require('./seeds');
|
||||||
const dns = require('./dns');
|
|
||||||
const Logger = require('blgr');
|
|
||||||
const POOL32 = Buffer.allocUnsafe(32);
|
const POOL32 = Buffer.allocUnsafe(32);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -14,7 +14,6 @@ exports.BIP150 = require('./bip150');
|
|||||||
exports.BIP151 = require('./bip151');
|
exports.BIP151 = require('./bip151');
|
||||||
exports.bip152 = require('./bip152');
|
exports.bip152 = require('./bip152');
|
||||||
exports.common = require('./common');
|
exports.common = require('./common');
|
||||||
exports.dns = require('./dns');
|
|
||||||
exports.external = require('./external');
|
exports.external = require('./external');
|
||||||
exports.Framer = require('./framer');
|
exports.Framer = require('./framer');
|
||||||
exports.HostList = require('./hostlist');
|
exports.HostList = require('./hostlist');
|
||||||
@ -23,5 +22,4 @@ exports.Parser = require('./parser');
|
|||||||
exports.Peer = require('./peer');
|
exports.Peer = require('./peer');
|
||||||
exports.Pool = require('./pool');
|
exports.Pool = require('./pool');
|
||||||
exports.socks = require('./socks');
|
exports.socks = require('./socks');
|
||||||
exports.tcp = require('./tcp');
|
|
||||||
exports.UPNP = require('./upnp');
|
exports.UPNP = require('./upnp');
|
||||||
|
|||||||
@ -10,6 +10,10 @@
|
|||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const {format} = require('util');
|
const {format} = require('util');
|
||||||
|
const tcp = require('btcp');
|
||||||
|
const Logger = require('blgr');
|
||||||
|
const encoding = require('bbuf/lib/encoding');
|
||||||
|
const RollingFilter = require('bfilter/lib/rolling');
|
||||||
const co = require('../utils/co');
|
const co = require('../utils/co');
|
||||||
const Parser = require('./parser');
|
const Parser = require('./parser');
|
||||||
const Framer = require('./framer');
|
const Framer = require('./framer');
|
||||||
@ -18,17 +22,13 @@ const consensus = require('../protocol/consensus');
|
|||||||
const common = require('./common');
|
const common = require('./common');
|
||||||
const InvItem = require('../primitives/invitem');
|
const InvItem = require('../primitives/invitem');
|
||||||
const Lock = require('../utils/lock');
|
const Lock = require('../utils/lock');
|
||||||
const RollingFilter = require('bfilter/lib/rolling');
|
|
||||||
const BIP151 = require('./bip151');
|
const BIP151 = require('./bip151');
|
||||||
const BIP150 = require('./bip150');
|
const BIP150 = require('./bip150');
|
||||||
const BIP152 = require('./bip152');
|
const BIP152 = require('./bip152');
|
||||||
const Block = require('../primitives/block');
|
const Block = require('../primitives/block');
|
||||||
const TX = require('../primitives/tx');
|
const TX = require('../primitives/tx');
|
||||||
const encoding = require('bbuf/lib/encoding');
|
|
||||||
const NetAddress = require('../primitives/netaddress');
|
const NetAddress = require('../primitives/netaddress');
|
||||||
const Network = require('../protocol/network');
|
const Network = require('../protocol/network');
|
||||||
const Logger = require('blgr');
|
|
||||||
const tcp = require('./tcp');
|
|
||||||
const services = common.services;
|
const services = common.services;
|
||||||
const invTypes = InvItem.types;
|
const invTypes = InvItem.types;
|
||||||
const packetTypes = packets.types;
|
const packetTypes = packets.types;
|
||||||
|
|||||||
@ -9,8 +9,14 @@
|
|||||||
|
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const util = require('../utils/util');
|
|
||||||
const IP = require('binet');
|
const IP = require('binet');
|
||||||
|
const dns = require('bdns');
|
||||||
|
const tcp = require('btcp');
|
||||||
|
const BloomFilter = require('bfilter/lib/bloom');
|
||||||
|
const RollingFilter = require('bfilter/lib/rolling');
|
||||||
|
const secp256k1 = require('bcrypto/lib/secp256k1');
|
||||||
|
const encoding = require('bbuf/lib/encoding');
|
||||||
|
const util = require('../utils/util');
|
||||||
const co = require('../utils/co');
|
const co = require('../utils/co');
|
||||||
const common = require('./common');
|
const common = require('./common');
|
||||||
const chainCommon = require('../blockchain/common');
|
const chainCommon = require('../blockchain/common');
|
||||||
@ -18,22 +24,16 @@ const Address = require('../primitives/address');
|
|||||||
const BIP150 = require('./bip150');
|
const BIP150 = require('./bip150');
|
||||||
const BIP151 = require('./bip151');
|
const BIP151 = require('./bip151');
|
||||||
const BIP152 = require('./bip152');
|
const BIP152 = require('./bip152');
|
||||||
const BloomFilter = require('bfilter/lib/bloom');
|
|
||||||
const RollingFilter = require('bfilter/lib/rolling');
|
|
||||||
const secp256k1 = require('bcrypto/lib/secp256k1');
|
|
||||||
const Lock = require('../utils/lock');
|
const Lock = require('../utils/lock');
|
||||||
const Network = require('../protocol/network');
|
const Network = require('../protocol/network');
|
||||||
const Peer = require('./peer');
|
const Peer = require('./peer');
|
||||||
const external = require('./external');
|
const external = require('./external');
|
||||||
const List = require('../utils/list');
|
const List = require('../utils/list');
|
||||||
const tcp = require('./tcp');
|
|
||||||
const dns = require('./dns');
|
|
||||||
const socks = require('./socks');
|
const socks = require('./socks');
|
||||||
const HostList = require('./hostlist');
|
const HostList = require('./hostlist');
|
||||||
const UPNP = require('./upnp');
|
const UPNP = require('./upnp');
|
||||||
const InvItem = require('../primitives/invitem');
|
const InvItem = require('../primitives/invitem');
|
||||||
const packets = require('./packets');
|
const packets = require('./packets');
|
||||||
const encoding = require('bbuf/lib/encoding');
|
|
||||||
const services = common.services;
|
const services = common.services;
|
||||||
const invTypes = InvItem.types;
|
const invTypes = InvItem.types;
|
||||||
const packetTypes = packets.types;
|
const packetTypes = packets.types;
|
||||||
|
|||||||
@ -1,39 +0,0 @@
|
|||||||
/*!
|
|
||||||
* tcp.js - tcp backend for bcoin
|
|
||||||
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const ProxySocket = require('./proxysocket');
|
|
||||||
const EventEmitter = require('events');
|
|
||||||
const tcp = exports;
|
|
||||||
|
|
||||||
tcp.createSocket = function createSocket(port, host, proxy) {
|
|
||||||
return ProxySocket.connect(proxy, port, host);
|
|
||||||
};
|
|
||||||
|
|
||||||
tcp.createServer = function createServer() {
|
|
||||||
const server = new EventEmitter();
|
|
||||||
|
|
||||||
server.listen = async function listen(port, host) {
|
|
||||||
server.emit('listening');
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
server.close = async function close() {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
server.address = function address() {
|
|
||||||
return {
|
|
||||||
address: '127.0.0.1',
|
|
||||||
port: 0
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
server.maxConnections = undefined;
|
|
||||||
|
|
||||||
return server;
|
|
||||||
};
|
|
||||||
101
lib/net/tcp.js
101
lib/net/tcp.js
@ -1,101 +0,0 @@
|
|||||||
/*!
|
|
||||||
* tcp.js - tcp backend for bcoin
|
|
||||||
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* eslint prefer-arrow-callback: "off" */
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const EventEmitter = require('events');
|
|
||||||
const net = require('net');
|
|
||||||
const socks = require('./socks');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @exports net/tcp
|
|
||||||
*/
|
|
||||||
|
|
||||||
const tcp = exports;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a TCP socket and connect.
|
|
||||||
* @param {Number} port
|
|
||||||
* @param {String} host
|
|
||||||
* @param {String?} proxy
|
|
||||||
* @returns {Object}
|
|
||||||
*/
|
|
||||||
|
|
||||||
tcp.createSocket = function createSocket(port, host, proxy) {
|
|
||||||
if (proxy)
|
|
||||||
return socks.connect(proxy, port, host);
|
|
||||||
return net.connect(port, host);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a TCP server.
|
|
||||||
* @returns {Object}
|
|
||||||
*/
|
|
||||||
|
|
||||||
tcp.createServer = function createServer() {
|
|
||||||
const server = new net.Server();
|
|
||||||
const ee = new EventEmitter();
|
|
||||||
|
|
||||||
ee.listen = function listen(port, host) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
server.once('error', reject);
|
|
||||||
server.listen(port, host, () => {
|
|
||||||
server.removeListener('error', reject);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
ee.close = function close() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
server.close(wrap(resolve, reject));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
ee.address = function address() {
|
|
||||||
return server.address();
|
|
||||||
};
|
|
||||||
|
|
||||||
Object.defineProperty(ee, 'maxConnections', {
|
|
||||||
get() {
|
|
||||||
return server.maxConnections;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
server.maxConnections = value;
|
|
||||||
return server.maxConnections;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on('listening', () => {
|
|
||||||
ee.emit('listening');
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on('connection', (socket) => {
|
|
||||||
ee.emit('connection', socket);
|
|
||||||
});
|
|
||||||
|
|
||||||
server.on('error', (err) => {
|
|
||||||
ee.emit('error', err);
|
|
||||||
});
|
|
||||||
|
|
||||||
return ee;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Helpers
|
|
||||||
*/
|
|
||||||
|
|
||||||
function wrap(resolve, reject) {
|
|
||||||
return function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
resolve(result);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user