Skip to main content

ip_discovery/stun/
providers.rs

1//! Built-in STUN providers
2
3use super::StunProvider;
4use crate::provider::BoxedBlockingProvider;
5#[cfg(feature = "tokio")]
6use crate::provider::BoxedProvider;
7
8/// Google STUN server
9pub fn google() -> StunProvider {
10    StunProvider::new("Google STUN", "stun.l.google.com", 19302)
11}
12
13/// Google STUN server 1
14pub fn google1() -> StunProvider {
15    StunProvider::new("Google STUN 1", "stun1.l.google.com", 19302)
16}
17
18/// Google STUN server 2
19pub fn google2() -> StunProvider {
20    StunProvider::new("Google STUN 2", "stun2.l.google.com", 19302)
21}
22
23/// Cloudflare STUN server
24pub fn cloudflare() -> StunProvider {
25    StunProvider::new("Cloudflare STUN", "stun.cloudflare.com", 3478)
26}
27
28/// List all available STUN provider names
29pub fn provider_names() -> &'static [&'static str] {
30    &[
31        "Google STUN",
32        "Google STUN 1",
33        "Google STUN 2",
34        "Cloudflare STUN",
35    ]
36}
37
38/// Get default blocking STUN providers
39pub fn default_blocking_providers() -> Vec<BoxedBlockingProvider> {
40    vec![
41        Box::new(google()),
42        Box::new(cloudflare()),
43        Box::new(google1()),
44        Box::new(google2()),
45    ]
46}
47
48/// Get default async STUN providers
49#[cfg(feature = "tokio")]
50pub fn default_providers() -> Vec<BoxedProvider> {
51    vec![
52        Box::new(google()),
53        Box::new(cloudflare()),
54        Box::new(google1()),
55        Box::new(google2()),
56    ]
57}