5.1. http_server — HTTP server

Source code: src/inet/http_server.h, src/inet/http_server.c

Test code: tst/inet/http_server/main.c

Test coverage: src/inet/http_server.c


Typedefs

typedef int(* http_server_route_callback_t)(struct http_server_connection_t *connection_p, struct http_server_request_t *request_p)

Enums

enum http_server_request_action_t

Request action types.

Values:

http_server_request_action_get_t = 0
enum http_server_content_type_t

Content type.

Values:

http_server_content_type_text_plain_t = 0
http_server_content_type_text_html_t = 1
enum http_server_response_code_t

Response codes.

Values:

http_server_response_code_200_ok_t = 200
http_server_response_code_404_not_found_t = 404
enum http_server_connection_state_t

Connection state.

Values:

http_server_connection_state_free_t = 0
http_server_connection_state_allocated_t

Functions

int http_server_init(struct http_server_t *self_p, struct http_server_listener_t *listener_p, struct http_server_connection_t *connections_p, const char *root_path_p, const struct http_server_route_t *routes_p, http_server_route_callback_t on_no_route)

Initialize given http server with given root path and maximum number of clients.

Return
zero(0) or negative error code.
Parameters
  • self_p -

    Http server to initialize.

  • listener_p -

    Listener.

  • connections_p -

    A NULL terminated list of connections.

  • root_path_p -

    Working directory for the connection threads.

  • routes_p -

    An array of routes.

  • on_no_route -

    Callback called for all requests without a matching route in route_p.

int http_server_start(struct http_server_t *self_p)

Start given HTTP server.

Spawn the threads and start listening for connections.

Return
zero(0) or negative error code.
Parameters
  • self_p -

    Http server.

int http_server_stop(struct http_server_t *self_p)

Stop given HTTP server.

Closes the listener and all open connections, and then kills the threads.

Return
zero(0) or negative error code.
Parameters
  • self_p -

    Http server.

int http_server_response_write(struct http_server_connection_t *connection_p, struct http_server_request_t *request_p, struct http_server_response_t *response_p)

Write given HTTP response to given connected client. This function should only be called from the route callbacks to respond to given request.

Return
zero(0) or negative error code.
Parameters
  • connection_p -

    Current connection.

  • request_p -

    Current request.

  • response_p -

    Current response.

struct http_server_request_t
#include <http_server.h>

HTTP request.

Public Members

http_server_request_action_t action
char path[64]
int present
char value[32]
struct http_server_request_t::@29::@30 http_server_request_t::sec_websocket_key
struct http_server_request_t::@29 http_server_request_t::headers
struct http_server_response_t
#include <http_server.h>

HTTP response.

Public Members

int type
http_server_response_code_t code
const char *buf_p
size_t size
struct http_server_response_t::@31 http_server_response_t::content
struct http_server_listener_t

Public Members

const char *address_p
int port
const char *name_p
void *buf_p
size_t size
struct http_server_listener_t::@32::@33 http_server_listener_t::stack
struct thrd_t *id_p
struct http_server_listener_t::@32 http_server_listener_t::thrd
struct socket_t socket
struct http_server_connection_t

Public Members

http_server_connection_state_t state
const char *name_p
void *buf_p
size_t size
struct http_server_connection_t::@34::@35 http_server_connection_t::stack
struct thrd_t *id_p
struct http_server_connection_t::@34 http_server_connection_t::thrd
struct http_server_t *self_p
struct socket_t socket
struct event_t events
struct http_server_route_t
#include <http_server.h>

Call given callback for given path.

Public Members

const char *path_p
http_server_route_callback_t callback
struct http_server_t

Public Members

const char *root_path_p
const struct http_server_route_t *routes_p
http_server_route_callback_t on_no_route
struct http_server_listener_t *listener_p
struct http_server_connection_t *connections_p
struct event_t events