blob: 2db732bc7dd39e79a348e185ed0d529b4e6adec4 [file] [log] [blame]
// 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 HERMES_MANAGER_H_
#define HERMES_MANAGER_H_
#include <map>
#include <memory>
#include <string>
#include <tuple>
#include <vector>
#include <google-lpa/lpa/core/lpa.h>
#include <google-lpa/lpa/data/proto/profile_info.pb.h>
#include "hermes/dbus_bindings/org.chromium.Hermes.Manager.h"
#include "hermes/profile.h"
namespace hermes {
class Manager : public org::chromium::Hermes::ManagerInterface,
public org::chromium::Hermes::ManagerAdaptor {
public:
using ByteArray = std::vector<uint8_t>;
// (SM-DP+ Address, EventId) representing an Event received from a SM-DS.
using Event = std::tuple<std::string, std::string>;
template <typename... T>
using DBusResponse = brillo::dbus_utils::DBusMethodResponse<T...>;
Manager(const scoped_refptr<dbus::Bus>& bus, LpaContext* context);
// org::chromium::Hermes::ManagerInterface overrides.
// Install a profile. An empty activation code will cause the default profile
// to be installed.
void InstallProfileFromActivationCode(
std::unique_ptr<DBusResponse<dbus::ObjectPath>> response,
const std::string& in_activation_code) override;
void InstallProfileFromEvent(
std::unique_ptr<DBusResponse<dbus::ObjectPath>> response,
const std::string& in_smdp_address,
const std::string& in_event_id) override;
void UninstallProfile(std::unique_ptr<DBusResponse<>> response,
const dbus::ObjectPath& in_profile) override;
void RequestPendingEvents(
std::unique_ptr<DBusResponse<std::vector<Event>>> response) override;
// Set/unset test mode. Normally, only production profiles may be
// downloaded. In test mode, only test profiles may be downloaded.
void SetTestMode(bool in_is_test_mode) override;
private:
void UpdateProfilesProperty();
// Update |profiles_| with all profiles installed on the eUICC.
void RetrieveInstalledProfiles();
const scoped_refptr<dbus::Bus>& bus_;
brillo::dbus_utils::DBusObject dbus_object_;
LpaContext* context_;
std::vector<std::unique_ptr<Profile>> profiles_;
DISALLOW_COPY_AND_ASSIGN(Manager);
};
} // namespace hermes
#endif // HERMES_MANAGER_H_