From 4793e9e3cee22c2e9b651f524af904aca3be825d Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Tue, 15 Dec 2020 12:40:57 +0100 Subject: [PATCH] sdp: ignore legacy sctpmap line and reorganise the parsing Bug: None Change-Id: I21f08297429a0cc0265da00daa681d934fc43d66 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196643 Commit-Queue: Harald Alvestrand Reviewed-by: Harald Alvestrand Cr-Commit-Position: refs/heads/master@{#32843} --- pc/webrtc_sdp.cc | 64 ++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc index 7f61a26293..14eb0df922 100644 --- a/pc/webrtc_sdp.cc +++ b/pc/webrtc_sdp.cc @@ -3128,38 +3128,44 @@ bool ParseContent(const std::string& message, if (!ParseDtlsSetup(line, &(transport->connection_role), error)) { return false; } - } else if (cricket::IsDtlsSctp(protocol) && - HasAttribute(line, kAttributeSctpPort)) { - if (media_type != cricket::MEDIA_TYPE_DATA) { - return ParseFailed( - line, "sctp-port attribute found in non-data media description.", - error); + } else if (cricket::IsDtlsSctp(protocol)) { + // + // SCTP specific attributes + // + if (HasAttribute(line, kAttributeSctpPort)) { + if (media_type != cricket::MEDIA_TYPE_DATA) { + return ParseFailed( + line, "sctp-port attribute found in non-data media description.", + error); + } + if (media_desc->as_sctp()->use_sctpmap()) { + return ParseFailed( + line, "sctp-port attribute can't be used with sctpmap.", error); + } + int sctp_port; + if (!ParseSctpPort(line, &sctp_port, error)) { + return false; + } + media_desc->as_sctp()->set_port(sctp_port); + } else if (HasAttribute(line, kAttributeMaxMessageSize)) { + if (media_type != cricket::MEDIA_TYPE_DATA) { + return ParseFailed( + line, + "max-message-size attribute found in non-data media description.", + error); + } + int max_message_size; + if (!ParseSctpMaxMessageSize(line, &max_message_size, error)) { + return false; + } + media_desc->as_sctp()->set_max_message_size(max_message_size); + } else if (HasAttribute(line, kAttributeSctpmap)) { + // Ignore a=sctpmap: from early versions of draft-ietf-mmusic-sctp-sdp + continue; } - if (media_desc->as_sctp()->use_sctpmap()) { - return ParseFailed( - line, "sctp-port attribute can't be used with sctpmap.", error); - } - int sctp_port; - if (!ParseSctpPort(line, &sctp_port, error)) { - return false; - } - media_desc->as_sctp()->set_port(sctp_port); - } else if (cricket::IsDtlsSctp(protocol) && - HasAttribute(line, kAttributeMaxMessageSize)) { - if (media_type != cricket::MEDIA_TYPE_DATA) { - return ParseFailed( - line, - "max-message-size attribute found in non-data media description.", - error); - } - int max_message_size; - if (!ParseSctpMaxMessageSize(line, &max_message_size, error)) { - return false; - } - media_desc->as_sctp()->set_max_message_size(max_message_size); } else if (cricket::IsRtpProtocol(protocol)) { // - // RTP specific attrubtes + // RTP specific attributes // if (HasAttribute(line, kAttributeRtcpMux)) { media_desc->set_rtcp_mux(true);