OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "google_apis/gcm/engine/connection_handler_impl.h" | 5 #include "google_apis/gcm/engine/connection_handler_impl.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "google/protobuf/io/coded_stream.h" | 8 #include "google/protobuf/io/coded_stream.h" |
9 #include "google_apis/gcm/base/mcs_util.h" | 9 #include "google_apis/gcm/base/mcs_util.h" |
10 #include "google_apis/gcm/base/socket_stream.h" | 10 #include "google_apis/gcm/base/socket_stream.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 write_callback_(write_callback), | 45 write_callback_(write_callback), |
46 connection_callback_(connection_callback), | 46 connection_callback_(connection_callback), |
47 weak_ptr_factory_(this) { | 47 weak_ptr_factory_(this) { |
48 } | 48 } |
49 | 49 |
50 ConnectionHandlerImpl::~ConnectionHandlerImpl() { | 50 ConnectionHandlerImpl::~ConnectionHandlerImpl() { |
51 } | 51 } |
52 | 52 |
53 void ConnectionHandlerImpl::Init( | 53 void ConnectionHandlerImpl::Init( |
54 const mcs_proto::LoginRequest& login_request, | 54 const mcs_proto::LoginRequest& login_request, |
55 scoped_ptr<net::StreamSocket> socket) { | 55 net::StreamSocket* socket) { |
56 DCHECK(!read_callback_.is_null()); | 56 DCHECK(!read_callback_.is_null()); |
57 DCHECK(!write_callback_.is_null()); | 57 DCHECK(!write_callback_.is_null()); |
58 DCHECK(!connection_callback_.is_null()); | 58 DCHECK(!connection_callback_.is_null()); |
59 | 59 |
60 // Invalidate any previously outstanding reads. | 60 // Invalidate any previously outstanding reads. |
61 weak_ptr_factory_.InvalidateWeakPtrs(); | 61 weak_ptr_factory_.InvalidateWeakPtrs(); |
62 | 62 |
63 handshake_complete_ = false; | 63 handshake_complete_ = false; |
64 message_tag_ = 0; | 64 message_tag_ = 0; |
65 message_size_ = 0; | 65 message_size_ = 0; |
66 socket_ = socket.Pass(); | 66 socket_ = socket; |
67 input_stream_.reset(new SocketInputStream(socket_.get())); | 67 input_stream_.reset(new SocketInputStream(socket_)); |
68 output_stream_.reset(new SocketOutputStream(socket_.get())); | 68 output_stream_.reset(new SocketOutputStream(socket_)); |
69 | 69 |
70 Login(login_request); | 70 Login(login_request); |
71 } | 71 } |
72 | 72 |
73 bool ConnectionHandlerImpl::CanSendMessage() const { | 73 bool ConnectionHandlerImpl::CanSendMessage() const { |
74 return handshake_complete_ && output_stream_.get() && | 74 return handshake_complete_ && output_stream_.get() && |
75 output_stream_->GetState() == SocketOutputStream::EMPTY; | 75 output_stream_->GetState() == SocketOutputStream::EMPTY; |
76 } | 76 } |
77 | 77 |
78 void ConnectionHandlerImpl::SendMessage( | 78 void ConnectionHandlerImpl::SendMessage( |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 } | 386 } |
387 | 387 |
388 void ConnectionHandlerImpl::OnTimeout() { | 388 void ConnectionHandlerImpl::OnTimeout() { |
389 LOG(ERROR) << "Timed out waiting for GCM Protocol buffer."; | 389 LOG(ERROR) << "Timed out waiting for GCM Protocol buffer."; |
390 CloseConnection(); | 390 CloseConnection(); |
391 connection_callback_.Run(net::ERR_TIMED_OUT); | 391 connection_callback_.Run(net::ERR_TIMED_OUT); |
392 } | 392 } |
393 | 393 |
394 void ConnectionHandlerImpl::CloseConnection() { | 394 void ConnectionHandlerImpl::CloseConnection() { |
395 DVLOG(1) << "Closing connection."; | 395 DVLOG(1) << "Closing connection."; |
396 read_callback_.Reset(); | |
397 write_callback_.Reset(); | |
398 read_timeout_timer_.Stop(); | 396 read_timeout_timer_.Stop(); |
399 socket_->Disconnect(); | 397 socket_->Disconnect(); |
400 input_stream_.reset(); | 398 input_stream_.reset(); |
401 output_stream_.reset(); | 399 output_stream_.reset(); |
402 weak_ptr_factory_.InvalidateWeakPtrs(); | 400 weak_ptr_factory_.InvalidateWeakPtrs(); |
403 } | 401 } |
404 | 402 |
405 } // namespace gcm | 403 } // namespace gcm |
OLD | NEW |