Repository containing a sans-IO implementation of the STUN (RFC5389/RFC8489) protocol and STUN parsing and writing in the Rust programming language.
A couple of reasons: reusability, and testability.
Without being bogged down in the details of how IO happens, the same sans-IO implementation can be used without prescribing the IO pattern that an application must follow. Instead, the application (or parent library) has much more freedom in how bytes are transferred between peers. It's also possible to us a sans-IO library in either a synchronous or within an asynchronous runtime.
sans-IO also allows easy testing of any specific state the sans-IO implementation might find itself in. Combined with a comprehensive test-suite, this provides assurance that the implementation behaves as expected under all circumstances.
For other examples of sans-IO implementations, take a look at:
- RFC5245: Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols
- RFC5389: Session Traversal Utilities for NAT (STUN)
- RFC5766: Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)
- RFC5769: Test Vectors for Session Traversal Utilities for NAT (STUN)
- RFC6156: Traversal Using Relays around NAT (TURN) Extension for IPv6
- RFC8445: Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal
- RFC8489: Session Traversal Utilities for NAT (STUN)
- RFC8656: Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)
Contains parsers and writing implementations for STUN messages and attributes. Message parsing is zero-copy by default and easily supports externally defined custom attributes.
stun-proto
builds on top of stun-types
and implements some of the
STUN protocol requirements when communicating with a peer. It does this using a
sans-IO API and thus does no networking calls of its own.