4#ifndef PROTOCORE_HTTP_PARSER_H
5#define PROTOCORE_HTTP_PARSER_H
74#if PROTOCORE_CAPTURE_AUTH_HEADER
95#if PROTOCORE_ENABLE_STREAM_BODY
120 const char *(*get_header)(uint8_t *,
const HttpReq *,
const char *);
123 const char *(*get_query)(uint8_t *,
const HttpReq *,
const char *);
125 const char *(*get_param)(uint8_t *,
const HttpReq *,
const char *);
128 get_form, get_param);
#define MAX_VAL_LEN
Maximum header field-value length.
#define MAX_QUERY_PARAMS
Maximum number of parsed query-string parameters.
#define MAX_QUERY_LEN
Maximum raw query-string length (everything after ?).
#define QUERY_VAL_LEN
Maximum query-parameter value length.
#define BODY_BUF_SIZE
Maximum request body bytes stored in HttpReq::body.
#define PROTOCORE_AUTH_HDR_CAP
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
#define MAX_HEADERS
Maximum HTTP headers stored per request.
#define MAX_PATH_LEN
Maximum URL path length (including leading /).
#define QUERY_KEY_LEN
Maximum query-parameter key length.
#define MAX_KEY_LEN
Maximum header field-name length (e.g. "Content-Type").
#define PROTOCORE_METHOD_BUF_SIZE
HTTP method-token buffer size (bytes, including the NUL).
#define MAX_PATH_PARAMS
Maximum number of :name path parameters captured per route match.
const char * protocore_http_parser_get_param(uint8_t *work, const HttpReq *req, const char *key)
Get_param.
proto_bool protocore_http_parser_get_cookie(uint8_t *work, const HttpReq *req, const char *name, char *out, size_t out_size)
Get_cookie.
void protocore_http_parser_reset(uint8_t *work, HttpReq *req)
Reset.
const char * protocore_http_parser_get_query(uint8_t *work, const HttpReq *req, const char *key)
Get_query.
proto_bool protocore_http_parser_get_form(uint8_t *work, const HttpReq *req, const char *key, char *out, size_t out_size)
Get_form.
enum PROTO_ENUM_PACKED ParseState
const char * protocore_http_parser_get_header(uint8_t *work, const HttpReq *req, const char *key)
Get_header.
void(* HttpStreamDataCb)(HttpReq *req, const uint8_t *data, size_t len)
PROTOCORE_NS HttpParserNs HttpParser PROTOCORE_UNUSED
Module namespace.
void protocore_http_parser_set_stream_hooks(uint8_t *work, HttpStreamBeginCb begin, HttpStreamDataCb data, HttpStreamAbortCb abort)
Set_stream_hooks.
void protocore_http_parser_feed(uint8_t *work, HttpReq *req, uint8_t byte)
Feed.
void(* HttpStreamAbortCb)(HttpReq *req)
HttpReq http_pool[CONN_POOL_SLOTS]
The per-slot request table every HTTP layer parses into and reads back out of.
proto_bool protocore_http_parser_forwarded_client(uint8_t *work, const HttpReq *req, char *ip_out, size_t ip_cap, proto_bool *is_https)
Forwarded_client.
enum PROTO_ENUM_PACKED HttpVersion
proto_bool(* HttpStreamBeginCb)(HttpReq *req)
uint8_t * protocore_http_parser_span(void)
The PROTOCORE_HTTP_PARSER_BORROW bytes this module's state lives in.
#define PROTOCORE_NS_LAYOUT(T,...)
Pin every dispatch slot of a table that is nothing but function pointers.
#define PROTOCORE_NS
Storage for a dispatch table. The const is load bearing.
Dispatch table. Addressed by offset, so the layout is asserted below.
void(* set_stream_hooks)(uint8_t *, HttpStreamBeginCb, HttpStreamDataCb, HttpStreamAbortCb)
QueryParam query_params[MAX_QUERY_PARAMS]
Header headers[MAX_HEADERS]
char query[MAX_QUERY_LEN]
uint8_t body[BODY_BUF_SIZE+1]
QueryParam path_params[MAX_PATH_PARAMS]
char cur_key[MAX_KEY_LEN]
uint8_t content_length_count
char cur_val[MAX_VAL_LEN]
char method[PROTOCORE_METHOD_BUF_SIZE]
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS