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 12using std::string; 13 14namespace net { 15namespace tools { 16 17QuicClientSession::QuicClientSession(const QuicConfig& config, 18 QuicConnection* connection) 19 : QuicClientSessionBase(connection, config) { 20} 21 22QuicClientSession::~QuicClientSession() { 23} 24 25void 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 33void QuicClientSession::OnProofValid( 34 const QuicCryptoClientConfig::CachedState& /*cached*/) { 35} 36 37void QuicClientSession::OnProofVerifyDetailsAvailable( 38 const ProofVerifyDetails& /*verify_details*/) { 39} 40 41QuicSpdyClientStream* 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 62QuicCryptoClientStream* QuicClientSession::GetCryptoStream() { 63 return crypto_stream_.get(); 64} 65 66bool QuicClientSession::CryptoConnect() { 67 DCHECK(flow_controller()); 68 return crypto_stream_->CryptoConnect(); 69} 70 71int QuicClientSession::GetNumSentClientHellos() const { 72 return crypto_stream_->num_sent_client_hellos(); 73} 74 75QuicDataStream* QuicClientSession::CreateIncomingDataStream( 76 QuicStreamId id) { 77 DLOG(ERROR) << "Server push not supported"; 78 return NULL; 79} 80 81} // namespace tools 82} // namespace net 83