use std::{collections::HashMap, sync::LazyLock};
use hpx::tls::TlsOptions;
use parking_lot::Mutex;
use super::TlsFingerprint;
static TLS_CACHE: LazyLock<Mutex<HashMap<TlsFingerprint, TlsOptions>>> =
LazyLock::new(|| Mutex::new(HashMap::new()));
pub fn get_or_build_tls(
fingerprint: &TlsFingerprint,
build: impl FnOnce(&TlsFingerprint) -> TlsOptions,
) -> TlsOptions {
{
let cache = TLS_CACHE.lock();
if let Some(cached) = cache.get(fingerprint) {
return cached.clone();
}
}
let options = build(fingerprint);
{
let mut cache = TLS_CACHE.lock();
cache.insert(fingerprint.clone(), options.clone());
}
options
}
pub fn clear_tls_cache() {
let mut cache = TLS_CACHE.lock();
cache.clear();
}
pub fn tls_cache_len() -> usize {
let cache = TLS_CACHE.lock();
cache.len()
}