// Copyright (c) 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// A Connection ID generator that generates deterministic connection IDs for
// QUIC servers.

#ifndef QUICHE_QUIC_CORE_CONNECTION_ID_GENERATOR_DETERMINISTIC_H_
#define QUICHE_QUIC_CORE_CONNECTION_ID_GENERATOR_DETERMINISTIC_H_

#include "quiche/quic/core/connection_id_generator.h"

namespace quic {

// Generates connection IDs deterministically from the provided original
// connection ID.
class QUICHE_EXPORT DeterministicConnectionIdGenerator
    : public ConnectionIdGeneratorInterface {
 public:
  DeterministicConnectionIdGenerator(uint8_t expected_connection_id_length);

  // Hashes |original| to create a new connection ID.
  std::optional<QuicConnectionId> GenerateNextConnectionId(
      const QuicConnectionId& original) override;
  // Replace the connection ID if and only if |original| is not of the expected
  // length.
  std::optional<QuicConnectionId> MaybeReplaceConnectionId(
      const QuicConnectionId& original,
      const ParsedQuicVersion& version) override;
  uint8_t ConnectionIdLength(uint8_t /*first_byte*/) const override {
    return expected_connection_id_length_;
  }

 private:
  const uint8_t expected_connection_id_length_;
};

}  // namespace quic

#endif  // QUICHE_QUIC_CORE__CONNECTION_ID_GENERATOR_DETERMINISTIC_H_
