bitcore-lib-zcash/lib/Peer.js

57 lines
1.5 KiB
JavaScript

var Net = require('net');
var Binary = require('binary');
var buffertools = require('buffertools');
function Peer(host, port, services) {
if ("string" === typeof host) {
if (host.indexOf(':') && !port) {
var parts = host.split(':');
host = parts[0];
port = parts[1];
}
this.host = host;
this.port = +port || 8333;
} else if (host instanceof Peer) {
this.host = host.host;
this.port = host.port;
} else if (Buffer.isBuffer(host)) {
if (buffertools.compare(Peer.IPV6_IPV4_PADDING, host.slice(0, 12)) != 0) {
throw new Error('IPV6 not supported yet! Cannot instantiate host.');
}
this.host = Array.prototype.slice.apply(host.slice(12)).join('.');
this.port = +port || 8333;
} else {
throw new Error('Could not instantiate peer, invalid parameter type: ' +
typeof host);
}
this.services = (services) ? services : null;
this.lastSeen = 0;
};
Peer.IPV6_IPV4_PADDING = new Buffer([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255]);
Peer.prototype.createConnection = function() {
this.connection = Net.createConnection(this.port, this.host);
return this.connection;
};
Peer.prototype.getHostAsBuffer = function() {
return new Buffer(this.host.split('.'));
};
Peer.prototype.toString = function() {
return this.host + ":" + this.port;
};
Peer.prototype.toBuffer = function() {
var put = Binary.put();
put.word32le(this.lastSeen);
put.word64le(this.services);
put.put(this.getHostAsBuffer());
put.word16be(this.port);
return put.buffer();
};
module.exports = Peer;