TLS-F tuning

Once - full certificate chain, next - only metadata
This commit is contained in:
Alexey
2026-02-23 05:42:07 +03:00
parent 3e4b98b002
commit cfe8fc72a5
3 changed files with 139 additions and 29 deletions

View File

@@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::time::{SystemTime, Duration};
@@ -14,6 +14,7 @@ use crate::tls_front::types::{CachedTlsData, ParsedServerHello, TlsFetchResult};
pub struct TlsFrontCache {
memory: RwLock<HashMap<String, Arc<CachedTlsData>>>,
default: Arc<CachedTlsData>,
full_cert_sent: RwLock<HashSet<String>>,
disk_path: PathBuf,
}
@@ -46,6 +47,7 @@ impl TlsFrontCache {
Self {
memory: RwLock::new(map),
default,
full_cert_sent: RwLock::new(HashSet::new()),
disk_path: disk_path.as_ref().to_path_buf(),
}
}
@@ -55,6 +57,15 @@ impl TlsFrontCache {
guard.get(sni).cloned().unwrap_or_else(|| self.default.clone())
}
pub async fn contains_domain(&self, domain: &str) -> bool {
self.memory.read().await.contains_key(domain)
}
/// Returns true only on first request for a domain after process start.
pub async fn take_full_cert_budget(&self, domain: &str) -> bool {
self.full_cert_sent.write().await.insert(domain.to_string())
}
pub async fn set(&self, domain: &str, data: CachedTlsData) {
let mut guard = self.memory.write().await;
guard.insert(domain.to_string(), Arc::new(data));