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.
5 #include "net/tools/quic/quic_client_session.h"
7 #include "base/logging.h"
8 #include "net/quic/crypto/crypto_protocol.h"
9 #include "net/tools/quic/quic_reliable_client_stream.h"
10 #include "net/tools/quic/quic_spdy_client_stream.h"
17 QuicClientSession::QuicClientSession(
18 const string& server_hostname,
19 const QuicConfig& config,
20 QuicConnection* connection,
21 QuicCryptoClientConfig* crypto_config)
22 : QuicSession(connection, config, false),
23 crypto_stream_(server_hostname, this, crypto_config) {
26 QuicClientSession::~QuicClientSession() {
29 QuicReliableClientStream* QuicClientSession::CreateOutgoingReliableStream() {
30 if (!crypto_stream_.encryption_established()) {
31 DLOG(INFO) << "Encryption not active so no outgoing stream created.";
34 if (GetNumOpenStreams() >= get_max_open_streams()) {
35 DLOG(INFO) << "Failed to create a new outgoing stream. "
36 << "Already " << GetNumOpenStreams() << " open.";
39 if (goaway_received()) {
40 DLOG(INFO) << "Failed to create a new outgoing stream. "
41 << "Already received goaway.";
44 QuicReliableClientStream* stream
45 = new QuicSpdyClientStream(GetNextStreamId(), this);
46 ActivateStream(stream);
50 QuicCryptoClientStream* QuicClientSession::GetCryptoStream() {
51 return &crypto_stream_;
54 bool QuicClientSession::CryptoConnect() {
55 return crypto_stream_.CryptoConnect();
58 int QuicClientSession::GetNumSentClientHellos() const {
59 return crypto_stream_.num_sent_client_hellos();
62 ReliableQuicStream* QuicClientSession::CreateIncomingReliableStream(
64 DLOG(ERROR) << "Server push not supported";