net: start using btcp and bdns.

This commit is contained in:
Christopher Jeffrey 2017-11-01 13:04:38 -07:00
parent 424370bc1f
commit ce8b6f483f
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
11 changed files with 15 additions and 295 deletions

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

@ -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);
/**

View File

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

View File

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

View File

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

View File

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

View File

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