Index: talk/session/media/mediasession.cc |
diff --git a/talk/session/media/mediasession.cc b/talk/session/media/mediasession.cc |
index 7413026092f1d6f8c8742e407d48376ac5a5ea01..89214b07a0b4897fa13a32dcdfb852a371c2ab8a 100644 |
--- a/talk/session/media/mediasession.cc |
+++ b/talk/session/media/mediasession.cc |
@@ -516,42 +516,6 @@ static bool AddStreamParams( |
return true; |
} |
-// Updates the transport infos of the |sdesc| according to the given |
-// |bundle_group|. The transport infos of the content names within the |
-// |bundle_group| should be updated to use the ufrag and pwd of the first |
-// content within the |bundle_group|. |
-static bool UpdateTransportInfoForBundle(const ContentGroup& bundle_group, |
- SessionDescription* sdesc) { |
- // The bundle should not be empty. |
- if (!sdesc || !bundle_group.FirstContentName()) { |
- return false; |
- } |
- |
- // We should definitely have a transport for the first content. |
- const std::string& selected_content_name = *bundle_group.FirstContentName(); |
- const TransportInfo* selected_transport_info = |
- sdesc->GetTransportInfoByName(selected_content_name); |
- if (!selected_transport_info) { |
- return false; |
- } |
- |
- // Set the other contents to use the same ICE credentials. |
- const std::string& selected_ufrag = |
- selected_transport_info->description.ice_ufrag; |
- const std::string& selected_pwd = |
- selected_transport_info->description.ice_pwd; |
- for (TransportInfos::iterator it = |
- sdesc->transport_infos().begin(); |
- it != sdesc->transport_infos().end(); ++it) { |
- if (bundle_group.HasContentName(it->content_name) && |
- it->content_name != selected_content_name) { |
- it->description.ice_ufrag = selected_ufrag; |
- it->description.ice_pwd = selected_pwd; |
- } |
- } |
- return true; |
-} |
- |
// Gets the CryptoParamsVec of the given |content_name| from |sdesc|, and |
// sets it to |cryptos|. |
static bool GetCryptosByName(const SessionDescription* sdesc, |
@@ -1294,10 +1258,6 @@ SessionDescription* MediaSessionDescriptionFactory::CreateOffer( |
offer_bundle.AddContentName(content->name); |
} |
offer->AddGroup(offer_bundle); |
- if (!UpdateTransportInfoForBundle(offer_bundle, offer.get())) { |
- LOG(LS_ERROR) << "CreateOffer failed to UpdateTransportInfoForBundle."; |
- return NULL; |
- } |
if (!UpdateCryptoParamsForBundle(offer_bundle, offer.get())) { |
LOG(LS_ERROR) << "CreateOffer failed to UpdateCryptoParamsForBundle."; |
return NULL; |
@@ -1354,14 +1314,6 @@ SessionDescription* MediaSessionDescriptionFactory::CreateAnswer( |
} |
if (answer_bundle.FirstContentName()) { |
answer->AddGroup(answer_bundle); |
- |
- // Share the same ICE credentials and crypto params across all contents, |
- // as BUNDLE requires. |
Taylor Brandstetter
2015/11/18 22:40:17
Actually, BUNDLE doesn't require this, as far as I
|
- if (!UpdateTransportInfoForBundle(answer_bundle, answer.get())) { |
- LOG(LS_ERROR) << "CreateAnswer failed to UpdateTransportInfoForBundle."; |
- return NULL; |
- } |
- |
if (!UpdateCryptoParamsForBundle(answer_bundle, answer.get())) { |
LOG(LS_ERROR) << "CreateAnswer failed to UpdateCryptoParamsForBundle."; |
return NULL; |
@@ -1453,16 +1405,18 @@ void MediaSessionDescriptionFactory::GetRtpHdrExtsToOffer( |
} |
bool MediaSessionDescriptionFactory::AddTransportOffer( |
- const std::string& content_name, |
- const TransportOptions& transport_options, |
- const SessionDescription* current_desc, |
- SessionDescription* offer_desc) const { |
+ const std::string& content_name, |
+ const TransportOptions& transport_options, |
+ bool ice_restart, |
+ const SessionDescription* current_desc, |
+ SessionDescription* offer_desc) const { |
if (!transport_desc_factory_) |
return false; |
const TransportDescription* current_tdesc = |
GetTransportDescription(content_name, current_desc); |
rtc::scoped_ptr<TransportDescription> new_tdesc( |
- transport_desc_factory_->CreateOffer(transport_options, current_tdesc)); |
+ transport_desc_factory_->CreateOffer(transport_options, ice_restart, |
+ current_tdesc)); |
bool ret = (new_tdesc.get() != NULL && |
offer_desc->AddTransportInfo(TransportInfo(content_name, *new_tdesc))); |
if (!ret) { |
@@ -1476,6 +1430,7 @@ TransportDescription* MediaSessionDescriptionFactory::CreateTransportAnswer( |
const std::string& content_name, |
const SessionDescription* offer_desc, |
const TransportOptions& transport_options, |
+ bool ice_restart, |
const SessionDescription* current_desc) const { |
if (!transport_desc_factory_) |
return NULL; |
@@ -1483,9 +1438,8 @@ TransportDescription* MediaSessionDescriptionFactory::CreateTransportAnswer( |
GetTransportDescription(content_name, offer_desc); |
const TransportDescription* current_tdesc = |
GetTransportDescription(content_name, current_desc); |
- return |
- transport_desc_factory_->CreateAnswer(offer_tdesc, transport_options, |
- current_tdesc); |
+ return transport_desc_factory_->CreateAnswer(offer_tdesc, transport_options, |
+ ice_restart, current_tdesc); |
} |
bool MediaSessionDescriptionFactory::AddTransportAnswer( |
@@ -1548,7 +1502,8 @@ bool MediaSessionDescriptionFactory::AddAudioContentForOffer( |
desc->AddContent(CN_AUDIO, NS_JINGLE_RTP, audio.release()); |
if (!AddTransportOffer(CN_AUDIO, options.transport_options, |
- current_description, desc)) { |
+ options.audio_ice_restart, current_description, |
+ desc)) { |
return false; |
} |
@@ -1603,7 +1558,8 @@ bool MediaSessionDescriptionFactory::AddVideoContentForOffer( |
desc->AddContent(CN_VIDEO, NS_JINGLE_RTP, video.release()); |
if (!AddTransportOffer(CN_VIDEO, options.transport_options, |
- current_description, desc)) { |
+ options.video_ice_restart, current_description, |
+ desc)) { |
return false; |
} |
@@ -1662,7 +1618,7 @@ bool MediaSessionDescriptionFactory::AddDataContentForOffer( |
desc->AddContent(CN_DATA, NS_JINGLE_RTP, data.release()); |
} |
if (!AddTransportOffer(CN_DATA, options.transport_options, |
- current_description, desc)) { |
+ options.data_ice_restart, current_description, desc)) { |
return false; |
} |
return true; |
@@ -1676,10 +1632,9 @@ bool MediaSessionDescriptionFactory::AddAudioContentForAnswer( |
SessionDescription* answer) const { |
const ContentInfo* audio_content = GetFirstAudioContent(offer); |
- scoped_ptr<TransportDescription> audio_transport( |
- CreateTransportAnswer(audio_content->name, offer, |
- options.transport_options, |
- current_description)); |
+ scoped_ptr<TransportDescription> audio_transport(CreateTransportAnswer( |
+ audio_content->name, offer, options.transport_options, |
+ options.audio_ice_restart, current_description)); |
if (!audio_transport) { |
return false; |
} |
@@ -1735,10 +1690,9 @@ bool MediaSessionDescriptionFactory::AddVideoContentForAnswer( |
StreamParamsVec* current_streams, |
SessionDescription* answer) const { |
const ContentInfo* video_content = GetFirstVideoContent(offer); |
- scoped_ptr<TransportDescription> video_transport( |
- CreateTransportAnswer(video_content->name, offer, |
- options.transport_options, |
- current_description)); |
+ scoped_ptr<TransportDescription> video_transport(CreateTransportAnswer( |
+ video_content->name, offer, options.transport_options, |
+ options.video_ice_restart, current_description)); |
if (!video_transport) { |
return false; |
} |
@@ -1791,10 +1745,9 @@ bool MediaSessionDescriptionFactory::AddDataContentForAnswer( |
StreamParamsVec* current_streams, |
SessionDescription* answer) const { |
const ContentInfo* data_content = GetFirstDataContent(offer); |
- scoped_ptr<TransportDescription> data_transport( |
- CreateTransportAnswer(data_content->name, offer, |
- options.transport_options, |
- current_description)); |
+ scoped_ptr<TransportDescription> data_transport(CreateTransportAnswer( |
+ data_content->name, offer, options.transport_options, |
+ options.data_ice_restart, current_description)); |
if (!data_transport) { |
return false; |
} |
@@ -1862,8 +1815,8 @@ bool IsDataContent(const ContentInfo* content) { |
return IsMediaContentOfType(content, MEDIA_TYPE_DATA); |
} |
-static const ContentInfo* GetFirstMediaContent(const ContentInfos& contents, |
- MediaType media_type) { |
+const ContentInfo* GetFirstMediaContent(const ContentInfos& contents, |
+ MediaType media_type) { |
for (ContentInfos::const_iterator content = contents.begin(); |
content != contents.end(); content++) { |
if (IsMediaContentOfType(&*content, media_type)) { |