fix: adjust source ID handling to resize header for sourced packets without hash

This commit is contained in:
MayaTheShy
2025-11-10 01:40:28 -05:00
parent 561ee4cb1b
commit c8fb6b1d58

View File

@@ -115,30 +115,11 @@ void NLPacket::setSequenceNumber(SequenceNumber seq) {
void NLPacket::setSourceID(LocalID id) {
m_sourceID = id;
m_isSourced = true;
// For verified sourced packets (like Ping), we need space for:
// [seq+flags(4)] [type(1)] [version(1)] [sourceID(2)] [hash(16)] [payload...]
// Total header = 8 bytes + 16 bytes for hash = 24 bytes
static constexpr size_t VERIFIED_HEADER_SIZE = SOURCED_HEADER_SIZE + 16;
// Resize header to include hash slot
if (m_headerSize != VERIFIED_HEADER_SIZE) {
size_t oldHeaderSize = m_headerSize;
m_headerSize = VERIFIED_HEADER_SIZE;
// If we already have payload data, we need to move it
if (m_data.size() > oldHeaderSize) {
std::vector<uint8_t> payload(m_data.begin() + oldHeaderSize, m_data.end());
m_data.resize(m_headerSize);
m_data.insert(m_data.end(), payload.begin(), payload.end());
} else {
m_data.resize(m_headerSize);
}
// Zero out the hash slot (bytes 8-23)
std::memset(m_data.data() + SOURCED_HEADER_SIZE, 0, 16);
// Resize if needed to sourced header (no hash - we don't have HMAC auth)
if (m_headerSize != SOURCED_HEADER_SIZE) {
m_headerSize = SOURCED_HEADER_SIZE;
m_data.resize(m_headerSize);
}
writeHeader();
}