From 005c11e967b9c01f073dfac90362fcdf2702dc38 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 6 Jun 2014 15:47:29 -0500 Subject: [PATCH] parser: fix version parsing. check user agent in tests. --- lib/bcoin/protocol/parser.js | 16 ++++++++++++++-- test/protocol-test.js | 9 +++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/bcoin/protocol/parser.js b/lib/bcoin/protocol/parser.js index 401a7967..28bdb968 100644 --- a/lib/bcoin/protocol/parser.js +++ b/lib/bcoin/protocol/parser.js @@ -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 }; diff --git a/test/protocol-test.js b/test/protocol-test.js index 96476e70..11e506a4 100644 --- a/test/protocol-test.js +++ b/test/protocol-test.js @@ -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) {