4 changed files with 112 additions and 6 deletions
@ -0,0 +1,56 @@ |
|||
var Net = require('net'); |
|||
var Put = require('bufferput'); |
|||
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 = new Put(); |
|||
put.word32le(this.lastSeen); |
|||
put.word64le(this.services); |
|||
put.put(this.getHostAsBuffer()); |
|||
put.word16be(this.port); |
|||
return put.buffer(); |
|||
}; |
|||
|
|||
module.exports = Peer; |
@ -0,0 +1,52 @@ |
|||
'use strict'; |
|||
|
|||
var chai = require('chai'); |
|||
var bitcore = require('../..'); |
|||
|
|||
var should = chai.should(); |
|||
|
|||
var PeerModule = bitcore.transport.Peer; |
|||
var Peer; |
|||
|
|||
describe('Peer', function() { |
|||
it('should initialze the main object', function() { |
|||
should.exist(PeerModule); |
|||
}); |
|||
|
|||
it('should be able to create class', function() { |
|||
Peer = PeerModule; |
|||
should.exist(Peer); |
|||
}); |
|||
|
|||
it('should be able to create instance', function() { |
|||
var p = new Peer('localhost', 8333); |
|||
should.exist(p); |
|||
}); |
|||
|
|||
it('should be able to create instance', function() { |
|||
var p = new Peer('localhost:8333'); |
|||
should.exist(p); |
|||
}); |
|||
|
|||
it('should be able to create instance', function() { |
|||
var p = new Peer('localhost:8333'); |
|||
var p2 = new Peer(p); |
|||
should.exist(p2); |
|||
}); |
|||
|
|||
it('should not be able to create instance', function() { |
|||
should.throw(function() { |
|||
new Peer(8333); |
|||
}); |
|||
}); |
|||
|
|||
it('should be able to create instance', function() { |
|||
var p = new Peer('localhost', 8333); |
|||
p.toString().should.equal('localhost:8333'); |
|||
}); |
|||
|
|||
it('check host as buffer', function() { |
|||
var p = new Peer('127.0.0.1', 8333); |
|||
p.getHostAsBuffer().toString('hex').should.equal('7f000001'); |
|||
}); |
|||
}); |
Loading…
Reference in new issue