// 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 {
  // Legacy width and height of the client in Density-Independent Pixels
  optional int32 dips_width = 1;
  optional int32 dips_height = 2;

  // Width and height of the client in device pixels.
  optional int32 width = 3;
  optional int32 height = 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;
}

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;
}