mirror of
https://github.com/esphome/esphome.git
synced 2026-07-10 17:05:36 +00:00
[api] Fix name max_data_length to match hostname limit, add suggested_area
- Fix HelloResponse.name and DeviceInfoResponse.name max_data_length from 120 to 31 to match ESPHOME_DEVICE_NAME_MAX_LEN (hostname limit) - Add max_data_length=120 + force to suggested_area field - Add static_asserts for ESPHOME_DEVICE_NAME_MAX_LEN and ESPHOME_FRIENDLY_NAME_MAX_LEN - Fix comments to accurately describe guarantees
This commit is contained in:
@@ -132,9 +132,9 @@ message HelloResponse {
|
||||
// Currently set to ESPHOME_VERSION string literal.
|
||||
string server_info = 3 [(max_data_length) = 32, (force) = true];
|
||||
|
||||
// The name of the server (App.get_name())
|
||||
// max_data_length matches config_validation.NAME_MAX_LENGTH
|
||||
string name = 4 [(max_data_length) = 120, (force) = true];
|
||||
// The name of the server (App.get_name() - device hostname)
|
||||
// max_data_length matches ESPHOME_DEVICE_NAME_MAX_LEN (validated by validate_hostname)
|
||||
string name = 4 [(max_data_length) = 31, (force) = true];
|
||||
}
|
||||
|
||||
// DEPRECATED in ESPHome 2026.1.0 - Password authentication is no longer supported.
|
||||
@@ -220,13 +220,15 @@ message SerialProxyInfo {
|
||||
}
|
||||
|
||||
// DeviceInfoResponse max_data_length values:
|
||||
// name/friendly_name = 120 (config_validation.NAME_MAX_LENGTH / core/config.FRIENDLY_NAME_MAX_LEN)
|
||||
// name = 31 (ESPHOME_DEVICE_NAME_MAX_LEN, validated by validate_hostname)
|
||||
// friendly_name = 120 (core/config.FRIENDLY_NAME_MAX_LEN)
|
||||
// mac_address/bluetooth_mac_address = 17 (MAC_ADDRESS_PRETTY_BUFFER_SIZE - 1, constexpr)
|
||||
// esphome_version = 32 (ESPHOME_VERSION string literal)
|
||||
// compilation_time = 25 (Application::BUILD_TIME_STR_SIZE - 1, constexpr)
|
||||
// manufacturer = 20 (longest hardcoded literal: "Nordic Semiconductor")
|
||||
// model = 127 (core/config.BOARD_MAX_LENGTH, validated in platform schemas)
|
||||
// project_name/project_version = 127 (core/config.PROJECT_MAX_LENGTH)
|
||||
// suggested_area = 120 (core/config.FRIENDLY_NAME_MAX_LEN via AREA_SCHEMA)
|
||||
message DeviceInfoResponse {
|
||||
option (id) = 10;
|
||||
option (source) = SOURCE_SERVER;
|
||||
@@ -235,8 +237,8 @@ message DeviceInfoResponse {
|
||||
// with older ESPHome versions that still send this field.
|
||||
bool uses_password = 1 [deprecated = true];
|
||||
|
||||
// The name of the node, given by "App.set_name()"
|
||||
string name = 2 [(max_data_length) = 120, (force) = true];
|
||||
// The name of the node, given by "App.set_name()" - device hostname
|
||||
string name = 2 [(max_data_length) = 31, (force) = true];
|
||||
|
||||
// The mac address of the device. For example "AC:BC:32:89:0E:A9"
|
||||
string mac_address = 3 [(max_data_length) = 17, (force) = true];
|
||||
@@ -274,7 +276,7 @@ message DeviceInfoResponse {
|
||||
uint32 legacy_voice_assistant_version = 14 [deprecated=true, (field_ifdef) = "USE_VOICE_ASSISTANT"];
|
||||
uint32 voice_assistant_feature_flags = 17 [(field_ifdef) = "USE_VOICE_ASSISTANT"];
|
||||
|
||||
string suggested_area = 16 [(field_ifdef) = "USE_AREAS"];
|
||||
string suggested_area = 16 [(max_data_length) = 120, (force) = true, (field_ifdef) = "USE_AREAS"];
|
||||
|
||||
// The Bluetooth mac address of the device. For example "AC:BC:32:89:0E:AA"
|
||||
string bluetooth_mac_address = 18 [(max_data_length) = 17, (force) = true, (field_ifdef) = "USE_BLUETOOTH_PROXY"];
|
||||
|
||||
@@ -77,6 +77,8 @@ static_assert(MAC_ADDRESS_PRETTY_BUFFER_SIZE - 1 == 17,
|
||||
"Update max_data_length for mac_address/bluetooth_mac_address in api.proto");
|
||||
static_assert(Application::BUILD_TIME_STR_SIZE - 1 == 25, "Update max_data_length for compilation_time in api.proto");
|
||||
static_assert(sizeof(ESPHOME_VERSION) - 1 <= 32, "Update max_data_length for esphome_version in api.proto");
|
||||
static_assert(ESPHOME_DEVICE_NAME_MAX_LEN <= 31, "Update max_data_length for name in api.proto");
|
||||
static_assert(ESPHOME_FRIENDLY_NAME_MAX_LEN <= 120, "Update max_data_length for friendly_name in api.proto");
|
||||
|
||||
static const char *const TAG = "api.connection";
|
||||
#ifdef USE_CAMERA
|
||||
|
||||
@@ -119,7 +119,7 @@ uint8_t *DeviceInfoResponse::encode(ProtoWriteBuffer &buffer PROTO_ENCODE_DEBUG_
|
||||
ProtoEncode::encode_uint32(pos PROTO_ENCODE_DEBUG_ARG, 17, this->voice_assistant_feature_flags);
|
||||
#endif
|
||||
#ifdef USE_AREAS
|
||||
ProtoEncode::encode_string(pos PROTO_ENCODE_DEBUG_ARG, 16, this->suggested_area);
|
||||
ProtoEncode::encode_string(pos PROTO_ENCODE_DEBUG_ARG, 16, this->suggested_area, true);
|
||||
#endif
|
||||
#ifdef USE_BLUETOOTH_PROXY
|
||||
ProtoEncode::encode_string(pos PROTO_ENCODE_DEBUG_ARG, 18, this->bluetooth_mac_address, true);
|
||||
@@ -181,7 +181,7 @@ uint32_t DeviceInfoResponse::calculate_size() const {
|
||||
size += ProtoSize::calc_uint32(2, this->voice_assistant_feature_flags);
|
||||
#endif
|
||||
#ifdef USE_AREAS
|
||||
size += ProtoSize::calc_length(2, this->suggested_area.size());
|
||||
size += 3 + this->suggested_area.size();
|
||||
#endif
|
||||
#ifdef USE_BLUETOOTH_PROXY
|
||||
size += 3 + this->bluetooth_mac_address.size();
|
||||
|
||||
Reference in New Issue
Block a user