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 17 QuicClientSession::QuicClientSession(const QuicConfig& config, 18 QuicConnection* connection) 19 : QuicClientSessionBase(connection, config) { 20 } 21 22 QuicClientSession::~QuicClientSession() { 23 } 24 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 33 void QuicClientSession::OnProofValid( 34 const QuicCryptoClientConfig::CachedState& /*cached*/) { 35 } 36 37 void QuicClientSession::OnProofVerifyDetailsAvailable( 38 const ProofVerifyDetails& /*verify_details*/) { 39 } 40 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 62 QuicCryptoClientStream* QuicClientSession::GetCryptoStream() { 63 return crypto_stream_.get(); 64 } 65 66 bool QuicClientSession::CryptoConnect() { 67 DCHECK(flow_controller()); 68 return crypto_stream_->CryptoConnect(); 69 } 70 71 int QuicClientSession::GetNumSentClientHellos() const { 72 return crypto_stream_->num_sent_client_hellos(); 73 } 74 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