summaryrefslogtreecommitdiffstats
path: root/remoting/base/protocol/chromotocol.proto
blob: e60716fe45774cb632a2f9eb8f6d0308ae438b28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// Copyright (c) 2010 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 communication between chromoting client and host.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package remoting;

// A message that gets sent to the client after the client is connected to the
// host. It contains information that the client needs to know about the host.
// NEXT ID: 3
message InitClientMessage {
  required int32 width = 1;
  required int32 height = 2;
}

// A message to denote the beginning of an update stream. It will be followed
// by 0 or more PartialUpdateStream messages and then a EndUpdateStream message.
// NEXT ID: 1
message BeginUpdateStreamMessage {
}

// A message to denote the end of an update stream.
// NEXT ID: 1
message EndUpdateStreamMessage {
}

// Identifies how the image was encoded.
enum UpdateStreamEncoding {
  EncodingNone = 0;
  EncodingZlib = 1;
}

// Identifies the pixel format.
// Note that this list should match exactly the same as
// media::VideoFrame::Format in media/base/video_frame.h.
enum PixelFormat {
  PixelFormatInvalid = 0;
  PixelFormatRgb555 = 1;
  PixelFormatRgb565 = 2;
  PixelFormatRgb24 = 3;
  PixelFormatRgb32 = 4;
  PixelFormatRgba = 5;
  PixelFormatYv12 = 6;
  PixelFormatYv16 = 7;
  PixelFormatEmpty = 8;
  PixelFormatAscii = 9;
}

// A message with info about the update stream.
// NEXT ID: 6
message UpdateStreamPacketHeader {
  // X,Y coordinates (in screen pixels) for origin of this update.
  required int32 x = 1;
  required int32 y = 2;

  // Width, height (in screen pixels) for this update.
  required int32 width = 3;
  required int32 height = 4;

  // The encoding used for this image update.
  optional UpdateStreamEncoding encoding = 5 [default=EncodingNone];

  // The pixel format of this image.
  optional PixelFormat pixel_format = 6 [default=PixelFormatRgb24];
}

// A message to denote a partial update stream.
// NEXT ID: 3
message UpdateStreamPacketMessage {
  // TODO(garykac): Make this required and fix unit tests.
  optional UpdateStreamPacketHeader header = 2;
  optional bytes data = 1;
}

// Defines the message that is sent from the host to the client.
// Only one of these messages should be present.
// NEXT ID: 5
message HostMessage {
  optional InitClientMessage init_client= 1;
  optional BeginUpdateStreamMessage begin_update_stream = 2;
  optional EndUpdateStreamMessage end_update_stream = 3;
  optional UpdateStreamPacketMessage update_stream_packet = 4;
}

// Defines a keyboard event.
// NEXT ID: 3
message KeyEvent {
  // The POSIX key code.
  required int32 key = 1;
  required bool pressed = 2;
}

// Sets the position of the mouse cursor.
// The coordinate value is between [0 .. 1] which is relative to the
// dimension of the screen area.
// NEXT ID: 3
message MouseSetPositionEvent {
  required float x = 1;
  required float y = 2;
}

// Adjust the position of the mouse cursor by an offset.
// NEXT ID: 3
message MouseMoveEvent {
  required int32 offset_x = 1;
  required int32 offset_y = 2;
}

// Motion of the mouse wheel.
// NEXT ID: 3
message MouseWheelEvent {
  required int32 offset_x = 1;
  required int32 offset_y = 2;
}

// Mouse button is pressed down.
// NEXT ID: 2
message MouseDownEvent {
  enum Button {
    LEFT = 0;
    MIDDLE = 1;
    RIGHT = 2;
  }
  required Button button = 1;
}

// Mouse button is released.
// NEXT ID: 2
message MouseUpEvent {
  enum Button {
    LEFT = 0;
    MIDDLE = 1;
    RIGHT = 2;
  }
  required Button button = 1;
}

// Defines the message that is sent from the client to the host.
// Only one of these messages should be present.
// NEXT ID: 7
message ClientMessage {
  optional KeyEvent key_event = 1;
  optional MouseSetPositionEvent mouse_set_position_event = 2;
  optional MouseMoveEvent mouse_move_event = 3;
  optional MouseWheelEvent mouse_wheel_event = 4;
  optional MouseDownEvent mouse_down_event = 5;
  optional MouseUpEvent mouse_up_event = 6;
}