mikroSDK Reference Manual
http_server.h
Go to the documentation of this file.
1
31#ifndef _HTTP_SERVER_H
32#define _HTTP_SERVER_H
33
34//Dependencies
35#include "os_port.h"
36#include "core/socket.h"
38#include "http/http_common.h"
39
40//HTTP server support
41#ifndef HTTP_SERVER_SUPPORT
42 #define HTTP_SERVER_SUPPORT ENABLED
43#elif (HTTP_SERVER_SUPPORT != ENABLED && HTTP_SERVER_SUPPORT != DISABLED)
44 #error HTTP_SERVER_SUPPORT parameter is not valid
45#endif
46
47//Support for persistent connections
48#ifndef HTTP_SERVER_PERSISTENT_CONN_SUPPORT
49 #define HTTP_SERVER_PERSISTENT_CONN_SUPPORT DISABLED
50#elif (HTTP_SERVER_PERSISTENT_CONN_SUPPORT != ENABLED && HTTP_SERVER_PERSISTENT_CONN_SUPPORT != DISABLED)
51 #error HTTP_SERVER_PERSISTENT_CONN_SUPPORT parameter is not valid
52#endif
53
54//File system support
55#ifndef HTTP_SERVER_FS_SUPPORT
56 #define HTTP_SERVER_FS_SUPPORT DISABLED
57#elif (HTTP_SERVER_FS_SUPPORT != ENABLED && HTTP_SERVER_FS_SUPPORT != DISABLED)
58 #error HTTP_SERVER_FS_SUPPORT parameter is not valid
59#endif
60
61//Server Side Includes support
62#ifndef HTTP_SERVER_SSI_SUPPORT
63 #define HTTP_SERVER_SSI_SUPPORT DISABLED
64#elif (HTTP_SERVER_SSI_SUPPORT != ENABLED && HTTP_SERVER_SSI_SUPPORT != DISABLED)
65 #error HTTP_SERVER_SSI_SUPPORT parameter is not valid
66#endif
67
68//HTTP over TLS
69#ifndef HTTP_SERVER_TLS_SUPPORT
70 #define HTTP_SERVER_TLS_SUPPORT DISABLED
71#elif (HTTP_SERVER_TLS_SUPPORT != ENABLED && HTTP_SERVER_TLS_SUPPORT != DISABLED)
72 #error HTTP_SERVER_TLS_SUPPORT parameter is not valid
73#endif
74
75//HTTP Strict Transport Security support
76#ifndef HTTP_SERVER_HSTS_SUPPORT
77 #define HTTP_SERVER_HSTS_SUPPORT DISABLED
78#elif (HTTP_SERVER_HSTS_SUPPORT != ENABLED && HTTP_SERVER_HSTS_SUPPORT != DISABLED)
79 #error HTTP_SERVER_HSTS_SUPPORT parameter is not valid
80#endif
81
82//Basic access authentication support
83#ifndef HTTP_SERVER_BASIC_AUTH_SUPPORT
84 #define HTTP_SERVER_BASIC_AUTH_SUPPORT DISABLED
85#elif (HTTP_SERVER_BASIC_AUTH_SUPPORT != ENABLED && HTTP_SERVER_BASIC_AUTH_SUPPORT != DISABLED)
86 #error HTTP_SERVER_BASIC_AUTH_SUPPORT parameter is not valid
87#endif
88
89//Digest access authentication support
90#ifndef HTTP_SERVER_DIGEST_AUTH_SUPPORT
91 #define HTTP_SERVER_DIGEST_AUTH_SUPPORT DISABLED
92#elif (HTTP_SERVER_DIGEST_AUTH_SUPPORT != ENABLED && HTTP_SERVER_DIGEST_AUTH_SUPPORT != DISABLED)
93 #error HTTP_SERVER_DIGEST_AUTH_SUPPORT parameter is not valid
94#endif
95
96//WebSocket support
97#ifndef HTTP_SERVER_WEB_SOCKET_SUPPORT
98 #define HTTP_SERVER_WEB_SOCKET_SUPPORT DISABLED
99#elif (HTTP_SERVER_WEB_SOCKET_SUPPORT != ENABLED && HTTP_SERVER_WEB_SOCKET_SUPPORT != DISABLED)
100 #error HTTP_SERVER_WEB_SOCKET_SUPPORT parameter is not valid
101#endif
102
103//Gzip content type support
104#ifndef HTTP_SERVER_GZIP_TYPE_SUPPORT
105 #define HTTP_SERVER_GZIP_TYPE_SUPPORT DISABLED
106#elif (HTTP_SERVER_GZIP_TYPE_SUPPORT != ENABLED && HTTP_SERVER_GZIP_TYPE_SUPPORT != DISABLED)
107 #error HTTP_SERVER_GZIP_TYPE_SUPPORT parameter is not valid
108#endif
109
110//Multipart content type support
111#ifndef HTTP_SERVER_MULTIPART_TYPE_SUPPORT
112 #define HTTP_SERVER_MULTIPART_TYPE_SUPPORT DISABLED
113#elif (HTTP_SERVER_MULTIPART_TYPE_SUPPORT != ENABLED && HTTP_SERVER_MULTIPART_TYPE_SUPPORT != DISABLED)
114 #error HTTP_SERVER_MULTIPART_TYPE_SUPPORT parameter is not valid
115#endif
116
117//Cookie support
118#ifndef HTTP_SERVER_COOKIE_SUPPORT
119 #define HTTP_SERVER_COOKIE_SUPPORT DISABLED
120#elif (HTTP_SERVER_COOKIE_SUPPORT != ENABLED && HTTP_SERVER_COOKIE_SUPPORT != DISABLED)
121 #error HTTP_SERVER_COOKIE_SUPPORT parameter is not valid
122#endif
123
124//Stack size required to run the HTTP server
125#ifndef HTTP_SERVER_STACK_SIZE
126 #define HTTP_SERVER_STACK_SIZE 650
127#elif (HTTP_SERVER_STACK_SIZE < 1)
128 #error HTTP_SERVER_STACK_SIZE parameter is not valid
129#endif
130
131//Priority at which the HTTP server should run
132#ifndef HTTP_SERVER_PRIORITY
133 #define HTTP_SERVER_PRIORITY OS_TASK_PRIORITY_NORMAL
134#endif
135
136//HTTP connection timeout
137#ifndef HTTP_SERVER_TIMEOUT
138 #define HTTP_SERVER_TIMEOUT 10000
139#elif (HTTP_SERVER_TIMEOUT < 1000)
140 #error HTTP_SERVER_TIMEOUT parameter is not valid
141#endif
142
143//Maximum time the server will wait for a subsequent
144//request before closing the connection
145#ifndef HTTP_SERVER_IDLE_TIMEOUT
146 #define HTTP_SERVER_IDLE_TIMEOUT 5000
147#elif (HTTP_SERVER_IDLE_TIMEOUT < 1000)
148 #error HTTP_SERVER_IDLE_TIMEOUT parameter is not valid
149#endif
150
151//Maximum length of the pending connection queue
152#ifndef HTTP_SERVER_BACKLOG
153 #define HTTP_SERVER_BACKLOG 4
154#elif (HTTP_SERVER_BACKLOG < 1)
155 #error HTTP_SERVER_BACKLOG parameter is not valid
156#endif
157
158//Maximum number of requests per connection
159#ifndef HTTP_SERVER_MAX_REQUESTS
160 #define HTTP_SERVER_MAX_REQUESTS 1000
161#elif (HTTP_SERVER_MAX_REQUESTS < 1)
162 #error HTTP_SERVER_MAX_REQUESTS parameter is not valid
163#endif
164
165//Size of buffer used for input/output operations
166#ifndef HTTP_SERVER_BUFFER_SIZE
167 #define HTTP_SERVER_BUFFER_SIZE 1024
168#elif (HTTP_SERVER_BUFFER_SIZE < 128)
169 #error HTTP_SERVER_BUFFER_SIZE parameter is not valid
170#endif
171
172//Maximum size of root directory
173#ifndef HTTP_SERVER_ROOT_DIR_MAX_LEN
174 #define HTTP_SERVER_ROOT_DIR_MAX_LEN 31
175#elif (HTTP_SERVER_ROOT_DIR_MAX_LEN < 7)
176 #error HTTP_SERVER_ROOT_DIR_MAX_LEN parameter is not valid
177#endif
178
179//Maximum size of default index file
180#ifndef HTTP_SERVER_DEFAULT_DOC_MAX_LEN
181 #define HTTP_SERVER_DEFAULT_DOC_MAX_LEN 31
182#elif (HTTP_SERVER_DEFAULT_DOC_MAX_LEN < 7)
183 #error HTTP_SERVER_DEFAULT_DOC_MAX_LEN parameter is not valid
184#endif
185
186//Maximum length of HTTP method
187#ifndef HTTP_SERVER_METHOD_MAX_LEN
188 #define HTTP_SERVER_METHOD_MAX_LEN 7
189#elif (HTTP_SERVER_METHOD_MAX_LEN < 1)
190 #error HTTP_SERVER_METHOD_MAX_LEN parameter is not valid
191#endif
192
193//Maximum length of URI
194#ifndef HTTP_SERVER_URI_MAX_LEN
195 #define HTTP_SERVER_URI_MAX_LEN 255
196#elif (HTTP_SERVER_URI_MAX_LEN < 31)
197 #error HTTP_SERVER_URI_MAX_LEN parameter is not valid
198#endif
199
200//Maximum length of query strings
201#ifndef HTTP_SERVER_QUERY_STRING_MAX_LEN
202 #define HTTP_SERVER_QUERY_STRING_MAX_LEN 255
203#elif (HTTP_SERVER_QUERY_STRING_MAX_LEN < 7)
204 #error HTTP_SERVER_QUERY_STRING_MAX_LEN parameter is not valid
205#endif
206
207//Maximum host name length
208#ifndef HTTP_SERVER_HOST_MAX_LEN
209 #define HTTP_SERVER_HOST_MAX_LEN 31
210#elif (HTTP_SERVER_HOST_MAX_LEN < 7)
211 #error HTTP_SERVER_HOST_MAX_LEN parameter is not valid
212#endif
213
214//Maximum user name length
215#ifndef HTTP_SERVER_USERNAME_MAX_LEN
216 #define HTTP_SERVER_USERNAME_MAX_LEN 31
217#elif (HTTP_SERVER_USERNAME_MAX_LEN < 7)
218 #error HTTP_SERVER_USERNAME_MAX_LEN parameter is not valid
219#endif
220
221//Maximum length of CGI parameters
222#ifndef HTTP_SERVER_CGI_PARAM_MAX_LEN
223 #define HTTP_SERVER_CGI_PARAM_MAX_LEN 31
224#elif (HTTP_SERVER_CGI_PARAM_MAX_LEN < 7)
225 #error HTTP_SERVER_CGI_PARAM_MAX_LEN parameter is not valid
226#endif
227
228//Maximum recursion limit
229#ifndef HTTP_SERVER_SSI_MAX_RECURSION
230 #define HTTP_SERVER_SSI_MAX_RECURSION 3
231#elif (HTTP_SERVER_SSI_MAX_RECURSION < 1 || HTTP_SERVER_SSI_MAX_RECURSION > 8)
232 #error HTTP_SERVER_SSI_MAX_RECURSION parameter is not valid
233#endif
234
235//Maximum age for static resources
236#ifndef HTTP_SERVER_MAX_AGE
237 #define HTTP_SERVER_MAX_AGE 0
238#elif (HTTP_SERVER_MAX_AGE < 0)
239 #error HTTP_SERVER_MAX_AGE parameter is not valid
240#endif
241
242//Nonce cache size
243#ifndef HTTP_SERVER_NONCE_CACHE_SIZE
244 #define HTTP_SERVER_NONCE_CACHE_SIZE 8
245#elif (HTTP_SERVER_NONCE_CACHE_SIZE < 1)
246 #error HTTP_SERVER_NONCE_CACHE_SIZE parameter is not valid
247#endif
248
249//Lifetime of nonces
250#ifndef HTTP_SERVER_NONCE_LIFETIME
251 #define HTTP_SERVER_NONCE_LIFETIME 60000
252#elif (HTTP_SERVER_NONCE_LIFETIME < 1000)
253 #error HTTP_SERVER_NONCE_LIFETIME parameter is not valid
254#endif
255
256//Nonce size
257#ifndef HTTP_SERVER_NONCE_SIZE
258 #define HTTP_SERVER_NONCE_SIZE 16
259#elif (HTTP_SERVER_NONCE_SIZE < 1)
260 #error HTTP_SERVER_NONCE_SIZE parameter is not valid
261#endif
262
263//Maximum length for boundary string
264#ifndef HTTP_SERVER_BOUNDARY_MAX_LEN
265 #define HTTP_SERVER_BOUNDARY_MAX_LEN 70
266#elif (HTTP_SERVER_BOUNDARY_MAX_LEN < 1)
267 #error HTTP_SERVER_BOUNDARY_MAX_LEN parameter is not valid
268#endif
269
270//Maximum length for cookies
271#ifndef HTTP_SERVER_COOKIE_MAX_LEN
272 #define HTTP_SERVER_COOKIE_MAX_LEN 256
273#elif (HTTP_SERVER_COOKIE_MAX_LEN < 1)
274 #error HTTP_SERVER_COOKIE_MAX_LEN parameter is not valid
275#endif
276
277//Application specific context
278#ifndef HTTP_SERVER_PRIVATE_CONTEXT
279 #define HTTP_SERVER_PRIVATE_CONTEXT
280#endif
281
282//File system support?
283#if (HTTP_SERVER_FS_SUPPORT == ENABLED)
284 #include "fs_port.h"
285#else
286 #include "resource_manager.h"
287#endif
288
289//TLS supported?
290#if (HTTP_SERVER_TLS_SUPPORT == ENABLED)
291 #include "core/crypto.h"
292 #include "tls.h"
293 #include "tls_ticket.h"
294#endif
295
296//Basic authentication supported?
297#if (HTTP_SERVER_BASIC_AUTH_SUPPORT == ENABLED)
298 #include "core/crypto.h"
299 #include "encoding/base64.h"
300#endif
301
302//Digest authentication supported?
303#if (HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
304 #include "core/crypto.h"
305 #include "hash/md5.h"
306#endif
307
308//WebSocket supported?
309#if (HTTP_SERVER_WEB_SOCKET_SUPPORT == ENABLED)
310 #include "core/crypto.h"
311 #include "encoding/base64.h"
312#endif
313
314//HTTP port number
315#define HTTP_PORT 80
316//HTTPS port number (HTTP over TLS)
317#define HTTPS_PORT 443
318
319//Forward declaration of HttpServerContext structure
320struct _HttpServerContext;
321#define HttpServerContext struct _HttpServerContext
322
323//Forward declaration of HttpConnection structure
324struct _HttpConnection;
325#define HttpConnection struct _HttpConnection
326
327//C++ guard
328#ifdef __cplusplus
329extern "C" {
330#endif
331
332
337typedef enum
338{
339 HTTP_ACCESS_DENIED = 0,
340 HTTP_ACCESS_ALLOWED = 1,
341 HTTP_ACCESS_BASIC_AUTH_REQUIRED = 2,
342 HTTP_ACCESS_DIGEST_AUTH_REQUIRED = 3
344
345
350typedef enum
351{
352 HTTP_CONN_STATE_IDLE = 0,
353 HTTP_CONN_STATE_REQ_LINE = 1,
354 HTTP_CONN_STATE_REQ_HEADER = 2,
355 HTTP_CONN_STATE_REQ_BODY = 3,
356 HTTP_CONN_STATE_RESP_HEADER = 4,
357 HTTP_CONN_STATE_RESP_BODY = 5,
358 HTTP_CONN_STATE_SHUTDOWN = 6,
359 HTTP_CONN_STATE_CLOSE = 7
361
362
363//The HTTP_FLAG_BREAK macro causes the httpReadStream() function to stop
364//reading data whenever the specified break character is encountered
365#define HTTP_FLAG_BREAK(c) (HTTP_FLAG_BREAK_CHAR | LSB(c))
366
367
368//TLS supported?
369#if (HTTP_SERVER_TLS_SUPPORT == ENABLED)
370
375typedef error_t (*TlsInitCallback)(HttpConnection *connection,
376 TlsContext *tlsContext);
377
378#endif
379
380
385typedef error_t (*HttpRandCallback)(uint8_t *data, size_t length);
386
387
392typedef HttpAccessStatus (*HttpAuthCallback)(HttpConnection *connection,
393 const char_t *user, const char_t *uri);
394
395
400typedef error_t (*HttpCgiCallback)(HttpConnection *connection,
401 const char_t *param);
402
403
408typedef error_t (*HttpRequestCallback)(HttpConnection *connection,
409 const char_t *uri);
410
411
416typedef error_t (*HttpUriNotFoundCallback)(HttpConnection *connection,
417 const char_t *uri);
418
419
424typedef struct
425{
426 uint_t value;
427 const char_t message[28];
429
430
435typedef struct
436{
437 bool_t found;
439 char_t user[HTTP_SERVER_USERNAME_MAX_LEN + 1];
440#if (HTTP_SERVER_BASIC_AUTH_SUPPORT == ENABLED)
441 const char_t *password;
442#endif
443#if (HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
444 const char_t *realm;
445 const char_t *nonce;
446 const char_t *uri;
447 const char_t *qop;
448 const char_t *nc;
449 const char_t *cnonce;
450 const char_t *response;
451 const char_t *opaque;
452#endif
454
455
460typedef struct
461{
463#if (HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
464 bool_t stale;
465#endif
467
468
473typedef struct
474{
475 uint_t version;
476 char_t method[HTTP_SERVER_METHOD_MAX_LEN + 1];
477 char_t uri[HTTP_SERVER_URI_MAX_LEN + 1];
478 char_t queryString[HTTP_SERVER_QUERY_STRING_MAX_LEN + 1];
479 char_t host[HTTP_SERVER_HOST_MAX_LEN + 1];
480 bool_t keepAlive;
481 bool_t chunkedEncoding;
482 size_t contentLength;
483 size_t byteCount;
484 bool_t firstChunk;
485 bool_t lastChunk;
486#if (HTTP_SERVER_BASIC_AUTH_SUPPORT == ENABLED || HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
488#endif
489#if (HTTP_SERVER_WEB_SOCKET_SUPPORT == ENABLED)
490 bool_t upgradeWebSocket;
491 bool_t connectionUpgrade;
492 char_t clientKey[WEB_SOCKET_CLIENT_KEY_SIZE + 1];
493#endif
494#if (HTTP_SERVER_GZIP_TYPE_SUPPORT == ENABLED)
495 bool_t acceptGzipEncoding;
496#endif
497#if (HTTP_SERVER_MULTIPART_TYPE_SUPPORT == ENABLED)
498 char_t boundary[HTTP_SERVER_BOUNDARY_MAX_LEN + 1];
500#endif
501#if (HTTP_SERVER_COOKIE_SUPPORT == ENABLED)
502 char_t cookie[HTTP_SERVER_COOKIE_MAX_LEN + 1];
503#endif
505
506
511typedef struct
512{
513 uint_t version;
514 uint_t statusCode;
515 bool_t keepAlive;
516 bool_t noCache;
517 uint_t maxAge;
518 const char_t *location;
519 const char_t *contentType;
520 bool_t chunkedEncoding;
521 size_t contentLength;
522 size_t byteCount;
523#if (HTTP_SERVER_BASIC_AUTH_SUPPORT == ENABLED || HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
525#endif
526#if (HTTP_SERVER_GZIP_TYPE_SUPPORT == ENABLED)
527 bool_t gzipEncoding;
528#endif
529#if (HTTP_SERVER_COOKIE_SUPPORT == ENABLED)
530 char_t setCookie[HTTP_SERVER_COOKIE_MAX_LEN + 1];
531#endif
533
534
539typedef struct
540{
541 NetInterface *interface;
542 uint16_t port;
544 uint_t backlog;
546 HttpConnection *connections;
547 char_t rootDirectory[HTTP_SERVER_ROOT_DIR_MAX_LEN + 1];
548 char_t defaultDocument[HTTP_SERVER_DEFAULT_DOC_MAX_LEN + 1];
549#if (HTTP_SERVER_TLS_SUPPORT == ENABLED)
550 bool_t useTls;
552#endif
553#if (HTTP_SERVER_BASIC_AUTH_SUPPORT == ENABLED || HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
556#endif
561
562
567typedef struct
568{
569 char_t nonce[HTTP_SERVER_NONCE_SIZE * 2 + 1];
570 uint32_t count;
573
574
580{
584#if (OS_STATIC_TASK_SUPPORT == ENABLED)
585 OsTaskTcb taskTcb;
586 OsStackType taskStack[HTTP_SERVER_STACK_SIZE];
587#endif
588 Socket *socket;
589 HttpConnection *connections;
590#if (HTTP_SERVER_TLS_SUPPORT == ENABLED && TLS_TICKET_SUPPORT == ENABLED)
591 TlsTicketContext tlsTicketContext;
592#endif
593#if (HTTP_SERVER_DIGEST_AUTH_SUPPORT == ENABLED)
595 HttpNonceCacheEntry nonceCache[HTTP_SERVER_NONCE_CACHE_SIZE];
596#endif
597};
598
599
609{
611 HttpServerContext *serverContext;
612 OsEvent startEvent;
613 bool_t running;
615#if (OS_STATIC_TASK_SUPPORT == ENABLED)
616 OsTaskTcb taskTcb;
617 OsStackType taskStack[HTTP_SERVER_STACK_SIZE];
618#endif
619 Socket *socket;
620#if (HTTP_SERVER_TLS_SUPPORT == ENABLED)
621 TlsContext *tlsContext;
622#endif
626 char_t cgiParam[HTTP_SERVER_CGI_PARAM_MAX_LEN + 1];
627 uint32_t dummy;
628 char_t buffer[HTTP_SERVER_BUFFER_SIZE];
629#if (NET_RTOS_SUPPORT == DISABLED)
631 systime_t timestamp;
632 size_t bufferPos;
633 size_t bufferLen;
634 uint8_t *bodyStart;
635 size_t bodyPos;
636 size_t bodyLen;
637#endif
638 HTTP_SERVER_PRIVATE_CONTEXT
639};
640
641
642//HTTP server related functions
643void httpServerGetDefaultSettings(HttpServerSettings *settings);
644error_t httpServerInit(HttpServerContext *context, const HttpServerSettings *settings);
645error_t httpServerStart(HttpServerContext *context);
646
647void httpListenerTask(void *param);
648void httpConnectionTask(void *param);
649
650error_t httpWriteHeader(HttpConnection *connection);
651
652error_t httpReadStream(HttpConnection *connection,
653 void *data, size_t size, size_t *received, uint_t flags);
654
655error_t httpWriteStream(HttpConnection *connection,
656 const void *data, size_t length);
657
658error_t httpCloseStream(HttpConnection *connection);
659
660error_t httpSendResponse(HttpConnection *connection, const char_t *uri);
661
662error_t httpSendErrorResponse(HttpConnection *connection,
663 uint_t statusCode, const char_t *message);
664
665error_t httpSendRedirectResponse(HttpConnection *connection,
666 uint_t statusCode, const char_t *uri);
667
668//HTTP authentication related functions
669bool_t httpCheckPassword(HttpConnection *connection,
670 const char_t *password, HttpAuthMode mode);
671
672//WebSocket related functions
673bool_t httpCheckWebSocketHandshake(HttpConnection *connection);
674WebSocket *httpUpgradeToWebSocket(HttpConnection *connection);
675
676//Miscellaneous functions
677error_t httpDecodePercentEncodedString(const char_t *input,
678 char_t *output, size_t outputSize);
679
680//C++ guard
681#ifdef __cplusplus
682}
683#endif
684
685#endif
error_t
Error codes.
Definition error.h:43
File system abstraction layer.
Definitions common to HTTP client and server.
HttpAuthMode
HTTP authentication schemes.
Definition http_common.h:72
error_t(* HttpUriNotFoundCallback)(HttpConnection *connection, const char_t *uri)
URI not found callback function.
Definition http_server.h:416
HttpAccessStatus
Access status.
Definition http_server.h:338
HttpConnState
HTTP connection states.
Definition http_server.h:351
error_t(* HttpCgiCallback)(HttpConnection *connection, const char_t *param)
CGI callback function.
Definition http_server.h:400
HttpAccessStatus(* HttpAuthCallback)(HttpConnection *connection, const char_t *user, const char_t *uri)
HTTP authentication callback function.
Definition http_server.h:392
error_t(* TlsInitCallback)(HttpConnection *connection, TlsContext *tlsContext)
TLS initialization callback function.
Definition http_server.h:375
error_t(* HttpRandCallback)(uint8_t *data, size_t length)
Random data generation callback function.
Definition http_server.h:385
error_t(* HttpRequestCallback)(HttpConnection *connection, const char_t *uri)
HTTP request callback function.
Definition http_server.h:408
RTOS abstraction layer.
uint_t OsMutex
Mutex object.
Definition os_port_none.h:118
uint_t OsEvent
Event object.
Definition os_port_none.h:104
uint_t OsSemaphore
Semaphore object.
Definition os_port_none.h:111
uint_t OsTaskId
Task identifier.
Definition os_port_none.h:97
uint32_t systime_t
System time.
Definition os_port_none.h:90
Embedded resource management.
Socket API.
Authenticate header.
Definition http_server.h:461
HttpAuthMode mode
Authentication scheme.
Definition http_server.h:462
bool_t stale
STALE flag.
Definition http_server.h:464
Authorization header.
Definition http_server.h:436
const char_t * uri
Digest URI.
Definition http_server.h:446
const char_t * nc
Nonce count.
Definition http_server.h:448
HttpAuthMode mode
Authentication scheme.
Definition http_server.h:438
bool_t found
The Authorization header has been found.
Definition http_server.h:437
const char_t * cnonce
Client nonce.
Definition http_server.h:449
const char_t * nonce
Server nonce.
Definition http_server.h:445
const char_t * password
Password.
Definition http_server.h:441
Nonce cache entry.
Definition http_server.h:568
systime_t timestamp
Time stamp to manage entry lifetime.
Definition http_server.h:571
uint32_t count
Nonce count.
Definition http_server.h:570
HTTP request.
Definition http_server.h:474
HttpAuthorizationHeader auth
Authorization header.
Definition http_server.h:487
uint_t version
HTTP version number.
Definition http_server.h:475
size_t boundaryLength
Boundary string length.
Definition http_server.h:499
HTTP response.
Definition http_server.h:512
uint_t version
HTTP version number.
Definition http_server.h:513
uint_t statusCode
HTTP status code.
Definition http_server.h:514
HttpAuthenticateHeader auth
Authenticate header.
Definition http_server.h:524
HTTP server settings.
Definition http_server.h:540
uint_t maxConnections
Maximum number of client connections.
Definition http_server.h:545
NetInterface * interface
Underlying network interface.
Definition http_server.h:541
HttpAuthCallback authCallback
HTTP authentication callback function.
Definition http_server.h:555
TlsInitCallback tlsInitCallback
TLS initialization callback function.
Definition http_server.h:551
uint_t backlog
Maximum length of the pending connection queue.
Definition http_server.h:544
bool_t useTls
Deprecated flag.
Definition http_server.h:550
HttpConnection * connections
Client connections.
Definition http_server.h:546
HttpCgiCallback cgiCallback
CGI callback function.
Definition http_server.h:557
uint16_t port
HTTP server port number.
Definition http_server.h:542
IpAddr ipAddr
HTTP server IP address.
Definition http_server.h:543
HttpRequestCallback requestCallback
HTTP request callback function.
Definition http_server.h:558
HttpUriNotFoundCallback uriNotFoundCallback
URI not found callback function.
Definition http_server.h:559
HttpRandCallback randCallback
Random data generation callback function.
Definition http_server.h:554
HTTP status code.
Definition http_server.h:425
IP network address.
Definition ip.h:72
HTTP connection.
Definition http_server.h:609
HttpServerSettings * settings
Reference to the HTTP server settings.
Definition http_server.h:610
Socket * socket
Socket.
Definition http_server.h:619
HttpConnState state
Connection state.
Definition http_server.h:630
OsTaskTcb taskTcb
Task control block.
Definition http_server.h:616
char_t cgiParam[HTTP_SERVER_CGI_PARAM_MAX_LEN+1]
CGI parameter.
Definition http_server.h:626
HttpRequest request
Incoming HTTP request header.
Definition http_server.h:623
OsStackType taskStack[HTTP_SERVER_STACK_SIZE]
Task stack.
Definition http_server.h:617
char_t buffer[HTTP_SERVER_BUFFER_SIZE]
Memory buffer for input/output operations.
Definition http_server.h:628
HttpResponse response
HTTP response header.
Definition http_server.h:624
HttpAccessStatus status
Access status.
Definition http_server.h:625
TlsContext * tlsContext
TLS context.
Definition http_server.h:621
HttpServerContext * serverContext
Reference to the HTTP server context.
Definition http_server.h:611
uint32_t dummy
Force alignment of the buffer on 32-bit boundaries.
Definition http_server.h:627
OsTaskId taskId
Task identifier.
Definition http_server.h:614
HTTP server context.
Definition http_server.h:580
OsTaskId taskId
Task identifier.
Definition http_server.h:583
TlsTicketContext tlsTicketContext
TLS ticket encryption context.
Definition http_server.h:591
HttpConnection * connections
Client connections.
Definition http_server.h:589
OsTaskTcb taskTcb
Task control block.
Definition http_server.h:585
OsMutex nonceCacheMutex
Mutex preventing simultaneous access to the nonce cache.
Definition http_server.h:594
HttpNonceCacheEntry nonceCache[HTTP_SERVER_NONCE_CACHE_SIZE]
Nonce cache.
Definition http_server.h:595
OsSemaphore semaphore
Semaphore limiting the number of connections.
Definition http_server.h:582
Socket * socket
Listening socket.
Definition http_server.h:588
OsStackType taskStack[HTTP_SERVER_STACK_SIZE]
Task stack.
Definition http_server.h:586
HttpServerSettings settings
User settings.
Definition http_server.h:581
WebSocket API (client and server)