/* * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 *//* ... */#ifndefMDNS_PRIVATE_H_#defineMDNS_PRIVATE_H_#include"sdkconfig.h"#include"mdns.h"#include"esp_task.h"#include"freertos/FreeRTOS.h"#include"freertos/task.h"#include"freertos/queue.h"#include"freertos/semphr.h"#include"esp_timer.h"#include"esp_system.h"9 includes#ifdefCONFIG_MDNS_ENABLE_DEBUG_PRINTS#defineMDNS_ENABLE_DEBUG#define_mdns_dbg_printf(...)printf(__VA_ARGS__)/* ... */#endif/** Number of predefined interfaces */#ifndefCONFIG_MDNS_PREDEF_NETIF_STA#defineCONFIG_MDNS_PREDEF_NETIF_STA0#endif#ifndefCONFIG_MDNS_PREDEF_NETIF_AP#defineCONFIG_MDNS_PREDEF_NETIF_AP0#endif#ifndefCONFIG_MDNS_PREDEF_NETIF_ETH#defineCONFIG_MDNS_PREDEF_NETIF_ETH0#endif#defineMDNS_MAX_PREDEF_INTERFACES(CONFIG_MDNS_PREDEF_NETIF_STA+CONFIG_MDNS_PREDEF_NETIF_AP+CONFIG_MDNS_PREDEF_NETIF_ETH)#ifdefCONFIG_LWIP_IPV6_NUM_ADDRESSES#defineNETIF_IPV6_MAX_NUMSCONFIG_LWIP_IPV6_NUM_ADDRESSES#else#defineNETIF_IPV6_MAX_NUMS3#endif#ifESP_IDF_VERSION<ESP_IDF_VERSION_VAL(5,1,0)/* CONFIG_LWIP_IPV4 was introduced in IDF v5.1 *//* For IDF v5.0, set CONFIG_LWIP_IPV4 to 1 by default */#ifndefCONFIG_LWIP_IPV4#defineCONFIG_LWIP_IPV41#endif// CONFIG_LWIP_IPV4/* ... */#endif// ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0)/** Number of configured interfaces */#ifMDNS_MAX_PREDEF_INTERFACES>CONFIG_MDNS_MAX_INTERFACES#warningNumberofconfiguredinterfacesislessthennumberofpredefinedinterfaces.PleaseupdateCONFIG_MDNS_MAX_INTERFACES.#defineMDNS_MAX_INTERFACES(MDNS_MAX_PREDEF_INTERFACES)/* ... */#else#defineMDNS_MAX_INTERFACES(CONFIG_MDNS_MAX_INTERFACES)#endif/** The maximum number of services */#defineMDNS_MAX_SERVICESCONFIG_MDNS_MAX_SERVICES#defineMDNS_ANSWER_PTR_TTL4500#defineMDNS_ANSWER_TXT_TTL4500#defineMDNS_ANSWER_SRV_TTL120#defineMDNS_ANSWER_A_TTL120#defineMDNS_ANSWER_AAAA_TTL120#defineMDNS_FLAGS_QUERY_REPSONSE0x8000#defineMDNS_FLAGS_AUTHORITATIVE0x0400#defineMDNS_FLAGS_QR_AUTHORITATIVE(MDNS_FLAGS_QUERY_REPSONSE|MDNS_FLAGS_AUTHORITATIVE)#defineMDNS_FLAGS_DISTRIBUTED0x0200#defineMDNS_NAME_REF0xC000//custom type! only used by this implementation//to help manage service discovery handling#defineMDNS_TYPE_SDPTR0x0032#defineMDNS_CLASS_IN0x0001#defineMDNS_CLASS_ANY0x00FF#defineMDNS_CLASS_IN_FLUSH_CACHE0x8001#defineMDNS_ANSWER_ALL0x3F#defineMDNS_ANSWER_PTR0x08#defineMDNS_ANSWER_TXT0x04#defineMDNS_ANSWER_SRV0x02#defineMDNS_ANSWER_A0x01#defineMDNS_ANSWER_AAAA0x10#defineMDNS_ANSWER_NSEC0x20#defineMDNS_ANSWER_SDPTR0x80#defineMDNS_ANSWER_AAAA_SIZE16#defineMDNS_SERVICE_PORT5353// UDP port that the server runs on#defineMDNS_SERVICE_STACK_DEPTHCONFIG_MDNS_TASK_STACK_SIZE#defineMDNS_TASK_PRIORITYCONFIG_MDNS_TASK_PRIORITY27 defines#if(MDNS_TASK_PRIORITY>ESP_TASK_PRIO_MAX)#error"mDNS task priority is higher than ESP_TASK_PRIO_MAX"#elif(MDNS_TASK_PRIORITY>ESP_TASKD_EVENT_PRIO)#warning"mDNS task priority is higher than ESP_TASKD_EVENT_PRIO, mDNS library might not work correctly"#endif#defineMDNS_TASK_AFFINITYCONFIG_MDNS_TASK_AFFINITY#defineMDNS_SERVICE_ADD_TIMEOUT_MSCONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS#defineMDNS_PACKET_QUEUE_LEN16// Maximum packets that can be queued for parsing#defineMDNS_ACTION_QUEUE_LENCONFIG_MDNS_ACTION_QUEUE_LEN// Maximum actions pending to the server#defineMDNS_TXT_MAX_LEN1024// Maximum string length of text data in TXT record#defineMDNS_MAX_PACKET_SIZE1460// Maximum size of mDNS outgoing packet#defineMDNS_HEAD_LEN12#defineMDNS_HEAD_ID_OFFSET0#defineMDNS_HEAD_FLAGS_OFFSET2#defineMDNS_HEAD_QUESTIONS_OFFSET4#defineMDNS_HEAD_ANSWERS_OFFSET6#defineMDNS_HEAD_SERVERS_OFFSET8#defineMDNS_HEAD_ADDITIONAL_OFFSET10#defineMDNS_TYPE_OFFSET0#defineMDNS_CLASS_OFFSET2#defineMDNS_TTL_OFFSET4#defineMDNS_LEN_OFFSET8#defineMDNS_DATA_OFFSET10#defineMDNS_SRV_PRIORITY_OFFSET0#defineMDNS_SRV_WEIGHT_OFFSET2#defineMDNS_SRV_PORT_OFFSET4#defineMDNS_SRV_FQDN_OFFSET6#defineMDNS_TIMER_PERIOD_US(CONFIG_MDNS_TIMER_PERIOD_MS*1000)#defineMDNS_SERVICE_LOCK()xSemaphoreTake(_mdns_service_semaphore,portMAX_DELAY)#defineMDNS_SERVICE_UNLOCK()xSemaphoreGive(_mdns_service_semaphore)#definequeueToEnd(type,queue,item)\if(!queue){\queue=item;\}{...}else{\type*_q=queue;\while(_q->next){_q=_q->next;}\_q->next=item;\}{...}...#definequeueDetach(type,queue,item)\if(queue){\if(queue==item){\queue=queue->next;\}{...}else{\type*_q=queue;\while(_q->next&&_q->next!=item){\_q=_q->next;\}{...}\if(_q->next==item){\_q->next=item->next;\item->next=NULL;\}{...}\}{...}\}{...}...#definequeueFree(type,queue)while(queue){type*_q=queue;queue=queue->next;free(_q);}#definePCB_STATE_IS_PROBING(s)(s->state>PCB_OFF&&s->state<PCB_ANNOUNCE_1)#definePCB_STATE_IS_ANNOUNCING(s)(s->state>PCB_PROBE_3&&s->state<PCB_RUNNING)#definePCB_STATE_IS_RUNNING(s)(s->state==PCB_RUNNING)31 defines#ifndefHOOK_MALLOC_FAILED#defineHOOK_MALLOC_FAILEDESP_LOGE(TAG,"Cannot allocate memory (line: %d, free heap: %"PRIu32" bytes)",__LINE__,esp_get_free_heap_size());#endiftypedefsize_tmdns_if_t;typedefenum{PCB_OFF,PCB_DUP,PCB_INIT,PCB_PROBE_1,PCB_PROBE_2,PCB_PROBE_3,PCB_ANNOUNCE_1,PCB_ANNOUNCE_2,PCB_ANNOUNCE_3,PCB_RUNNING}{ ... }mdns_pcb_state_t;typedefenum{MDNS_ANSWER,MDNS_NS,MDNS_EXTRA}{ ... }mdns_parsed_record_type_t;typedefenum{ACTION_SYSTEM_EVENT,ACTION_HOSTNAME_SET,ACTION_INSTANCE_SET,ACTION_SEARCH_ADD,ACTION_SEARCH_SEND,ACTION_SEARCH_END,ACTION_BROWSE_ADD,ACTION_BROWSE_SYNC,ACTION_BROWSE_END,ACTION_TX_HANDLE,ACTION_RX_HANDLE,ACTION_TASK_STOP,ACTION_DELEGATE_HOSTNAME_ADD,ACTION_DELEGATE_HOSTNAME_REMOVE,ACTION_DELEGATE_HOSTNAME_SET_ADDR,ACTION_MAX}{ ... }mdns_action_type_t;typedefstruct{uint16_tid;uint16_tflags;uint16_tquestions;//QDCOUNTuint16_tanswers;//ANCOUNTuint16_tservers;//NSCOUNTuint16_tadditional;//ARCOUNT}{ ... }mdns_header_t;typedefstruct{charhost[MDNS_NAME_BUF_LEN];// hostname for A/AAAA records, instance name for SRV recordscharservice[MDNS_NAME_BUF_LEN];charproto[MDNS_NAME_BUF_LEN];chardomain[MDNS_NAME_BUF_LEN];uint8_tparts;uint8_tsub;boolinvalid;}{ ... }mdns_name_t;typedefstructmdns_parsed_question_s{structmdns_parsed_question_s*next;uint16_ttype;boolsub;boolunicast;char*host;char*service;char*proto;char*domain;}{ ... }mdns_parsed_question_t;typedefstructmdns_parsed_record_s{structmdns_parsed_record_s*next;mdns_parsed_record_type_trecord_type;uint16_ttype;uint16_tclas;uint8_tflush;uint32_tttl;char*host;char*service;char*proto;char*domain;uint16_tdata_len;uint8_t*data;}{ ... }mdns_parsed_record_t;typedefstruct{mdns_if_ttcpip_if;mdns_ip_protocol_tip_protocol;esp_ip_addr_tsrc;uint16_tsrc_port;uint8_tmulticast;uint8_tauthoritative;uint8_tprobe;uint8_tdiscovery;uint8_tdistributed;mdns_parsed_question_t*questions;mdns_parsed_record_t*records;uint16_tid;}{ ... }mdns_parsed_packet_t;typedefstruct{mdns_if_ttcpip_if;mdns_ip_protocol_tip_protocol;structpbuf*pb;esp_ip_addr_tsrc;esp_ip_addr_tdest;uint16_tsrc_port;uint8_tmulticast;}{ ... }mdns_rx_packet_t;typedefstructmdns_txt_linked_item_s{constchar*key;/*!< item key name */char*value;/*!< item value string */uint8_tvalue_len;/*!< item value length */structmdns_txt_linked_item_s*next;/*!< next result, or NULL for the last result in the list */}{ ... }mdns_txt_linked_item_t;typedefstructmdns_subtype_s{constchar*subtype;/*!< subtype */structmdns_subtype_s*next;/*!< next result, or NULL for the last result in the list */}{ ... }mdns_subtype_t;typedefstruct{constchar*instance;constchar*service;constchar*proto;constchar*hostname;uint16_tpriority;uint16_tweight;uint16_tport;mdns_txt_linked_item_t*txt;mdns_subtype_t*subtype;}{ ... }mdns_service_t;typedefstructmdns_srv_item_s{structmdns_srv_item_s*next;mdns_service_t*service;}{ ... }mdns_srv_item_t;typedefstructmdns_out_question_s{structmdns_out_question_s*next;uint16_ttype;boolunicast;constchar*host;constchar*service;constchar*proto;constchar*domain;boolown_dynamic_memory;}{ ... }mdns_out_question_t;typedefstructmdns_host_item_t{constchar*hostname;mdns_ip_addr_t*address_list;structmdns_host_item_t*next;}{ ... }mdns_host_item_t;typedefstructmdns_out_answer_s{structmdns_out_answer_s*next;uint16_ttype;uint8_tbye;uint8_tflush;mdns_service_t*service;mdns_host_item_t*host;constchar*custom_instance;constchar*custom_service;constchar*custom_proto;}{ ... }mdns_out_answer_t;typedefstructmdns_tx_packet_s{structmdns_tx_packet_s*next;uint32_tsend_at;mdns_if_ttcpip_if;mdns_ip_protocol_tip_protocol;esp_ip_addr_tdst;uint16_tport;uint16_tflags;uint8_tdistributed;mdns_out_question_t*questions;mdns_out_answer_t*answers;mdns_out_answer_t*servers;mdns_out_answer_t*additional;boolqueued;uint16_tid;}{ ... }mdns_tx_packet_t;typedefstruct{mdns_pcb_state_tstate;mdns_srv_item_t**probe_services;uint8_tprobe_services_len;uint8_tprobe_ip;uint8_tprobe_running;uint16_tfailed_probes;}{ ... }mdns_pcb_t;typedefenum{SEARCH_OFF,SEARCH_INIT,SEARCH_RUNNING,SEARCH_MAX}{ ... }mdns_search_once_state_t;typedefenum{BROWSE_OFF,BROWSE_INIT,BROWSE_RUNNING,BROWSE_MAX}{ ... }mdns_browse_state_t;typedefstructmdns_search_once_s{structmdns_search_once_s*next;mdns_search_once_state_tstate;uint32_tstarted_at;uint32_tsent_at;uint32_ttimeout;mdns_query_notify_tnotifier;SemaphoreHandle_tdone_semaphore;uint16_ttype;boolunicast;uint8_tmax_results;uint8_tnum_results;char*instance;char*service;char*proto;mdns_result_t*result;}{ ... }mdns_search_once_t;typedefstructmdns_browse_s{structmdns_browse_s*next;mdns_browse_state_tstate;mdns_browse_notify_tnotifier;char*service;char*proto;mdns_result_t*result;}{ ... }mdns_browse_t;typedefstructmdns_browse_result_sync_t{mdns_result_t*result;structmdns_browse_result_sync_t*next;}{ ... }mdns_browse_result_sync_t;typedefstructmdns_browse_sync{mdns_browse_t*browse;mdns_browse_result_sync_t*sync_result;}{ ... }mdns_browse_sync_t;typedefstructmdns_server_s{struct{mdns_pcb_tpcbs[MDNS_IP_PROTOCOL_MAX];}{ ... }interfaces[MDNS_MAX_INTERFACES];constchar*hostname;constchar*instance;mdns_srv_item_t*services;QueueHandle_taction_queue;SemaphoreHandle_taction_sema;mdns_tx_packet_t*tx_queue_head;mdns_search_once_t*search_once;esp_timer_handle_ttimer_handle;mdns_browse_t*browse;}{ ... }mdns_server_t;typedefstruct{mdns_action_type_ttype;union{struct{char*hostname;}{ ... }hostname_set;char*instance;struct{mdns_if_tinterface;mdns_event_actions_tevent_action;}{ ... }sys_event;struct{mdns_search_once_t*search;}{ ... }search_add;struct{mdns_tx_packet_t*packet;}{ ... }tx_handle;struct{mdns_rx_packet_t*packet;}{ ... }rx_handle;struct{constchar*hostname;mdns_ip_addr_t*address_list;}{ ... }delegate_hostname;struct{mdns_browse_t*browse;}{ ... }browse_add;struct{mdns_browse_sync_t*browse_sync;}{ ... }browse_sync;}{ ... }data;}{ ... }mdns_action_t;/* * @brief Convert mnds if to esp-netif handle * * @param tcpip_if mdns supported interface as internal enum * * @return * - ptr to esp-netif on success * - NULL if no available netif for current interface index *//* ... */esp_netif_t*_mdns_get_esp_netif(mdns_if_ttcpip_if);/* ... */#endif/* MDNS_PRIVATE_H_ */
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.