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.bip151 = require('./net/bip151');
|
||||
bcoin.bip152 = require('./net/bip152');
|
||||
bcoin.dns = require('./net/dns');
|
||||
bcoin.packets = require('./net/packets');
|
||||
bcoin.peer = require('./net/peer');
|
||||
bcoin.pool = require('./net/pool');
|
||||
bcoin.tcp = require('./net/tcp');
|
||||
|
||||
// Node
|
||||
bcoin.node = require('./node');
|
||||
|
||||
@ -110,11 +110,9 @@ bcoin.define('net', './net');
|
||||
bcoin.define('bip150', './net/bip150');
|
||||
bcoin.define('bip151', './net/bip151');
|
||||
bcoin.define('bip152', './net/bip152');
|
||||
bcoin.define('dns', './net/dns');
|
||||
bcoin.define('packets', './net/packets');
|
||||
bcoin.define('peer', './net/peer');
|
||||
bcoin.define('pool', './net/pool');
|
||||
bcoin.define('tcp', './net/tcp');
|
||||
|
||||
// Node
|
||||
bcoin.define('node', './node');
|
||||
|
||||
@ -12,6 +12,7 @@ const assert = require('assert');
|
||||
const path = require('path');
|
||||
const EventEmitter = require('events');
|
||||
const fs = require('bfile');
|
||||
const dns = require('bdns');
|
||||
const IP = require('binet');
|
||||
const Logger = require('blgr');
|
||||
const ccmp = require('bcrypto/lib/ccmp');
|
||||
@ -24,7 +25,6 @@ const encoding = require('bbuf/lib/encoding');
|
||||
const base58 = require('bstr/lib/base58');
|
||||
const co = require('../utils/co');
|
||||
const packets = require('./packets');
|
||||
const dns = require('./dns');
|
||||
|
||||
/**
|
||||
* 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 path = require('path');
|
||||
const fs = require('bfile');
|
||||
const IP = require('binet');
|
||||
const dns = require('bdns');
|
||||
const Logger = require('blgr');
|
||||
const murmur3 = require('bfilter/lib/murmur3');
|
||||
const util = require('../utils/util');
|
||||
const IP = require('binet');
|
||||
const co = require('../utils/co');
|
||||
const Network = require('../protocol/network');
|
||||
const NetAddress = require('../primitives/netaddress');
|
||||
const List = require('../utils/list');
|
||||
const common = require('./common');
|
||||
const seeds = require('./seeds');
|
||||
const dns = require('./dns');
|
||||
const Logger = require('blgr');
|
||||
const POOL32 = Buffer.allocUnsafe(32);
|
||||
|
||||
/**
|
||||
|
||||
@ -14,7 +14,6 @@ exports.BIP150 = require('./bip150');
|
||||
exports.BIP151 = require('./bip151');
|
||||
exports.bip152 = require('./bip152');
|
||||
exports.common = require('./common');
|
||||
exports.dns = require('./dns');
|
||||
exports.external = require('./external');
|
||||
exports.Framer = require('./framer');
|
||||
exports.HostList = require('./hostlist');
|
||||
@ -23,5 +22,4 @@ exports.Parser = require('./parser');
|
||||
exports.Peer = require('./peer');
|
||||
exports.Pool = require('./pool');
|
||||
exports.socks = require('./socks');
|
||||
exports.tcp = require('./tcp');
|
||||
exports.UPNP = require('./upnp');
|
||||
|
||||
@ -10,6 +10,10 @@
|
||||
const assert = require('assert');
|
||||
const EventEmitter = require('events');
|
||||
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 Parser = require('./parser');
|
||||
const Framer = require('./framer');
|
||||
@ -18,17 +22,13 @@ const consensus = require('../protocol/consensus');
|
||||
const common = require('./common');
|
||||
const InvItem = require('../primitives/invitem');
|
||||
const Lock = require('../utils/lock');
|
||||
const RollingFilter = require('bfilter/lib/rolling');
|
||||
const BIP151 = require('./bip151');
|
||||
const BIP150 = require('./bip150');
|
||||
const BIP152 = require('./bip152');
|
||||
const Block = require('../primitives/block');
|
||||
const TX = require('../primitives/tx');
|
||||
const encoding = require('bbuf/lib/encoding');
|
||||
const NetAddress = require('../primitives/netaddress');
|
||||
const Network = require('../protocol/network');
|
||||
const Logger = require('blgr');
|
||||
const tcp = require('./tcp');
|
||||
const services = common.services;
|
||||
const invTypes = InvItem.types;
|
||||
const packetTypes = packets.types;
|
||||
|
||||
@ -9,8 +9,14 @@
|
||||
|
||||
const assert = require('assert');
|
||||
const EventEmitter = require('events');
|
||||
const util = require('../utils/util');
|
||||
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 common = require('./common');
|
||||
const chainCommon = require('../blockchain/common');
|
||||
@ -18,22 +24,16 @@ const Address = require('../primitives/address');
|
||||
const BIP150 = require('./bip150');
|
||||
const BIP151 = require('./bip151');
|
||||
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 Network = require('../protocol/network');
|
||||
const Peer = require('./peer');
|
||||
const external = require('./external');
|
||||
const List = require('../utils/list');
|
||||
const tcp = require('./tcp');
|
||||
const dns = require('./dns');
|
||||
const socks = require('./socks');
|
||||
const HostList = require('./hostlist');
|
||||
const UPNP = require('./upnp');
|
||||
const InvItem = require('../primitives/invitem');
|
||||
const packets = require('./packets');
|
||||
const encoding = require('bbuf/lib/encoding');
|
||||
const services = common.services;
|
||||
const invTypes = InvItem.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