From ba458c69cfb2f18478d73690c289b09641c62004 Mon Sep 17 00:00:00 2001 From: Liu Han Date: Fri, 15 Jun 2018 15:55:48 +0800 Subject: [PATCH] fix(mdns): add the maximum number of services --- components/mdns/Kconfig | 13 ++++++++++++ components/mdns/mdns.c | 20 +++++++++++++++++++ .../mdns/private_include/mdns_private.h | 3 +++ 3 files changed, 36 insertions(+) create mode 100644 components/mdns/Kconfig diff --git a/components/mdns/Kconfig b/components/mdns/Kconfig new file mode 100644 index 000000000..321b0f652 --- /dev/null +++ b/components/mdns/Kconfig @@ -0,0 +1,13 @@ +menu "mDNS" + +config MDNS_MAX_SERVICES + int "Max number of services" + range 1 64 + default 10 + help + Services take up a certain amount of memory, and allowing fewer + services to be open at the same time conserves memory. Specify + the maximum amount of services here. The valid value is from 1 + to 64. + +endmenu diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 6b74f7de8..9fb64777e 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -96,6 +96,21 @@ static mdns_srv_item_t * _mdns_get_service_item(const char * service, const char return NULL; } +static bool _mdns_can_add_more_services(void) +{ + mdns_srv_item_t * s = _mdns_server->services; + uint16_t service_num = 0; + while (s) { + service_num ++; + s = s->next; + if (service_num >= MDNS_MAX_SERVICES) { + return false; + } + } + + return true; +} + esp_err_t _mdns_send_rx_action(mdns_rx_packet_t * packet) { mdns_action_t * action = NULL; @@ -4124,6 +4139,11 @@ esp_err_t mdns_service_add(const char * instance, const char * service, const ch if (!_mdns_server || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port) { return ESP_ERR_INVALID_ARG; } + + if (!_mdns_can_add_more_services()) { + return ESP_ERR_NO_MEM; + } + mdns_srv_item_t * item = _mdns_get_service_item(service, proto); if (item) { return ESP_ERR_INVALID_ARG; diff --git a/components/mdns/private_include/mdns_private.h b/components/mdns/private_include/mdns_private.h index a3d9fa279..d6edfb082 100644 --- a/components/mdns/private_include/mdns_private.h +++ b/components/mdns/private_include/mdns_private.h @@ -20,6 +20,9 @@ #define _mdns_dbg_printf(...) printf(__VA_ARGS__) #endif +/** The maximum number of services */ +#define MDNS_MAX_SERVICES CONFIG_MDNS_MAX_SERVICES + #define MDNS_ANSWER_PTR_TTL 4500 #define MDNS_ANSWER_TXT_TTL 4500 #define MDNS_ANSWER_SRV_TTL 120