8#ifndef ZEPHYR_INCLUDE_NET_HTTP_SERVER_H_
9#define ZEPHYR_INCLUDE_NET_HTTP_SERVER_H_
38#if defined(CONFIG_HTTP_SERVER)
39#define HTTP_SERVER_CLIENT_BUFFER_SIZE CONFIG_HTTP_SERVER_CLIENT_BUFFER_SIZE
40#define HTTP_SERVER_MAX_STREAMS CONFIG_HTTP_SERVER_MAX_STREAMS
41#define HTTP_SERVER_MAX_CONTENT_TYPE_LEN CONFIG_HTTP_SERVER_MAX_CONTENT_TYPE_LENGTH
42#define HTTP_SERVER_MAX_URL_LENGTH CONFIG_HTTP_SERVER_MAX_URL_LENGTH
43#define HTTP_SERVER_MAX_HEADER_LEN CONFIG_HTTP_SERVER_MAX_HEADER_LEN
45#define HTTP_SERVER_CLIENT_BUFFER_SIZE 0
46#define HTTP_SERVER_MAX_STREAMS 0
47#define HTTP_SERVER_MAX_CONTENT_TYPE_LEN 0
48#define HTTP_SERVER_MAX_URL_LENGTH 0
49#define HTTP_SERVER_MAX_HEADER_LEN 0
52#if defined(CONFIG_HTTP_SERVER_CAPTURE_HEADERS)
53#define HTTP_SERVER_CAPTURE_HEADER_BUFFER_SIZE CONFIG_HTTP_SERVER_CAPTURE_HEADER_BUFFER_SIZE
54#define HTTP_SERVER_CAPTURE_HEADER_COUNT CONFIG_HTTP_SERVER_CAPTURE_HEADER_COUNT
56#define HTTP_SERVER_CAPTURE_HEADER_BUFFER_SIZE 0
57#define HTTP_SERVER_CAPTURE_HEADER_COUNT 0
60#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
108 >= (HTTP_METHOD_END_VALUE - 1));
162#define HTTP_SERVER_CONTENT_TYPE(_extension, _content_type) \
163 const STRUCT_SECTION_ITERABLE(http_content_type, _extension) = { \
164 .extension = STRINGIFY(_extension), \
165 .extension_len = sizeof(STRINGIFY(_extension)) - 1, \
166 .content_type = _content_type, \
162#define HTTP_SERVER_CONTENT_TYPE(_extension, _content_type) \ …
169#define HTTP_SERVER_CONTENT_TYPE_FOREACH(_it) STRUCT_SECTION_FOREACH(http_content_type, _it)
309enum http2_stream_state {
311 HTTP2_STREAM_RESERVED_LOCAL,
312 HTTP2_STREAM_RESERVED_REMOTE,
314 HTTP2_STREAM_HALF_CLOSED_LOCAL,
315 HTTP2_STREAM_HALF_CLOSED_REMOTE,
319enum http_server_state {
320 HTTP_SERVER_FRAME_HEADER_STATE,
321 HTTP_SERVER_PREFACE_STATE,
322 HTTP_SERVER_REQUEST_STATE,
323 HTTP_SERVER_FRAME_DATA_STATE,
324 HTTP_SERVER_FRAME_HEADERS_STATE,
325 HTTP_SERVER_FRAME_SETTINGS_STATE,
326 HTTP_SERVER_FRAME_PRIORITY_STATE,
327 HTTP_SERVER_FRAME_WINDOW_UPDATE_STATE,
328 HTTP_SERVER_FRAME_CONTINUATION_STATE,
329 HTTP_SERVER_FRAME_PING_STATE,
330 HTTP_SERVER_FRAME_RST_STREAM_STATE,
331 HTTP_SERVER_FRAME_GOAWAY_STATE,
332 HTTP_SERVER_FRAME_PADDING_STATE,
333 HTTP_SERVER_DONE_STATE,
336enum http1_parser_state {
337 HTTP1_INIT_HEADER_STATE,
338 HTTP1_WAITING_HEADER_STATE,
339 HTTP1_RECEIVING_HEADER_STATE,
340 HTTP1_RECEIVED_HEADER_STATE,
341 HTTP1_RECEIVING_DATA_STATE,
342 HTTP1_MESSAGE_COMPLETE_STATE,
345#define HTTP_SERVER_INITIAL_WINDOW_SIZE 65536
346#define HTTP_SERVER_WS_MAX_SEC_KEY_LEN 32
377struct http_header_capture_ctx {
379 unsigned char buffer[HTTP_SERVER_CAPTURE_HEADER_BUFFER_SIZE];
382 struct http_header headers[HTTP_SERVER_CAPTURE_HEADER_COUNT];
397 bool store_next_value;
417 unsigned char buffer[HTTP_SERVER_CLIENT_BUFFER_SIZE];
485 IF_ENABLED(CONFIG_WEBSOCKET, (
uint8_t ws_sec_key[HTTP_SERVER_WS_MAX_SEC_KEY_LEN]));
512 IF_ENABLED(CONFIG_HTTP_SERVER_COMPRESSION, (
bool accept_encoding_next: 1));
524#define HTTP_SERVER_REGISTER_HEADER_CAPTURE(_id, _header) \
525 BUILD_ASSERT(sizeof(_header) <= CONFIG_HTTP_SERVER_MAX_HEADER_LEN, \
526 "Header is too long to be captured, try increasing " \
527 "CONFIG_HTTP_SERVER_MAX_HEADER_LEN"); \
528 static const char *const _id##_str = _header; \
529 static const STRUCT_SECTION_ITERABLE(http_header_name, _id) = { \
524#define HTTP_SERVER_REGISTER_HEADER_CAPTURE(_id, _header) \ …
http_method
HTTP Request Methods.
Definition method.h:28
http_resource_type
HTTP server resource type.
Definition server.h:67
http_data_status
Indicates the status of the currently processed piece of data.
Definition server.h:174
int(* http_resource_dynamic_cb_t)(struct http_client_ctx *client, enum http_data_status status, const struct http_request_ctx *request_ctx, struct http_response_ctx *response_ctx, void *user_data)
Callback used when data is received.
Definition server.h:229
http_header_status
Status of captured request headers.
Definition server.h:184
int http_server_stop(void)
Stop the HTTP2 server.
int http_server_start(void)
Start the HTTP2 server.
int(* http_resource_websocket_cb_t)(int ws_socket, struct http_request_ctx *request_ctx, void *user_data)
Callback used when a Websocket connection is setup.
Definition server.h:275
http_compression
HTTP compressions.
Definition server.h:142
@ HTTP_RESOURCE_TYPE_STATIC_FS
serves static gzipped files from a filesystem
Definition server.h:72
@ HTTP_RESOURCE_TYPE_STATIC
Static resource, cannot be modified on runtime.
Definition server.h:69
@ HTTP_RESOURCE_TYPE_WEBSOCKET
Websocket resource, application takes control over Websocket connection after and upgrade.
Definition server.h:82
@ HTTP_RESOURCE_TYPE_DYNAMIC
Dynamic resource, server interacts with the application via registered http_resource_dynamic_cb_t.
Definition server.h:77
@ HTTP_SERVER_DATA_FINAL
Final data fragment in current transaction.
Definition server.h:180
@ HTTP_SERVER_DATA_MORE
Transaction incomplete, more data expected.
Definition server.h:178
@ HTTP_SERVER_DATA_ABORTED
Transaction aborted, data incomplete.
Definition server.h:176
@ HTTP_HEADER_STATUS_DROPPED
One or more headers were dropped due to lack of space.
Definition server.h:186
@ HTTP_HEADER_STATUS_NONE
No header status is available.
Definition server.h:187
@ HTTP_HEADER_STATUS_OK
All available headers were successfully captured.
Definition server.h:185
@ HTTP_NONE
NONE.
Definition server.h:143
@ HTTP_GZIP
GZIP.
Definition server.h:144
@ HTTP_ZSTD
ZSTD.
Definition server.h:148
@ HTTP_DEFLATE
DEFLATE.
Definition server.h:146
@ HTTP_COMPRESS
COMPRESS.
Definition server.h:145
@ HTTP_BR
BR.
Definition server.h:147
http_status
HTTP response status codes.
Definition status.h:36
#define IF_ENABLED(_flag, _code)
Insert code if _flag is defined and equals 1.
Definition util_macro.h:247
BSD Sockets compatible API definitions.
HTTP response status codes.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
HTTP/2 frame representation.
Definition server.h:367
uint32_t stream_identifier
Stream ID the frame belongs to.
Definition server.h:369
uint8_t type
Frame type.
Definition server.h:370
uint8_t flags
Frame flags.
Definition server.h:371
uint8_t padding_len
Frame padding length.
Definition server.h:372
uint32_t length
Frame payload length.
Definition server.h:368
HTTP/2 stream representation.
Definition server.h:351
bool headers_sent
Flag indicating that headers were sent in the reply.
Definition server.h:360
enum http2_stream_state stream_state
Stream state.
Definition server.h:353
int window_size
Stream-level window size.
Definition server.h:354
int stream_id
Stream identifier.
Definition server.h:352
struct http_resource_detail * current_detail
Currently processed resource detail.
Definition server.h:357
bool end_stream_sent
Flag indicating that END_STREAM flag was sent.
Definition server.h:363
Representation of an HTTP client connected to the server.
Definition server.h:409
struct http2_stream_ctx streams[HTTP_SERVER_MAX_STREAMS]
HTTP/2 streams context.
Definition server.h:444
struct k_work_delayable inactivity_timer
Client inactivity timer.
Definition server.h:481
struct http_parser_settings parser_settings
HTTP/1 parser configuration.
Definition server.h:447
unsigned char * cursor
Cursor indicating currently processed byte.
Definition server.h:420
int window_size
Connection-level window size.
Definition server.h:426
enum http1_parser_state parser_state
HTTP/1 parser state.
Definition server.h:471
bool expect_continuation
The next frame on the stream is expectd to be a continuation frame.
Definition server.h:515
struct http_parser parser
HTTP/1 parser context.
Definition server.h:450
int http1_frag_data_len
Length of the payload length in the currently processed request fragment (HTTP/1 only).
Definition server.h:476
bool websocket_sec_key_next
Flag indicating Websocket key is being processed.
Definition server.h:509
enum http_server_state server_state
Server state for the associated client.
Definition server.h:429
struct http_hpack_header_buf header_field
HTTP/2 header parser context.
Definition server.h:441
struct http_resource_detail * current_detail
Currently processed resource detail.
Definition server.h:435
unsigned char url_buffer[HTTP_SERVER_MAX_URL_LENGTH]
Request URL.
Definition server.h:456
unsigned char header_buffer[HTTP_SERVER_MAX_HEADER_LEN]
Temp buffer for currently processed header (HTTP/1 only).
Definition server.h:462
unsigned char content_type[HTTP_SERVER_MAX_CONTENT_TYPE_LEN]
Request content type.
Definition server.h:459
bool preface_sent
Flag indicating that HTTP2 preface was sent.
Definition server.h:494
enum http_method method
Request method.
Definition server.h:468
int fd
Socket descriptor associated with the server.
Definition server.h:411
bool http1_headers_sent
Flag indicating that HTTP1 headers were sent.
Definition server.h:497
size_t content_len
Request content length.
Definition server.h:465
unsigned char buffer[HTTP_SERVER_CLIENT_BUFFER_SIZE]
Client data buffer.
Definition server.h:417
struct http2_frame current_frame
Currently processed HTTP/2 frame.
Definition server.h:432
struct http2_stream_ctx * current_stream
Currently processed stream.
Definition server.h:438
bool websocket_upgrade
Flag indicating Websocket upgrade takes place.
Definition server.h:506
bool has_upgrade_header
Flag indicating that upgrade header was present in the request.
Definition server.h:500
const struct http_service_desc * service
HTTP service on which the client is connected.
Definition server.h:414
struct http_header_capture_ctx header_capture_ctx
Header capture context.
Definition server.h:453
IF_ENABLED(CONFIG_HTTP_SERVER_COMPRESSION,(bool accept_encoding_next:1))
Flag indicating accept encoding is being processed.
bool http2_upgrade
Flag indicating HTTP/2 upgrade takes place.
Definition server.h:503
size_t data_len
Data left to process in the buffer.
Definition server.h:423
const char * content_type
Definition server.h:159
size_t extension_len
Definition server.h:158
const char * extension
Definition server.h:157
HTTP request context.
Definition server.h:197
enum http_header_status headers_status
Status of HTTP request headers.
Definition server.h:202
size_t header_count
Array length of HTTP request headers.
Definition server.h:201
size_t data_len
Length of HTTP request data.
Definition server.h:199
struct http_header * headers
Array of HTTP request headers.
Definition server.h:200
uint8_t * data
HTTP request data.
Definition server.h:198
Representation of a dynamic server resource.
Definition server.h:238
void * user_data
A pointer to the user data registered by the application.
Definition server.h:253
http_resource_dynamic_cb_t cb
Resource callback used by the server to interact with the application.
Definition server.h:245
struct http_client_ctx * holder
A pointer to the client currently processing resource, used to prevent concurrent access to the resou...
Definition server.h:250
struct http_resource_detail common
Common resource details.
Definition server.h:240
Representation of a static filesystem server resource.
Definition server.h:133
struct http_resource_detail common
Common resource details.
Definition server.h:135
const char * fs_path
Path in the local filesystem.
Definition server.h:138
Representation of a static server resource.
Definition server.h:114
size_t static_data_len
Size of the static resource.
Definition server.h:122
const void * static_data
Content of the static resource.
Definition server.h:119
struct http_resource_detail common
Common resource details.
Definition server.h:116
Representation of a websocket server resource.
Definition server.h:279
size_t data_buffer_len
Length of the data in the data buffer.
Definition server.h:297
void * user_data
A pointer to the user data registered by the application.
Definition server.h:300
struct http_resource_detail common
Common resource details.
Definition server.h:281
http_resource_websocket_cb_t cb
Resource callback used by the server to interact with the application.
Definition server.h:289
int ws_sock
Websocket socket value.
Definition server.h:284
uint8_t * data_buffer
Data buffer used to exchanged data between server and the, application.
Definition server.h:294
Representation of a server resource, common for all resource types.
Definition server.h:88
int path_len
Length of the URL path.
Definition server.h:96
const char * content_type
Content type of the resource.
Definition server.h:102
uint32_t bitmask_of_supported_http_methods
Bitmask of supported HTTP methods (http_method).
Definition server.h:90
const char * content_encoding
Content encoding of the resource.
Definition server.h:99
enum http_resource_type type
Resource type.
Definition server.h:93
HTTP response context.
Definition server.h:206
bool final_chunk
Flag set to true when the application has no more data to send.
Definition server.h:212
const struct http_header * headers
Array of HTTP headers.
Definition server.h:208
size_t header_count
Length of headers array.
Definition server.h:209
size_t body_len
Length of body data.
Definition server.h:211
const uint8_t * body
Pointer to body data.
Definition server.h:210
enum http_status status
HTTP status code to include in response.
Definition server.h:207
A structure used to submit work after a delay.
Definition kernel.h:4035
#define NUM_BITS(t)
Number of bits that make up a type.
Definition util.h:33