Skip to content
modkitv0.2

http.h

#include <modkit/http.h>23 functions · 12 structs · 4 enums · 19 typedefs · 3 macros

Asynchronous HTTP client and native REST/static server.

Client event data and server request views are non-owning and valid only for the duration of their callback unless a field explicitly says it is copied.

Functions

mk_http_cancelfunction

mk_result mk_http_cancel(mk_http_request_t request)

Cancel a request; completion is still reported asynchronously.

ParameterTypeDescription
requestmk_http_request_tValue for request.

Returns MK_SUCCESS or an error result.

mk_http_pausefunction

mk_result mk_http_pause(mk_http_request_t request)

Pause body reading and delivery for a streamed response.

ParameterTypeDescription
requestmk_http_request_tValue for request.

Returns MK_SUCCESS or an error result.

mk_http_reply_sendfunction

mk_result mk_http_reply_send(mk_http_reply_t reply, const mk_http_response_desc *response)

Complete a deferred reply on the networking owner thread.

ParameterTypeDescription
replymk_http_reply_tValue for reply.
responseconst mk_http_response_desc *Value for response.

Returns MK_SUCCESS or an error result.

mk_http_reply_validfunction

bool mk_http_reply_valid(mk_http_reply_t handle)

Return whether an HTTP reply handle is nonzero.

ParameterTypeDescription
handlemk_http_reply_tValue for handle.

Returns True when the operation succeeds.

mk_http_requestfunction

mk_result mk_http_request(const mk_http_request_desc *desc, mk_http_request_t *out_request)

Start an asynchronous request.

Descriptor strings, headers, TLS data, and body bytes are copied before return. Exactly one MK_HTTP_EVENT_COMPLETE is delivered after acceptance.

ParameterTypeDescription
descconst mk_http_request_desc *Request configuration.
out_requestmk_http_request_t *Receives the request handle.

Returns MK_SUCCESS when accepted, otherwise an immediate error.

mk_http_request_desc_initfunction

mk_http_request_desc mk_http_request_desc_init(void)

Return GET/buffered defaults with 10-second connect and 60-second total timeouts.

Returns The resulting value.

mk_http_request_headerfunction

const char * mk_http_request_header(const mk_http_request_view *request, const char *name)

Find a request header case-insensitively, or return NULL.

ParameterTypeDescription
requestconst mk_http_request_view *Value for request.
nameconst char *Stable name.

Returns A borrowed pointer, or NULL when unavailable.

mk_http_request_paramfunction

const char * mk_http_request_param(const mk_http_request_view *request, const char *name)

Find a matched route parameter by name, or return NULL.

ParameterTypeDescription
requestconst mk_http_request_view *Value for request.
nameconst char *Stable name.

Returns A borrowed pointer, or NULL when unavailable.

mk_http_request_queryfunction

const char * mk_http_request_query(const mk_http_request_view *request, const char *name)

Find a decoded query parameter by name, or return NULL.

ParameterTypeDescription
requestconst mk_http_request_view *Value for request.
nameconst char *Stable name.

Returns A borrowed pointer, or NULL when unavailable.

mk_http_request_validfunction

bool mk_http_request_valid(mk_http_request_t handle)

Return whether an HTTP request handle is nonzero.

ParameterTypeDescription
handlemk_http_request_tValue for handle.

Returns True when the operation succeeds.

mk_http_response_bodyfunction

mk_result mk_http_response_body(mk_http_response_writer *response, const void *body, size_t size)

Set and copy the response body during a handler callback.

ParameterTypeDescription
responsemk_http_response_writer *Value for response.
bodyconst void *Value for body.
sizesize_tSize in bytes.

Returns MK_SUCCESS or an error result.

mk_http_response_headerfunction

mk_result mk_http_response_header(mk_http_response_writer *response, const char *name, const char *value)

Add or replace a response header during a handler callback.

ParameterTypeDescription
responsemk_http_response_writer *Value for response.
nameconst char *Stable name.
valueconst char *Value to use.

Returns MK_SUCCESS or an error result.

mk_http_response_statusfunction

void mk_http_response_status(mk_http_response_writer *response, int status_code)

Set the response status code; a new response writer initially uses 200.

ParameterTypeDescription
responsemk_http_response_writer *Value for response.
status_codeintValue for status code.

mk_http_resumefunction

