From 5bca46d084eba73d0d179672a24a95c253018c87 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 18 Jun 2012 17:01:43 -0700 Subject: [PATCH] Handle received validations. --- src/Peer.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Peer.cpp b/src/Peer.cpp index a81196b140..6cfd008437 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -595,7 +595,7 @@ void Peer::recvTransaction(newcoin::TMTransaction& packet) { #endif std::string rawTx = packet.rawtransaction(); - Serializer s(std::vector(rawTx.begin(), rawTx.end())); + Serializer s(rawTx); SerializerIterator sit(s); SerializedTransaction::pointer stx = boost::make_shared(boost::ref(sit)); @@ -668,6 +668,31 @@ void Peer::recvHaveTxSet(newcoin::TMHaveTransactionSet& packet) void Peer::recvValidation(newcoin::TMValidation& packet) { + if (packet.validation().size() < 50) + { + punishPeer(PP_UNKNOWN_REQUEST); + return; + } + try + { + Serializer s(packet.validation()); + SerializerIterator sit(s); + SerializedValidation::pointer val = boost::make_shared(boost::ref(sit)); + if (!val->isValid()) + { + punishPeer(PP_UNKNOWN_REQUEST); + return; + } + if (theApp->getOPs().recvValidation(val)) + { + PackedMessage::pointer message = boost::make_shared(packet, newcoin::mtVALIDATION); + theApp->getConnectionPool().relayMessage(this, message); + } + } + catch (...) + { + punishPeer(PP_UNKNOWN_REQUEST); + } } void Peer::recvGetValidation(newcoin::TMGetValidations& packet)