Loading...
Searching...
No Matches
qlog.h
Go to the documentation of this file.
1
15
16#ifndef IMQUIC_QLOG_H
17#define IMQUIC_QLOG_H
18
19#include <glib.h>
20
23gboolean imquic_qlog_is_supported(void);
24
25#ifdef HAVE_QLOG
26#include <jansson.h>
27
28#include "refcount.h"
29
33
34#define IMQUIC_QLOG_TRIGGER_INTERNAL_ERROR "internal_error"
35#define IMQUIC_QLOG_TRIGGER_REJECTED "rejected"
36#define IMQUIC_QLOG_TRIGGER_UNSUPPORTED "unsupported"
37#define IMQUIC_QLOG_TRIGGER_INVALID "invalid"
38#define IMQUIC_QLOG_TRIGGER_DUPLICATE "duplicate"
39#define IMQUIC_QLOG_TRIGGER_CONNECTION_UNKNOWN "connection_unknown"
40#define IMQUIC_QLOG_TRIGGER_DECRYPTION_FAILURE "decryption_failure"
41#define IMQUIC_QLOG_TRIGGER_KEY_UNAVAILABLE "key_unavailable"
42#define IMQUIC_QLOG_TRIGGER_GENERAL "general"
44
48
75
95imquic_qlog *imquic_qlog_create(char *id, gboolean sequential, gboolean is_server,
96 char *filename, gboolean quic, gboolean quic_stream, gboolean http3,
97 gboolean roq, gboolean roq_packets,
98 gboolean moq, gboolean moq_messages, gboolean moq_objects);
102void imquic_qlog_set_odcid(imquic_qlog *qlog, void *odcid);
114
118
122json_t *imquic_qlog_event_prepare(const char *name);
126json_t *imquic_qlog_event_add_data(json_t *event);
132void imquic_qlog_event_add_raw(json_t *parent, const char *name, uint8_t *bytes, size_t length);
139void imquic_qlog_event_add_path_endpoint_info(json_t *parent, const char *name, const char *ip, uint16_t port);
143void imquic_qlog_append_event(imquic_qlog *qlog, json_t *event);
150void imquic_qlog_connection_started(imquic_qlog *qlog, const char *local_ip, uint16_t local_port, const char *remote_ip, uint16_t remote_port);
157void imquic_qlog_connection_closed(imquic_qlog *qlog, gboolean local, uint32_t cc_code, uint32_t app_code, const char *reason);
162void imquic_qlog_version_information(imquic_qlog *qlog, uint32_t version, uint32_t chosen);
170void imquic_qlog_alpn_information(imquic_qlog *qlog, uint8_t *server_alpn, size_t server_alpn_len,
171 uint8_t *client_alpn, size_t client_alpn_len, char *chosen);
180json_t *imquic_qlog_prepare_parameters_set(imquic_qlog *qlog, gboolean local, gboolean resumption, gboolean early_data);
184void imquic_qlog_parameters_set(imquic_qlog *qlog, json_t *params);
192json_t *imquic_qlog_prepare_packet_header(const char *type, void *scid, void *dcid);
198json_t *imquic_qlog_prepare_packet_frame(const char *type);
205void imquic_qlog_packet_sent(imquic_qlog *qlog, json_t *header, json_t *frames, uint32_t id, size_t length);
212void imquic_qlog_packet_received(imquic_qlog *qlog, json_t *header, json_t *frames, uint32_t id, size_t length);
219void imquic_qlog_packet_dropped(imquic_qlog *qlog, json_t *header, uint32_t id, size_t length, const char *trigger);
224void imquic_qlog_udp_datagrams_sent(imquic_qlog *qlog, uint32_t id, size_t length);
229void imquic_qlog_udp_datagrams_received(imquic_qlog *qlog, uint32_t id, size_t length);
234void imquic_qlog_udp_datagrams_dropped(imquic_qlog *qlog, uint32_t id, size_t length);
241void imquic_qlog_stream_state_updated(imquic_qlog *qlog, uint64_t id, const char *type, const char *side, const char *state);
248void imquic_qlog_key_updated(imquic_qlog *qlog, const char *type, uint8_t *key, size_t key_len, uint64_t key_phase);
250
251#endif
252
253#endif
GMutex imquic_mutex
imquic mutex implementation
Definition mutex.h:18
void imquic_qlog_connection_closed(imquic_qlog *qlog, gboolean local, uint32_t cc_code, uint32_t app_code, const char *reason)
Add a connection_closed event.
Definition qlog.c:322
json_t * imquic_qlog_prepare_packet_header(const char *type, void *scid, void *dcid)
Prepare a header object, but don't add it yet.
Definition qlog.c:419
void imquic_qlog_alpn_information(imquic_qlog *qlog, uint8_t *server_alpn, size_t server_alpn_len, uint8_t *client_alpn, size_t client_alpn_len, char *chosen)
Add a alpn_information event.
Definition qlog.c:351
json_t * imquic_qlog_prepare_packet_frame(const char *type)
Prepare a frames object, but don't add it yet.
Definition qlog.c:446
int imquic_qlog_save_to_file(imquic_qlog *qlog)
Save the current status of the QLOG structure to JSON.
Definition qlog.c:166
void imquic_qlog_append_event(imquic_qlog *qlog, json_t *event)
Helper to add a complete event object to an existing QLOG instance.
Definition qlog.c:266
void imquic_qlog_event_add_path_endpoint_info(json_t *parent, const char *name, const char *ip, uint16_t port)
Helper to add/append a PathEndpointInfo object to the specified object or array.
Definition qlog.c:244
void imquic_qlog_version_information(imquic_qlog *qlog, uint32_t version, uint32_t chosen)
Add a version_information event.
Definition qlog.c:338
json_t * imquic_qlog_event_add_data(json_t *event)
Helper to add a data object to an event and return a pointer to it.
Definition qlog.c:218
json_t * imquic_qlog_event_prepare(const char *name)
Helper to create a new QLOG event by name.
Definition qlog.c:210
void imquic_qlog_packet_dropped(imquic_qlog *qlog, json_t *header, uint32_t id, size_t length, const char *trigger)
Add a packet_dropped event.
Definition qlog.c:494
void imquic_qlog_event_add_raw(json_t *parent, const char *name, uint8_t *bytes, size_t length)
Helper to add/append a raw object to the specified object or array.
Definition qlog.c:226
void imquic_qlog_stream_state_updated(imquic_qlog *qlog, uint64_t id, const char *type, const char *side, const char *state)
Add a stream_state_updated event.
Definition qlog.c:552
void imquic_qlog_udp_datagrams_received(imquic_qlog *qlog, uint32_t id, size_t length)
Add a udp_datagrams_received event.
Definition qlog.c:527
void imquic_qlog_destroy(imquic_qlog *qlog)
Helper method to destroy an existing QLOG instance.
Definition qlog.c:155
void imquic_qlog_udp_datagrams_dropped(imquic_qlog *qlog, uint32_t id, size_t length)
Add a udp_datagrams_dropped event.
Definition qlog.c:541
void imquic_qlog_udp_datagrams_sent(imquic_qlog *qlog, uint32_t id, size_t length)
Add a udp_datagrams_sent event.
Definition qlog.c:513
void imquic_qlog_set_odcid(imquic_qlog *qlog, void *odcid)
Set/update the Original Destination Connection ID.
Definition qlog.c:145
gboolean imquic_qlog_is_supported(void)
Helper method to check if QLOG is supported at runtime.
Definition qlog.c:28
void imquic_qlog_packet_received(imquic_qlog *qlog, json_t *header, json_t *frames, uint32_t id, size_t length)
Add a packet_received event.
Definition qlog.c:474
void imquic_qlog_packet_sent(imquic_qlog *qlog, json_t *header, json_t *frames, uint32_t id, size_t length)
Add a packet_sent event.
Definition qlog.c:454
imquic_qlog * imquic_qlog_create(char *id, gboolean sequential, gboolean is_server, char *filename, gboolean quic, gboolean quic_stream, gboolean http3, gboolean roq, gboolean roq_packets, gboolean moq, gboolean moq_messages, gboolean moq_objects)
Helper method to initialize a new QLOG instance.
Definition qlog.c:51
json_t * imquic_qlog_prepare_parameters_set(imquic_qlog *qlog, gboolean local, gboolean resumption, gboolean early_data)
Prepare a parameters_set object, but don't add it yet.
Definition qlog.c:396
void imquic_qlog_parameters_set(imquic_qlog *qlog, json_t *params)
Add a parameters_set event.
Definition qlog.c:408
void imquic_qlog_key_updated(imquic_qlog *qlog, const char *type, uint8_t *key, size_t key_len, uint64_t key_phase)
Add a key_updated event.
Definition qlog.c:567
void imquic_qlog_connection_started(imquic_qlog *qlog, const char *local_ip, uint16_t local_port, const char *remote_ip, uint16_t remote_port)
Add a connection_started event.
Definition qlog.c:312
Reference counter mechanism.
QLOG instance.
Definition qlog.h:49
gboolean is_server
Whether this is for a client or server connection.
Definition qlog.h:55
gboolean quic
Whether QUIC and/or HTTP/3 and/or RoQ and/or MoQT events should be saved.
Definition qlog.h:57
json_t * root
Jansson JSON instance.
Definition qlog.h:59
FILE * file
File to save the JSON file to.
Definition qlog.h:67
gboolean roq_packets
Definition qlog.h:57
imquic_mutex mutex
Mutex.
Definition qlog.h:69
gboolean moq_messages
Definition qlog.h:57
imquic_refcount ref
Reference counter.
Definition qlog.h:73
gboolean http3
Definition qlog.h:57
volatile gint destroyed
Whether this instance has been destroyed (reference counting)
Definition qlog.h:71
char * filename
Path to where the JSON file should be saved.
Definition qlog.h:65
gboolean moq_objects
Definition qlog.h:57
json_t * common
Reference to the common fields entry.
Definition qlog.h:61
gboolean quic_stream
Definition qlog.h:57
gboolean sequential
Whether sequential JSON will be used, instead of regular JSON.
Definition qlog.h:53
char * id
Instance ID.
Definition qlog.h:51
gboolean roq
Definition qlog.h:57
gboolean moq
Definition qlog.h:57
json_t * events
Reference to the events array.
Definition qlog.h:63
Definition refcount.h:77