1/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc.  See LICENSE. */
2/*
3 * lsquic_ev_log.h -- Event logger
4 */
5
6#ifndef LSQUIC_EV_LOG_H
7#define LSQUIC_EV_LOG_H 1
8
9#include "lsquic_int_types.h"
10#include "lsquic_qlog.h"
11
12struct ack_info;
13struct http_prio_frame;
14struct lsquic_http_headers;
15struct lsquic_packet_in;
16struct lsquic_packet_out;
17struct parse_funcs;
18struct stream_frame;
19struct uncompressed_headers;
20struct stack_st_X509;
21
22
23/* Log a generic event not tied to any particular connection */
24#define EV_LOG_GENERIC_EVENT(...) do {                                      \
25    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
26        lsquic_logger_log1(LSQ_LOG_DEBUG, LSQLM_EVENT, __VA_ARGS__);        \
27} while (0)
28
29/* Log a generic event associated with connection `cid' */
30#define EV_LOG_CONN_EVENT(cid, ...) do {                                    \
31    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
32        lsquic_logger_log2(LSQ_LOG_DEBUG, LSQLM_EVENT, cid, __VA_ARGS__);   \
33} while (0)
34
35void
36lsquic_ev_log_packet_in (const lsquic_cid_t *, const struct lsquic_packet_in *);
37
38#define EV_LOG_PACKET_IN(...) do {                                          \
39    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
40        lsquic_ev_log_packet_in(__VA_ARGS__);                               \
41} while (0)
42
43void
44lsquic_ev_log_ack_frame_in (const lsquic_cid_t *, const struct ack_info *);
45
46#define EV_LOG_ACK_FRAME_IN(...) do {                                       \
47    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
48        lsquic_ev_log_ack_frame_in(__VA_ARGS__);                            \
49} while (0)
50
51void
52lsquic_ev_log_stream_frame_in (const lsquic_cid_t *,
53                                                const struct stream_frame *);
54
55#define EV_LOG_STREAM_FRAME_IN(...) do {                                    \
56    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
57        lsquic_ev_log_stream_frame_in(__VA_ARGS__);                         \
58} while (0)
59
60void
61lsquic_ev_log_crypto_frame_in (const lsquic_cid_t *,
62                            const struct stream_frame *, unsigned enc_level);
63
64#define EV_LOG_CRYPTO_FRAME_IN(...) do {                                    \
65    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
66        lsquic_ev_log_crypto_frame_in(__VA_ARGS__);                         \
67} while (0)
68
69void
70lsquic_ev_log_window_update_frame_in (const lsquic_cid_t *, lsquic_stream_id_t,
71                                                            uint64_t offset);
72
73#define EV_LOG_WINDOW_UPDATE_FRAME_IN(...) do {                             \
74    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
75        lsquic_ev_log_window_update_frame_in(__VA_ARGS__);                  \
76} while (0)
77
78void
79lsquic_ev_log_blocked_frame_in (const lsquic_cid_t *, lsquic_stream_id_t);
80
81#define EV_LOG_BLOCKED_FRAME_IN(...) do {                                   \
82    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
83        lsquic_ev_log_blocked_frame_in(__VA_ARGS__);                        \
84} while (0)
85
86void
87lsquic_ev_log_stop_waiting_frame_in (const lsquic_cid_t *, lsquic_packno_t);
88
89#define EV_LOG_STOP_WAITING_FRAME_IN(...) do {                              \
90    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
91        lsquic_ev_log_stop_waiting_frame_in(__VA_ARGS__);                   \
92} while (0)
93
94void
95lsquic_ev_log_connection_close_frame_in (const lsquic_cid_t *,
96                    uint64_t error_code, int reason_len, const char *reason);
97
98#define EV_LOG_CONNECTION_CLOSE_FRAME_IN(...) do {                          \
99    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
100        lsquic_ev_log_connection_close_frame_in(__VA_ARGS__);               \
101} while (0)
102
103void
104lsquic_ev_log_goaway_frame_in (const lsquic_cid_t *, uint32_t error_code,
105                lsquic_stream_id_t, int reason_len, const char *reason);
106
107#define EV_LOG_GOAWAY_FRAME_IN(...) do {                                    \
108    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
109        lsquic_ev_log_goaway_frame_in(__VA_ARGS__);                         \
110} while (0)
111
112void
113lsquic_ev_log_rst_stream_frame_in (const lsquic_cid_t *, lsquic_stream_id_t,
114                                        uint64_t offset, uint64_t error_code);
115
116#define EV_LOG_RST_STREAM_FRAME_IN(...) do {                                \
117    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
118        lsquic_ev_log_rst_stream_frame_in(__VA_ARGS__);                     \
119} while (0)
120
121void
122lsquic_ev_log_stop_sending_frame_in (const lsquic_cid_t *,lsquic_stream_id_t,
123                                                        uint64_t error_code);
124
125#define EV_LOG_STOP_SENDING_FRAME_IN(...) do {                              \
126    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
127        lsquic_ev_log_stop_sending_frame_in(__VA_ARGS__);                   \
128} while (0)
129
130void
131lsquic_ev_log_padding_frame_in (const lsquic_cid_t *, size_t len);
132
133#define EV_LOG_PADDING_FRAME_IN(...) do {                                   \
134    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
135        lsquic_ev_log_padding_frame_in(__VA_ARGS__);                        \
136} while (0)
137
138void
139lsquic_ev_log_ping_frame_in (const lsquic_cid_t *);
140
141#define EV_LOG_PING_FRAME_IN(...) do {                                      \
142    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
143        lsquic_ev_log_ping_frame_in(__VA_ARGS__);                           \
144} while (0)
145
146void
147lsquic_ev_log_packet_created (const lsquic_cid_t *,
148                                            const struct lsquic_packet_out *);
149
150#define EV_LOG_PACKET_CREATED(...) do {                                     \
151    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
152        lsquic_ev_log_packet_created(__VA_ARGS__);                          \
153} while (0)
154
155void
156lsquic_ev_log_packet_sent (const lsquic_cid_t *,
157                                            const struct lsquic_packet_out *);
158
159#define EV_LOG_PACKET_SENT(...) do {                                        \
160    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
161        lsquic_ev_log_packet_sent(__VA_ARGS__);                             \
162} while (0)
163
164void
165lsquic_ev_log_packet_not_sent (const lsquic_cid_t *,
166                                            const struct lsquic_packet_out *);
167
168#define EV_LOG_PACKET_NOT_SENT(...) do {                                    \
169    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
170        lsquic_ev_log_packet_not_sent(__VA_ARGS__);                         \
171} while (0)
172
173void
174lsquic_ev_log_http_headers_in (const lsquic_cid_t *, int is_server,
175                                        const struct uncompressed_headers *);
176
177#define EV_LOG_HTTP_HEADERS_IN(...) do {                                    \
178    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
179        lsquic_ev_log_http_headers_in(__VA_ARGS__);                         \
180} while (0)
181
182void
183lsquic_ev_log_action_stream_frame (const lsquic_cid_t *,
184                       const struct parse_funcs *pf,
185                       const unsigned char *, size_t len, const char *action);
186
187#define EV_LOG_GENERATED_STREAM_FRAME(...) do {                             \
188    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
189        lsquic_ev_log_action_stream_frame(__VA_ARGS__, "generated");        \
190} while (0)
191
192#define EV_LOG_UPDATED_STREAM_FRAME(...) do {                               \
193    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
194        lsquic_ev_log_action_stream_frame(__VA_ARGS__, "updated");          \
195} while (0)
196
197void
198lsquic_ev_log_generated_crypto_frame (const lsquic_cid_t *,
199                       const struct parse_funcs *pf,
200                       const unsigned char *, size_t len);
201
202#define EV_LOG_GENERATED_CRYPTO_FRAME(...) do {                             \
203    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
204        lsquic_ev_log_generated_crypto_frame(__VA_ARGS__);                  \
205} while (0)
206
207void
208lsquic_ev_log_generated_ack_frame (const lsquic_cid_t *,
209                const struct parse_funcs *, const unsigned char *, size_t len);
210
211#define EV_LOG_GENERATED_ACK_FRAME(...) do {                                \
212    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
213        lsquic_ev_log_generated_ack_frame(__VA_ARGS__);                     \
214} while (0)
215
216void
217lsquic_ev_log_generated_new_token_frame (const lsquic_cid_t *,
218                const struct parse_funcs *, const unsigned char *, size_t len);
219
220#define EV_LOG_GENERATED_NEW_TOKEN_FRAME(...) do {                          \
221    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
222        lsquic_ev_log_generated_new_token_frame(__VA_ARGS__);               \
223} while (0)
224
225void
226lsquic_ev_log_generated_path_chal_frame (const lsquic_cid_t *,
227                const struct parse_funcs *, const unsigned char *, size_t len);
228
229#define EV_LOG_GENERATED_PATH_CHAL_FRAME(...) do {                          \
230    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
231        lsquic_ev_log_generated_path_chal_frame(__VA_ARGS__);               \
232} while (0)
233
234void
235lsquic_ev_log_generated_path_resp_frame (const lsquic_cid_t *,
236                const struct parse_funcs *, const unsigned char *, size_t len);
237
238#define EV_LOG_GENERATED_PATH_RESP_FRAME(...) do {                          \
239    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
240        lsquic_ev_log_generated_path_resp_frame(__VA_ARGS__);               \
241} while (0)
242
243void
244lsquic_ev_log_generated_new_connection_id_frame (const lsquic_cid_t *,
245                const struct parse_funcs *, const unsigned char *, size_t len);
246
247#define EV_LOG_GENERATED_NEW_CONNECTION_ID_FRAME(...) do {                  \
248    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
249        lsquic_ev_log_generated_new_connection_id_frame(__VA_ARGS__);       \
250} while (0)
251
252void
253lsquic_ev_log_generated_stop_waiting_frame (const lsquic_cid_t *,
254                                                            lsquic_packno_t);
255
256#define EV_LOG_GENERATED_STOP_WAITING_FRAME(...) do {                       \
257    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
258        lsquic_ev_log_generated_stop_waiting_frame(__VA_ARGS__);            \
259} while (0)
260
261void
262lsquic_ev_log_generated_stop_sending_frame (const lsquic_cid_t *,
263                                                lsquic_stream_id_t, uint16_t);
264
265#define EV_LOG_GENERATED_STOP_SENDING_FRAME(...) do {                       \
266    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
267        lsquic_ev_log_generated_stop_sending_frame(__VA_ARGS__);            \
268} while (0)
269
270void
271lsquic_ev_log_generated_http_headers (const lsquic_cid_t *, lsquic_stream_id_t,
272                            int is_server, const struct http_prio_frame *,
273                            const struct lsquic_http_headers *);
274
275
276#define EV_LOG_GENERATED_HTTP_HEADERS(...) do {                             \
277    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
278        lsquic_ev_log_generated_http_headers(__VA_ARGS__);                  \
279} while (0)
280
281void
282lsquic_ev_log_generated_http_push_promise (const lsquic_cid_t *,
283        lsquic_stream_id_t stream_id, lsquic_stream_id_t promised_stream_id,
284        const struct lsquic_http_headers *headers);
285
286#define EV_LOG_GENERATED_HTTP_PUSH_PROMISE(...) do {                        \
287    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
288        lsquic_ev_log_generated_http_push_promise(__VA_ARGS__);             \
289} while (0)
290
291void
292lsquic_ev_log_create_connection (const lsquic_cid_t *, const struct sockaddr *,
293                                                    const struct sockaddr *);
294
295#define EV_LOG_CREATE_CONN(...) do {                                        \
296    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
297        lsquic_ev_log_create_connection(__VA_ARGS__);                       \
298    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
299        lsquic_qlog_create_connection(__VA_ARGS__);                         \
300} while (0)
301
302void
303lsquic_ev_log_hsk_completed (const lsquic_cid_t *);
304
305#define EV_LOG_HSK_COMPLETED(...) do {                                      \
306    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
307        lsquic_ev_log_hsk_completed(__VA_ARGS__);                           \
308    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
309        lsquic_qlog_hsk_completed(__VA_ARGS__);                             \
310} while (0)
311
312
313void
314lsquic_ev_log_sess_resume (const lsquic_cid_t *);
315
316#define EV_LOG_SESSION_RESUMPTION(...) do {                                           \
317    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
318        lsquic_ev_log_sess_resume(__VA_ARGS__);                                \
319    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
320        lsquic_qlog_sess_resume(__VA_ARGS__);                                  \
321} while (0)
322
323void
324lsquic_ev_log_check_certs (const lsquic_cid_t *, const lsquic_str_t **, size_t);
325
326#define EV_LOG_CHECK_CERTS(...) do {                                        \
327    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
328        lsquic_ev_log_check_certs(__VA_ARGS__);                             \
329    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
330        lsquic_qlog_check_certs(__VA_ARGS__);                               \
331} while (0)
332
333void
334lsquic_ev_log_cert_chain (const lsquic_cid_t *, struct stack_st_X509 *);
335
336#define EV_LOG_CERT_CHAIN(...) do {                                         \
337    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
338        lsquic_ev_log_cert_chain(__VA_ARGS__);                              \
339    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
340        lsquic_qlog_cert_chain(__VA_ARGS__);                                \
341} while (0)
342
343void
344lsquic_ev_log_version_negotiation (const lsquic_cid_t *, const char *, const char *);
345
346#define EV_LOG_VER_NEG(...) do {                                            \
347    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_EVENT))                    \
348        lsquic_ev_log_version_negotiation(__VA_ARGS__);                     \
349    if (LSQ_LOG_ENABLED_EXT(LSQ_LOG_DEBUG, LSQLM_QLOG))                     \
350        lsquic_qlog_version_negotiation(__VA_ARGS__);                       \
351} while (0)
352
353#endif
354