#pragma once #include #include #include "esphome/core/component.h" namespace esphome { namespace mdns { struct MDNSTXTRecord { std::string key; std::string value; }; struct MDNSService { // service name _including_ underscore character prefix // as defined in RFC6763 Section 7 std::string service_type; // second label indicating protocol _including_ underscore character prefix // as defined in RFC6763 Section 7, like "_tcp" or "_udp" std::string proto; uint16_t port; std::vector txt_records; }; class MDNSComponent : public Component { public: void setup() override; void dump_config() override; #if (defined(USE_ESP8266) || defined(USE_RP2040)) && defined(USE_ARDUINO) void loop() override; #endif float get_setup_priority() const override { return setup_priority::AFTER_WIFI; } void add_extra_service(MDNSService service) { services_extra_.push_back(std::move(service)); } void on_shutdown() override; protected: std::vector services_extra_{}; std::vector services_{}; std::string hostname_; void compile_records_(); }; } // namespace mdns } // namespace esphome