Browse Source

Changed non-drafts RFC links to canonical location rfc-editor.org

Paul-Louis Ageneau 3 years ago
parent
commit
7d150208c9

+ 14 - 14
README.md

@@ -137,31 +137,31 @@ The library implements the following communication protocols:
 WebRTC allows real-time data and media exchange between two devices through a Peer Connection (or RTCPeerConnection), a signaled peer-to-peer connection which can carry both Data Channels and media tracks. It is compatible with browsers Firefox, Chromium, and Safari, and other WebRTC libraries (see [webrtc-echoes](https://github.com/sipsorcery/webrtc-echoes)). Media transport is optional and can be disabled at compile time.
 
 Protocol stack:
-- SCTP-based Data Channels ([RFC8831](https://datatracker.ietf.org/doc/html/rfc8831))
-- SRTP-based Media Transport ([RFC8834](https://datatracker.ietf.org/doc/html/rfc8834))
-- DTLS/UDP ([RFC7350](https://datatracker.ietf.org/doc/html/rfc7350) and [RFC8261](https://datatracker.ietf.org/doc/html/rfc8261))
-- ICE ([RFC8445](https://datatracker.ietf.org/doc/html/rfc8445)) with STUN ([RFC8489](https://datatracker.ietf.org/doc/html/rfc8489)) and its extension TURN ([RFC8656](https://datatracker.ietf.org/doc/html/rfc8656))
+- SCTP-based Data Channels ([RFC8831](https://www.rfc-editor.org/rfc/rfc8831.html))
+- SRTP-based Media Transport ([RFC8834](https://www.rfc-editor.org/rfc/rfc8834.html))
+- DTLS/UDP ([RFC7350](https://www.rfc-editor.org/rfc/rfc7350.html) and [RFC8261](https://www.rfc-editor.org/rfc/rfc8261.html))
+- ICE ([RFC8445](https://www.rfc-editor.org/rfc/rfc8445.html)) with STUN ([RFC8489](https://www.rfc-editor.org/rfc/rfc8489.html)) and its extension TURN ([RFC8656](https://www.rfc-editor.org/rfc/rfc8656.html))
 
 Features:
-- Full IPv6 support (as mandated by [RFC8835](https://datatracker.ietf.org/doc/html/rfc8835))
-- Trickle ICE ([RFC8838](https://datatracker.ietf.org/doc/html/rfc8838))
-- JSEP-compatible session establishment with SDP ([RFC8829](https://datatracker.ietf.org/doc/html/rfc8829))
-- SCTP over DTLS with SDP offer/answer ([RFC8841](https://datatracker.ietf.org/doc/html/rfc8841))
-- DTLS with ECDSA or RSA keys ([RFC8824](https://datatracker.ietf.org/doc/html/rfc8827))
-- SRTP and SRTCP key derivation from DTLS ([RFC5764](https://datatracker.ietf.org/doc/html/rfc5764))
-- Differentiated Services QoS ([RFC8837](https://datatracker.ietf.org/doc/html/rfc8837)) where possible
+- Full IPv6 support (as mandated by [RFC8835](https://www.rfc-editor.org/rfc/rfc8835.html))
+- Trickle ICE ([RFC8838](https://www.rfc-editor.org/rfc/rfc8838.html))
+- JSEP-compatible session establishment with SDP ([RFC8829](https://www.rfc-editor.org/rfc/rfc8829.html))
+- SCTP over DTLS with SDP offer/answer ([RFC8841](https://www.rfc-editor.org/rfc/rfc8841.html))
+- DTLS with ECDSA or RSA keys ([RFC8824](https://www.rfc-editor.org/rfc/rfc8827.html))
+- SRTP and SRTCP key derivation from DTLS ([RFC5764](https://www.rfc-editor.org/rfc/rfc5764.html))
+- Differentiated Services QoS ([RFC8837](https://www.rfc-editor.org/rfc/rfc8837.html)) where possible
 - Multicast DNS candidates ([draft-ietf-rtcweb-mdns-ice-candidates-04](https://datatracker.ietf.org/doc/html/draft-ietf-rtcweb-mdns-ice-candidates-04))
 - Multiplexing connections on a single UDP port with libjuice as ICE backend
 
-Note only SDP BUNDLE mode is supported for media multiplexing ([RFC8843](https://datatracker.ietf.org/doc/html/rfc8843)). The behavior is equivalent to the JSEP bundle-only policy: the library always negociates one unique network component, where SRTP media streams are multiplexed with SRTCP control packets ([RFC5761](https://datatracker.ietf.org/doc/html/rfc5761)) and SCTP/DTLS data traffic ([RFC8261](https://datatracker.ietf.org/doc/html/rfc8261)).
+Note only SDP BUNDLE mode is supported for media multiplexing ([RFC8843](https://www.rfc-editor.org/rfc/rfc8843.html)). The behavior is equivalent to the JSEP bundle-only policy: the library always negociates one unique network component, where SRTP media streams are multiplexed with SRTCP control packets ([RFC5761](https://www.rfc-editor.org/rfc/rfc5761.html)) and SCTP/DTLS data traffic ([RFC8261](https://www.rfc-editor.org/rfc/rfc8261.html)).
 
 ### WebSocket
 
 WebSocket is the protocol of choice for WebRTC signaling. The support is optional and can be disabled at compile time.
 
 Protocol stack:
-- WebSocket protocol ([RFC6455](https://datatracker.ietf.org/doc/html/rfc6455)), client and server side
-- HTTP over TLS ([RFC2818](https://datatracker.ietf.org/doc/html/rfc2818))
+- WebSocket protocol ([RFC6455](https://www.rfc-editor.org/rfc/rfc6455.html)), client and server side
+- HTTP over TLS ([RFC2818](https://www.rfc-editor.org/rfc/rfc2818.html))
 
 Features:
 - IPv6 and IPv4/IPv6 dual-stack support

+ 1 - 1
src/configuration.cpp

@@ -23,7 +23,7 @@
 namespace rtc {
 
 IceServer::IceServer(const string &url) {
-	// Modified regex from RFC 3986, see https://datatracker.ietf.org/doc/html/rfc3986#appendix-B
+	// Modified regex from RFC 3986, see https://www.rfc-editor.org/rfc/rfc3986.html#appendix-B
 	static const char *rs =
 	    R"(^(([^:.@/?#]+):)?(/{0,2}((([^:@]*)(:([^@]*))?)@)?(([^:/?#]*)(:([^/?#]*))?))?([^?#]*)(\?([^#]*))?(#(.*))?)";
 	static const std::regex r(rs, std::regex::extended);

+ 1 - 1
src/description.cpp

@@ -274,7 +274,7 @@ string Description::generateSdp(string_view eol) const {
 	sdp << "t=0 0" << eol;
 
 	// Bundle (RFC8843 Negotiating Media Multiplexing Using the Session Description Protocol)
-	// https://datatracker.ietf.org/doc/html/rfc8843
+	// https://www.rfc-editor.org/rfc/rfc8843.html
 	sdp << "a=group:BUNDLE";
 	for (const auto &entry : mEntries)
 		sdp << ' ' << entry->mid();

+ 2 - 2
src/impl/certificate.cpp

@@ -69,7 +69,7 @@ Certificate Certificate::Generate(CertificateType type, const string &commonName
 	// RFC 8827 WebRTC Security Architecture 6.5. Communications Security
 	// All implementations MUST support DTLS 1.2 with the TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
 	// cipher suite and the P-256 curve
-	// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5
+	// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5
 	case CertificateType::Default:
 	case CertificateType::Ecdsa: {
 		gnutls::check(gnutls_x509_privkey_generate(*privkey, GNUTLS_PK_ECDSA,
@@ -233,7 +233,7 @@ Certificate Certificate::Generate(CertificateType type, const string &commonName
 	// RFC 8827 WebRTC Security Architecture 6.5. Communications Security
 	// All implementations MUST support DTLS 1.2 with the TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
 	// cipher suite and the P-256 curve
-	// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5
+	// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5
 	case CertificateType::Default:
 	case CertificateType::Ecdsa: {
 		PLOG_VERBOSE << "Generating ECDSA P-256 key pair";

+ 1 - 1
src/impl/datachannel.cpp

@@ -37,7 +37,7 @@ using std::chrono::milliseconds;
 namespace rtc::impl {
 
 // Messages for the DataChannel establishment protocol (RFC 8832)
-// See https://datatracker.ietf.org/doc/html/rfc8832
+// See https://www.rfc-editor.org/rfc/rfc8832.html
 
 enum MessageType : uint8_t {
 	MESSAGE_OPEN_REQUEST = 0x00,

+ 3 - 3
src/impl/dtlssrtptransport.cpp

@@ -109,7 +109,7 @@ bool DtlsSrtpTransport::sendMedia(message_ptr message) {
 	             << unsigned(value2);
 
 	// RFC 5761 Multiplexing RTP and RTCP 4. Distinguishable RTP and RTCP Packets
-	// https://datatracker.ietf.org/doc/html/rfc5761#section-4
+	// https://www.rfc-editor.org/rfc/rfc5761.html#section-4
 	// It is RECOMMENDED to follow the guidelines in the RTP/AVP profile for the choice of RTP
 	// payload type values, with the additional restriction that payload type values in the
 	// range 64-95 MUST NOT be used. Specifically, dynamic RTP payload types SHOULD be chosen in
@@ -139,7 +139,7 @@ bool DtlsSrtpTransport::sendMedia(message_ptr message) {
 
 	if (message->dscp == 0) { // Track might override the value
 		// Set recommended medium-priority DSCP value
-		// See https://datatracker.ietf.org/doc/html/rfc8837#section-5
+		// See https://www.rfc-editor.org/rfc/rfc8837.html#section-5
 		message->dscp = 36; // AF42: Assured Forwarding class 4, medium drop probability
 	}
 
@@ -158,7 +158,7 @@ void DtlsSrtpTransport::incoming(message_ptr message) {
 		return;
 
 	// RFC 5764 5.1.2. Reception
-	// https://datatracker.ietf.org/doc/html/rfc5764#section-5.1.2
+	// https://www.rfc-editor.org/rfc/rfc5764.html#section-5.1.2
 	// The process for demultiplexing a packet is as follows. The receiver looks at the first byte
 	// of the packet. [...] If the value is in between 128 and 191 (inclusive), then the packet is
 	// RTP (or RTCP [...]). If the value is between 20 and 63 (inclusive), the packet is DTLS.

+ 9 - 9
src/impl/dtlstransport.cpp

@@ -66,14 +66,14 @@ DtlsTransport::DtlsTransport(shared_ptr<IceTransport> lower, certificate_ptr cer
 	try {
 		// RFC 8261: SCTP performs segmentation and reassembly based on the path MTU.
 		// Therefore, the DTLS layer MUST NOT use any compression algorithm.
-		// See https://datatracker.ietf.org/doc/html/rfc8261#section-5
+		// See https://www.rfc-editor.org/rfc/rfc8261.html#section-5
 		const char *priorities = "SECURE128:-VERS-SSL3.0:-ARCFOUR-128:-COMP-ALL:+COMP-NULL";
 		const char *err_pos = NULL;
 		gnutls::check(gnutls_priority_set_direct(mSession, priorities, &err_pos),
 		              "Failed to set TLS priorities");
 
 		// RFC 8827: The DTLS-SRTP protection profile SRTP_AES128_CM_HMAC_SHA1_80 MUST be supported
-		// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5
+		// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5
 		gnutls::check(gnutls_srtp_set_profile(mSession, GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80),
 		              "Failed to set SRTP profile");
 
@@ -183,7 +183,7 @@ void DtlsTransport::runRecvLoop() {
 		         !gnutls::check(ret, "DTLS handshake failed"));
 
 		// RFC 8261: DTLS MUST support sending messages larger than the current path MTU
-		// See https://datatracker.ietf.org/doc/html/rfc8261#section-5
+		// See https://www.rfc-editor.org/rfc/rfc8261.html#section-5
 		gnutls_dtls_set_mtu(mSession, bufferSize + 1);
 
 	} catch (const std::exception &e) {
@@ -208,7 +208,7 @@ void DtlsTransport::runRecvLoop() {
 
 			// RFC 8827: Implementations MUST NOT implement DTLS renegotiation and MUST reject it
 			// with a "no_renegotiation" alert if offered.
-			// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5
+			// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5
 			if (ret == GNUTLS_E_REHANDSHAKE) {
 				do {
 					std::lock_guard lock(mSendMutex);
@@ -377,9 +377,9 @@ DtlsTransport::DtlsTransport(shared_ptr<IceTransport> lower, certificate_ptr cer
 
 		// RFC 8261: SCTP performs segmentation and reassembly based on the path MTU.
 		// Therefore, the DTLS layer MUST NOT use any compression algorithm.
-		// See https://datatracker.ietf.org/doc/html/rfc8261#section-5
+		// See https://www.rfc-editor.org/rfc/rfc8261.html#section-5
 		// RFC 8827: Implementations MUST NOT implement DTLS renegotiation
-		// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5
+		// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5
 		SSL_CTX_set_options(mCtx, SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION | SSL_OP_NO_QUERY_MTU |
 		                              SSL_OP_NO_RENEGOTIATION);
 
@@ -427,7 +427,7 @@ DtlsTransport::DtlsTransport(shared_ptr<IceTransport> lower, certificate_ptr cer
 		SSL_set_tmp_ecdh(mSsl, ecdh.get());
 
 		// RFC 8827: The DTLS-SRTP protection profile SRTP_AES128_CM_HMAC_SHA1_80 MUST be supported
-		// See https://datatracker.ietf.org/doc/html/rfc8827#section-6.5 Warning:
+		// See https://www.rfc-editor.org/rfc/rfc8827.html#section-6.5 Warning:
 		// SSL_set_tlsext_use_srtp() returns 0 on success and 1 on error
 		if (SSL_set_tlsext_use_srtp(mSsl, "SRTP_AES128_CM_SHA1_80"))
 			throw std::runtime_error("Failed to set SRTP profile: " +
@@ -495,7 +495,7 @@ bool DtlsTransport::outgoing(message_ptr message) {
 		// DTLS handshake packet
 		if (state() != DtlsTransport::State::Connected) {
 			// Set recommended high-priority DSCP value
-			// See https://datatracker.ietf.org/doc/html/rfc8837#section-5
+			// See https://www.rfc-editor.org/rfc/rfc8837.html#section-5
 			message->dscp = 18; // AF21(18), Assured Forwarding class 2, low drop probability
 		} else {
 			message->dscp = mCurrentDscp;
@@ -536,7 +536,7 @@ void DtlsTransport::runRecvLoop() {
 
 					if (SSL_is_init_finished(mSsl)) {
 						// RFC 8261: DTLS MUST support sending messages larger than the current path
-						// MTU See https://datatracker.ietf.org/doc/html/rfc8261#section-5
+						// MTU See https://www.rfc-editor.org/rfc/rfc8261.html#section-5
 						SSL_set_mtu(mSsl, bufferSize + 1);
 
 						PLOG_INFO << "DTLS handshake finished";

+ 2 - 2
src/impl/icetransport.cpp

@@ -173,7 +173,7 @@ Description IceTransport::getLocalDescription(Description::Type type) const {
 
 	// RFC 5763: The endpoint that is the offerer MUST use the setup attribute value of
 	// setup:actpass.
-	// See https://datatracker.ietf.org/doc/html/rfc5763#section-5
+	// See https://www.rfc-editor.org/rfc/rfc5763.html#section-5
 	Description desc(string(sdp), type,
 	                 type == Description::Type::Offer ? Description::Role::ActPass : mRole);
 	desc.addIceOption("trickle");
@@ -586,7 +586,7 @@ Description IceTransport::getLocalDescription(Description::Type type) const {
 
 	// RFC 5763: The endpoint that is the offerer MUST use the setup attribute value of
 	// setup:actpass.
-	// See https://datatracker.ietf.org/doc/html/rfc5763#section-5
+	// See https://www.rfc-editor.org/rfc/rfc5763.html#section-5
 	Description desc(string(sdp.get()), type,
 	                 type == Description::Type::Offer ? Description::Role::ActPass : mRole);
 	desc.addIceOption("trickle");

+ 3 - 3
src/impl/peerconnection.cpp

@@ -427,7 +427,7 @@ void PeerConnection::forwardMessage(message_ptr message) {
 		if (!iceTransport || !sctpTransport)
 			return;
 
-		// See https://datatracker.ietf.org/doc/html/rfc8832
+		// See https://www.rfc-editor.org/rfc/rfc8832.html
 		const byte dataChannelOpenMessage{0x03};
 		uint16_t remoteParity = (iceTransport->role() == Description::Role::Active) ? 1 : 0;
 		if (message->type == Message::Control) {
@@ -599,7 +599,7 @@ shared_ptr<DataChannel> PeerConnection::emplaceDataChannel(string label, DataCha
 	} else {
 		// RFC 5763: The answerer MUST use either a setup attribute value of setup:active or
 		// setup:passive. [...] Thus, setup:active is RECOMMENDED.
-		// See https://datatracker.ietf.org/doc/html/rfc5763#section-5
+		// See https://www.rfc-editor.org/rfc/rfc5763.html#section-5
 		// Therefore, we assume passive role if we are the offerer.
 		auto iceTransport = getIceTransport();
 		auto role = iceTransport ? iceTransport->role() : Description::Role::Passive;
@@ -608,7 +608,7 @@ shared_ptr<DataChannel> PeerConnection::emplaceDataChannel(string label, DataCha
 		// which the corresponding incoming and outgoing streams are unused.  If the side is acting
 		// as the DTLS client, it MUST choose an even stream identifier; if the side is acting as
 		// the DTLS server, it MUST choose an odd one.
-		// See https://datatracker.ietf.org/doc/html/rfc8832#section-6
+		// See https://www.rfc-editor.org/rfc/rfc8832.html#section-6
 		stream = (role == Description::Role::Active) ? 0 : 1;
 		while (mDataChannels.find(stream) != mDataChannels.end()) {
 			if (stream >= 65535 - 2)

+ 9 - 9
src/impl/sctptransport.cpp

@@ -34,7 +34,7 @@
 
 // RFC 8831: SCTP MUST support performing Path MTU discovery without relying on ICMP or ICMPv6 as
 // specified in [RFC4821] by using probing messages specified in [RFC4820].
-// See https://datatracker.ietf.org/doc/html/rfc8831#section-5
+// See https://www.rfc-editor.org/rfc/rfc8831.html#section-5
 //
 // However, usrsctp does not implement Path MTU discovery, so we need to disable it for now.
 // See https://github.com/sctplab/usrsctp/issues/205
@@ -236,7 +236,7 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
 
 	// RFC 8831 6.6. Transferring User Data on a Data Channel
 	// The sender SHOULD disable the Nagle algorithm (see [RFC1122) to minimize the latency
-	// See https://datatracker.ietf.org/doc/html/rfc8831#section-6.6
+	// See https://www.rfc-editor.org/rfc/rfc8831.html#section-6.6
 	int nodelay = 1;
 	if (usrsctp_setsockopt(mSock, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, sizeof(nodelay)))
 		throw std::runtime_error("Could not set socket option SCTP_NODELAY, errno=" +
@@ -253,7 +253,7 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
 	// bit is not possible (for example, due to implementation restrictions), a safe value for the
 	// path MTU has to be used by the SCTP stack. It is RECOMMENDED that the safe value not exceed
 	// 1200 bytes.
-	// See https://datatracker.ietf.org/doc/html/rfc8261#section-5
+	// See https://www.rfc-editor.org/rfc/rfc8261.html#section-5
 #if USE_PMTUD
 	if (!config.mtu.has_value()) {
 #else
@@ -280,7 +280,7 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
 	// RFC 8831 6.2. SCTP Association Management
 	// The number of streams negotiated during SCTP association setup SHOULD be 65535, which is the
 	// maximum number of streams that can be negotiated during the association setup.
-	// See https://datatracker.ietf.org/doc/html/rfc8831#section-6.2
+	// See https://www.rfc-editor.org/rfc/rfc8831.html#section-6.2
 	struct sctp_initmsg sinit = {};
 	sinit.sinit_num_ostreams = 65535;
 	sinit.sinit_max_instreams = 65535;
@@ -385,7 +385,7 @@ void SctpTransport::connect() {
 
 	// According to RFC 8841, both endpoints must initiate the SCTP association, in a
 	// simultaneous-open manner, irrelevent to the SDP setup role.
-	// See https://datatracker.ietf.org/doc/html/rfc8841#section-9.3
+	// See https://www.rfc-editor.org/rfc/rfc8841.html#section-9.3
 	auto remote = getSockAddrConn(mPorts.remote);
 	int ret = usrsctp_connect(mSock, reinterpret_cast<struct sockaddr *>(&remote), sizeof(remote));
 	if (ret && errno != EINPROGRESS)
@@ -443,7 +443,7 @@ void SctpTransport::closeStream(unsigned int stream) {
 
 	// RFC 8831 6.7. Closing a Data Channel
 	// Closing of a data channel MUST be signaled by resetting the corresponding outgoing streams
-	// See https://datatracker.ietf.org/doc/html/rfc8831#section-6.7
+	// See https://www.rfc-editor.org/rfc/rfc8831.html#section-6.7
 	mSendQueue.push(make_message(0, Message::Reset, to_uint16(stream)));
 
 	// This method must not call the buffered callback synchronously
@@ -473,7 +473,7 @@ void SctpTransport::incoming(message_ptr message) {
 
 bool SctpTransport::outgoing(message_ptr message) {
 	// Set recommended medium-priority DSCP value
-	// See https://datatracker.ietf.org/doc/html/rfc8837#section-5
+	// See https://www.rfc-editor.org/rfc/rfc8837.html#section-5
 	message->dscp = 10; // AF11: Assured Forwarding class 1, low drop probability
 	return Transport::outgoing(std::move(message));
 }
@@ -736,7 +736,7 @@ void SctpTransport::processData(binary &&data, uint16_t sid, PayloadId ppid) {
 	// RFC 8831: The usage of the PPIDs "WebRTC String Partial" and "WebRTC Binary Partial" is
 	// deprecated. They were used for a PPID-based fragmentation and reassembly of user messages
 	// belonging to reliable and ordered data channels.
-	// See https://datatracker.ietf.org/doc/html/rfc8831#section-6.6
+	// See https://www.rfc-editor.org/rfc/rfc8831.html#section-6.6
 	// We handle those PPIDs at reception for compatibility reasons but shall never send them.
 	switch (ppid) {
 	case PPID_CONTROL:
@@ -860,7 +860,7 @@ void SctpTransport::processNotification(const union sctp_notification *notify, s
 		// If one side decides to close the data channel, it resets the corresponding outgoing
 		// stream. When the peer sees that an incoming stream was reset, it also resets its
 		// corresponding outgoing stream.
-		// See https://datatracker.ietf.org/doc/html/rfc8831#section-6.7
+		// See https://www.rfc-editor.org/rfc/rfc8831.html#section-6.7
 		if (flags & SCTP_STREAM_RESET_INCOMING_SSN) {
 			const byte dataChannelCloseMessage{0x04};
 			for (int i = 0; i < count; ++i) {

+ 1 - 1
src/impl/track.cpp

@@ -175,7 +175,7 @@ bool Track::transportSend([[maybe_unused]] message_ptr message) {
 			throw std::runtime_error("Track is closed");
 
 		// Set recommended medium-priority DSCP value
-		// See https://datatracker.ietf.org/doc/html/rfc8837#section-5
+		// See https://www.rfc-editor.org/rfc/rfc8837.html#section-5
 		if (mMediaDescription.type() == "audio")
 			message->dscp = 46; // EF: Expedited Forwarding
 		else

+ 1 - 1
src/impl/websocket.cpp

@@ -57,7 +57,7 @@ void WebSocket::open(const string &url) {
 	if (state != State::Closed)
 		throw std::logic_error("WebSocket must be closed before opening");
 
-	// Modified regex from RFC 3986, see https://datatracker.ietf.org/doc/html/rfc3986#appendix-B
+	// Modified regex from RFC 3986, see https://www.rfc-editor.org/rfc/rfc3986.html#appendix-B
 	static const char *rs =
 	    R"(^(([^:.@/?#]+):)?(/{0,2}((([^:@]*)(:([^@]*))?)@)?(([^:/?#]*)(:([^/?#]*))?))?([^?#]*)(\?([^#]*))?(#(.*))?)";
 

+ 1 - 1
src/impl/wstransport.cpp

@@ -204,7 +204,7 @@ bool WsTransport::sendHttpError(int code) {
 }
 
 // RFC6455 5.2. Base Framing Protocol
-// http://datatracker.ietf.org/doc/html/rfc6455#section-5.2
+// https://www.rfc-editor.org/rfc/rfc6455.html#section-5.2
 //
 //  0                   1                   2                   3
 //  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+ 1 - 1
src/rtcpreceivingsession.cpp

@@ -48,7 +48,7 @@ message_ptr RtcpReceivingSession::incoming(message_ptr ptr) {
 	if (ptr->type == Message::Binary) {
 		auto rtp = reinterpret_cast<const RtpHeader *>(ptr->data());
 
-		// https://datatracker.ietf.org/doc/html/rfc3550#appendix-A.1
+		// https://www.rfc-editor.org/rfc/rfc3550.html#appendix-A.1
 		if (rtp->version() != 2) {
 			COUNTER_BAD_RTP_HEADER++;
 			PLOG_VERBOSE << "RTP packet is not version 2";