mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-12-05 00:29:22 +01:00
132 lines
4.0 KiB
C
132 lines
4.0 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 Free a transmit packet and its associated resources
|
||
|
|
*/
|
||
|
|
void mdns_priv_free_tx_packet(mdns_tx_packet_t *packet);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Create a probe packet for service discovery
|
||
|
|
*/
|
||
|
|
mdns_tx_packet_t *mdns_priv_create_probe_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t *services[], size_t len, bool first, bool include_ip);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Allocate and initialize an answer record for mDNS response
|
||
|
|
*/
|
||
|
|
bool mdns_priv_create_answer(mdns_out_answer_t **destination, uint16_t type, mdns_service_t *service,
|
||
|
|
mdns_host_item_t *host, bool flush, bool bye);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Create an announcement packet for service advertisement
|
||
|
|
*/
|
||
|
|
mdns_tx_packet_t *mdns_priv_create_announce_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t *services[], size_t len, bool include_ip);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Create an announcement packet from an existing probe packet
|
||
|
|
*/
|
||
|
|
mdns_tx_packet_t *mdns_priv_create_announce_from_probe(mdns_tx_packet_t *probe);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Dispatch a transmit packet for sending
|
||
|
|
*/
|
||
|
|
void mdns_priv_dispatch_tx_packet(mdns_tx_packet_t *p);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Send a goodbye message for a service subtype
|
||
|
|
*/
|
||
|
|
void mdns_priv_send_bye_subtype(mdns_srv_item_t *service, const char *instance_name, mdns_subtype_t *remove_subtypes);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Append host list information to service records
|
||
|
|
*/
|
||
|
|
bool mdns_priv_append_host_list_in_services(mdns_out_answer_t **destination, mdns_srv_item_t *services[], size_t services_len, bool flush, bool bye);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clear the transmit queue head for a specific interface and protocol
|
||
|
|
*/
|
||
|
|
void mdns_priv_clear_tx_queue_if(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clear the global transmit queue head
|
||
|
|
*/
|
||
|
|
void mdns_priv_clear_tx_queue(void);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Remove scheduled service packets for a given service
|
||
|
|
*/
|
||
|
|
void mdns_priv_remove_scheduled_service_packets(mdns_service_t *service);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Get the next packet from the PCB queue for a specific interface and protocol
|
||
|
|
*/
|
||
|
|
mdns_tx_packet_t *mdns_priv_get_next_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Deallocate an answer record
|
||
|
|
*/
|
||
|
|
void mdns_priv_dealloc_answer(mdns_out_answer_t **destination, uint16_t type, mdns_srv_item_t *service);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Remove a scheduled answer for a specific interface, protocol, and service
|
||
|
|
*/
|
||
|
|
void mdns_priv_remove_scheduled_answer(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint16_t type, mdns_srv_item_t *service);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Allocate a new packet with default settings
|
||
|
|
*/
|
||
|
|
mdns_tx_packet_t *mdns_priv_alloc_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Send all pending mDNS packets
|
||
|
|
*/
|
||
|
|
void mdns_priv_send_packets(void);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Execute an mDNS action with specified type
|
||
|
|
*/
|
||
|
|
void mdns_priv_send_action(mdns_action_t *action, mdns_action_subtype_t type);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Schedule a transmit packet for sending after a specified delay
|
||
|
|
*/
|
||
|
|
void mdns_priv_send_after(mdns_tx_packet_t *packet, uint32_t ms_after);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Send by for particular services on particular PCB
|
||
|
|
*/
|
||
|
|
void mdns_priv_send_bye(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t **services, size_t len, bool include_ip);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Create answer packet to questions from parsed packet
|
||
|
|
*/
|
||
|
|
void mdns_priv_create_answer_from_parsed_packet(mdns_parsed_packet_t *parsed_packet);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief appends one TXT record ("key=value" or "key")
|
||
|
|
*
|
||
|
|
* @param packet MDNS packet
|
||
|
|
* @param index offset in the packet
|
||
|
|
* @param txt one txt record
|
||
|
|
*
|
||
|
|
* @return length of added data: length of the added txt value + 1 on success
|
||
|
|
* 0 if data won't fit the packet
|
||
|
|
* -1 if invalid TXT entry
|
||
|
|
*/
|
||
|
|
int mdns_priv_append_one_txt_record_entry(uint8_t *packet, uint16_t *index, mdns_txt_linked_item_t *txt);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|