1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-04 04:12:23 +01:00
This commit is contained in:
J. Nick Koston
2025-08-13 22:23:47 -05:00
parent b43ca2bbab
commit 3346e09785
2 changed files with 8 additions and 6 deletions

View File

@@ -294,9 +294,7 @@ uint16_t APIConnection::encode_message_to_buffer(ProtoMessage &msg, uint8_t mess
if (is_single || conn->flags_.batch_first_message) { if (is_single || conn->flags_.batch_first_message) {
// Single message or first batch message // Single message or first batch message
shared_buf.clear(); conn->prepare_first_message_buffer(shared_buf, header_padding, total_size);
shared_buf.reserve(total_size);
shared_buf.resize(header_padding);
if (conn->flags_.batch_first_message) { if (conn->flags_.batch_first_message) {
conn->flags_.batch_first_message = false; conn->flags_.batch_first_message = false;
} }

View File

@@ -252,17 +252,21 @@ class APIConnection : public APIServerConnection {
// Get header padding size - used for both reserve and insert // Get header padding size - used for both reserve and insert
uint8_t header_padding = this->helper_->frame_header_padding(); uint8_t header_padding = this->helper_->frame_header_padding();
// Get shared buffer from parent server // Get shared buffer from parent server
std::vector<uint8_t> &shared_buf = this->parent_->get_shared_buffer_ref(); std::vector<uint8_t> &shared_buf = this->parent_->get_shared_buffer_ref();
this->prepare_first_message_buffer(shared_buf, header_padding,
reserve_size + header_padding + this->helper_->frame_footer_size());
return {&shared_buf};
}
void prepare_first_message_buffer(std::vector<uint8_t> &shared_buf, size_t header_padding, size_t total_size) {
shared_buf.clear(); shared_buf.clear();
// Reserve space for header padding + message + footer // Reserve space for header padding + message + footer
// - Header padding: space for protocol headers (7 bytes for Noise, 6 for Plaintext) // - Header padding: space for protocol headers (7 bytes for Noise, 6 for Plaintext)
// - Footer: space for MAC (16 bytes for Noise, 0 for Plaintext) // - Footer: space for MAC (16 bytes for Noise, 0 for Plaintext)
shared_buf.reserve(reserve_size + header_padding + this->helper_->frame_footer_size()); shared_buf.reserve(total_size);
// Resize to add header padding so message encoding starts at the correct position // Resize to add header padding so message encoding starts at the correct position
shared_buf.resize(header_padding); shared_buf.resize(header_padding);
return {&shared_buf};
} }
bool try_to_clear_buffer(bool log_out_of_space); bool try_to_clear_buffer(bool log_out_of_space);