- /*
-
- MDNS MODULE
-
- Copyright (C) 2017-2019 by Xose Pérez <xose dot perez at gmail dot com>
-
- */
-
- // -----------------------------------------------------------------------------
- // mDNS Server
- // -----------------------------------------------------------------------------
-
- #include "mdns.h"
-
- #include "mqtt.h"
- #include "utils.h"
-
- #if MDNS_SERVER_SUPPORT
-
- #include <ESP8266mDNS.h>
-
- #if MQTT_SUPPORT
-
- void _mdnsFindMQTT() {
- int count = MDNS.queryService("mqtt", "tcp");
- DEBUG_MSG_P(PSTR("[MQTT] MQTT brokers found: %d\n"), count);
- for (int i=0; i<count; i++) {
- DEBUG_MSG_P(PSTR("[MQTT] Broker at %s:%d\n"), MDNS.IP(i).toString().c_str(), MDNS.port(i));
- mqttSetBrokerIfNone(MDNS.IP(i), MDNS.port(i));
- }
- }
-
- #endif
-
- void _mdnsServerStart() {
- if (MDNS.begin(getSetting("hostname", getIdentifier()))) {
- DEBUG_MSG_P(PSTR("[MDNS] OK\n"));
- } else {
- DEBUG_MSG_P(PSTR("[MDNS] FAIL\n"));
- }
- }
-
- // -----------------------------------------------------------------------------
-
- void mdnsServerSetup() {
- bool done { false };
-
- #if WEB_SUPPORT
- {
- MDNS.addService("http", "tcp", getSetting("webPort", static_cast<uint16_t>(WEB_PORT)));
- done = true;
- }
- #endif
-
- #if TELNET_SUPPORT
- {
- MDNS.addService("telnet", "tcp", TELNET_PORT);
- done = true;
- }
- #endif
-
- #if OTA_ARDUINOOTA_SUPPORT
- {
- MDNS.addServiceTxt("arduino", "tcp", "app_name", APP_NAME);
- MDNS.addServiceTxt("arduino", "tcp", "app_version", getVersion());
- MDNS.addServiceTxt("arduino", "tcp", "build_date", buildTime());
- MDNS.addServiceTxt("arduino", "tcp", "mac", WiFi.macAddress());
- MDNS.addServiceTxt("arduino", "tcp", "target_board", getBoardName());
-
- MDNS.addServiceTxt("arduino", "tcp", "mem_size",
- String(static_cast<int>(ESP.getFlashChipRealSize() / 1024), 10));
- MDNS.addServiceTxt("arduino", "tcp", "sdk_size",
- String(static_cast<int>(ESP.getFlashChipSize() / 1024), 10));
- MDNS.addServiceTxt("arduino", "tcp", "free_space",
- String(static_cast<int>(ESP.getFreeSketchSpace() / 1024), 10));
- done = true;
- }
- #endif
-
- if (!done) {
- return;
- }
-
- // 2.7.4 and older require MDNS.begin() when interface is UP
- // 3.0.0 and newer only need to do MDNS.begin() once at setup()
- // (TODO: this is techically a constexpr, but not in 2.7.4 :/)
- const static bool OldCore { esp8266::coreVersionNumeric() <= 20704000 };
-
- wifiRegister([](wifi::Event event) {
- if (event == wifi::Event::StationConnected) {
- #if MQTT_SUPPORT
- _mdnsFindMQTT();
- #endif
- } else if (OldCore && (event == wifi::Event::Mode)) {
- _mdnsServerStart();
- }
- });
-
- if (!OldCore) {
- _mdnsServerStart();
- }
- }
-
- #endif // MDNS_SERVER_SUPPORT
|