From: Hugo Landau Date: Wed, 8 Nov 2023 16:57:55 +0000 (+0000) Subject: QUIC LCIDM: Add debug calls X-Git-Tag: openssl-3.3.0-alpha1~520 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1f2958536eff61984b4746410cd3e4fe8f0383dd;p=thirdparty%2Fopenssl.git QUIC LCIDM: Add debug calls Reviewed-by: Neil Horman Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/22673) --- diff --git a/include/internal/quic_lcidm.h b/include/internal/quic_lcidm.h index e01ac80f9e7..6c040f80be1 100644 --- a/include/internal/quic_lcidm.h +++ b/include/internal/quic_lcidm.h @@ -235,6 +235,23 @@ int ossl_quic_lcidm_lookup(QUIC_LCIDM *lcidm, uint64_t *seq_num, void **opaque); +/* + * Debug call to manually remove a specific LCID. Should not be needed in normal + * usage. Returns 1 if the LCID was successfully found and removed and 0 + * otherwise. + */ +int ossl_quic_lcidm_debug_remove(QUIC_LCIDM *lcidm, + const QUIC_CONN_ID *lcid); + +/* + * Debug call to manually add a numbered LCID with a specific CID value and + * sequence number. Should not be needed in normal usage. Returns 1 on success + * and 0 on failure. + */ +int ossl_quic_lcidm_debug_add(QUIC_LCIDM *lcidm, void *opaque, + const QUIC_CONN_ID *lcid, + uint64_t seq_num); + # endif #endif diff --git a/ssl/quic/quic_lcidm.c b/ssl/quic/quic_lcidm.c index af61292e571..a79eab87815 100644 --- a/ssl/quic/quic_lcidm.c +++ b/ssl/quic/quic_lcidm.c @@ -473,3 +473,41 @@ int ossl_quic_lcidm_lookup(QUIC_LCIDM *lcidm, return 1; } + +int ossl_quic_lcidm_debug_remove(QUIC_LCIDM *lcidm, + const QUIC_CONN_ID *lcid) +{ + QUIC_LCID key, *lcid_obj; + + key.cid = *lcid; + if ((lcid_obj = lh_QUIC_LCID_retrieve(lcidm->lcids, &key)) == NULL) + return 0; + + lcidm_delete_conn_lcid(lcidm, lcid_obj); + return 1; +} + +int ossl_quic_lcidm_debug_add(QUIC_LCIDM *lcidm, void *opaque, + const QUIC_CONN_ID *lcid, + uint64_t seq_num) +{ + QUIC_LCIDM_CONN *conn; + QUIC_LCID key, *lcid_obj; + + if (lcid == NULL || lcid->id_len > QUIC_MAX_CONN_ID_LEN) + return 0; + + if ((conn = lcidm_upsert_conn(lcidm, opaque)) == NULL) + return 0; + + key.cid = *lcid; + if (lh_QUIC_LCID_retrieve(lcidm->lcids, &key) != NULL) + return 0; + + if ((lcid_obj = lcidm_conn_new_lcid(lcidm, conn, lcid)) == NULL) + return 0; + + lcid_obj->seq_num = seq_num; + lcid_obj->type = LCID_TYPE_NCID; + return 1; +}