@@ -716,6 +716,19 @@ CNetMessage V1TransportDeserializer::GetMessage(const CMessageHeader::MessageSta
716
716
return msg;
717
717
}
718
718
719
+ void V1TransportSerializer::prepareForTransport (CSerializedNetMsg& msg, std::vector<unsigned char >& header) {
720
+ // create dbl-sha256 checksum
721
+ uint256 hash = Hash (msg.data .begin (), msg.data .end ());
722
+
723
+ // create header
724
+ CMessageHeader hdr (Params ().MessageStart (), msg.command .c_str (), msg.data .size ());
725
+ memcpy (hdr.pchChecksum , hash.begin (), CMessageHeader::CHECKSUM_SIZE);
726
+
727
+ // serialize header
728
+ header.reserve (CMessageHeader::HEADER_SIZE);
729
+ CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, header, 0 , hdr};
730
+ }
731
+
719
732
size_t CConnman::SocketSendData (CNode *pnode) const EXCLUSIVE_LOCKS_REQUIRED(pnode->cs_vSend)
720
733
{
721
734
auto it = pnode->vSendMsg .begin ();
@@ -2703,6 +2716,7 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn
2703
2716
}
2704
2717
2705
2718
m_deserializer = MakeUnique<V1TransportDeserializer>(V1TransportDeserializer (Params ().MessageStart (), SER_NETWORK, INIT_PROTO_VERSION));
2719
+ m_serializer = MakeUnique<V1TransportSerializer>(V1TransportSerializer ());
2706
2720
}
2707
2721
2708
2722
CNode::~CNode ()
@@ -2718,16 +2732,12 @@ bool CConnman::NodeFullyConnected(const CNode* pnode)
2718
2732
void CConnman::PushMessage (CNode* pnode, CSerializedNetMsg&& msg)
2719
2733
{
2720
2734
size_t nMessageSize = msg.data .size ();
2721
- size_t nTotalSize = nMessageSize + CMessageHeader::HEADER_SIZE;
2722
2735
LogPrint (BCLog::NET, " sending %s (%d bytes) peer=%d\n " , SanitizeString (msg.command ), nMessageSize, pnode->GetId ());
2723
2736
2737
+ // make sure we use the appropriate network transport format
2724
2738
std::vector<unsigned char > serializedHeader;
2725
- serializedHeader.reserve (CMessageHeader::HEADER_SIZE);
2726
- uint256 hash = Hash (msg.data .data (), msg.data .data () + nMessageSize);
2727
- CMessageHeader hdr (Params ().MessageStart (), msg.command .c_str (), nMessageSize);
2728
- memcpy (hdr.pchChecksum , hash.begin (), CMessageHeader::CHECKSUM_SIZE);
2729
-
2730
- CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, serializedHeader, 0 , hdr};
2739
+ pnode->m_serializer ->prepareForTransport (msg, serializedHeader);
2740
+ size_t nTotalSize = nMessageSize + serializedHeader.size ();
2731
2741
2732
2742
size_t nBytesSent = 0 ;
2733
2743
{
0 commit comments