| // Copyright 2018 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 HERMES_SMDP_H_ |
| #define HERMES_SMDP_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include <brillo/http/http_request.h> |
| #include <brillo/http/http_transport.h> |
| #include <google-lpa/lpa/smdx/smdp_client.h> |
| #include <google-lpa/lpa/smdx/smdp_client_factory.h> |
| |
| #include "hermes/executor.h" |
| #include "hermes/logger.h" |
| |
| namespace hermes { |
| |
| class SmdpFactory : public lpa::smdp::SmdpClientFactory { |
| public: |
| SmdpFactory(Logger* logger, Executor* executor); |
| |
| std::unique_ptr<lpa::smdp::SmdpClient> NewSmdpClient( |
| std::string tls_certs_dir, |
| std::string smdp_addr, |
| const lpa::proto::EuiccSpecVersion& card_verison) override; |
| |
| private: |
| // Objects owned by the Daemon instance. |
| Logger* logger_; |
| Executor* executor_; |
| }; |
| |
| // Class to facilitate communication between the LPD and SM-DP+ |
| // server. Responsible for opening, maintaining, and closing an |
| // HTTPS connection with the SM-DP+ server. |
| class Smdp : public lpa::smdp::SmdpClient { |
| public: |
| using LpaCallback = |
| std::function<void(int code, std::string& http_resp, int err)>; |
| |
| Smdp(std::string server_addr, |
| const std::string& certs_dir, |
| Logger* logger, |
| Executor* executor); |
| |
| // lpa::smdp::SmdpClient override. |
| lpa::util::EuiccLog* logger() override; |
| |
| protected: |
| // lpa::smdp::SmdpClient overrides. |
| lpa::util::Executor* executor() override; |
| void SendHttps(const std::string& path, |
| const std::string& request, |
| LpaCallback cb) override; |
| |
| private: |
| void OnHttpsResponse(LpaCallback cb, |
| brillo::http::RequestID request_id, |
| std::unique_ptr<brillo::http::Response> response); |
| |
| void OnHttpsError(LpaCallback cb, |
| brillo::http::RequestID request_id, |
| const brillo::Error* error); |
| |
| std::shared_ptr<brillo::http::Transport> server_transport_; |
| |
| // Objects owned by the Daemon instance. |
| Logger* logger_; |
| Executor* executor_; |
| |
| base::WeakPtrFactory<Smdp> weak_factory_; |
| }; |
| |
| } // namespace hermes |
| |
| #endif // HERMES_SMDP_H_ |