Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: talk/app/webrtc/webrtcsessiondescriptionfactory.cc

Issue 1453813005: Fixing some issues with ICE restart signaling. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/app/webrtc/webrtcsessiondescriptionfactory.cc
diff --git a/talk/app/webrtc/webrtcsessiondescriptionfactory.cc b/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
index 25965af79d30f92cddd20b999436d67d4a95f601..2cdf5c039ea98f99945b9213a68860a6b2d44c9e 100644
--- a/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
+++ b/talk/app/webrtc/webrtcsessiondescriptionfactory.cc
@@ -110,18 +110,31 @@ void WebRtcIdentityRequestObserver::OnSuccess(
// static
void WebRtcSessionDescriptionFactory::CopyCandidatesFromSessionDescription(
const SessionDescriptionInterface* source_desc,
+ cricket::MediaType media_type,
SessionDescriptionInterface* dest_desc) {
- if (!source_desc)
+ if (!source_desc) {
return;
+ }
+ const cricket::ContentInfos& contents =
+ source_desc->description()->contents();
+ const cricket::ContentInfo* cinfo =
+ GetFirstMediaContent(contents, media_type);
+ if (!cinfo) {
+ return;
+ }
for (size_t m = 0; m < source_desc->number_of_mediasections() &&
m < dest_desc->number_of_mediasections(); ++m) {
- const IceCandidateCollection* source_candidates =
- source_desc->candidates(m);
- const IceCandidateCollection* dest_candidates = dest_desc->candidates(m);
- for (size_t n = 0; n < source_candidates->count(); ++n) {
- const IceCandidateInterface* new_candidate = source_candidates->at(n);
- if (!dest_candidates->HasCandidate(new_candidate))
- dest_desc->AddCandidate(source_candidates->at(n));
+ if (&contents[m] == cinfo) {
+ const IceCandidateCollection* source_candidates =
+ source_desc->candidates(m);
+ const IceCandidateCollection* dest_candidates = dest_desc->candidates(m);
+ for (size_t n = 0; n < source_candidates->count(); ++n) {
+ const IceCandidateInterface* new_candidate = source_candidates->at(n);
+ if (!dest_candidates->HasCandidate(new_candidate)) {
+ dest_desc->AddCandidate(source_candidates->at(n));
+ }
+ }
+ return;
}
}
}
@@ -389,11 +402,21 @@ void WebRtcSessionDescriptionFactory::InternalCreateOffer(
"Failed to initialize the offer.");
return;
}
- if (session_->local_description() &&
- !request.options.transport_options.ice_restart) {
+ if (session_->local_description()) {
// Include all local ice candidates in the SessionDescription unless
- // the an ice restart has been requested.
- CopyCandidatesFromSessionDescription(session_->local_description(), offer);
+ // an ICE restart has been requested.
+ if (!request.options.audio_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_AUDIO, offer);
+ }
+ if (!request.options.video_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_VIDEO, offer);
+ }
+ if (!request.options.data_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_DATA, offer);
+ }
}
PostCreateSessionDescriptionSucceeded(request.observer, offer);
}
@@ -403,7 +426,9 @@ void WebRtcSessionDescriptionFactory::InternalCreateAnswer(
// According to http://tools.ietf.org/html/rfc5245#section-9.2.1.1
// an answer should also contain new ice ufrag and password if an offer has
// been received with new ufrag and password.
- request.options.transport_options.ice_restart = session_->IceRestartPending();
+ request.options.audio_ice_restart = session_->AudioIceRestartPending();
+ request.options.video_ice_restart = session_->VideoIceRestartPending();
+ request.options.data_ice_restart = session_->DataIceRestartPending();
// We should pass current ssl role to the transport description factory, if
// there is already an existing ongoing session.
rtc::SSLRole ssl_role;
@@ -436,13 +461,22 @@ void WebRtcSessionDescriptionFactory::InternalCreateAnswer(
"Failed to initialize the answer.");
return;
}
- if (session_->local_description() &&
- !request.options.transport_options.ice_restart) {
+ if (session_->local_description()) {
// Include all local ice candidates in the SessionDescription unless
- // the remote peer has requested an ice restart.
- CopyCandidatesFromSessionDescription(session_->local_description(), answer);
+ // the remote peer has requested an ICE restart.
+ if (!request.options.audio_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_AUDIO, answer);
+ }
+ if (!request.options.video_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_VIDEO, answer);
+ }
+ if (!request.options.data_ice_restart) {
+ CopyCandidatesFromSessionDescription(session_->local_description(),
+ cricket::MEDIA_TYPE_DATA, answer);
+ }
}
- session_->ResetIceRestartLatch();
PostCreateSessionDescriptionSucceeded(request.observer, answer);
}

Powered by Google App Engine
This is Rietveld 408576698