Types (structs, unions and typedefs)
-
typedef ptrdiff_t ngtcp2_ssize
ngtcp2_ssize
is signed counterpart of size_t.
-
typedef void *(*ngtcp2_malloc)(size_t size, void *user_data)
ngtcp2_malloc
is a custom memory allocator to replace malloc(3). The user_data isngtcp2_mem.user_data
.
-
typedef void (*ngtcp2_free)(void *ptr, void *user_data)
ngtcp2_free
is a custom memory allocator to replace free(3). The user_data isngtcp2_mem.user_data
.
-
typedef void *(*ngtcp2_calloc)(size_t nmemb, size_t size, void *user_data)
ngtcp2_calloc
is a custom memory allocator to replace calloc(3). The user_data is thengtcp2_mem.user_data
.
-
typedef void *(*ngtcp2_realloc)(void *ptr, size_t size, void *user_data)
ngtcp2_realloc
is a custom memory allocator to replace realloc(3). The user_data is thengtcp2_mem.user_data
.
-
type ngtcp2_mem
ngtcp2_mem
is a custom memory allocator. Theuser_data
field is passed to each allocator function. This can be used, for example, to achieve per-connection memory pool.In the following example code,
my_malloc
,my_free
,my_calloc
andmy_realloc
are the replacement of the standard allocators malloc(3), free(3), calloc(3) and realloc(3) respectively:void *my_malloc_cb(size_t size, void *user_data) { (void)user_data; return my_malloc(size); } void my_free_cb(void *ptr, void *user_data) { (void)user_data; my_free(ptr); } void *my_calloc_cb(size_t nmemb, size_t size, void *user_data) { (void)user_data; return my_calloc(nmemb, size); } void *my_realloc_cb(void *ptr, size_t size, void *user_data) { (void)user_data; return my_realloc(ptr, size); } void conn_new() { ngtcp2_mem mem = {NULL, my_malloc_cb, my_free_cb, my_calloc_cb, my_realloc_cb}; ... }
-
void *user_data
user_data
is an arbitrary user supplied data. This is passed to each allocator function.
-
ngtcp2_malloc malloc
-
ngtcp2_free free
-
ngtcp2_calloc calloc
-
ngtcp2_realloc realloc
realloc
is a custom allocator function to replace realloc(3).
-
void *user_data
-
type ngtcp2_pkt_info
ngtcp2_pkt_info
is a packet metadata.-
uint8_t ecn
ecn
is ECN marking, and when it is passed tongtcp2_conn_read_pkt()
, it should be eitherNGTCP2_ECN_NOT_ECT
,NGTCP2_ECN_ECT_1
,NGTCP2_ECN_ECT_0
, orNGTCP2_ECN_CE
.
-
uint8_t ecn
-
typedef uint64_t ngtcp2_tstamp
ngtcp2_tstamp
is a timestamp with nanosecond resolution.UINT64_MAX
is an invalid value, and it is often used to indicate that no value is set.
-
typedef uint64_t ngtcp2_duration
ngtcp2_duration
is a period of time in nanosecond resolution.UINT64_MAX
is an invalid value, and it is often used to indicate that no value is set.
-
type ngtcp2_cid
ngtcp2_cid
holds a Connection ID.-
uint8_t data[NGTCP2_MAX_CIDLEN]
data
is the buffer to store Connection ID.
-
uint8_t data[NGTCP2_MAX_CIDLEN]
-
type ngtcp2_vec
ngtcp2_vec
is struct iovec compatible structure to reference arbitrary array of bytes.
-
type ngtcp2_pkt_hd
ngtcp2_pkt_hd
represents QUIC packet header.-
ngtcp2_cid dcid
dcid
is Destination Connection ID.
-
ngtcp2_cid scid
scid
is Source Connection ID.
-
const uint8_t *token
token
contains token. Only Initial packet may contain token. NULL if no token is present.
-
size_t pkt_numlen
pkt_numlen
is the number of bytes spent to encodepkt_num
.
-
size_t len
len
is the sum ofpkt_numlen
and the length of QUIC packet payload.
-
uint8_t type
type
is a type of QUIC packet. This field does not have a QUIC packet type defined for a specific QUIC version. Instead, it contains version independent packet type defined by this library. Seengtcp2_pkt_type
.
-
uint8_t flags
flags
is zero or more ofNGTCP2_PKT_FLAG_*
.
-
ngtcp2_cid dcid
-
type ngtcp2_pkt_stateless_reset
ngtcp2_pkt_stateless_reset
represents Stateless Reset.-
uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]
stateless_reset_token
contains stateless reset token.
-
uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]
-
typedef struct sockaddr ngtcp2_sockaddr
ngtcp2_sockaddr
is typedefed to struct sockaddr. IfNGTCP2_USE_GENERIC_SOCKADDR
is defined, it is typedefed to the generic struct sockaddr defined in ngtcp2.h.
-
typedef struct sockaddr_in ngtcp2_sockaddr_in
ngtcp2_sockaddr_in
is typedefed to struct sockaddr_in. IfNGTCP2_USE_GENERIC_SOCKADDR
is defined, it is typedefed to the generic struct sockaddr_in defined in ngtcp2.h.
-
typedef struct sockaddr_in6 ngtcp2_sockaddr_in6
ngtcp2_sockaddr_in6
is typedefed to struct sockaddr_in6. IfNGTCP2_USE_GENERIC_SOCKADDR
is defined, it is typedefed to the generic struct sockaddr_in6 defined in ngtcp2.h.
-
typedef socklen_t ngtcp2_socklen
ngtcp2_socklen
is typedefed to socklen_t. IfNGTCP2_USE_GENERIC_SOCKADDR
is defined, it is typedefed to uint32_t.
-
type ngtcp2_sockaddr_union
ngtcp2_sockaddr_union
conveniently includes all supported address types.
-
type ngtcp2_preferred_addr
ngtcp2_preferred_addr
represents preferred address structure.-
ngtcp2_cid cid
cid
is a Connection ID.
-
ngtcp2_sockaddr_in ipv4
ipv4
contains IPv4 address and port.
-
ngtcp2_sockaddr_in6 ipv6
ipv6
contains IPv6 address and port.
-
uint8_t ipv4_present
ipv4_present
indicates thatipv4
contains IPv4 address and port.
-
uint8_t ipv6_present
ipv6_present
indicates thatipv6
contains IPv6 address and port.
-
uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]
stateless_reset_token
contains stateless reset token.
-
ngtcp2_cid cid
-
type ngtcp2_version_info
ngtcp2_version_info
represents version_information structure. See RFC 9368.-
uint32_t chosen_version
chosen_version
is the version chosen by the sender.
-
const uint8_t *available_versions
available_versions
points the wire image of available_versions field. The each version is therefore in network byte order.
-
size_t available_versionslen
available_versionslen
is the number of bytes pointed byavailable_versions
, not the number of versions included.
-
uint32_t chosen_version
-
type ngtcp2_transport_params
ngtcp2_transport_params
represents QUIC transport parameters.-
ngtcp2_preferred_addr preferred_addr
preferred_addr
contains preferred address ifpreferred_addr_present
is nonzero.
-
ngtcp2_cid original_dcid
original_dcid
is the Destination Connection ID field from the first Initial packet from client. Server must specify this field and setoriginal_dcid_present
to nonzero. It is expected that application knows the original Destination Connection ID even if it sends Retry packet, for example, by including it in retry token. Otherwise, application should not specify this field.
-
ngtcp2_cid initial_scid
initial_scid
is the Source Connection ID field from the first Initial packet the local endpoint sends. Application should not specify this field. Ifinitial_scid_present
is set to nonzero, it indicates this field is set.
-
ngtcp2_cid retry_scid
retry_scid
is the Source Connection ID field from Retry packet. Only server uses this field. If server application received Initial packet with retry token from client, and server successfully verified its token, server application must set Destination Connection ID field from the Initial packet to this field, and setretry_scid_present
to nonzero. Server application must verify that the Destination Connection ID from Initial packet was sent in Retry packet by, for example, including the Connection ID in a token, or including it in AAD when encrypting a token.
-
uint64_t initial_max_stream_data_bidi_local
initial_max_stream_data_bidi_local
is the size of flow control window of locally initiated stream. This is the number of bytes that the remote endpoint can send, and the local endpoint must ensure that it has enough buffer to receive them.
-
uint64_t initial_max_stream_data_bidi_remote
initial_max_stream_data_bidi_remote
is the size of flow control window of remotely initiated stream. This is the number of bytes that the remote endpoint can send, and the local endpoint must ensure that it has enough buffer to receive them.
-
uint64_t initial_max_stream_data_uni
initial_max_stream_data_uni
is the size of flow control window of remotely initiated unidirectional stream. This is the number of bytes that the remote endpoint can send, and the local endpoint must ensure that it has enough buffer to receive them.
-
uint64_t initial_max_data
initial_max_data
is the connection level flow control window.
-
uint64_t initial_max_streams_bidi
initial_max_streams_bidi
is the number of concurrent streams that the remote endpoint can create.
-
uint64_t initial_max_streams_uni
initial_max_streams_uni
is the number of concurrent unidirectional streams that the remote endpoint can create.
-
ngtcp2_duration max_idle_timeout
max_idle_timeout
is a duration during which sender allows quiescent. 0 means no idle timeout. It must not be UINT64_MAX.
-
uint64_t max_udp_payload_size
max_udp_payload_size
is the maximum UDP payload size that the local endpoint can receive.
-
uint64_t active_connection_id_limit
active_connection_id_limit
is the maximum number of Connection ID that sender can store. If specified, it must be in the range of [NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT
, 8], inclusive.
-
uint64_t ack_delay_exponent
ack_delay_exponent
is the exponent used in ACK Delay field in ACK frame.
-
ngtcp2_duration max_ack_delay
max_ack_delay
is the maximum acknowledgement delay by which the local endpoint will delay sending acknowledgements. It must be strictly less than (1 << 14) milliseconds. Sub-millisecond part is dropped when sending it in a QUIC transport parameter.
-
uint64_t max_datagram_frame_size
max_datagram_frame_size
is the maximum size of DATAGRAM frame that the local endpoint willingly receives. Specifying 0 disables DATAGRAM support. See RFC 9221.
-
uint8_t stateless_reset_token_present
stateless_reset_token_present
is nonzero ifstateless_reset_token
field is set.
-
uint8_t disable_active_migration
disable_active_migration
is nonzero if the local endpoint does not support active connection migration.
-
uint8_t original_dcid_present
original_dcid_present
is nonzero iforiginal_dcid
field is set.
-
uint8_t initial_scid_present
initial_scid_present
is nonzero ifinitial_scid
field is set.
-
uint8_t retry_scid_present
retry_scid_present
is nonzero ifretry_scid
field is set.
-
uint8_t preferred_addr_present
preferred_addr_present
is nonzero ifpreferred_address
is set.
-
uint8_t stateless_reset_token[NGTCP2_STATELESS_RESET_TOKENLEN]
stateless_reset_token
contains stateless reset token.
-
uint8_t grease_quic_bit
grease_quic_bit
is nonzero if sender supports “Greasing the QUIC Bit” extension. See RFC 9287.
-
ngtcp2_version_info version_info
version_info
contains version_information field ifversion_info_present
is nonzero. Application should not specify this field.
-
uint8_t version_info_present
version_info_present
is nonzero ifversion_info
is set. Application should not specify this field.
-
ngtcp2_preferred_addr preferred_addr
-
type ngtcp2_conn_info
ngtcp2_conn_info
holds various connection statistics.-
ngtcp2_duration latest_rtt
latest_rtt
is the latest RTT sample which is not adjusted by acknowledgement delay.
-
ngtcp2_duration min_rtt
min_rtt
is the minimum RTT seen so far. It is not adjusted by acknowledgement delay.
-
ngtcp2_duration smoothed_rtt
smoothed_rtt
is the smoothed RTT.
-
ngtcp2_duration rttvar
rttvar
is a mean deviation of observed RTT.
-
uint64_t bytes_in_flight
bytes_in_flight
is the number in bytes of all sent packets which have not been acknowledged.
-
ngtcp2_duration latest_rtt
-
typedef void (*ngtcp2_printf)(void *user_data, const char *format, ...)
ngtcp2_printf
is a callback function for logging. user_data is the same object passed tongtcp2_conn_client_new()
orngtcp2_conn_server_new()
.
-
type ngtcp2_rand_ctx
ngtcp2_rand_ctx
is a wrapper around native random number generator. It is opaque to the ngtcp2 library. This might be useful if application needs to specify random number generator per thread or per connection.-
void *native_handle
native_handle
is a pointer to an underlying random number generator.
-
void *native_handle
-
typedef void (*ngtcp2_qlog_write)(void *user_data, uint32_t flags, const void *data, size_t datalen)
ngtcp2_qlog_write
is a callback function which is called to write qlog data of length datalen bytes. flags is bitwise OR of zero or more ofNGTCP2_QLOG_WRITE_FLAG_*
. IfNGTCP2_QLOG_WRITE_FLAG_FIN
is set, datalen may be 0.
-
type ngtcp2_settings
ngtcp2_settings
defines QUIC connection settings.-
ngtcp2_qlog_write qlog_write
qlog_write
is a callback function to write qlog. SettingNULL
disables qlog.
-
ngtcp2_cc_algo cc_algo
cc_algo
specifies congestion control algorithm.
-
ngtcp2_tstamp initial_ts
initial_ts
is an initial timestamp given to the library.
-
ngtcp2_duration initial_rtt
initial_rtt
is an initial RTT.
-
ngtcp2_printf log_printf
log_printf
is a function that the library uses to write logs.NULL
means no logging output. It is nothing to do with qlog.
-
size_t max_tx_udp_payload_size
max_tx_udp_payload_size
is the maximum size of UDP datagram payload that the local endpoint transmits.
-
const uint8_t *token
token
is a token from Retry packet or NEW_TOKEN frame.Server sets this field if it received the token in Client Initial packet and successfully validated. It should also set
token_type
field.Client sets this field if it intends to send token in its Initial packet.
ngtcp2_conn_server_new()
andngtcp2_conn_client_new()
make a copy of token.Set NULL if there is no token.
-
ngtcp2_token_type token_type
token_type
is the type of token. Server application should set this field.
-
ngtcp2_rand_ctx rand_ctx
rand_ctx
is an optional random number generator to be passed tongtcp2_rand
callback.
-
uint64_t max_window
max_window
is the maximum connection-level flow control window if connection-level window auto-tuning is enabled. The connection-level window auto tuning is enabled if nonzero value is specified in this field. The initial value of window size isngtcp2_transport_params.initial_max_data
. The window size is scaled up to the value specified in this field.
-
uint64_t max_stream_window
max_stream_window
is the maximum stream-level flow control window if stream-level window auto-tuning is enabled. The stream-level window auto-tuning is enabled if nonzero value is specified in this field. The initial value of window size isngtcp2_transport_params.initial_max_stream_data_bidi_remote
,ngtcp2_transport_params.initial_max_stream_data_bidi_local
, orngtcp2_transport_params.initial_max_stream_data_uni
, depending on the type of stream. The window size is scaled up to the value specified in this field.Please note that the auto-tuning is done per stream. Even if the previous stream gets larger window as a result of auto-tuning, the new stream still starts with the initial value set in transport parameters. This might become a bottleneck if congestion window of a remote server is wide open. If this causes an issue, do not enable auto-tuning.
-
size_t ack_thresh
ack_thresh
is the minimum number of the received ACK eliciting packets that trigger the immediate acknowledgement from the local endpoint.
-
uint8_t no_tx_udp_payload_size_shaping
no_tx_udp_payload_size_shaping
, if set to nonzero, instructs the library not to limit the UDP payload size toNGTCP2_MAX_UDP_PAYLOAD_SIZE
(which can be extended by Path MTU Discovery), and instead use the minimum size among the given buffer size,max_tx_udp_payload_size
, and the received max_udp_payload_size QUIC transport parameter.
-
ngtcp2_duration handshake_timeout
handshake_timeout
is the period of time before giving up QUIC connection establishment. If QUIC handshake is not complete within this period,ngtcp2_conn_handle_expiry()
returnsNGTCP2_ERR_HANDSHAKE_TIMEOUT
error. The deadline isinitial_ts
+handshake_timeout
. If this field is set toUINT64_MAX
, no handshake timeout is set.
-
const uint32_t *preferred_versions
preferred_versions
is the array of versions that are preferred by the local endpoint. All versions set in this array must be supported by the library, and compatible to QUIC v1. The reserved versions are not allowed. They are sorted in the order of preference.On compatible version negotiation, server will negotiate one of those versions contained in this array if there is some overlap between these versions and the versions offered by the client. If there is no overlap, but the client chosen version is supported by the library, the server chooses the client chosen version as the negotiated version. This version set corresponds to Offered Versions described in RFC 9368, and it should be included in Version Negotiation packet.
Client uses this field and
original_version
to prevent version downgrade attack if it reacted upon Version Negotiation packet. If this field is specified, client must include client_chosen_version passed tongtcp2_conn_client_new()
unless client_chosen_version is a reserved version.
-
size_t preferred_versionslen
preferred_versionslen
is the number of versions that are contained in the array pointed bypreferred_versions
.
-
const uint32_t *available_versions
available_versions
is the array of versions that are going to be set inavailable_versions
field of outgoing version_information QUIC transport parameter.For server, this corresponds to Fully-Deployed Versions described in RFC 9368. If this field is not set, it is set to
preferred_versions
internally ifpreferred_versionslen
is not zero. If this field is not set, andpreferred_versionslen
is zero, this field is set toNGTCP2_PROTO_VER_V1
internally.Client must include client_chosen_version passed to
ngtcp2_conn_client_new()
in this array if this field is set and client_chosen_version is not a reserved version. If this field is not set, client_chosen_version passed tongtcp2_conn_client_new()
will be set in this field internally unless client_chosen_version is a reserved version.
-
size_t available_versionslen
available_versionslen
is the number of versions that are contained in the array pointed byavailable_versions
.
-
uint32_t original_version
original_version
is the original version that client initially used to make a connection attempt. If it is set, and it differs from client_chosen_version passed tongtcp2_conn_client_new()
, the library assumes that client reacted upon Version Negotiation packet. Server does not use this field.
-
uint32_t initial_pkt_num
initial_pkt_num
is the initial packet number for each packet number space. It must be in range [0, INT32_MAX], inclusive.
-
const uint16_t *pmtud_probes
pmtud_probes
is the array of UDP datagram payload size to probe during Path MTU Discovery. The discovery is done in the order appeared in this array. The size must be strictly larger than 1200, otherwise the behavior is undefined. The maximum value in this array should be set tomax_tx_udp_payload_size
. If this field is not set, the predefined PMTUD probes are made. This field has been available since v1.4.0.
-
size_t pmtud_probeslen
pmtud_probeslen
is the number of elements that are contained in the array pointed bypmtud_probes
. This field has been available since v1.4.0.
-
ngtcp2_qlog_write qlog_write
-
type ngtcp2_addr
ngtcp2_addr
is the endpoint address.-
ngtcp2_sockaddr *addr
addr
points to the buffer which contains endpoint address. It must not beNULL
.
-
ngtcp2_socklen addrlen
addrlen
is the length ofaddr
. It must not be longer than sizeof(ngtcp2_sockaddr_union
).
-
ngtcp2_sockaddr *addr
-
type ngtcp2_path
ngtcp2_path
is the network endpoints where a packet is sent and received.-
ngtcp2_addr local
local
is the address of local endpoint.
-
ngtcp2_addr remote
remote
is the address of remote endpoint.
-
void *user_data
user_data
is an arbitrary data and opaque to the library.Note that
ngtcp2_path
is generally passed tongtcp2_conn
by an application, andngtcp2_conn
stores their copies. Unfortunately, there is no way for the application to know whenngtcp2_conn
finished using a specificngtcp2_path
object in mid connection, which means that the application cannot free the data pointed by this field. Therefore, it is advised to use this field only when the data pointed by this field persists in an entire lifetime of the connection.
-
ngtcp2_addr local
-
type ngtcp2_path_storage
ngtcp2_path_storage
is a convenient struct to have buffers to store the longest addresses.-
ngtcp2_path path
path
stores network path.
-
ngtcp2_sockaddr_union local_addrbuf
local_addrbuf
is a buffer to store local address.
-
ngtcp2_sockaddr_union remote_addrbuf
remote_addrbuf
is a buffer to store remote address.
-
ngtcp2_path path
-
type ngtcp2_crypto_md
ngtcp2_crypto_md
is a wrapper around native message digest object.-
void *native_handle
native_handle
is a pointer to an underlying message digest object.
-
void *native_handle
-
type ngtcp2_crypto_aead
ngtcp2_crypto_aead
is a wrapper around native AEAD object.-
void *native_handle
native_handle
is a pointer to an underlying AEAD object.
-
size_t max_overhead
max_overhead
is the number of additional bytes which AEAD encryption needs on encryption.
-
void *native_handle
-
type ngtcp2_crypto_cipher
ngtcp2_crypto_cipher
is a wrapper around native cipher object.-
void *native_handle
native_handle
is a pointer to an underlying cipher object.
-
void *native_handle
-
type ngtcp2_crypto_aead_ctx
ngtcp2_crypto_aead_ctx
is a wrapper around native AEAD cipher context object. It should be initialized with a specific key. ngtcp2 library reuses this context object to encrypt or decrypt multiple packets.-
void *native_handle
native_handle
is a pointer to an underlying AEAD context object.
-
void *native_handle
-
type ngtcp2_crypto_cipher_ctx
ngtcp2_crypto_cipher_ctx
is a wrapper around native cipher context object. It should be initialized with a specific key. ngtcp2 library reuses this context object to encrypt or decrypt multiple packet headers.-
void *native_handle
native_handle
is a pointer to an underlying cipher context object.
-
void *native_handle
-
type ngtcp2_crypto_ctx
ngtcp2_crypto_ctx
is a convenient structure to bind all crypto related objects in one place. Usengtcp2_crypto_ctx_initial()
to initialize this struct for Initial packet encryption. For Handshake and 1-RTT packets, usengtcp2_crypto_ctx_tls()
. For 0-RTT packets, usengtcp2_crypto_ctx_tls_early()
.-
ngtcp2_crypto_aead aead
aead
is AEAD object.
-
ngtcp2_crypto_md md
md
is message digest object.
-
ngtcp2_crypto_cipher hp
hp
is header protection cipher.
-
uint64_t max_encryption
max_encryption
is the number of encryption which this key can be used with.
-
uint64_t max_decryption_failure
max_decryption_failure
is the number of decryption failure with this key.
-
ngtcp2_crypto_aead aead
-
type ngtcp2_version_cid
ngtcp2_version_cid
is a convenient struct to store the result ofngtcp2_pkt_decode_version_cid()
.
-
type ngtcp2_conn
ngtcp2_conn
represents a single QUIC connection.
-
typedef int (*ngtcp2_client_initial)(ngtcp2_conn *conn, void *user_data)
ngtcp2_client_initial
is invoked when client application asks TLS stack to produce first TLS cryptographic handshake data.This implementation of this callback must get the first handshake data from TLS stack, and pass it to ngtcp2 library using
ngtcp2_conn_submit_crypto_data()
function. Make sure that before callingngtcp2_conn_submit_crypto_data()
function, client application must create initial packet protection keys and IVs, and provide them to ngtcp2 library usingngtcp2_conn_install_initial_key()
.This callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_recv_client_initial)(ngtcp2_conn *conn, const ngtcp2_cid *dcid, void *user_data)
ngtcp2_recv_client_initial
is invoked when server receives Initial packet from client. An server application must implement this callback, and generate initial keys and IVs for both transmission and reception. Install them usingngtcp2_conn_install_initial_key()
. dcid is the Destination Connection ID in Initial packet received from client. It is used to derive initial packet protection keys.The callback function must return 0 if it succeeds. If an error occurs, return
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_recv_crypto_data)(ngtcp2_conn *conn, ngtcp2_encryption_level encryption_level, uint64_t offset, const uint8_t *data, size_t datalen, void *user_data)
:type`ngtcp2_recv_crypto_data` is invoked when crypto data is received. The received data is pointed by data, and its length is datalen. The offset specifies the offset where data is positioned. user_data is the arbitrary pointer passed to
ngtcp2_conn_client_new()
orngtcp2_conn_server_new()
. The ngtcp2 library ensures that the crypto data is passed to the application in the increasing order of offset. datalen is always strictly greater than 0. encryption_level indicates the encryption level where this data is received. Crypto data can never be received inngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_0RTT
.The application should provide the given data to TLS stack.
The callback function must return 0 if it succeeds, or one of the following negative error codes:
If the other value is returned, it is treated as
NGTCP2_ERR_CALLBACK_FAILURE
.If application encounters fatal error, return
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_handshake_completed)(ngtcp2_conn *conn, void *user_data)
ngtcp2_handshake_completed
is invoked when QUIC cryptographic handshake has completed.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_handshake_confirmed)(ngtcp2_conn *conn, void *user_data)
ngtcp2_handshake_confirmed
is invoked when QUIC cryptographic handshake is confirmed. The handshake confirmation means that both endpoints agree that handshake has finished.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_recv_version_negotiation)(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, const uint32_t *sv, size_t nsv, void *user_data)
ngtcp2_recv_version_negotiation
is invoked when Version Negotiation packet is received. hd is the pointer to the QUIC packet header object. The vector sv of nsv elements contains the QUIC version the server supports. Since Version Negotiation is only sent by server, this callback function is used by client only.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_recv_retry)(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, void *user_data)
ngtcp2_recv_retry
is invoked when Retry packet is received. This callback is client use only.Application must regenerate packet protection key, IV, and header protection key for Initial packets using the Destination Connection ID obtained by
hd->scid
, and install them by callingngtcp2_conn_install_initial_key()
.0-RTT data accepted by the ngtcp2 library will be automatically retransmitted as 0-RTT data by the library.
The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_encrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *plaintext, size_t plaintextlen, const uint8_t *nonce, size_t noncelen, const uint8_t *aad, size_t aadlen)
ngtcp2_encrypt
is invoked when the ngtcp2 library asks the application to encrypt packet payload. The packet payload to encrypt is passed as plaintext of length plaintextlen. The AEAD cipher is aead. aead_ctx is the AEAD cipher context object which is initialized with the specific encryption key. The nonce is passed as nonce of length noncelen. The Additional Authenticated Data is passed as aad of length aadlen.The implementation of this callback must encrypt plaintext using the negotiated cipher suite, and write the ciphertext into the buffer pointed by dest. dest has enough capacity to store the ciphertext and any additional AEAD tag data.
dest and plaintext may point to the same buffer.
The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_decrypt)(uint8_t *dest, const ngtcp2_crypto_aead *aead, const ngtcp2_crypto_aead_ctx *aead_ctx, const uint8_t *ciphertext, size_t ciphertextlen, const uint8_t *nonce, size_t noncelen, const uint8_t *aad, size_t aadlen)
ngtcp2_decrypt
is invoked when the ngtcp2 library asks the application to decrypt packet payload. The packet payload to decrypt is passed as ciphertext of length ciphertextlen. The AEAD cipher is aead. aead_ctx is the AEAD cipher context object which is initialized with the specific decryption key. The nonce is passed as nonce of length noncelen. The Additional Authenticated Data is passed as aad of length aadlen.The implementation of this callback must decrypt ciphertext using the negotiated cipher suite, and write the ciphertext into the buffer pointed by dest. dest has enough capacity to store the cleartext.
dest and ciphertext may point to the same buffer.
The callback function must return 0 if it succeeds. If TLS stack fails to decrypt data, return
NGTCP2_ERR_DECRYPT
. For any other errors, returnNGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_hp_mask)(uint8_t *dest, const ngtcp2_crypto_cipher *hp, const ngtcp2_crypto_cipher_ctx *hp_ctx, const uint8_t *sample)
ngtcp2_hp_mask
is invoked when the ngtcp2 library asks the application to produce a mask to encrypt or decrypt packet header. The encryption cipher is hp. hp_ctx is the cipher context object which is initialized with the specific header protection key. The sample is passed as sample which isNGTCP2_HP_SAMPLELEN
bytes long.The implementation of this callback must produce a mask using the header protection cipher suite specified by QUIC specification, and write the result into the buffer pointed by dest. The length of the mask must be at least
NGTCP2_HP_MASKLEN
. The library only uses the firstNGTCP2_HP_MASKLEN
bytes of the produced mask. The buffer pointed by dest is guaranteed to have at leastNGTCP2_HP_SAMPLELEN
bytes available for convenience.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library call return immediately.
-
typedef int (*ngtcp2_recv_stream_data)(ngtcp2_conn *conn, uint32_t flags, int64_t stream_id, uint64_t offset, const uint8_t *data, size_t datalen, void *user_data, void *stream_user_data)
ngtcp2_recv_stream_data
is invoked when stream data is received. The stream is specified by stream_id. flags is the bitwise-OR of zero or more ofNGTCP2_STREAM_DATA_FLAG_*
. If flags &NGTCP2_STREAM_DATA_FLAG_FIN
is nonzero, this portion of the data is the last data in this stream. offset is the offset where this data begins. The library ensures that data is passed to the application in the non-decreasing order of offset without any overlap. The data is passed as data of length datalen. datalen may be 0 if and only if fin is nonzero.If
NGTCP2_STREAM_DATA_FLAG_0RTT
is set in flags, it indicates that a part of or whole data was received in 0-RTT packet, and a handshake has not completed yet.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library return immediately.
-
typedef int (*ngtcp2_stream_open)(ngtcp2_conn *conn, int64_t stream_id, void *user_data)
ngtcp2_stream_open
is a callback function which is called when remote stream is opened by a remote endpoint. This function is not called if stream is opened by implicitly (we might reconsider this behaviour later).The implementation of this callback should return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_stream_close)(ngtcp2_conn *conn, uint32_t flags, int64_t stream_id, uint64_t app_error_code, void *user_data, void *stream_user_data)
ngtcp2_stream_close
is invoked when a stream is closed. This callback is not called when QUIC connection is closed before existing streams are closed. flags is the bitwise-OR of zero or more ofNGTCP2_STREAM_CLOSE_FLAG_*
. app_error_code indicates the error code of this closure ifNGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET
is set in flags. If it is not set, the stream was closed without any error code, which generally means success.app_error_code is the first application error code sent by a local endpoint, or received from a remote endpoint. If a stream is closed cleanly, no application error code is exchanged. Since QUIC stack does not know the application error code which indicates “no errors”, app_error_code is set to 0 and
NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET
is not set in flags in this case.The implementation of this callback should return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_stream_reset)(ngtcp2_conn *conn, int64_t stream_id, uint64_t final_size, uint64_t app_error_code, void *user_data, void *stream_user_data)
ngtcp2_stream_reset
is invoked when a stream identified by stream_id is reset by a remote endpoint.The implementation of this callback should return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_acked_stream_data_offset)(ngtcp2_conn *conn, int64_t stream_id, uint64_t offset, uint64_t datalen, void *user_data, void *stream_user_data)
ngtcp2_acked_stream_data_offset
is a callback function which is called when stream data in range [offset, offset + datalen) is acknowledged, and application can free the portion of data. For a given stream_id, this callback is called sequentially in increasing order of offset without any overlap. datalen is normally strictly greater than 0. One exception is that when a STREAM frame has fin flag set and 0 length data, this callback is invoked with datalen == 0.If a stream is closed prematurely, and stream data is still in-flight, this callback function is not called for those data. After
ngtcp2_callbacks.stream_close
is called for a particular stream, conn does not touch data for the closed stream again, and application can free all unacknowledged stream data.The implementation of this callback should return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_recv_stateless_reset)(ngtcp2_conn *conn, const ngtcp2_pkt_stateless_reset *sr, void *user_data)
ngtcp2_recv_stateless_reset
is a callback function which is called when Stateless Reset packet is received. The stateless reset details are given in sr.The implementation of this callback should return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_extend_max_streams)(ngtcp2_conn *conn, uint64_t max_streams, void *user_data)
ngtcp2_extend_max_streams
is a callback function which is called every time max stream ID is strictly extended. max_streams is the cumulative number of streams which an endpoint can open.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_extend_max_stream_data)(ngtcp2_conn *conn, int64_t stream_id, uint64_t max_data, void *user_data, void *stream_user_data)
ngtcp2_extend_max_stream_data
is a callback function which is invoked when max stream data is extended. stream_id identifies the stream. max_data is a cumulative number of bytes an endpoint can send on this stream.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef void (*ngtcp2_rand)(uint8_t *dest, size_t destlen, const ngtcp2_rand_ctx *rand_ctx)
ngtcp2_rand
is a callback function to get random data of length destlen. Application must fill random destlen bytes to the buffer pointed by dest. The generated data is used only in non-cryptographic context.
-
typedef int (*ngtcp2_get_new_connection_id)(ngtcp2_conn *conn, ngtcp2_cid *cid, uint8_t *token, size_t cidlen, void *user_data)
ngtcp2_get_new_connection_id
is a callback function to ask an application for new connection ID. Application must generate new unused connection ID with the exact cidlen bytes, and store it in cid. It also has to generate a stateless reset token, and store it in token. The length of stateless reset token isNGTCP2_STATELESS_RESET_TOKENLEN
and it is guaranteed that the buffer pointed by token has the sufficient space to store the token.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_remove_connection_id)(ngtcp2_conn *conn, const ngtcp2_cid *cid, void *user_data)
ngtcp2_remove_connection_id
is a callback function which notifies the application that connection ID cid is no longer used by a remote endpoint. This Connection ID was previously offered by a local endpoint, and a remote endpoint could use it as Destination Connection ID when sending QUIC packet.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_update_key)(ngtcp2_conn *conn, uint8_t *rx_secret, uint8_t *tx_secret, ngtcp2_crypto_aead_ctx *rx_aead_ctx, uint8_t *rx_iv, ngtcp2_crypto_aead_ctx *tx_aead_ctx, uint8_t *tx_iv, const uint8_t *current_rx_secret, const uint8_t *current_tx_secret, size_t secretlen, void *user_data)
ngtcp2_update_key
is a callback function which tells the application that it must generate new packet protection keying materials and AEAD cipher context objects with new keys. The current set of secrets are given as current_rx_secret and current_tx_secret of length secretlen. They are decryption and encryption secrets respectively.The application must generate new secrets and keys for both encryption and decryption. It must write decryption secret and IV to the buffer pointed by rx_secret and rx_iv respectively. It also must create new AEAD cipher context object with new decryption key and initialize rx_aead_ctx with it. Similarly, write encryption secret and IV to the buffer pointed by tx_secret and tx_iv. Create new AEAD cipher context object with new encryption key and initialize tx_aead_ctx with it. All given buffers have the enough capacity to store secret, key and IV.
The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_path_validation)(ngtcp2_conn *conn, uint32_t flags, const ngtcp2_path *path, const ngtcp2_path *old_path, ngtcp2_path_validation_result res, void *user_data)
ngtcp2_path_validation
is a callback function which tells an application the outcome of path validation. flags is zero or more ofNGTCP2_PATH_VALIDATION_FLAG_*
. path is the path that was validated. old_path is the path that is previously used before a local endpoint has migrated to path if old_path is not NULL. If res isngtcp2_path_validation_result.NGTCP2_PATH_VALIDATION_RESULT_SUCCESS
, the path validation succeeded. If res isngtcp2_path_validation_result.NGTCP2_PATH_VALIDATION_RESULT_FAILURE
, the path validation failed.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_select_preferred_addr)(ngtcp2_conn *conn, ngtcp2_path *dest, const ngtcp2_preferred_addr *paddr, void *user_data)
ngtcp2_select_preferred_addr
is a callback function which asks a client application to choose server address from preferred addresses paddr received from server. An application should write a network path for a selected preferred address in dest. More specifically, the selected preferred address must be set todest->remote
, a client source address must be set todest->local
. If a client source address does not change for the new server address, leavedest->local
unmodified, or copy the value oflocal
field of the current network path obtained fromngtcp2_conn_get_path()
. Bothdest->local.addr
anddest->remote.addr
point to buffers which are at least sizeof(ngtcp2_sockaddr_union
) bytes long, respectively. If an application denies the preferred addresses, just leave dest unmodified (or setdest->remote.addrlen
to 0), and return 0.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_connection_id_status)(ngtcp2_conn *conn, ngtcp2_connection_id_status_type type, uint64_t seq, const ngtcp2_cid *cid, const uint8_t *token, void *user_data)
ngtcp2_connection_id_status
is a callback function which is called when the status of Destination Connection ID changes.token is the associated stateless reset token, and it is
NULL
if no token is present.type is the one of the value defined in
ngtcp2_connection_id_status_type
. The new value might be added in the future release.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_recv_new_token)(ngtcp2_conn *conn, const uint8_t *token, size_t tokenlen, void *user_data)
ngtcp2_recv_new_token
is a callback function which is called when new token is received from server. This callback is client use only.token is the received token of length tokenlen bytes long.
The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef void (*ngtcp2_delete_crypto_aead_ctx)(ngtcp2_conn *conn, ngtcp2_crypto_aead_ctx *aead_ctx, void *user_data)
ngtcp2_delete_crypto_aead_ctx
is a callback function which must delete the native object pointed byaead_ctx->native_handle
.
-
typedef void (*ngtcp2_delete_crypto_cipher_ctx)(ngtcp2_conn *conn, ngtcp2_crypto_cipher_ctx *cipher_ctx, void *user_data)
ngtcp2_delete_crypto_cipher_ctx
is a callback function which must delete the native object pointed bycipher_ctx->native_handle
.
-
typedef int (*ngtcp2_recv_datagram)(ngtcp2_conn *conn, uint32_t flags, const uint8_t *data, size_t datalen, void *user_data)
ngtcp2_recv_datagram
is invoked when DATAGRAM frame is received. flags is bitwise-OR of zero or more ofNGTCP2_DATAGRAM_FLAG_*
.If
NGTCP2_DATAGRAM_FLAG_0RTT
is set in flags, it indicates that DATAGRAM frame was received in 0-RTT packet, and a handshake has not completed yet.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library return immediately.
-
typedef int (*ngtcp2_ack_datagram)(ngtcp2_conn *conn, uint64_t dgram_id, void *user_data)
ngtcp2_ack_datagram
is invoked when a packet which contains DATAGRAM frame which is identified by dgram_id is acknowledged. dgram_id is the valued passed tongtcp2_conn_writev_datagram()
.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library return immediately.
-
typedef int (*ngtcp2_lost_datagram)(ngtcp2_conn *conn, uint64_t dgram_id, void *user_data)
ngtcp2_lost_datagram
is invoked when a packet which contains DATAGRAM frame which is identified by dgram_id is declared lost. dgram_id is the valued passed tongtcp2_conn_writev_datagram()
. Note that the loss might be spurious, and DATAGRAM frame might be acknowledged later.The callback function must return 0 if it succeeds, or
NGTCP2_ERR_CALLBACK_FAILURE
which makes the library return immediately.
-
typedef int (*ngtcp2_get_path_challenge_data)(ngtcp2_conn *conn, uint8_t *data, void *user_data)
ngtcp2_get_path_challenge_data
is a callback function to ask an application for new data that is sent in PATH_CHALLENGE frame. Application must generate new unpredictable, exactlyNGTCP2_PATH_CHALLENGE_DATALEN
bytes of random data, and store them into the buffer pointed by data.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_stream_stop_sending)(ngtcp2_conn *conn, int64_t stream_id, uint64_t app_error_code, void *user_data, void *stream_user_data)
ngtcp2_stream_stop_sending
is invoked when a stream is no longer read by a local endpoint before it receives all stream data. This function is called at most once per stream. app_error_code is the error code passed tongtcp2_conn_shutdown_stream_read()
orngtcp2_conn_shutdown_stream()
.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_version_negotiation)(ngtcp2_conn *conn, uint32_t version, const ngtcp2_cid *client_dcid, void *user_data)
ngtcp2_version_negotiation
is invoked when the compatible version negotiation takes place. For client, it is called when it sees a change in version field of a long header packet. This callback function might be called multiple times for client. For server, it is called once when the version is negotiated.The implementation of this callback must install new Initial keys for version and Destination Connection ID client_dcid from client. Use
ngtcp2_conn_install_vneg_initial_key()
to install keys.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_recv_key)(ngtcp2_conn *conn, ngtcp2_encryption_level level, void *user_data)
ngtcp2_recv_key
is invoked when new key is installed to conn during QUIC cryptographic handshake.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
typedef int (*ngtcp2_tls_early_data_rejected)(ngtcp2_conn *conn, void *user_data)
ngtcp2_tls_early_data_rejected
is invoked when early data was rejected by server during TLS handshake, or client decided not to attempt early data.The callback function must return 0 if it succeeds. Returning
NGTCP2_ERR_CALLBACK_FAILURE
makes the library call return immediately.
-
type ngtcp2_callbacks
ngtcp2_callbacks
holds a set of callback functions.-
ngtcp2_client_initial client_initial
client_initial
is a callback function which is invoked when client asks TLS stack to produce first TLS cryptographic handshake message. This callback function must be specified for a client application.
-
ngtcp2_recv_client_initial recv_client_initial
recv_client_initial
is a callback function which is invoked when a server receives the first Initial packet from client. This callback function must be specified for a server application.
-
ngtcp2_recv_crypto_data recv_crypto_data
recv_crypto_data
is a callback function which is invoked when cryptographic data (CRYPTO frame, in other words, TLS message) is received. This callback function must be specified.
-
ngtcp2_handshake_completed handshake_completed
handshake_completed
is a callback function which is invoked when QUIC cryptographic handshake has completed. This callback function is optional.
-
ngtcp2_recv_version_negotiation recv_version_negotiation
recv_version_negotiation
is a callback function which is invoked when Version Negotiation packet is received by a client. This callback function is optional.
-
ngtcp2_encrypt encrypt
encrypt
is a callback function which is invoked to encrypt a QUIC packet. This callback function must be specified.
-
ngtcp2_decrypt decrypt
decrypt
is a callback function which is invoked to decrypt a QUIC packet. This callback function must be specified.
-
ngtcp2_hp_mask hp_mask
hp_mask
is a callback function which is invoked to get a mask to encrypt or decrypt QUIC packet header. This callback function must be specified.
-
ngtcp2_recv_stream_data recv_stream_data
recv_stream_data
is a callback function which is invoked when stream data, which includes application data, is received. This callback function is optional.
-
ngtcp2_acked_stream_data_offset acked_stream_data_offset
acked_stream_data_offset
is a callback function which is invoked when stream data, which includes application data, is acknowledged by a remote endpoint. It tells an application the largest offset of acknowledged stream data without a gap so that application can free memory for the data up to that offset. This callback function is optional.
-
ngtcp2_stream_open stream_open
stream_open
is a callback function which is invoked when new remote stream is opened by a remote endpoint. This callback function is optional.
-
ngtcp2_stream_close stream_close
stream_close
is a callback function which is invoked when a stream is closed. This callback function is optional.
-
ngtcp2_recv_stateless_reset recv_stateless_reset
recv_stateless_reset
is a callback function which is invoked when Stateless Reset packet is received. This callback function is optional.
-
ngtcp2_recv_retry recv_retry
recv_retry
is a callback function which is invoked when a client receives Retry packet. For client, this callback function must be specified. Server never receive Retry packet.
-
ngtcp2_extend_max_streams extend_max_local_streams_bidi
extend_max_local_streams_bidi
is a callback function which is invoked when the number of bidirectional stream which a local endpoint can open is increased. This callback function is optional.
-
ngtcp2_extend_max_streams extend_max_local_streams_uni
extend_max_local_streams_uni
is a callback function which is invoked when the number of unidirectional stream which a local endpoint can open is increased. This callback function is optional.
-
ngtcp2_rand rand
rand
is a callback function which is invoked when the library needs random data. This callback function must be specified.
-
ngtcp2_get_new_connection_id get_new_connection_id
get_new_connection_id
is a callback function which is invoked when the library needs new connection ID. This callback function must be specified.
-
ngtcp2_remove_connection_id remove_connection_id
remove_connection_id
is a callback function which notifies an application that connection ID is no longer used by a remote endpoint. This callback function is optional.
-
ngtcp2_update_key update_key
update_key
is a callback function which is invoked when the library tells an application that it must update keying materials, and install new keys. This callback function must be specified.
-
ngtcp2_path_validation path_validation
path_validation
is a callback function which is invoked when path validation completed. This callback function is optional.
-
ngtcp2_select_preferred_addr select_preferred_addr
select_preferred_addr
is a callback function which is invoked when the library asks a client to select preferred address presented by a server. If not set, client ignores preferred addresses. This callback function is optional.
-
ngtcp2_stream_reset stream_reset
stream_reset
is a callback function which is invoked when a stream is reset by a remote endpoint. This callback function is optional.
-
ngtcp2_extend_max_streams extend_max_remote_streams_bidi
extend_max_remote_streams_bidi
is a callback function which is invoked when the number of bidirectional streams which a remote endpoint can open is increased. This callback function is optional.
-
ngtcp2_extend_max_streams extend_max_remote_streams_uni
extend_max_remote_streams_uni
is a callback function which is invoked when the number of unidirectional streams which a remote endpoint can open is increased. This callback function is optional.
-
ngtcp2_extend_max_stream_data extend_max_stream_data
extend_max_stream_data
is callback function which is invoked when the maximum offset of stream data that a local endpoint can send is increased. This callback function is optional.
-
ngtcp2_connection_id_status dcid_status
dcid_status
is a callback function which is invoked when the new Destination Connection ID is activated, or the activated Destination Connection ID is now deactivated. This callback function is optional.
-
ngtcp2_handshake_confirmed handshake_confirmed
handshake_confirmed
is a callback function which is invoked when both endpoints agree that handshake has finished. This field is ignored by server becausehandshake_completed
also indicates the handshake confirmation for server. This callback function is optional.
-
ngtcp2_recv_new_token recv_new_token
recv_new_token
is a callback function which is invoked when new token is received from server. This field is ignored by server. This callback function is optional.
-
ngtcp2_delete_crypto_aead_ctx delete_crypto_aead_ctx
delete_crypto_aead_ctx
is a callback function which deletes a given AEAD cipher context object. This callback function must be specified.
-
ngtcp2_delete_crypto_cipher_ctx delete_crypto_cipher_ctx
delete_crypto_cipher_ctx
is a callback function which deletes a given cipher context object. This callback function must be specified.
-
ngtcp2_recv_datagram recv_datagram
recv_datagram
is a callback function which is invoked when DATAGRAM frame is received. This callback function is optional.
-
ngtcp2_ack_datagram ack_datagram
ack_datagram
is a callback function which is invoked when a QUIC packet containing DATAGRAM frame is acknowledged by a remote endpoint. This callback function is optional.
-
ngtcp2_lost_datagram lost_datagram
lost_datagram
is a callback function which is invoked when a QUIC packet containing DATAGRAM frame is declared lost. This callback function is optional.
-
ngtcp2_get_path_challenge_data get_path_challenge_data
get_path_challenge_data
is a callback function which is invoked when the library needs new data sent along with PATH_CHALLENGE frame. This callback must be specified.
-
ngtcp2_stream_stop_sending stream_stop_sending
stream_stop_sending
is a callback function which is invoked when a local endpoint no longer reads from a stream before it receives all stream data. This callback function is optional.
-
ngtcp2_version_negotiation version_negotiation
version_negotiation
is a callback function which is invoked when the compatible version negotiation takes place. This callback function must be specified.
-
ngtcp2_recv_key recv_rx_key
recv_rx_key
is a callback function which is invoked when a new key for decrypting packets is installed during QUIC cryptographic handshake. It is not called forngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_INITIAL
.
-
ngtcp2_recv_key recv_tx_key
recv_tx_key
is a callback function which is invoked when a new key for encrypting packets is installed during QUIC cryptographic handshake. It is not called forngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_INITIAL
.
-
ngtcp2_tls_early_data_rejected tls_early_data_rejected
tls_early_data_rejected
is a callback function which is invoked when server rejected early data during TLS handshake, or client decided not to attempt early data. This callback function is only used by client.
-
ngtcp2_client_initial client_initial
-
type ngtcp2_cid_token
ngtcp2_cid_token
is the convenient struct to store Connection ID, its associated path, and stateless reset token.-
ngtcp2_cid cid
cid
is Connection ID.
-
ngtcp2_path_storage ps
ps
is the path which this Connection ID is associated with.
-
uint8_t token[NGTCP2_STATELESS_RESET_TOKENLEN]
token
is the stateless reset token for this Connection ID.
-
uint8_t token_present
token_present
is nonzero if token contains stateless reset token.
-
ngtcp2_cid cid
-
type ngtcp2_ccerr
ngtcp2_ccerr
contains connection error code, its type, a frame type that caused this error, and the optional reason phrase.-
ngtcp2_ccerr_type type
type
is the type of this error.
-
uint64_t error_code
error_code
is the error code for connection closure. Its interpretation depends ontype
.
-
uint64_t frame_type
frame_type
is the type of QUIC frame which triggers this connection error. This field is set to 0 if the frame type is unknown.
-
ngtcp2_ccerr_type type
-
type ngtcp2_info
ngtcp2_info
is whatngtcp2_version()
returns. It holds information about the particular ngtcp2 version.-
int age
age
is the age of this struct. This instance of ngtcp2 sets it toNGTCP2_VERSION_AGE
but a future version may bump it and add more struct fields at the bottom
-
int version_num
version_num
is theNGTCP2_VERSION_NUM
number (sinceage
==1)
-
const char *version_str
version_str
points to theNGTCP2_VERSION
string (sinceage
==1)
-
int age