From a8339e46180fed69e688c04b6de962635acee767 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Fri, 20 Jan 2023 10:46:41 +0100 Subject: [PATCH] fix(mdns): Allow setting instance name only after hostname set Closes https://github.com/espressif/esp-protocols/issues/190 --- components/mdns/mdns.c | 2 +- components/mdns/tests/unit_test/main/test_mdns.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 1149ff7cf..5d08322f0 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -5398,7 +5398,7 @@ esp_err_t mdns_instance_name_set(const char *instance) if (!_mdns_server) { return ESP_ERR_INVALID_STATE; } - if (_str_null_or_empty(instance) || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) { + if (_str_null_or_empty(instance) || _mdns_server->hostname == NULL || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) { return ESP_ERR_INVALID_ARG; } char *new_instance = strndup(instance, MDNS_NAME_BUF_LEN - 1); diff --git a/components/mdns/tests/unit_test/main/test_mdns.c b/components/mdns/tests/unit_test/main/test_mdns.c index 5f0f2c9cc..3ac613c3b 100644 --- a/components/mdns/tests/unit_test/main/test_mdns.c +++ b/components/mdns/tests/unit_test/main/test_mdns.c @@ -115,6 +115,14 @@ TEST(mdns, query_api_fails_with_expected_err) TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default()); TEST_ASSERT_EQUAL(ESP_OK, mdns_init() ); + // check it is not possible to register a service or set an instance without configuring the hostname + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_instance_name_set(MDNS_INSTANCE)); + TEST_ASSERT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME)); + // hostname is set, now adding a service and instance should succeed + TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0)); + TEST_ASSERT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE)); + TEST_ASSERT_EQUAL(ESP_OK, mdns_query_ptr(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, CONFIG_MDNS_MAX_SERVICES, &results) ); mdns_query_results_free(results);