| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be found |
| // in the LICENSE file. |
| |
| library fuchsia.pkg; |
| |
| using fuchsia.io; |
| using zx; |
| |
| /// Manages the system package cache. |
| /// |
| /// This interface is intended to be implemented by the package manager component and used by |
| /// package resolver components. |
| [Discoverable] |
| protocol PackageCache { |
| /// Gets the package directory if it is present on the local system. If it is not, the |
| /// |missing_blobs| iterator will provide all the blobs in the package that are missing from |
| /// the system, and the ability to write those blobs to blobfs. If all the missing blobs are |
| /// downloaded and written to by the client, the |dir| directory will be resolved. This method |
| /// will return |ZX_OK| when the package has been fully resolved, or an error if the client |
| /// closes |needed_blobs| or |dir| handle before the package has been resolved. |
| /// |
| /// Arguments: |
| /// * |meta_far_blob| is the blob info for the package's meta.far. |
| /// * |selectors| are the package selectors (TODO: link to docs). |
| /// * |needed_blobs| is an iterator over all the blobs in the package that |
| /// are not present on the system. |
| /// * |dir| is an optional request for a directory that will be resolved when the package has |
| /// been successfully cached. |
| /// |
| /// Return Values: |
| /// * |ZX_OK| if the package was successfully cached. |
| /// * |ZX_ERR_UNAVAILABLE| if the client closed |needed_blobs| or |dir| handles before the |
| /// all the missing blobs were downloaded to the system. |
| Get( |
| BlobInfo meta_far_blob, |
| vector<string> selectors, |
| request<NeededBlobs> needed_blobs, |
| request<fuchsia.io.Directory>? dir |
| ) -> (zx.status status); |
| |
| /// Opens the package, or error out if it is not present on the local system. |
| /// |
| /// Arguments: |
| /// * |meta_far_blob_id| is the blob id for the package's meta.far. |
| /// * |selectors| are the package selectors (TODO: link to docs). |
| /// * |dir| is a request for a directory that will be resolved when the package has been |
| /// successfully cached. |
| /// |
| /// Return Values: |
| /// * |ZX_OK| if the package was successfully opened. |
| /// * |ZX_ERR_NOT_FOUND| if the package does not exist. |
| Open( |
| BlobId meta_far_blob_id, |
| vector<string> selectors, |
| request<fuchsia.io.Directory> dir |
| ) -> (zx.status status); |
| }; |
| |
| /// The |NeededBlobs| is an abstract interface that is provided by a |PackageCache| to the |
| /// |PackageResolver| to fetch one or more blobs that are not present on the local system for a |
| /// given package. |
| protocol NeededBlobs { |
| /// Returns a vector of blobs that are not present on the system that must be downloaded and |
| /// written to blobfs with the |Open| method before a package can be resolved. This method |
| /// should continue to be called until it returns an empty vector. This signifies all the |
| /// missing blobs have been successfully downloaded. |
| GetMissingBlobs() -> (vector<BlobInfo> blobs); |
| |
| /// Open a blob for writing. |
| /// |
| /// Arguments: |
| /// * |blob_id| is the blob id describing this blob. |
| /// * |file| resolves to an opened writable file must be truncated to the correct size by the |
| /// caller. |
| /// |
| /// Return Values: |
| /// * |ZX_OK| if successful. |
| /// * |ZX_ERR_ACCESS_DENIED| if the package does not contain this blob. |
| /// * |ZX_ERR_IO| if there is some other unspecified error during I/O. |
| /// * |ZX_ERR_NO_SPACE| if there is no space available to store the package. |
| Open(BlobId blob_id, request<fuchsia.io.File> file) -> (zx.status status); |
| }; |