|
|
@ -678,7 +678,6 @@ int CNetMessage::readHeader(const char *pch, unsigned int nBytes) |
|
|
|
|
|
|
|
|
|
|
|
// switch state to reading message data
|
|
|
|
// switch state to reading message data
|
|
|
|
in_data = true; |
|
|
|
in_data = true; |
|
|
|
vRecv.resize(hdr.nMessageSize); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nCopy; |
|
|
|
return nCopy; |
|
|
|
} |
|
|
|
} |
|
|
@ -688,6 +687,11 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes) |
|
|
|
unsigned int nRemaining = hdr.nMessageSize - nDataPos; |
|
|
|
unsigned int nRemaining = hdr.nMessageSize - nDataPos; |
|
|
|
unsigned int nCopy = std::min(nRemaining, nBytes); |
|
|
|
unsigned int nCopy = std::min(nRemaining, nBytes); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (vRecv.size() < nDataPos + nCopy) { |
|
|
|
|
|
|
|
// Allocate up to 256 KiB ahead, but never more than the total message size.
|
|
|
|
|
|
|
|
vRecv.resize(std::min(hdr.nMessageSize, nDataPos + nCopy + 256 * 1024)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
memcpy(&vRecv[nDataPos], pch, nCopy); |
|
|
|
memcpy(&vRecv[nDataPos], pch, nCopy); |
|
|
|
nDataPos += nCopy; |
|
|
|
nDataPos += nCopy; |
|
|
|
|
|
|
|
|
|
|
|