| 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 | 
|---|