cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
http3.h
Go to the documentation of this file.
1
6#ifndef __CWIST_HTTP3_H__
7#define __CWIST_HTTP3_H__
8
11#include <openssl/ssl.h>
12#include <stdbool.h>
13#include <stdint.h>
14#include <pthread.h>
15
19
28 void *stream);
29
37 int udp_fd;
38 void *engine;
40 void *user_ctx;
41 volatile int running;
48 void (*datagram_cb)(const void *data, size_t len, void *user_ctx);
51 void (*wt_new_stream_handler)(void *stream,
52 void *user_ctx);
58 void *hsets;
59 /* Hot reload (cwist_http3_reload_context): ssl_ctx is swapped under
60 * ssl_ctx_lock. ssl_ctx_handout pins the SSL_CTX most recently handed to
61 * lsquic's per-connection ea_get_ssl_ctx callback until the next handout
62 * or destroy, bridging the window between the callback returning a
63 * pointer and lsquic's SSL_new() taking the connection's own reference.
64 * ticket_key owns the shared session-ticket key material installed on
65 * every SSL_CTX this context has used, so QUIC session resumption (and
66 * 0-RTT) survives a reload. */
67 pthread_rwlock_t ssl_ctx_lock;
70};
71
79typedef void (*cwist_http3_request_handler_func)(void *user_ctx, cwist_http_request *req,
81
95 const char *key_path);
96
101
106
127 const char *key_path);
128
133 cwist_http3_request_handler_func handler, void *user_ctx);
134
157void cwist_http3_set_early_data(cwist_http3_context *ctx, bool enabled);
158
173
181
193int cwist_http3_push_resource(cwist_http_request *req, const char *path, const char *content_type);
194
212int cwist_http3_set_stream_priority(cwist_http_request *req, unsigned priority);
213
223
232 void (*cb)(const void *data, size_t len, void *user_ctx),
233 void *user_ctx);
234
245int cwist_http3_send_datagram(void *conn, const void *data, size_t len);
246
258
273ssize_t cwist_webtransport_read(void *stream, void *buf, size_t len);
274
285ssize_t cwist_webtransport_write(void *stream, const void *data, size_t len);
286
293int cwist_webtransport_flush(void *stream);
294
301int cwist_webtransport_close_stream(void *stream);
302
313 void (*handler)(void *stream, void *user_ctx),
314 void *user_ctx);
315
324int cwist_webtransport_open_bidi_stream(void *session);
325
334int cwist_webtransport_open_uni_stream(void *session);
335
344ssize_t cwist_webtransport_send_datagram(void *session, const void *data, size_t len);
345
349size_t cwist_webtransport_max_datagram_size(void *session);
350
354int cwist_webtransport_close_session(void *session, uint64_t code, const char *reason);
355
370
381
393
405
406#endif
void(* cwist_webtransport_handler_func)(cwist_http_request *req, cwist_http_response *res, void *stream)
Callback function type for handling WebTransport sessions over HTTP/3.
Definition http3.h:27
void cwist_http3_set_early_data_guard(cwist_http3_context *ctx, int enabled)
Enable or disable the 0-RTT replay guard (default ON when early data is enabled).
Definition http3.c:3438
void cwist_http3_set_webtransport_handler(cwist_http3_context *ctx, cwist_webtransport_handler_func handler)
Register a WebTransport session handler on the given HTTP/3 context.
Definition http3.c:3527
void cwist_http3_destroy_context(cwist_http3_context *ctx)
Destroy an HTTP/3 context.
Definition http3.c:2848
cwist_error_t cwist_http3_init_context(cwist_http3_context **ctx, const char *cert_path, const char *key_path)
Callback function type for handling WebTransport sessions over HTTP/3.
Definition http3.c:2673
void cwist_http3_set_datagram_callback(cwist_http3_context *ctx, void(*cb)(const void *data, size_t len, void *user_ctx), void *user_ctx)
Register a callback for incoming QUIC datagrams.
Definition http3.c:3799
void cwist_http3_set_idle_timeout(cwist_http3_context *ctx, int ms)
Set the idle timeout for QUIC connections.
Definition http3.c:3753
size_t cwist_webtransport_max_datagram_size(void *session)
Return the current maximum WebTransport datagram payload size.
Definition http3.c:3988
void cwist_http3_set_handshake_timeout(cwist_http3_context *ctx, int ms)
Set the handshake timeout.
Definition http3.c:3761
ssize_t cwist_webtransport_send_datagram(void *session, const void *data, size_t len)
Send an unreliable WebTransport datagram in session context.
Definition http3.c:3978
int cwist_webtransport_close_session(void *session, uint64_t code, const char *reason)
Close a WebTransport session with an application error code.
Definition http3.c:3996
int cwist_webtransport_open_uni_stream(void *session)
Request a new server-initiated unidirectional WebTransport stream.
Definition http3.c:3738
cwist_error_t cwist_http3_reload_context(cwist_http3_context *ctx, const char *cert_path, const char *key_path)
Hot-reload the certificate chain and key of a live HTTP/3 context.
Definition http3.c:2879
ssize_t cwist_webtransport_read(void *stream, void *buf, size_t len)
Read data from a WebTransport stream.
Definition http3.c:3694
void cwist_http3_set_early_data(cwist_http3_context *ctx, bool enabled)
Enable or disable server-side 0-RTT early data on the given context.
Definition http3.c:3416
int cwist_webtransport_open_bidi_stream(void *session)
Request a new server-initiated bidirectional WebTransport stream.
Definition http3.c:3730
cwist_error_t cwist_http3_server_loop(int udp_fd, cwist_http3_context *ctx, cwist_http3_request_handler_func handler, void *user_ctx)
Run the HTTP/3 server event loop.
Definition http3.c:2932
void cwist_webtransport_set_new_stream_handler(cwist_http3_context *ctx, void(*handler)(void *stream, void *user_ctx), void *user_ctx)
Register a callback for newly created WebTransport data streams.
Definition http3.c:3536
int cwist_http3_send_datagram(void *conn, const void *data, size_t len)
Send an unreliable datagram over the given QUIC connection.
Definition http3.c:3823
int cwist_webtransport_flush(void *stream)
Flush any buffered data on a WebTransport stream.
Definition http3.c:3714
ssize_t cwist_webtransport_write(void *stream, const void *data, size_t len)
Write data to a WebTransport stream.
Definition http3.c:3704
void cwist_http3_set_datagram_enabled(cwist_http3_context *ctx, int enabled)
Enable or disable QUIC datagram extension on the given context.
Definition http3.c:3791
void(* cwist_http3_request_handler_func)(void *user_ctx, cwist_http_request *req, cwist_http_response *res)
Callback function type for handling HTTP/3 requests.
Definition http3.h:79
void cwist_http3_set_push_enabled(cwist_http3_context *ctx, int enabled)
Enable or disable HTTP/3 server push on the given context.
Definition http3.c:3405
void cwist_http3_set_ping_period(cwist_http3_context *ctx, int ms)
Set the keep-alive PING period.
Definition http3.c:3769
void cwist_http3_set_noprogress_timeout(cwist_http3_context *ctx, int ms)
Set the no-progress timeout.
Definition http3.c:3777
int cwist_http3_set_stream_priority(cwist_http_request *req, unsigned priority)
Set stream priority for the current response.
Definition http3.c:3508
int cwist_webtransport_close_stream(void *stream)
Close a WebTransport stream.
Definition http3.c:3722
int cwist_http3_push_resource(cwist_http_request *req, const char *path, const char *content_type)
Push a resource to the client.
Definition http3.c:3469
cwist_error_t cwist_http3_init_context_ephemeral(cwist_http3_context **ctx)
Initialize an HTTP/3 context with an ephemeral self-signed certificate.
Definition http3.c:2721
HTTP Protocol Definitions and Helpers.
mbedTLS TLS backend: OpenSSL-shaped seam over the CWIST TLS subset.
struct cwist_mtls_ctx SSL_CTX
Definition ssl.h:43
Integrated error structure used throughout the system.
Definition cwist_err.h:72
HTTP/3 server context encapsulating lsquic/BoringSSL settings.
Definition http3.h:35
cwist_webtransport_handler_func wt_handler
Definition http3.h:50
void * user_ctx
Definition http3.h:40
int noprogress_timeout_ms
Definition http3.h:57
void(* wt_new_stream_handler)(void *stream, void *user_ctx)
Definition http3.h:51
void * wt_new_stream_ctx
Definition http3.h:53
int early_data_enabled
Definition http3.h:44
volatile int running
Definition http3.h:41
void(* handler)(void *user_ctx, cwist_http_request *req, cwist_http_response *res)
Definition http3.h:39
SSL_CTX * ssl_ctx
Definition http3.h:36
void * ticket_key
Definition http3.h:69
int handshake_timeout_ms
Definition http3.h:55
void * datagram_user_ctx
Definition http3.h:49
pthread_rwlock_t ssl_ctx_lock
Definition http3.h:67
SSL_CTX * ssl_ctx_handout
Definition http3.h:68
void(* datagram_cb)(const void *data, size_t len, void *user_ctx)
Definition http3.h:48
HTTP Response Object. Supports standard string body or Zero-Copy pointer body.
Definition http.h:82
Unified error code and type definitions for the CWIST system layer.