mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Fixes by SwiCago on DNSServer
Fixes by SwiCago on this forum comment http://www.esp8266.com/viewtopic.php?p=23900#p23900
This commit is contained in:
parent
278c980ed8
commit
a2f3637ed4
100
libraries/DNSServer/examples/CaptivePortal2/CaptivePortal2.ino
Normal file
100
libraries/DNSServer/examples/CaptivePortal2/CaptivePortal2.ino
Normal file
@ -0,0 +1,100 @@
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <DNSServer.h>
|
||||
|
||||
const char* ssid = "esp8266";
|
||||
boolean LEDstate[] = {LOW, false, LOW};
|
||||
|
||||
const char* html = "<html><head><title>Success</title><style>.bt{display:block;width:250px;height:100px;padding:10px;margin:10px;"
|
||||
"text-align:center;border-radius:5px;color:white;font-weight:bold;font-size:70px;text-decoration:none;} "
|
||||
"body{background:#000;} .r{background:#933;} .g{background:#363;} .y{background:#EE0;height:100px;"
|
||||
"width:100px;border-radius:50px;} .b{background:#000;height:100px;width:100px;border-radius:50px;} "
|
||||
".a{font-size:35px;} td{vertical-align:middle;}</style>"
|
||||
"</head><body><table><tr><td><div class='TGT0'></div></td><td><a class='bt g' href='/L0?v=1'>ON</a></td>"
|
||||
"<td><a class='bt r' href='/L0?v=0'>OFF</a></td></tr><tr><td><div class='TGT2'></div></td><td>"
|
||||
"<a class='bt g' href='/L2?v=1'>ON</a></td><td><a class='bt r' href='/L2?v=0'>OFF</a></td></tr>"
|
||||
"<tr><td> </td><td><a class='bt g a' href='/ALL?v=1'><br/>ALL ON</a></td><td>"
|
||||
"<a class='bt r a' href='/ALL?v=0'><br/>ALL OFF</a></td></tr></body></html>";
|
||||
|
||||
const byte DNS_PORT = 53;
|
||||
IPAddress apIP(192, 168, 1, 1);
|
||||
IPAddress netMsk(255, 255, 255, 0);
|
||||
DNSServer dnsServer;
|
||||
ESP8266WebServer server(80);
|
||||
|
||||
void setup() {
|
||||
pinMode(0, OUTPUT);
|
||||
pinMode(2, OUTPUT);
|
||||
digitalWrite(2, LEDstate[0]);
|
||||
digitalWrite(2, LEDstate[2]);
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
WiFi.mode(WIFI_AP);
|
||||
WiFi.softAPConfig(apIP, apIP, netMsk);
|
||||
WiFi.softAP(ssid);
|
||||
Serial.print("SSID: ");
|
||||
Serial.println(ssid);
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.softAPIP());
|
||||
dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
|
||||
dnsServer.start(DNS_PORT, "*", apIP);
|
||||
Serial.println("USP Server started");
|
||||
server.on("/", handle_root);
|
||||
server.on("/generate_204", handle_root); //Android captive portal
|
||||
server.on("/L0", handle_L0);
|
||||
server.on("/L2", handle_L2);
|
||||
server.on("/ALL", handle_ALL);
|
||||
server.onNotFound(handleNotFound);
|
||||
server.begin();
|
||||
Serial.println("HTTP server started");
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
dnsServer.processNextRequest();
|
||||
server.handleClient();
|
||||
}
|
||||
|
||||
void handleNotFound() {
|
||||
Serial.print("\t\t\t\t URI Not Found: ");
|
||||
Serial.println(server.uri());
|
||||
server.send ( 200, "text/plain", "URI Not Found" );
|
||||
}
|
||||
|
||||
void handle_root() {
|
||||
Serial.println("Page served");
|
||||
String toSend = html;
|
||||
toSend.replace("TGT0", LEDstate[0] ? "y" : "b");
|
||||
toSend.replace("TGT2", LEDstate[2] ? "y" : "b");
|
||||
server.send(200, "text/html", toSend);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void handle_L0() {
|
||||
change_states(0);
|
||||
handle_root();
|
||||
}
|
||||
|
||||
void handle_L2() {
|
||||
change_states(2);
|
||||
handle_root();
|
||||
}
|
||||
|
||||
void handle_ALL() {
|
||||
change_states(0);
|
||||
change_states(2);
|
||||
handle_root();
|
||||
}
|
||||
|
||||
void change_states(int tgt) {
|
||||
if (server.hasArg("v")) {
|
||||
int state = server.arg("v").toInt() == 1;
|
||||
Serial.print("LED");
|
||||
Serial.print(tgt);
|
||||
Serial.print("=");
|
||||
Serial.println(state);
|
||||
LEDstate[tgt] = state ? HIGH : LOW;
|
||||
digitalWrite(tgt, LEDstate[tgt]);
|
||||
}
|
||||
}
|
@ -2,6 +2,9 @@
|
||||
#include <lwip/def.h>
|
||||
#include <Arduino.h>
|
||||
|
||||
#define DEBUG
|
||||
#define DEBUG_OUTPUT Serial
|
||||
|
||||
DNSServer::DNSServer()
|
||||
{
|
||||
_ttl = htonl(60);
|
||||
@ -110,16 +113,43 @@ void DNSServer::replyWithIP()
|
||||
{
|
||||
_dnsHeader->QR = DNS_QR_RESPONSE;
|
||||
_dnsHeader->ANCount = _dnsHeader->QDCount;
|
||||
_dnsHeader->QDCount = 0;
|
||||
_dnsHeader->QDCount = _dnsHeader->QDCount;
|
||||
//_dnsHeader->RA = 1;
|
||||
|
||||
_udp.beginPacket(_udp.remoteIP(), _udp.remotePort());
|
||||
_udp.write(_buffer, _currentPacketSize);
|
||||
|
||||
_udp.write((uint8_t)192); // answer name is a pointer
|
||||
_udp.write((uint8_t)12); // pointer to offset at 0x00c
|
||||
|
||||
_udp.write((uint8_t)0); // 0x0001 answer is type A query (host address)
|
||||
_udp.write((uint8_t)1);
|
||||
|
||||
_udp.write((uint8_t)0); //0x0001 answer is class IN (internet address)
|
||||
_udp.write((uint8_t)1);
|
||||
|
||||
_udp.write((unsigned char*)&_ttl, 4);
|
||||
|
||||
// Length of RData is 4 bytes (because, in this case, RData is IPv4)
|
||||
_udp.write((uint8_t)0);
|
||||
_udp.write((uint8_t)4);
|
||||
_udp.write(_resolvedIP, sizeof(_resolvedIP));
|
||||
_udp.endPacket();
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
DEBUG_OUTPUT.print("DNS responds: ");
|
||||
DEBUG_OUTPUT.print(_resolvedIP[0]);
|
||||
DEBUG_OUTPUT.print(".");
|
||||
DEBUG_OUTPUT.print(_resolvedIP[1]);
|
||||
DEBUG_OUTPUT.print(".");
|
||||
DEBUG_OUTPUT.print(_resolvedIP[2]);
|
||||
DEBUG_OUTPUT.print(".");
|
||||
DEBUG_OUTPUT.print(_resolvedIP[3]);
|
||||
DEBUG_OUTPUT.print(" for ");
|
||||
DEBUG_OUTPUT.println(getDomainNameWithoutWwwPrefix());
|
||||
#endif
|
||||
}
|
||||
|
||||
void DNSServer::replyWithCustomCode()
|
||||
@ -131,4 +161,4 @@ void DNSServer::replyWithCustomCode()
|
||||
_udp.beginPacket(_udp.remoteIP(), _udp.remotePort());
|
||||
_udp.write(_buffer, sizeof(DNSHeader));
|
||||
_udp.endPacket();
|
||||
}
|
||||
}
|
@ -68,4 +68,4 @@ class DNSServer
|
||||
void replyWithIP();
|
||||
void replyWithCustomCode();
|
||||
};
|
||||
#endif
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user