ESPHome 2025.10.0-dev
Loading...
Searching...
No Matches
captive_portal.h
Go to the documentation of this file.
1#pragma once
3#ifdef USE_CAPTIVE_PORTAL
4#include <memory>
5#ifdef USE_ARDUINO
6#include <DNSServer.h>
7#endif
8#ifdef USE_ESP_IDF
10#endif
15
16namespace esphome {
17
18namespace captive_portal {
19
20class CaptivePortal : public AsyncWebHandler, public Component {
21 public:
23 void setup() override;
24 void dump_config() override;
25 void loop() override {
26#ifdef USE_ARDUINO
27 if (this->dns_server_ != nullptr) {
28 this->dns_server_->processNextRequest();
29 }
30#endif
31#ifdef USE_ESP_IDF
32 if (this->dns_server_ != nullptr) {
33 this->dns_server_->process_next_request();
34 }
35#endif
36 }
37 float get_setup_priority() const override;
38 void start();
39 bool is_active() const { return this->active_; }
40 void end() {
41 this->active_ = false;
42 this->disable_loop(); // Stop processing DNS requests
43 this->base_->deinit();
44 if (this->dns_server_ != nullptr) {
45 this->dns_server_->stop();
46 this->dns_server_ = nullptr;
47 }
48 }
49
50 bool canHandle(AsyncWebServerRequest *request) const override {
51 // Handle all GET requests when captive portal is active
52 // This allows us to respond with the portal page for any URL,
53 // triggering OS captive portal detection
54 return this->active_ && request->method() == HTTP_GET;
55 }
56
57 void handle_config(AsyncWebServerRequest *request);
58
59 void handle_wifisave(AsyncWebServerRequest *request);
60
61 void handleRequest(AsyncWebServerRequest *req) override;
62
63 protected:
65 bool initialized_{false};
66 bool active_{false};
67#if defined(USE_ARDUINO) || defined(USE_ESP_IDF)
68 std::unique_ptr<DNSServer> dns_server_{nullptr};
69#endif
70};
71
72extern CaptivePortal *global_captive_portal; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
73
74} // namespace captive_portal
75} // namespace esphome
76#endif
void disable_loop()
Disable this component's loop.
bool canHandle(AsyncWebServerRequest *request) const override
std::unique_ptr< DNSServer > dns_server_
CaptivePortal(web_server_base::WebServerBase *base)
void handle_config(AsyncWebServerRequest *request)
web_server_base::WebServerBase * base_
void handleRequest(AsyncWebServerRequest *req) override
void handle_wifisave(AsyncWebServerRequest *request)
CaptivePortal * global_captive_portal
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7