// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Protocol for control messages.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package remoting.protocol;

message ClientResolution {
  // Width and height of the client in Density-Independent Pixels
  optional int32 dips_width = 1;
  optional int32 dips_height = 2;

  // Deprecated width and height of the client in device pixels.
  optional int32 width_deprecated = 3;
  optional int32 height_deprecated = 4;

  // Horizontal and vertical DPI of the screen. If either of these is zero or
  // unset, the corresponding DPI should be assumed to be 96 (Windows' default)
  optional int32 x_dpi = 5;
  optional int32 y_dpi = 6;
}

message VideoControl {
  // Enables the video channel if true, pauses if false.
  optional bool enable = 1;

  // Controls whether lossless encode and color translation are requested.
  optional bool lossless_encode = 2;
  optional bool lossless_color = 3;
}

message AudioControl {
  // Enables the audio channel if true, pauses if false.
  optional bool enable = 1;
}

message CursorShapeInfo {
  // Width, height (in screen pixels) of the cursor.
  optional int32 width = 1;
  optional int32 height = 2;

  // X,Y coordinates (relative to upper-left corner) of the cursor hotspot.
  optional int32 hotspot_x = 3;
  optional int32 hotspot_y = 4;

  // Cursor pixmap data in 32-bit BGRA format.
  optional bytes data = 5;
}

message Capabilities {
  // List of capabilities supported by the sender (case sensitive, capabilities
  // are separated by spaces).
  optional string capabilities = 1;
}

message PairingRequest {
  // Human-readable name of the client.
  optional string client_name = 1;
}

message PairingResponse {
  // Unique identifier for this client.
  optional string client_id = 1;

  // Shared secret for this client.
  optional string shared_secret = 2;
}

message ExtensionMessage {
  // The message type. This is used to dispatch the message to the correct
  // recipient.
  optional string type = 1;

  // String-encoded message data. The client and host must agree on the encoding
  // for each message type; different message types need not shared the same
  // encoding.
  optional string data = 2;
}

message VideoTrackLayout {
  // Name of the video track.
  optional string track_name = 1;

  // Position of the top left corner of the rectangle covered by the video
  // track in DIPs (device independent pixels).
  optional int32 position_x = 2;
  optional int32 position_y = 3;

  // Size of the area covered by the video track in DIPs.
  optional int32 width = 4;
  optional int32 height = 5;

  // DPI of the screen.
  optional int32 x_dpi = 6;
  optional int32 y_dpi = 7;
}

message VideoLayout {
  // Layout for each video track.
  repeated VideoTrackLayout video_track = 1;
}
