| // Copyright 2020 The Chromium OS 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 ATTESTATION_PCA_AGENT_SERVER_FAKE_TRANSPORT_FACTORY_H_ |
| #define ATTESTATION_PCA_AGENT_SERVER_FAKE_TRANSPORT_FACTORY_H_ |
| |
| #include "attestation/pca_agent/server/transport_factory.h" |
| |
| #include <memory> |
| #include <string> |
| #include <unordered_map> |
| |
| #include <brillo/http/http_transport_fake.h> |
| |
| namespace attestation { |
| namespace pca_agent { |
| |
| // This class implements the factory function by creating |
| // brillo::http::fake::Transport per proxy server. The consumer can gets the |
| // fake transport instance by the access function |get_fake_transport|. |
| class FakeTransportFactory : public TransportFactory { |
| public: |
| FakeTransportFactory() = default; |
| virtual ~FakeTransportFactory() = default; |
| std::shared_ptr<brillo::http::Transport> CreateWithProxy( |
| const std::string& proxy_server) override { |
| return std::static_pointer_cast<brillo::http::Transport>( |
| get_fake_transport(proxy_server)); |
| } |
| const std::shared_ptr<brillo::http::fake::Transport>& get_fake_transport( |
| const std::string& proxy_server) { |
| std::shared_ptr<brillo::http::fake::Transport>& transport = |
| table_[proxy_server]; |
| if (!transport) { |
| transport = std::make_shared<brillo::http::fake::Transport>(); |
| } |
| return transport; |
| } |
| |
| private: |
| // Maps the proxy server to fake transport. |
| std::unordered_map<std::string, |
| std::shared_ptr<brillo::http::fake::Transport>> |
| table_; |
| }; |
| |
| } // namespace pca_agent |
| } // namespace attestation |
| |
| #endif // ATTESTATION_PCA_AGENT_SERVER_FAKE_TRANSPORT_FACTORY_H_ |