• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "net/tools/quic/quic_client_session.h"
6 
7 #include "base/logging.h"
8 #include "net/quic/crypto/crypto_protocol.h"
9 #include "net/quic/quic_server_id.h"
10 #include "net/tools/quic/quic_spdy_client_stream.h"
11 
12 using std::string;
13 
14 namespace net {
15 namespace tools {
16 
QuicClientSession(const QuicConfig & config,QuicConnection * connection)17 QuicClientSession::QuicClientSession(const QuicConfig& config,
18                                      QuicConnection* connection)
19     : QuicClientSessionBase(connection, config) {
20 }
21 
~QuicClientSession()22 QuicClientSession::~QuicClientSession() {
23 }
24 
InitializeSession(const QuicServerId & server_id,QuicCryptoClientConfig * crypto_config)25 void QuicClientSession::InitializeSession(
26     const QuicServerId& server_id,
27     QuicCryptoClientConfig* crypto_config) {
28   QuicClientSessionBase::InitializeSession();
29   crypto_stream_.reset(
30       new QuicCryptoClientStream(server_id, this, NULL, crypto_config));
31 }
32 
OnProofValid(const QuicCryptoClientConfig::CachedState &)33 void QuicClientSession::OnProofValid(
34     const QuicCryptoClientConfig::CachedState& /*cached*/) {
35 }
36 
OnProofVerifyDetailsAvailable(const ProofVerifyDetails &)37 void QuicClientSession::OnProofVerifyDetailsAvailable(
38     const ProofVerifyDetails& /*verify_details*/) {
39 }
40 
CreateOutgoingDataStream()41 QuicSpdyClientStream* QuicClientSession::CreateOutgoingDataStream() {
42   if (!crypto_stream_->encryption_established()) {
43     DVLOG(1) << "Encryption not active so no outgoing stream created.";
44     return NULL;
45   }
46   if (GetNumOpenStreams() >= get_max_open_streams()) {
47     DVLOG(1) << "Failed to create a new outgoing stream. "
48              << "Already " << GetNumOpenStreams() << " open.";
49     return NULL;
50   }
51   if (goaway_received()) {
52     DVLOG(1) << "Failed to create a new outgoing stream. "
53              << "Already received goaway.";
54     return NULL;
55   }
56   QuicSpdyClientStream* stream
57       = new QuicSpdyClientStream(GetNextStreamId(), this);
58   ActivateStream(stream);
59   return stream;
60 }
61 
GetCryptoStream()62 QuicCryptoClientStream* QuicClientSession::GetCryptoStream() {
63   return crypto_stream_.get();
64 }
65 
CryptoConnect()66 bool QuicClientSession::CryptoConnect() {
67   DCHECK(flow_controller());
68   return crypto_stream_->CryptoConnect();
69 }
70 
GetNumSentClientHellos() const71 int QuicClientSession::GetNumSentClientHellos() const {
72   return crypto_stream_->num_sent_client_hellos();
73 }
74 
CreateIncomingDataStream(QuicStreamId id)75 QuicDataStream* QuicClientSession::CreateIncomingDataStream(
76     QuicStreamId id) {
77   DLOG(ERROR) << "Server push not supported";
78   return NULL;
79 }
80 
81 }  // namespace tools
82 }  // namespace net
83