| // Copyright 2018 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. |
| |
| syntax = "proto3"; |
| |
| option cc_enable_arenas = true; |
| |
| // This file defines services that will be running in the guest container that |
| // will be used by the host. |
| package vm_tools.container; |
| |
| // Request protobuf for launching an application in the container. |
| message LaunchApplicationRequest { |
| // Display scaling of the app windows. |
| enum DisplayScaling { |
| // Default scaling. |
| UNSCALED = 0; |
| // Windows scaled. Used to scale up older app windows that don't show well |
| // with HiDPI display otherwise. |
| SCALED = 1; |
| } |
| |
| // The ID of the application to launch. This should correspond to an |
| // identifier for a .desktop file available in the container. |
| string desktop_file_id = 1; |
| |
| // Files to pass as arguments when launching the application, if any, given |
| // as absolute paths within the container's filesystem. |
| repeated string files = 2; |
| |
| // Display scaling requested. |
| DisplayScaling display_scaling = 3; |
| } |
| |
| // Response protobuf for launching an application. |
| message LaunchApplicationResponse { |
| // If true, the requested application launched successfully. |
| bool success = 1; |
| |
| // The failure_reason if the requested application could not be started. |
| string failure_reason = 2; |
| } |
| |
| // Request proto for getting an application icon from the container. |
| message IconRequest { |
| // The IDs of the applications to get icons for. These should correspond to |
| // identifiers for .desktop files available in the container. |
| repeated string desktop_file_ids = 1; |
| |
| // The size of the icon is icon_size by icon_size. |
| int32 icon_size = 2; |
| |
| // The target scale of this icon. This is the scale at which this icon is |
| // designed to be used. |
| int32 scale = 3; |
| } |
| |
| // One desktop file ID and the icon found for it. |
| message DesktopIcon { |
| string desktop_file_id = 1; |
| |
| // Icon data in png format. |
| bytes icon = 2; |
| } |
| |
| // Response proto for getting an application icon. |
| message IconResponse { |
| repeated DesktopIcon desktop_icons = 1; |
| } |
| |
| // Request protobuf for launching a vshd instance. |
| message LaunchVshdRequest { |
| // The host port for vshd to connect to. |
| uint32 port = 1; |
| } |
| |
| // Response protobuf for launching a vshd instance. |
| message LaunchVshdResponse { |
| // If true, the vshd launched successfully. |
| bool success = 1; |
| |
| // The failure_reason if vshd could not be started. |
| string failure_reason = 2; |
| } |
| |
| // Request to get information about a Linux package in the container. |
| // Only one of |file_path| or |package_name| needs to be set. If |file_path| |
| // is set, this will get information about a Linux package file, if |
| // |package_name| is set, it will try to resolve |package_name| into a package |
| // id and get information about a Linux package with that id. If both |
| // |file_path| and |package_id| are set, |file_path| will take precedence and |
| // |package_id| will be unused. |
| message LinuxPackageInfoRequest { |
| // Path to the package file (e.g. .deb) in the container's filesystem. |
| string file_path = 1; |
| |
| // Name (not package_id) of package to look up. Used when |file_path| is |
| // empty. |
| string package_name = 2; |
| } |
| |
| // Response sent back from a GetLinuxPackageInfo call. |
| message LinuxPackageInfoResponse { |
| // True if the file was successfully parsed and the other fields are valid. |
| bool success = 1; |
| |
| // Contains a textual reason for the failure in case success is false. |
| string failure_reason = 2; |
| |
| // The package identifier is in the form of a semicolon delimited string of |
| // the format: name;version;arch;data |
| // name, version and arch are as expected. data is somewhat variant and refers |
| // to the state of the package as well as potentially remote repository |
| // information. |
| string package_id = 3; |
| |
| // The license associated with the package. So far only the value of |
| // 'unknown' has been observed for this field. |
| string license = 4; |
| |
| // The description of the package, can be a multi-line text string. |
| string description = 5; |
| |
| // The URL for the homepage of the project. |
| string project_url = 6; |
| |
| // Size of the package file in bytes. |
| uint64 size = 7; |
| |
| // Usually more of a title for a package, but sometimes less descriptive |
| // than that. |
| string summary = 8; |
| } |
| |
| // Request protobuf for installing a Linux package. |
| // Only one of |file_path| or |package_id| needs to be set. If |file_path| |
| // is set, this will try installing a Linux package file at that path, if |
| // |package_id| is set, this will try and install a Linux package with that |
| // |package_id|. If both |file_path| and |package_id| are set, |file_path| |
| // will take precedence and |package_id| will be unused. |
| message InstallLinuxPackageRequest { |
| // Path to the package file (e.g. .deb) in the container's filesystem. |
| string file_path = 1; |
| |
| // Package ID to install in the form "package_name;version;arch;data". Used |
| // when |file_path| is empty. |
| string package_id = 5; |
| |
| // Command identifier to track installation progress. |
| string command_uuid = 6; |
| } |
| |
| // Response sent back from a request to install a Linux package. |
| message InstallLinuxPackageResponse { |
| enum Status { |
| // Install process was successfully started, all further updates will be |
| // sent via the LinuxPackageProgress signal. |
| STARTED = 0; |
| |
| // Failed to startup for a general reason, specific details are given in |
| // failure_reason. |
| FAILED = 1; |
| |
| // Indicates another install (or other blocking operation) is already in |
| // process, this one will not be started. |
| INSTALL_ALREADY_ACTIVE = 2; |
| } |
| Status status = 1; |
| |
| // Contains a textual reason for the failure in case of a FAILED status. |
| string failure_reason = 2; |
| } |
| |
| // Request to uninstall the package that owns the given .desktop file. This is |
| // safer than uninstalling by package_id, since packages can get upgraded and |
| // we'd have a stale package_id. |
| message UninstallPackageOwningFileRequest { |
| // Uninstall the package owning this .desktop file: |
| string desktop_file_id = 1; |
| } |
| |
| // Response sent back from a request to uninstall a Linux package. |
| message UninstallPackageOwningFileResponse { |
| enum Status { |
| // Uninstall process was successfully started, all further updates will be |
| // sent via the UninstallPackageOwningFileProgress callbacks. |
| STARTED = 0; |
| |
| // Failed to startup for a general reason, specific details are given in |
| // failure_reason. |
| FAILED = 1; |
| |
| // Indicates another blocking operation (uninstall, install, etc) is already |
| // in progress, this one will not be started. |
| BLOCKING_OPERATION_IN_PROGRESS = 2; |
| } |
| Status status = 1; |
| |
| // Contains a textual reason for the failure in case of a FAILED status. |
| string failure_reason = 2; |
| } |
| |
| // Request for debug information about container state. |
| message GetDebugInformationRequest {} |
| |
| // Response for debug information about container state. |
| message GetDebugInformationResponse { |
| string debug_information = 1; |
| } |
| |
| message ConnectChunnelRequest { |
| uint32 chunneld_port = 1; |
| |
| uint32 target_tcp4_port = 2; |
| } |
| |
| message ConnectChunnelResponse { |
| // If true, chunnel launched successfully. |
| bool success = 1; |
| |
| // The failure_reason if chunnel could not be started. |
| string failure_reason = 2; |
| } |
| |
| // Request protobuf for applying Ansible playbook. |
| message ApplyAnsiblePlaybookRequest { |
| // Ansible playbook to be applied. |
| string playbook = 1; |
| } |
| |
| // Response sent back from a request to apply Ansible playbook. |
| message ApplyAnsiblePlaybookResponse { |
| enum Status { |
| UNKNOWN = 0; |
| |
| // Application process was successfully started, all further updates will be |
| // sent via the ApplyAnsiblePlaybookProgress signal. |
| STARTED = 1; |
| |
| // Failed to start up for a general reason, specific details are given in |
| // failure_reason. |
| FAILED = 2; |
| } |
| Status status = 1; |
| |
| // Contains a textual reason for the failure in case of a FAILED status. |
| string failure_reason = 2; |
| } |
| |
| // Request for the container to configure itself to allow sideloading android |
| // apps. |
| message ConfigureForArcSideloadRequest {} |
| |
| // Response from the sideloading configuration. |
| message ConfigureForArcSideloadResponse { |
| enum Status { |
| UNKNOWN = 0; |
| |
| SUCCEEDED = 2; |
| |
| FAILED = 3; |
| } |
| |
| // Status of the request. |
| Status status = 1; |
| |
| // If status is FAILED, contains the reason the request failed. |
| string failure_reason = 2; |
| } |
| |
| // Request to watch files and notify if there are changes. |
| message AddFileWatchRequest { |
| // Directory in container relative to $HOME to watch. |
| string path = 1; |
| } |
| |
| message AddFileWatchResponse { |
| enum Status { |
| // The current status is unknown. |
| UNKNOWN = 0; |
| |
| // Watch added successfully. |
| SUCCEEDED = 2; |
| |
| // Add watch failed. |
| FAILED = 1; |
| } |
| |
| // Add watch status. |
| Status status = 1; |
| |
| // The failure_reason if the watcher could not be added. |
| string failure_reason = 2; |
| } |
| |
| // Request to stop watching files. |
| message RemoveFileWatchRequest { |
| // Directory in container relative to $HOME to stop watching. |
| string path = 1; |
| } |
| |
| message RemoveFileWatchResponse { |
| enum Status { |
| // The current status is unknown. |
| UNKNOWN = 0; |
| |
| // Watch removed successfully. |
| SUCCEEDED = 2; |
| |
| // Remove watch failed. |
| FAILED = 1; |
| } |
| |
| // Remove watch status. |
| Status status = 1; |
| |
| // The failure_reason if the watcher could not be removed. |
| string failure_reason = 2; |
| } |
| |
| // Implemented by garcon inside of the container. |
| service Garcon { |
| // Called to launch an application in a container. |
| rpc LaunchApplication(LaunchApplicationRequest) |
| returns (LaunchApplicationResponse); |
| |
| // Get an application icon from the container. |
| rpc GetIcon(IconRequest) returns (IconResponse); |
| |
| // Launch a vshd instance that will connect back to the host. |
| rpc LaunchVshd(LaunchVshdRequest) returns (LaunchVshdResponse); |
| |
| // Gets information about a Linux package file in the container. |
| rpc GetLinuxPackageInfo(LinuxPackageInfoRequest) |
| returns (LinuxPackageInfoResponse); |
| |
| // Install a Linux package file in the container. |
| rpc InstallLinuxPackage(InstallLinuxPackageRequest) |
| returns (InstallLinuxPackageResponse); |
| |
| // Uninstalls the package that owns the specified file. Results are in |
| // signals. |
| rpc UninstallPackageOwningFile(UninstallPackageOwningFileRequest) |
| returns (UninstallPackageOwningFileResponse); |
| |
| // Get debug information about container state. |
| rpc GetDebugInformation(GetDebugInformationRequest) |
| returns (GetDebugInformationResponse); |
| |
| // Connects to chunnel to forward traffic to localhost. |
| rpc ConnectChunnel(ConnectChunnelRequest) returns (ConnectChunnelResponse); |
| |
| // Apply Ansible playbook to the container. |
| rpc ApplyAnsiblePlaybook(ApplyAnsiblePlaybookRequest) |
| returns (ApplyAnsiblePlaybookResponse); |
| |
| // Configure the container to allow sideloading android apps. |
| rpc ConfigureForArcSideload(ConfigureForArcSideloadRequest) |
| returns (ConfigureForArcSideloadResponse); |
| |
| // Watch files in the specified directory and notify if there are changes. |
| // This is used by FilesApp. |
| rpc AddFileWatch(AddFileWatchRequest) returns (AddFileWatchResponse); |
| |
| // Stop watching files in the specified directory. |
| rpc RemoveFileWatch(RemoveFileWatchRequest) returns (RemoveFileWatchResponse); |
| } |