blob: c07bdf6e3b189cd1cbff84a4431aca94366bf42a [file] [log] [blame]
wubf975eac2019-08-19 19:41:01 -07001// Copyright (c) 2019 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/third_party/quiche/src/quic/qbone/qbone_client_session.h"
6
7#include "net/third_party/quiche/src/quic/core/quic_types.h"
8#include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
9#include "net/third_party/quiche/src/quic/qbone/qbone_constants.h"
10
11namespace quic {
12
13QboneClientSession::QboneClientSession(
14 QuicConnection* connection,
15 QuicCryptoClientConfig* quic_crypto_client_config,
16 QuicSession::Visitor* owner,
17 const QuicConfig& config,
18 const ParsedQuicVersionVector& supported_versions,
19 const QuicServerId& server_id,
20 QbonePacketWriter* writer,
21 QboneClientControlStream::Handler* handler)
22 : QboneSessionBase(connection, owner, config, supported_versions, writer),
23 server_id_(server_id),
24 quic_crypto_client_config_(quic_crypto_client_config),
25 handler_(handler) {}
26
27QboneClientSession::~QboneClientSession() {}
28
29std::unique_ptr<QuicCryptoStream> QboneClientSession::CreateCryptoStream() {
30 return QuicMakeUnique<QuicCryptoClientStream>(
31 server_id_, this, nullptr, quic_crypto_client_config_, this);
32}
33
34void QboneClientSession::Initialize() {
35 // Initialize must be called first, as that's what generates the crypto
36 // stream.
37 QboneSessionBase::Initialize();
38 static_cast<QuicCryptoClientStreamBase*>(GetMutableCryptoStream())
39 ->CryptoConnect();
40 // Register the reserved control stream.
41 QuicStreamId next_id = GetNextOutgoingBidirectionalStreamId();
renjietangd1d00852019-09-06 10:43:12 -070042 DCHECK_EQ(next_id, QboneConstants::GetControlStreamId(transport_version()));
wubf975eac2019-08-19 19:41:01 -070043 auto control_stream =
44 QuicMakeUnique<QboneClientControlStream>(this, handler_);
45 control_stream_ = control_stream.get();
renjietang5c729f02019-09-06 12:43:48 -070046 ActivateStream(std::move(control_stream));
wubf975eac2019-08-19 19:41:01 -070047}
48
49int QboneClientSession::GetNumSentClientHellos() const {
50 return static_cast<const QuicCryptoClientStreamBase*>(GetCryptoStream())
51 ->num_sent_client_hellos();
52}
53
54int QboneClientSession::GetNumReceivedServerConfigUpdates() const {
55 return static_cast<const QuicCryptoClientStreamBase*>(GetCryptoStream())
56 ->num_scup_messages_received();
57}
58
59bool QboneClientSession::SendServerRequest(const QboneServerRequest& request) {
60 if (!control_stream_) {
61 QUIC_BUG << "Cannot send server request before control stream is created.";
62 return false;
63 }
64 return control_stream_->SendRequest(request);
65}
66
67void QboneClientSession::ProcessPacketFromNetwork(QuicStringPiece packet) {
68 SendPacketToPeer(packet);
69}
70
71void QboneClientSession::ProcessPacketFromPeer(QuicStringPiece packet) {
72 writer_->WritePacketToNetwork(packet.data(), packet.size());
73}
74
75void QboneClientSession::OnProofValid(
76 const QuicCryptoClientConfig::CachedState& cached) {}
77
78void QboneClientSession::OnProofVerifyDetailsAvailable(
79 const ProofVerifyDetails& verify_details) {}
80
81bool QboneClientSession::HasActiveRequests() const {
82 return (stream_map().size() - num_incoming_static_streams() -
83 num_outgoing_static_streams()) > 0;
84}
85
86} // namespace quic