| 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 "net/quic/quic_client_session.h" | 5 #include "net/quic/quic_client_session.h" |
| 6 | 6 |
| 7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/metrics/sparse_histogram.h" | 10 #include "base/metrics/sparse_histogram.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 require_confirmation_(false), | 149 require_confirmation_(false), |
| 150 stream_factory_(stream_factory), | 150 stream_factory_(stream_factory), |
| 151 socket_(socket.Pass()), | 151 socket_(socket.Pass()), |
| 152 writer_(writer.Pass()), | 152 writer_(writer.Pass()), |
| 153 read_buffer_(new IOBufferWithSize(kMaxPacketSize)), | 153 read_buffer_(new IOBufferWithSize(kMaxPacketSize)), |
| 154 server_info_(server_info.Pass()), | 154 server_info_(server_info.Pass()), |
| 155 read_pending_(false), | 155 read_pending_(false), |
| 156 num_total_streams_(0), | 156 num_total_streams_(0), |
| 157 task_runner_(task_runner), | 157 task_runner_(task_runner), |
| 158 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_QUIC_SESSION)), | 158 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_QUIC_SESSION)), |
| 159 logger_(net_log_), | 159 logger_(new QuicConnectionLogger(net_log_)), |
| 160 num_packets_read_(0), | 160 num_packets_read_(0), |
| 161 going_away_(false), | 161 going_away_(false), |
| 162 weak_factory_(this) { | 162 weak_factory_(this) { |
| 163 crypto_stream_.reset( | 163 crypto_stream_.reset( |
| 164 crypto_client_stream_factory ? | 164 crypto_client_stream_factory ? |
| 165 crypto_client_stream_factory->CreateQuicCryptoClientStream( | 165 crypto_client_stream_factory->CreateQuicCryptoClientStream( |
| 166 server_id, this, crypto_config) : | 166 server_id, this, crypto_config) : |
| 167 new QuicCryptoClientStream(server_id, this, | 167 new QuicCryptoClientStream(server_id, this, |
| 168 new ProofVerifyContextChromium(net_log_), | 168 new ProofVerifyContextChromium(net_log_), |
| 169 crypto_config)); | 169 crypto_config)); |
| 170 | 170 |
| 171 connection->set_debug_visitor(&logger_); | 171 connection->set_debug_visitor(logger_); |
| 172 // TODO(rch): pass in full host port proxy pair | 172 // TODO(rch): pass in full host port proxy pair |
| 173 net_log_.BeginEvent( | 173 net_log_.BeginEvent( |
| 174 NetLog::TYPE_QUIC_SESSION, | 174 NetLog::TYPE_QUIC_SESSION, |
| 175 NetLog::StringCallback("host", &server_id.host())); | 175 NetLog::StringCallback("host", &server_id.host())); |
| 176 } | 176 } |
| 177 | 177 |
| 178 QuicClientSession::~QuicClientSession() { | 178 QuicClientSession::~QuicClientSession() { |
| 179 if (!streams()->empty()) | 179 if (!streams()->empty()) |
| 180 RecordUnexpectedOpenStreams(DESTRUCTOR); | 180 RecordUnexpectedOpenStreams(DESTRUCTOR); |
| 181 if (!observers_.empty()) | 181 if (!observers_.empty()) |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 | 509 |
| 510 QuicDataStream* QuicClientSession::CreateIncomingDataStream( | 510 QuicDataStream* QuicClientSession::CreateIncomingDataStream( |
| 511 QuicStreamId id) { | 511 QuicStreamId id) { |
| 512 DLOG(ERROR) << "Server push not supported"; | 512 DLOG(ERROR) << "Server push not supported"; |
| 513 return NULL; | 513 return NULL; |
| 514 } | 514 } |
| 515 | 515 |
| 516 void QuicClientSession::CloseStream(QuicStreamId stream_id) { | 516 void QuicClientSession::CloseStream(QuicStreamId stream_id) { |
| 517 ReliableQuicStream* stream = GetStream(stream_id); | 517 ReliableQuicStream* stream = GetStream(stream_id); |
| 518 if (stream) { | 518 if (stream) { |
| 519 logger_.UpdateReceivedFrameCounts( | 519 logger_->UpdateReceivedFrameCounts( |
| 520 stream_id, stream->num_frames_received(), | 520 stream_id, stream->num_frames_received(), |
| 521 stream->num_duplicate_frames_received()); | 521 stream->num_duplicate_frames_received()); |
| 522 } | 522 } |
| 523 QuicSession::CloseStream(stream_id); | 523 QuicSession::CloseStream(stream_id); |
| 524 OnClosedStream(); | 524 OnClosedStream(); |
| 525 } | 525 } |
| 526 | 526 |
| 527 void QuicClientSession::SendRstStream(QuicStreamId id, | 527 void QuicClientSession::SendRstStream(QuicStreamId id, |
| 528 QuicRstStreamErrorCode error, | 528 QuicRstStreamErrorCode error, |
| 529 QuicStreamOffset bytes_written) { | 529 QuicStreamOffset bytes_written) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 Observer* observer = *it; | 565 Observer* observer = *it; |
| 566 ++it; | 566 ++it; |
| 567 observer->OnCryptoHandshakeConfirmed(); | 567 observer->OnCryptoHandshakeConfirmed(); |
| 568 } | 568 } |
| 569 } | 569 } |
| 570 QuicSession::OnCryptoHandshakeEvent(event); | 570 QuicSession::OnCryptoHandshakeEvent(event); |
| 571 } | 571 } |
| 572 | 572 |
| 573 void QuicClientSession::OnCryptoHandshakeMessageSent( | 573 void QuicClientSession::OnCryptoHandshakeMessageSent( |
| 574 const CryptoHandshakeMessage& message) { | 574 const CryptoHandshakeMessage& message) { |
| 575 logger_.OnCryptoHandshakeMessageSent(message); | 575 logger_->OnCryptoHandshakeMessageSent(message); |
| 576 } | 576 } |
| 577 | 577 |
| 578 void QuicClientSession::OnCryptoHandshakeMessageReceived( | 578 void QuicClientSession::OnCryptoHandshakeMessageReceived( |
| 579 const CryptoHandshakeMessage& message) { | 579 const CryptoHandshakeMessage& message) { |
| 580 logger_.OnCryptoHandshakeMessageReceived(message); | 580 logger_->OnCryptoHandshakeMessageReceived(message); |
| 581 } | 581 } |
| 582 | 582 |
| 583 void QuicClientSession::OnConnectionClosed(QuicErrorCode error, | 583 void QuicClientSession::OnConnectionClosed(QuicErrorCode error, |
| 584 bool from_peer) { | 584 bool from_peer) { |
| 585 DCHECK(!connection()->connected()); | 585 DCHECK(!connection()->connected()); |
| 586 logger_.OnConnectionClosed(error, from_peer); | 586 logger_->OnConnectionClosed(error, from_peer); |
| 587 if (from_peer) { | 587 if (from_peer) { |
| 588 UMA_HISTOGRAM_SPARSE_SLOWLY( | 588 UMA_HISTOGRAM_SPARSE_SLOWLY( |
| 589 "Net.QuicSession.ConnectionCloseErrorCodeServer", error); | 589 "Net.QuicSession.ConnectionCloseErrorCodeServer", error); |
| 590 } else { | 590 } else { |
| 591 UMA_HISTOGRAM_SPARSE_SLOWLY( | 591 UMA_HISTOGRAM_SPARSE_SLOWLY( |
| 592 "Net.QuicSession.ConnectionCloseErrorCodeClient", error); | 592 "Net.QuicSession.ConnectionCloseErrorCodeClient", error); |
| 593 } | 593 } |
| 594 | 594 |
| 595 if (error == QUIC_CONNECTION_TIMED_OUT) { | 595 if (error == QUIC_CONNECTION_TIMED_OUT) { |
| 596 UMA_HISTOGRAM_COUNTS( | 596 UMA_HISTOGRAM_COUNTS( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 socket_->Close(); | 631 socket_->Close(); |
| 632 QuicSession::OnConnectionClosed(error, from_peer); | 632 QuicSession::OnConnectionClosed(error, from_peer); |
| 633 DCHECK(streams()->empty()); | 633 DCHECK(streams()->empty()); |
| 634 CloseAllStreams(ERR_UNEXPECTED); | 634 CloseAllStreams(ERR_UNEXPECTED); |
| 635 CloseAllObservers(ERR_UNEXPECTED); | 635 CloseAllObservers(ERR_UNEXPECTED); |
| 636 NotifyFactoryOfSessionClosedLater(); | 636 NotifyFactoryOfSessionClosedLater(); |
| 637 } | 637 } |
| 638 | 638 |
| 639 void QuicClientSession::OnSuccessfulVersionNegotiation( | 639 void QuicClientSession::OnSuccessfulVersionNegotiation( |
| 640 const QuicVersion& version) { | 640 const QuicVersion& version) { |
| 641 logger_.OnSuccessfulVersionNegotiation(version); | 641 logger_->OnSuccessfulVersionNegotiation(version); |
| 642 QuicSession::OnSuccessfulVersionNegotiation(version); | 642 QuicSession::OnSuccessfulVersionNegotiation(version); |
| 643 } | 643 } |
| 644 | 644 |
| 645 void QuicClientSession::OnProofValid( | 645 void QuicClientSession::OnProofValid( |
| 646 const QuicCryptoClientConfig::CachedState& cached) { | 646 const QuicCryptoClientConfig::CachedState& cached) { |
| 647 DCHECK(cached.proof_valid()); | 647 DCHECK(cached.proof_valid()); |
| 648 | 648 |
| 649 if (!server_info_ || !server_info_->IsReadyToPersist()) { | 649 if (!server_info_ || !server_info_->IsReadyToPersist()) { |
| 650 return; | 650 return; |
| 651 } | 651 } |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 return; | 850 return; |
| 851 | 851 |
| 852 // TODO(rch): re-enable this code once beta is cut. | 852 // TODO(rch): re-enable this code once beta is cut. |
| 853 // if (stream_factory_) | 853 // if (stream_factory_) |
| 854 // stream_factory_->OnSessionConnectTimeout(this); | 854 // stream_factory_->OnSessionConnectTimeout(this); |
| 855 // CloseAllStreams(ERR_QUIC_HANDSHAKE_FAILED); | 855 // CloseAllStreams(ERR_QUIC_HANDSHAKE_FAILED); |
| 856 // DCHECK_EQ(0u, GetNumOpenStreams()); | 856 // DCHECK_EQ(0u, GetNumOpenStreams()); |
| 857 } | 857 } |
| 858 | 858 |
| 859 } // namespace net | 859 } // namespace net |
| OLD | NEW |