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