aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2019-10-18 12:03:13 -0700
committerJonas Schnelli <dev@jonasschnelli.ch>2019-10-23 09:27:32 +0200
commitf342a5e61a73e1edf389b662d265d20cf26a1d51 (patch)
tree360b936d99f52fe569f12664c68517279001d060
parent6a91499496d76c2b3e84489e9723b60514fb08db (diff)
downloadbitcoin-f342a5e61a73e1edf389b662d265d20cf26a1d51.tar.xz
Make resetting implicit in TransportDeserializer::Read()
-rw-r--r--src/net.cpp5
-rw-r--r--src/net.h18
2 files changed, 11 insertions, 12 deletions
diff --git a/src/net.cpp b/src/net.cpp
index 8b9ef1d0aa..be4427f793 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -572,10 +572,7 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
while (nBytes > 0) {
// absorb network data
int handled = m_deserializer->Read(pch, nBytes);
- if (handled < 0) {
- m_deserializer->Reset();
- return false;
- }
+ if (handled < 0) return false;
pch += handled;
nBytes -= handled;
diff --git a/src/net.h b/src/net.h
index 570ae83465..f6a04f5166 100644
--- a/src/net.h
+++ b/src/net.h
@@ -638,8 +638,6 @@ public:
*/
class TransportDeserializer {
public:
- // prepare for next message
- virtual void Reset() = 0;
// returns true if the current deserialization is complete
virtual bool Complete() const = 0;
// set the serialization context version
@@ -666,11 +664,6 @@ private:
const uint256& GetMessageHash() const;
int readHeader(const char *pch, unsigned int nBytes);
int readData(const char *pch, unsigned int nBytes);
-public:
-
- V1TransportDeserializer(const CMessageHeader::MessageStartChars& pchMessageStartIn, int nTypeIn, int nVersionIn) : hdrbuf(nTypeIn, nVersionIn), hdr(pchMessageStartIn), vRecv(nTypeIn, nVersionIn) {
- Reset();
- }
void Reset() {
vRecv.clear();
@@ -682,6 +675,13 @@ public:
data_hash.SetNull();
hasher.Reset();
}
+
+public:
+
+ V1TransportDeserializer(const CMessageHeader::MessageStartChars& pchMessageStartIn, int nTypeIn, int nVersionIn) : hdrbuf(nTypeIn, nVersionIn), hdr(pchMessageStartIn), vRecv(nTypeIn, nVersionIn) {
+ Reset();
+ }
+
bool Complete() const
{
if (!in_data)
@@ -694,7 +694,9 @@ public:
vRecv.SetVersion(nVersionIn);
}
int Read(const char *pch, unsigned int nBytes) {
- return in_data ? readData(pch, nBytes) : readHeader(pch, nBytes);
+ int ret = in_data ? readData(pch, nBytes) : readHeader(pch, nBytes);
+ if (ret < 0) Reset();
+ return ret;
}
CNetMessage GetMessage(const CMessageHeader::MessageStartChars& message_start, int64_t time);
};