mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
commit
517b234e2a
@ -154,7 +154,15 @@ extern void __detachInterrupt(uint8_t pin) {
|
||||
}
|
||||
|
||||
void initPins() {
|
||||
ETS_GPIO_INTR_ATTACH(interrupt_handlers, &interrupt_reg);
|
||||
for (int i = 0; i <= 5; ++i) {
|
||||
pinMode(i, INPUT);
|
||||
}
|
||||
// pins 6-11 are used for the SPI flash interface
|
||||
for (int i = 12; i <= 16; ++i) {
|
||||
pinMode(i, INPUT);
|
||||
}
|
||||
|
||||
ETS_GPIO_INTR_ATTACH(interrupt_handler, &interrupt_reg);
|
||||
ETS_GPIO_INTR_ENABLE();
|
||||
}
|
||||
|
||||
|
@ -9,24 +9,23 @@ MDNSResponder mdns;
|
||||
|
||||
ESP8266WebServer server(80);
|
||||
|
||||
void handle_root() {
|
||||
void handleRoot() {
|
||||
server.send(200, "text/plain", "hello from esp8266!");
|
||||
}
|
||||
|
||||
bool handle_not_found(){
|
||||
void handleNotFound(){
|
||||
String message = "URI: ";
|
||||
message += server.uri();
|
||||
message += "\nMethod: ";
|
||||
message += (server.method() == HTTP_GET)?"GET":"POST";
|
||||
message += "\nNot Found!\n\n";
|
||||
message += "\nArguments: ";
|
||||
message += server.args();
|
||||
message += "\n";
|
||||
for (uint8_t i=0; i<server.args(); i++){
|
||||
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
|
||||
}
|
||||
message += "\nNotFound!";
|
||||
server.send(404, "text/plain", message);
|
||||
return true;
|
||||
}
|
||||
|
||||
void setup(void){
|
||||
@ -45,15 +44,17 @@ void setup(void){
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
if (mdns.begin("esp8266", WiFi.localIP())) Serial.println("MDNS responder started");
|
||||
if (mdns.begin("esp8266", WiFi.localIP())) {
|
||||
Serial.println("MDNS responder started");
|
||||
}
|
||||
|
||||
server.on("/", handle_root);
|
||||
server.on("/", handleRoot);
|
||||
|
||||
server.on("/inline", [](){
|
||||
server.send(200, "text/plain", "this works as well");
|
||||
});
|
||||
|
||||
server.onNotFound(handle_not_found);
|
||||
server.onNotFound(handleNotFound);
|
||||
|
||||
server.begin();
|
||||
Serial.println("HTTP server started");
|
||||
|
@ -21,6 +21,10 @@ method KEYWORD2
|
||||
client KEYWORD2
|
||||
send KEYWORD2
|
||||
arg KEYWORD2
|
||||
argName KEYWORD2
|
||||
args KEYWORD2
|
||||
hasArg KEYWORD2
|
||||
onNotFound KEYWORD2
|
||||
|
||||
#######################################
|
||||
# Constants (LITERAL1)
|
||||
|
@ -111,7 +111,6 @@ void ESP8266WebServer::handleClient()
|
||||
method = HTTP_POST;
|
||||
}
|
||||
|
||||
|
||||
// First line of HTTP request looks like "GET /path HTTP/1.1"
|
||||
// Retrieve the "/path" part by finding the spaces
|
||||
int addr_start = req.indexOf(' ');
|
||||
@ -127,8 +126,7 @@ void ESP8266WebServer::handleClient()
|
||||
req = req.substring(addr_start + 1, addr_end);
|
||||
|
||||
String formData;
|
||||
if (method == HTTP_POST)
|
||||
{
|
||||
if (method == HTTP_POST) {
|
||||
int contentLength = -1;
|
||||
int headerCount = 0;
|
||||
while(headerCount < 1024) { // there shouldn't be that much really
|
||||
@ -167,14 +165,10 @@ void ESP8266WebServer::handleClient()
|
||||
else {
|
||||
formData = client.readStringUntil('\r'); // will return after timing out once
|
||||
}
|
||||
// read form data
|
||||
// formData =
|
||||
}
|
||||
else if (method == HTTP_GET)
|
||||
{
|
||||
else if (method == HTTP_GET) {
|
||||
int args_start = req.indexOf('?');
|
||||
if (args_start != -1)
|
||||
{
|
||||
if (args_start != -1) {
|
||||
formData = req.substring(args_start + 1);
|
||||
req = req.substring(0, args_start);
|
||||
}
|
||||
@ -198,22 +192,19 @@ void ESP8266WebServer::send(int code, const char* content_type, String content)
|
||||
String response = "HTTP/1.1 ";
|
||||
response += String(code);
|
||||
response += " ";
|
||||
if (code == 200)
|
||||
response += "OK";
|
||||
else if (code == 404)
|
||||
response += "Not found";
|
||||
response += _responseCodeToString(code);
|
||||
response += "\r\n";
|
||||
|
||||
if (!content_type)
|
||||
content_type = "text/html";
|
||||
response += "Content-Type: ";
|
||||
response += content_type;
|
||||
response += "\r\n\r\n";
|
||||
_appendHeader(response, "Content-Type", content_type);
|
||||
|
||||
response += "\r\n";
|
||||
response += content;
|
||||
_currentClient.print(response);
|
||||
}
|
||||
|
||||
String ESP8266WebServer::arg(const char* name)
|
||||
{
|
||||
String ESP8266WebServer::arg(const char* name) {
|
||||
for (int i = 0; i < _currentArgCount; ++i) {
|
||||
if (_currentArgs[i].key == name)
|
||||
return _currentArgs[i].value;
|
||||
@ -221,15 +212,13 @@ String ESP8266WebServer::arg(const char* name)
|
||||
return String();
|
||||
}
|
||||
|
||||
String ESP8266WebServer::arg(int i)
|
||||
{
|
||||
String ESP8266WebServer::arg(int i) {
|
||||
if (i < _currentArgCount)
|
||||
return _currentArgs[i].value;
|
||||
return String();
|
||||
}
|
||||
|
||||
String ESP8266WebServer::argName(int i)
|
||||
{
|
||||
String ESP8266WebServer::argName(int i) {
|
||||
if (i < _currentArgCount)
|
||||
return _currentArgs[i].key;
|
||||
return String();
|
||||
@ -239,8 +228,7 @@ int ESP8266WebServer::args(){
|
||||
return _currentArgCount;
|
||||
}
|
||||
|
||||
bool ESP8266WebServer::hasArg(const char* name)
|
||||
{
|
||||
bool ESP8266WebServer::hasArg(const char* name) {
|
||||
for (int i = 0; i < _currentArgCount; ++i) {
|
||||
if (_currentArgs[i].key == name)
|
||||
return true;
|
||||
@ -248,8 +236,7 @@ bool ESP8266WebServer::hasArg(const char* name)
|
||||
return false;
|
||||
}
|
||||
|
||||
void ESP8266WebServer::_parseArguments(String data)
|
||||
{
|
||||
void ESP8266WebServer::_parseArguments(String data) {
|
||||
if (_currentArgs)
|
||||
delete[] _currentArgs;
|
||||
_currentArgs = 0;
|
||||
@ -319,7 +306,7 @@ void ESP8266WebServer::_parseArguments(String data)
|
||||
|
||||
}
|
||||
|
||||
void ESP8266WebServer::onNotFound(TNotFoundHandlerFunction fn){
|
||||
void ESP8266WebServer::onNotFound(THandlerFunction fn) {
|
||||
_notFoundHandler = fn;
|
||||
}
|
||||
|
||||
@ -345,11 +332,31 @@ void ESP8266WebServer::_handleRequest(WiFiClient& client, String uri, HTTPMethod
|
||||
#ifdef DEBUG
|
||||
Serial.println("request handler not found");
|
||||
#endif
|
||||
if(!_notFoundHandler || !_notFoundHandler())
|
||||
|
||||
if(_notFoundHandler) {
|
||||
_notFoundHandler();
|
||||
}
|
||||
else {
|
||||
send(404, "text/plain", String("Not found: ") + uri);
|
||||
}
|
||||
}
|
||||
|
||||
_currentClient = WiFiClient();
|
||||
_currentUri = String();
|
||||
|
||||
}
|
||||
|
||||
const char* ESP8266WebServer::_responseCodeToString(int code) {
|
||||
switch (code) {
|
||||
case 200: return "OK";
|
||||
case 404: return "Not found";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
void ESP8266WebServer::_appendHeader(String& response, const char* name, const char* value) {
|
||||
response += name;
|
||||
response += ": ";
|
||||
response += value;
|
||||
response += "\r\n";
|
||||
}
|
||||
|
@ -39,18 +39,17 @@ public:
|
||||
void handleClient();
|
||||
|
||||
typedef std::function<void(void)> THandlerFunction;
|
||||
typedef std::function<bool(void)> TNotFoundHandlerFunction;
|
||||
void on(const char* uri, THandlerFunction handler);
|
||||
void on(const char* uri, HTTPMethod method, THandlerFunction fn);
|
||||
void onNotFound(TNotFoundHandlerFunction fn);//called when handler is not assigned
|
||||
void onNotFound(THandlerFunction fn); //called when handler is not assigned
|
||||
|
||||
String uri() { return _currentUri; }
|
||||
HTTPMethod method() { return _currentMethod; }
|
||||
WiFiClient client() { return _currentClient; }
|
||||
|
||||
String arg(const char* name);// get request argument value
|
||||
String arg(int i);// get request argument value buy number
|
||||
String argName(int i);// get request argument name buy number
|
||||
String arg(const char* name); // get request argument value by name
|
||||
String arg(int i); // get request argument value by number
|
||||
String argName(int i); // get request argument name by number
|
||||
int args(); // get arguments count
|
||||
bool hasArg(const char* name); // check if argument exists
|
||||
|
||||
@ -63,6 +62,8 @@ public:
|
||||
protected:
|
||||
void _handleRequest(WiFiClient& client, String uri, HTTPMethod method);
|
||||
void _parseArguments(String data);
|
||||
static const char* _responseCodeToString(int code);
|
||||
static void _appendHeader(String& response, const char* name, const char* value);
|
||||
|
||||
struct RequestHandler;
|
||||
struct RequestArgument {
|
||||
@ -81,7 +82,7 @@ protected:
|
||||
|
||||
RequestHandler* _firstHandler;
|
||||
RequestHandler* _lastHandler;
|
||||
TNotFoundHandlerFunction _notFoundHandler;
|
||||
THandlerFunction _notFoundHandler;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user