Skip to content

Commit 01a992f

Browse files
Rewrite ESP8266WebServer using templates
Refactor the three versions of ESP8266WebServer and ServerSecure to a single instance of a templated class. Use typedefs to enable old, non-templated names to be used (no user changes required).
1 parent 672c3f8 commit 01a992f

11 files changed

+842
-1169
lines changed

libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h

Lines changed: 755 additions & 0 deletions
Large diffs are not rendered by default.

libraries/ESP8266WebServer/src/ESP8266WebServer.cpp

Lines changed: 0 additions & 663 deletions
This file was deleted.

libraries/ESP8266WebServer/src/ESP8266WebServer.h

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ enum HTTPAuthMethod { BASIC_AUTH, DIGEST_AUTH };
4848
#define CONTENT_LENGTH_UNKNOWN ((size_t) -1)
4949
#define CONTENT_LENGTH_NOT_SET ((size_t) -2)
5050

51-
class ESP8266WebServer;
51+
template<class ServerClass, class ClientClass> class ESP8266WebServerTemplate;
5252

5353
typedef struct {
5454
HTTPUploadStatus status;
@@ -66,18 +66,19 @@ namespace fs {
6666
class FS;
6767
}
6868

69-
class ESP8266WebServer
69+
template<class ServerClass, class ClientClass>
70+
class ESP8266WebServerTemplate
7071
{
7172
public:
72-
ESP8266WebServer(IPAddress addr, int port = 80);
73-
ESP8266WebServer(int port = 80);
74-
virtual ~ESP8266WebServer();
73+
ESP8266WebServerTemplate(IPAddress addr, int port = 80);
74+
ESP8266WebServerTemplate(int port = 80);
75+
~ESP8266WebServerTemplate();
7576

76-
virtual void begin();
77-
virtual void begin(uint16_t port);
78-
virtual void handleClient();
77+
void begin();
78+
void begin(uint16_t port);
79+
void handleClient();
7980

80-
virtual void close();
81+
void close();
8182
void stop();
8283

8384
bool authenticate(const char * username, const char * password);
@@ -87,14 +88,14 @@ class ESP8266WebServer
8788
void on(const String &uri, THandlerFunction handler);
8889
void on(const String &uri, HTTPMethod method, THandlerFunction fn);
8990
void on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
90-
void addHandler(RequestHandler* handler);
91+
void addHandler(RequestHandler<ServerClass, ClientClass>* handler);
9192
void serveStatic(const char* uri, fs::FS& fs, const char* path, const char* cache_header = NULL );
9293
void onNotFound(THandlerFunction fn); //called when handler is not assigned
9394
void onFileUpload(THandlerFunction fn); //handle file uploads
9495

9596
String uri() { return _currentUri; }
9697
HTTPMethod method() { return _currentMethod; }
97-
virtual WiFiClient client() { return _currentClient; }
98+
ClientClass client() { return _currentClient; }
9899
HTTPUpload& upload() { return *_currentUpload; }
99100

100101
String arg(String name); // get request argument value by name
@@ -134,20 +135,26 @@ class ESP8266WebServer
134135
_streamFileCore(file.size(), file.name(), contentType);
135136
return _currentClient.write(file);
136137
}
137-
138+
139+
// AXTLS and BearSSL only
140+
void setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) { }
141+
void setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) { }
142+
// BearSSL only
143+
void setBufferSizes(int recv, int xmit) { };
144+
void setRSACert(const BearSSLX509List *chain, const BearSSLPrivateKey *sk) { };
145+
void setECCert(const BearSSLX509List *chain, unsigned cert_issuer_key_type, const BearSSLPrivateKey *sk) { };
146+
138147
protected:
139-
virtual size_t _currentClientWrite(const char* b, size_t l) { return _currentClient.write( b, l ); }
140-
virtual size_t _currentClientWrite_P(PGM_P b, size_t l) { return _currentClient.write_P( b, l ); }
141-
void _addRequestHandler(RequestHandler* handler);
148+
void _addRequestHandler(RequestHandler<ServerClass, ClientClass>* handler);
142149
void _handleRequest();
143150
void _finalizeResponse();
144-
bool _parseRequest(WiFiClient& client);
151+
bool _parseRequest(ClientClass& client);
145152
void _parseArguments(String data);
146153
static String _responseCodeToString(int code);
147-
bool _parseForm(WiFiClient& client, String boundary, uint32_t len);
154+
bool _parseForm(ClientClass& client, String boundary, uint32_t len);
148155
bool _parseFormUploadAborted();
149156
void _uploadWriteByte(uint8_t b);
150-
uint8_t _uploadReadByte(WiFiClient& client);
157+
uint8_t _uploadReadByte(ClientClass& client);
151158
void _prepareHeader(String& response, int code, const char* content_type, size_t contentLength);
152159
bool _collectHeader(const char* headerName, const char* headerValue);
153160

@@ -162,18 +169,18 @@ class ESP8266WebServer
162169
String value;
163170
};
164171

165-
WiFiServer _server;
172+
ServerClass _server;
166173

167-
WiFiClient _currentClient;
174+
ClientClass _currentClient;
168175
HTTPMethod _currentMethod;
169176
String _currentUri;
170177
uint8_t _currentVersion;
171178
HTTPClientStatus _currentStatus;
172179
unsigned long _statusChange;
173180

174-
RequestHandler* _currentHandler;
175-
RequestHandler* _firstHandler;
176-
RequestHandler* _lastHandler;
181+
RequestHandler<ServerClass, ClientClass>* _currentHandler;
182+
RequestHandler<ServerClass, ClientClass>* _firstHandler;
183+
RequestHandler<ServerClass, ClientClass>* _lastHandler;
177184
THandlerFunction _notFoundHandler;
178185
THandlerFunction _fileUploadHandler;
179186

@@ -195,5 +202,9 @@ class ESP8266WebServer
195202

196203
};
197204

205+
#include "ESP8266WebServer-impl.h"
206+
#include "Parsing-impl.h"
207+
208+
typedef ESP8266WebServerTemplate<WiFiServer, WiFiClient> ESP8266WebServer;
198209

199210
#endif //ESP8266WEBSERVER_H

libraries/ESP8266WebServer/src/ESP8266WebServerSecure.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,13 @@
1919
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2020
*/
2121

22-
#include "ESP8266WebServerSecureAxTLS.h"
23-
#include "ESP8266WebServerSecureBearSSL.h"
22+
#include "ESP8266WebServer.h"
23+
24+
namespace axTLS {
25+
typedef ESP8266WebServerTemplate<WiFiServerSecure, WiFiClientSecure> ESP8266WebServerSecure;
26+
};
27+
28+
namespace BearSSL {
29+
typedef ESP8266WebServerTemplate<WiFiServerSecure, WiFiClientSecure> ESP8266WebServerSecure;
30+
};
31+

libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.cpp

Lines changed: 0 additions & 149 deletions
This file was deleted.

libraries/ESP8266WebServer/src/ESP8266WebServerSecureAxTLS.h

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)