Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 JsepSessionDescription* offer(new JsepSessionDescription( | 383 JsepSessionDescription* offer(new JsepSessionDescription( |
| 384 JsepSessionDescription::kOffer)); | 384 JsepSessionDescription::kOffer)); |
| 385 if (!offer->Initialize(desc, session_id_, | 385 if (!offer->Initialize(desc, session_id_, |
| 386 rtc::ToString(session_version_++))) { | 386 rtc::ToString(session_version_++))) { |
| 387 delete offer; | 387 delete offer; |
| 388 PostCreateSessionDescriptionFailed(request.observer, | 388 PostCreateSessionDescriptionFailed(request.observer, |
| 389 "Failed to initialize the offer."); | 389 "Failed to initialize the offer."); |
| 390 return; | 390 return; |
| 391 } | 391 } |
| 392 if (session_->local_description() && | 392 if (session_->local_description() && |
| 393 !request.options.transport_options.ice_restart) { | 393 !request.options.audio_transport_options.ice_restart && |
| 394 !request.options.video_transport_options.ice_restart && | |
| 395 !request.options.data_transport_options.ice_restart) { | |
| 394 // Include all local ice candidates in the SessionDescription unless | 396 // Include all local ice candidates in the SessionDescription unless |
| 395 // the an ice restart has been requested. | 397 // the an ice restart has been requested. |
| 396 CopyCandidatesFromSessionDescription(session_->local_description(), offer); | 398 CopyCandidatesFromSessionDescription(session_->local_description(), offer); |
| 397 } | 399 } |
| 398 PostCreateSessionDescriptionSucceeded(request.observer, offer); | 400 PostCreateSessionDescriptionSucceeded(request.observer, offer); |
| 399 } | 401 } |
| 400 | 402 |
| 401 void WebRtcSessionDescriptionFactory::InternalCreateAnswer( | 403 void WebRtcSessionDescriptionFactory::InternalCreateAnswer( |
| 402 CreateSessionDescriptionRequest request) { | 404 CreateSessionDescriptionRequest request) { |
| 403 // According to http://tools.ietf.org/html/rfc5245#section-9.2.1.1 | 405 // According to http://tools.ietf.org/html/rfc5245#section-9.2.1.1 |
| 404 // an answer should also contain new ice ufrag and password if an offer has | 406 // an answer should also contain new ice ufrag and password if an offer has |
| 405 // been received with new ufrag and password. | 407 // been received with new ufrag and password. |
| 406 request.options.transport_options.ice_restart = session_->IceRestartPending(); | 408 request.options.audio_transport_options.ice_restart = |
| 409 session_->IceRestartPending(); | |
| 410 request.options.video_transport_options.ice_restart = | |
| 411 session_->IceRestartPending(); | |
| 412 request.options.data_transport_options.ice_restart = | |
| 413 session_->IceRestartPending(); | |
| 407 // We should pass current ssl role to the transport description factory, if | 414 // We should pass current ssl role to the transport description factory, if |
| 408 // there is already an existing ongoing session. | 415 // there is already an existing ongoing session. |
| 409 rtc::SSLRole ssl_role; | 416 rtc::SSLRole ssl_role; |
| 410 if (session_->GetSslRole(&ssl_role)) { | 417 if (session_->voice_channel() && |
| 411 request.options.transport_options.prefer_passive_role = | 418 session_->GetSslRole(session_->voice_channel()->transport_name(), |
| 419 &ssl_role)) { | |
|
pthatcher1
2015/12/11 03:16:09
Again, a helper method for GetSslRole(base_channel
Taylor Brandstetter
2016/01/07 22:25:55
Done.
| |
| 420 request.options.audio_transport_options.prefer_passive_role = | |
| 421 (rtc::SSL_SERVER == ssl_role); | |
| 422 } | |
| 423 if (session_->video_channel() && | |
| 424 session_->GetSslRole(session_->video_channel()->transport_name(), | |
| 425 &ssl_role)) { | |
| 426 request.options.video_transport_options.prefer_passive_role = | |
| 427 (rtc::SSL_SERVER == ssl_role); | |
| 428 } | |
| 429 if (session_->data_channel() && | |
| 430 session_->GetSslRole(session_->data_channel()->transport_name(), | |
| 431 &ssl_role)) { | |
| 432 request.options.data_transport_options.prefer_passive_role = | |
| 412 (rtc::SSL_SERVER == ssl_role); | 433 (rtc::SSL_SERVER == ssl_role); |
| 413 } | 434 } |
| 414 | 435 |
| 415 cricket::SessionDescription* desc(session_desc_factory_.CreateAnswer( | 436 cricket::SessionDescription* desc(session_desc_factory_.CreateAnswer( |
| 416 session_->remote_description() | 437 session_->remote_description() |
| 417 ? session_->remote_description()->description() | 438 ? session_->remote_description()->description() |
| 418 : nullptr, | 439 : nullptr, |
| 419 request.options, session_->local_description() | 440 request.options, session_->local_description() |
| 420 ? session_->local_description()->description() | 441 ? session_->local_description()->description() |
| 421 : nullptr)); | 442 : nullptr)); |
| 422 // RFC 3264 | 443 // RFC 3264 |
| 423 // If the answer is different from the offer in any way (different IP | 444 // If the answer is different from the offer in any way (different IP |
| 424 // addresses, ports, etc.), the origin line MUST be different in the answer. | 445 // addresses, ports, etc.), the origin line MUST be different in the answer. |
| 425 // In that case, the version number in the "o=" line of the answer is | 446 // In that case, the version number in the "o=" line of the answer is |
| 426 // unrelated to the version number in the o line of the offer. | 447 // unrelated to the version number in the o line of the offer. |
| 427 // Get a new version number by increasing the |session_version_answer_|. | 448 // Get a new version number by increasing the |session_version_answer_|. |
| 428 // The |session_version_| is a uint64_t, the wrap around should not happen. | 449 // The |session_version_| is a uint64_t, the wrap around should not happen. |
| 429 ASSERT(session_version_ + 1 > session_version_); | 450 ASSERT(session_version_ + 1 > session_version_); |
| 430 JsepSessionDescription* answer(new JsepSessionDescription( | 451 JsepSessionDescription* answer(new JsepSessionDescription( |
| 431 JsepSessionDescription::kAnswer)); | 452 JsepSessionDescription::kAnswer)); |
| 432 if (!answer->Initialize(desc, session_id_, | 453 if (!answer->Initialize(desc, session_id_, |
| 433 rtc::ToString(session_version_++))) { | 454 rtc::ToString(session_version_++))) { |
| 434 delete answer; | 455 delete answer; |
| 435 PostCreateSessionDescriptionFailed(request.observer, | 456 PostCreateSessionDescriptionFailed(request.observer, |
| 436 "Failed to initialize the answer."); | 457 "Failed to initialize the answer."); |
| 437 return; | 458 return; |
| 438 } | 459 } |
| 439 if (session_->local_description() && | 460 if (session_->local_description() && |
| 440 !request.options.transport_options.ice_restart) { | 461 !request.options.audio_transport_options.ice_restart && |
| 462 !request.options.video_transport_options.ice_restart && | |
| 463 !request.options.data_transport_options.ice_restart) { | |
| 441 // Include all local ice candidates in the SessionDescription unless | 464 // Include all local ice candidates in the SessionDescription unless |
| 442 // the remote peer has requested an ice restart. | 465 // the remote peer has requested an ice restart. |
| 443 CopyCandidatesFromSessionDescription(session_->local_description(), answer); | 466 CopyCandidatesFromSessionDescription(session_->local_description(), answer); |
| 444 } | 467 } |
| 445 session_->ResetIceRestartLatch(); | 468 session_->ResetIceRestartLatch(); |
| 446 PostCreateSessionDescriptionSucceeded(request.observer, answer); | 469 PostCreateSessionDescriptionSucceeded(request.observer, answer); |
| 447 } | 470 } |
| 448 | 471 |
| 449 void WebRtcSessionDescriptionFactory::FailPendingRequests( | 472 void WebRtcSessionDescriptionFactory::FailPendingRequests( |
| 450 const std::string& reason) { | 473 const std::string& reason) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 if (create_session_description_requests_.front().type == | 522 if (create_session_description_requests_.front().type == |
| 500 CreateSessionDescriptionRequest::kOffer) { | 523 CreateSessionDescriptionRequest::kOffer) { |
| 501 InternalCreateOffer(create_session_description_requests_.front()); | 524 InternalCreateOffer(create_session_description_requests_.front()); |
| 502 } else { | 525 } else { |
| 503 InternalCreateAnswer(create_session_description_requests_.front()); | 526 InternalCreateAnswer(create_session_description_requests_.front()); |
| 504 } | 527 } |
| 505 create_session_description_requests_.pop(); | 528 create_session_description_requests_.pop(); |
| 506 } | 529 } |
| 507 } | 530 } |
| 508 } // namespace webrtc | 531 } // namespace webrtc |
| OLD | NEW |