[amber] add API for opening TUF repos not configured as sources
Bug: PKG-631
Change-Id: Ie1f5253054d341f1da379cfcbdea5e7bc05f88db
diff --git a/garnet/go/src/amber/control_server/control_server.go b/garnet/go/src/amber/control_server/control_server.go
index 5174c66..9a43494 100644
--- a/garnet/go/src/amber/control_server/control_server.go
+++ b/garnet/go/src/amber/control_server/control_server.go
@@ -20,10 +20,13 @@
)
type ControlServer struct {
+ *amber.ControlTransitionalBase
daemon *daemon.Daemon
sysUpdate *sys_update.SystemUpdateMonitor
}
+var _ = amber.Control((*ControlServer)(nil))
+
type EventsImpl struct{}
var _ = amber.Events(EventsImpl{})
diff --git a/sdk/fidl/fuchsia.amber/BUILD.gn b/sdk/fidl/fuchsia.amber/BUILD.gn
index b1828d8..3a3d612 100644
--- a/sdk/fidl/fuchsia.amber/BUILD.gn
+++ b/sdk/fidl/fuchsia.amber/BUILD.gn
@@ -8,4 +8,7 @@
sources = [
"amber.fidl",
]
+ deps = [
+ "//sdk/fidl/fuchsia.pkg",
+ ]
}
diff --git a/sdk/fidl/fuchsia.amber/amber.fidl b/sdk/fidl/fuchsia.amber/amber.fidl
index 92da67a9..d0c0bd7 100644
--- a/sdk/fidl/fuchsia.amber/amber.fidl
+++ b/sdk/fidl/fuchsia.amber/amber.fidl
@@ -4,6 +4,7 @@
library fuchsia.amber;
+using fuchsia.pkg;
using zx;
struct OAuth2Config {
@@ -185,6 +186,16 @@
// Sent when a blob fails to write, causing one or more package installs to
// permanently fail.
PackagesFailed(vector<string> merkle, zx.status error, string blob_merkle);
+
+ // Opens a TUF repository specified by the provided RepositoryConfig.
+ // The repository will stay open for the life of the OpenedRepository
+ // channel.
+ //
+ // Packages in the opened repository can be accessed via
+ // OpenedRepository.GetUpdateComplete, but will not appear in calls to
+ // the global GetUpdateComplete, above.
+ [Transitional = "PKG-661"]
+ OpenRepository(fuchsia.pkg.RepositoryConfig config, request<OpenedRepository> repo) -> (zx.status result);
};
[Discoverable]
@@ -193,3 +204,20 @@
// storage.
-> OnOutOfSpace();
};
+
+protocol OpenedRepository {
+ // Get an update for the package identified by 'name' which has the
+ // provided variant. The package data is sent to PackageFS which then
+ // stores the package in BlobFS. This method provides a FetchResult that
+ // will send the ultimate results.
+ GetUpdateComplete(string name, string? variant, string? merkle, request<FetchResult> result);
+};
+
+// A protocol providing results for a OpenedRepository.GetUpdateComplete call.
+// Only one event will be sent before the channel is closed.
+protocol FetchResult {
+ // Sent when the package is successfully installed and available for use.
+ -> OnSuccess(string merkle);
+ // Sent when the package fails to install for some reason.
+ -> OnError(zx.status result, string message);
+};