rustpbx 0.4.9

A SIP PBX implementation in Rust
Documentation
use crate::call::{RouteInvite, RoutingState, TransactionCookie};
use crate::config::ProxyConfig;
use anyhow::Result;
use async_trait::async_trait;
use rsipstack::transaction::transaction::Transaction;
use server::SipServerRef;
use std::sync::Arc;
use tokio_util::sync::CancellationToken;

pub mod acl;
pub mod active_call_registry;
pub mod auth;
pub mod call;
pub mod capability_headers;
pub mod cluster_event;
pub mod data;
pub mod dialog_auth_cache;
pub mod emergency;
pub mod locator;
pub mod locator_db;
pub mod locator_webhook;
pub mod nat;
pub mod number_pool;
pub mod pre_auth_registry;
pub mod presence;
pub mod proxy_call;
pub mod registrar;
pub mod routing;
pub mod server;
#[cfg(test)]
pub mod tests;
pub mod trunk_health;
pub mod trunk_registrar;
pub mod user;
pub mod user_db;
pub mod user_extension;
pub mod user_http;
pub mod user_plain;
pub mod ws;

#[derive(Debug)]
pub enum ProxyAction {
    Continue,
    Abort,
}

#[async_trait]
pub trait ProxyModule: Send + Sync {
    fn name(&self) -> &str;
    fn allow_methods(&self) -> Vec<rsipstack::sip::Method> {
        vec![]
    }
    async fn on_start(&mut self) -> Result<()>;
    async fn on_stop(&self) -> Result<()>;
    async fn on_transaction_begin(
        &self,
        _token: CancellationToken,
        _tx: &mut Transaction,
        _cookie: TransactionCookie,
    ) -> Result<ProxyAction> {
        Ok(ProxyAction::Continue)
    }
    async fn on_transaction_end(&self, _tx: &mut Transaction) -> Result<()> {
        Ok(())
    }
}

pub type FnCreateProxyModule =
    fn(server: SipServerRef, config: Arc<ProxyConfig>) -> Result<Box<dyn ProxyModule>>;

pub type FnCreateRouteInvite = Arc<
    dyn Fn(SipServerRef, Arc<ProxyConfig>, Arc<RoutingState>) -> Result<Box<dyn RouteInvite>>
        + Send
        + Sync,
>;