mk_result mk_http_resume(mk_http_request_t request)

Resume a previously paused streamed response.

ParameterTypeDescription
requestmk_http_request_tValue for request.

Returns MK_SUCCESS or an error result.

mk_http_server_closefunction

mk_result mk_http_server_close(mk_http_server_t server)

Stop a server, close WebSockets, and complete deferred replies with 503.

ParameterTypeDescription
servermk_http_server_tValue for server.

Returns MK_SUCCESS or an error result.

mk_http_server_createfunction

mk_result mk_http_server_create(const mk_http_server_desc *desc, mk_http_server_t *out_server)

Create a native server; routes may be registered before it is started.

ParameterTypeDescription
descconst mk_http_server_desc *Configuration descriptor.
out_servermk_http_server_t *Receives the server.

Returns MK_SUCCESS or an error result.

mk_http_server_desc_initfunction

mk_http_server_desc mk_http_server_desc_init(void)

Return all-interface defaults for 1024 clients, 64-KiB headers, and 16-MiB bodies.

Returns The resulting value.

mk_http_server_portfunction

uint16_t mk_http_server_port(mk_http_server_t server)

Return the server's bound port, including an automatically selected port.

ParameterTypeDescription
servermk_http_server_tValue for server.

Returns The resulting value.

mk_http_server_routefunction

mk_result mk_http_server_route(mk_http_server_t server, const mk_http_route_desc *route)

Register a method/path route before the server starts.

ParameterTypeDescription
servermk_http_server_tValue for server.
routeconst mk_http_route_desc *Value for route.

Returns MK_SUCCESS or an error result.

mk_http_server_startfunction

mk_result mk_http_server_start(mk_http_server_t server)

Start accepting requests after all middleware and routes are registered.

ParameterTypeDescription
servermk_http_server_tValue for server.

Returns MK_SUCCESS or an error result.

mk_http_server_staticfunction

mk_result mk_http_server_static(mk_http_server_t server, const mk_http_static_desc *mount)

Mount a native directory for static HTTP serving.

ParameterTypeDescription
servermk_http_server_tValue for server.
mountconst mk_http_static_desc *Value for mount.

Returns MK_SUCCESS or an error result.

mk_http_server_usefunction

mk_result mk_http_server_use(mk_http_server_t server, mk_http_handler_fn middleware, void *user_data)

Append ordered middleware to a server before it starts.

ParameterTypeDescription
servermk_http_server_tValue for server.
middlewaremk_http_handler_fnValue for middleware.
user_datavoid *Caller-provided context.

Returns MK_SUCCESS or an error result.

mk_http_server_validfunction

bool mk_http_server_valid(mk_http_server_t handle)

Return whether an HTTP server handle is nonzero.

ParameterTypeDescription
handlemk_http_server_tValue for handle.

Returns True when the operation succeeds.

Structs

mk_http_eventstruct

HTTP client event delivered by mk_net_poll().

FieldTypeDescription
typemk_http_event_typeEvent kind.
requestmk_http_request_tRequest that produced the event.
status_codeintHTTP status, or zero before a response.
final_urlconst char *URL after redirects.
headersconst mk_http_header *Response headers for HEADERS/COMPLETE.
header_countuint32_tNumber of entries in headers.
dataconst void *Body chunk or buffered complete body.
sizesize_tNumber of bytes in data.
bytes_receiveduint64_tDecoded response bytes received so far.
content_lengthuint64_tExpected decoded length, or zero if unknown.
resultmk_resultTerminal result for COMPLETE.
errormk_net_errorDetailed failure for COMPLETE.

mk_http_headerstruct

Non-owning HTTP header name/value view.

FieldTypeDescription
nameconst char *Null-terminated header name.
valueconst char *Null-terminated header value.

mk_http_named_valuestruct

Non-owning decoded name/value view used for query and route parameters.

FieldTypeDescription
nameconst char *Decoded parameter name.
valueconst char *Decoded parameter value.

mk_http_reply_handlestruct

Generational handle for a server response, including deferred responses.

FieldTypeDescription
iduint32_tOpaque identifier; zero is invalid.

mk_http_request_descstruct

Descriptor for one asynchronous HTTP or HTTPS request.

