libwebsockets
Lightweight C library for HTML5 websockets
Loading...
Searching...
No Matches
QUIC Transport APIs

Data Structures

struct  lws_cc_ops

Typedefs

typedef int(* lws_tls_quic_secret_cb) (struct lws *wsi, enum lws_tls_quic_secret_type type, const uint8_t *secret, size_t secret_len)

Enumerations

enum  lws_tls_quic_secret_type {
  LWS_TLS_QUIC_SECRET_CLIENT_EARLY , LWS_TLS_QUIC_SECRET_CLIENT_HANDSHAKE , LWS_TLS_QUIC_SECRET_SERVER_HANDSHAKE , LWS_TLS_QUIC_SECRET_CLIENT_APPLICATION ,
  LWS_TLS_QUIC_SECRET_SERVER_APPLICATION
}
enum  lws_0rtt_status { LWS_0RTT_STATUS_NONE , LWS_0RTT_STATUS_ATTEMPTED , LWS_0RTT_STATUS_ACCEPTED , LWS_0RTT_STATUS_REJECTED }

Functions

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_init (struct lws *wsi, lws_tls_quic_secret_cb cb)
LWS_VISIBLE LWS_EXTERN int lws_tls_quic_advance_handshake (struct lws *wsi, int level, const uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len)
LWS_VISIBLE LWS_EXTERN int lws_tls_quic_set_transport_parameters (struct lws *wsi, const uint8_t *tp, size_t tp_len)
LWS_VISIBLE LWS_EXTERN int lws_tls_quic_get_transport_parameters (struct lws *wsi, const uint8_t **tp, size_t *tp_len)
LWS_VISIBLE LWS_EXTERN enum lws_0rtt_status lws_tls_0rtt_status (struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_rx_is_early_data (struct lws *wsi)
LWS_VISIBLE LWS_EXTERN int lws_tls_quic_api_test (void)
LWS_VISIBLE LWS_EXTERN int lws_tls_quic_migrate_wsi (struct lws *old_wsi, struct lws *new_wsi)
LWS_VISIBLE LWS_EXTERN int lws_quic_initiate_key_update (struct lws *wsi)

Variables

LWS_VISIBLE LWS_EXTERN_FOR_DATA const struct lws_cc_ops lws_cc_ops_newreno
LWS_VISIBLE LWS_EXTERN_FOR_DATA const struct lws_cc_ops lws_cc_ops_cubic

Detailed Description

QUIC Transport APIs

These APIs abstract the underlying TLS library to provide the memory BIO and traffic secret extraction capabilities required for QUIC.

Typedef Documentation

◆ lws_tls_quic_secret_cb

typedef int(* lws_tls_quic_secret_cb) (struct lws *wsi, enum lws_tls_quic_secret_type type, const uint8_t *secret, size_t secret_len)

#include <lws-quic.h>

lws_tls_quic_secret_cb() - Callback for QUIC traffic secret derivation

Parameters
wsithe wsi
typethe type of secret derived
secretthe raw secret bytes
secret_lenlength of the secret

This callback is fired by the underlying TLS library (OpenSSL, mbedTLS, etc) when a new traffic secret is derived during the QUIC TLS 1.3 handshake.

Definition at line 59 of file lws-quic.h.

Enumeration Type Documentation

◆ lws_tls_quic_secret_type

#include <lws-quic.h>

Enumerator
LWS_TLS_QUIC_SECRET_CLIENT_EARLY 
LWS_TLS_QUIC_SECRET_CLIENT_HANDSHAKE 
LWS_TLS_QUIC_SECRET_SERVER_HANDSHAKE 
LWS_TLS_QUIC_SECRET_CLIENT_APPLICATION 
LWS_TLS_QUIC_SECRET_SERVER_APPLICATION 

Definition at line 33 of file lws-quic.h.

33 {
39};
@ LWS_TLS_QUIC_SECRET_CLIENT_HANDSHAKE
Definition lws-quic.h:35
@ LWS_TLS_QUIC_SECRET_CLIENT_APPLICATION
Definition lws-quic.h:37
@ LWS_TLS_QUIC_SECRET_SERVER_HANDSHAKE
Definition lws-quic.h:36
@ LWS_TLS_QUIC_SECRET_CLIENT_EARLY
Definition lws-quic.h:34
@ LWS_TLS_QUIC_SECRET_SERVER_APPLICATION
Definition lws-quic.h:38

◆ lws_0rtt_status

#include <lws-quic.h>

Enumerator
LWS_0RTT_STATUS_NONE 

No 0-RTT attempted

LWS_0RTT_STATUS_ATTEMPTED 

Client sent 0-RTT, awaiting server decision

LWS_0RTT_STATUS_ACCEPTED 

Server accepted 0-RTT data

LWS_0RTT_STATUS_REJECTED 

Server rejected 0-RTT data, client must resend

Definition at line 41 of file lws-quic.h.

41 {
46};
@ LWS_0RTT_STATUS_REJECTED
Definition lws-quic.h:45
@ LWS_0RTT_STATUS_NONE
Definition lws-quic.h:42
@ LWS_0RTT_STATUS_ACCEPTED
Definition lws-quic.h:44
@ LWS_0RTT_STATUS_ATTEMPTED
Definition lws-quic.h:43

Function Documentation

◆ lws_tls_quic_init()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_init ( struct lws * wsi,
lws_tls_quic_secret_cb cb )

#include <lws-quic.h>

lws_tls_quic_init() - Initialize QUIC TLS state for a wsi

Parameters
wsithe wsi
cbthe traffic secret callback

Enables QUIC mode on the TLS connection.

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_quic_advance_handshake()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_advance_handshake ( struct lws * wsi,
int level,
const uint8_t * in,
size_t in_len,
uint8_t * out,
size_t * out_len )

#include <lws-quic.h>

lws_tls_quic_advance_handshake() - Feed QUIC CRYPTO frame data to TLS

Parameters
wsithe wsi
inincoming CRYPTO frame payload (or NULL)
in_lenlength of incoming data
outbuffer for outgoing CRYPTO frame payload
out_lenon entry, max size of out; on exit, bytes written

Feeds TLS handshake bytes into the memory BIO and retrieves the output to be sent in the next QUIC CRYPTO frame.

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_quic_set_transport_parameters()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_set_transport_parameters ( struct lws * wsi,
const uint8_t * tp,
size_t tp_len )

#include <lws-quic.h>

lws_tls_quic_set_transport_parameters() - Set QUIC transport parameters extension

Parameters
wsithe wsi
tpthe transport parameters payload
tp_lenlength of the payload

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_quic_get_transport_parameters()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_get_transport_parameters ( struct lws * wsi,
const uint8_t ** tp,
size_t * tp_len )

#include <lws-quic.h>

lws_tls_quic_get_transport_parameters() - Get peer's QUIC transport parameters

Parameters
wsithe wsi
tppointer to receive the transport parameters payload
tp_lenpointer to receive the length

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_0rtt_status()

LWS_VISIBLE LWS_EXTERN enum lws_0rtt_status lws_tls_0rtt_status ( struct lws * wsi)

#include <lws-quic.h>

lws_tls_0rtt_status() - Get the status of 0-RTT early data

Parameters
wsithe wsi

Returns the status of 0-RTT early data for the connection.

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_rx_is_early_data()

LWS_VISIBLE LWS_EXTERN int lws_rx_is_early_data ( struct lws * wsi)

#include <lws-quic.h>

lws_rx_is_early_data() - Determine if received data is 0-RTT early data

Parameters
wsithe wsi

Returns 1 if the current RX data was received as 0-RTT early data, 0 otherwise.

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_quic_api_test()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_api_test ( void )

#include <lws-quic.h>

lws_tls_quic_api_test() - Internal API test for QUIC TLS 1.3 memory BIOs

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_tls_quic_migrate_wsi()

LWS_VISIBLE LWS_EXTERN int lws_tls_quic_migrate_wsi ( struct lws * old_wsi,
struct lws * new_wsi )

#include <lws-quic.h>

lws_tls_quic_migrate_wsi() - Migrate QUIC TLS context from old to new wsi

Parameters
old_wsithe old logical stream wsi
new_wsithe new parent network connection wsi

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_quic_initiate_key_update()

LWS_VISIBLE LWS_EXTERN int lws_quic_initiate_key_update ( struct lws * wsi)

#include <lws-quic.h>

lws_quic_initiate_key_update() - Manually trigger a QUIC Key Update

Parameters
wsiany QUIC wsi on the connection (stream or network)

Initiates a Key Update on the QUIC connection as per RFC 9001. Returns 0 if successfully initiated, or nonzero on failure.

Variable Documentation

◆ lws_cc_ops_newreno

LWS_VISIBLE LWS_EXTERN_FOR_DATA const struct lws_cc_ops lws_cc_ops_newreno

#include <lws-quic.h>

Definition at line 166 of file lws-quic.h.

◆ lws_cc_ops_cubic

LWS_VISIBLE LWS_EXTERN_FOR_DATA const struct lws_cc_ops lws_cc_ops_cubic

#include <lws-quic.h>

Definition at line 167 of file lws-quic.h.