/** 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"); server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send(200, "text/html", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.sendContent( "" "

HELLO WORLD!!

" ); if (server.client().localIP() == apIP) { server.sendContent(String("

You are connected through the soft AP: ") + softAP_ssid + "

"); } else { server.sendContent(String("

You are connected through the wifi network: ") + ssid + "

"); } server.sendContent( "

You may want to config the wifi connection.

" "" ); server.client().stop(); // Stop is needed because we sent no content length } /** 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.print("Request redirected to captive portal"); server.sendHeader("Location", String("http://") + toStringIp(server.client().localIP()), true); server.send ( 302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.client().stop(); // Stop is needed because we sent no content length 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"); server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send(200, "text/html", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.sendContent( "" "

Wifi config

" ); if (server.client().localIP() == apIP) { server.sendContent(String("

You are connected through the soft AP: ") + softAP_ssid + "

"); } else { server.sendContent(String("

You are connected through the wifi network: ") + ssid + "

"); } server.sendContent( "\r\n
" "" ); server.sendContent(String() + ""); server.sendContent(String() + ""); server.sendContent( "
SoftAP config
SSID " + String(softAP_ssid) + "
IP " + toStringIp(WiFi.softAPIP()) + "
" "\r\n
" "" ); server.sendContent(String() + ""); server.sendContent(String() + ""); server.sendContent( "
WLAN config
SSID " + String(ssid) + "
IP " + toStringIp(WiFi.localIP()) + "
" "\r\n
" "" ); Serial.println("scan start"); int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n > 0) { for (int i = 0; i < n; i++) { server.sendContent(String() + "\r\n"); } } else { server.sendContent(String() + ""); } server.sendContent( "
WLAN list (refresh if any missing)
SSID " + WiFi.SSID(i) + String((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":" *") + " (" + WiFi.RSSI(i) + ")
No WLAN found
" "\r\n

Connect to network:

" "" "
" "
" "

You may want to return to the home 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.sendHeader("Location", "wifi", true); server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); server.send ( 302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. server.client().stop(); // Stop is needed because we sent no content length 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 = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += ( server.method() == HTTP_GET ) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for ( uint8_t i = 0; i < server.args(); i++ ) { message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\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 ); }