This commit is contained in:
J. Nick Koston
2026-04-03 23:27:19 -10:00
parent a3febe4a9e
commit 392aa0fcbc
@@ -302,21 +302,18 @@ APIError APIPlaintextFrameHelper::write_protobuf_messages(ProtoWriteBuffer buffe
assert(!messages.empty());
#endif
uint8_t *buffer_data = buffer.get_buffer()->data();
uint8_t *write_start = nullptr;
uint16_t total_len = 0;
// First message has max padding (HEADER_PADDING), may have unused leading bytes.
// Subsequent messages were encoded with exact header sizes, so they are contiguous.
const auto &first = messages[0];
uint8_t header_len =
write_plaintext_header(buffer_data + first.offset, first.payload_size, first.message_type, HEADER_PADDING);
uint8_t *write_start = buffer_data + first.offset + HEADER_PADDING - header_len;
uint16_t total_len = header_len + first.payload_size;
// Write headers for remaining messages — padding equals actual header size
// (stored in msg.header_size), so write_plaintext_header writes at offset 0 with no gap.
for (size_t i = 1; i < messages.size(); i++) {
const auto &msg = messages[i];
write_plaintext_header(buffer_data + msg.offset, msg.payload_size, msg.message_type, msg.header_size);
total_len += msg.header_size + msg.payload_size;
// First message has max padding (header_size = HEADER_PADDING), may have unused leading bytes.
// Subsequent messages were encoded with exact header sizes (header_size = actual header len).
// write_plaintext_header right-justifies the header within header_size bytes of padding.
for (const auto &msg : messages) {
uint8_t header_len =
write_plaintext_header(buffer_data + msg.offset, msg.payload_size, msg.message_type, msg.header_size);
if (write_start == nullptr)
write_start = buffer_data + msg.offset + msg.header_size - header_len;
total_len += header_len + msg.payload_size;
}
return this->write_raw_fast_buf_(write_start, total_len);