| // Copyright (c) 2019 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. | |
| #include "quiche/quic/test_tools/simple_session_cache.h" | |
| #include <memory> | |
| #include "quiche/quic/core/crypto/quic_crypto_client_config.h" | |
| namespace quic { | |
| namespace test { | |
| void SimpleSessionCache::Insert(const QuicServerId& server_id, | |
| bssl::UniquePtr<SSL_SESSION> session, | |
| const TransportParameters& params, | |
| const ApplicationState* application_state) { | |
| auto it = cache_entries_.find(server_id); | |
| if (it == cache_entries_.end()) { | |
| it = cache_entries_.insert(std::make_pair(server_id, Entry())).first; | |
| } | |
| if (session != nullptr) { | |
| it->second.session = std::move(session); | |
| } | |
| if (application_state != nullptr) { | |
| it->second.application_state = | |
| std::make_unique<ApplicationState>(*application_state); | |
| } | |
| it->second.params = std::make_unique<TransportParameters>(params); | |
| } | |
| std::unique_ptr<QuicResumptionState> SimpleSessionCache::Lookup( | |
| const QuicServerId& server_id, QuicWallTime /*now*/, | |
| const SSL_CTX* /*ctx*/) { | |
| auto it = cache_entries_.find(server_id); | |
| if (it == cache_entries_.end()) { | |
| return nullptr; | |
| } | |
| if (!it->second.session) { | |
| cache_entries_.erase(it); | |
| return nullptr; | |
| } | |
| auto state = std::make_unique<QuicResumptionState>(); | |
| state->tls_session = std::move(it->second.session); | |
| if (it->second.application_state != nullptr) { | |
| state->application_state = | |
| std::make_unique<ApplicationState>(*it->second.application_state); | |
| } | |
| state->transport_params = | |
| std::make_unique<TransportParameters>(*it->second.params); | |
| state->token = it->second.token; | |
| return state; | |
| } | |
| void SimpleSessionCache::ClearEarlyData(const QuicServerId& /*server_id*/) { | |
| // The simple session cache only stores 1 SSL ticket per entry, so no need to | |
| // do anything here. | |
| } | |
| void SimpleSessionCache::OnNewTokenReceived(const QuicServerId& server_id, | |
| absl::string_view token) { | |
| auto it = cache_entries_.find(server_id); | |
| if (it == cache_entries_.end()) { | |
| return; | |
| } | |
| it->second.token = std::string(token); | |
| } | |
| void SimpleSessionCache::RemoveExpiredEntries(QuicWallTime /*now*/) { | |
| // The simple session cache does not support removing expired entries. | |
| } | |
| void SimpleSessionCache::Clear() { cache_entries_.clear(); } | |
| } // namespace test | |
| } // namespace quic |