blob: 2dc8dad3a8a12c61997207f66746f3c2e85a6fd2 [file]
// 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_