From 121b525108ee8fdeafadd27fbfd517f68fdc0df0 Mon Sep 17 00:00:00 2001 From: Jiacheng Guo Date: Wed, 21 Apr 2021 16:15:51 +0800 Subject: [PATCH] mdns: fix empty address change announce packets * Original commit: espressif/esp-idf@7bbb72d86540f04d37b0e2c4efb6dc66ee9c9ea0 --- components/mdns/mdns.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 305ba734f..0558e9a0c 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -1612,6 +1612,23 @@ static mdns_tx_packet_t * _mdns_create_probe_packet(mdns_if_t tcpip_if, mdns_ip_ return packet; } +/** + * @brief Create announce packet for self IP addresses + */ +static mdns_tx_packet_t * _mdns_create_announce_self_ip(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) +{ + mdns_tx_packet_t * packet = _mdns_alloc_packet_default(tcpip_if, ip_protocol); + if (!packet) { + return NULL; + } + mdns_host_item_t * host = mdns_get_host_item(_mdns_server->hostname); + if (!_mdns_append_host(&packet->servers, host, true, false)) { + _mdns_free_tx_packet(packet); + return NULL; + } + return packet; +} + /** * @brief Create announce packet for particular services on particular PCB */ @@ -1872,7 +1889,12 @@ static void _mdns_announce_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protoco } _pcb->state = PCB_ANNOUNCE_1; - mdns_tx_packet_t * p = _mdns_create_announce_packet(tcpip_if, ip_protocol, services, len, include_ip); + mdns_tx_packet_t * p = NULL; + if (services != NULL) { + p = _mdns_create_announce_packet(tcpip_if, ip_protocol, services, len, include_ip); + } else { + p = _mdns_create_announce_self_ip(tcpip_if, ip_protocol); + } if (p) { _mdns_schedule_tx_packet(p, 0); }