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

Side by Side Diff: remoting/protocol/transport_context.cc

Issue 1800893002: Enable TURN on the host when using WebRTC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/transport_context.h" 5 #include "remoting/protocol/transport_context.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 TransportRole role) 45 TransportRole role)
46 : signal_strategy_(signal_strategy), 46 : signal_strategy_(signal_strategy),
47 port_allocator_factory_(std::move(port_allocator_factory)), 47 port_allocator_factory_(std::move(port_allocator_factory)),
48 url_request_factory_(std::move(url_request_factory)), 48 url_request_factory_(std::move(url_request_factory)),
49 network_settings_(network_settings), 49 network_settings_(network_settings),
50 role_(role) {} 50 role_(role) {}
51 51
52 TransportContext::~TransportContext() {} 52 TransportContext::~TransportContext() {}
53 53
54 void TransportContext::Prepare() { 54 void TransportContext::Prepare() {
55 EnsureFreshJingleInfo(); 55 EnsureFreshIceConfig();
56 } 56 }
57 57
58 void TransportContext::GetIceConfig(const GetIceConfigCallback& callback) { 58 void TransportContext::GetIceConfig(const GetIceConfigCallback& callback) {
59 EnsureFreshJingleInfo(); 59 EnsureFreshIceConfig();
60 60
61 // If there is a pending |ice_config_request_| delay the callback until the 61 // If there is a pending |ice_config_request_| for the current |relay_mode_|
62 // request is finished. 62 // then delay the callback until the request is finished.
63 if (ice_config_request_) { 63 if (ice_config_request_[relay_mode_]) {
64 pending_ice_config_callbacks_.push_back(callback); 64 pending_ice_config_callbacks_[relay_mode_].push_back(callback);
65 } else { 65 } else {
66 callback.Run(ice_config_); 66 callback.Run(ice_config_[relay_mode_]);
67 } 67 }
68 } 68 }
69 69
70 void TransportContext::EnsureFreshJingleInfo() { 70 void TransportContext::EnsureFreshIceConfig() {
71 // Check if request is already pending. 71 // Check if request is already pending.
72 if (ice_config_request_) 72 if (ice_config_request_[relay_mode_])
73 return; 73 return;
74 74
75 // Don't need to make jingleinfo request if both STUN and Relay are disabled. 75 // Don't need to make jingleinfo request if both STUN and Relay are disabled.
76 if ((network_settings_.flags & (NetworkSettings::NAT_TRAVERSAL_STUN | 76 if ((network_settings_.flags & (NetworkSettings::NAT_TRAVERSAL_STUN |
77 NetworkSettings::NAT_TRAVERSAL_RELAY)) == 0) { 77 NetworkSettings::NAT_TRAVERSAL_RELAY)) == 0) {
78 return; 78 return;
79 } 79 }
80 80
81 if (ice_config_.is_null() || 81 if (ice_config_[relay_mode_].is_null() ||
82 base::Time::Now() > ice_config_.expiration_time) { 82 base::Time::Now() > ice_config_[relay_mode_].expiration_time) {
83 if (!ice_config_url_.empty()) { 83 scoped_ptr<IceConfigRequest> request;
84 ice_config_request_.reset(new HttpIceConfigRequest( 84 switch (relay_mode_) {
85 url_request_factory_.get(), ice_config_url_)); 85 case RelayMode::TURN:
86 } else { 86 if (ice_config_url_.empty()) {
87 ice_config_request_.reset(new JingleInfoRequest(signal_strategy_)); 87 LOG(WARNING) << "ice_config_url isn't set.";
garykac 2016/03/15 20:38:59 Should this be an error? If the config url is not
Sergey Ulanov 2016/03/15 21:54:53 There are cases when this URL won't be set and it'
garykac 2016/03/16 00:58:21 Acknowledged.
88 return;
89 }
90 request.reset(new HttpIceConfigRequest(url_request_factory_.get(),
91 ice_config_url_));
92 break;
93 case RelayMode::GTURN:
94 request.reset(new JingleInfoRequest(signal_strategy_));
95 break;
88 } 96 }
89 ice_config_request_->Send(base::Bind( 97 ice_config_request_[relay_mode_] = std::move(request);
90 &TransportContext::OnIceConfig, base::Unretained(this))); 98 ice_config_request_[relay_mode_]->Send(base::Bind(
99 &TransportContext::OnIceConfig, base::Unretained(this), relay_mode_));
91 } 100 }
92 } 101 }
93 102
94 void TransportContext::OnIceConfig(const IceConfig& ice_config) { 103 void TransportContext::OnIceConfig(RelayMode relay_mode,
95 ice_config_ = ice_config; 104 const IceConfig& ice_config) {
96 ice_config_request_.reset(); 105 ice_config_[relay_mode] = ice_config;
106 ice_config_request_[relay_mode].reset();
97 107
98 while (!pending_ice_config_callbacks_.empty()) { 108 auto& callback_list = pending_ice_config_callbacks_[relay_mode];
99 pending_ice_config_callbacks_.begin()->Run(ice_config_); 109 while (!callback_list.empty()) {
100 pending_ice_config_callbacks_.pop_front(); 110 callback_list.begin()->Run(ice_config);
111 callback_list.pop_front();
101 } 112 }
102 } 113 }
103 114
104 } // namespace protocol 115 } // namespace protocol
105 } // namespace remoting 116 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698