webrtc_ice/candidate/
candidate_host.rs1use portable_atomic::{AtomicU16, AtomicU8};
2
3use super::candidate_base::*;
4use super::*;
5use crate::rand::generate_cand_id;
6
7#[derive(Default)]
9pub struct CandidateHostConfig {
10 pub base_config: CandidateBaseConfig,
11
12 pub tcp_type: TcpType,
13}
14
15impl CandidateHostConfig {
16 pub fn new_candidate_host(self) -> Result<CandidateBase> {
18 let mut candidate_id = self.base_config.candidate_id;
19 if candidate_id.is_empty() {
20 candidate_id = generate_cand_id();
21 }
22
23 let c = CandidateBase {
24 id: candidate_id,
25 address: self.base_config.address.clone(),
26 candidate_type: CandidateType::Host,
27 component: AtomicU16::new(self.base_config.component),
28 port: self.base_config.port,
29 tcp_type: self.tcp_type,
30 foundation_override: self.base_config.foundation,
31 priority_override: self.base_config.priority,
32 network: self.base_config.network,
33 network_type: AtomicU8::new(NetworkType::Udp4 as u8),
34 conn: self.base_config.conn,
35 ..CandidateBase::default()
36 };
37
38 if !self.base_config.address.ends_with(".local") {
39 let ip = self.base_config.address.parse()?;
40 c.set_ip(&ip)?;
41 };
42
43 Ok(c)
44 }
45}