mirror of
https://github.com/mii443/libdatachannel.git
synced 2025-08-22 15:15:28 +00:00
Merge pull request #33 from paullouisageneau/rfc8445
Updated to RFC 8445 for ICE
This commit is contained in:
@ -8,7 +8,7 @@ Licensed under LGPLv2, see [LICENSE](https://github.com/paullouisageneau/libdata
|
||||
|
||||
## Compatibility
|
||||
|
||||
The library aims at fully implementing SCTP DataChannels ([draft-ietf-rtcweb-data-channel-13](https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13)) over DTLS/UDP ([RFC7350](https://tools.ietf.org/html/rfc7350) and [RFC8261](https://tools.ietf.org/html/rfc8261)) and has been tested to be compatible with Firefox and Chromium. It supports IPv6 and Multicast DNS candidates resolution ([draft-ietf-rtcweb-mdns-ice-candidates-03](https://tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-03)) provided the operating system also supports it.
|
||||
The library aims at fully implementing WebRTC SCTP DataChannels ([draft-ietf-rtcweb-data-channel-13](https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13)) over DTLS/UDP ([RFC7350](https://tools.ietf.org/html/rfc7350) and [RFC8261](https://tools.ietf.org/html/rfc8261)) with ICE ([RFC8445](https://tools.ietf.org/html/rfc8445)). It has been tested to be compatible with Firefox and Chromium. It supports IPv6 and Multicast DNS candidates resolution ([draft-ietf-rtcweb-mdns-ice-candidates-03](https://tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-03)) provided the operating system also supports it.
|
||||
|
||||
## Dependencies
|
||||
|
||||
|
@ -54,7 +54,7 @@ bool Candidate::resolve(ResolveMode mode) {
|
||||
if (mIsResolved)
|
||||
return true;
|
||||
|
||||
// See RFC 5245 for format
|
||||
// See RFC 8445 for format
|
||||
std::stringstream ss(mCandidate);
|
||||
int component{0}, priority{0};
|
||||
string foundation, transport, node, service, typ_, type;
|
||||
|
@ -56,6 +56,7 @@ IceTransport::IceTransport(const Configuration &config, Description::Role role,
|
||||
if (!mMainLoop)
|
||||
std::runtime_error("Failed to create the main loop");
|
||||
|
||||
// RFC 5245 was obsoleted by RFC 8445 but this should be OK.
|
||||
mNiceAgent = decltype(mNiceAgent)(
|
||||
nice_agent_new(g_main_loop_get_context(mMainLoop.get()), NICE_COMPATIBILITY_RFC5245),
|
||||
g_object_unref);
|
||||
@ -69,13 +70,19 @@ IceTransport::IceTransport(const Configuration &config, Description::Role role,
|
||||
if (!mStreamId)
|
||||
throw std::runtime_error("Failed to add a stream");
|
||||
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "controlling-mode", TRUE, nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "controlling-mode", TRUE, nullptr); // decided later
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "ice-udp", TRUE, nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "ice-tcp", config.enableIceTcp ? TRUE : FALSE,
|
||||
nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "stun-initial-timeout", 200, nullptr);
|
||||
|
||||
// RFC 8445: Agents MUST NOT use an RTO value smaller than 500 ms.
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "stun-initial-timeout", 500, nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "stun-max-retransmissions", 3, nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "stun-pacing-timer", 20, nullptr);
|
||||
|
||||
// RFC 8445: ICE agents SHOULD use a default Ta value, 50 ms, but MAY use another value based on
|
||||
// the characteristics of the associated data.
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "stun-pacing-timer", 25, nullptr);
|
||||
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "upnp", FALSE, nullptr);
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "upnp-timeout", 200, nullptr);
|
||||
|
||||
@ -208,8 +215,8 @@ Description::Role IceTransport::role() const { return mRole; }
|
||||
IceTransport::State IceTransport::state() const { return mState; }
|
||||
|
||||
Description IceTransport::getLocalDescription(Description::Type type) const {
|
||||
// RFC 5245: The agent that generated the offer which started the ICE processing MUST take the
|
||||
// controlling role, and the other MUST take the controlled role.
|
||||
// RFC 8445: The initiating agent that started the ICE processing MUST take the controlling
|
||||
// role, and the other MUST take the controlled role.
|
||||
g_object_set(G_OBJECT(mNiceAgent.get()), "controlling-mode",
|
||||
type == Description::Type::Offer ? TRUE : FALSE, nullptr);
|
||||
|
||||
|
Reference in New Issue
Block a user