Skip to content

Commit

Permalink
QUIC FIFD: Allow QLOG instance retrieval via callback
Browse files Browse the repository at this point in the history
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #23535)
  • Loading branch information
hlandau authored and t8m committed Feb 19, 2024
1 parent 4a2e39d commit 410270d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
9 changes: 6 additions & 3 deletions include/internal/quic_fifd.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ struct quic_fifd_st {
void (*sstream_updated)(uint64_t stream_id,
void *arg);
void *sstream_updated_arg;
QLOG *qlog;
QLOG *(*get_qlog_cb)(void *arg);
void *get_qlog_cb_arg;
};

int ossl_quic_fifd_init(QUIC_FIFD *fifd,
Expand All @@ -72,13 +73,15 @@ int ossl_quic_fifd_init(QUIC_FIFD *fifd,
void (*sstream_updated)(uint64_t stream_id,
void *arg),
void *sstream_updated_arg,
QLOG *qlog);
QLOG *(*get_qlog_cb)(void *arg),
void *get_qlog_cb_arg);

void ossl_quic_fifd_cleanup(QUIC_FIFD *fifd); /* (no-op) */

int ossl_quic_fifd_pkt_commit(QUIC_FIFD *fifd, QUIC_TXPIM_PKT *pkt);

void ossl_quic_fifd_set0_qlog(QUIC_FIFD *fifd, QLOG *qlog);
void ossl_quic_fifd_set_qlog_cb(QUIC_FIFD *fifd, QLOG *(*get_qlog_cb)(void *arg),
void *arg);

# endif

Expand Down
22 changes: 17 additions & 5 deletions ssl/quic/quic_fifd.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ int ossl_quic_fifd_init(QUIC_FIFD *fifd,
void (*sstream_updated)(uint64_t stream_id,
void *arg),
void *sstream_updated_arg,
QLOG *qlog)
QLOG *(*get_qlog_cb)(void *arg),
void *get_qlog_cb_arg)
{
if (cfq == NULL || ackm == NULL || txpim == NULL
|| get_sstream_by_id == NULL || regen_frame == NULL)
Expand All @@ -53,7 +54,8 @@ int ossl_quic_fifd_init(QUIC_FIFD *fifd,
fifd->confirm_frame_arg = confirm_frame_arg;
fifd->sstream_updated = sstream_updated;
fifd->sstream_updated_arg = sstream_updated_arg;
fifd->qlog = qlog;
fifd->get_qlog_cb = get_qlog_cb;
fifd->get_qlog_cb_arg = get_qlog_cb_arg;
return 1;
}

Expand Down Expand Up @@ -110,6 +112,14 @@ static void on_acked(void *arg)
ossl_quic_txpim_pkt_release(fifd->txpim, pkt);
}

static QLOG *fifd_get_qlog(QUIC_FIFD *fifd)
{
if (fifd->get_qlog_cb == NULL)
return NULL;

return fifd->get_qlog_cb(fifd->get_qlog_cb_arg);
}

static void on_lost(void *arg)
{
QUIC_TXPIM_PKT *pkt = arg;
Expand All @@ -120,7 +130,7 @@ static void on_lost(void *arg)
QUIC_CFQ_ITEM *cfq_item, *cfq_item_next;
int sstream_updated;

ossl_qlog_event_recovery_packet_lost(fifd->qlog, pkt);
ossl_qlog_event_recovery_packet_lost(fifd_get_qlog(fifd), pkt);

/* STREAM and CRYPTO stream chunks, FIN and stream FC frames */
for (i = 0; i < num_chunks; ++i) {
Expand Down Expand Up @@ -294,7 +304,9 @@ int ossl_quic_fifd_pkt_commit(QUIC_FIFD *fifd, QUIC_TXPIM_PKT *pkt)
return ossl_ackm_on_tx_packet(fifd->ackm, &pkt->ackm_pkt);
}

void ossl_quic_fifd_set0_qlog(QUIC_FIFD *fifd, QLOG *qlog)
void ossl_quic_fifd_set_qlog_cb(QUIC_FIFD *fifd, QLOG *(*get_qlog_cb)(void *arg),
void *get_qlog_cb_arg)
{
fifd->qlog = qlog;
fifd->get_qlog_cb = get_qlog_cb;
fifd->get_qlog_cb_arg = get_qlog_cb_arg;
}
2 changes: 1 addition & 1 deletion test/quic_fifd_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ static int test_fifd(int idx)
regen_frame, NULL,
confirm_frame, NULL,
sstream_updated, NULL,
NULL)))
NULL, NULL)))
goto err;

for (i = 0; i < OSSL_NELEM(info.sstream); ++i)
Expand Down

0 comments on commit 410270d

Please sign in to comment.