ESPHome 2025.5.0
Loading...
Searching...
No Matches
mdns_esp32.cpp
Go to the documentation of this file.
2#if defined(USE_ESP32) && defined(USE_MDNS)
3
4#include <mdns.h>
5#include <cstring>
6#include "esphome/core/hal.h"
7#include "esphome/core/log.h"
8#include "mdns_component.h"
9
10namespace esphome {
11namespace mdns {
12
13static const char *const TAG = "mdns";
14
16 this->compile_records_();
17
18 esp_err_t err = mdns_init();
19 if (err != ESP_OK) {
20 ESP_LOGW(TAG, "mDNS init failed: %s", esp_err_to_name(err));
21 this->mark_failed();
22 return;
23 }
24
25 mdns_hostname_set(this->hostname_.c_str());
26 mdns_instance_name_set(this->hostname_.c_str());
27
28 for (const auto &service : this->services_) {
29 std::vector<mdns_txt_item_t> txt_records;
30 for (const auto &record : service.txt_records) {
31 mdns_txt_item_t it{};
32 // dup strings to ensure the pointer is valid even after the record loop
33 it.key = strdup(record.key.c_str());
34 it.value = strdup(const_cast<TemplatableValue<std::string> &>(record.value).value().c_str());
35 txt_records.push_back(it);
36 }
37 uint16_t port = const_cast<TemplatableValue<uint16_t> &>(service.port).value();
38 err = mdns_service_add(nullptr, service.service_type.c_str(), service.proto.c_str(), port, txt_records.data(),
39 txt_records.size());
40
41 // free records
42 for (const auto &it : txt_records) {
43 delete it.key; // NOLINT(cppcoreguidelines-owning-memory)
44 delete it.value; // NOLINT(cppcoreguidelines-owning-memory)
45 }
46
47 if (err != ESP_OK) {
48 ESP_LOGW(TAG, "Failed to register mDNS service %s: %s", service.service_type.c_str(), esp_err_to_name(err));
49 }
50 }
51}
52
54 mdns_free();
55 delay(40); // Allow the mdns packets announcing service removal to be sent
56}
57
58} // namespace mdns
59} // namespace esphome
60
61#endif // USE_ESP32
virtual void mark_failed()
Mark this component as failed.
std::vector< MDNSService > services_
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
void IRAM_ATTR HOT delay(uint32_t ms)
Definition core.cpp:28