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

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

Issue 587943002: Don't start PseudoTCP until underlying transport is connect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 virtual void Connect( 48 virtual void Connect(
49 const std::string& name, 49 const std::string& name,
50 Transport::EventHandler* event_handler, 50 Transport::EventHandler* event_handler,
51 const Transport::ConnectedCallback& callback) OVERRIDE; 51 const Transport::ConnectedCallback& callback) OVERRIDE;
52 virtual void AddRemoteCandidate(const cricket::Candidate& candidate) OVERRIDE; 52 virtual void AddRemoteCandidate(const cricket::Candidate& candidate) OVERRIDE;
53 virtual const std::string& name() const OVERRIDE; 53 virtual const std::string& name() const OVERRIDE;
54 virtual bool is_connected() const OVERRIDE; 54 virtual bool is_connected() const OVERRIDE;
55 55
56 private: 56 private:
57 void DoStart(); 57 void DoStart();
58 void NotifyConnected();
58 59
59 // Signal handlers for cricket::TransportChannel. 60 // Signal handlers for cricket::TransportChannel.
60 void OnRequestSignaling(cricket::TransportChannelImpl* channel); 61 void OnRequestSignaling(cricket::TransportChannelImpl* channel);
61 void OnCandidateReady(cricket::TransportChannelImpl* channel, 62 void OnCandidateReady(cricket::TransportChannelImpl* channel,
62 const cricket::Candidate& candidate); 63 const cricket::Candidate& candidate);
63 void OnRouteChange(cricket::TransportChannel* channel, 64 void OnRouteChange(cricket::TransportChannel* channel,
64 const cricket::Candidate& candidate); 65 const cricket::Candidate& candidate);
65 void OnWritableState(cricket::TransportChannel* channel); 66 void OnWritableState(cricket::TransportChannel* channel);
66 67
67 // Callback for jingle_glue::TransportChannelSocketAdapter to notify when the 68 // Callback for jingle_glue::TransportChannelSocketAdapter to notify when the
(...skipping 13 matching lines...) Expand all
81 std::string ice_password_; 82 std::string ice_password_;
82 83
83 bool can_start_; 84 bool can_start_;
84 85
85 std::list<cricket::Candidate> pending_candidates_; 86 std::list<cricket::Candidate> pending_candidates_;
86 scoped_ptr<cricket::P2PTransportChannel> channel_; 87 scoped_ptr<cricket::P2PTransportChannel> channel_;
87 bool channel_was_writable_; 88 bool channel_was_writable_;
88 int connect_attempts_left_; 89 int connect_attempts_left_;
89 base::RepeatingTimer<LibjingleTransport> reconnect_timer_; 90 base::RepeatingTimer<LibjingleTransport> reconnect_timer_;
90 91
92 base::WeakPtrFactory<LibjingleTransport> weak_factory_;
93
91 DISALLOW_COPY_AND_ASSIGN(LibjingleTransport); 94 DISALLOW_COPY_AND_ASSIGN(LibjingleTransport);
92 }; 95 };
93 96
94 LibjingleTransport::LibjingleTransport( 97 LibjingleTransport::LibjingleTransport(cricket::PortAllocator* port_allocator,
95 cricket::PortAllocator* port_allocator, 98 const NetworkSettings& network_settings)
96 const NetworkSettings& network_settings)
97 : port_allocator_(port_allocator), 99 : port_allocator_(port_allocator),
98 network_settings_(network_settings), 100 network_settings_(network_settings),
99 event_handler_(NULL), 101 event_handler_(NULL),
100 ice_username_fragment_( 102 ice_username_fragment_(
101 rtc::CreateRandomString(cricket::ICE_UFRAG_LENGTH)), 103 rtc::CreateRandomString(cricket::ICE_UFRAG_LENGTH)),
102 ice_password_(rtc::CreateRandomString(cricket::ICE_PWD_LENGTH)), 104 ice_password_(rtc::CreateRandomString(cricket::ICE_PWD_LENGTH)),
103 can_start_(false), 105 can_start_(false),
104 channel_was_writable_(false), 106 channel_was_writable_(false),
105 connect_attempts_left_(kMaxReconnectAttempts) { 107 connect_attempts_left_(kMaxReconnectAttempts),
108 weak_factory_(this) {
106 DCHECK(!ice_username_fragment_.empty()); 109 DCHECK(!ice_username_fragment_.empty());
107 DCHECK(!ice_password_.empty()); 110 DCHECK(!ice_password_.empty());
108 } 111 }
109 112
110 LibjingleTransport::~LibjingleTransport() { 113 LibjingleTransport::~LibjingleTransport() {
111 DCHECK(event_handler_); 114 DCHECK(event_handler_);
112 115
113 event_handler_->OnTransportDeleted(this); 116 event_handler_->OnTransportDeleted(this);
114 117
115 if (channel_.get()) { 118 if (channel_.get()) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 !(network_settings_.flags & NetworkSettings::NAT_TRAVERSAL_OUTGOING)); 176 !(network_settings_.flags & NetworkSettings::NAT_TRAVERSAL_OUTGOING));
174 177
175 channel_->Connect(); 178 channel_->Connect();
176 179
177 --connect_attempts_left_; 180 --connect_attempts_left_;
178 181
179 // Start reconnection timer. 182 // Start reconnection timer.
180 reconnect_timer_.Start( 183 reconnect_timer_.Start(
181 FROM_HERE, base::TimeDelta::FromSeconds(kReconnectDelaySeconds), 184 FROM_HERE, base::TimeDelta::FromSeconds(kReconnectDelaySeconds),
182 this, &LibjingleTransport::TryReconnect); 185 this, &LibjingleTransport::TryReconnect);
186 }
183 187
188 void LibjingleTransport::NotifyConnected() {
184 // Create net::Socket adapter for the P2PTransportChannel. 189 // Create net::Socket adapter for the P2PTransportChannel.
185 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> socket( 190 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> socket(
186 new jingle_glue::TransportChannelSocketAdapter(channel_.get())); 191 new jingle_glue::TransportChannelSocketAdapter(channel_.get()));
187 socket->SetOnDestroyedCallback(base::Bind( 192 socket->SetOnDestroyedCallback(base::Bind(
188 &LibjingleTransport::OnChannelDestroyed, base::Unretained(this))); 193 &LibjingleTransport::OnChannelDestroyed, base::Unretained(this)));
189 194
190 Transport::ConnectedCallback callback = callback_; 195 Transport::ConnectedCallback callback = callback_;
191 callback_.Reset(); 196 callback_.Reset();
192 callback.Run(socket.PassAs<net::Socket>()); 197 callback.Run(socket.PassAs<net::Socket>());
193 } 198 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 } 267 }
263 268
264 event_handler_->OnTransportRouteChange(this, route); 269 event_handler_->OnTransportRouteChange(this, route);
265 } 270 }
266 271
267 void LibjingleTransport::OnWritableState( 272 void LibjingleTransport::OnWritableState(
268 cricket::TransportChannel* channel) { 273 cricket::TransportChannel* channel) {
269 DCHECK_EQ(channel, channel_.get()); 274 DCHECK_EQ(channel, channel_.get());
270 275
271 if (channel->writable()) { 276 if (channel->writable()) {
272 channel_was_writable_ = true; 277 if (!channel_was_writable_) {
278 channel_was_writable_ = true;
279 base::ThreadTaskRunnerHandle::Get()->PostTask(
280 FROM_HERE,
281 base::Bind(&LibjingleTransport::NotifyConnected,
282 weak_factory_.GetWeakPtr()));
283 }
273 connect_attempts_left_ = kMaxReconnectAttempts; 284 connect_attempts_left_ = kMaxReconnectAttempts;
274 reconnect_timer_.Stop(); 285 reconnect_timer_.Stop();
275 } else if (!channel->writable() && channel_was_writable_) { 286 } else if (!channel->writable() && channel_was_writable_) {
276 reconnect_timer_.Reset(); 287 reconnect_timer_.Reset();
277 TryReconnect(); 288 TryReconnect();
278 } 289 }
279 } 290 }
280 291
281 void LibjingleTransport::OnChannelDestroyed() { 292 void LibjingleTransport::OnChannelDestroyed() {
282 if (is_connected()) { 293 if (is_connected()) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 last_jingle_info_update_time_ = base::TimeTicks::Now(); 389 last_jingle_info_update_time_ = base::TimeTicks::Now();
379 390
380 while (!on_jingle_info_callbacks_.empty()) { 391 while (!on_jingle_info_callbacks_.empty()) {
381 on_jingle_info_callbacks_.begin()->Run(); 392 on_jingle_info_callbacks_.begin()->Run();
382 on_jingle_info_callbacks_.pop_front(); 393 on_jingle_info_callbacks_.pop_front();
383 } 394 }
384 } 395 }
385 396
386 } // namespace protocol 397 } // namespace protocol
387 } // namespace remoting 398 } // namespace remoting
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698