rustpbx 0.4.4

A SIP PBX implementation in Rust
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct RtpDtmfEventKey {
    pub(crate) digit_code: u8,
    pub(crate) rtp_timestamp: u32,
}

#[derive(Debug, Default)]
pub(crate) struct RtpDtmfDetector {
    pub(crate) last_event: Option<RtpDtmfEventKey>,
}

impl RtpDtmfDetector {
    pub(crate) fn observe(&mut self, payload: &[u8], rtp_timestamp: u32) -> Option<char> {
        if payload.len() < 4 {
            return None;
        }

        let digit_code = payload[0];
        let digit = crate::media::telephone_event::dtmf_code_to_char(digit_code)?;

        let event = RtpDtmfEventKey {
            digit_code,
            rtp_timestamp,
        };

        if self.last_event == Some(event) {
            return None;
        }

        self.last_event = Some(event);
        Some(digit)
    }
}