72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
var Message = require('../message');
|
|
var inherits = require('util').inherits;
|
|
var bitcore = require('bitcore');
|
|
var utils = require('../utils');
|
|
var BufferReader = bitcore.encoding.BufferReader;
|
|
var BufferWriter = bitcore.encoding.BufferWriter;
|
|
var $ = bitcore.util.preconditions;
|
|
|
|
var BlockHeader = bitcore.BlockHeader;
|
|
var magicNumber = bitcore.Networks.defaultNetwork.networkMagic.readUInt32LE(0);
|
|
|
|
/**
|
|
* Sent in response to a `getheaders` message. It contains information about
|
|
* block headers.
|
|
*
|
|
* @param{Array} blockheaders - array of block headers
|
|
*/
|
|
function HeadersMessage(options) {
|
|
if (!(this instanceof HeadersMessage)) {
|
|
return new HeadersMessage(options);
|
|
}
|
|
if(!options) {
|
|
options = {};
|
|
}
|
|
Message.call(this, options);
|
|
this.magicNumber = magicNumber;
|
|
this.command = 'headers';
|
|
this.headers = options.headers;
|
|
};
|
|
inherits(HeadersMessage, Message);
|
|
|
|
HeadersMessage.fromObject = function(options) {
|
|
return new HeadersMessage(options);
|
|
};
|
|
|
|
HeadersMessage.fromBuffer = function(payload) {
|
|
var obj = {};
|
|
|
|
$.checkArgument(payload && payload.length > 0, 'No data found to create Headers message');
|
|
var parser = new BufferReader(payload);
|
|
var count = parser.readVarintNum();
|
|
|
|
obj.headers = [];
|
|
for (var i = 0; i < count; i++) {
|
|
var header = BlockHeader.fromBufferReader(parser);
|
|
obj.headers.push(header);
|
|
var txn_count = parser.readUInt8();
|
|
$.checkState(txn_count === 0, 'txn_count should always be 0');
|
|
}
|
|
utils.checkFinished(parser);
|
|
|
|
return HeadersMessage.fromObject(obj);
|
|
};
|
|
|
|
HeadersMessage.prototype.getPayload = function() {
|
|
var bw = new BufferWriter();
|
|
bw.writeVarintNum(this.headers.length);
|
|
for (var i = 0; i < this.headers.length; i++) {
|
|
var buffer = this.headers[i].toBuffer();
|
|
bw.write(buffer);
|
|
bw.writeUInt8(0);
|
|
}
|
|
return bw.concat();
|
|
};
|
|
|
|
module.exports = function(options) {
|
|
magicNumber = options.magicNumber || magicNumber;
|
|
return HeadersMessage;
|
|
};
|