diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2019-10-18 12:03:13 -0700 |
---|---|---|
committer | Jonas Schnelli <dev@jonasschnelli.ch> | 2019-10-23 09:27:32 +0200 |
commit | f342a5e61a73e1edf389b662d265d20cf26a1d51 (patch) | |
tree | 360b936d99f52fe569f12664c68517279001d060 /src/net.h | |
parent | 6a91499496d76c2b3e84489e9723b60514fb08db (diff) |
Make resetting implicit in TransportDeserializer::Read()
Diffstat (limited to 'src/net.h')
-rw-r--r-- | src/net.h | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -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); }; |