diff --git a/browser/index.html b/browser/index.html
index 4915fd27..a4da225d 100644
--- a/browser/index.html
+++ b/browser/index.html
@@ -105,7 +105,7 @@ more bitcoin magic).
var newaddr = document.getElementById('newaddr');
var items = [];
var scrollback = 0;
- var logger, node;
+ var logger, node, options;
body.onmouseup = function() {
floating.style.display = 'none';
@@ -257,32 +257,17 @@ more bitcoin magic).
});
}
- var query = (function() {
- var query = {};
- var search = (window.location.search + '').substring(1);
- var s = search.split('&');
- var i, parts;
-
- for (i = 0; i < s.length; i++) {
- parts = s[i].split('=');
- if (parts[0])
- query[parts[0]] = parts[1];
- }
-
- return query;
- })();
-
- bcoin.set({
- network: query.network || 'segnet4',
- useWorkers: true
+ options = bcoin.config({
+ query: true,
+ network: 'segnet4',
+ useWorkers: true,
+ coinCache: true,
+ logger: logger
});
- node = new bcoin.fullnode({
- prune: query.prune === 'true' || query.prune === '1',
- logger: logger,
- db: query.db || 'leveldb',
- coinCache: true
- });
+ bcoin.set(options);
+
+ node = new bcoin.fullnode(options);
node.on('error', function(err) {
;
diff --git a/lib/net/peer.js b/lib/net/peer.js
index f0070bbf..b8017d2e 100644
--- a/lib/net/peer.js
+++ b/lib/net/peer.js
@@ -194,6 +194,10 @@ Peer.prototype._init = function init() {
case 'ECONNRESET':
self.ignore();
break;
+ default:
+ if (!self.connected)
+ self.ignore();
+ break;
}
});
diff --git a/lib/node/config.js b/lib/node/config.js
index c012f420..991a6540 100644
--- a/lib/node/config.js
+++ b/lib/node/config.js
@@ -44,10 +44,8 @@ config.alias = {
*/
config.parse = function parse(options) {
- var env = {};
- var arg = {};
var data = {};
- var conf, prefix, filename, dirname;
+ var arg, conf, prefix, filename, dirname;
if (!options)
options = {};
@@ -55,8 +53,8 @@ config.parse = function parse(options) {
merge(data, options);
if (options.env) {
- env = config.parseEnv();
- merge(data, env);
+ arg = config.parseEnv();
+ merge(data, arg);
}
if (options.arg) {
@@ -64,7 +62,12 @@ config.parse = function parse(options) {
merge(data, arg);
}
- if (data.config) {
+ if (options.query) {
+ arg = config.parseQuery();
+ merge(data, arg);
+ }
+
+ if (data.config && !utils.isBrowser) {
prefix = config.getPrefix(data);
filename = data.config;
@@ -272,7 +275,7 @@ config.parseConfig = function parseConfig(text, prefix, dirname) {
if (eq === -1) {
key = line.trim();
- value = null;
+ value = '';
} else {
key = line.substring(0, eq).trim();
value = line.substring(eq + 1).trim();
@@ -330,15 +333,15 @@ config.parseArg = function parseArg(argv) {
key = key.replace(/\-/g, '');
- alias = config.alias.arg[key];
- if (alias)
- key = alias;
+ if (key.length === 0)
+ continue;
if (value.length === 0)
continue;
- if (key.length === 0)
- continue;
+ alias = config.alias.arg[key];
+ if (alias)
+ key = alias;
data[key] = value;
@@ -404,16 +407,71 @@ config.parseEnv = function parseEnv(env) {
key = key.substring(6);
key = key.replace(/_/g, '').toLowerCase();
- alias = config.alias.env[key];
- if (alias)
- key = alias;
-
if (key.length === 0)
continue;
if (value.length === 0)
continue;
+ alias = config.alias.env[key];
+ if (alias)
+ key = alias;
+
+ data[key] = value;
+ }
+
+ return config.parseData(data);
+};
+
+/**
+ * Parse querystring variables.
+ * @param {String} query
+ * @returns {Object}
+ */
+
+config.parseQuery = function parseQuery(query) {
+ var data = {};
+ var i, parts, index, pair, key, value, alias;
+
+ if (!utils.isBrowser)
+ return data;
+
+ if (query == null) {
+ query = utils.global.location.search;
+ if (typeof query !== 'string')
+ return data;
+ query = query.substring(1);
+ }
+
+ parts = query.split('&');
+
+ for (i = 0; i < parts.length; i++) {
+ pair = parts[i];
+ index = pair.indexOf('=');
+
+ if (index === -1) {
+ key = pair;
+ value = '';
+ } else {
+ key = pair.substring(0, index);
+ value = pair.substring(index + 1);
+ }
+
+ key = unescape(key);
+ key = key.replace(/\-/g, '').toLowerCase();
+
+ if (key.length === 0)
+ continue;
+
+ value = unescape(value);
+
+ if (value.length === 0)
+ continue;
+
+ alias = config.alias.env[key];
+ if (alias)
+ key = alias;
+
data[key] = value;
}
@@ -646,6 +704,14 @@ function merge(a, b) {
return a;
}
+function unescape(str) {
+ try {
+ str = decodeURIComponent(str).replace(/\+/g, ' ');
+ } finally {
+ return str.replace(/\0/g, '');
+ }
+}
+
/*
* Expose
*/
diff --git a/lib/utils/uri.js b/lib/utils/uri.js
index 5473a269..284a1bc8 100644
--- a/lib/utils/uri.js
+++ b/lib/utils/uri.js
@@ -160,8 +160,10 @@ function parsePairs(str) {
if (key.length === 0)
continue;
- if (value.length > 0)
- value = unescape(value);
+ value = unescape(value);
+
+ if (value.length === 0)
+ continue;
data[key] = value;
}