1 /*
2  *  Copyright (c) 2018-present, Facebook, Inc.
3  *  All rights reserved.
4  *
5  *  This source code is licensed under the BSD-style license found in the
6  *  LICENSE file in the root directory of this source tree.
7  */
8 
9 #include <fizz/protocol/CertDecompressionManager.h>
10 
11 namespace fizz {
12 
CertDecompressionManager()13 CertDecompressionManager::CertDecompressionManager() {}
14 
CertDecompressionManager(std::vector<std::shared_ptr<CertificateDecompressor>> decompressors)15 CertDecompressionManager::CertDecompressionManager(
16     std::vector<std::shared_ptr<CertificateDecompressor>> decompressors) {
17   setDecompressors(std::move(decompressors));
18 }
19 
setDecompressors(std::vector<std::shared_ptr<CertificateDecompressor>> decompressors)20 void CertDecompressionManager::setDecompressors(
21     std::vector<std::shared_ptr<CertificateDecompressor>> decompressors) {
22   decompressors_.clear();
23   for (const auto& decompressor : decompressors) {
24     decompressors_[decompressor->getAlgorithm()] = decompressor;
25   }
26   supportedAlgos_.clear();
27   for (const auto& pair : decompressors_) {
28     supportedAlgos_.push_back(pair.first);
29   }
30 }
31 
32 std::vector<CertificateCompressionAlgorithm>
getSupportedAlgorithms() const33 CertDecompressionManager::getSupportedAlgorithms() const {
34   return supportedAlgos_;
35 }
36 
37 std::shared_ptr<CertificateDecompressor>
getDecompressor(CertificateCompressionAlgorithm algo) const38 CertDecompressionManager::getDecompressor(
39     CertificateCompressionAlgorithm algo) const {
40   try {
41     return decompressors_.at(algo);
42   } catch (const std::out_of_range&) {
43     VLOG(4) << "Requested unknown algorithm: " << toString(algo);
44     return nullptr;
45   }
46 }
47 
48 } // namespace fizz
49