Simple async TURN client.
splitthe resulting thing to
- Wait for
AllocationGrantedevent from Stream
- Create permission or channel with
- Send datagrams to the peer with a
Sinkinterface, receive datagrams from the peer by handling
You may want to build a
stream -> map -> sink chain using
You need to handle errors from
Stream::poll, otherwise somebody can DoS your client by sending tricky packets.
Not implemented / TODO / cons:
- Removing permissions. They keep on getting refreshed until you close the entire allocation.
- Quadratical complexity, linear number of UDP datagrams in case of N actibe permissions.
- TCP or TLS transport.
- Using short-term credentials instead of long-term.
- "Don't fragment" specifier on sent datagrams
- Even/odd port allocation
- Error handling is ad-hoc
Box<dyn std::error::Error>, with just a text strings.
- Message-integrity is not checked for server replies.
- Allocation-heavy, uses
Vec<u8>for byte buffers.
echo.rs- Connect to specified TURN server, authorize specified peer and act as an echo server for it.
The thing to be
Options for connecting to TURN server
Whether to just create permission of also allocate a channel for it. I don't see much reasons not to allocate a channel.
Requests and indications to be sent to TURN server
Primitive error handling used in this library. File an issue if you don't like it.