xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/masque/masque_dispatcher.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 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_MASQUE_MASQUE_DISPATCHER_H_
6 #define QUICHE_QUIC_MASQUE_MASQUE_DISPATCHER_H_
7 
8 #include <cstdint>
9 #include <memory>
10 
11 #include "absl/strings/string_view.h"
12 #include "quiche/quic/core/connection_id_generator.h"
13 #include "quiche/quic/core/crypto/quic_crypto_server_config.h"
14 #include "quiche/quic/core/io/quic_event_loop.h"
15 #include "quiche/quic/core/quic_alarm_factory.h"
16 #include "quiche/quic/core/quic_config.h"
17 #include "quiche/quic/core/quic_connection.h"
18 #include "quiche/quic/core/quic_connection_id.h"
19 #include "quiche/quic/core/quic_crypto_server_stream_base.h"
20 #include "quiche/quic/core/quic_session.h"
21 #include "quiche/quic/core/quic_types.h"
22 #include "quiche/quic/core/quic_version_manager.h"
23 #include "quiche/quic/core/quic_versions.h"
24 #include "quiche/quic/masque/masque_server_backend.h"
25 #include "quiche/quic/masque/masque_utils.h"
26 #include "quiche/quic/platform/api/quic_export.h"
27 #include "quiche/quic/platform/api/quic_socket_address.h"
28 #include "quiche/quic/tools/quic_simple_dispatcher.h"
29 
30 namespace quic {
31 
32 // QUIC dispatcher that handles new MASQUE connections and can proxy traffic
33 // between MASQUE clients and QUIC servers.
34 class QUIC_NO_EXPORT MasqueDispatcher : public QuicSimpleDispatcher {
35  public:
36   explicit MasqueDispatcher(
37       MasqueMode masque_mode, const QuicConfig* config,
38       const QuicCryptoServerConfig* crypto_config,
39       QuicVersionManager* version_manager, QuicEventLoop* event_loop,
40       std::unique_ptr<QuicConnectionHelperInterface> helper,
41       std::unique_ptr<QuicCryptoServerStreamBase::Helper> session_helper,
42       std::unique_ptr<QuicAlarmFactory> alarm_factory,
43       MasqueServerBackend* masque_server_backend,
44       uint8_t expected_server_connection_id_length,
45       ConnectionIdGeneratorInterface& generator);
46 
47   // Disallow copy and assign.
48   MasqueDispatcher(const MasqueDispatcher&) = delete;
49   MasqueDispatcher& operator=(const MasqueDispatcher&) = delete;
50 
51   // From QuicSimpleDispatcher.
52   std::unique_ptr<QuicSession> CreateQuicSession(
53       QuicConnectionId connection_id, const QuicSocketAddress& self_address,
54       const QuicSocketAddress& peer_address, absl::string_view alpn,
55       const ParsedQuicVersion& version,
56       const quic::ParsedClientHello& parsed_chlo,
57       quic::ConnectionIdGeneratorInterface& connection_id_generator) override;
58 
59  private:
60   MasqueMode masque_mode_;
61   QuicEventLoop* event_loop_;                   // Unowned.
62   MasqueServerBackend* masque_server_backend_;  // Unowned.
63 };
64 
65 }  // namespace quic
66 
67 #endif  // QUICHE_QUIC_MASQUE_MASQUE_DISPATCHER_H_
68