1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-22 21:23:07 +03:00
esp8266/libraries/ESP8266WebServer
Max Prokhorov 27c0591756
Longer delays for Ticker and some internal updates (#8625)
Adds max duration check. In case it is over SDK limit, enable 'repeat'ing timer with a duration proportional to the original one and count until it executes N times, only then run the callback.
Code with durations less than that executes as usual. Original proposal was to not create anything or create some kind of error state... which seems counter-productive to not help out with this pretty solvable use-case.

Additional updates, while refactoring the class
- Stronger types for internal time management using `std::chrono::duration`. Works the same, `std::chrono::duration` handles seconds <-> milliseconds conversion, and we don't have to remember the time type in each method. (...and even allow `once()` and `attach` as overloads instead of the current `_ms`-suffix, in a future update)
- `::detach()` when timer finishes. Fixes (unintentional?) side-effect that we remain `::active()`. Plus, this destroys any lambda-bound variables that will persist with the Ticker object. And, since we can't re-arm with the existing function (`Ticker::attach_ms(uint32_t just_the_time)` and etc.)
- `std::variant` aka union for internal callback storage (kind-of similar to #6918). Instead of having two separate code paths, **always** attach our static function and dispatch using type info. Also helps with the issue described above, since it will call `std::function` dtor when ptr + arg is attached instead of doing nothing.
- smarter copy and move, detaching existing timer on assignment and detaching the moved-in timer object in both ctor and assignment. Copying or moving a running timer no longer blindly copies `_timer` pointer, allowing to disarm the original one. Since we are a simple wrapper around `os_timer_t`, just do the simpler thing (and not re-schedule the callback, try to store original times, etc. polledTimeout already does it and is copyable)
2022-11-01 20:15:14 +03:00
..

ESP8266 Web Server

The WebServer class found in ESP8266WebServer.h header, is a simple web server that knows how to handle HTTP requests such as GET and POST and can only support one simultaneous client.

Usage

Class Constructor

ESP8266WebServer server(80);

Creates the ESP8266WebServer class object.

Parameters:

host IP address: IPaddress addr (optional)

host port number: int port (default is the standard HTTP port 80)

Basic Operations

Starting the server

void begin();

Handling incoming client requests

void handleClient();

Disabling the server

void close();
void stop();

Both methods function the same

Client request handlers

void on();
void addHandler();
void onNotFound();
void onFileUpload();  

Example:

server.on("/", handlerFunction);
server.onNotFound(handlerFunction); // called when handler is not assigned
server.onFileUpload(handlerFunction); // handle file uploads

Sending responses to the client

void send();
void send_P();

Parameters:

code - HTTP response code, can be 200 or 404, etc.

content_type - HTTP content type, like "text/plain" or "image/png", etc.

content - actual content body

Advanced Options

Getting information about request arguments

const String & arg();
const String & argName();
int args();
bool hasArg();

arg - get request argument value, use arg("plain") to get POST body

argName - get request argument name

args - get arguments count

hasArg - check if argument exist

Getting information about request headers

const String & header();
const String & headerName();
const String & hostHeader();
int headers();
bool hasHeader();

header - get request header value

headerName - get request header name

hostHeader - get request host header if available, else empty string

headers - get header count

hasHeader - check if header exist

Authentication

bool authenticate();
void requestAuthentication();

authenticate - server authentication, returns true if client is authenticated else false

requestAuthentication - sends authentication failure response to the client

Example Usage:

if(!server.authenticate(username, password)){
  server.requestAuthentication();
}

Other Function Calls

const String & uri(); // get the current uri
HTTPMethod  method(); // get the current method 
WiFiClient & client(); // get the current client
HTTPUpload & upload(); // get the current upload
void setContentLength(); // set content length
void sendHeader(); // send HTTP header
void sendContent(); // send content
void sendContent_P(); 
void collectHeaders(); // set the request headers to collect
void serveStatic();
size_t streamFile();

For code samples enter here .