use rvoip_infra_common::events::cross_crate::CrossCrateEvent;
use rvoip_infra_common::events::types::EventPriority;
use rvoip_infra_common::planes::PlaneType;
use std::any::Any;
use std::sync::Arc;
use crate::session_registry::SessionRegistryHandle;
pub const SESSION_TO_APP_CHANNEL: &str = "session_to_app";
#[derive(Debug)]
pub struct SessionApiCrossCrateEvent {
pub event: crate::api::events::Event,
}
impl SessionApiCrossCrateEvent {
pub fn new(event: crate::api::events::Event) -> Arc<Self> {
Arc::new(Self { event })
}
}
impl CrossCrateEvent for SessionApiCrossCrateEvent {
fn event_type(&self) -> &'static str {
SESSION_TO_APP_CHANNEL
}
fn source_plane(&self) -> PlaneType {
PlaneType::Signaling
}
fn target_plane(&self) -> PlaneType {
PlaneType::Signaling
}
fn priority(&self) -> EventPriority {
EventPriority::Normal
}
fn as_any(&self) -> &dyn Any {
self
}
}
#[derive(Debug)]
pub(crate) struct SessionControlEvent {
pub(crate) event: crate::api::events::Event,
pub(crate) lifecycle_handle: Option<SessionRegistryHandle>,
}
impl SessionControlEvent {
pub(crate) fn new(
event: crate::api::events::Event,
lifecycle_handle: Option<SessionRegistryHandle>,
) -> Self {
Self {
event,
lifecycle_handle,
}
}
}
pub(crate) fn sanitize_session_api_observation(
event: &crate::api::events::Event,
) -> crate::api::events::Event {
let mut observation = event.clone();
match &mut observation {
crate::api::events::Event::ReferReceived {
request: Some(request),
..
}
| crate::api::events::Event::NotifyReceived {
request: Some(request),
..
} => request.clear_response_capability(),
crate::api::events::Event::InfoReceived { request, .. }
| crate::api::events::Event::MessageReceived { request, .. }
| crate::api::events::Event::OptionsReceived { request, .. }
| crate::api::events::Event::UpdateReceived { request, .. } => {
request.clear_response_capability()
}
crate::api::events::Event::IncomingRegister { register } => {
register.mark_control_observation()
}
_ => {}
}
observation
}