mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-25 20:02:37 +03:00
* added getAvailableVersion(), moved _httpClientTimeout and _followRedirects to protected, added enum HTTPUpdateError * auto numbering of HTTPUpdateError enum * added getAvailableVersion(), debug output current current Sketch MD5 * Revert "added getAvailableVersion(), debug output current current Sketch MD5" This reverts commit 60d2c7762e7fb1fed7fae37fa99be149e12f125c. * Revert "auto numbering of HTTPUpdateError enum" This reverts commit 61785b27da3f2d42f8f95316d78ce22e5b00103a. * Revert "added getAvailableVersion(), moved _httpClientTimeout and _followRedirects to protected, added enum HTTPUpdateError" This reverts commit cec84ed17ab149d3e48082293f9e2723246b7d0b. * add redirect function * enhanced redirect() by cache control and client stop * updated redirect() comment * replaced redirect() API calls in examples * server.client().stop() not needed, redirect() does this
116 lines
5.0 KiB
C++
116 lines
5.0 KiB
C++
/** Handle root or redirect to captive portal */
|
|
void handleRoot() {
|
|
if (captivePortal()) { // If caprive portal redirect instead of displaying the page.
|
|
return;
|
|
}
|
|
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
server.sendHeader("Pragma", "no-cache");
|
|
server.sendHeader("Expires", "-1");
|
|
|
|
String Page;
|
|
Page += F("<!DOCTYPE html><html lang='en'><head>"
|
|
"<meta name='viewport' content='width=device-width'>"
|
|
"<title>CaptivePortal</title></head><body>"
|
|
"<h1>HELLO WORLD!!</h1>");
|
|
if (server.client().localIP() == apIP) {
|
|
Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
|
|
} else {
|
|
Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
|
|
}
|
|
Page += F("<p>You may want to <a href='/wifi'>config the wifi connection</a>.</p>"
|
|
"</body></html>");
|
|
|
|
server.send(200, "text/html", Page);
|
|
}
|
|
|
|
/** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
|
|
boolean captivePortal() {
|
|
if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) {
|
|
Serial.println("Request redirected to captive portal");
|
|
server.redirect(String("http://") + toStringIp(server.client().localIP()));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/** Wifi config page handler */
|
|
void handleWifi() {
|
|
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
server.sendHeader("Pragma", "no-cache");
|
|
server.sendHeader("Expires", "-1");
|
|
|
|
String Page;
|
|
Page += F("<!DOCTYPE html><html lang='en'><head>"
|
|
"<meta name='viewport' content='width=device-width'>"
|
|
"<title>CaptivePortal</title></head><body>"
|
|
"<h1>Wifi config</h1>");
|
|
if (server.client().localIP() == apIP) {
|
|
Page += String(F("<p>You are connected through the soft AP: ")) + softAP_ssid + F("</p>");
|
|
} else {
|
|
Page += String(F("<p>You are connected through the wifi network: ")) + ssid + F("</p>");
|
|
}
|
|
Page += String(F("\r\n<br />"
|
|
"<table><tr><th align='left'>SoftAP config</th></tr>"
|
|
"<tr><td>SSID "))
|
|
+ String(softAP_ssid) + F("</td></tr>"
|
|
"<tr><td>IP ")
|
|
+ toStringIp(WiFi.softAPIP()) + F("</td></tr>"
|
|
"</table>"
|
|
"\r\n<br />"
|
|
"<table><tr><th align='left'>WLAN config</th></tr>"
|
|
"<tr><td>SSID ")
|
|
+ String(ssid) + F("</td></tr>"
|
|
"<tr><td>IP ")
|
|
+ toStringIp(WiFi.localIP()) + F("</td></tr>"
|
|
"</table>"
|
|
"\r\n<br />"
|
|
"<table><tr><th align='left'>WLAN list (refresh if any missing)</th></tr>");
|
|
Serial.println("scan start");
|
|
int n = WiFi.scanNetworks();
|
|
Serial.println("scan done");
|
|
if (n > 0) {
|
|
for (int i = 0; i < n; i++) { Page += String(F("\r\n<tr><td>SSID ")) + WiFi.SSID(i) + ((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? F(" ") : F(" *")) + F(" (") + WiFi.RSSI(i) + F(")</td></tr>"); }
|
|
} else {
|
|
Page += F("<tr><td>No WLAN found</td></tr>");
|
|
}
|
|
Page += F("</table>"
|
|
"\r\n<br /><form method='POST' action='wifisave'><h4>Connect to network:</h4>"
|
|
"<input type='text' placeholder='network' name='n'/>"
|
|
"<br /><input type='password' placeholder='password' name='p'/>"
|
|
"<br /><input type='submit' value='Connect/Disconnect'/></form>"
|
|
"<p>You may want to <a href='/'>return to the home page</a>.</p>"
|
|
"</body></html>");
|
|
server.send(200, "text/html", Page);
|
|
server.client().stop(); // Stop is needed because we sent no content length
|
|
}
|
|
|
|
/** Handle the WLAN save form and redirect to WLAN config page again */
|
|
void handleWifiSave() {
|
|
Serial.println("wifi save");
|
|
server.arg("n").toCharArray(ssid, sizeof(ssid) - 1);
|
|
server.arg("p").toCharArray(password, sizeof(password) - 1);
|
|
server.redirect("wifi");
|
|
saveCredentials();
|
|
connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID
|
|
}
|
|
|
|
void handleNotFound() {
|
|
if (captivePortal()) { // If caprive portal redirect instead of displaying the error page.
|
|
return;
|
|
}
|
|
String message = F("File Not Found\n\n");
|
|
message += F("URI: ");
|
|
message += server.uri();
|
|
message += F("\nMethod: ");
|
|
message += (server.method() == HTTP_GET) ? "GET" : "POST";
|
|
message += F("\nArguments: ");
|
|
message += server.args();
|
|
message += F("\n");
|
|
|
|
for (uint8_t i = 0; i < server.args(); i++) { message += String(F(" ")) + server.argName(i) + F(": ") + server.arg(i) + F("\n"); }
|
|
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
server.sendHeader("Pragma", "no-cache");
|
|
server.sendHeader("Expires", "-1");
|
|
server.send(404, "text/plain", message);
|
|
}
|