blob: 3a10b43319c60eddca4fe618437ebb0c11084e2d [file] [log] [blame]
// Copyright 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.
#ifndef QUICHE_QUIC_CORE_QUIC_DEFAULT_CONNECTION_HELPER_H_
#define QUICHE_QUIC_CORE_QUIC_DEFAULT_CONNECTION_HELPER_H_
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_connection.h"
#include "quiche/quic/core/quic_default_clock.h"
#include "quiche/common/simple_buffer_allocator.h"
namespace quic {
// A default implementation of QuicConnectionHelperInterface. Thread-safe.
class QUIC_EXPORT_PRIVATE QuicDefaultConnectionHelper
: public QuicConnectionHelperInterface {
public:
static QuicDefaultConnectionHelper* Get() {
static QuicDefaultConnectionHelper* helper =
new QuicDefaultConnectionHelper();
return helper;
}
// Creates a helper that uses the default allocator.
QuicDefaultConnectionHelper() : QuicDefaultConnectionHelper(nullptr) {}
// If |allocator| is nullptr, the default one is used.
QuicDefaultConnectionHelper(
std::unique_ptr<quiche::QuicheBufferAllocator> allocator)
: allocator_(std::move(allocator)) {}
QuicDefaultConnectionHelper(const QuicDefaultConnectionHelper&) = delete;
QuicDefaultConnectionHelper& operator=(const QuicDefaultConnectionHelper&) =
delete;
const QuicClock* GetClock() const override { return QuicDefaultClock::Get(); }
QuicRandom* GetRandomGenerator() override {
return QuicRandom::GetInstance();
}
quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override {
return allocator_ ? allocator_.get() : quiche::SimpleBufferAllocator::Get();
}
private:
std::unique_ptr<quiche::QuicheBufferAllocator> allocator_;
};
} // namespace quic
#endif // QUICHE_QUIC_CORE_QUIC_DEFAULT_CONNECTION_HELPER_H_