blob: 76b7333ad05bdcb5e782dfbb65d98358bb4f2ac3 [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#ifndef QUICHE_QUIC_QBONE_QBONE_SERVER_SESSION_H_
6#define QUICHE_QUIC_QBONE_QBONE_SERVER_SESSION_H_
7
vasilvv1436e342020-10-09 12:31:16 -07008#include "absl/strings/string_view.h"
QUICHE team5be974e2020-12-29 18:35:24 -05009#include "quic/core/quic_crypto_server_stream_base.h"
10#include "quic/core/quic_crypto_stream.h"
11#include "quic/platform/api/quic_export.h"
12#include "quic/qbone/qbone_control.pb.h"
13#include "quic/qbone/qbone_control_stream.h"
14#include "quic/qbone/qbone_packet_processor.h"
15#include "quic/qbone/qbone_packet_writer.h"
16#include "quic/qbone/qbone_session_base.h"
wubf975eac2019-08-19 19:41:01 -070017
18namespace quic {
19
20// A helper class is used by the QuicCryptoServerStream.
nharper5f23a2d2020-02-20 10:44:09 -080021class QboneCryptoServerStreamHelper
22 : public QuicCryptoServerStreamBase::Helper {
wubf975eac2019-08-19 19:41:01 -070023 public:
bncc3843272020-02-27 04:58:51 -080024 // This will look for the QBONE alpn.
wubf975eac2019-08-19 19:41:01 -070025 bool CanAcceptClientHello(const CryptoHandshakeMessage& chlo,
26 const QuicSocketAddress& client_address,
27 const QuicSocketAddress& peer_address,
28 const QuicSocketAddress& self_address,
QUICHE teamb80d7c32020-02-23 23:44:20 -080029 std::string* error_details) const override;
wubf975eac2019-08-19 19:41:01 -070030};
31
32class QUIC_EXPORT_PRIVATE QboneServerSession
33 : public QboneSessionBase,
34 public QbonePacketProcessor::OutputInterface,
35 public QbonePacketProcessor::StatsInterface {
36 public:
37 QboneServerSession(const quic::ParsedQuicVersionVector& supported_versions,
38 QuicConnection* connection,
39 Visitor* owner,
40 const QuicConfig& config,
41 const QuicCryptoServerConfig* quic_crypto_server_config,
42 QuicCompressedCertsCache* compressed_certs_cache,
43 QbonePacketWriter* writer,
44 QuicIpAddress self_ip,
45 QuicIpAddress client_ip,
46 size_t client_ip_subnet_length,
47 QboneServerControlStream::Handler* handler);
48 QboneServerSession(const QboneServerSession&) = delete;
49 QboneServerSession& operator=(const QboneServerSession&) = delete;
50 ~QboneServerSession() override;
51
52 void Initialize() override;
53
54 virtual bool SendClientRequest(const QboneClientRequest& request);
55
vasilvv1436e342020-10-09 12:31:16 -070056 void ProcessPacketFromNetwork(absl::string_view packet) override;
57 void ProcessPacketFromPeer(absl::string_view packet) override;
wubf975eac2019-08-19 19:41:01 -070058
59 // QbonePacketProcessor::OutputInterface implementation.
vasilvv1436e342020-10-09 12:31:16 -070060 void SendPacketToClient(absl::string_view packet) override;
61 void SendPacketToNetwork(absl::string_view packet) override;
wubf975eac2019-08-19 19:41:01 -070062
63 // QbonePacketProcessor::StatsInterface implementation.
64 void OnPacketForwarded(QbonePacketProcessor::Direction direction) override {}
65 void OnPacketDroppedSilently(
66 QbonePacketProcessor::Direction direction) override {}
67 void OnPacketDroppedWithIcmp(
68 QbonePacketProcessor::Direction direction) override {}
69 void OnPacketDroppedWithTcpReset(
70 QbonePacketProcessor::Direction direction) override {}
71 void OnPacketDeferred(QbonePacketProcessor::Direction direction) override {}
72
73 protected:
74 // QboneSessionBase interface implementation.
75 std::unique_ptr<QuicCryptoStream> CreateCryptoStream() override;
76 // The packet processor.
77 QbonePacketProcessor processor_;
78
79 private:
80 // Config for QUIC crypto server stream, used by the server.
81 const QuicCryptoServerConfig* quic_crypto_server_config_;
82 // Used by QUIC crypto server stream to track most recently compressed certs.
83 QuicCompressedCertsCache* compressed_certs_cache_;
84 // This helper is needed when create QuicCryptoServerStream.
85 QboneCryptoServerStreamHelper stream_helper_;
86 // Passed to the control stream.
87 QboneServerControlStream::Handler* handler_;
88 // The unowned control stream.
89 QboneServerControlStream* control_stream_;
90};
91
92} // namespace quic
93
94#endif // QUICHE_QUIC_QBONE_QBONE_SERVER_SESSION_H_