From b5afbf52ec5df74da6239c0b58d9303bfbb564b4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 24 Jan 2012 21:29:54 -0800 Subject: [PATCH] Protocol enhancements for network 'previous ledger' sync. --- Peer.cpp | 13 +++++++++++-- Peer.h | 2 +- Serializer.h | 2 ++ newcoin.proto | 15 +++++++++------ 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Peer.cpp b/Peer.cpp index 204dfbdd7..6136ea279 100644 --- a/Peer.cpp +++ b/Peer.cpp @@ -255,7 +255,7 @@ void Peer::processReadBuffer() case newcoin::mtLEDGER: { - newcoin::TMLedger msg; + newcoin::TMLedgerData msg; if(msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE)) recvLedger(msg); else cout << "pars error: " << type << endl; @@ -415,7 +415,7 @@ void Peer::recvGetLedger(newcoin::TMGetLedger& packet) { } -void Peer::recvLedger(newcoin::TMLedger& packet) +void Peer::recvLedger(newcoin::TMLedgerData& packet) { } @@ -427,6 +427,15 @@ void Peer::sendHello() h->set_ledgerindex(theApp->getOPs().getCurrentLedgerID()); h->set_nettime(theApp->getOPs().getNetworkTime()); h->set_ipv4port(theConfig.PEER_PORT); + + Ledger::pointer closingLedger=theApp->getMasterLedger().getClosingLedger(); + if(closingLedger->isClosed()) + { + Serializer s(128); + closingLedger->addRaw(s); + h->set_closedledger(s.getDataPtr(), s.getLength()); + } + PackedMessage::pointer packet(new PackedMessage(PackedMessage::MessagePointer(h), newcoin::mtHELLO)); sendPacket(packet); } diff --git a/Peer.h b/Peer.h index 51657b14b..99b5c442f 100644 --- a/Peer.h +++ b/Peer.h @@ -58,7 +58,7 @@ protected: void recvGetAccount(newcoin::TMGetAccount& packet); void recvAccount(newcoin::TMAccount& packet); void recvGetLedger(newcoin::TMGetLedger& packet); - void recvLedger(newcoin::TMLedger& packet); + void recvLedger(newcoin::TMLedgerData& packet); public: typedef boost::shared_ptr pointer; diff --git a/Serializer.h b/Serializer.h index 3e8c55451..2c0cc0fd7 100644 --- a/Serializer.h +++ b/Serializer.h @@ -47,6 +47,8 @@ class Serializer // totality functions int getLength() const { return mData.size(); } + const void* getDataPtr() const { return &mData.front(); } + void* getDataPtr() { return &mData.front(); } const std::vector& peekData() const { return mData; } std::vector getData() const { return mData; } void secureErase() { memset(&(mData.front()), 0, mData.size()); erase(); } diff --git a/newcoin.proto b/newcoin.proto index 6dbb7ceb2..534c2f866 100644 --- a/newcoin.proto +++ b/newcoin.proto @@ -32,12 +32,15 @@ enum MessageType { // Sent on connect + + message TMHello { - required uint32 version = 1; - optional uint32 ledgerIndex = 2; - optional uint64 netTime = 3; - optional bytes nodeID = 4; // node may opt to remain anonymous - optional uint32 ipv4Port = 5; + required uint32 version = 1; + optional uint32 ledgerIndex = 2; + optional uint64 netTime = 3; + optional bytes nodeID = 4; // node may opt to remain anonymous + optional uint32 ipv4Port = 5; + optional bytes closedLedger = 6; } @@ -184,7 +187,7 @@ message TMGetLedger { optional uint32 seq = 4; // used to match replies to queries } -message TMLedger { +message TMLedgerData { required bytes hash = 1; repeated LedgerNodes nodes = 2; optional uint32 seq = 3; // matches seq from query