Changeset View
Changeset View
Standalone View
Standalone View
src/net.cpp
Show First 20 Lines • Show All 751 Lines • ▼ Show 20 Lines | |||||
void V1TransportSerializer::prepareForTransport(const Config &config, | void V1TransportSerializer::prepareForTransport(const Config &config, | ||||
CSerializedNetMsg &msg, | CSerializedNetMsg &msg, | ||||
std::vector<uint8_t> &header) { | std::vector<uint8_t> &header) { | ||||
// create dbl-sha256 checksum | // create dbl-sha256 checksum | ||||
uint256 hash = Hash(msg.data.begin(), msg.data.end()); | uint256 hash = Hash(msg.data.begin(), msg.data.end()); | ||||
// create header | // create header | ||||
CMessageHeader hdr(config.GetChainParams().NetMagic(), msg.command.c_str(), | CMessageHeader hdr(config.GetChainParams().NetMagic(), msg.m_type.c_str(), | ||||
msg.data.size()); | msg.data.size()); | ||||
memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE); | memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE); | ||||
// serialize header | // serialize header | ||||
header.reserve(CMessageHeader::HEADER_SIZE); | header.reserve(CMessageHeader::HEADER_SIZE); | ||||
CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, header, 0, hdr}; | CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, header, 0, hdr}; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,192 Lines • ▼ Show 20 Lines | |||||
bool CConnman::NodeFullyConnected(const CNode *pnode) { | bool CConnman::NodeFullyConnected(const CNode *pnode) { | ||||
return pnode && pnode->fSuccessfullyConnected && !pnode->fDisconnect; | return pnode && pnode->fSuccessfullyConnected && !pnode->fDisconnect; | ||||
} | } | ||||
void CConnman::PushMessage(CNode *pnode, CSerializedNetMsg &&msg) { | void CConnman::PushMessage(CNode *pnode, CSerializedNetMsg &&msg) { | ||||
size_t nMessageSize = msg.data.size(); | size_t nMessageSize = msg.data.size(); | ||||
LogPrint(BCLog::NET, "sending %s (%d bytes) peer=%d\n", | LogPrint(BCLog::NET, "sending %s (%d bytes) peer=%d\n", | ||||
SanitizeString(msg.command), nMessageSize, pnode->GetId()); | SanitizeString(msg.m_type), nMessageSize, pnode->GetId()); | ||||
// make sure we use the appropriate network transport format | // make sure we use the appropriate network transport format | ||||
std::vector<uint8_t> serializedHeader; | std::vector<uint8_t> serializedHeader; | ||||
pnode->m_serializer->prepareForTransport(*config, msg, serializedHeader); | pnode->m_serializer->prepareForTransport(*config, msg, serializedHeader); | ||||
size_t nTotalSize = nMessageSize + serializedHeader.size(); | size_t nTotalSize = nMessageSize + serializedHeader.size(); | ||||
size_t nBytesSent = 0; | size_t nBytesSent = 0; | ||||
{ | { | ||||
LOCK(pnode->cs_vSend); | LOCK(pnode->cs_vSend); | ||||
bool optimisticSend(pnode->vSendMsg.empty()); | bool optimisticSend(pnode->vSendMsg.empty()); | ||||
// log total amount of bytes per command | // log total amount of bytes per message type | ||||
pnode->mapSendBytesPerMsgCmd[msg.command] += nTotalSize; | pnode->mapSendBytesPerMsgCmd[msg.m_type] += nTotalSize; | ||||
pnode->nSendSize += nTotalSize; | pnode->nSendSize += nTotalSize; | ||||
if (pnode->nSendSize > nSendBufferMaxSize) { | if (pnode->nSendSize > nSendBufferMaxSize) { | ||||
pnode->fPauseSend = true; | pnode->fPauseSend = true; | ||||
} | } | ||||
pnode->vSendMsg.push_back(std::move(serializedHeader)); | pnode->vSendMsg.push_back(std::move(serializedHeader)); | ||||
if (nMessageSize) { | if (nMessageSize) { | ||||
pnode->vSendMsg.push_back(std::move(msg.data)); | pnode->vSendMsg.push_back(std::move(msg.data)); | ||||
▲ Show 20 Lines • Show All 102 Lines • Show Last 20 Lines |