FieldTypeDescription
methodmk_http_methodRequest method; ANY is invalid here.
custom_methodconst char *HTTP token used when method is CUSTOM.
urlconst char *Required absolute http:// or https:// URL.
headersconst mk_http_header *Optional request headers, copied on submit.
header_countuint32_tNumber of request headers.
bodyconst void *Optional request body, copied on submit.
body_sizesize_tRequest body size in bytes.
response_modemk_http_response_modeBuffered or streamed response delivery.
connect_timeout_msuint32_tNative connect timeout; zero uses 10 seconds.
total_timeout_msuint32_tWhole-request timeout; zero disables it.
max_redirectsuint32_tNative redirect limit; browsers use UA policy.
max_buffered_body_bytessize_tDecoded-body limit; zero uses 64 MiB.
allow_https_downgradeboolPermit redirects from HTTPS to HTTP.
automatic_decompressionboolDecode gzip/deflate; required on web.
has_rangeboolAdd a single HTTP byte Range header.
range_firstuint64_tInclusive first requested byte.
range_lastuint64_tInclusive last byte, or UINT64_MAX for open end.
tlsconst mk_tls_client_config *Optional native TLS trust configuration.
callbackmk_http_event_fnRequired response callback.
user_datavoid *Opaque value passed to callback.

mk_http_request_handlestruct

Generational handle for an asynchronous HTTP client request.

FieldTypeDescription
iduint32_tOpaque identifier; zero is invalid.

mk_http_request_viewstruct

Read-only server request view valid only during its handler callback.

FieldTypeDescription
servermk_http_server_tReceiving server.
replymk_http_reply_tReply handle retained by DEFER.
methodmk_http_methodParsed request method.
custom_methodconst char *Method token when method is CUSTOM.
pathconst char *URL path without the query string.
queryconst char *Raw query string without '?
headersconst mk_http_header *Request headers.
header_countuint32_tNumber of request headers.
query_paramsconst mk_http_named_value *Percent-decoded query parameters.
query_param_countuint32_tNumber of query parameters.
paramsconst mk_http_named_value *Matched :parameter and *wildcard values.
param_countuint32_tNumber of matched route parameters.
bodyconst void *Complete request body.
body_sizesize_tRequest body size in bytes.
remotemk_net_addressRemote numeric address.

mk_http_response_descstruct

Complete response used by mk_http_reply_send().

FieldTypeDescription
status_codeintHTTP status; zero selects 200.
headersconst mk_http_header *Response headers copied by the call.
header_countuint32_tNumber of response headers.
bodyconst void *Response body copied by the call.
body_sizesize_tResponse body size in bytes.

mk_http_route_descstruct

Method/path route registered before an HTTP server starts.

FieldTypeDescription
methodmk_http_methodMethod to match, including ANY or CUSTOM.
custom_methodconst char *Token matched when method is CUSTOM.
pathconst char *Absolute pattern with :params or trailing *wildcard.
handlermk_http_handler_fnRequired route callback.
user_datavoid *Opaque value passed to handler.

mk_http_server_descstruct

Descriptor for a native HTTP or HTTPS server.

FieldTypeDescription
bind_addressconst char *Local address; NULL means all IPv4 interfaces.
portuint16_tLocal port; zero selects an available port.
max_connectionsuint32_tConnection limit; zero uses 1024.
max_header_bytessize_tHeader limit; zero uses 64 KiB.
max_body_bytessize_tBody limit; zero uses 16 MiB.
request_timeout_msuint32_tDeferred-reply deadline; zero uses default.
tlsconst mk_tls_server_config *NULL for HTTP, credentials for HTTPS.

mk_http_server_handlestruct

Generational handle for a native HTTP server.

FieldTypeDescription
iduint32_tOpaque identifier; zero is invalid.

mk_http_static_descstruct

Static-file mount registered before an HTTP server starts.

FieldTypeDescription
url_prefixconst char *URL prefix such as "/assets".
root_pathconst char *Native filesystem directory served by the mount.
index_fileconst char *Optional file served for directory requests.

Enums

mk_http_event_typeenum

HTTP client event kind.

ValueDescription
MK_HTTP_EVENT_HEADERSStatus and response headers are available.
MK_HTTP_EVENT_DATAA streamed response-body chunk is available.
MK_HTTP_EVENT_COMPLETERequest finished, failed, or was cancelled.

mk_http_handler_resultenum

