net: fix peer error handling.

This commit is contained in:
Christopher Jeffrey 2016-12-16 19:28:14 -08:00
parent 2beb9c06a5
commit a23a5437a4
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -912,7 +912,7 @@ Peer.prototype.needsDrain = function needsDrain(size) {
if (this.drainSize >= (5 << 20)) {
this.logger.warning(
'Peer is not reading: %s buffered (%s).',
'Peer is not reading: %dmb buffered (%s).',
util.mb(this.drainSize),
this.hostname);
this.destroy();
@ -984,9 +984,6 @@ Peer.prototype.sendRaw = function sendRaw(cmd, body, checksum) {
Peer.prototype.error = function error(err) {
var i, args, msg;
if (this.destroyed)
return;
if (typeof err === 'string') {
args = new Array(arguments.length);
@ -1534,39 +1531,39 @@ Peer.prototype.handleVersion = co(function* handleVersion(version) {
this.ignore();
throw new Error('Peer does not support network services.');
}
}
if (this.options.headers) {
if (!version.hasHeaders()) {
this.ignore();
throw new Error('Peer does not support getheaders.');
}
}
if (this.options.spv) {
if (!version.hasBloom()) {
this.ignore();
throw new Error('Peer does not support BIP37.');
}
}
if (this.options.witness) {
this.haveWitness = version.hasWitness();
if (!this.haveWitness) {
if (!this.network.oldWitness) {
if (this.options.headers) {
if (!version.hasHeaders()) {
this.ignore();
throw new Error('Peer does not support segregated witness.');
throw new Error('Peer does not support getheaders.');
}
}
try {
yield this.request('havewitness');
} catch (err) {
if (this.options.spv) {
if (!version.hasBloom()) {
this.ignore();
throw new Error('Peer does not support segregated witness.');
throw new Error('Peer does not support BIP37.');
}
}
this.haveWitness = true;
if (this.options.witness) {
this.haveWitness = version.hasWitness();
if (!this.haveWitness) {
if (!this.network.oldWitness) {
this.ignore();
throw new Error('Peer does not support segregated witness.');
}
try {
yield this.request('havewitness');
} catch (err) {
this.ignore();
throw new Error('Peer does not support segregated witness.');
}
this.haveWitness = true;
}
}
}