use crate::ice_transport::ice_server::RTCIceServer;
use crate::peer_connection::certificate::RTCCertificate;
use crate::peer_connection::policy::bundle_policy::RTCBundlePolicy;
use crate::peer_connection::policy::ice_transport_policy::RTCIceTransportPolicy;
use crate::peer_connection::policy::rtcp_mux_policy::RTCRtcpMuxPolicy;
#[derive(Default, Clone)]
pub struct RTCConfiguration {
pub ice_servers: Vec<RTCIceServer>,
pub ice_transport_policy: RTCIceTransportPolicy,
pub bundle_policy: RTCBundlePolicy,
pub rtcp_mux_policy: RTCRtcpMuxPolicy,
pub peer_identity: String,
pub certificates: Vec<RTCCertificate>,
pub ice_candidate_pool_size: u8,
}
impl RTCConfiguration {
#[allow(clippy::assigning_clones)]
pub(crate) fn get_ice_servers(&self) -> Vec<RTCIceServer> {
let mut ice_servers = self.ice_servers.clone();
for ice_server in &mut ice_servers {
for raw_url in &mut ice_server.urls {
if raw_url.starts_with("stun") {
let parts: Vec<&str> = raw_url.split('?').collect();
*raw_url = parts[0].to_owned();
}
}
}
ice_servers
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_configuration_get_iceservers() {
{
let expected_server_str = "stun:stun.l.google.com:19302";
let cfg = RTCConfiguration {
ice_servers: vec![RTCIceServer {
urls: vec![expected_server_str.to_owned()],
..Default::default()
}],
..Default::default()
};
let parsed_urls = cfg.get_ice_servers();
assert_eq!(parsed_urls[0].urls[0], expected_server_str);
}
{
let server_str = "stun:global.stun.twilio.com:3478?transport=udp";
let expected_server_str = "stun:global.stun.twilio.com:3478";
let cfg = RTCConfiguration {
ice_servers: vec![RTCIceServer {
urls: vec![server_str.to_owned()],
..Default::default()
}],
..Default::default()
};
let parsed_urls = cfg.get_ice_servers();
assert_eq!(parsed_urls[0].urls[0], expected_server_str);
}
}
}