QUIC TXP: Allow QLOG instance retrieval via callback
authorHugo Landau <hlandau@openssl.org>
Mon, 12 Feb 2024 09:50:42 +0000 (09:50 +0000)
committerTomas Mraz <tomas@openssl.org>
Mon, 19 Feb 2024 09:15:46 +0000 (10:15 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23535)

include/internal/quic_txp.h
ssl/quic/quic_txp.c

index a6d38a2ba9e85a6344dd1847c15eb0c2de3143d6..9c05acc9a507262954689b2faf8d6bf0d8941221 100644 (file)
@@ -50,7 +50,8 @@ typedef struct ossl_quic_tx_packetiser_args_st {
     OSSL_CC_DATA    *cc_data;   /* QUIC Congestion Controller Instance */
     OSSL_TIME       (*now)(void *arg);  /* Callback to get current time. */
     void            *now_arg;
-    QLOG            *qlog;      /* Optional QLOG instance */
+    QLOG            *(*get_qlog_cb)(void *arg); /* Optional QLOG retrieval func */
+    void            *get_qlog_cb_arg;
 
     /*
      * Injected dependencies - crypto streams.
@@ -139,10 +140,11 @@ int ossl_quic_tx_packetiser_set_peer(OSSL_QUIC_TX_PACKETISER *txp,
                                      const BIO_ADDR *peer);
 
 /*
- * Change the QLOG instance in use after instantiation.
+ * Change the QLOG instance retrieval function in use after instantiation.
  */
-void ossl_quic_tx_packetiser_set0_qlog(OSSL_QUIC_TX_PACKETISER *txp,
-                                       QLOG *qlog);
+void ossl_quic_tx_packetiser_set_qlog_cb(OSSL_QUIC_TX_PACKETISER *txp,
+                                         QLOG *(*get_qlog_cb)(void *arg),
+                                         void *get_qlog_cb_arg);
 
 /*
  * Inform the TX packetiser that an EL has been discarded. Idempotent.
index 1327ba83bbefedfe152d14affa0b8267157023f2..7cbb1d95782c323357f84ee4287f09a7f9e3ac39 100644 (file)
@@ -482,7 +482,8 @@ OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETIS
                              on_regen_notify, txp,
                              on_confirm_notify, txp,
                              on_sstream_updated, txp,
-                             args->qlog)) {
+                             args->get_qlog_cb,
+                             args->get_qlog_cb_arg)) {
         OPENSSL_free(txp);
         return NULL;
     }
@@ -626,10 +627,12 @@ void ossl_quic_tx_packetiser_set_ack_tx_cb(OSSL_QUIC_TX_PACKETISER *txp,
     txp->ack_tx_cb_arg  = cb_arg;
 }
 
-void ossl_quic_tx_packetiser_set0_qlog(OSSL_QUIC_TX_PACKETISER *txp,
-                                       QLOG *qlog)
+void ossl_quic_tx_packetiser_set_qlog_cb(OSSL_QUIC_TX_PACKETISER *txp,
+                                         QLOG *(*get_qlog_cb)(void *arg),
+                                         void *get_qlog_cb_arg)
 {
-    ossl_quic_fifd_set0_qlog(&txp->fifd, qlog);
+    ossl_quic_fifd_set_qlog_cb(&txp->fifd, get_qlog_cb, get_qlog_cb_arg);
+
 }
 
 int ossl_quic_tx_packetiser_discard_enc_level(OSSL_QUIC_TX_PACKETISER *txp,