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

Side by Side Diff: talk/app/webrtc/peerconnection.cc

Issue 1391013007: Adding the ability to change ICE servers through SetConfiguration. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: More renaming. Created 5 years, 2 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 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 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 break; 323 break;
324 } 324 }
325 case INVALID: 325 case INVALID:
326 default: 326 default:
327 LOG(WARNING) << "Configuration not supported: " << url; 327 LOG(WARNING) << "Configuration not supported: " << url;
328 return false; 328 return false;
329 } 329 }
330 return true; 330 return true;
331 } 331 }
332 332
333 void ConvertToCricketIceServers(
334 const std::vector<StunConfiguration>& stuns,
335 const std::vector<TurnConfiguration>& turns,
336 cricket::ServerAddresses* cricket_stuns,
337 std::vector<cricket::RelayServerConfig>* cricket_turns) {
338 RTC_DCHECK(cricket_stuns && cricket_turns);
339 for (const StunConfiguration& stun : stuns) {
340 cricket_stuns->insert(stun.server);
341 }
342
343 int priority = static_cast<int>(turns.size() - 1);
344 for (const TurnConfiguration& turn : turns) {
345 cricket::RelayCredentials credentials(turn.username, turn.password);
346 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN);
347 cricket::ProtocolType protocol;
348 // Using VERIFY because ParseIceServers should have already caught an
349 // invalid transport type.
350 if (!VERIFY(
351 cricket::StringToProto(turn.transport_type.c_str(), &protocol))) {
352 LOG(LS_WARNING) << "Ignoring TURN server " << turn.server << ". "
353 << "Reason= Incorrect " << turn.transport_type
354 << " transport parameter.";
355 } else {
356 relay_server.ports.push_back(
357 cricket::ProtocolAddress(turn.server, protocol, turn.secure));
358 relay_server.credentials = credentials;
359 relay_server.priority = priority;
360 cricket_turns->push_back(relay_server);
361 }
362 // First in the list gets highest priority.
363 --priority;
364 }
365 }
366
333 // Check if we can send |new_stream| on a PeerConnection. 367 // Check if we can send |new_stream| on a PeerConnection.
334 bool CanAddLocalMediaStream(webrtc::StreamCollectionInterface* current_streams, 368 bool CanAddLocalMediaStream(webrtc::StreamCollectionInterface* current_streams,
335 webrtc::MediaStreamInterface* new_stream) { 369 webrtc::MediaStreamInterface* new_stream) {
336 if (!new_stream || !current_streams) { 370 if (!new_stream || !current_streams) {
337 return false; 371 return false;
338 } 372 }
339 if (current_streams->find(new_stream->label()) != nullptr) { 373 if (current_streams->find(new_stream->label()) != nullptr) {
340 LOG(LS_ERROR) << "MediaStream with label " << new_stream->label() 374 LOG(LS_ERROR) << "MediaStream with label " << new_stream->label()
341 << " is already added."; 375 << " is already added.";
342 return false; 376 return false;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 bool PeerConnection::Initialize( 621 bool PeerConnection::Initialize(
588 const PeerConnectionInterface::RTCConfiguration& configuration, 622 const PeerConnectionInterface::RTCConfiguration& configuration,
589 const MediaConstraintsInterface* constraints, 623 const MediaConstraintsInterface* constraints,
590 PortAllocatorFactoryInterface* allocator_factory, 624 PortAllocatorFactoryInterface* allocator_factory,
591 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 625 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
592 PeerConnectionObserver* observer) { 626 PeerConnectionObserver* observer) {
593 RTC_DCHECK(observer != nullptr); 627 RTC_DCHECK(observer != nullptr);
594 if (!observer) { 628 if (!observer) {
595 return false; 629 return false;
596 } 630 }
631
632 // This Initialize function parses ICE servers an extra time, but it will
633 // be removed once all PortAllocaotrs support SetIceServers.
634 std::vector<PortAllocatorFactoryInterface::StunConfiguration> stun_config;
635 std::vector<PortAllocatorFactoryInterface::TurnConfiguration> turn_config;
636 if (!ParseIceServers(configuration.servers, &stun_config, &turn_config)) {
637 return false;
638 }
639 rtc::scoped_ptr<cricket::PortAllocator> allocator(
640 allocator_factory->CreatePortAllocator(stun_config, turn_config));
641 return Initialize(configuration, constraints, allocator.Pass(),
642 dtls_identity_store.Pass(), observer);
643 }
644
645 bool PeerConnection::Initialize(
646 const PeerConnectionInterface::RTCConfiguration& configuration,
647 const MediaConstraintsInterface* constraints,
648 rtc::scoped_ptr<cricket::PortAllocator> allocator,
649 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
650 PeerConnectionObserver* observer) {
651 RTC_DCHECK(observer != nullptr);
652 if (!observer) {
653 return false;
654 }
597 observer_ = observer; 655 observer_ = observer;
598 656
657 port_allocator_ = allocator.Pass();
658
599 std::vector<PortAllocatorFactoryInterface::StunConfiguration> stun_config; 659 std::vector<PortAllocatorFactoryInterface::StunConfiguration> stun_config;
600 std::vector<PortAllocatorFactoryInterface::TurnConfiguration> turn_config; 660 std::vector<PortAllocatorFactoryInterface::TurnConfiguration> turn_config;
601 if (!ParseIceServers(configuration.servers, &stun_config, &turn_config)) { 661 if (!ParseIceServers(configuration.servers, &stun_config, &turn_config)) {
602 return false; 662 return false;
603 } 663 }
604 port_allocator_.reset( 664
605 allocator_factory->CreatePortAllocator(stun_config, turn_config)); 665 cricket::ServerAddresses cricket_stuns;
666 std::vector<cricket::RelayServerConfig> cricket_turns;
667 ConvertToCricketIceServers(stun_config, turn_config, &cricket_stuns,
668 &cricket_turns);
669 port_allocator_->SetIceServers(cricket_stuns, cricket_turns);
606 670
607 // To handle both internal and externally created port allocator, we will 671 // To handle both internal and externally created port allocator, we will
608 // enable BUNDLE here. 672 // enable BUNDLE here.
609 int portallocator_flags = port_allocator_->flags(); 673 int portallocator_flags = port_allocator_->flags();
610 portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | 674 portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET |
611 cricket::PORTALLOCATOR_ENABLE_IPV6; 675 cricket::PORTALLOCATOR_ENABLE_IPV6;
612 bool value; 676 bool value;
613 // If IPv6 flag was specified, we'll not override it by experiment. 677 // If IPv6 flag was specified, we'll not override it by experiment.
614 if (FindConstraint(constraints, MediaConstraintsInterface::kEnableIPv6, 678 if (FindConstraint(constraints, MediaConstraintsInterface::kEnableIPv6,
615 &value, nullptr)) { 679 &value, nullptr)) {
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 } 1148 }
1085 1149
1086 bool PeerConnection::SetConfiguration(const RTCConfiguration& config) { 1150 bool PeerConnection::SetConfiguration(const RTCConfiguration& config) {
1087 if (port_allocator_) { 1151 if (port_allocator_) {
1088 std::vector<PortAllocatorFactoryInterface::StunConfiguration> stuns; 1152 std::vector<PortAllocatorFactoryInterface::StunConfiguration> stuns;
1089 std::vector<PortAllocatorFactoryInterface::TurnConfiguration> turns; 1153 std::vector<PortAllocatorFactoryInterface::TurnConfiguration> turns;
1090 if (!ParseIceServers(config.servers, &stuns, &turns)) { 1154 if (!ParseIceServers(config.servers, &stuns, &turns)) {
1091 return false; 1155 return false;
1092 } 1156 }
1093 1157
1094 std::vector<rtc::SocketAddress> stun_hosts; 1158 cricket::ServerAddresses cricket_stuns;
1095 typedef std::vector<StunConfiguration>::const_iterator StunIt; 1159 std::vector<cricket::RelayServerConfig> cricket_turns;
1096 for (StunIt stun_it = stuns.begin(); stun_it != stuns.end(); ++stun_it) { 1160 ConvertToCricketIceServers(stuns, turns, &cricket_stuns, &cricket_turns);
1097 stun_hosts.push_back(stun_it->server); 1161 port_allocator_->SetIceServers(cricket_stuns, cricket_turns);
1098 }
1099
1100 rtc::SocketAddress stun_addr;
1101 if (!stun_hosts.empty()) {
1102 stun_addr = stun_hosts.front();
1103 LOG(LS_INFO) << "SetConfiguration: StunServer Address: "
1104 << stun_addr.ToString();
1105 }
1106
1107 for (size_t i = 0; i < turns.size(); ++i) {
1108 cricket::RelayCredentials credentials(turns[i].username,
1109 turns[i].password);
1110 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN);
1111 cricket::ProtocolType protocol;
1112 if (cricket::StringToProto(turns[i].transport_type.c_str(), &protocol)) {
1113 relay_server.ports.push_back(cricket::ProtocolAddress(
1114 turns[i].server, protocol, turns[i].secure));
1115 relay_server.credentials = credentials;
1116 LOG(LS_INFO) << "SetConfiguration: TurnServer Address: "
1117 << turns[i].server.ToString();
1118 } else {
1119 LOG(LS_WARNING) << "Ignoring TURN server " << turns[i].server << ". "
1120 << "Reason= Incorrect " << turns[i].transport_type
1121 << " transport parameter.";
1122 }
1123 }
1124 } 1162 }
1125 session_->SetIceConfig(session_->ParseIceConfig(config)); 1163 session_->SetIceConfig(session_->ParseIceConfig(config));
1126 return session_->SetIceTransports(config.type); 1164 return session_->SetIceTransports(config.type);
1127 } 1165 }
1128 1166
1129 bool PeerConnection::AddIceCandidate( 1167 bool PeerConnection::AddIceCandidate(
1130 const IceCandidateInterface* ice_candidate) { 1168 const IceCandidateInterface* ice_candidate) {
1131 return session_->ProcessIceMessage(ice_candidate); 1169 return session_->ProcessIceMessage(ice_candidate);
1132 } 1170 }
1133 1171
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
1951 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { 1989 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
1952 for (const auto& channel : sctp_data_channels_) { 1990 for (const auto& channel : sctp_data_channels_) {
1953 if (channel->id() == sid) { 1991 if (channel->id() == sid) {
1954 return channel; 1992 return channel;
1955 } 1993 }
1956 } 1994 }
1957 return nullptr; 1995 return nullptr;
1958 } 1996 }
1959 1997
1960 } // namespace webrtc 1998 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698