| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/libjingle_transport_factory.h" | 5 #include "remoting/protocol/libjingle_transport_factory.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
| 9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
| 10 #include "base/timer/timer.h" | 10 #include "base/timer/timer.h" |
| 11 #include "jingle/glue/channel_socket_adapter.h" | 11 #include "jingle/glue/channel_socket_adapter.h" |
| 12 #include "jingle/glue/pseudotcp_adapter.h" | 12 #include "jingle/glue/pseudotcp_adapter.h" |
| 13 #include "jingle/glue/utils.h" | 13 #include "jingle/glue/utils.h" |
| 14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
| 15 #include "remoting/base/constants.h" | 15 #include "remoting/base/constants.h" |
| 16 #include "remoting/protocol/channel_authenticator.h" | 16 #include "remoting/protocol/channel_authenticator.h" |
| 17 #include "remoting/protocol/network_settings.h" | 17 #include "remoting/protocol/network_settings.h" |
| 18 #include "remoting/signaling/jingle_info_request.h" | 18 #include "remoting/signaling/jingle_info_request.h" |
| 19 #include "third_party/libjingle/source/talk/base/network.h" | |
| 20 #include "third_party/libjingle/source/talk/p2p/base/constants.h" | 19 #include "third_party/libjingle/source/talk/p2p/base/constants.h" |
| 21 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" | 20 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" |
| 22 #include "third_party/libjingle/source/talk/p2p/base/port.h" | 21 #include "third_party/libjingle/source/talk/p2p/base/port.h" |
| 23 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" | 22 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" |
| 24 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" | 23 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" |
| 24 #include "third_party/webrtc/base/network.h" |
| 25 | 25 |
| 26 namespace remoting { | 26 namespace remoting { |
| 27 namespace protocol { | 27 namespace protocol { |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 // Value is chosen to balance the extra latency against the reduced | 31 // Value is chosen to balance the extra latency against the reduced |
| 32 // load due to ACK traffic. | 32 // load due to ACK traffic. |
| 33 const int kTcpAckDelayMilliseconds = 10; | 33 const int kTcpAckDelayMilliseconds = 10; |
| 34 | 34 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 DISALLOW_COPY_AND_ASSIGN(LibjingleStreamTransport); | 120 DISALLOW_COPY_AND_ASSIGN(LibjingleStreamTransport); |
| 121 }; | 121 }; |
| 122 | 122 |
| 123 LibjingleStreamTransport::LibjingleStreamTransport( | 123 LibjingleStreamTransport::LibjingleStreamTransport( |
| 124 cricket::PortAllocator* port_allocator, | 124 cricket::PortAllocator* port_allocator, |
| 125 const NetworkSettings& network_settings) | 125 const NetworkSettings& network_settings) |
| 126 : port_allocator_(port_allocator), | 126 : port_allocator_(port_allocator), |
| 127 network_settings_(network_settings), | 127 network_settings_(network_settings), |
| 128 event_handler_(NULL), | 128 event_handler_(NULL), |
| 129 ice_username_fragment_( | 129 ice_username_fragment_( |
| 130 talk_base::CreateRandomString(cricket::ICE_UFRAG_LENGTH)), | 130 rtc::CreateRandomString(cricket::ICE_UFRAG_LENGTH)), |
| 131 ice_password_(talk_base::CreateRandomString(cricket::ICE_PWD_LENGTH)), | 131 ice_password_(rtc::CreateRandomString(cricket::ICE_PWD_LENGTH)), |
| 132 can_start_(false), | 132 can_start_(false), |
| 133 channel_was_writable_(false), | 133 channel_was_writable_(false), |
| 134 connect_attempts_left_(kMaxReconnectAttempts) { | 134 connect_attempts_left_(kMaxReconnectAttempts) { |
| 135 DCHECK(!ice_username_fragment_.empty()); | 135 DCHECK(!ice_username_fragment_.empty()); |
| 136 DCHECK(!ice_password_.empty()); | 136 DCHECK(!ice_password_.empty()); |
| 137 } | 137 } |
| 138 | 138 |
| 139 LibjingleStreamTransport::~LibjingleStreamTransport() { | 139 LibjingleStreamTransport::~LibjingleStreamTransport() { |
| 140 DCHECK(event_handler_); | 140 DCHECK(event_handler_); |
| 141 event_handler_->OnTransportDeleted(this); | 141 event_handler_->OnTransportDeleted(this); |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 reconnect_timer_.Stop(); | 372 reconnect_timer_.Stop(); |
| 373 | 373 |
| 374 // Notify the caller that ICE connection has failed - normally that will | 374 // Notify the caller that ICE connection has failed - normally that will |
| 375 // terminate Jingle connection (i.e. the transport will be destroyed). | 375 // terminate Jingle connection (i.e. the transport will be destroyed). |
| 376 event_handler_->OnTransportFailed(this); | 376 event_handler_->OnTransportFailed(this); |
| 377 return; | 377 return; |
| 378 } | 378 } |
| 379 --connect_attempts_left_; | 379 --connect_attempts_left_; |
| 380 | 380 |
| 381 // Restart ICE by resetting ICE password. | 381 // Restart ICE by resetting ICE password. |
| 382 ice_password_ = talk_base::CreateRandomString(cricket::ICE_PWD_LENGTH); | 382 ice_password_ = rtc::CreateRandomString(cricket::ICE_PWD_LENGTH); |
| 383 channel_->SetIceCredentials(ice_username_fragment_, ice_password_); | 383 channel_->SetIceCredentials(ice_username_fragment_, ice_password_); |
| 384 } | 384 } |
| 385 | 385 |
| 386 void LibjingleStreamTransport::NotifyConnected( | 386 void LibjingleStreamTransport::NotifyConnected( |
| 387 scoped_ptr<net::StreamSocket> socket) { | 387 scoped_ptr<net::StreamSocket> socket) { |
| 388 DCHECK(!is_connected()); | 388 DCHECK(!is_connected()); |
| 389 StreamTransport::ConnectedCallback callback = callback_; | 389 StreamTransport::ConnectedCallback callback = callback_; |
| 390 callback_.Reset(); | 390 callback_.Reset(); |
| 391 callback.Run(socket.Pass()); | 391 callback.Run(socket.Pass()); |
| 392 } | 392 } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 base::TimeDelta::FromSeconds(kJingleInfoUpdatePeriodSeconds)) { | 468 base::TimeDelta::FromSeconds(kJingleInfoUpdatePeriodSeconds)) { |
| 469 jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_)); | 469 jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_)); |
| 470 jingle_info_request_->Send(base::Bind( | 470 jingle_info_request_->Send(base::Bind( |
| 471 &LibjingleTransportFactory::OnJingleInfo, base::Unretained(this))); | 471 &LibjingleTransportFactory::OnJingleInfo, base::Unretained(this))); |
| 472 } | 472 } |
| 473 } | 473 } |
| 474 | 474 |
| 475 void LibjingleTransportFactory::OnJingleInfo( | 475 void LibjingleTransportFactory::OnJingleInfo( |
| 476 const std::string& relay_token, | 476 const std::string& relay_token, |
| 477 const std::vector<std::string>& relay_hosts, | 477 const std::vector<std::string>& relay_hosts, |
| 478 const std::vector<talk_base::SocketAddress>& stun_hosts) { | 478 const std::vector<rtc::SocketAddress>& stun_hosts) { |
| 479 if (!relay_token.empty() && !relay_hosts.empty()) { | 479 if (!relay_token.empty() && !relay_hosts.empty()) { |
| 480 port_allocator_->SetRelayHosts(relay_hosts); | 480 port_allocator_->SetRelayHosts(relay_hosts); |
| 481 port_allocator_->SetRelayToken(relay_token); | 481 port_allocator_->SetRelayToken(relay_token); |
| 482 } | 482 } |
| 483 if (!stun_hosts.empty()) { | 483 if (!stun_hosts.empty()) { |
| 484 port_allocator_->SetStunHosts(stun_hosts); | 484 port_allocator_->SetStunHosts(stun_hosts); |
| 485 } | 485 } |
| 486 | 486 |
| 487 jingle_info_request_.reset(); | 487 jingle_info_request_.reset(); |
| 488 if ((!relay_token.empty() && !relay_hosts.empty()) || !stun_hosts.empty()) | 488 if ((!relay_token.empty() && !relay_hosts.empty()) || !stun_hosts.empty()) |
| 489 last_jingle_info_update_time_ = base::TimeTicks::Now(); | 489 last_jingle_info_update_time_ = base::TimeTicks::Now(); |
| 490 | 490 |
| 491 while (!on_jingle_info_callbacks_.empty()) { | 491 while (!on_jingle_info_callbacks_.empty()) { |
| 492 on_jingle_info_callbacks_.begin()->Run(); | 492 on_jingle_info_callbacks_.begin()->Run(); |
| 493 on_jingle_info_callbacks_.pop_front(); | 493 on_jingle_info_callbacks_.pop_front(); |
| 494 } | 494 } |
| 495 } | 495 } |
| 496 | 496 |
| 497 } // namespace protocol | 497 } // namespace protocol |
| 498 } // namespace remoting | 498 } // namespace remoting |
| OLD | NEW |