feat(ap): Add support for DHCP Captive Portal (opt 114) (#11412)
* feat(ap): Add support for DHCP Captive Portal (opt 114) * feat(ap): No need to guard the function * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
parent
b5c5655cf0
commit
a2880a4c17
3 changed files with 43 additions and 2 deletions
|
|
@ -34,8 +34,9 @@ void handleNotFound() {
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
WiFi.mode(WIFI_AP);
|
WiFi.AP.begin();
|
||||||
WiFi.softAP("ESP32-DNSServer");
|
WiFi.AP.create("ESP32-DNSServer");
|
||||||
|
WiFi.AP.enableDhcpCaptivePortal();
|
||||||
|
|
||||||
// by default DNSServer is started serving any "*" domain name. It will reply
|
// 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)
|
// AccessPoint's IP to all DNS request (this is required for Captive Portal detection)
|
||||||
|
|
|
||||||
|
|
@ -305,6 +305,45 @@ bool APClass::enableNAPT(bool enable) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool APClass::enableDhcpCaptivePortal() {
|
||||||
|
esp_err_t err = ESP_OK;
|
||||||
|
static char captiveportal_uri[32] = {
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!started()) {
|
||||||
|
log_e("AP must be first started to enable DHCP Captive Portal");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Captive Portal URL: http://192.168.0.4
|
||||||
|
strcpy(captiveportal_uri, "http://");
|
||||||
|
strcat(captiveportal_uri, String(localIP()).c_str());
|
||||||
|
|
||||||
|
// Stop DHCPS
|
||||||
|
err = esp_netif_dhcps_stop(_esp_netif);
|
||||||
|
if (err && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) {
|
||||||
|
log_e("DHCPS Stop Failed! 0x%04x: %s", err, esp_err_to_name(err));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable DHCP Captive Portal
|
||||||
|
err = esp_netif_dhcps_option(_esp_netif, ESP_NETIF_OP_SET, ESP_NETIF_CAPTIVEPORTAL_URI, captiveportal_uri, strlen(captiveportal_uri));
|
||||||
|
if (err) {
|
||||||
|
log_e("Could not set enable DHCP Captive Portal! 0x%x: %s", err, esp_err_to_name(err));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start DHCPS
|
||||||
|
err = esp_netif_dhcps_start(_esp_netif);
|
||||||
|
if (err) {
|
||||||
|
log_e("DHCPS Start Failed! 0x%04x: %s", err, esp_err_to_name(err));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
String APClass::SSID(void) const {
|
String APClass::SSID(void) const {
|
||||||
if (!started()) {
|
if (!started()) {
|
||||||
return String();
|
return String();
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ public:
|
||||||
|
|
||||||
bool bandwidth(wifi_bandwidth_t bandwidth);
|
bool bandwidth(wifi_bandwidth_t bandwidth);
|
||||||
bool enableNAPT(bool enable = true);
|
bool enableNAPT(bool enable = true);
|
||||||
|
bool enableDhcpCaptivePortal();
|
||||||
|
|
||||||
String SSID(void) const;
|
String SSID(void) const;
|
||||||
uint8_t stationCount();
|
uint8_t stationCount();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue