| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef DLCSERVICE_UTILS_UTILS_H_ | |
| #define DLCSERVICE_UTILS_UTILS_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include <brillo/brillo_export.h> | |
| #include <base/files/file_path.h> | |
| #include <chromeos/constants/imageloader.h> | |
| #include <libimageloader/manifest.h> | |
| #include "dlcservice/metadata/metadata_interface.h" | |
| #include "dlcservice/types.h" | |
| #include "dlcservice/utils/utils_interface.h" | |
| namespace dlcservice { | |
| // DLC LVM related fields. | |
| BRILLO_EXPORT extern const char kDlcLogicalVolumePrefix[]; | |
| BRILLO_EXPORT extern const char kDlcLogicalVolumeSlotA[]; | |
| BRILLO_EXPORT extern const char kDlcLogicalVolumeSlotB[]; | |
| // DLC powerwash safe meta file. | |
| BRILLO_EXPORT extern const char kDlcPowerwashSafeFile[]; | |
| // Default DLC package name. | |
| BRILLO_EXPORT extern const char kPackage[]; | |
| // Default DLC manifest name. | |
| BRILLO_EXPORT extern const char kManifestName[]; | |
| // DLC cryptohome daemon-store path. | |
| BRILLO_EXPORT extern const char kDlcDaemonStorePath[]; | |
| // Redacted DLC package. | |
| BRILLO_EXPORT extern const char kDlcRedactedPackage[]; | |
| class BRILLO_EXPORT Utils : public UtilsInterface { | |
| public: | |
| Utils() = default; | |
| ~Utils() = default; | |
| Utils(const Utils&) = delete; | |
| Utils& operator=(const Utils&) = delete; | |
| // Overrides of `UtilsInterface`. | |
| std::string LogicalVolumeName(const std::string& id, | |
| PartitionSlot slot) override; | |
| std::string LogicalVolumeNameToId(const std::string& lv_name) override; | |
| bool HashFile(const base::FilePath& path, | |
| int64_t size, | |
| std::vector<uint8_t>* sha256, | |
| bool skip_size_check) override; | |
| std::shared_ptr<imageloader::Manifest> GetDlcManifest( | |
| const std::string& id, const base::FilePath& dlc_manifest_path) override; | |
| DlcIdList GetSupportedDlcIds(const base::FilePath& metadata_path) override; | |
| base::FilePath MakeAbsoluteFilePath(const base::FilePath& path) override; | |
| bool WaitForGid(const base::FilePath& target_path, int target_gid) override; | |
| private: | |
| bool InitializeDlcMetadata(const base::FilePath& path); | |
| std::shared_ptr<imageloader::Manifest> GetDlcManifestInternal( | |
| const std::string& id); | |
| std::shared_ptr<imageloader::Manifest> GetDlcManifestFallback( | |
| const base::FilePath& dlc_manifest_path, | |
| const std::string& id, | |
| const std::string& package); | |
| std::unique_ptr<metadata::MetadataInterface> metadata_; | |
| }; | |
| // Wrapper functions to ease transitions/usages. | |
| BRILLO_EXPORT std::string LogicalVolumeName( | |
| const std::string& id, | |
| PartitionSlot slot, | |
| std::unique_ptr<UtilsInterface> utils = std::make_unique<Utils>()); | |
| BRILLO_EXPORT bool HashFile( | |
| const base::FilePath& path, | |
| int64_t size, | |
| std::vector<uint8_t>* sha256, | |
| bool skip_size_check = false, | |
| std::unique_ptr<UtilsInterface> utils = std::make_unique<Utils>()); | |
| BRILLO_EXPORT std::shared_ptr<imageloader::Manifest> GetDlcManifest( | |
| const std::string& id, | |
| const base::FilePath& dlc_manifest_path, | |
| std::unique_ptr<UtilsInterface> utils = std::make_unique<Utils>()); | |
| } // namespace dlcservice | |
| #endif // DLCSERVICE_UTILS_UTILS_H_ |