| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 rtc::ToString(matching_codec.id); | 949 rtc::ToString(matching_codec.id); |
| 950 used_pltypes->FindAndSetIdUsed(&rtx_codec); | 950 used_pltypes->FindAndSetIdUsed(&rtx_codec); |
| 951 offered_codecs->push_back(rtx_codec); | 951 offered_codecs->push_back(rtx_codec); |
| 952 } | 952 } |
| 953 } | 953 } |
| 954 } | 954 } |
| 955 | 955 |
| 956 static bool FindByUri(const RtpHeaderExtensions& extensions, | 956 static bool FindByUri(const RtpHeaderExtensions& extensions, |
| 957 const webrtc::RtpExtension& ext_to_match, | 957 const webrtc::RtpExtension& ext_to_match, |
| 958 webrtc::RtpExtension* found_extension) { | 958 webrtc::RtpExtension* found_extension) { |
| 959 // We assume that all URIs are given in a canonical format. |
| 960 const webrtc::RtpExtension* found = |
| 961 webrtc::RtpExtension::FindHeaderExtensionByUri(extensions, |
| 962 ext_to_match.uri); |
| 963 if (!found) { |
| 964 return false; |
| 965 } |
| 966 if (found_extension) { |
| 967 *found_extension = *found; |
| 968 } |
| 969 return true; |
| 970 } |
| 971 |
| 972 static bool FindByUriWithEncryptionPreference( |
| 973 const RtpHeaderExtensions& extensions, |
| 974 const webrtc::RtpExtension& ext_to_match, bool encryption_preference, |
| 975 webrtc::RtpExtension* found_extension) { |
| 976 const webrtc::RtpExtension* unencrypted_extension = nullptr; |
| 959 for (RtpHeaderExtensions::const_iterator it = extensions.begin(); | 977 for (RtpHeaderExtensions::const_iterator it = extensions.begin(); |
| 960 it != extensions.end(); ++it) { | 978 it != extensions.end(); ++it) { |
| 961 // We assume that all URIs are given in a canonical format. | 979 // We assume that all URIs are given in a canonical format. |
| 962 if (it->uri == ext_to_match.uri) { | 980 if (it->uri == ext_to_match.uri) { |
| 963 if (found_extension != NULL) { | 981 if (!encryption_preference || it->encrypt) { |
| 964 *found_extension = *it; | 982 if (found_extension) { |
| 983 *found_extension = *it; |
| 984 } |
| 985 return true; |
| 965 } | 986 } |
| 966 return true; | 987 unencrypted_extension = &(*it); |
| 967 } | 988 } |
| 968 } | 989 } |
| 990 if (unencrypted_extension) { |
| 991 if (found_extension) { |
| 992 *found_extension = *unencrypted_extension; |
| 993 } |
| 994 return true; |
| 995 } |
| 969 return false; | 996 return false; |
| 970 } | 997 } |
| 971 | 998 |
| 972 // Iterates through |offered_extensions|, adding each one to |all_extensions| | 999 // Iterates through |offered_extensions|, adding each one to |
| 973 // and |used_ids|, and resolving ID conflicts. If an offered extension has the | 1000 // |regular_extensions| (or |encrypted_extensions| if encrypted) and |used_ids|, |
| 974 // same URI as one in |all_extensions|, it will re-use the same ID and won't be | 1001 // and resolving ID conflicts. |
| 975 // treated as a conflict. | 1002 // If an offered extension has the same URI as one in |regular_extensions| or |
| 1003 // |encrypted_extensions|, it will re-use the same ID and won't be treated as |
| 1004 // a conflict. |
| 976 static void FindAndSetRtpHdrExtUsed(RtpHeaderExtensions* offered_extensions, | 1005 static void FindAndSetRtpHdrExtUsed(RtpHeaderExtensions* offered_extensions, |
| 977 RtpHeaderExtensions* all_extensions, | 1006 RtpHeaderExtensions* regular_extensions, |
| 1007 RtpHeaderExtensions* encrypted_extensions, |
| 978 UsedRtpHeaderExtensionIds* used_ids) { | 1008 UsedRtpHeaderExtensionIds* used_ids) { |
| 979 for (auto& extension : *offered_extensions) { | 1009 for (auto& extension : *offered_extensions) { |
| 980 webrtc::RtpExtension existing; | 1010 webrtc::RtpExtension existing; |
| 981 if (FindByUri(*all_extensions, extension, &existing)) { | 1011 if ((extension.encrypt && |
| 1012 FindByUri(*encrypted_extensions, extension, &existing)) || |
| 1013 (!extension.encrypt && |
| 1014 FindByUri(*regular_extensions, extension, &existing))) { |
| 982 extension.id = existing.id; | 1015 extension.id = existing.id; |
| 983 } else { | 1016 } else { |
| 984 used_ids->FindAndSetIdUsed(&extension); | 1017 used_ids->FindAndSetIdUsed(&extension); |
| 985 all_extensions->push_back(extension); | 1018 if (extension.encrypt) { |
| 1019 encrypted_extensions->push_back(extension); |
| 1020 } else { |
| 1021 regular_extensions->push_back(extension); |
| 1022 } |
| 986 } | 1023 } |
| 987 } | 1024 } |
| 988 } | 1025 } |
| 989 | 1026 |
| 990 // Adds |reference_extensions| to |offered_extensions|, while updating | 1027 // Adds |reference_extensions| to |offered_extensions|, while updating |
| 991 // |all_extensions| and |used_ids|. | 1028 // |all_extensions| and |used_ids|. |
| 992 static void FindRtpHdrExtsToOffer( | 1029 static void FindRtpHdrExtsToOffer( |
| 993 const RtpHeaderExtensions& reference_extensions, | 1030 const RtpHeaderExtensions& reference_extensions, |
| 994 RtpHeaderExtensions* offered_extensions, | 1031 RtpHeaderExtensions* offered_extensions, |
| 995 RtpHeaderExtensions* all_extensions, | 1032 RtpHeaderExtensions* all_extensions, |
| 996 UsedRtpHeaderExtensionIds* used_ids) { | 1033 UsedRtpHeaderExtensionIds* used_ids) { |
| 997 for (auto reference_extension : reference_extensions) { | 1034 for (auto reference_extension : reference_extensions) { |
| 998 if (!FindByUri(*offered_extensions, reference_extension, NULL)) { | 1035 if (!FindByUri(*offered_extensions, reference_extension, NULL)) { |
| 999 webrtc::RtpExtension existing; | 1036 webrtc::RtpExtension existing; |
| 1000 if (FindByUri(*all_extensions, reference_extension, &existing)) { | 1037 if (FindByUri(*all_extensions, reference_extension, &existing)) { |
| 1001 offered_extensions->push_back(existing); | 1038 offered_extensions->push_back(existing); |
| 1002 } else { | 1039 } else { |
| 1003 used_ids->FindAndSetIdUsed(&reference_extension); | 1040 used_ids->FindAndSetIdUsed(&reference_extension); |
| 1004 all_extensions->push_back(reference_extension); | 1041 all_extensions->push_back(reference_extension); |
| 1005 offered_extensions->push_back(reference_extension); | 1042 offered_extensions->push_back(reference_extension); |
| 1006 } | 1043 } |
| 1007 } | 1044 } |
| 1008 } | 1045 } |
| 1009 } | 1046 } |
| 1010 | 1047 |
| 1048 static void AddEncryptedVersionsOfHdrExts(RtpHeaderExtensions* extensions, |
| 1049 RtpHeaderExtensions* all_extensions, |
| 1050 UsedRtpHeaderExtensionIds* used_ids) { |
| 1051 RtpHeaderExtensions encrypted_extensions; |
| 1052 for (const webrtc::RtpExtension& extension : *extensions) { |
| 1053 webrtc::RtpExtension existing; |
| 1054 // Don't add encrypted extensions again that were already included in a |
| 1055 // previous offer or regular extensions that are also included as encrypted |
| 1056 // extensions. |
| 1057 if (extension.encrypt || |
| 1058 !webrtc::RtpExtension::IsEncryptionSupported(extension.uri) || |
| 1059 (FindByUriWithEncryptionPreference(*extensions, extension, true, |
| 1060 &existing) && existing.encrypt)) { |
| 1061 continue; |
| 1062 } |
| 1063 |
| 1064 if (FindByUri(*all_extensions, extension, &existing)) { |
| 1065 encrypted_extensions.push_back(existing); |
| 1066 } else { |
| 1067 webrtc::RtpExtension encrypted(extension); |
| 1068 encrypted.encrypt = true; |
| 1069 used_ids->FindAndSetIdUsed(&encrypted); |
| 1070 all_extensions->push_back(encrypted); |
| 1071 encrypted_extensions.push_back(encrypted); |
| 1072 } |
| 1073 } |
| 1074 extensions->insert(extensions->end(), encrypted_extensions.begin(), |
| 1075 encrypted_extensions.end()); |
| 1076 } |
| 1077 |
| 1011 static void NegotiateRtpHeaderExtensions( | 1078 static void NegotiateRtpHeaderExtensions( |
| 1012 const RtpHeaderExtensions& local_extensions, | 1079 const RtpHeaderExtensions& local_extensions, |
| 1013 const RtpHeaderExtensions& offered_extensions, | 1080 const RtpHeaderExtensions& offered_extensions, |
| 1081 bool enable_encrypted_rtp_header_extensions, |
| 1014 RtpHeaderExtensions* negotiated_extenstions) { | 1082 RtpHeaderExtensions* negotiated_extenstions) { |
| 1015 RtpHeaderExtensions::const_iterator ours; | 1083 RtpHeaderExtensions::const_iterator ours; |
| 1016 for (ours = local_extensions.begin(); | 1084 for (ours = local_extensions.begin(); |
| 1017 ours != local_extensions.end(); ++ours) { | 1085 ours != local_extensions.end(); ++ours) { |
| 1018 webrtc::RtpExtension theirs; | 1086 webrtc::RtpExtension theirs; |
| 1019 if (FindByUri(offered_extensions, *ours, &theirs)) { | 1087 if (FindByUriWithEncryptionPreference(offered_extensions, *ours, |
| 1088 enable_encrypted_rtp_header_extensions, &theirs)) { |
| 1020 // We respond with their RTP header extension id. | 1089 // We respond with their RTP header extension id. |
| 1021 negotiated_extenstions->push_back(theirs); | 1090 negotiated_extenstions->push_back(theirs); |
| 1022 } | 1091 } |
| 1023 } | 1092 } |
| 1024 } | 1093 } |
| 1025 | 1094 |
| 1026 static void StripCNCodecs(AudioCodecs* audio_codecs) { | 1095 static void StripCNCodecs(AudioCodecs* audio_codecs) { |
| 1027 AudioCodecs::iterator iter = audio_codecs->begin(); | 1096 AudioCodecs::iterator iter = audio_codecs->begin(); |
| 1028 while (iter != audio_codecs->end()) { | 1097 while (iter != audio_codecs->end()) { |
| 1029 if (STR_CASE_CMP(iter->name.c_str(), kComfortNoiseCodecName) == 0) { | 1098 if (STR_CASE_CMP(iter->name.c_str(), kComfortNoiseCodecName) == 0) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1044 // from the incoming session-initiate. If the negotiation fails, this | 1113 // from the incoming session-initiate. If the negotiation fails, this |
| 1045 // method returns false. The created content is added to the offer. | 1114 // method returns false. The created content is added to the offer. |
| 1046 template <class C> | 1115 template <class C> |
| 1047 static bool CreateMediaContentAnswer( | 1116 static bool CreateMediaContentAnswer( |
| 1048 const MediaContentDescriptionImpl<C>* offer, | 1117 const MediaContentDescriptionImpl<C>* offer, |
| 1049 const MediaSessionOptions& options, | 1118 const MediaSessionOptions& options, |
| 1050 const std::vector<C>& local_codecs, | 1119 const std::vector<C>& local_codecs, |
| 1051 const SecurePolicy& sdes_policy, | 1120 const SecurePolicy& sdes_policy, |
| 1052 const CryptoParamsVec* current_cryptos, | 1121 const CryptoParamsVec* current_cryptos, |
| 1053 const RtpHeaderExtensions& local_rtp_extenstions, | 1122 const RtpHeaderExtensions& local_rtp_extenstions, |
| 1123 bool enable_encrypted_rtp_header_extensions, |
| 1054 StreamParamsVec* current_streams, | 1124 StreamParamsVec* current_streams, |
| 1055 bool add_legacy_stream, | 1125 bool add_legacy_stream, |
| 1056 bool bundle_enabled, | 1126 bool bundle_enabled, |
| 1057 MediaContentDescriptionImpl<C>* answer) { | 1127 MediaContentDescriptionImpl<C>* answer) { |
| 1058 std::vector<C> negotiated_codecs; | 1128 std::vector<C> negotiated_codecs; |
| 1059 NegotiateCodecs(local_codecs, offer->codecs(), &negotiated_codecs); | 1129 NegotiateCodecs(local_codecs, offer->codecs(), &negotiated_codecs); |
| 1060 answer->AddCodecs(negotiated_codecs); | 1130 answer->AddCodecs(negotiated_codecs); |
| 1061 answer->set_protocol(offer->protocol()); | 1131 answer->set_protocol(offer->protocol()); |
| 1062 RtpHeaderExtensions negotiated_rtp_extensions; | 1132 RtpHeaderExtensions negotiated_rtp_extensions; |
| 1063 NegotiateRtpHeaderExtensions(local_rtp_extenstions, | 1133 NegotiateRtpHeaderExtensions(local_rtp_extenstions, |
| 1064 offer->rtp_header_extensions(), | 1134 offer->rtp_header_extensions(), |
| 1135 enable_encrypted_rtp_header_extensions, |
| 1065 &negotiated_rtp_extensions); | 1136 &negotiated_rtp_extensions); |
| 1066 answer->set_rtp_header_extensions(negotiated_rtp_extensions); | 1137 answer->set_rtp_header_extensions(negotiated_rtp_extensions); |
| 1067 | 1138 |
| 1068 answer->set_rtcp_mux(options.rtcp_mux_enabled && offer->rtcp_mux()); | 1139 answer->set_rtcp_mux(options.rtcp_mux_enabled && offer->rtcp_mux()); |
| 1069 if (answer->type() == cricket::MEDIA_TYPE_VIDEO) { | 1140 if (answer->type() == cricket::MEDIA_TYPE_VIDEO) { |
| 1070 answer->set_rtcp_reduced_size(offer->rtcp_reduced_size()); | 1141 answer->set_rtcp_reduced_size(offer->rtcp_reduced_size()); |
| 1071 } | 1142 } |
| 1072 | 1143 |
| 1073 if (sdes_policy != SEC_DISABLED) { | 1144 if (sdes_policy != SEC_DISABLED) { |
| 1074 CryptoParams crypto; | 1145 CryptoParams crypto; |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1573 &used_pltypes); | 1644 &used_pltypes); |
| 1574 } | 1645 } |
| 1575 | 1646 |
| 1576 void MediaSessionDescriptionFactory::GetRtpHdrExtsToOffer( | 1647 void MediaSessionDescriptionFactory::GetRtpHdrExtsToOffer( |
| 1577 const SessionDescription* current_description, | 1648 const SessionDescription* current_description, |
| 1578 RtpHeaderExtensions* audio_extensions, | 1649 RtpHeaderExtensions* audio_extensions, |
| 1579 RtpHeaderExtensions* video_extensions) const { | 1650 RtpHeaderExtensions* video_extensions) const { |
| 1580 // All header extensions allocated from the same range to avoid potential | 1651 // All header extensions allocated from the same range to avoid potential |
| 1581 // issues when using BUNDLE. | 1652 // issues when using BUNDLE. |
| 1582 UsedRtpHeaderExtensionIds used_ids; | 1653 UsedRtpHeaderExtensionIds used_ids; |
| 1583 RtpHeaderExtensions all_extensions; | 1654 RtpHeaderExtensions all_regular_extensions; |
| 1655 RtpHeaderExtensions all_encrypted_extensions; |
| 1584 audio_extensions->clear(); | 1656 audio_extensions->clear(); |
| 1585 video_extensions->clear(); | 1657 video_extensions->clear(); |
| 1586 | 1658 |
| 1587 // First - get all extensions from the current description if the media type | 1659 // First - get all extensions from the current description if the media type |
| 1588 // is used. | 1660 // is used. |
| 1589 // Add them to |used_ids| so the local ids are not reused if a new media | 1661 // Add them to |used_ids| so the local ids are not reused if a new media |
| 1590 // type is added. | 1662 // type is added. |
| 1591 if (current_description) { | 1663 if (current_description) { |
| 1592 const AudioContentDescription* audio = | 1664 const AudioContentDescription* audio = |
| 1593 GetFirstAudioContentDescription(current_description); | 1665 GetFirstAudioContentDescription(current_description); |
| 1594 if (audio) { | 1666 if (audio) { |
| 1595 *audio_extensions = audio->rtp_header_extensions(); | 1667 *audio_extensions = audio->rtp_header_extensions(); |
| 1596 FindAndSetRtpHdrExtUsed(audio_extensions, &all_extensions, &used_ids); | 1668 FindAndSetRtpHdrExtUsed(audio_extensions, &all_regular_extensions, |
| 1669 &all_encrypted_extensions, &used_ids); |
| 1597 } | 1670 } |
| 1598 const VideoContentDescription* video = | 1671 const VideoContentDescription* video = |
| 1599 GetFirstVideoContentDescription(current_description); | 1672 GetFirstVideoContentDescription(current_description); |
| 1600 if (video) { | 1673 if (video) { |
| 1601 *video_extensions = video->rtp_header_extensions(); | 1674 *video_extensions = video->rtp_header_extensions(); |
| 1602 FindAndSetRtpHdrExtUsed(video_extensions, &all_extensions, &used_ids); | 1675 FindAndSetRtpHdrExtUsed(video_extensions, &all_regular_extensions, |
| 1676 &all_encrypted_extensions, &used_ids); |
| 1603 } | 1677 } |
| 1604 } | 1678 } |
| 1605 | 1679 |
| 1606 // Add our default RTP header extensions that are not in | 1680 // Add our default RTP header extensions that are not in |
| 1607 // |current_description|. | 1681 // |current_description|. |
| 1608 FindRtpHdrExtsToOffer(audio_rtp_header_extensions(), audio_extensions, | 1682 FindRtpHdrExtsToOffer(audio_rtp_header_extensions(), audio_extensions, |
| 1609 &all_extensions, &used_ids); | 1683 &all_regular_extensions, &used_ids); |
| 1610 FindRtpHdrExtsToOffer(video_rtp_header_extensions(), video_extensions, | 1684 FindRtpHdrExtsToOffer(video_rtp_header_extensions(), video_extensions, |
| 1611 &all_extensions, &used_ids); | 1685 &all_regular_extensions, &used_ids); |
| 1686 // TODO(jbauch): Support adding encrypted header extensions to existing |
| 1687 // sessions. |
| 1688 if (enable_encrypted_rtp_header_extensions_ && !current_description) { |
| 1689 AddEncryptedVersionsOfHdrExts(audio_extensions, &all_encrypted_extensions, |
| 1690 &used_ids); |
| 1691 AddEncryptedVersionsOfHdrExts(video_extensions, &all_encrypted_extensions, |
| 1692 &used_ids); |
| 1693 } |
| 1612 } | 1694 } |
| 1613 | 1695 |
| 1614 bool MediaSessionDescriptionFactory::AddTransportOffer( | 1696 bool MediaSessionDescriptionFactory::AddTransportOffer( |
| 1615 const std::string& content_name, | 1697 const std::string& content_name, |
| 1616 const TransportOptions& transport_options, | 1698 const TransportOptions& transport_options, |
| 1617 const SessionDescription* current_desc, | 1699 const SessionDescription* current_desc, |
| 1618 SessionDescription* offer_desc) const { | 1700 SessionDescription* offer_desc) const { |
| 1619 if (!transport_desc_factory_) | 1701 if (!transport_desc_factory_) |
| 1620 return false; | 1702 return false; |
| 1621 const TransportDescription* current_tdesc = | 1703 const TransportDescription* current_tdesc = |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1879 // Do not require or create SDES cryptos if DTLS is used. | 1961 // Do not require or create SDES cryptos if DTLS is used. |
| 1880 cricket::SecurePolicy sdes_policy = | 1962 cricket::SecurePolicy sdes_policy = |
| 1881 audio_transport->secure() ? cricket::SEC_DISABLED : secure(); | 1963 audio_transport->secure() ? cricket::SEC_DISABLED : secure(); |
| 1882 if (!CreateMediaContentAnswer( | 1964 if (!CreateMediaContentAnswer( |
| 1883 offer_audio, | 1965 offer_audio, |
| 1884 options, | 1966 options, |
| 1885 audio_codecs, | 1967 audio_codecs, |
| 1886 sdes_policy, | 1968 sdes_policy, |
| 1887 GetCryptos(GetFirstAudioContentDescription(current_description)), | 1969 GetCryptos(GetFirstAudioContentDescription(current_description)), |
| 1888 audio_rtp_extensions_, | 1970 audio_rtp_extensions_, |
| 1971 enable_encrypted_rtp_header_extensions_, |
| 1889 current_streams, | 1972 current_streams, |
| 1890 add_legacy_, | 1973 add_legacy_, |
| 1891 bundle_enabled, | 1974 bundle_enabled, |
| 1892 audio_answer.get())) { | 1975 audio_answer.get())) { |
| 1893 return false; // Fails the session setup. | 1976 return false; // Fails the session setup. |
| 1894 } | 1977 } |
| 1895 | 1978 |
| 1896 bool secure = bundle_transport ? bundle_transport->description.secure() | 1979 bool secure = bundle_transport ? bundle_transport->description.secure() |
| 1897 : audio_transport->secure(); | 1980 : audio_transport->secure(); |
| 1898 bool rejected = !options.has_audio() || audio_content->rejected || | 1981 bool rejected = !options.has_audio() || audio_content->rejected || |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1935 bool bundle_enabled = | 2018 bool bundle_enabled = |
| 1936 offer->HasGroup(GROUP_TYPE_BUNDLE) && options.bundle_enabled; | 2019 offer->HasGroup(GROUP_TYPE_BUNDLE) && options.bundle_enabled; |
| 1937 if (!CreateMediaContentAnswer( | 2020 if (!CreateMediaContentAnswer( |
| 1938 static_cast<const VideoContentDescription*>( | 2021 static_cast<const VideoContentDescription*>( |
| 1939 video_content->description), | 2022 video_content->description), |
| 1940 options, | 2023 options, |
| 1941 video_codecs_, | 2024 video_codecs_, |
| 1942 sdes_policy, | 2025 sdes_policy, |
| 1943 GetCryptos(GetFirstVideoContentDescription(current_description)), | 2026 GetCryptos(GetFirstVideoContentDescription(current_description)), |
| 1944 video_rtp_extensions_, | 2027 video_rtp_extensions_, |
| 2028 enable_encrypted_rtp_header_extensions_, |
| 1945 current_streams, | 2029 current_streams, |
| 1946 add_legacy_, | 2030 add_legacy_, |
| 1947 bundle_enabled, | 2031 bundle_enabled, |
| 1948 video_answer.get())) { | 2032 video_answer.get())) { |
| 1949 return false; | 2033 return false; |
| 1950 } | 2034 } |
| 1951 bool secure = bundle_transport ? bundle_transport->description.secure() | 2035 bool secure = bundle_transport ? bundle_transport->description.secure() |
| 1952 : video_transport->secure(); | 2036 : video_transport->secure(); |
| 1953 bool rejected = !options.has_video() || video_content->rejected || | 2037 bool rejected = !options.has_video() || video_content->rejected || |
| 1954 !IsMediaProtocolSupported(MEDIA_TYPE_VIDEO, | 2038 !IsMediaProtocolSupported(MEDIA_TYPE_VIDEO, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1996 bool bundle_enabled = | 2080 bool bundle_enabled = |
| 1997 offer->HasGroup(GROUP_TYPE_BUNDLE) && options.bundle_enabled; | 2081 offer->HasGroup(GROUP_TYPE_BUNDLE) && options.bundle_enabled; |
| 1998 if (!CreateMediaContentAnswer( | 2082 if (!CreateMediaContentAnswer( |
| 1999 static_cast<const DataContentDescription*>( | 2083 static_cast<const DataContentDescription*>( |
| 2000 data_content->description), | 2084 data_content->description), |
| 2001 options, | 2085 options, |
| 2002 data_codecs_, | 2086 data_codecs_, |
| 2003 sdes_policy, | 2087 sdes_policy, |
| 2004 GetCryptos(GetFirstDataContentDescription(current_description)), | 2088 GetCryptos(GetFirstDataContentDescription(current_description)), |
| 2005 RtpHeaderExtensions(), | 2089 RtpHeaderExtensions(), |
| 2090 enable_encrypted_rtp_header_extensions_, |
| 2006 current_streams, | 2091 current_streams, |
| 2007 add_legacy_, | 2092 add_legacy_, |
| 2008 bundle_enabled, | 2093 bundle_enabled, |
| 2009 data_answer.get())) { | 2094 data_answer.get())) { |
| 2010 return false; // Fails the session setup. | 2095 return false; // Fails the session setup. |
| 2011 } | 2096 } |
| 2012 | 2097 |
| 2013 // Respond with sctpmap if the offer uses sctpmap. | 2098 // Respond with sctpmap if the offer uses sctpmap. |
| 2014 const DataContentDescription* offer_data_description = | 2099 const DataContentDescription* offer_data_description = |
| 2015 static_cast<const DataContentDescription*>(data_content->description); | 2100 static_cast<const DataContentDescription*>(data_content->description); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2191 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_VIDEO)); | 2276 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_VIDEO)); |
| 2192 } | 2277 } |
| 2193 | 2278 |
| 2194 DataContentDescription* GetFirstDataContentDescription( | 2279 DataContentDescription* GetFirstDataContentDescription( |
| 2195 SessionDescription* sdesc) { | 2280 SessionDescription* sdesc) { |
| 2196 return static_cast<DataContentDescription*>( | 2281 return static_cast<DataContentDescription*>( |
| 2197 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); | 2282 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); |
| 2198 } | 2283 } |
| 2199 | 2284 |
| 2200 } // namespace cricket | 2285 } // namespace cricket |
| OLD | NEW |