rvoip_rtp_core/api/client/
mod.rs1pub mod transport;
6pub mod security;
7pub mod config;
8
9pub use transport::MediaTransportClient;
11pub use security::{ClientSecurityContext, ClientSecurityConfig};
12pub use config::{ClientConfig, ClientConfigBuilder};
13
14pub use transport::default::DefaultMediaTransportClient;
16pub use security::DefaultClientSecurityContext;
17
18use crate::api::common::error::MediaTransportError;
20
21use std::sync::Arc;
22
23pub struct ClientFactory;
25
26impl ClientFactory {
27 pub async fn create_client(config: ClientConfig) -> Result<DefaultMediaTransportClient, MediaTransportError> {
29 let client = DefaultMediaTransportClient::new(config).await
31 .map_err(|e| MediaTransportError::InitializationError(format!("Failed to create client: {}", e)))?;
32
33 Ok(client)
34 }
35
36 pub async fn create_webrtc_client(
38 remote_addr: std::net::SocketAddr
39 ) -> Result<DefaultMediaTransportClient, MediaTransportError> {
40 let config = ClientConfigBuilder::webrtc()
42 .remote_address(remote_addr)
43 .build();
44
45 Self::create_client(config).await
46 }
47
48 pub async fn create_sip_client(
50 remote_addr: std::net::SocketAddr
51 ) -> Result<DefaultMediaTransportClient, MediaTransportError> {
52 let config = ClientConfigBuilder::sip()
54 .remote_address(remote_addr)
55 .build();
56
57 Self::create_client(config).await
58 }
59}
60
61impl ClientConfigBuilder {
63 pub fn with_security(mut self, security_config: crate::api::common::config::SecurityConfig) -> Self {
66 match security_config.mode {
67 crate::api::common::config::SecurityMode::None => {
68 },
71 crate::api::common::config::SecurityMode::Srtp => {
72 let client_security_config = crate::api::client::security::ClientSecurityConfig {
75 security_mode: crate::api::common::config::SecurityMode::Srtp,
76 fingerprint_algorithm: security_config.fingerprint_algorithm,
77 remote_fingerprint: security_config.remote_fingerprint.clone(),
78 remote_fingerprint_algorithm: security_config.remote_fingerprint_algorithm.clone(),
79 validate_fingerprint: false, srtp_profiles: security_config.srtp_profiles,
81 certificate_path: None, private_key_path: None, srtp_key: security_config.srtp_key.clone(),
84 };
85
86 self = self.security_config(client_security_config);
87
88 if let Some(key) = security_config.srtp_key {
90 }
93 },
94 crate::api::common::config::SecurityMode::DtlsSrtp => {
95 let client_security_config = crate::api::client::security::ClientSecurityConfig {
98 security_mode: crate::api::common::config::SecurityMode::DtlsSrtp,
99 fingerprint_algorithm: security_config.fingerprint_algorithm,
100 remote_fingerprint: security_config.remote_fingerprint.clone(),
101 remote_fingerprint_algorithm: security_config.remote_fingerprint_algorithm.clone(),
102 validate_fingerprint: security_config.remote_fingerprint.is_some(),
103 srtp_profiles: security_config.srtp_profiles,
104 certificate_path: security_config.certificate_path,
105 private_key_path: security_config.private_key_path,
106 srtp_key: None, };
108
109 self = self.security_config(client_security_config);
110 },
111 crate::api::common::config::SecurityMode::SdesSrtp
112 | crate::api::common::config::SecurityMode::MikeySrtp
113 | crate::api::common::config::SecurityMode::ZrtpSrtp => {
114 }
118 }
119
120 self
121 }
122
123 pub fn with_webrtc_security(self) -> Self {
125 let security_config = crate::api::common::config::SecurityConfig::webrtc_compatible();
126 self.with_security(security_config)
127 }
128
129 pub fn with_srtp_key(self, key: Vec<u8>) -> Self {
131 let security_config = crate::api::common::config::SecurityConfig::srtp_with_key(key);
132 self.with_security(security_config)
133 }
134
135 pub fn with_no_security(self) -> Self {
137 let security_config = crate::api::common::config::SecurityConfig::unsecured();
138 self.with_security(security_config)
139 }
140
141 pub fn with_dtls_certificate(self, cert_path: String, key_path: String) -> Self {
143 let security_config = crate::api::common::config::SecurityConfig::dtls_with_certificate(cert_path, key_path);
144 self.with_security(security_config)
145 }
146}