• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5// MCS protocol for communication between Chrome client and Mobile Connection
6// Server .
7
8syntax = "proto2";
9
10option optimize_for = LITE_RUNTIME;
11option retain_unknown_fields = true;
12
13package mcs_proto;
14
15/*
16   Common fields/comments:
17
18    stream_id: no longer sent by server, each side keeps a counter
19    last_stream_id_received: sent only if a packet was received since last time
20    a last_stream was sent
21    status: new bitmask including the 'idle' as bit 0.
22
23 */
24
25/**
26  TAG: 0
27  */
28message HeartbeatPing {
29  optional int32 stream_id = 1;
30  optional int32 last_stream_id_received = 2;
31  optional int64 status = 3;
32}
33
34/**
35  TAG: 1
36  */
37message HeartbeatAck {
38  optional int32 stream_id = 1;
39  optional int32 last_stream_id_received = 2;
40  optional int64 status = 3;
41}
42
43message ErrorInfo {
44  required int32 code = 1;
45  optional string message = 2;
46  optional string type = 3;
47  optional  Extension extension = 4;
48}
49
50// MobileSettings class.
51// "u:f", "u:b", "u:s" - multi user devices reporting foreground, background
52// and stopped users.
53// hbping: heatbeat ping interval
54// rmq2v: include explicit stream IDs
55
56message Setting {
57  required string name = 1;
58  required string value = 2;
59}
60
61message HeartbeatStat {
62  required string ip = 1;
63  required bool timeout = 2;
64  required int32 interval_ms = 3;
65}
66
67message HeartbeatConfig {
68  optional bool upload_stat = 1;
69  optional string ip = 2;
70  optional int32 interval_ms = 3;
71}
72
73/**
74  TAG: 2
75  */
76message LoginRequest {
77  enum AuthService {
78    ANDROID_ID = 2;
79  }
80  required string id = 1; // Must be present ( proto required ), may be empty
81                          // string.
82  // mcs.android.com.
83  required string domain = 2;
84  // Decimal android ID
85  required string user = 3;
86
87  required string resource = 4;
88
89  // Secret
90  required string auth_token = 5;
91
92  // Format is: android-HEX_DEVICE_ID
93  // The user is the decimal value.
94  optional string device_id = 6;
95
96  // RMQ1 - no longer used
97  optional int64 last_rmq_id = 7;
98
99  repeated Setting setting = 8;
100  //optional int32 compress = 9;
101  repeated string received_persistent_id = 10;
102
103  // Replaced by "rmq2v" setting
104  // optional bool include_stream_ids = 11;
105
106  optional bool adaptive_heartbeat = 12;
107  optional HeartbeatStat heartbeat_stat = 13;
108  // Must be true.
109  optional bool use_rmq2 = 14;
110  optional int64 account_id = 15;
111
112  // ANDROID_ID = 2
113  optional AuthService auth_service = 16;
114
115  optional int32 network_type = 17;
116  optional int64 status = 18;
117}
118
119/**
120  * TAG: 3
121  */
122message LoginResponse {
123  required string id = 1;
124  // Not used.
125  optional string jid = 2;
126  // Null if login was ok.
127  optional ErrorInfo error = 3;
128  repeated Setting setting = 4;
129  optional int32 stream_id = 5;
130  // Should be "1"
131  optional int32 last_stream_id_received = 6;
132  optional HeartbeatConfig heartbeat_config = 7;
133  // used by the client to synchronize with the server timestamp.
134  optional int64 server_timestamp = 8;
135}
136
137message StreamErrorStanza {
138  required string type = 1;
139  optional string text = 2;
140}
141
142/**
143  * TAG: 4
144  */
145message Close {
146}
147
148message Extension {
149  // 12: SelectiveAck
150  // 13: StreamAck
151  required int32 id = 1;
152  required bytes data = 2;
153}
154
155/**
156  * TAG: 7
157  * IqRequest must contain a single extension.  IqResponse may contain 0 or 1
158  * extensions.
159  */
160message IqStanza {
161  enum IqType {
162    GET = 0;
163    SET = 1;
164    RESULT = 2;
165    IQ_ERROR = 3;
166  }
167
168  optional int64 rmq_id = 1;
169  required IqType type = 2;
170  required string id = 3;
171  optional string from = 4;
172  optional string to = 5;
173  optional ErrorInfo error = 6;
174
175  // Only field used in the 38+ protocol (besides common last_stream_id_received, status, rmq_id)
176  optional Extension extension = 7;
177
178  optional string persistent_id = 8;
179  optional int32 stream_id = 9;
180  optional int32 last_stream_id_received = 10;
181  optional int64 account_id = 11;
182  optional int64 status = 12;
183}
184
185message AppData {
186  required string key = 1;
187  required string value = 2;
188}
189
190/**
191 * TAG: 8
192 */
193message DataMessageStanza {
194  // Not used.
195  // optional int64 rmq_id = 1;
196
197  // This is the message ID, set by client, DMP.9 (message_id)
198  optional string id = 2;
199
200  // Project ID of the sender, DMP.1
201  required string from = 3;
202
203  // Part of DMRequest - also the key in DataMessageProto.
204  optional string to = 4;
205
206  // Package name. DMP.2
207  required string category = 5;
208
209  // The collapsed key, DMP.3
210  optional string token = 6;
211
212  // User data + GOOGLE. prefixed special entries, DMP.4
213  repeated AppData app_data = 7;
214
215  // Not used.
216  optional bool from_trusted_server = 8;
217
218  // Part of the ACK protocol, returned in DataMessageResponse on server side.
219  // It's part of the key of DMP.
220  optional string persistent_id = 9;
221
222  // In-stream ack. Increments on each message sent - a bit redundant
223  // Not used in DMP/DMR.
224  optional int32 stream_id = 10;
225  optional int32 last_stream_id_received = 11;
226
227  // Not used.
228  // optional string permission = 12;
229
230  // Sent by the device shortly after registration.
231  optional string reg_id = 13;
232
233  // Not used.
234  // optional string pkg_signature = 14;
235  // Not used.
236  // optional string client_id = 15;
237
238  // serial number of the target user, DMP.8
239  // It is the 'serial number' according to user manager.
240  optional int64 device_user_id = 16;
241
242  // Time to live, in seconds.
243  optional int32 ttl = 17;
244  // Timestamp ( according to client ) when message was sent by app, in seconds
245  optional int64 sent = 18;
246
247  // How long has the message been queued before the flush, in seconds.
248  // This is needed to account for the time difference between server and
249  // client: server should adjust 'sent' based on his 'receive' time.
250  optional int32 queued = 19;
251
252  optional int64 status = 20;
253}
254
255/**
256  Included in IQ with ID 13, sent from client or server after 10 unconfirmed
257  messages.
258 */
259message StreamAck {
260  // No last_streamid_received required.  This is included within an IqStanza,
261  // which includes the last_stream_id_received.
262}
263
264/**
265  Included in IQ sent after LoginResponse from server with ID 12.
266*/
267message SelectiveAck {
268  repeated string id = 1;
269}
270