LCOV - code coverage report
Current view: top level - source/common/quic - envoy_quic_dispatcher.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 5 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 1 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <string>
       4             : 
       5             : #include "envoy/network/listener.h"
       6             : 
       7             : #include "source/common/quic/envoy_quic_server_crypto_stream_factory.h"
       8             : #include "source/common/quic/envoy_quic_server_session.h"
       9             : #include "source/common/quic/quic_stat_names.h"
      10             : #include "source/server/listener_stats.h"
      11             : 
      12             : #include "quiche/quic/core/quic_dispatcher.h"
      13             : #include "quiche/quic/core/quic_utils.h"
      14             : 
      15             : namespace Envoy {
      16             : namespace Quic {
      17             : 
      18           0 : #define QUIC_DISPATCHER_STATS(COUNTER) COUNTER(stateless_reset_packets_sent)
      19             : 
      20             : struct QuicDispatcherStats {
      21             :   QUIC_DISPATCHER_STATS(GENERATE_COUNTER_STRUCT)
      22             : };
      23             : 
      24             : // Dummy implementation only used by Google Quic.
      25             : class EnvoyQuicCryptoServerStreamHelper : public quic::QuicCryptoServerStreamBase::Helper {
      26             : public:
      27             :   // quic::QuicCryptoServerStream::Helper
      28             :   bool CanAcceptClientHello(const quic::CryptoHandshakeMessage& /*message*/,
      29             :                             const quic::QuicSocketAddress& /*client_address*/,
      30             :                             const quic::QuicSocketAddress& /*peer_address*/,
      31             :                             const quic::QuicSocketAddress& /*self_address*/,
      32           0 :                             std::string* /*error_details*/) const override {
      33           0 :     IS_ENVOY_BUG("Unexpected call to CanAcceptClientHello");
      34           0 :     return false;
      35           0 :   }
      36             : };
      37             : 
      38             : class EnvoyQuicTimeWaitListManager : public quic::QuicTimeWaitListManager {
      39             : public:
      40             :   EnvoyQuicTimeWaitListManager(quic::QuicPacketWriter* writer, Visitor* visitor,
      41             :                                const quic::QuicClock* clock, quic::QuicAlarmFactory* alarm_factory,
      42             :                                QuicDispatcherStats& stats);
      43             : 
      44             :   void SendPublicReset(const quic::QuicSocketAddress& self_address,
      45             :                        const quic::QuicSocketAddress& peer_address,
      46             :                        quic::QuicConnectionId connection_id, bool ietf_quic,
      47             :                        size_t received_packet_length,
      48             :                        std::unique_ptr<quic::QuicPerPacketContext> packet_context) override;
      49             : 
      50             : private:
      51             :   QuicDispatcherStats& stats_;
      52             : };
      53             : 
      54             : class EnvoyQuicDispatcher : public quic::QuicDispatcher {
      55             : public:
      56             :   EnvoyQuicDispatcher(
      57             :       const quic::QuicCryptoServerConfig* crypto_config, const quic::QuicConfig& quic_config,
      58             :       quic::QuicVersionManager* version_manager,
      59             :       std::unique_ptr<quic::QuicConnectionHelperInterface> helper,
      60             :       std::unique_ptr<quic::QuicAlarmFactory> alarm_factory,
      61             :       uint8_t expected_server_connection_id_length, Network::ConnectionHandler& connection_handler,
      62             :       Network::ListenerConfig& listener_config, Server::ListenerStats& listener_stats,
      63             :       Server::PerHandlerListenerStats& per_worker_stats, Event::Dispatcher& dispatcher,
      64             :       Network::Socket& listen_socket, QuicStatNames& quic_stat_names,
      65             :       EnvoyQuicCryptoServerStreamFactoryInterface& crypto_server_stream_factory,
      66             :       quic::ConnectionIdGeneratorInterface& generator);
      67             : 
      68             :   // quic::QuicDispatcher
      69             :   void OnConnectionClosed(quic::QuicConnectionId connection_id, quic::QuicErrorCode error,
      70             :                           const std::string& error_details,
      71             :                           quic::ConnectionCloseSource source) override;
      72             :   quic::QuicTimeWaitListManager* CreateQuicTimeWaitListManager() override;
      73             : 
      74             :   void closeConnectionsWithFilterChain(const Network::FilterChain* filter_chain);
      75             : 
      76             :   void updateListenerConfig(Network::ListenerConfig& new_listener_config);
      77             : 
      78             :   // Similar to quic::QuicDispatcher's ProcessPacket, but returns a bool.
      79             :   // @return false if the packet failed to dispatch, true if it succeeded.
      80             :   bool processPacket(const quic::QuicSocketAddress& self_address,
      81             :                      const quic::QuicSocketAddress& peer_address,
      82             :                      const quic::QuicReceivedPacket& packet);
      83             : 
      84             : protected:
      85             :   // quic::QuicDispatcher
      86             :   std::unique_ptr<quic::QuicSession> CreateQuicSession(
      87             :       quic::QuicConnectionId server_connection_id, const quic::QuicSocketAddress& self_address,
      88             :       const quic::QuicSocketAddress& peer_address, absl::string_view alpn,
      89             :       const quic::ParsedQuicVersion& version, const quic::ParsedClientHello& parsed_chlo,
      90             :       quic::ConnectionIdGeneratorInterface& connection_id_generator) override;
      91             : 
      92             :   // quic::QuicDispatcher
      93             :   // Sets current_packet_dispatch_success_ to false for processPacket's return value,
      94             :   // then calls the parent class implementation.
      95             :   bool OnFailedToDispatchPacket(const quic::ReceivedPacketInfo& received_packet_info) override;
      96             : 
      97             : private:
      98             :   Network::ConnectionHandler& connection_handler_;
      99             :   Network::ListenerConfig* listener_config_{nullptr};
     100             :   Server::ListenerStats& listener_stats_;
     101             :   Server::PerHandlerListenerStats& per_worker_stats_;
     102             :   Event::Dispatcher& dispatcher_;
     103             :   Network::Socket& listen_socket_;
     104             :   QuicStatNames& quic_stat_names_;
     105             :   EnvoyQuicCryptoServerStreamFactoryInterface& crypto_server_stream_factory_;
     106             :   FilterChainToConnectionMap connections_by_filter_chain_;
     107             :   QuicDispatcherStats quic_stats_;
     108             :   QuicConnectionStats connection_stats_;
     109             :   bool current_packet_dispatch_success_;
     110             : };
     111             : 
     112             : } // namespace Quic
     113             : } // namespace Envoy

Generated by: LCOV version 1.15