mdns.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. // http://www.apache.org/licenses/LICENSE-2.0
  7. //
  8. // Unless required by applicable law or agreed to in writing, software
  9. // distributed under the License is distributed on an "AS IS" BASIS,
  10. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. // See the License for the specific language governing permissions and
  12. // limitations under the License.
  13. #ifndef ESP_MDNS_H_
  14. #define ESP_MDNS_H_
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #ifndef MDNS_TEST_MODE
  19. #include <tcpip_adapter.h>
  20. #else
  21. #include "esp32_compat.h"
  22. #endif
  23. struct mdns_server_s;
  24. typedef struct mdns_server_s mdns_server_t;
  25. /**
  26. * @brief mDNS query result structure
  27. *
  28. */
  29. typedef struct mdns_result_s {
  30. const char * host; /*!< hostname */
  31. const char * instance; /*!< instance */
  32. const char * txt; /*!< txt data */
  33. uint16_t priority; /*!< service priority */
  34. uint16_t weight; /*!< service weight */
  35. uint16_t port; /*!< service port */
  36. struct ip4_addr addr; /*!< ip4 address */
  37. struct ip6_addr addrv6; /*!< ip6 address */
  38. const struct mdns_result_s * next; /*!< next result, or NULL for the last result in the list */
  39. } mdns_result_t;
  40. /**
  41. * @brief Initialize mDNS on given interface
  42. *
  43. * @param tcpip_if Interface that the server will listen on
  44. * @param server Server pointer to populate on success
  45. *
  46. * @return
  47. * - ESP_OK on success
  48. * - ESP_ERR_INVALID_ARG when bad tcpip_if is given
  49. * - ESP_ERR_INVALID_STATE when the network returned error
  50. * - ESP_ERR_NO_MEM on memory error
  51. * - ESP_ERR_WIFI_NOT_INIT when WiFi is not initialized by eps_wifi_init
  52. */
  53. esp_err_t mdns_init(tcpip_adapter_if_t tcpip_if, mdns_server_t ** server);
  54. /**
  55. * @brief Stop and free mDNS server
  56. *
  57. * @param server mDNS Server to free
  58. *
  59. */
  60. void mdns_free(mdns_server_t * server);
  61. /**
  62. * @brief Set the hostname for mDNS server
  63. *
  64. * @param server mDNS Server
  65. * @param hostname Hostname to set
  66. *
  67. * @return
  68. * - ESP_OK success
  69. * - ESP_ERR_INVALID_ARG Parameter error
  70. * - ESP_ERR_NO_MEM memory error
  71. */
  72. esp_err_t mdns_set_hostname(mdns_server_t * server, const char * hostname);
  73. /**
  74. * @brief Set the default instance name for mDNS server
  75. *
  76. * @param server mDNS Server
  77. * @param instance Instance name to set
  78. *
  79. * @return
  80. * - ESP_OK success
  81. * - ESP_ERR_INVALID_ARG Parameter error
  82. * - ESP_ERR_NO_MEM memory error
  83. */
  84. esp_err_t mdns_set_instance(mdns_server_t * server, const char * instance);
  85. /**
  86. * @brief Add service to mDNS server
  87. *
  88. * @param server mDNS Server
  89. * @param service service type (_http, _ftp, etc)
  90. * @param proto service protocol (_tcp, _udp)
  91. * @param port service port
  92. *
  93. * @return
  94. * - ESP_OK success
  95. * - ESP_ERR_INVALID_ARG Parameter error
  96. * - ESP_ERR_NO_MEM memory error
  97. */
  98. esp_err_t mdns_service_add(mdns_server_t * server, const char * service, const char * proto, uint16_t port);
  99. /**
  100. * @brief Remove service from mDNS server
  101. *
  102. * @param server mDNS Server
  103. * @param service service type (_http, _ftp, etc)
  104. * @param proto service protocol (_tcp, _udp)
  105. *
  106. * @return
  107. * - ESP_OK success
  108. * - ESP_ERR_INVALID_ARG Parameter error
  109. * - ESP_ERR_NOT_FOUND Service not found
  110. * - ESP_FAIL unknown error
  111. */
  112. esp_err_t mdns_service_remove(mdns_server_t * server, const char * service, const char * proto);
  113. /**
  114. * @brief Set instance name for service
  115. *
  116. * @param server mDNS Server
  117. * @param service service type (_http, _ftp, etc)
  118. * @param proto service protocol (_tcp, _udp)
  119. * @param instance instance name to set
  120. *
  121. * @return
  122. * - ESP_OK success
  123. * - ESP_ERR_INVALID_ARG Parameter error
  124. * - ESP_ERR_NOT_FOUND Service not found
  125. * - ESP_ERR_NO_MEM memory error
  126. */
  127. esp_err_t mdns_service_instance_set(mdns_server_t * server, const char * service, const char * proto, const char * instance);
  128. /**
  129. * @brief Set TXT data for service
  130. *
  131. * @param server mDNS Server
  132. * @param service service type (_http, _ftp, etc)
  133. * @param proto service protocol (_tcp, _udp)
  134. * @param num_items number of items in TXT data
  135. * @param txt string array of TXT data (eg. {"var=val","other=2"})
  136. *
  137. * @return
  138. * - ESP_OK success
  139. * - ESP_ERR_INVALID_ARG Parameter error
  140. * - ESP_ERR_NOT_FOUND Service not found
  141. * - ESP_ERR_NO_MEM memory error
  142. */
  143. esp_err_t mdns_service_txt_set(mdns_server_t * server, const char * service, const char * proto, uint8_t num_items, const char ** txt);
  144. /**
  145. * @brief Set service port
  146. *
  147. * @param server mDNS Server
  148. * @param service service type (_http, _ftp, etc)
  149. * @param proto service protocol (_tcp, _udp)
  150. * @param port service port
  151. *
  152. * @return
  153. * - ESP_OK success
  154. * - ESP_ERR_INVALID_ARG Parameter error
  155. * - ESP_ERR_NOT_FOUND Service not found
  156. */
  157. esp_err_t mdns_service_port_set(mdns_server_t * server, const char * service, const char * proto, uint16_t port);
  158. /**
  159. * @brief Remove and free all services from mDNS server
  160. *
  161. * @param server mDNS Server
  162. *
  163. * @return
  164. * - ESP_OK success
  165. * - ESP_ERR_INVALID_ARG Parameter error
  166. */
  167. esp_err_t mdns_service_remove_all(mdns_server_t * server);
  168. /**
  169. * @brief Query mDNS for host or service
  170. *
  171. * @param server mDNS Server
  172. * @param service service type or host name
  173. * @param proto service protocol or NULL if searching for host
  174. * @param timeout time to wait for answers. If 0, mdns_query_end MUST be called to end the search
  175. *
  176. * @return the number of results found
  177. */
  178. size_t mdns_query(mdns_server_t * server, const char * service, const char * proto, uint32_t timeout);
  179. /**
  180. * @brief Stop mDNS Query started with timeout = 0
  181. *
  182. * @param server mDNS Server
  183. *
  184. * @return the number of results found
  185. */
  186. size_t mdns_query_end(mdns_server_t * server);
  187. /**
  188. * @brief get the number of results currently in memoty
  189. *
  190. * @param server mDNS Server
  191. *
  192. * @return the number of results
  193. */
  194. size_t mdns_result_get_count(mdns_server_t * server);
  195. /**
  196. * @brief Get mDNS Search result with given index
  197. *
  198. * @param server mDNS Server
  199. * @param num the index of the result
  200. *
  201. * @return the result or NULL if error
  202. */
  203. const mdns_result_t * mdns_result_get(mdns_server_t * server, size_t num);
  204. /**
  205. * @brief Remove and free all search results from mDNS server
  206. *
  207. * @param server mDNS Server
  208. *
  209. * @return
  210. * - ESP_OK success
  211. * - ESP_ERR_INVALID_ARG Parameter error
  212. */
  213. esp_err_t mdns_result_free(mdns_server_t * server);
  214. #ifdef __cplusplus
  215. }
  216. #endif
  217. #endif /* ESP_MDNS_H_ */