From c52afaf8b5c96136fe20e5d5a1332121d3b09ee9 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Sat, 10 Sep 2022 12:15:20 -0400 Subject: Add gRPC API implementation Changes: - Rename the existing daemon to applaunchd-dbus, and add a new version that exposes a gRPC based implementation of the API based on the protobuf definition added in a top-level protos directory. Having both the D-Bus and gRPC APIs exposed by a single daemon was posing difficulties around startup dependencies stemming from D-Bus activation of the daemon. Since the end goal is dropping the D-Bus API entirely, it is easier to just add a second daemon for gRPC that will eventually be the only one present. - To facilitate building the two implementations, a significant amount of code refactoring has been done to move things from the D-Bus API implementing app_launcher.[ch] to systemd_manager.[ch] so the code can be reused. - All use of the systemd D-Bus library except for the path encoding helper function has been replaced with GDBus. The systemd interface wrapper code was generated with gdbus-codegen from XML files captured via introspection on a running system. The motivation for this change was to avoid multithreading issues with sd_bus exposed when calling into it from the gRPC threads. - The copyright headers in the source files have been tweaked to remove the Apache license boilerplate in favour of a SPDX license tag. Notes: - The gRPC API differs slightly from the D-Bus one in that it has a single status streaming RPC method as opposed to the separate signals for application started or terminated that the D-Bus API has. - The gRPC API is currently unauthenticated, the aim is to circle back and implement authentication once a consensus can be reached on what mechanism should be used (fixed JWT configuration, OAuth, etc.). Bug-AGL: SPEC-4559 Signed-off-by: Scott Murray Change-Id: I828f38a58b60e9959162b98054982124d4fa4380 --- protos/applauncher.proto | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 protos/applauncher.proto (limited to 'protos') diff --git a/protos/applauncher.proto b/protos/applauncher.proto new file mode 100644 index 0000000..0b8e0fc --- /dev/null +++ b/protos/applauncher.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; + +package automotivegradelinux; + +service AppLauncher { + rpc StartApplication(StartRequest) returns (StartResponse) {} + rpc ListApplications(ListRequest) returns (ListResponse) {} + rpc GetStatusEvents(StatusRequest) returns (stream StatusResponse) {} +} + +message StartRequest { + string id = 1; +} + +message StartResponse { + bool status = 1; + string message = 2; +} + +message ListRequest { +} + +message ListResponse { + repeated AppInfo apps = 1; +} + +message AppInfo { + string id = 1; + string name = 2; + string icon_path = 3; +} + +message StatusRequest { +} + +message AppStatus { + string id = 1; + string status = 2; +} + +// Future-proofing for e.g. potentially signaling a list refresh +message LauncherStatus { +} + +message StatusResponse { + oneof status { + AppStatus app = 1; + LauncherStatus launcher = 2; + } +} -- cgit 1.2.3-korg