summaryrefslogtreecommitdiffstats
path: root/remoting/base/protocol/chromotocol.proto
blob: 77bc9245e861c2fc7647cbd8ab870d5e45a8bf5b (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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
// 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 that denotes the beginning of an updating rectangle in an update
// stream packet.
// NEXT ID: 6
message UpdateStreamBeginRect {
  // 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 that contains partial data for updating an rectangle in an
// update stream packet.
// NEXT ID: 3
message UpdateStreamRectData {
  // The sequence number of the partial data for updating a rectangle.
  optional int32 sequence_number = 1 [default=0];

  // The partial data for updating a rectangle.
  required bytes data = 2;
}

// A message that denotes the end of an updating rectangle.
// NEXT ID: 1
message UpdateStreamEndRect {
}

// A message to denote a partial update stream.
// NEXT ID: 4
message UpdateStreamPacketMessage {
  optional UpdateStreamBeginRect begin_rect = 1;
  optional UpdateStreamRectData rect_data = 2;
  optional UpdateStreamEndRect end_rect = 3;
}

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