Control value returned by HTTP middleware and route handlers.

ValueDescription
MK_HTTP_HANDLER_NEXTContinue middleware/routing.
MK_HTTP_HANDLER_RESPONDSend the response writer immediately.
MK_HTTP_HANDLER_DEFERRetain request->reply for a later response.

mk_http_methodenum

HTTP request method used by clients and server routes.

ValueDescription
MK_HTTP_METHOD_ANYMatch any method in a server route; not valid for clients.
MK_HTTP_METHOD_GETGET.
MK_HTTP_METHOD_HEADHEAD.
MK_HTTP_METHOD_POSTPOST.
MK_HTTP_METHOD_PUTPUT.
MK_HTTP_METHOD_PATCHPATCH.
MK_HTTP_METHOD_DELETEDELETE.
MK_HTTP_METHOD_OPTIONSOPTIONS.
MK_HTTP_METHOD_CUSTOMToken supplied through custom_method.

mk_http_response_modeenum

HTTP client response delivery mode.

ValueDescription
MK_HTTP_RESPONSE_BUFFEREDDeliver the complete body with COMPLETE.
MK_HTTP_RESPONSE_STREAMDeliver body chunks as DATA events.

Typedefs

mk_http_eventtypedef

typedef struct mk_http_event mk_http_event

HTTP client event delivered by mk_net_poll().

mk_http_event_fntypedef

typedef void(*) mk_http_event_fn(const mk_http_event *event, void *user_data)

HTTP client callback invoked by mk_net_poll() on the owner thread.

mk_http_event_typetypedef

typedef enum mk_http_event_type mk_http_event_type

HTTP client event kind.

mk_http_handler_fntypedef

typedef mk_http_handler_result(*) mk_http_handler_fn(const mk_http_request_view *request, mk_http_response_writer *response, void *user_data)

Native HTTP middleware or route callback.

mk_http_handler_resulttypedef

typedef enum mk_http_handler_result mk_http_handler_result

Control value returned by HTTP middleware and route handlers.

mk_http_headertypedef

typedef struct mk_http_header mk_http_header

Non-owning HTTP header name/value view.

mk_http_methodtypedef

typedef enum mk_http_method mk_http_method

HTTP request method used by clients and server routes.

mk_http_named_valuetypedef

typedef struct mk_http_named_value mk_http_named_value

Non-owning decoded name/value view used for query and route parameters.

mk_http_reply_ttypedef

typedef struct mk_http_reply_handle mk_http_reply_t

Generational handle for a server response, including deferred responses.

mk_http_request_desctypedef

typedef struct mk_http_request_desc mk_http_request_desc

Descriptor for one asynchronous HTTP or HTTPS request.

mk_http_request_ttypedef

typedef struct mk_http_request_handle mk_http_request_t

Generational handle for an asynchronous HTTP client request.

mk_http_request_viewtypedef

typedef struct mk_http_request_view mk_http_request_view

Read-only server request view valid only during its handler callback.

mk_http_response_desctypedef

typedef struct mk_http_response_desc mk_http_response_desc

Complete response used by mk_http_reply_send().

mk_http_response_modetypedef

typedef enum mk_http_response_mode mk_http_response_mode

HTTP client response delivery mode.

mk_http_response_writertypedef

typedef struct mk_http_response_writer mk_http_response_writer

Opaque response builder valid only during a server handler callback.

mk_http_route_desctypedef

typedef struct mk_http_route_desc mk_http_route_desc

Method/path route registered before an HTTP server starts.

mk_http_server_desctypedef

typedef struct mk_http_server_desc mk_http_server_desc

Descriptor for a native HTTP or HTTPS server.

mk_http_server_ttypedef

typedef struct mk_http_server_handle mk_http_server_t

Generational handle for a native HTTP server.

mk_http_static_desctypedef

typedef struct mk_http_static_desc mk_http_static_desc

Static-file mount registered before an HTTP server starts.

Macros

MK_HTTP_REPLY_INVALIDdefine

MK_HTTP_REPLY_INVALID

Invalid HTTP reply handle.

MK_HTTP_REQUEST_INVALIDdefine

MK_HTTP_REQUEST_INVALID

Invalid HTTP client request handle.

MK_HTTP_SERVER_INVALIDdefine

MK_HTTP_SERVER_INVALID

Invalid HTTP server handle.