| // Copyright 2026 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef QUICHE_QUIC_QBONE_TEST_TOOLS_QBONE_BASIC_QUIC_SERVER_HANDLER_H_ |
| #define QUICHE_QUIC_QBONE_TEST_TOOLS_QBONE_BASIC_QUIC_SERVER_HANDLER_H_ |
| |
| #include <cstddef> |
| |
| #include "absl/base/attributes.h" |
| #include "absl/base/nullability.h" |
| #include "absl/container/flat_hash_set.h" |
| #include "absl/status/status.h" |
| #include "absl/types/span.h" |
| #include "quiche/quic/core/quic_connection_id.h" |
| #include "quiche/quic/core/quic_stream_sequencer.h" |
| #include "quiche/quic/core/quic_types.h" |
| #include "quiche/quic/qbone/qbone_control.pb.h" |
| #include "quiche/quic/qbone/test_tools/basic_quic_server.h" |
| #include "quiche/common/platform/api/quiche_logging.h" |
| |
| namespace quic::test { |
| |
| class QboneBasicQuicServerHandler : public BasicQuicServer::Handler { |
| public: |
| QboneBasicQuicServerHandler( |
| BasicQuicServer* absl_nonnull server ABSL_ATTRIBUTE_LIFETIME_BOUND); |
| |
| ~QboneBasicQuicServerHandler() override = default; |
| |
| virtual void OnNewConnection(QuicConnectionId server_connection_id) {} |
| virtual void OnConnectionClosed(QuicConnectionId server_connection_id) {} |
| virtual void OnControlMessageReceived(QuicConnectionId server_connection_id, |
| const QboneServerRequest& request) = 0; |
| virtual void OnControlMessageParseError() { |
| QUICHE_CHECK(false) << "Invalid control message received."; |
| } |
| virtual void OnTunnelPacket(QuicConnectionId server_connection_id, |
| absl::Span<const std::byte> data) = 0; |
| |
| absl::Status SendControlMessage(QuicConnectionId server_connection_id, |
| const QboneClientRequest& request); |
| absl::Status SendTunnelPacket(QuicConnectionId server_connection_id, |
| absl::Span<const std::byte> data); |
| |
| // BasicQuicServer::Handler: |
| void OnSessionEnd(QuicConnectionId server_connection_id) override; |
| bool OnNewStream(QuicConnectionId server_connection_id, |
| QuicStreamId stream_id) override; |
| int OnStreamDataAvailable(QuicConnectionId server_connection_id, |
| QuicStreamId stream_id, |
| const QuicStreamSequencer& data_sequencer) override; |
| void OnDatagramReceived(QuicConnectionId server_connection_id, |
| absl::Span<const std::byte> data) override; |
| |
| private: |
| class SequencerReader; |
| |
| int ParseAndHandleSingleControlRequest(QuicConnectionId server_connection_id, |
| SequencerReader& reader); |
| |
| BasicQuicServer* absl_nonnull server_; |
| |
| // Connections registered on establishment of the control stream. |
| absl::flat_hash_set<QuicConnectionId> connections_; |
| }; |
| |
| } // namespace quic::test |
| |
| #endif // QUICHE_QUIC_QBONE_TEST_TOOLS_QBONE_BASIC_QUIC_SERVER_HANDLER_H_ |