Add missing serializations

This commit is contained in:
Yemel Jardi 2014-12-10 11:28:27 -03:00
parent 56907c1a3b
commit 2d4b26a6a1
1 changed files with 37 additions and 13 deletions

View File

@ -5,12 +5,13 @@ var buffertools = require('buffertools');
var Put = require('bufferput');
var util = require('util');
var Block = require('../block');
var BlockHeaderModel = require('../blockheader');
var BlockModel = require('../block');
var BufferReader = require('../encoding/bufferreader');
var BufferUtil = require('../util/buffer');
var Hash = require('../crypto/hash');
var Random = require('../crypto/random');
var Transaction = require('../transaction');
var TransactionModel = require('../transaction');
var CONNECTION_NONCE = Random.getPseudoRandomBuffer(8);
var PROTOCOL_VERSION = 70000;
@ -303,7 +304,17 @@ Addresses.prototype.fromBuffer = function(payload) {
};
Addresses.prototype.getPayload = function() {
return BufferUtil.EMPTY_BUFFER; // TODO
var put = new Put();
put.varint(this.addresses.length);
for (var i = 0; i < this.addresses.length; i++) {
put.word32le(this.addresses[i].time);
put.word64le(this.addresses[i].services);
put.put(this.addresses[i].ip);
put.word16be(this.addresses[i].port);
}
return put.buffer();
};
module.exports.Addresses = Message.COMMANDS['addr'] = Addresses;
@ -360,7 +371,14 @@ Alert.prototype.fromBuffer = function(payload) {
};
Alert.prototype.getPayload = function() {
return BufferUtil.EMPTY_BUFFER; // TODO: Serialize
var put = new Put();
put.varint(this.payload.length);
put.put(this.payload);
put.varint(this.signature.length);
put.put(this.signature);
return put.buffer();
};
module.exports.Alert = Message.COMMANDS['alert'] = Alert;
@ -382,7 +400,7 @@ Headers.prototype.fromBuffer = function(payload) {
this.headers = [];
for (var i = 0; i < count; i++) {
var header = Block().fromBufferReader(parser);
var header = BlockHeaderModel._fromBufferReader(parser);
this.headers.push(header);
}
@ -390,7 +408,15 @@ Headers.prototype.fromBuffer = function(payload) {
};
Headers.prototype.getPayload = function() {
return BufferUtil.EMPTY_BUFFER; // TODO: Serialize
var put = new Put();
put.varint(this.headers.length);
for (var i = 0; i < this.headers.length; i++) {
var buffer = this.headers[i].toBuffer();
put.put(buffer);
}
return put.buffer();
};
module.exports.Headers = Message.COMMANDS['headers'] = Headers;
@ -407,13 +433,12 @@ function Block(block) {
util.inherits(Block, Message);
Block.prototype.fromBuffer = function(payload) {
var parser = new BufferReader(payload);
this.block = Block().fromBufferReader(parser);
this.block = BlockModel(payload);
return this;
};
Block.prototype.getPayload = function() {
return BufferUtil.EMPTY_BUFFER; // TODO: Serialize
return this.block.toBuffer();
};
module.exports.Block = Message.COMMANDS['block'] = Block;
@ -430,13 +455,12 @@ function Transaction(transaction) {
util.inherits(Transaction, Message);
Transaction.prototype.fromBuffer = function(payload) {
var parser = new BufferReader(payload);
this.transaction = Transaction().fromBufferReader(parser);
this.transaction = TransactionModel(payload);
return this;
};
Transaction.prototype.getPayload = function() {
return BufferUtil.EMPTY_BUFFER; // TODO: Serialize
return this.transaction.toBuffer();
};
module.exports.Transaction = Message.COMMANDS['tx'] = Transaction;
@ -474,7 +498,7 @@ GetBlocks.prototype.getPayload = function() {
put.word32le(this.version);
put.varint(this.starts.length);
for (var i = 0; i < starts.length; i++) {
for (var i = 0; i < this.starts.length; i++) {
if (this.starts[i].length != 32) {
throw new Error('Invalid hash length');
}