pub mod webrtc;
pub(crate) mod websocket;
use crate::key_cache::KeyFetcher;
use actr_protocol::{AIdCredential, ActrId};
use async_trait::async_trait;
pub(crate) struct SignalingKeyFetcher {
pub(crate) client: std::sync::Arc<dyn webrtc::SignalingClient>,
pub(crate) actor_id: ActrId,
pub(crate) credential: AIdCredential,
}
#[async_trait]
impl KeyFetcher for SignalingKeyFetcher {
async fn fetch_key(&self, key_id: u32) -> crate::error::HyperResult<(u32, Vec<u8>)> {
self.client
.get_signing_key(self.actor_id.clone(), self.credential.clone(), key_id)
.await
.map_err(|e| {
tracing::warn!(key_id, error = ?e, "SignalingKeyFetcher: failed to fetch AIS public key via signaling");
crate::error::HyperError::AisBootstrapFailed(format!(
"signaling get_signing_key failed: {e:?}"
))
})
}
}
pub use webrtc::{
AuthConfig, AuthType, DisconnectReason, ReconnectConfig, SignalingClient, SignalingConfig,
SignalingEvent, SignalingStats, WebRtcConfig,
};
#[cfg(feature = "test-utils")]
pub use webrtc::{WebRtcCoordinator, WebSocketSignalingClient};