Cleanup: Move some more protocol names into media_protocol_names
Bug: None
Change-Id: I29ccee993ece01ffbafa85f09abb7cf64dba82d7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/237020
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35295}
diff --git a/pc/media_protocol_names.cc b/pc/media_protocol_names.cc
index 0b091ee..667535b 100644
--- a/pc/media_protocol_names.cc
+++ b/pc/media_protocol_names.cc
@@ -17,16 +17,42 @@
namespace cricket {
+// The official registry of RTP parameters is at
+// http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xml
+// The UDP/DTLS and TCP/DTLS prefixes are not registered there.
+
// There are multiple variants of the RTP protocol stack, including
// UDP/TLS/RTP/SAVPF (WebRTC default), RTP/AVP, RTP/AVPF, RTP/SAVPF,
// TCP/DTLS/RTP/SAVPF and so on. We accept anything that has RTP/
// embedded in it somewhere as being an RTP protocol.
const char kMediaProtocolRtpPrefix[] = "RTP/";
+// Protocol names generated by WebRTC
const char kMediaProtocolSctp[] = "SCTP";
-const char kMediaProtocolDtlsSctp[] = "DTLS/SCTP";
const char kMediaProtocolUdpDtlsSctp[] = "UDP/DTLS/SCTP";
+const char kMediaProtocolDtlsSctp[] = "DTLS/SCTP";
const char kMediaProtocolTcpDtlsSctp[] = "TCP/DTLS/SCTP";
+// RFC5124
+const char kMediaProtocolDtlsSavpf[] = "UDP/TLS/RTP/SAVPF";
+const char kMediaProtocolSavpf[] = "RTP/SAVPF";
+const char kMediaProtocolAvpf[] = "RTP/AVPF";
+
+namespace {
+
+// Protocol names that we tolerate, but do not generate.
+// We always generate offers with "UDP/TLS/RTP/SAVPF" when using DTLS-SRTP,
+// but we tolerate "RTP/SAVPF" and "RTP/SAVP" and the "UDP/TLS" and "TCP/TLS"
+// prefixes in offers we receive, for compatibility.
+// RFC4585
+const char kMediaProtocolSavp[] = "RTP/SAVP";
+const char kMediaProtocolAvp[] = "RTP/AVP";
+
+const char kMediaProtocolTcpTlsSavpf[] = "TCP/TLS/RTP/SAVPF";
+const char kMediaProtocolUdpTlsSavpf[] = "UDP/TLS/RTP/SAVPF";
+const char kMediaProtocolTcpTlsSavp[] = "TCP/TLS/RTP/SAVP";
+const char kMediaProtocolUdpTlsSavp[] = "UDP/TLS/RTP/SAVP";
+
+} // namespace
bool IsDtlsSctp(absl::string_view protocol) {
return protocol == kMediaProtocolDtlsSctp ||
@@ -38,6 +64,10 @@
return protocol == kMediaProtocolSctp;
}
+bool IsSctpProtocol(absl::string_view protocol) {
+ return IsPlainSctp(protocol) || IsDtlsSctp(protocol);
+}
+
bool IsRtpProtocol(absl::string_view protocol) {
if (protocol.empty()) {
return true;
@@ -53,8 +83,23 @@
return false;
}
-bool IsSctpProtocol(absl::string_view protocol) {
- return IsPlainSctp(protocol) || IsDtlsSctp(protocol);
+// Note that the below functions support some protocol strings purely for
+// legacy compatibility, as required by JSEP in Section 5.1.2, Profile Names
+// and Interoperability.
+
+bool IsDtlsRtp(absl::string_view protocol) {
+ // Most-likely values first.
+ return protocol == kMediaProtocolDtlsSavpf ||
+ protocol == kMediaProtocolTcpTlsSavpf ||
+ protocol == kMediaProtocolUdpTlsSavpf ||
+ protocol == kMediaProtocolUdpTlsSavp ||
+ protocol == kMediaProtocolTcpTlsSavp;
+}
+
+bool IsPlainRtp(absl::string_view protocol) {
+ // Most-likely values first.
+ return protocol == kMediaProtocolSavpf || protocol == kMediaProtocolAvpf ||
+ protocol == kMediaProtocolSavp || protocol == kMediaProtocolAvp;
}
} // namespace cricket
diff --git a/pc/media_protocol_names.h b/pc/media_protocol_names.h
index 048cafa..989c1da 100644
--- a/pc/media_protocol_names.h
+++ b/pc/media_protocol_names.h
@@ -15,21 +15,33 @@
namespace cricket {
-// Names or name prefixes of protocols as defined by SDP specifications.
-extern const char kMediaProtocolRtpPrefix[];
+// Names or name prefixes of protocols as defined by SDP specifications,
+// and generated in SDP produced by WebRTC.
extern const char kMediaProtocolSctp[];
-extern const char kMediaProtocolDtlsSctp[];
extern const char kMediaProtocolUdpDtlsSctp[];
-extern const char kMediaProtocolTcpDtlsSctp[];
+extern const char kMediaProtocolDtlsSavpf[];
+extern const char kMediaProtocolSavpf[];
+extern const char kMediaProtocolAvpf[];
-bool IsDtlsSctp(absl::string_view protocol);
-bool IsPlainSctp(absl::string_view protocol);
+// Exported for testing only
+extern const char kMediaProtocolTcpDtlsSctp[];
+extern const char kMediaProtocolDtlsSctp[];
// Returns true if the given media section protocol indicates use of RTP.
bool IsRtpProtocol(absl::string_view protocol);
// Returns true if the given media section protocol indicates use of SCTP.
bool IsSctpProtocol(absl::string_view protocol);
+// Returns true if the given media protocol is unencrypted SCTP
+bool IsPlainSctp(absl::string_view protocol);
+// Returns true if the given media protocol is encrypted SCTP
+bool IsDtlsSctp(absl::string_view protocol);
+
+// Returns true if the given media protocol is unencrypted RTP
+bool IsPlainRtp(absl::string_view protocol);
+// Returns true if the given media protocol is encrypted RTP
+bool IsDtlsRtp(absl::string_view protocol);
+
} // namespace cricket
#endif // PC_MEDIA_PROTOCOL_NAMES_H_
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 21da2da..a53a164 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -116,33 +116,6 @@
namespace cricket {
-// RTP Profile names
-// http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xml
-// RFC4585
-const char kMediaProtocolAvpf[] = "RTP/AVPF";
-// RFC5124
-const char kMediaProtocolDtlsSavpf[] = "UDP/TLS/RTP/SAVPF";
-
-// We always generate offers with "UDP/TLS/RTP/SAVPF" when using DTLS-SRTP,
-// but we tolerate "RTP/SAVPF" in offers we receive, for compatibility.
-const char kMediaProtocolSavpf[] = "RTP/SAVPF";
-
-// Note that the below functions support some protocol strings purely for
-// legacy compatibility, as required by JSEP in Section 5.1.2, Profile Names
-// and Interoperability.
-
-static bool IsDtlsRtp(const std::string& protocol) {
- // Most-likely values first.
- return protocol == "UDP/TLS/RTP/SAVPF" || protocol == "TCP/TLS/RTP/SAVPF" ||
- protocol == "UDP/TLS/RTP/SAVP" || protocol == "TCP/TLS/RTP/SAVP";
-}
-
-static bool IsPlainRtp(const std::string& protocol) {
- // Most-likely values first.
- return protocol == "RTP/SAVPF" || protocol == "RTP/AVPF" ||
- protocol == "RTP/SAVP" || protocol == "RTP/AVP";
-}
-
static RtpTransceiverDirection NegotiateRtpTransceiverDirection(
RtpTransceiverDirection offer,
RtpTransceiverDirection wants) {
@@ -1436,14 +1409,12 @@
}
if (type == MEDIA_TYPE_DATA) {
- // Check for SCTP, but also for RTP for RTP-based data channels.
- // TODO(pthatcher): Remove RTP once RTP-based data channels are gone.
+ // Check for SCTP
if (secure_transport) {
// Most likely scenarios first.
- return IsDtlsSctp(protocol) || IsDtlsRtp(protocol) ||
- IsPlainRtp(protocol);
+ return IsDtlsSctp(protocol);
} else {
- return IsPlainSctp(protocol) || IsPlainRtp(protocol);
+ return IsPlainSctp(protocol);
}
}
diff --git a/pc/session_description.h b/pc/session_description.h
index fed0839..ee7a91c 100644
--- a/pc/session_description.h
+++ b/pc/session_description.h
@@ -47,13 +47,6 @@
typedef std::vector<CryptoParams> CryptoParamsVec;
typedef std::vector<webrtc::RtpExtension> RtpHeaderExtensions;
-// RTC4585 RTP/AVPF
-extern const char kMediaProtocolAvpf[];
-// RFC5124 RTP/SAVPF
-extern const char kMediaProtocolSavpf[];
-
-extern const char kMediaProtocolDtlsSavpf[];
-
// Options to control how session descriptions are generated.
const int kAutoBandwidth = -1;