sipx_media/ice/mod.rs
1//! ICE (RFC 8445): finding a path for media when both ends are behind NATs.
2//!
3//! The SDP half of ICE — the `a=candidate`, `a=ice-ufrag` and `a=ice-pwd` grammar of RFC 8839 §5
4//! — is [`sipx_sdp::ice`], because it is pure parsing and belongs where no clock and no socket
5//! can reach it. What lives here is everything else: the STUN profile RFC 8445 §7 runs over the
6//! media port, and, as the epic lands, the agent that drives it.
7//!
8//! The normative document is [`docs/specs/ice.md`], written before any of this code; §11 is the
9//! STUN profile [`stun`] implements.
10//!
11//! [`docs/specs/ice.md`]: https://github.com/codewandler/sipx/blob/main/docs/specs/ice.md
12//! **Supported** (`A-8`): calls reach the gathering and selected-pair driver through
13//! `sipx_call::MediaPolicy`. Breaking changes therefore carry a migration note even while sipx is
14//! pre-1.0; new enum variants and fields may still be added.
15//!
16
17pub mod agent;
18pub mod candidate;
19pub mod checklist;
20pub(crate) mod driver;
21pub mod gather;
22pub mod negotiate;
23pub mod stun;
24pub mod timing;
25
26pub use agent::{Agent, Config, Input, Output, Timer};
27pub use candidate::{Gathered, LocalBase, LocalCandidate, RemoteCandidate};
28pub use checklist::{ChecklistState, PairState, Role};
29pub use driver::{IcePath, Local};
30pub use gather::{Gathering, LocalDescription};
31pub use negotiate::{ICE_MISMATCH, Negotiation, negotiate};
32pub use timing::Timers;