mirror of
https://github.com/espressif/esp-mqtt.git
synced 2026-08-03 20:14:15 +02:00
feat(mqtt5): Exposes server properties in connect event
ESP_MQTT_EVENT_CONNECTED exposes the server properties Closes: #325
This commit is contained in:
committed by
Euripedes Rocha
parent
996177a46d
commit
e121e1b34b
@@ -145,6 +145,7 @@ TEST(mqtt5, broker_tests)
|
||||
RUN_MQTT5_BROKER_TEST(mqtt5_subscribe_publish);
|
||||
RUN_MQTT5_BROKER_TEST(mqtt5_lwt_clean_disconnect);
|
||||
RUN_MQTT5_BROKER_TEST(mqtt5_subscribe_payload);
|
||||
RUN_MQTT5_BROKER_TEST(mqtt5_server_properties);
|
||||
connect_test_fixture_teardown();
|
||||
}
|
||||
#endif // SOC_EMAC_SUPPORTED
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "mqtt_client.h"
|
||||
#include "mqtt5_client.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_mac.h"
|
||||
|
||||
@@ -285,3 +286,58 @@ bool mqtt5_subscribe_payload(void)
|
||||
free(topic);
|
||||
return true;
|
||||
}
|
||||
|
||||
static esp_mqtt5_server_resp_property_t s_server_props;
|
||||
static bool s_server_props_received = false;
|
||||
|
||||
static void mqtt5_event_handler_server_props(void *handler_args, esp_event_base_t base,
|
||||
int32_t event_id, void *event_data)
|
||||
{
|
||||
esp_mqtt_event_handle_t event = event_data;
|
||||
|
||||
switch ((esp_mqtt_event_id_t)event_id) {
|
||||
case MQTT_EVENT_CONNECTED:
|
||||
s_server_props = event->property->server;
|
||||
s_server_props_received = true;
|
||||
xEventGroupSetBits(s_event_group, CONNECT_BIT);
|
||||
break;
|
||||
|
||||
case MQTT_EVENT_DISCONNECTED:
|
||||
xEventGroupSetBits(s_event_group, DISCONNECT_BIT);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool mqtt5_server_properties(void)
|
||||
{
|
||||
s_server_props_received = false;
|
||||
memset(&s_server_props, 0, sizeof(s_server_props));
|
||||
const esp_mqtt_client_config_t mqtt5_cfg = {
|
||||
.broker.address.uri = CONFIG_MQTT5_TEST_BROKER_URI,
|
||||
.network.disable_auto_reconnect = true,
|
||||
.session.protocol_ver = MQTT_PROTOCOL_V_5,
|
||||
};
|
||||
s_event_group = xEventGroupCreate();
|
||||
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt5_cfg);
|
||||
TEST_ASSERT_TRUE(NULL != client);
|
||||
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt5_event_handler_server_props, NULL);
|
||||
TEST_ASSERT_TRUE(ESP_OK == esp_mqtt_client_start(client));
|
||||
WAIT_FOR_EVENT(CONNECT_BIT);
|
||||
TEST_ASSERT_TRUE(s_server_props_received);
|
||||
ESP_LOGI("mqtt5-server-props", "topic_alias_maximum: %d", s_server_props.topic_alias_maximum);
|
||||
ESP_LOGI("mqtt5-server-props", "receive_maximum: %d", s_server_props.receive_maximum);
|
||||
ESP_LOGI("mqtt5-server-props", "maximum_packet_size: %lu", (unsigned long)s_server_props.maximum_packet_size);
|
||||
ESP_LOGI("mqtt5-server-props", "max_qos: %d", s_server_props.max_qos);
|
||||
ESP_LOGI("mqtt5-server-props", "retain_available: %d", s_server_props.retain_available);
|
||||
ESP_LOGI("mqtt5-server-props", "wildcard_subscribe_available: %d", s_server_props.wildcard_subscribe_available);
|
||||
ESP_LOGI("mqtt5-server-props", "subscribe_identifiers_available: %d", s_server_props.subscribe_identifiers_available);
|
||||
ESP_LOGI("mqtt5-server-props", "shared_subscribe_available: %d", s_server_props.shared_subscribe_available);
|
||||
TEST_ASSERT_TRUE(s_server_props.max_qos <= 2);
|
||||
TEST_ASSERT_TRUE(s_server_props.receive_maximum > 0);
|
||||
esp_mqtt_client_destroy(client);
|
||||
vEventGroupDelete(s_event_group);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -48,3 +48,9 @@ bool mqtt5_lwt_clean_disconnect(void);
|
||||
* and verifies the qos in SUBACK message from the broker.
|
||||
*/
|
||||
bool mqtt5_subscribe_payload(void);
|
||||
|
||||
/**
|
||||
* @brief The client connects and verifies that server response
|
||||
* properties from CONNACK are available in the CONNECTED event.
|
||||
*/
|
||||
bool mqtt5_server_properties(void);
|
||||
|
||||
Reference in New Issue
Block a user