igd_next/common/options.rs
1use std::net::{IpAddr, SocketAddr};
2use std::time::Duration;
3
4/// Default timeout for a gateway search.
5pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(10);
6/// Timeout for each broadcast response during a gateway search.
7#[allow(dead_code)]
8pub const RESPONSE_TIMEOUT: Duration = Duration::from_secs(5);
9
10/// Gateway search configuration
11///
12/// SearchOptions::default() should suffice for most situations.
13///
14/// # Example
15/// To customize only a few options you can use `Default::default()` or `SearchOptions::default()` and the
16/// [struct update syntax](https://doc.rust-lang.org/book/ch05-01-defining-structs.html#creating-instances-from-other-instances-with-struct-update-syntax).
17/// ```
18/// # use std::time::Duration;
19/// # use igd_next::SearchOptions;
20/// let opts = SearchOptions {
21/// timeout: Some(Duration::from_secs(60)),
22/// ..Default::default()
23/// };
24/// ```
25pub struct SearchOptions {
26 /// Bind address for UDP socket (defaults to all `0.0.0.0`)
27 pub bind_addr: SocketAddr,
28 /// Broadcast address for discovery packets (defaults to `239.255.255.250:1900`)
29 pub broadcast_address: SocketAddr,
30 /// Timeout for a search iteration (defaults to 10s)
31 pub timeout: Option<Duration>,
32 /// Timeout for a single search response (defaults to 5s)
33 pub single_search_timeout: Option<Duration>,
34}
35
36impl Default for SearchOptions {
37 fn default() -> Self {
38 Self {
39 bind_addr: (IpAddr::from([0, 0, 0, 0]), 0).into(),
40 broadcast_address: "239.255.255.250:1900".parse().unwrap(),
41 timeout: Some(DEFAULT_TIMEOUT),
42 single_search_timeout: Some(RESPONSE_TIMEOUT),
43 }
44 }
45}