Files
David Cermak bed116d98b feat(mdns): Refactor mdns library (stage #1)
The MDNS component has been refactored from a single monolithic file mdns.c
into a set of focused modules with clear responsibilities.
This restructuring maintains the same functionality while improving code organization,
maintainability, and testability.
In the stage#2 we will focus on module based tests
In the stage#3 we will focus on small scale refators and optimizations
2025-11-25 17:30:27 +01:00

112 lines
3.4 KiB
C

/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <stddef.h>
#include "mdns_private.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Start or stop requested queries
* @note Called periodically from timer task in mdns.c
*/
void mdns_priv_query_start_stop(void);
/**
* @brief Free search item queue
* @note Called from mdns_free()
*/
void mdns_priv_query_free(void);
/**
* @brief Free search results
* @note Called from multiple modules (browser, querier, core)
*/
void mdns_priv_query_results_free(mdns_result_t *results);
/**
* @brief Complete the query if max results reached
* @note Called from the packet parser
*/
void mdns_priv_query_done(void);
/**
* @brief Looks for the name/type in active search items
*
* @note Called from the packet parser (mdns_receive.c)
*
* @return search results
*/
mdns_search_once_t *mdns_priv_query_find(mdns_name_t *name, uint16_t type, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
/**
* @brief Looks for the name/type in the search items
*
* @note Called from the packet parser (mdns_receive.c)
*/
mdns_search_once_t *mdns_priv_query_find_from(mdns_search_once_t *s, mdns_name_t *name, uint16_t type, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
/**
* @brief Add TXT item to the search results
* @note Called from the packet parser (mdns_receive.c)
*/
void mdns_priv_query_result_add_txt(mdns_search_once_t *search, mdns_txt_item_t *txt, uint8_t *txt_value_len,
size_t txt_count, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol,
uint32_t ttl);
/**
* @brief Add IP (A/AAAA records) to the search results
* @note Called from the packet parser (mdns_receive.c)
*/
void mdns_priv_query_result_add_ip(mdns_search_once_t *search, const char *hostname, esp_ip_addr_t *ip,
mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl);
/**
* @brief Add SRV record to the search results
* @note Called from the packet parser (mdns_receive.c)
*/
void mdns_priv_query_result_add_srv(mdns_search_once_t *search, const char *hostname, uint16_t port,
mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl);
/**
* @brief Add PTR record to the search results
* @note Called from the packet parser (mdns_receive.c)
*/
mdns_result_t *mdns_priv_query_result_add_ptr(mdns_search_once_t *search, const char *instance,
const char *service_type, const char *proto, mdns_if_t tcpip_if,
mdns_ip_protocol_t ip_protocol, uint32_t ttl);
/**
* @brief Perform action from mdns service queue
*
* @note Called from the _mdns_service_task() in mdns.c
*/
void mdns_priv_query_action(mdns_action_t *action, mdns_action_subtype_t type);
/**
* @brief Create linked IP (copy) from parsed one
*/
mdns_ip_addr_t *mdns_priv_result_addr_create_ip(esp_ip_addr_t *ip);
/**
* @brief Update TTL results to whichever is smaller
*/
static inline void mdns_priv_query_update_result_ttl(mdns_result_t *r, uint32_t ttl)
{
r->ttl = r->ttl < ttl ? r->ttl : ttl;
}
/**
* @brief Send a search query packet on the specified interface and protocol
*/
void mdns_priv_query_send(mdns_search_once_t *search, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
#ifdef __cplusplus
}
#endif