2#if defined(USE_ESP32) && defined(USE_MDNS)
15#ifndef USE_OPENTHREAD_SRP
16static esp_err_t add_service(
const MDNSService &service) {
18 SmallBufferWithHeapFallback<16, mdns_txt_item_t> txt_records(service.txt_records.size());
19 for (
size_t i = 0; i < service.txt_records.size(); i++) {
20 const auto &record = service.txt_records[i];
23 txt_records.get()[i].key = MDNS_STR_ARG(record.key);
24 txt_records.get()[i].value = MDNS_STR_ARG(record.value);
26 uint16_t port = service.port.value();
27 return mdns_service_add(
nullptr, MDNS_STR_ARG(service.service_type), MDNS_STR_ARG(service.proto), port,
28 txt_records.get(), service.txt_records.size());
32static void register_esp32(MDNSComponent *comp, StaticVector<MDNSService, MDNS_SERVICE_COUNT> &services) {
33#ifdef USE_OPENTHREAD_SRP
45 mdns_hostname_set(hostname);
46 mdns_instance_name_set(hostname);
48 for (
auto &service : services) {
49#ifdef USE_MDNS_SUPPORTS_ENABLE_DISABLE
53 err = add_service(service);
55 ESP_LOGW(TAG,
"Failed to register service %s: %s", MDNS_STR_ARG(service.service_type),
esp_err_to_name(err));
56#ifdef USE_MDNS_SUPPORTS_ENABLE_DISABLE
58 service.enabled =
false;
65#if defined(USE_MDNS_SUPPORTS_ENABLE_DISABLE) && !defined(USE_OPENTHREAD_SRP)
69 ESP_LOGW(TAG,
"Cannot %s service %s before setup", enabled ?
"enable" :
"disable", service_type);
73 if (strcmp(MDNS_STR_ARG(service.service_type), service_type) != 0 ||
74 strcmp(MDNS_STR_ARG(service.proto), proto) != 0) {
77 if (service.enabled == enabled)
79 esp_err_t err = enabled ? add_service(service) : mdns_service_remove(service_type, proto);
81 ESP_LOGW(TAG,
"Failed to %s service %s: %s", enabled ?
"enable" :
"disable", service_type, esp_err_to_name(err));
84 service.enabled = enabled;
87 ESP_LOGW(TAG,
"Service %s not found", service_type);
92#ifdef USE_MDNS_DYNAMIC_NETWORK_TXT
95 esp_err_t err = mdns_service_txt_item_set(
"_esphomelib",
"_tcp",
"network", network);
97 ESP_LOGW(TAG,
"Failed to update network TXT: %s", esp_err_to_name(err));
106#if defined(USE_MDNS_DYNAMIC_NETWORK_TXT) && !defined(USE_MDNS_ACTIVE_INTERFACE_LISTENER)
113#ifndef USE_OPENTHREAD_SRP
const StringRef & get_name() const
Get the name of this Application set by pre_setup().
void set_interval(const char *name, uint32_t interval, std::function< void()> &&f)
Set an interval function with a const char* name.
constexpr const char * c_str() const
void on_shutdown() override
const char * connected_network_() const
The first connected interface in network: priority order ("ethernet" or "wifi"), else nullptr.
bool set_service_enabled(const char *service_type, const char *proto, bool enabled)
Enable or disable a compiled-in service, matched by type and proto (e.g.
void setup_buffers_and_register_(PlatformRegisterFn platform_register)
void update_network_txt_(const char *network)
Publish network as the "network" TXT value if it changed; nullptr keeps the current value.
static constexpr uint32_t NETWORK_TXT_CHECK_INTERVAL_MS
bool publish_network_txt_(const char *network)
Platform-specific: replace the "network" TXT value of the registered _esphomelib service.
StaticVector< MDNSService, MDNS_SERVICE_COUNT > services_
const char * esp_err_to_name(esp_err_t err)
ESPHOME_LOG_TAG(TAG, "mdns")
void HOT delay(uint32_t ms)
Application App
Global storage of Application pointer - only one Application can exist.