/* Maximum datagram payload length (MDPL) for TX purposes. */
size_t mdpl;
- /* QLOG instance to use, or NULL. */
- QLOG *qlog;
+ /* Callback returning QLOG instance to use, or NULL. */
+ QLOG *(*get_qlog_cb)(void *arg);
+ void *get_qlog_cb_arg;
} OSSL_QTX_ARGS;
/* Instantiates a new QTX. */
SSL *msg_callback_ssl);
void ossl_qtx_set_msg_callback_arg(OSSL_QTX *qtx, void *msg_callback_arg);
-/* Change QLOG instance in use after instantiation. */
-void ossl_qtx_set0_qlog(OSSL_QTX *qtx, QLOG *qlog);
+/* Change QLOG instance retrieval callback in use after instantiation. */
+void ossl_qtx_set_qlog_cb(OSSL_QTX *qtx, QLOG *(*get_qlog_cb)(void *arg),
+ void *get_qlog_cb_arg);
/*
* Secret Management
/* TX BIO. */
BIO *bio;
- /* QLOG instance if in use, or NULL. */
- QLOG *qlog;
+ /* QLOG instance retrieval callback if in use, or NULL. */
+ QLOG *(*get_qlog_cb)(void *arg);
+ void *get_qlog_cb_arg;
/* TX maximum datagram payload length. */
size_t mdpl;
qtx->propq = args->propq;
qtx->bio = args->bio;
qtx->mdpl = args->mdpl;
- qtx->qlog = args->qlog;
+ qtx->get_qlog_cb = args->get_qlog_cb;
+ qtx->get_qlog_cb_arg = args->get_qlog_cb_arg;
+
return qtx;
}
qtx->mutatearg = mutatearg;
}
-void ossl_qtx_set0_qlog(OSSL_QTX *qtx, QLOG *qlog)
+void ossl_qtx_set_qlog_cb(OSSL_QTX *qtx, QLOG *(*get_qlog_cb)(void *arg),
+ void *get_qlog_cb_arg)
{
- qtx->qlog = qlog;
+ qtx->get_qlog_cb = get_qlog_cb;
+ qtx->get_qlog_cb_arg = get_qlog_cb_arg;
}
int ossl_qtx_provide_secret(OSSL_QTX *qtx,
return txe;
}
+static QLOG *qtx_get_qlog(OSSL_QTX *qtx)
+{
+ if (qtx->get_qlog_cb == NULL)
+ return NULL;
+
+ return qtx->get_qlog_cb(qtx->get_qlog_cb_arg);
+}
+
static int qtx_mutate_write(OSSL_QTX *qtx, const OSSL_QTX_PKT *pkt, TXE *txe,
uint32_t enc_level)
{
ret = qtx_write(qtx, pkt, txe, enc_level,
hdr, iovec, num_iovec);
if (ret == 1)
- ossl_qlog_event_transport_packet_sent(qtx->qlog, hdr, pkt->pn,
+ ossl_qlog_event_transport_packet_sent(qtx_get_qlog(qtx), hdr, pkt->pn,
iovec, num_iovec,
qtx->datagram_count);