From 7d153490ab7e0f2e5cd1a069594779e1467616e0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 5 Jun 2012 15:54:52 -0700 Subject: [PATCH] Bugfixes. --- src/LedgerAcquire.cpp | 1 - src/Peer.cpp | 8 ++++++-- src/TransactionEngine.h | 2 +- src/newcoin.proto | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/LedgerAcquire.cpp b/src/LedgerAcquire.cpp index 1a71d79bc1..eb3769edad 100644 --- a/src/LedgerAcquire.cpp +++ b/src/LedgerAcquire.cpp @@ -403,7 +403,6 @@ bool LedgerAcquireMaster::gotLedgerData(newcoin::TMLedgerData& packet, Peer::poi { if (packet.nodes_size() != 1) return false; const newcoin::TMLedgerNode& node = packet.nodes(0); - if (!node.has_nodedata()) return false; return ledger->takeBase(node.nodedata(), peer); } else if ((packet.type() == newcoin::liTX_NODE) || (packet.type() == newcoin::liAS_NODE)) diff --git a/src/Peer.cpp b/src/Peer.cpp index 893db52ab0..87b6dc8176 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -800,6 +800,7 @@ void Peer::recvGetLedger(newcoin::TMGetLedger& packet) if(packet.itype() == newcoin::liBASE) { // they want the ledger base data + Log(lsTRACE) << "Want ledger base data"; Serializer nData(128); ledger->addRaw(nData); reply.add_nodes()->set_nodedata(nData.getDataPtr(), nData.getLength()); @@ -834,6 +835,7 @@ void Peer::recvGetLedger(newcoin::TMGetLedger& packet) { std::vector::iterator nodeIDIterator; std::list< std::vector >::iterator rawNodeIterator; + int count = 0; for(nodeIDIterator = nodeIDs.begin(), rawNodeIterator = rawNodes.begin(); nodeIDIterator != nodeIDs.end(); ++nodeIDIterator, ++rawNodeIterator) { @@ -842,7 +844,9 @@ void Peer::recvGetLedger(newcoin::TMGetLedger& packet) newcoin::TMLedgerNode* node = reply.add_nodes(); node->set_nodeid(nID.getDataPtr(), nID.getLength()); node->set_nodedata(&rawNodeIterator->front(), rawNodeIterator->size()); + ++count; } + Log(lsTRACE) << "GetNodeFat: sending " << count << " nodes"; } } PackedMessage::pointer oPacket = boost::make_shared(reply, newcoin::mtLEDGER_DATA); @@ -875,12 +879,12 @@ void Peer::recvLedger(newcoin::TMLedgerData& packet) for (int i = 0; i < packet.nodes().size(); ++i) { const newcoin::TMLedgerNode& node = packet.nodes(i); - if (!node.has_nodeid() || !node.has_nodedata()) + if (!node.has_nodeid() || !node.has_nodedata() || (node.nodeid().size() != 33)) { + Log(lsWARNING) << "LedgerData request with invalid node ID"; punishPeer(PP_INVALID_REQUEST); return; } - nodeIDs.push_back(SHAMapNode(node.nodeid().data(), node.nodeid().size())); nodeData.push_back(std::vector(node.nodedata().begin(), node.nodedata().end())); } diff --git a/src/TransactionEngine.h b/src/TransactionEngine.h index 7e34e53c2f..597084b59f 100644 --- a/src/TransactionEngine.h +++ b/src/TransactionEngine.h @@ -127,7 +127,7 @@ public: Ledger::pointer getDefaultLedger() { return mDefaultLedger; } void setDefaultLedger(Ledger::pointer ledger) { mDefaultLedger = ledger; } Ledger::pointer getAlternateLedger() { return mAlternateLedger; } - void setAlternateLedger(Ledger::pointer ledger) { mDefaultLedger = ledger; } + void setAlternateLedger(Ledger::pointer ledger) { mAlternateLedger = ledger; } void setLedger(Ledger::pointer ledger) { mDefaultLedger = ledger; mAlternateLedger = Ledger::pointer(); } diff --git a/src/newcoin.proto b/src/newcoin.proto index 5355f52a11..5e3a0c4bc7 100644 --- a/src/newcoin.proto +++ b/src/newcoin.proto @@ -203,8 +203,8 @@ message TMObjectByHash } message TMLedgerNode { - required bytes nodeid = 1; - required bytes nodedata = 2; + required bytes nodedata = 1; + optional bytes nodeid = 2; // missing for ledger base data } enum TMLedgerInfoType {