mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 23:21:54 +00:00 
			
		
		
		
	Optimize API connection memory usage by removing client_peername_
This commit is contained in:
		| @@ -77,7 +77,6 @@ void APIConnection::start() { | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   this->client_info_ = helper_->getpeername(); |   this->client_info_ = helper_->getpeername(); | ||||||
|   this->client_peername_ = this->client_info_; |  | ||||||
|   this->helper_->set_log_info(this->client_info_); |   this->helper_->set_log_info(this->client_info_); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1550,12 +1549,11 @@ bool APIConnection::try_send_log_message(int level, const char *tag, const char | |||||||
|  |  | ||||||
| HelloResponse APIConnection::hello(const HelloRequest &msg) { | HelloResponse APIConnection::hello(const HelloRequest &msg) { | ||||||
|   this->client_info_ = msg.client_info; |   this->client_info_ = msg.client_info; | ||||||
|   this->client_peername_ = this->helper_->getpeername(); |  | ||||||
|   this->helper_->set_log_info(this->get_client_combined_info()); |   this->helper_->set_log_info(this->get_client_combined_info()); | ||||||
|   this->client_api_version_major_ = msg.api_version_major; |   this->client_api_version_major_ = msg.api_version_major; | ||||||
|   this->client_api_version_minor_ = msg.api_version_minor; |   this->client_api_version_minor_ = msg.api_version_minor; | ||||||
|   ESP_LOGV(TAG, "Hello from client: '%s' | %s | API Version %" PRIu32 ".%" PRIu32, this->client_info_.c_str(), |   ESP_LOGV(TAG, "Hello from client: '%s' | %s | API Version %" PRIu32 ".%" PRIu32, this->client_info_.c_str(), | ||||||
|            this->client_peername_.c_str(), this->client_api_version_major_, this->client_api_version_minor_); |            this->helper_->getpeername().c_str(), this->client_api_version_major_, this->client_api_version_minor_); | ||||||
|  |  | ||||||
|   HelloResponse resp; |   HelloResponse resp; | ||||||
|   resp.api_version_major = 1; |   resp.api_version_major = 1; | ||||||
| @@ -1575,7 +1573,7 @@ ConnectResponse APIConnection::connect(const ConnectRequest &msg) { | |||||||
|   if (correct) { |   if (correct) { | ||||||
|     ESP_LOGD(TAG, "%s connected", this->get_client_combined_info().c_str()); |     ESP_LOGD(TAG, "%s connected", this->get_client_combined_info().c_str()); | ||||||
|     this->connection_state_ = ConnectionState::AUTHENTICATED; |     this->connection_state_ = ConnectionState::AUTHENTICATED; | ||||||
|     this->parent_->get_client_connected_trigger()->trigger(this->client_info_, this->client_peername_); |     this->parent_->get_client_connected_trigger()->trigger(this->client_info_, this->helper_->getpeername()); | ||||||
| #ifdef USE_HOMEASSISTANT_TIME | #ifdef USE_HOMEASSISTANT_TIME | ||||||
|     if (homeassistant::global_homeassistant_time != nullptr) { |     if (homeassistant::global_homeassistant_time != nullptr) { | ||||||
|       this->send_time_request(); |       this->send_time_request(); | ||||||
|   | |||||||
| @@ -276,11 +276,12 @@ class APIConnection : public APIServerConnection { | |||||||
|   bool send_buffer(ProtoWriteBuffer buffer, uint16_t message_type) override; |   bool send_buffer(ProtoWriteBuffer buffer, uint16_t message_type) override; | ||||||
|  |  | ||||||
|   std::string get_client_combined_info() const { |   std::string get_client_combined_info() const { | ||||||
|     if (this->client_info_ == this->client_peername_) { |     std::string peername = this->helper_->getpeername(); | ||||||
|  |     if (this->client_info_ == peername) { | ||||||
|       // Before Hello message, both are the same (just IP:port) |       // Before Hello message, both are the same (just IP:port) | ||||||
|       return this->client_info_; |       return this->client_info_; | ||||||
|     } |     } | ||||||
|     return this->client_info_ + " (" + this->client_peername_ + ")"; |     return this->client_info_ + " (" + peername + ")"; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Buffer allocator methods for batch processing |   // Buffer allocator methods for batch processing | ||||||
| @@ -452,7 +453,6 @@ class APIConnection : public APIServerConnection { | |||||||
|  |  | ||||||
|   // Strings (12 bytes each on 32-bit) |   // Strings (12 bytes each on 32-bit) | ||||||
|   std::string client_info_; |   std::string client_info_; | ||||||
|   std::string client_peername_; |  | ||||||
|  |  | ||||||
|   // 2-byte aligned types |   // 2-byte aligned types | ||||||
|   uint16_t client_api_version_major_{0}; |   uint16_t client_api_version_major_{0}; | ||||||
|   | |||||||
| @@ -184,7 +184,7 @@ void APIServer::loop() { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Rare case: handle disconnection |     // Rare case: handle disconnection | ||||||
|     this->client_disconnected_trigger_->trigger(client->client_info_, client->client_peername_); |     this->client_disconnected_trigger_->trigger(client->client_info_, client->helper_->getpeername()); | ||||||
|     ESP_LOGV(TAG, "Remove connection %s", client->client_info_.c_str()); |     ESP_LOGV(TAG, "Remove connection %s", client->client_info_.c_str()); | ||||||
|  |  | ||||||
|     // Swap with the last element and pop (avoids expensive vector shifts) |     // Swap with the last element and pop (avoids expensive vector shifts) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user