Skip to main content

freeswitch_types/sofia/
event_subclass.rs

1//! Typed Sofia event subclass names (`Event-Subclass` header values).
2
3wire_enum! {
4    /// Sofia event subclass values from `mod_sofia.h` `MY_EVENT_*` defines.
5    ///
6    /// These appear as the `Event-Subclass` header on `CUSTOM` events fired by
7    /// mod_sofia. Use with [`EventSubscription::sofia_event()`](crate::EventSubscription::sofia_event)
8    /// for typed subscriptions, or parse from received events via
9    /// [`HeaderLookup::sofia_event_subclass()`](crate::HeaderLookup::sofia_event_subclass).
10    #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11    pub enum SofiaEventSubclass {
12        Register => "sofia::register",
13        PreRegister => "sofia::pre_register",
14        RegisterAttempt => "sofia::register_attempt",
15        RegisterFailure => "sofia::register_failure",
16        Unregister => "sofia::unregister",
17        Expire => "sofia::expire",
18        GatewayState => "sofia::gateway_state",
19        SipUserState => "sofia::sip_user_state",
20        NotifyRefer => "sofia::notify_refer",
21        Reinvite => "sofia::reinvite",
22        GatewayAdd => "sofia::gateway_add",
23        GatewayDelete => "sofia::gateway_delete",
24        GatewayInvalidDigestReq => "sofia::gateway_invalid_digest_req",
25        RecoveryRecv => "sofia::recovery_recv",
26        RecoverySend => "sofia::recovery_send",
27        RecoveryRecovered => "sofia::recovery_recovered",
28        Error => "sofia::error",
29        ProfileStart => "sofia::profile_start",
30        NotifyWatchedHeader => "sofia::notify_watched_header",
31        WrongCallState => "sofia::wrong_call_state",
32        Transferor => "sofia::transferor",
33        Transferee => "sofia::transferee",
34        Replaced => "sofia::replaced",
35        Intercepted => "sofia::intercepted",
36        ByeResponse => "sofia::bye_response",
37    }
38    error ParseSofiaEventSubclassError("sofia event subclass");
39    tests: sofia_event_subclass_wire_tests;
40}
41
42impl SofiaEventSubclass {
43    /// Registration-related subclasses.
44    pub const REGISTRATION_EVENTS: &[SofiaEventSubclass] = &[
45        Self::Register,
46        Self::PreRegister,
47        Self::RegisterAttempt,
48        Self::RegisterFailure,
49        Self::Unregister,
50        Self::Expire,
51    ];
52
53    /// Gateway lifecycle and state subclasses.
54    pub const GATEWAY_EVENTS: &[SofiaEventSubclass] = &[
55        Self::GatewayState,
56        Self::GatewayAdd,
57        Self::GatewayDelete,
58        Self::GatewayInvalidDigestReq,
59    ];
60}
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn registration_events_subset() {
68        for &ev in SofiaEventSubclass::REGISTRATION_EVENTS {
69            assert!(SofiaEventSubclass::ALL.contains(&ev), "{ev} not in ALL");
70        }
71    }
72
73    #[test]
74    fn gateway_events_subset() {
75        for &ev in SofiaEventSubclass::GATEWAY_EVENTS {
76            assert!(SofiaEventSubclass::ALL.contains(&ev), "{ev} not in ALL");
77        }
78    }
79}