// 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 optimize_for = LITE_RUNTIME;

package arc_proxy;

// This file defines the protocol to communicate between the host and the guest.
// Some fields across messages has special convention as follows.
//
// handle: is an int64 ID corresponding to a file descriptor for each side.
//   Either side could create a handle, so to avoid conflicting, positive
//   value is used for a handle initially created in the host side, and
//   negative value is used for one initially created in the guest side.
//   0 is the special value, meaning INVALID.
//
// cookie: is an identifier to represent an operation flow. Some operations
//   need to work on both side alternatively. "cookie" should be created in
//   the side where the first message of the flow is created, and should be
//   kept in each message.
//   Similar to handle, to avoid conflict, positive value should be used for
//   a cookie initially created in the host side, and negative value should
//   for one initially created in the guest side.
// error_code: is a status code corresponding to "errno" of the operation.
//   Specifically, '0' means success.

// Single message to communicate between MojoProxy in the host and the guest.
message MojoMessage {
  oneof command {
    Close close = 1;
    Data data = 2;

    ConnectRequest connect_request = 3;
    ConnectResponse connect_response = 4;
    PreadRequest pread_request = 5;
    PreadResponse pread_response = 6;
    PwriteRequest pwrite_request = 7;
    PwriteResponse pwrite_response = 8;
    FstatRequest fstat_request = 9;
    FstatResponse fstat_response = 10;
  }
}

// Notify a file descriptor corresponding to the |handle| is closed to the
// other side, expecting the file descriptor in the other side will be closed.
message Close {
  int64 handle = 1;
}

// Represents a file descriptor to be transferred.
message FileDescriptor {
  enum Type {
    SOCKET_STREAM = 0;
    FIFO_READ = 1;
    FIFO_WRITE = 2;
    REGULAR_FILE = 3;
    TRANSPORTABLE = 4;  // FDs transportable via virtio-wl.
    SOCKET_DGRAM = 5;
    SOCKET_SEQPACKET = 6;
    // TODO(b/123432308): Support more file descriptor types.
  }
  Type type = 1;
  int64 handle = 2;

  reserved 3;  // uint64 file_size = 3 [deprecated=true];
  reserved 4;  // uint32 drm_virtgpu_res_handle = 4; [deprecated=true];

  int32 flags = 5;
}

// Notify the data is available on a stream (pipe or socket) corresponding to
// the |handle|.
message Data {
  int64 handle = 1;

  // Data to be transferred. This must not be empty.
  bytes blob = 2;

  // This is only available on the message for the socket.
  repeated FileDescriptor transferred_fd = 3;
}

// Request to connect(2) a unix domain socket in the other side.
message ConnectRequest {
  int64 cookie = 1;

  // Path to the target unix domain socket file.
  string path = 2;
}

// Response to the ConnectRequest.
message ConnectResponse {
  int64 cookie = 1;
  int32 error_code = 2;

  // Handle corresponding to the opened socket.
  int64 handle = 3;
}

// Request to pread(2) a file.
message PreadRequest {
  int64 cookie = 1;

  // Handle to read the data. Its type needs to be REGULAR_FILE.
  int64 handle = 2;

  // Number of bytes to read.
  uint64 count = 3;

  // The file position to read the data.
  uint64 offset = 4;
}

// Response to the PreadRequest.
message PreadResponse {
  int64 cookie = 1;
  int32 error_code = 2;

  // Read data.
  bytes blob = 3;
}

// Request to pwrite(2) a file.
message PwriteRequest {
  int64 cookie = 1;

  // Handle to write the data. Its type needs to be REGULAR_FILE.
  int64 handle = 2;

  // Data.
  bytes blob = 3;

  // The file position to write the data.
  uint64 offset = 4;
}

// Response to the PwriteRequest.
message PwriteResponse {
  int64 cookie = 1;
  int32 error_code = 2;
  int64 bytes_written = 3;
}

// Request to fstat(2) a file.
message FstatRequest {
  int64 cookie = 1;

  // Handle corresponding to the file descriptor to be fstat(2)ed.
  // The type of the handle should be REGULAR_FILE, now.
  int64 handle = 2;
}

// Response to the FstatRequest.
message FstatResponse {
  int64 cookie = 1;
  int32 error_code = 2;

  // The size of the file. To be compatible with off_t st_size
  // (in struct stat), the type is int64, rather than uint64.
  int64 size = 3;

  // Note: at the moment, |size| is the only information needed to implement
  // proxy, so in order to keep the message size as small as possible, no other
  // fields are added. They can be, upon necessary.
}
