rvoip_core_traits/
connection.rs1use crate::capability::{CapabilityDescriptor, NegotiatedCodecs};
2use crate::ids::{ConnectionId, ParticipantId, SessionId};
3use crate::stream::MediaStreamHandle;
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use std::fmt;
7use std::sync::Arc;
8
9#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
10pub enum Transport {
11 Quic,
12 WebTransport,
13 WebSocket,
14 Sip,
15 WebRtc,
16 AmazonConnect,
20 Vapi,
23 InProcessAi,
24}
25
26#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
27pub enum Direction {
28 Inbound,
29 Outbound,
30}
31
32#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
33pub enum ConnectionState {
34 Connecting,
35 Connected,
36 Held,
37 Ending,
38 Ended,
39 Failed,
40}
41
42#[derive(Clone)]
44pub struct TransportHandle(pub Arc<dyn std::any::Any + Send + Sync>);
45
46impl fmt::Debug for TransportHandle {
47 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
48 formatter.write_str("TransportHandle { present: true }")
49 }
50}
51
52#[derive(Clone)]
53pub struct Connection {
54 pub id: ConnectionId,
55 pub session_id: SessionId,
56 pub participant_id: ParticipantId,
57 pub transport: Transport,
58 pub direction: Direction,
59 pub state: ConnectionState,
60 pub capabilities: CapabilityDescriptor,
61 pub negotiated_codecs: NegotiatedCodecs,
62 pub streams: Vec<MediaStreamHandle>,
63 pub messaging_enabled: bool,
64 pub transport_handle: TransportHandle,
65 pub opened_at: DateTime<Utc>,
66 pub closed_at: Option<DateTime<Utc>>,
67}
68
69impl fmt::Debug for Connection {
70 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
71 formatter
72 .debug_struct("Connection")
73 .field("id", &self.id)
74 .field("session_id", &self.session_id)
75 .field("participant_id", &self.participant_id)
76 .field("transport", &self.transport)
77 .field("direction", &self.direction)
78 .field("state", &self.state)
79 .field("capabilities", &self.capabilities)
80 .field("negotiated_codecs", &self.negotiated_codecs)
81 .field("stream_count", &self.streams.len())
82 .field("messaging_enabled", &self.messaging_enabled)
83 .field("opened_at", &self.opened_at)
84 .field("closed_at", &self.closed_at)
85 .finish()
86 }
87}