From 67d98d244f6fa27116de848ff7a2d0ce7a8f8976 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Thu, 26 Dec 2019 15:06:20 +0100 Subject: [PATCH 1/3] PROGMEM footprint cleanup for responseCodeToString Doing returns with String/FlashStringHelper conversion for every case means that the code for doing that is duplicated, which is wasteful. doing it only once saves about 250 bytes (50%) of code size. --- .../src/ESP8266WebServer-impl.h | 177 +++++++++++++----- .../ESP8266WebServer/src/ESP8266WebServer.h | 2 +- 2 files changed, 133 insertions(+), 46 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index 395267cd53..840f5b9058 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -695,49 +695,136 @@ void ESP8266WebServerTemplate::_finalizeResponse() { } template -const String ESP8266WebServerTemplate::responseCodeToString(const int code) { - switch (code) { - case 100: return F("Continue"); - case 101: return F("Switching Protocols"); - case 200: return F("OK"); - case 201: return F("Created"); - case 202: return F("Accepted"); - case 203: return F("Non-Authoritative Information"); - case 204: return F("No Content"); - case 205: return F("Reset Content"); - case 206: return F("Partial Content"); - case 300: return F("Multiple Choices"); - case 301: return F("Moved Permanently"); - case 302: return F("Found"); - case 303: return F("See Other"); - case 304: return F("Not Modified"); - case 305: return F("Use Proxy"); - case 307: return F("Temporary Redirect"); - case 400: return F("Bad Request"); - case 401: return F("Unauthorized"); - case 402: return F("Payment Required"); - case 403: return F("Forbidden"); - case 404: return F("Not Found"); - case 405: return F("Method Not Allowed"); - case 406: return F("Not Acceptable"); - case 407: return F("Proxy Authentication Required"); - case 408: return F("Request Time-out"); - case 409: return F("Conflict"); - case 410: return F("Gone"); - case 411: return F("Length Required"); - case 412: return F("Precondition Failed"); - case 413: return F("Request Entity Too Large"); - case 414: return F("Request-URI Too Large"); - case 415: return F("Unsupported Media Type"); - case 416: return F("Requested range not satisfiable"); - case 417: return F("Expectation Failed"); - case 418: return F("I'm a teapot"); - case 500: return F("Internal Server Error"); - case 501: return F("Not Implemented"); - case 502: return F("Bad Gateway"); - case 503: return F("Service Unavailable"); - case 504: return F("Gateway Time-out"); - case 505: return F("HTTP Version not supported"); - default: return F(""); - } +String ESP8266WebServerTemplate::responseCodeToString(const int code) { + const __FlashStringHelper *r; + switch (code) + { + case 100: + r = F("Continue"); + break; + case 101: + r = F("Switching Protocols"); + break; + case 200: + r = F("OK"); + break; + case 201: + r = F("Created"); + break; + case 202: + r = F("Accepted"); + break; + case 203: + r = F("Non-Authoritative Information"); + break; + case 204: + r = F("No Content"); + break; + case 205: + r = F("Reset Content"); + break; + case 206: + r = F("Partial Content"); + break; + case 300: + r = F("Multiple Choices"); + break; + case 301: + r = F("Moved Permanently"); + break; + case 302: + r = F("Found"); + break; + case 303: + r = F("See Other"); + break; + case 304: + r = F("Not Modified"); + break; + case 305: + r = F("Use Proxy"); + break; + case 307: + r = F("Temporary Redirect"); + break; + case 400: + r = F("Bad Request"); + break; + case 401: + r = F("Unauthorized"); + break; + case 402: + r = F("Payment Required"); + break; + case 403: + r = F("Forbidden"); + break; + case 404: + r = F("Not Found"); + break; + case 405: + r = F("Method Not Allowed"); + break; + case 406: + r = F("Not Acceptable"); + break; + case 407: + r = F("Proxy Authentication Required"); + break; + case 408: + r = F("Request Timeout"); + break; + case 409: + r = F("Conflict"); + break; + case 410: + r = F("Gone"); + break; + case 411: + r = F("Length Required"); + break; + case 412: + r = F("Precondition Failed"); + break; + case 413: + r = F("Request Entity Too Large"); + break; + case 414: + r = F("URI Too Long"); + break; + case 415: + r = F("Unsupported Media Type"); + break; + case 416: + r = F("Range not satisfiable"); + break; + case 417: + r = F("Expectation Failed"); + break; + case 418: + r = F("I'm a teapot"); + break; + case 500: + r = F("Internal Server Error"); + break; + case 501: + r = F("Not Implemented"); + break; + case 502: + r = F("Bad Gateway"); + break; + case 503: + r = F("Service Unavailable"); + break; + case 504: + r = F("Gateway Timeout"); + break; + case 505: + r = F("HTTP Version not supported"); + break; + default: + r = F(""); + break; + } + return String(r); } diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index ae03812405..2366ea93af 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -169,7 +169,7 @@ class ESP8266WebServerTemplate return contentLength; } - static const String responseCodeToString(const int code); + static String responseCodeToString(const int code); protected: void _addRequestHandler(RequestHandlerType* handler); From 89e8700f3b4b69851d8fa801808683a5946422fe Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Thu, 26 Dec 2019 21:54:59 +0100 Subject: [PATCH 2/3] Remove "I'm a teapot" error code --- libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index 840f5b9058..c7e44f3dca 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -801,9 +801,6 @@ String ESP8266WebServerTemplate::responseCodeToString(const int code case 417: r = F("Expectation Failed"); break; - case 418: - r = F("I'm a teapot"); - break; case 500: r = F("Internal Server Error"); break; From c0942d05d5eb6539690c4de78e8b6056ba493d46 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Fri, 27 Dec 2019 22:21:34 +0100 Subject: [PATCH 3/3] Add inline code comment to explain rationale --- libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index c7e44f3dca..440d9d9bbd 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -696,6 +696,9 @@ void ESP8266WebServerTemplate::_finalizeResponse() { template String ESP8266WebServerTemplate::responseCodeToString(const int code) { + // By first determining the pointer to the flash stored string in the switch + // statement and then doing String(FlashStringHelper) return reduces the total code + // size of this function by over 50%. const __FlashStringHelper *r; switch (code) { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy