123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * Copyright 2023-2024 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
- #ifndef OSSL_QLOG_H
- # define OSSL_QLOG_H
- # include <openssl/ssl.h>
- # include "internal/quic_types.h"
- # include "internal/time.h"
- typedef struct qlog_st QLOG;
- # ifndef OPENSSL_NO_QLOG
- enum {
- QLOG_EVENT_TYPE_NONE,
- # define QLOG_EVENT(cat, name) QLOG_EVENT_TYPE_##cat##_##name,
- # include "internal/qlog_events.h"
- # undef QLOG_EVENT
- QLOG_EVENT_TYPE_NUM
- };
- typedef struct qlog_trace_info_st {
- QUIC_CONN_ID odcid;
- const char *title, *description, *group_id;
- int is_server;
- OSSL_TIME (*now_cb)(void *arg);
- void *now_cb_arg;
- uint64_t override_process_id;
- const char *override_impl_name;
- } QLOG_TRACE_INFO;
- QLOG *ossl_qlog_new(const QLOG_TRACE_INFO *info);
- QLOG *ossl_qlog_new_from_env(const QLOG_TRACE_INFO *info);
- void ossl_qlog_free(QLOG *qlog);
- /* Configuration */
- int ossl_qlog_set_event_type_enabled(QLOG *qlog, uint32_t event_type,
- int enable);
- int ossl_qlog_set_filter(QLOG *qlog, const char *filter);
- int ossl_qlog_set_sink_bio(QLOG *qlog, BIO *bio);
- # ifndef OPENSSL_NO_STDIO
- int ossl_qlog_set_sink_file(QLOG *qlog, FILE *file, int close_flag);
- # endif
- int ossl_qlog_set_sink_filename(QLOG *qlog, const char *filename);
- /* Operations */
- int ossl_qlog_flush(QLOG *qlog);
- /* Queries */
- int ossl_qlog_enabled(QLOG *qlog, uint32_t event_type);
- /* Grouping Functions */
- int ossl_qlog_event_try_begin(QLOG *qlog, uint32_t event_type,
- const char *event_cat, const char *event_name,
- const char *event_combined_name);
- void ossl_qlog_event_end(QLOG *qlog);
- void ossl_qlog_group_begin(QLOG *qlog, const char *name);
- void ossl_qlog_group_end(QLOG *qlog);
- void ossl_qlog_array_begin(QLOG *qlog, const char *name);
- void ossl_qlog_array_end(QLOG *qlog);
- void ossl_qlog_override_time(QLOG *qlog, OSSL_TIME event_time);
- /* Grouping Macros */
- # define QLOG_EVENT_BEGIN(qlog, cat, name) \
- { \
- QLOG *qlog_instance = (qlog); \
- uint32_t qlog_event_type = QLOG_EVENT_TYPE_##cat##_##name; \
- \
- if (ossl_qlog_event_try_begin(qlog_instance, qlog_event_type, \
- #cat, #name, #cat ":" #name)) {
- # define QLOG_EVENT_END() \
- ossl_qlog_event_end(qlog_instance); \
- } \
- }
- # define QLOG_BEGIN(name) \
- { \
- ossl_qlog_group_begin(qlog_instance, (name));
- # define QLOG_END() \
- ossl_qlog_group_end(qlog_instance); \
- }
- # define QLOG_BEGIN_ARRAY(name) \
- { \
- ossl_qlog_array_begin(qlog_instance, (name));
- # define QLOG_END_ARRAY() \
- ossl_qlog_array_end(qlog_instance); \
- }
- /* Field Functions */
- void ossl_qlog_str(QLOG *qlog, const char *name, const char *value);
- void ossl_qlog_str_len(QLOG *qlog, const char *name,
- const char *value, size_t value_len);
- void ossl_qlog_u64(QLOG *qlog, const char *name, uint64_t value);
- void ossl_qlog_i64(QLOG *qlog, const char *name, int64_t value);
- void ossl_qlog_bool(QLOG *qlog, const char *name, int value);
- void ossl_qlog_bin(QLOG *qlog, const char *name,
- const void *value, size_t value_len);
- /* Field Macros */
- # define QLOG_STR(name, value) ossl_qlog_str(qlog_instance, (name), (value))
- # define QLOG_STR_LEN(name, value, value_len) \
- ossl_qlog_str_len(qlog_instance, (name), (value), (value_len))
- # define QLOG_I64(name, value) ossl_qlog_i64(qlog_instance, (name), (value))
- # define QLOG_U64(name, value) ossl_qlog_u64(qlog_instance, (name), (value))
- # define QLOG_F64(name, value) ossl_qlog_f64(qlog_instance, (name), (value))
- # define QLOG_BOOL(name, value) ossl_qlog_bool(qlog_instance, (name), (value))
- # define QLOG_BIN(name, value, value_len) \
- ossl_qlog_bin(qlog_instance, (name), (value), (value_len))
- # define QLOG_CID(name, value) QLOG_BIN((name), (value)->id, (value)->id_len)
- # endif
- #endif
|