xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/masque/masque_dispatcher.cc (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 #include "quiche/quic/masque/masque_dispatcher.h"
6 
7 #include <cstdint>
8 #include <memory>
9 #include <utility>
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_server_session.h"
26 #include "quiche/quic/masque/masque_utils.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 
MasqueDispatcher(MasqueMode masque_mode,const QuicConfig * config,const QuicCryptoServerConfig * crypto_config,QuicVersionManager * version_manager,QuicEventLoop * event_loop,std::unique_ptr<QuicConnectionHelperInterface> helper,std::unique_ptr<QuicCryptoServerStreamBase::Helper> session_helper,std::unique_ptr<QuicAlarmFactory> alarm_factory,MasqueServerBackend * masque_server_backend,uint8_t expected_server_connection_id_length,ConnectionIdGeneratorInterface & generator)32 MasqueDispatcher::MasqueDispatcher(
33     MasqueMode masque_mode, const QuicConfig* config,
34     const QuicCryptoServerConfig* crypto_config,
35     QuicVersionManager* version_manager, QuicEventLoop* event_loop,
36     std::unique_ptr<QuicConnectionHelperInterface> helper,
37     std::unique_ptr<QuicCryptoServerStreamBase::Helper> session_helper,
38     std::unique_ptr<QuicAlarmFactory> alarm_factory,
39     MasqueServerBackend* masque_server_backend,
40     uint8_t expected_server_connection_id_length,
41     ConnectionIdGeneratorInterface& generator)
42     : QuicSimpleDispatcher(config, crypto_config, version_manager,
43                            std::move(helper), std::move(session_helper),
44                            std::move(alarm_factory), masque_server_backend,
45                            expected_server_connection_id_length, generator),
46       masque_mode_(masque_mode),
47       event_loop_(event_loop),
48       masque_server_backend_(masque_server_backend) {}
49 
CreateQuicSession(QuicConnectionId connection_id,const QuicSocketAddress & self_address,const QuicSocketAddress & peer_address,absl::string_view,const ParsedQuicVersion & version,const ParsedClientHello &,ConnectionIdGeneratorInterface & connection_id_generator)50 std::unique_ptr<QuicSession> MasqueDispatcher::CreateQuicSession(
51     QuicConnectionId connection_id, const QuicSocketAddress& self_address,
52     const QuicSocketAddress& peer_address, absl::string_view /*alpn*/,
53     const ParsedQuicVersion& version, const ParsedClientHello& /*parsed_chlo*/,
54     ConnectionIdGeneratorInterface& connection_id_generator) {
55   // The MasqueServerSession takes ownership of |connection| below.
56   QuicConnection* connection = new QuicConnection(
57       connection_id, self_address, peer_address, helper(), alarm_factory(),
58       writer(),
59       /*owns_writer=*/false, Perspective::IS_SERVER,
60       ParsedQuicVersionVector{version}, connection_id_generator);
61 
62   auto session = std::make_unique<MasqueServerSession>(
63       masque_mode_, config(), GetSupportedVersions(), connection, this,
64       event_loop_, session_helper(), crypto_config(), compressed_certs_cache(),
65       masque_server_backend_);
66   session->Initialize();
67   return session;
68 }
69 
70 }  // namespace quic
71