parser: fix version parsing. check user agent in tests.

This commit is contained in:
Christopher Jeffrey 2014-06-06 15:47:29 -05:00
parent 3d3e61dc6e
commit 005c11e967
2 changed files with 21 additions and 4 deletions

View File

@ -122,17 +122,29 @@ Parser.prototype.parseVersion = function parseVersion(p) {
// Nonce, very dramatic
var nonce = { lo: readU32(p, 72), hi: readU32(p, 76) };
// User agent length
var result = readIntv(p, 80);
var off = result.off;
var agent = p.slice(off, off + result.r);
off += result.r;
// Start height
var height = readU32(p, 81);
var height = readU32(p, off);
off += 4;
// Relay
var relay = p.length >= 86 ? p[85] === 1 : true;
var relay = p.length > off ? p[off] === 1 : true;
// NOTE: Could just do this to make relay
// `false` when it's not included:
// var relay = p[off] === 1;
return {
v: v,
services: services,
ts: ts,
nonce: nonce,
agent: utils.stringify(agent),
height: height,
relay: relay
};

View File

@ -3,6 +3,9 @@ var bcoin = require('../');
var utils = bcoin.utils;
describe('Protocol', function() {
var version = require('../package.json').version;
var agent = '/bcoin:' + version + '/';
var parser;
var framer;
beforeEach(function() {
@ -24,14 +27,16 @@ describe('Protocol', function() {
packetTest('version', {}, function(payload) {
assert.equal(payload.v, 70002);
assert.equal(payload.relay, false);
assert.equal(payload.agent, agent);
assert.equal(payload.height, 0);
assert.equal(payload.relay, false);
});
packetTest('version', { relay: true, height: 10 }, function(payload) {
assert.equal(payload.v, 70002);
assert.equal(payload.relay, true);
assert.equal(payload.agent, agent);
assert.equal(payload.height, 10);
assert.equal(payload.relay, true);
});
packetTest('verack', {}, function(payload) {