use std::sync::mpsc::Receiver;
use anyhow::Result;
use crate::account::{Account, BackendOptions};
use crate::event::{AppEvent, InviteHeaders};
use crate::phone::Phone;
pub use crate::baresip::BaresipBackend;
pub use crate::baresip::call_count;
pub use crate::baresip::is_registered;
pub use crate::baresip::received_audio;
pub use crate::baresip::sent_audio;
pub use crate::baresip::{sip_trace_file, sip_trace_stderr};
pub fn shutdown() {
crate::baresip::stop_re_thread();
}
pub trait Backend: Send {
fn spawn_session(
&self,
rt: &tokio::runtime::Handle,
name: &str,
account: &Account,
options: &BackendOptions,
) -> Result<Session>;
}
pub struct Session {
pub events: Receiver<AppEvent>,
pub phone: Box<dyn Phone>,
pub header_poll: Option<Box<dyn Fn() -> Option<InviteHeaders> + Send + Sync>>,
pub handle: Box<dyn Send>,
}
impl Session {
pub fn new(
events: Receiver<AppEvent>,
phone: Box<dyn Phone>,
header_poll: Option<Box<dyn Fn() -> Option<InviteHeaders> + Send + Sync>>,
handle: Box<dyn Send>,
) -> Self {
Self {
events,
phone,
header_poll,
handle,
}
}
}