From 3346e09785bc943fd0144ef1bbdad1bb2d9c7196 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 13 Aug 2025 22:23:47 -0500 Subject: [PATCH] preen --- esphome/components/api/api_connection.cpp | 4 +--- esphome/components/api/api_connection.h | 10 +++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 6e2af9a783..9c0d47bca1 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -294,9 +294,7 @@ uint16_t APIConnection::encode_message_to_buffer(ProtoMessage &msg, uint8_t mess if (is_single || conn->flags_.batch_first_message) { // Single message or first batch message - shared_buf.clear(); - shared_buf.reserve(total_size); - shared_buf.resize(header_padding); + conn->prepare_first_message_buffer(shared_buf, header_padding, total_size); if (conn->flags_.batch_first_message) { conn->flags_.batch_first_message = false; } diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index 09b2f15e7a..076dccfad7 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -252,17 +252,21 @@ class APIConnection : public APIServerConnection { // Get header padding size - used for both reserve and insert uint8_t header_padding = this->helper_->frame_header_padding(); - // Get shared buffer from parent server std::vector &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 &shared_buf, size_t header_padding, size_t total_size) { shared_buf.clear(); // Reserve space for header padding + message + footer // - Header padding: space for protocol headers (7 bytes for Noise, 6 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 shared_buf.resize(header_padding); - return {&shared_buf}; } bool try_to_clear_buffer(bool log_out_of_space);