From c8b7759e108cc554e423b5b1747e17aab9500e9b Mon Sep 17 00:00:00 2001 From: David Girault Date: Fri, 28 Apr 2017 14:23:17 +0200 Subject: [PATCH] mdns: added support for removing service in mdns responder New function `mdns_resp_del_service()` added. Signed-off-by: goldsimon --- src/apps/mdns/mdns.c | 24 +++++++++++++++++++++++- src/include/lwip/apps/mdns.h | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/apps/mdns/mdns.c b/src/apps/mdns/mdns.c index f38229f2..f30a7ba4 100644 --- a/src/apps/mdns/mdns.c +++ b/src/apps/mdns/mdns.c @@ -1993,7 +1993,7 @@ mdns_resp_remove_netif(struct netif *netif) * @param txt_fn Callback to get TXT data. Will be called each time a TXT reply is created to * allow dynamic replies. * @param txt_data Userdata pointer for txt_fn - * @return ERR_OK if the service was added to the netif, an err_t otherwise + * @return service_id if the service was added to the netif, an err_t otherwise */ err_t mdns_resp_add_service(struct netif *netif, const char *name, const char *service, enum mdns_sd_proto proto, u16_t port, u32_t dns_ttl, service_get_txt_fn_t txt_fn, void *txt_data) @@ -2039,7 +2039,29 @@ mdns_resp_add_service(struct netif *netif, const char *name, const char *service #if LWIP_IPV4 mdns_announce(netif, IP4_ADDR_ANY); #endif + return slot; +} +/** + * @ingroup mdns + * Delete a service on the selected network interface. + * @param netif The network interface on which service should be removed + * @param slot The service slot number returned by mdns_resp_add_service + * @return ERR_OK if the service was removed from the netif, an err_t otherwise + */ +err_t +mdns_resp_del_service(struct netif *netif, int slot) +{ + struct mdns_host* mdns; + struct mdns_service *srv; + LWIP_ASSERT("mdns_resp_del_service: netif != NULL", netif); + mdns = NETIF_TO_HOST(netif); + LWIP_ERROR("mdns_resp_del_service: Not an mdns netif", (mdns != NULL), return ERR_VAL); + LWIP_ERROR("mdns_resp_del_service: Invalid Service ID", (mdns->services[slot] != NULL), return ERR_VAL); + + srv = mdns->services[slot]; + mdns->services[slot] = NULL; + mem_free(srv); return ERR_OK; } diff --git a/src/include/lwip/apps/mdns.h b/src/include/lwip/apps/mdns.h index 9cfb5900..f6f8069d 100644 --- a/src/include/lwip/apps/mdns.h +++ b/src/include/lwip/apps/mdns.h @@ -63,6 +63,8 @@ err_t mdns_resp_remove_netif(struct netif *netif); err_t mdns_resp_add_service(struct netif *netif, const char *name, const char *service, enum mdns_sd_proto proto, u16_t port, u32_t dns_ttl, service_get_txt_fn_t txt_fn, void *txt_userdata); err_t mdns_resp_add_service_txtitem(struct mdns_service *service, const char *txt, u8_t txt_len); +err_t mdns_resp_del_service(struct netif *netif, int slot); + void mdns_resp_netif_settings_changed(struct netif *netif); #endif /* LWIP_MDNS_RESPONDER */