aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Schnelli <dev@jonasschnelli.ch>2019-06-13 11:07:50 +0200
committerJonas Schnelli <dev@jonasschnelli.ch>2019-10-18 08:56:08 +0200
commit1a5c656c3169ba525f84145d19ce8c64f2cf1efb (patch)
treeca8d33a4009c55ce5145482e4af6788966a1fc2f
parent6294ecdb8bb4eb7049a18c721ee8cb4a53d80a06 (diff)
Remove transport protocol knowhow from CNetMessage / net processing
-rw-r--r--src/net.cpp5
-rw-r--r--src/net.h1
-rw-r--r--src/net_processing.cpp2
3 files changed, 5 insertions, 3 deletions
diff --git a/src/net.cpp b/src/net.cpp
index bd183ce52b..ee9d71786a 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -601,7 +601,7 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
if (i == mapRecvBytesPerMsgCmd.end())
i = mapRecvBytesPerMsgCmd.find(NET_MESSAGE_COMMAND_OTHER);
assert(i != mapRecvBytesPerMsgCmd.end());
- i->second += m_deserializer->hdr.nMessageSize + CMessageHeader::HEADER_SIZE;
+ i->second += msg.m_raw_message_size;
// push the message to the process queue,
vRecvMsg.push_back(std::move(msg));
@@ -707,6 +707,7 @@ CNetMessage TransportDeserializer::GetMessage(const CMessageHeader::MessageStart
// store command string, payload size
msg.m_command = hdr.GetCommand();
msg.m_message_size = hdr.nMessageSize;
+ msg.m_raw_message_size = hdr.nMessageSize + CMessageHeader::HEADER_SIZE;
msg.m_valid_checksum = (memcmp(hash.begin(), hdr.pchChecksum, CMessageHeader::CHECKSUM_SIZE) == 0);
if (!msg.m_valid_checksum) {
@@ -1377,7 +1378,7 @@ void CConnman::SocketHandler()
for (; it != pnode->vRecvMsg.end(); ++it) {
// vRecvMsg contains only completed CNetMessage
// the single possible partially deserialized message are held by TransportDeserializer
- nSizeAdded += it->m_recv.size() + CMessageHeader::HEADER_SIZE;
+ nSizeAdded += it->m_raw_message_size;
}
{
LOCK(pnode->cs_vProcessMsg);
diff --git a/src/net.h b/src/net.h
index a9ce33957d..15996438c9 100644
--- a/src/net.h
+++ b/src/net.h
@@ -621,6 +621,7 @@ public:
bool m_valid_header = false;
bool m_valid_checksum = false;
uint32_t m_message_size = 0; // size of the payload
+ uint32_t m_raw_message_size = 0; // used wire size of the message (including header/checksum)
std::string m_command;
CNetMessage(const CDataStream& recv_in) : m_recv(std::move(recv_in)) {}
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index c8ffbbbe9d..9496516c37 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -3260,7 +3260,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
return false;
// Just take one message
msgs.splice(msgs.begin(), pfrom->vProcessMsg, pfrom->vProcessMsg.begin());
- pfrom->nProcessQueueSize -= msgs.front().m_recv.size() + CMessageHeader::HEADER_SIZE;
+ pfrom->nProcessQueueSize -= msgs.front().m_raw_message_size;
pfrom->fPauseRecv = pfrom->nProcessQueueSize > connman->GetReceiveFloodSize();
fMoreWork = !pfrom->vProcessMsg.empty();
}