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

Side by Side Diff: webrtc/api/peerconnection.cc

Issue 1956453003: Relanding: Implement RTCConfiguration.iceCandidatePoolSize. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing uninitialized variable (noticed by msan) Created 4 years, 7 months 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 unified diff | Download patch
« no previous file with comments | « webrtc/api/peerconnection.h ('k') | webrtc/api/peerconnection_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 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 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 // For MediaStreams, the sync_label is the MediaStream label and the 369 // For MediaStreams, the sync_label is the MediaStream label and the
370 // track label is the same as |streamid|. 370 // track label is the same as |streamid|.
371 const std::string& streamid = channel->label(); 371 const std::string& streamid = channel->label();
372 const std::string& sync_label = channel->label(); 372 const std::string& sync_label = channel->label();
373 session_options->AddSendStream(cricket::MEDIA_TYPE_DATA, streamid, 373 session_options->AddSendStream(cricket::MEDIA_TYPE_DATA, streamid,
374 sync_label); 374 sync_label);
375 } 375 }
376 } 376 }
377 } 377 }
378 378
379 uint32_t ConvertIceTransportTypeToCandidateFilter(
380 PeerConnectionInterface::IceTransportsType type) {
381 switch (type) {
382 case PeerConnectionInterface::kNone:
383 return cricket::CF_NONE;
384 case PeerConnectionInterface::kRelay:
385 return cricket::CF_RELAY;
386 case PeerConnectionInterface::kNoHost:
387 return (cricket::CF_ALL & ~cricket::CF_HOST);
388 case PeerConnectionInterface::kAll:
389 return cricket::CF_ALL;
390 default:
391 ASSERT(false);
392 }
393 return cricket::CF_NONE;
394 }
395
379 } // namespace 396 } // namespace
380 397
381 namespace webrtc { 398 namespace webrtc {
382 399
383 // Generate a RTCP CNAME when a PeerConnection is created. 400 // Generate a RTCP CNAME when a PeerConnection is created.
384 std::string GenerateRtcpCname() { 401 std::string GenerateRtcpCname() {
385 std::string cname; 402 std::string cname;
386 if (!rtc::CreateRandomString(kRtcpCnameLength, &cname)) { 403 if (!rtc::CreateRandomString(kRtcpCnameLength, &cname)) {
387 LOG(LS_ERROR) << "Failed to generate CNAME."; 404 LOG(LS_ERROR) << "Failed to generate CNAME.";
388 RTC_DCHECK(false); 405 RTC_DCHECK(false);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 TRACE_EVENT0("webrtc", "PeerConnection::~PeerConnection"); 546 TRACE_EVENT0("webrtc", "PeerConnection::~PeerConnection");
530 RTC_DCHECK(signaling_thread()->IsCurrent()); 547 RTC_DCHECK(signaling_thread()->IsCurrent());
531 // Need to detach RTP senders/receivers from WebRtcSession, 548 // Need to detach RTP senders/receivers from WebRtcSession,
532 // since it's about to be destroyed. 549 // since it's about to be destroyed.
533 for (const auto& sender : senders_) { 550 for (const auto& sender : senders_) {
534 sender->Stop(); 551 sender->Stop();
535 } 552 }
536 for (const auto& receiver : receivers_) { 553 for (const auto& receiver : receivers_) {
537 receiver->Stop(); 554 receiver->Stop();
538 } 555 }
556 // Destroy stats_ because it depends on session_.
557 stats_.reset(nullptr);
558 // Now destroy session_ before destroying other members,
559 // because its destruction fires signals (such as VoiceChannelDestroyed)
560 // which will trigger some final actions in PeerConnection...
561 session_.reset(nullptr);
562 // port_allocator_ lives on the worker thread and should be destroyed there.
563 worker_thread()->Invoke<void>([this] { port_allocator_.reset(nullptr); });
539 } 564 }
540 565
541 bool PeerConnection::Initialize( 566 bool PeerConnection::Initialize(
542 const PeerConnectionInterface::RTCConfiguration& configuration, 567 const PeerConnectionInterface::RTCConfiguration& configuration,
543 std::unique_ptr<cricket::PortAllocator> allocator, 568 std::unique_ptr<cricket::PortAllocator> allocator,
544 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 569 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
545 PeerConnectionObserver* observer) { 570 PeerConnectionObserver* observer) {
546 TRACE_EVENT0("webrtc", "PeerConnection::Initialize"); 571 TRACE_EVENT0("webrtc", "PeerConnection::Initialize");
547 RTC_DCHECK(observer != nullptr); 572 RTC_DCHECK(observer != nullptr);
548 if (!observer) { 573 if (!observer) {
549 return false; 574 return false;
550 } 575 }
551 observer_ = observer; 576 observer_ = observer;
552 577
553 port_allocator_ = std::move(allocator); 578 port_allocator_ = std::move(allocator);
554 579
555 cricket::ServerAddresses stun_servers; 580 // The port allocator lives on the worker thread and should be initialized
556 std::vector<cricket::RelayServerConfig> turn_servers; 581 // there.
557 if (!ParseIceServers(configuration.servers, &stun_servers, &turn_servers)) { 582 if (!worker_thread()->Invoke<bool>(rtc::Bind(
583 &PeerConnection::InitializePortAllocator_w, this, configuration))) {
558 return false; 584 return false;
559 } 585 }
560 port_allocator_->SetIceServers(stun_servers, turn_servers);
561
562 // To handle both internal and externally created port allocator, we will
563 // enable BUNDLE here.
564 int portallocator_flags = port_allocator_->flags();
565 portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
566 cricket::PORTALLOCATOR_ENABLE_IPV6;
567 // If the disable-IPv6 flag was specified, we'll not override it
568 // by experiment.
569 if (configuration.disable_ipv6) {
570 portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
571 } else if (webrtc::field_trial::FindFullName("WebRTC-IPv6Default") ==
572 "Disabled") {
573 portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
574 }
575
576 if (configuration.tcp_candidate_policy == kTcpCandidatePolicyDisabled) {
577 portallocator_flags |= cricket::PORTALLOCATOR_DISABLE_TCP;
578 LOG(LS_INFO) << "TCP candidates are disabled.";
579 }
580
581 port_allocator_->set_flags(portallocator_flags);
582 // No step delay is used while allocating ports.
583 port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
584 586
585 media_controller_.reset( 587 media_controller_.reset(
586 factory_->CreateMediaController(configuration.media_config)); 588 factory_->CreateMediaController(configuration.media_config));
587 589
588 session_.reset( 590 session_.reset(
589 new WebRtcSession(media_controller_.get(), factory_->signaling_thread(), 591 new WebRtcSession(media_controller_.get(), factory_->signaling_thread(),
590 factory_->worker_thread(), port_allocator_.get())); 592 factory_->worker_thread(), port_allocator_.get()));
591 stats_.reset(new StatsCollector(this)); 593 stats_.reset(new StatsCollector(this));
592 594
593 // Initialize the WebRtcSession. It creates transport channels etc. 595 // Initialize the WebRtcSession. It creates transport channels etc.
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 stats_->AddStream(new_stream); 1153 stats_->AddStream(new_stream);
1152 observer_->OnAddStream(new_stream); 1154 observer_->OnAddStream(new_stream);
1153 } 1155 }
1154 1156
1155 UpdateEndedRemoteMediaStreams(); 1157 UpdateEndedRemoteMediaStreams();
1156 1158
1157 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer); 1159 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer);
1158 signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_SUCCESS, msg); 1160 signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_SUCCESS, msg);
1159 } 1161 }
1160 1162
1161 bool PeerConnection::SetConfiguration(const RTCConfiguration& config) { 1163 bool PeerConnection::SetConfiguration(const RTCConfiguration& configuration) {
1162 TRACE_EVENT0("webrtc", "PeerConnection::SetConfiguration"); 1164 TRACE_EVENT0("webrtc", "PeerConnection::SetConfiguration");
1163 if (port_allocator_) { 1165 if (port_allocator_) {
1164 cricket::ServerAddresses stun_servers; 1166 if (!worker_thread()->Invoke<bool>(
1165 std::vector<cricket::RelayServerConfig> turn_servers; 1167 rtc::Bind(&PeerConnection::ReconfigurePortAllocator_w, this,
1166 if (!ParseIceServers(config.servers, &stun_servers, &turn_servers)) { 1168 configuration))) {
1167 return false; 1169 return false;
1168 } 1170 }
1169 port_allocator_->SetIceServers(stun_servers, turn_servers);
1170 } 1171 }
1171 session_->SetIceConfig(session_->ParseIceConfig(config)); 1172
1172 return session_->SetIceTransports(config.type); 1173 // TODO(deadbeef): Shouldn't have to hop to the worker thread twice...
1174 session_->SetIceConfig(session_->ParseIceConfig(configuration));
1175 return true;
1173 } 1176 }
1174 1177
1175 bool PeerConnection::AddIceCandidate( 1178 bool PeerConnection::AddIceCandidate(
1176 const IceCandidateInterface* ice_candidate) { 1179 const IceCandidateInterface* ice_candidate) {
1177 TRACE_EVENT0("webrtc", "PeerConnection::AddIceCandidate"); 1180 TRACE_EVENT0("webrtc", "PeerConnection::AddIceCandidate");
1178 return session_->ProcessIceMessage(ice_candidate); 1181 return session_->ProcessIceMessage(ice_candidate);
1179 } 1182 }
1180 1183
1181 bool PeerConnection::RemoveIceCandidates( 1184 bool PeerConnection::RemoveIceCandidates(
1182 const std::vector<cricket::Candidate>& candidates) { 1185 const std::vector<cricket::Candidate>& candidates) {
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
2077 2080
2078 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { 2081 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
2079 for (const auto& channel : sctp_data_channels_) { 2082 for (const auto& channel : sctp_data_channels_) {
2080 if (channel->id() == sid) { 2083 if (channel->id() == sid) {
2081 return channel; 2084 return channel;
2082 } 2085 }
2083 } 2086 }
2084 return nullptr; 2087 return nullptr;
2085 } 2088 }
2086 2089
2090 bool PeerConnection::InitializePortAllocator_w(
2091 const RTCConfiguration& configuration) {
2092 cricket::ServerAddresses stun_servers;
2093 std::vector<cricket::RelayServerConfig> turn_servers;
2094 if (!ParseIceServers(configuration.servers, &stun_servers, &turn_servers)) {
2095 return false;
2096 }
2097
2098 // To handle both internal and externally created port allocator, we will
2099 // enable BUNDLE here.
2100 int portallocator_flags = port_allocator_->flags();
2101 portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
2102 cricket::PORTALLOCATOR_ENABLE_IPV6;
2103 // If the disable-IPv6 flag was specified, we'll not override it
2104 // by experiment.
2105 if (configuration.disable_ipv6) {
2106 portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
2107 } else if (webrtc::field_trial::FindFullName("WebRTC-IPv6Default") ==
2108 "Disabled") {
2109 portallocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
2110 }
2111
2112 if (configuration.tcp_candidate_policy == kTcpCandidatePolicyDisabled) {
2113 portallocator_flags |= cricket::PORTALLOCATOR_DISABLE_TCP;
2114 LOG(LS_INFO) << "TCP candidates are disabled.";
2115 }
2116
2117 port_allocator_->set_flags(portallocator_flags);
2118 // No step delay is used while allocating ports.
2119 port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
2120 port_allocator_->set_candidate_filter(
2121 ConvertIceTransportTypeToCandidateFilter(configuration.type));
2122
2123 // Call this last since it may create pooled allocator sessions using the
2124 // properties set above.
2125 port_allocator_->SetConfiguration(stun_servers, turn_servers,
2126 configuration.ice_candidate_pool_size);
2127 return true;
2128 }
2129
2130 bool PeerConnection::ReconfigurePortAllocator_w(
2131 const RTCConfiguration& configuration) {
2132 cricket::ServerAddresses stun_servers;
2133 std::vector<cricket::RelayServerConfig> turn_servers;
2134 if (!ParseIceServers(configuration.servers, &stun_servers, &turn_servers)) {
2135 return false;
2136 }
2137 port_allocator_->set_candidate_filter(
2138 ConvertIceTransportTypeToCandidateFilter(configuration.type));
2139 // Call this last since it may create pooled allocator sessions using the
2140 // candidate filter set above.
2141 port_allocator_->SetConfiguration(stun_servers, turn_servers,
2142 configuration.ice_candidate_pool_size);
2143 return true;
2144 }
2145
2087 } // namespace webrtc 2146 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/peerconnection.h ('k') | webrtc/api/peerconnection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698