blob: b8ef13cb8d81ec1f15c5a001c50aab7a2fb48556 [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_EUICC_H_
#define HERMES_EUICC_H_
#include <memory>
#include <string>
#include <vector>
#include <google-lpa/lpa/core/lpa.h>
#include <google-lpa/lpa/data/proto/profile_info.pb.h>
#include "hermes/adaptor_interfaces.h"
#include "hermes/context.h"
#include "hermes/euicc_slot_info.h"
#include "hermes/profile.h"
#include "hermes/result_callback.h"
namespace hermes {
class Euicc {
public:
Euicc(uint8_t physical_slot, EuiccSlotInfo slot_info);
Euicc(const Euicc&) = delete;
Euicc& operator=(const Euicc&) = delete;
void UpdateSlotInfo(EuiccSlotInfo slot_info);
void UpdateLogicalSlot(base::Optional<uint8_t> logical_slot);
// Install a profile. An empty activation code will cause the default profile
// to be installed.
void InstallProfileFromActivationCode(
const std::string& activation_code,
const std::string& confirmation_code,
ResultCallback<dbus::ObjectPath> result_callback);
void UninstallProfile(const dbus::ObjectPath& profile_path,
ResultCallback<> result_callback);
// Request the eUICC to provide all installed profiles.
void RequestInstalledProfiles(ResultCallback<> result_callback);
void InstallPendingProfile(const dbus::ObjectPath& profile_path,
const std::string& confirmation_code,
ResultCallback<dbus::ObjectPath> result_callback);
void RequestPendingProfiles(ResultCallback<> result_callback,
const std::string& root_smds);
uint8_t physical_slot() const { return physical_slot_; }
dbus::ObjectPath object_path() const { return dbus_adaptor_->object_path(); }
private:
void OnProfileInstalled(const lpa::proto::ProfileInfo& profile_info,
int error,
ResultCallback<dbus::ObjectPath> result_callback);
void OnProfileUninstalled(const dbus::ObjectPath& profile_path,
int error,
ResultCallback<> result_callback);
void UpdateInstalledProfilesProperty();
// Update |installed_profiles_| with all profiles installed on the eUICC.
void OnInstalledProfilesReceived(
const std::vector<lpa::proto::ProfileInfo>& profile_infos,
int error,
ResultCallback<> result_callback);
// Update |pending_profiles_| with all profiles installed on the SMDS.
void UpdatePendingProfilesProperty();
void OnPendingProfilesReceived(
const std::vector<lpa::proto::ProfileInfo>& profile_infos,
int error,
ResultCallback<> result_callback);
const uint8_t physical_slot_;
EuiccSlotInfo slot_info_;
Context* context_;
std::unique_ptr<EuiccAdaptorInterface> dbus_adaptor_;
std::vector<std::unique_ptr<Profile>> installed_profiles_;
std::vector<std::unique_ptr<Profile>> pending_profiles_;
};
} // namespace hermes
#endif // HERMES_EUICC_H_