| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/cast_channel/cast_socket.h" | 5 #include "extensions/browser/api/cast_channel/cast_socket.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 tcp_socket_ = CreateTcpSocket(); | 372 tcp_socket_ = CreateTcpSocket(); |
| 373 | 373 |
| 374 int rv = tcp_socket_->Connect( | 374 int rv = tcp_socket_->Connect( |
| 375 base::Bind(&CastSocketImpl::DoConnectLoop, base::Unretained(this))); | 375 base::Bind(&CastSocketImpl::DoConnectLoop, base::Unretained(this))); |
| 376 logger_->LogSocketEventWithRv(channel_id_, proto::TCP_SOCKET_CONNECT, rv); | 376 logger_->LogSocketEventWithRv(channel_id_, proto::TCP_SOCKET_CONNECT, rv); |
| 377 return rv; | 377 return rv; |
| 378 } | 378 } |
| 379 | 379 |
| 380 int CastSocketImpl::DoTcpConnectComplete(int connect_result) { | 380 int CastSocketImpl::DoTcpConnectComplete(int connect_result) { |
| 381 VLOG_WITH_CONNECTION(1) << "DoTcpConnectComplete: " << connect_result; | 381 VLOG_WITH_CONNECTION(1) << "DoTcpConnectComplete: " << connect_result; |
| 382 logger_->LogSocketEventWithRv(channel_id_, proto::TCP_SOCKET_CONNECT_COMPLETE, |
| 383 connect_result); |
| 382 if (connect_result == net::OK) { | 384 if (connect_result == net::OK) { |
| 383 // Enable TCP-level keep-alive handling. | 385 // Enable TCP-level keep-alive handling. |
| 384 // TODO(kmarshall): Remove TCP keep-alive once protocol-level ping handling | 386 // TODO(kmarshall): Remove TCP keep-alive once protocol-level ping handling |
| 385 // is in place. | 387 // is in place. |
| 386 bool keep_alive = tcp_socket_->SetKeepAlive(true, kTcpKeepAliveDelaySecs); | 388 bool keep_alive = tcp_socket_->SetKeepAlive(true, kTcpKeepAliveDelaySecs); |
| 387 LOG_IF(WARNING, !keep_alive) << "Failed to SetKeepAlive."; | 389 LOG_IF(WARNING, !keep_alive) << "Failed to SetKeepAlive."; |
| 388 logger_->LogSocketEventWithRv(channel_id_, proto::TCP_SOCKET_SET_KEEP_ALIVE, | 390 logger_->LogSocketEventWithRv(channel_id_, proto::TCP_SOCKET_SET_KEEP_ALIVE, |
| 389 keep_alive ? 1 : 0); | 391 keep_alive ? 1 : 0); |
| 390 SetConnectState(proto::CONN_STATE_SSL_CONNECT); | 392 SetConnectState(proto::CONN_STATE_SSL_CONNECT); |
| 391 } else { | 393 } else { |
| 392 SetErrorState(CHANNEL_ERROR_CONNECT_ERROR); | 394 SetErrorState(CHANNEL_ERROR_CONNECT_ERROR); |
| 393 } | 395 } |
| 394 return connect_result; | 396 return connect_result; |
| 395 } | 397 } |
| 396 | 398 |
| 397 int CastSocketImpl::DoSslConnect() { | 399 int CastSocketImpl::DoSslConnect() { |
| 398 DCHECK(connect_loop_callback_.IsCancelled()); | 400 DCHECK(connect_loop_callback_.IsCancelled()); |
| 399 VLOG_WITH_CONNECTION(1) << "DoSslConnect"; | 401 VLOG_WITH_CONNECTION(1) << "DoSslConnect"; |
| 400 SetConnectState(proto::CONN_STATE_SSL_CONNECT_COMPLETE); | 402 SetConnectState(proto::CONN_STATE_SSL_CONNECT_COMPLETE); |
| 401 socket_ = CreateSslSocket(tcp_socket_.Pass()); | 403 socket_ = CreateSslSocket(tcp_socket_.Pass()); |
| 402 | 404 |
| 403 int rv = socket_->Connect( | 405 int rv = socket_->Connect( |
| 404 base::Bind(&CastSocketImpl::DoConnectLoop, base::Unretained(this))); | 406 base::Bind(&CastSocketImpl::DoConnectLoop, base::Unretained(this))); |
| 405 logger_->LogSocketEventWithRv(channel_id_, proto::SSL_SOCKET_CONNECT, rv); | 407 logger_->LogSocketEventWithRv(channel_id_, proto::SSL_SOCKET_CONNECT, rv); |
| 406 return rv; | 408 return rv; |
| 407 } | 409 } |
| 408 | 410 |
| 409 int CastSocketImpl::DoSslConnectComplete(int result) { | 411 int CastSocketImpl::DoSslConnectComplete(int result) { |
| 412 logger_->LogSocketEventWithRv(channel_id_, proto::SSL_SOCKET_CONNECT_COMPLETE, |
| 413 result); |
| 410 VLOG_WITH_CONNECTION(1) << "DoSslConnectComplete: " << result; | 414 VLOG_WITH_CONNECTION(1) << "DoSslConnectComplete: " << result; |
| 411 if (result == net::ERR_CERT_AUTHORITY_INVALID && | 415 if (result == net::ERR_CERT_AUTHORITY_INVALID && |
| 412 peer_cert_.empty() && ExtractPeerCert(&peer_cert_)) { | 416 peer_cert_.empty() && ExtractPeerCert(&peer_cert_)) { |
| 413 // Peer certificate fallback - try the connection again, from the top. | 417 // Peer certificate fallback - try the connection again, from the top. |
| 414 SetConnectState(proto::CONN_STATE_TCP_CONNECT); | 418 SetConnectState(proto::CONN_STATE_TCP_CONNECT); |
| 415 } else if (result == net::OK) { | 419 } else if (result == net::OK) { |
| 416 // SSL connection succeeded. | 420 // SSL connection succeeded. |
| 417 if (!transport_.get()) { | 421 if (!transport_.get()) { |
| 418 // Create a channel transport if one wasn't already set (e.g. by test | 422 // Create a channel transport if one wasn't already set (e.g. by test |
| 419 // code). | 423 // code). |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 void CastSocketImpl::SetErrorState(ChannelError error_state) { | 580 void CastSocketImpl::SetErrorState(ChannelError error_state) { |
| 577 VLOG_WITH_CONNECTION(1) << "SetErrorState " << error_state; | 581 VLOG_WITH_CONNECTION(1) << "SetErrorState " << error_state; |
| 578 DCHECK_EQ(CHANNEL_ERROR_NONE, error_state_); | 582 DCHECK_EQ(CHANNEL_ERROR_NONE, error_state_); |
| 579 error_state_ = error_state; | 583 error_state_ = error_state; |
| 580 logger_->LogSocketErrorState(channel_id_, ErrorStateToProto(error_state_)); | 584 logger_->LogSocketErrorState(channel_id_, ErrorStateToProto(error_state_)); |
| 581 } | 585 } |
| 582 } // namespace cast_channel | 586 } // namespace cast_channel |
| 583 } // namespace core_api | 587 } // namespace core_api |
| 584 } // namespace extensions | 588 } // namespace extensions |
| 585 #undef VLOG_WITH_CONNECTION | 589 #undef VLOG_WITH_CONNECTION |
| OLD | NEW |