cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
http.h
Go to the documentation of this file.
1
4#ifndef __CWIST_HTTP_H__
5#define __CWIST_HTTP_H__
6
7#include <cwist/sstring.h>
9#include <cwist/query.h>
10#include <stdint.h>
11#include <netinet/in.h>
12#include <sys/socket.h>
13
26
38
40#define CWIST_HTTP_MAX_HEADER_SIZE (8 * 1024)
41#define CWIST_HTTP_MAX_BODY_SIZE (10 * 1024 * 1024)
42#define CWIST_HTTP_READ_BUFFER_SIZE (16 * 1024)
43#define CWIST_HTTP_TIMEOUT_MS 30000
44
55
64
81
90
100
105
109cwist_http_request *cwist_http_parse_request(const char *raw_request);
110
114cwist_http_request *cwist_http_receive_request(int client_fd, char *read_buf, size_t buf_size,
115 size_t *buf_len, cwist_http_parse_error_t *err_out);
116
120void cwist_http_send_error_response(int fd, int status, const char *msg);
121
131
136
141
146
151
156size_t cwist_http_serialize_headers(cwist_http_response *res, char *buf, size_t buf_size);
157
169 const char *value);
170
175char *cwist_http_header_get(cwist_http_header_node *head, const char *key);
176
181
186
196
201
210int cwist_make_socket_ipv4(struct sockaddr_in *sockv4, const char *address, uint16_t port,
211 uint16_t backlog);
212
216cwist_error_t cwist_accept_socket(int server_fd, struct sockaddr *sockv4,
217 void (*handler_func)(int client_fd, void *ctx), void *ctx);
218
224
226 void (*handler)(int, void *), void *ctx);
228
229extern const int CWIST_CREATE_SOCKET_FAILED;
230extern const int CWIST_HTTP_UNAVAILABLE_ADDRESS;
231extern const int CWIST_HTTP_BIND_FAILED;
232extern const int CWIST_HTTP_SETSOCKOPT_FAILED;
233extern const int CWIST_HTTP_LISTEN_FAILED;
234
235#endif
cwist_err.h interface.
cwist_http_request * cwist_http_receive_request(int client_fd, char *read_buf, size_t buf_size, size_t *buf_len, cwist_http_parse_error_t *err_out)
Receive and parse an HTTP request from a socket.
Definition http.c:4722
int headers_have_content_length(cwist_http_header_node *headers)
Detect whether a header list already defines Content-Length.
Definition http.c:2394
void cwist_http_send_error_response(int fd, int status, const char *msg)
Send a minimal error response (Connection: close) for a failed request.
Definition http.c:4046
struct cwist_http_request cwist_http_request
const int CWIST_HTTP_LISTEN_FAILED
Definition http.c:1545
size_t cwist_http_serialize_headers(cwist_http_response *res, char *buf, size_t buf_size)
Serialize only the status line and headers into a caller buffer.
Definition http.c:2609
cwist_error_t cwist_http_server_loop(int server_fd, cwist_server_config *config, void(*handler)(int, void *), void *ctx)
Run the main HTTP accept loop using the configured concurrency strategy.
Definition http.c:5590
const int CWIST_CREATE_SOCKET_FAILED
Definition http.c:1541
cwist_error_t cwist_http_send_response(int client_fd, cwist_http_response *res)
Send a response over a socket.
Definition http.c:2878
struct cwist_http_response cwist_http_response
cwist_http_parse_error_t
Failure reason reported by the request receive APIs.
Definition http.h:46
@ CWIST_HTTP_PARSE_EOF
Definition http.h:48
@ CWIST_HTTP_PARSE_OK
Definition http.h:47
@ CWIST_HTTP_PARSE_BODY_TOO_LARGE
Definition http.h:51
@ CWIST_HTTP_PARSE_HEADER_OVERFLOW
Definition http.h:50
@ CWIST_HTTP_PARSE_MALFORMED
Definition http.h:49
@ CWIST_HTTP_PARSE_TE_UNSUPPORTED
Definition http.h:52
@ CWIST_HTTP_PARSE_EXPECT_FAILED
Definition http.h:53
int cwist_make_socket_ipv4(struct sockaddr_in *sockv4, const char *address, uint16_t port, uint16_t backlog)
Create an IPv4 socket and bind/listen.
Definition http.c:5361
char * cwist_http_header_get(cwist_http_header_node *head, const char *key)
Find a header value by key.
Definition http.c:1880
cwist_error_t cwist_http_send_response_head(int client_fd, cwist_http_response *res)
Send only the status line and headers (HEAD replies).
Definition http.c:2961
cwist_http_status_t
Definition http.h:27
@ CWIST_HTTP_UNAUTHORIZED
Definition http.h:32
@ CWIST_HTTP_FORBIDDEN
Definition http.h:33
@ CWIST_HTTP_INTERNAL_ERROR
Definition http.h:35
@ CWIST_HTTP_CREATED
Definition http.h:29
@ CWIST_HTTP_NOT_IMPLEMENTED
Definition http.h:36
@ CWIST_HTTP_BAD_REQUEST
Definition http.h:31
@ CWIST_HTTP_NOT_FOUND
Definition http.h:34
@ CWIST_HTTP_OK
Definition http.h:28
@ CWIST_HTTP_NO_CONTENT
Definition http.h:30
void cwist_http_request_destroy(cwist_http_request *req)
Destroy an HTTP request object.
Definition http.c:2180
cwist_http_request * cwist_http_parse_request(const char *raw_request)
Parse a raw HTTP request string.
Definition http.c:4412
void cwist_http_response_add_security_headers(cwist_http_response *res)
Add default security headers (CSP, X-Frame-Options, etc.) if missing.
Definition http.c:1935
cwist_http_method_t
Definition http.h:16
@ CWIST_HTTP_OPTIONS
Definition http.h:23
@ CWIST_HTTP_HEAD
Definition http.h:22
@ CWIST_HTTP_PUT
Definition http.h:19
@ CWIST_HTTP_PATCH
Definition http.h:21
@ CWIST_HTTP_UNKNOWN
Definition http.h:24
@ CWIST_HTTP_POST
Definition http.h:18
@ CWIST_HTTP_GET
Definition http.h:17
@ CWIST_HTTP_DELETE
Definition http.h:20
cwist_sstring * cwist_http_stringify_response(cwist_http_response *res)
Serialize a response to a string.
Definition http.c:4099
cwist_error_t cwist_http_header_add(cwist_http_header_node **head, const char *key, const char *value)
Add a header to the list.
Definition http.c:1861
void cwist_http_response_destroy(cwist_http_response *res)
Destroy an HTTP response object.
Definition http.c:2315
const int CWIST_HTTP_BIND_FAILED
Definition http.c:1543
void cwist_http_header_free_all(cwist_http_header_node *head)
Free all headers.
Definition http.c:2006
cwist_http_response * cwist_http_response_create(void)
Create a new HTTP response object.
Definition http.c:2291
struct cwist_server_config cwist_server_config
cwist_error_t cwist_accept_socket(int server_fd, struct sockaddr *sockv4, void(*handler_func)(int client_fd, void *ctx), void *ctx)
Accept sockets and invoke a handler callback.
const int CWIST_HTTP_UNAVAILABLE_ADDRESS
Definition http.c:1542
const char * cwist_http_method_to_string(cwist_http_method_t method)
Convert method enum to string.
Definition http.c:1554
cwist_http_method_t cwist_http_string_to_method(const char *method_str)
Convert method string to enum.
Definition http.c:1629
const int CWIST_HTTP_SETSOCKOPT_FAILED
Definition http.c:1544
struct cwist_http_header_node cwist_http_header_node
Linked list for headers to handle multiple headers easily.
cwist_http_request * cwist_http_request_create(void)
Create a new HTTP request object.
Definition http.c:2056
cwist_http_status_t
Definition http.h:49
cwist_http_method_t
Definition http.h:37
size_t head
Definition otel.c:57
Compatibility header: forwards to <cwist/net/http/query.h>.
sstring.h interface.
Integrated error structure used throughout the system.
Definition cwist_err.h:72
Linked list for headers to handle multiple headers easily.
Definition http.h:59
cwist_sstring * value
Definition http.h:61
cwist_sstring * key
Definition http.h:60
struct cwist_http_header_node * next
Definition http.h:62
cwist_query_map * query_params
Parsed query parameters.
Definition http.h:69
size_t content_length
Definition http.h:79
cwist_sstring * path
e.g., "/users/1"
Definition http.h:67
cwist_sstring * query
e.g., "active=true" (raw)
Definition http.h:68
uint32_t stream_id
HTTP/2 or HTTP/3 stream ID (0 for HTTP/1.1).
Definition http.h:77
cwist_sstring * body
Definition http.h:73
cwist_sstring * version
e.g., "HTTP/1.1"
Definition http.h:71
void * private_data
Internal framework use (protocol-specific context).
Definition http.h:78
cwist_query_map * path_params
Parsed path parameters (e.g. :id)
Definition http.h:70
cwist_http_header_node * headers
Definition http.h:72
bool keep_alive
Definition http.h:74
cwist_http_method_t method
Definition http.h:66
HTTP Response Object. Supports standard string body or Zero-Copy pointer body.
Definition http.h:82
cwist_sstring * version
e.g., "HTTP/1.1"
Definition http.h:83
cwist_sstring * status_text
e.g., "OK"
Definition http.h:85
cwist_sstring * body
Definition http.h:87
cwist_http_status_t status_code
Definition http.h:84
cwist_http_header_node * headers
Definition http.h:86
bool use_forking
Process per request.
Definition http.h:220
bool use_threading
Thread per request.
Definition http.h:221
bool use_epoll
Use epoll for accepting.
Definition http.h:222