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

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

Issue 9433027: Delete Session and SessionManager object synchronously. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 8 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « remoting/protocol/fake_authenticator.cc ('k') | remoting/protocol/pepper_session_unittest.cc » ('j') | 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/message_loop_proxy.h"
7 #include "jingle/glue/channel_socket_adapter.h" 8 #include "jingle/glue/channel_socket_adapter.h"
8 #include "jingle/glue/pseudotcp_adapter.h" 9 #include "jingle/glue/pseudotcp_adapter.h"
9 #include "jingle/glue/utils.h" 10 #include "jingle/glue/utils.h"
10 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
11 #include "remoting/protocol/channel_authenticator.h" 12 #include "remoting/protocol/channel_authenticator.h"
12 #include "remoting/protocol/transport_config.h" 13 #include "remoting/protocol/transport_config.h"
13 #include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h" 14 #include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h"
14 #include "third_party/libjingle/source/talk/base/network.h" 15 #include "third_party/libjingle/source/talk/base/network.h"
15 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" 16 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h"
16 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" 17 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 socket_factory_(socket_factory), 91 socket_factory_(socket_factory),
91 event_handler_(NULL), 92 event_handler_(NULL),
92 http_port_allocator_(NULL) { 93 http_port_allocator_(NULL) {
93 } 94 }
94 95
95 LibjingleStreamTransport::~LibjingleStreamTransport() { 96 LibjingleStreamTransport::~LibjingleStreamTransport() {
96 DCHECK(event_handler_); 97 DCHECK(event_handler_);
97 event_handler_->OnTransportDeleted(this); 98 event_handler_->OnTransportDeleted(this);
98 // Channel should be already destroyed if we were connected. 99 // Channel should be already destroyed if we were connected.
99 DCHECK(!is_connected() || socket_.get() == NULL); 100 DCHECK(!is_connected() || socket_.get() == NULL);
101
102 if (channel_.get()) {
103 base::MessageLoopProxy::current()->DeleteSoon(
104 FROM_HERE, channel_.release());
105 }
106 if (port_allocator_.get()) {
107 base::MessageLoopProxy::current()->DeleteSoon(
108 FROM_HERE, port_allocator_.release());
109 }
100 } 110 }
101 111
102 void LibjingleStreamTransport::Initialize( 112 void LibjingleStreamTransport::Initialize(
103 const std::string& name, 113 const std::string& name,
104 const TransportConfig& config, 114 const TransportConfig& config,
105 Transport::EventHandler* event_handler, 115 Transport::EventHandler* event_handler,
106 scoped_ptr<ChannelAuthenticator> authenticator) { 116 scoped_ptr<ChannelAuthenticator> authenticator) {
107 DCHECK(CalledOnValidThread()); 117 DCHECK(CalledOnValidThread());
108 118
109 DCHECK(!name.empty()); 119 DCHECK(!name.empty());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 channel_->SignalCandidateReady.connect( 163 channel_->SignalCandidateReady.connect(
154 this, &LibjingleStreamTransport::OnCandidateReady); 164 this, &LibjingleStreamTransport::OnCandidateReady);
155 channel_->SignalRouteChange.connect( 165 channel_->SignalRouteChange.connect(
156 this, &LibjingleStreamTransport::OnRouteChange); 166 this, &LibjingleStreamTransport::OnRouteChange);
157 167
158 channel_->Connect(); 168 channel_->Connect();
159 169
160 // Create net::Socket adapter for the P2PTransportChannel. 170 // Create net::Socket adapter for the P2PTransportChannel.
161 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> channel_adapter( 171 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> channel_adapter(
162 new jingle_glue::TransportChannelSocketAdapter(channel_.get())); 172 new jingle_glue::TransportChannelSocketAdapter(channel_.get()));
173
163 channel_adapter->SetOnDestroyedCallback(base::Bind( 174 channel_adapter->SetOnDestroyedCallback(base::Bind(
164 &LibjingleStreamTransport::OnChannelDestroyed, base::Unretained(this))); 175 &LibjingleStreamTransport::OnChannelDestroyed, base::Unretained(this)));
165 176
166 // Configure and connect PseudoTCP adapter. 177 // Configure and connect PseudoTCP adapter.
167 socket_.reset( 178 socket_.reset(
168 new jingle_glue::PseudoTcpAdapter(channel_adapter.release())); 179 new jingle_glue::PseudoTcpAdapter(channel_adapter.release()));
169 socket_->SetSendBufferSize(kTcpSendBufferSize); 180 socket_->SetSendBufferSize(kTcpSendBufferSize);
170 socket_->SetReceiveBufferSize(kTcpReceiveBufferSize); 181 socket_->SetReceiveBufferSize(kTcpReceiveBufferSize);
171 socket_->SetNoDelay(true); 182 socket_->SetNoDelay(true);
172 socket_->SetAckDelay(kTcpAckDelayMilliseconds); 183 socket_->SetAckDelay(kTcpAckDelayMilliseconds);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 void LibjingleStreamTransport::OnChannelDestroyed() { 277 void LibjingleStreamTransport::OnChannelDestroyed() {
267 if (is_connected()) { 278 if (is_connected()) {
268 // The connection socket is being deleted, so delete the transport too. 279 // The connection socket is being deleted, so delete the transport too.
269 delete this; 280 delete this;
270 } 281 }
271 } 282 }
272 283
273 void LibjingleStreamTransport::NotifyConnected( 284 void LibjingleStreamTransport::NotifyConnected(
274 scoped_ptr<net::StreamSocket> socket) { 285 scoped_ptr<net::StreamSocket> socket) {
275 DCHECK(!is_connected()); 286 DCHECK(!is_connected());
276 callback_.Run(socket.Pass()); 287 StreamTransport::ConnectedCallback callback = callback_;
277 callback_.Reset(); 288 callback_.Reset();
289 callback.Run(socket.Pass());
278 } 290 }
279 291
280 void LibjingleStreamTransport::NotifyConnectFailed() { 292 void LibjingleStreamTransport::NotifyConnectFailed() {
293 DCHECK(!is_connected());
294
281 socket_.reset(); 295 socket_.reset();
282 channel_.reset(); 296
297 // This method may be called in response to a libjingle signal, so
298 // libjingle objects must be deleted asynchronously.
299 if (channel_.get()) {
300 base::MessageLoopProxy::current()->DeleteSoon(
301 FROM_HERE, channel_.release());
302 }
303 if (port_allocator_.get()) {
304 base::MessageLoopProxy::current()->DeleteSoon(
305 FROM_HERE, port_allocator_.release());
306 }
307
283 authenticator_.reset(); 308 authenticator_.reset();
284 309
285 NotifyConnected(scoped_ptr<net::StreamSocket>(NULL)); 310 NotifyConnected(scoped_ptr<net::StreamSocket>(NULL));
286 } 311 }
287 312
288 } // namespace 313 } // namespace
289 314
290 LibjingleTransportFactory::LibjingleTransportFactory() 315 LibjingleTransportFactory::LibjingleTransportFactory()
291 : network_manager_(new talk_base::BasicNetworkManager()), 316 : network_manager_(new talk_base::BasicNetworkManager()),
292 socket_factory_(new talk_base::BasicPacketSocketFactory( 317 socket_factory_(new talk_base::BasicPacketSocketFactory(
293 talk_base::Thread::Current())) { 318 talk_base::Thread::Current())) {
294 } 319 }
295 320
296 LibjingleTransportFactory::~LibjingleTransportFactory() { 321 LibjingleTransportFactory::~LibjingleTransportFactory() {
322 // This method may be called in response to a libjingle signal, so
323 // libjingle objects must be deleted asynchronously.
324 base::MessageLoopProxy::current()->DeleteSoon(
325 FROM_HERE, socket_factory_.release());
326 base::MessageLoopProxy::current()->DeleteSoon(
327 FROM_HERE, network_manager_.release());
297 } 328 }
298 329
299 scoped_ptr<StreamTransport> LibjingleTransportFactory::CreateStreamTransport() { 330 scoped_ptr<StreamTransport> LibjingleTransportFactory::CreateStreamTransport() {
300 return scoped_ptr<StreamTransport>( 331 return scoped_ptr<StreamTransport>(
301 new LibjingleStreamTransport(network_manager_.get(), 332 new LibjingleStreamTransport(network_manager_.get(),
302 socket_factory_.get())); 333 socket_factory_.get()));
303 } 334 }
304 335
305 scoped_ptr<DatagramTransport> 336 scoped_ptr<DatagramTransport>
306 LibjingleTransportFactory::CreateDatagramTransport() { 337 LibjingleTransportFactory::CreateDatagramTransport() {
307 NOTIMPLEMENTED(); 338 NOTIMPLEMENTED();
308 return scoped_ptr<DatagramTransport>(NULL); 339 return scoped_ptr<DatagramTransport>(NULL);
309 } 340 }
310 341
311 342
312 } // namespace protocol 343 } // namespace protocol
313 } // namespace remoting 344 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/fake_authenticator.cc ('k') | remoting/protocol/pepper_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698