Skip to content

Commit ff651e6

Browse files
author
Me No Dev
committed
update examples, keep setContentLength and add bool _chunked
1 parent f607b6a commit ff651e6

File tree

4 files changed

+29
-20
lines changed

4 files changed

+29
-20
lines changed

libraries/ESP8266WebServer/examples/SimpleAuthentification/SimpleAuthentification.ino

+14-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ESP8266WebServer server(80);
1010
//Check if header is present and correct
1111
bool is_authentified(){
1212
Serial.println("Enter is_authentified");
13-
if (server.hasHeader("Cookie")){
13+
if (server.hasHeader("Cookie")){
1414
Serial.print("Found cookie: ");
1515
String cookie = server.header("Cookie");
1616
Serial.println(cookie);
@@ -20,27 +20,31 @@ bool is_authentified(){
2020
}
2121
}
2222
Serial.println("Authentification Failed");
23-
return false;
23+
return false;
2424
}
2525

2626
//login page, also called for disconnect
2727
void handleLogin(){
2828
String msg;
29-
if (server.hasHeader("Cookie")){
29+
if (server.hasHeader("Cookie")){
3030
Serial.print("Found cookie: ");
3131
String cookie = server.header("Cookie");
3232
Serial.println(cookie);
3333
}
3434
if (server.hasArg("DISCONNECT")){
3535
Serial.println("Disconnection");
36-
String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=0\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
37-
server.sendContent(header);
36+
server.sendHeader("Location","/login");
37+
server.sendHeader("Cache-Control","no-cache");
38+
server.sendHeader("Set-Cookie","ESPSESSIONID=1");
39+
server.send(301);
3840
return;
3941
}
4042
if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")){
4143
if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin" ){
42-
String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=1\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
43-
server.sendContent(header);
44+
server.sendHeader("Location","/");
45+
server.sendHeader("Cache-Control","no-cache");
46+
server.sendHeader("Set-Cookie","ESPSESSIONID=1");
47+
server.send(301);
4448
Serial.println("Log in Successful");
4549
return;
4650
}
@@ -60,8 +64,9 @@ void handleRoot(){
6064
Serial.println("Enter handleRoot");
6165
String header;
6266
if (!is_authentified()){
63-
String header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
64-
server.sendContent(header);
67+
server.sendHeader("Location","/login");
68+
server.sendHeader("Cache-Control","no-cache");
69+
server.send(301);
6570
return;
6671
}
6772
String content = "<html><body><H2>hello, you successfully connected to esp8266!</H2><br>";

libraries/ESP8266WebServer/examples/WebUpdate/WebUpdate.ino

+3-5
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,10 @@ void setup(void){
2424
MDNS.begin(host);
2525
server.on("/", HTTP_GET, [](){
2626
server.sendHeader("Connection", "close");
27-
server.sendHeader("Access-Control-Allow-Origin", "*");
2827
server.send(200, "text/html", serverIndex);
2928
});
3029
server.on("/update", HTTP_POST, [](){
3130
server.sendHeader("Connection", "close");
32-
server.sendHeader("Access-Control-Allow-Origin", "*");
3331
server.send(200, "text/plain", (Update.hasError())?"FAIL":"OK");
3432
ESP.restart();
3533
},[](){
@@ -58,14 +56,14 @@ void setup(void){
5856
});
5957
server.begin();
6058
MDNS.addService("http", "tcp", 80);
61-
59+
6260
Serial.printf("Ready! Open http://%s.local in your browser\n", host);
6361
} else {
6462
Serial.println("WiFi Failed");
6563
}
6664
}
67-
65+
6866
void loop(void){
6967
server.handleClient();
7068
delay(1);
71-
}
69+
}

libraries/ESP8266WebServer/src/ESP8266WebServer.cpp

+11-6
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ ESP8266WebServer::ESP8266WebServer(IPAddress addr, int port)
5050
, _headerKeysCount(0)
5151
, _currentHeaders(0)
5252
, _contentLength(0)
53+
, _chunked(false)
5354
{
5455
}
5556

@@ -65,6 +66,7 @@ ESP8266WebServer::ESP8266WebServer(int port)
6566
, _headerKeysCount(0)
6667
, _currentHeaders(0)
6768
, _contentLength(0)
69+
, _chunked(false)
6870
{
6971
}
7072

@@ -257,13 +259,15 @@ void ESP8266WebServer::_prepareHeader(String& response, int code, const char* co
257259
if (!content_type)
258260
content_type = "text/html";
259261

262+
_chunked = false;
260263
sendHeader("Content-Type", content_type, true);
261264
if (_contentLength == CONTENT_LENGTH_NOT_SET) {
262265
sendHeader("Content-Length", String(contentLength));
263266
} else if (_contentLength != CONTENT_LENGTH_UNKNOWN) {
264267
sendHeader("Content-Length", String(_contentLength));
265268
} else if(_contentLength == CONTENT_LENGTH_UNKNOWN && _currentVersion){ //HTTP/1.1 or above client
266269
//let's do chunked
270+
_chunked = true;
267271
sendHeader("Accept-Ranges","none");
268272
sendHeader("Transfer-Encoding","chunked");
269273
}
@@ -276,8 +280,9 @@ void ESP8266WebServer::_prepareHeader(String& response, int code, const char* co
276280

277281
void ESP8266WebServer::send(int code, const char* content_type, const String& content) {
278282
String header;
279-
if(content.length() == 0 && _contentLength == CONTENT_LENGTH_NOT_SET)
280-
_contentLength = CONTENT_LENGTH_UNKNOWN;
283+
// Can we asume the following?
284+
//if(code == 200 && content.length() == 0 && _contentLength == CONTENT_LENGTH_NOT_SET)
285+
// _contentLength = CONTENT_LENGTH_UNKNOWN;
281286
_prepareHeader(header, code, content_type, content.length());
282287
_currentClient.write(header.c_str(), header.length());
283288
if(content.length())
@@ -319,7 +324,7 @@ void ESP8266WebServer::send(int code, const String& content_type, const String&
319324
void ESP8266WebServer::sendContent(const String& content) {
320325
const char * footer = "\r\n";
321326
size_t len = content.length();
322-
if(_contentLength == CONTENT_LENGTH_UNKNOWN && _currentVersion) {
327+
if(_chunked) {
323328
char * chunkSize = (char *)malloc(11);
324329
if(chunkSize){
325330
sprintf(chunkSize, "%x%s", len, footer);
@@ -328,7 +333,7 @@ void ESP8266WebServer::sendContent(const String& content) {
328333
}
329334
}
330335
_currentClient.write(content.c_str(), len);
331-
if(_contentLength == CONTENT_LENGTH_UNKNOWN && _currentVersion){
336+
if(_chunked){
332337
_currentClient.write(footer, 2);
333338
}
334339
}
@@ -339,7 +344,7 @@ void ESP8266WebServer::sendContent_P(PGM_P content) {
339344

340345
void ESP8266WebServer::sendContent_P(PGM_P content, size_t size) {
341346
const char * footer = "\r\n";
342-
if(_contentLength == CONTENT_LENGTH_UNKNOWN && _currentVersion) {
347+
if(_chunked) {
343348
char * chunkSize = (char *)malloc(11);
344349
if(chunkSize){
345350
sprintf(chunkSize, "%x%s", size, footer);
@@ -348,7 +353,7 @@ void ESP8266WebServer::sendContent_P(PGM_P content, size_t size) {
348353
}
349354
}
350355
_currentClient.write_P(content, size);
351-
if(_contentLength == CONTENT_LENGTH_UNKNOWN && _currentVersion){
356+
if(_chunked){
352357
_currentClient.write(footer, 2);
353358
}
354359
}

libraries/ESP8266WebServer/src/ESP8266WebServer.h

+1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ template<typename T> size_t streamFile(T &file, const String& contentType){
176176
String _responseHeaders;
177177

178178
String _hostHeader;
179+
bool _chunked;
179180

180181
};
181182

0 commit comments

Comments
 (0)