From b05f18dad55609ae2a569be81c7535021b880cf3 Mon Sep 17 00:00:00 2001 From: vortigont Date: Thu, 26 Sep 2024 07:37:00 +0900 Subject: [PATCH] fix: DNSServer Lib - improper startup code in WiFi mode (#10366) * DNSServer: fix improper startup code in WiFi mode When running on WiFi-AP mode server's start() method returned true while in fact UDP listening socket was never created Regression introduced in #8760 Closes #10330 * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> --- .../DNSServer/examples/CaptivePortal/CaptivePortal.ino | 6 +++++- libraries/DNSServer/src/DNSServer.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libraries/DNSServer/examples/CaptivePortal/CaptivePortal.ino b/libraries/DNSServer/examples/CaptivePortal/CaptivePortal.ino index f5de8aa9b57..d956dc14ad3 100644 --- a/libraries/DNSServer/examples/CaptivePortal/CaptivePortal.ino +++ b/libraries/DNSServer/examples/CaptivePortal/CaptivePortal.ino @@ -39,7 +39,11 @@ void setup() { // by default DNSServer is started serving any "*" domain name. It will reply // AccessPoint's IP to all DNS request (this is required for Captive Portal detection) - dnsServer.start(); + if (dnsServer.start()) { + Serial.println("Started DNS server in captive portal-mode"); + } else { + Serial.println("Err: Can't start DNS server!"); + } // serve a simple root page server.on("/", handleRoot); diff --git a/libraries/DNSServer/src/DNSServer.cpp b/libraries/DNSServer/src/DNSServer.cpp index 69e41092dc5..28cf89d6ede 100644 --- a/libraries/DNSServer/src/DNSServer.cpp +++ b/libraries/DNSServer/src/DNSServer.cpp @@ -22,10 +22,13 @@ bool DNSServer::start() { #if SOC_WIFI_SUPPORTED if (WiFi.getMode() & WIFI_AP) { _resolvedIP = WiFi.softAPIP(); - return true; + } else { + return false; // won't run if WiFi is not in AP mode, or no WiFi } +#else + return false; // for other non WiFi-AP networking an overloaded method must be used to get device's IP + // start(uint16_t port, const String &domainName, const IPAddress &resolvedIP) #endif - return false; // won't run if WiFi is not in AP mode } _udp.close();