| Index: remoting/protocol/transport_context.cc
|
| diff --git a/remoting/protocol/transport_context.cc b/remoting/protocol/transport_context.cc
|
| index 70c8b9661aa1cec2bfbb54d261a22407b7dee788..c10953f4f0aff3ffce82ed7d482a0a746503659f 100644
|
| --- a/remoting/protocol/transport_context.cc
|
| +++ b/remoting/protocol/transport_context.cc
|
| @@ -52,24 +52,24 @@ TransportContext::TransportContext(
|
| TransportContext::~TransportContext() {}
|
|
|
| void TransportContext::Prepare() {
|
| - EnsureFreshJingleInfo();
|
| + EnsureFreshIceConfig();
|
| }
|
|
|
| void TransportContext::GetIceConfig(const GetIceConfigCallback& callback) {
|
| - EnsureFreshJingleInfo();
|
| + EnsureFreshIceConfig();
|
|
|
| - // If there is a pending |ice_config_request_| delay the callback until the
|
| - // request is finished.
|
| - if (ice_config_request_) {
|
| - pending_ice_config_callbacks_.push_back(callback);
|
| + // If there is a pending |ice_config_request_| for the current |relay_mode_|
|
| + // then delay the callback until the request is finished.
|
| + if (ice_config_request_[relay_mode_]) {
|
| + pending_ice_config_callbacks_[relay_mode_].push_back(callback);
|
| } else {
|
| - callback.Run(ice_config_);
|
| + callback.Run(ice_config_[relay_mode_]);
|
| }
|
| }
|
|
|
| -void TransportContext::EnsureFreshJingleInfo() {
|
| +void TransportContext::EnsureFreshIceConfig() {
|
| // Check if request is already pending.
|
| - if (ice_config_request_)
|
| + if (ice_config_request_[relay_mode_])
|
| return;
|
|
|
| // Don't need to make jingleinfo request if both STUN and Relay are disabled.
|
| @@ -78,26 +78,37 @@ void TransportContext::EnsureFreshJingleInfo() {
|
| return;
|
| }
|
|
|
| - if (ice_config_.is_null() ||
|
| - base::Time::Now() > ice_config_.expiration_time) {
|
| - if (!ice_config_url_.empty()) {
|
| - ice_config_request_.reset(new HttpIceConfigRequest(
|
| - url_request_factory_.get(), ice_config_url_));
|
| - } else {
|
| - ice_config_request_.reset(new JingleInfoRequest(signal_strategy_));
|
| + if (ice_config_[relay_mode_].is_null() ||
|
| + base::Time::Now() > ice_config_[relay_mode_].expiration_time) {
|
| + scoped_ptr<IceConfigRequest> request;
|
| + switch (relay_mode_) {
|
| + case RelayMode::TURN:
|
| + if (ice_config_url_.empty()) {
|
| + LOG(WARNING) << "ice_config_url isn't set.";
|
| + return;
|
| + }
|
| + request.reset(new HttpIceConfigRequest(url_request_factory_.get(),
|
| + ice_config_url_));
|
| + break;
|
| + case RelayMode::GTURN:
|
| + request.reset(new JingleInfoRequest(signal_strategy_));
|
| + break;
|
| }
|
| - ice_config_request_->Send(base::Bind(
|
| - &TransportContext::OnIceConfig, base::Unretained(this)));
|
| + ice_config_request_[relay_mode_] = std::move(request);
|
| + ice_config_request_[relay_mode_]->Send(base::Bind(
|
| + &TransportContext::OnIceConfig, base::Unretained(this), relay_mode_));
|
| }
|
| }
|
|
|
| -void TransportContext::OnIceConfig(const IceConfig& ice_config) {
|
| - ice_config_ = ice_config;
|
| - ice_config_request_.reset();
|
| +void TransportContext::OnIceConfig(RelayMode relay_mode,
|
| + const IceConfig& ice_config) {
|
| + ice_config_[relay_mode] = ice_config;
|
| + ice_config_request_[relay_mode].reset();
|
|
|
| - while (!pending_ice_config_callbacks_.empty()) {
|
| - pending_ice_config_callbacks_.begin()->Run(ice_config_);
|
| - pending_ice_config_callbacks_.pop_front();
|
| + auto& callback_list = pending_ice_config_callbacks_[relay_mode];
|
| + while (!callback_list.empty()) {
|
| + callback_list.begin()->Run(ice_config);
|
| + callback_list.pop_front();
|
| }
|
| }
|
|
|
|
|