| // 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_ |