2015-03-22 13:32:51 +00:00
|
|
|
// Derived from mcs.proto in chromium source code. Original license text below.
|
|
|
|
|
|
|
|
// Copyright 2013 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.
|
|
|
|
//
|
|
|
|
// MCS protocol for communication between Chrome client and Mobile Connection
|
|
|
|
// Server .
|
|
|
|
|
|
|
|
option java_package = "org.microg.gms.gcm.mcs";
|
|
|
|
|
|
|
|
/*
|
|
|
|
Common fields/comments:
|
|
|
|
|
|
|
|
stream_id: no longer sent by server, each side keeps a counter
|
|
|
|
last_stream_id_received: sent only if a packet was received since last time
|
|
|
|
a last_stream was sent
|
|
|
|
status: new bitmask including the 'idle' as bit 0.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
TAG: 0
|
|
|
|
*/
|
|
|
|
message HeartbeatPing {
|
|
|
|
optional int32 stream_id = 1;
|
|
|
|
optional int32 last_stream_id_received = 2;
|
|
|
|
optional int64 status = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
TAG: 1
|
|
|
|
*/
|
|
|
|
message HeartbeatAck {
|
|
|
|
optional int32 stream_id = 1;
|
|
|
|
optional int32 last_stream_id_received = 2;
|
|
|
|
optional int64 status = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message ErrorInfo {
|
|
|
|
required int32 code = 1;
|
|
|
|
optional string message = 2;
|
|
|
|
optional string type = 3;
|
|
|
|
optional Extension extension = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// MobileSettings class.
|
|
|
|
// "u:f", "u:b", "u:s" - multi user devices reporting foreground, background
|
|
|
|
// and stopped users.
|
|
|
|
// hbping: heatbeat ping interval
|
|
|
|
// rmq2v: include explicit stream IDs
|
|
|
|
|
|
|
|
message Setting {
|
|
|
|
required string name = 1;
|
|
|
|
required string value = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message HeartbeatStat {
|
|
|
|
required string ip = 1;
|
|
|
|
required bool timeout = 2;
|
|
|
|
required int32 interval_ms = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message HeartbeatConfig {
|
|
|
|
optional bool upload_stat = 1;
|
|
|
|
optional string ip = 2;
|
|
|
|
optional int32 interval_ms = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
TAG: 2
|
|
|
|
*/
|
|
|
|
message LoginRequest {
|
|
|
|
enum AuthService {
|
|
|
|
ANDROID_ID = 2;
|
|
|
|
}
|
|
|
|
required string id = 1; // Must be present ( proto required ), may be empty
|
|
|
|
// string.
|
|
|
|
// mcs.android.com.
|
|
|
|
required string domain = 2;
|
|
|
|
// Decimal android ID
|
|
|
|
required string user = 3;
|
|
|
|
|
|
|
|
required string resource = 4;
|
|
|
|
|
|
|
|
// Secret
|
|
|
|
required string auth_token = 5;
|
|
|
|
|
|
|
|
// Format is: android-HEX_DEVICE_ID
|
|
|
|
// The user is the decimal value.
|
|
|
|
optional string device_id = 6;
|
|
|
|
|
|
|
|
// RMQ1 - no longer used
|
|
|
|
optional int64 last_rmq_id = 7;
|
|
|
|
|
|
|
|
repeated Setting setting = 8;
|
2016-08-27 18:00:31 +00:00
|
|
|
optional int32 compress = 9;
|
2015-03-22 13:32:51 +00:00
|
|
|
repeated string received_persistent_id = 10;
|
|
|
|
|
|
|
|
// Replaced by "rmq2v" setting
|
2016-08-27 18:00:31 +00:00
|
|
|
optional bool include_stream_ids = 11;
|
2015-03-22 13:32:51 +00:00
|
|
|
|
|
|
|
optional bool adaptive_heartbeat = 12;
|
|
|
|
optional HeartbeatStat heartbeat_stat = 13;
|
|
|
|
// Must be true.
|
|
|
|
optional bool use_rmq2 = 14;
|
|
|
|
optional int64 account_id = 15;
|
|
|
|
|
|
|
|
// ANDROID_ID = 2
|
|
|
|
optional AuthService auth_service = 16;
|
|
|
|
|
|
|
|
optional int32 network_type = 17;
|
|
|
|
optional int64 status = 18;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TAG: 3
|
|
|
|
*/
|
|
|
|
message LoginResponse {
|
|
|
|
required string id = 1;
|
|
|
|
// Not used.
|
|
|
|
optional string jid = 2;
|
|
|
|
// Null if login was ok.
|
|
|
|
optional ErrorInfo error = 3;
|
|
|
|
repeated Setting setting = 4;
|
|
|
|
optional int32 stream_id = 5;
|
|
|
|
// Should be "1"
|
|
|
|
optional int32 last_stream_id_received = 6;
|
|
|
|
optional HeartbeatConfig heartbeat_config = 7;
|
|
|
|
// used by the client to synchronize with the server timestamp.
|
|
|
|
optional int64 server_timestamp = 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
message StreamErrorStanza {
|
|
|
|
required string type = 1;
|
|
|
|
optional string text = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TAG: 4
|
|
|
|
*/
|
|
|
|
message Close {
|
|
|
|
}
|
|
|
|
|
|
|
|
message Extension {
|
|
|
|
// 12: SelectiveAck
|
|
|
|
// 13: StreamAck
|
|
|
|
required int32 id = 1;
|
|
|
|
required bytes data = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TAG: 7
|
|
|
|
* IqRequest must contain a single extension. IqResponse may contain 0 or 1
|
|
|
|
* extensions.
|
|
|
|
*/
|
|
|
|
message IqStanza {
|
|
|
|
enum IqType {
|
|
|
|
GET = 0;
|
|
|
|
SET = 1;
|
|
|
|
RESULT = 2;
|
|
|
|
IQ_ERROR = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
optional int64 rmq_id = 1;
|
|
|
|
required IqType type = 2;
|
|
|
|
required string id = 3;
|
|
|
|
optional string from = 4;
|
|
|
|
optional string to = 5;
|
|
|
|
optional ErrorInfo error = 6;
|
|
|
|
|
|
|
|
// Only field used in the 38+ protocol (besides common last_stream_id_received, status, rmq_id)
|
|
|
|
optional Extension extension = 7;
|
|
|
|
|
|
|
|
optional string persistent_id = 8;
|
|
|
|
optional int32 stream_id = 9;
|
|
|
|
optional int32 last_stream_id_received = 10;
|
|
|
|
optional int64 account_id = 11;
|
|
|
|
optional int64 status = 12;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AppData {
|
|
|
|
required string key = 1;
|
|
|
|
required string value = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* TAG: 8
|
|
|
|
*/
|
|
|
|
message DataMessageStanza {
|
|
|
|
// Not used.
|
2016-08-27 18:00:31 +00:00
|
|
|
optional int64 rmq_id = 1;
|
2015-03-22 13:32:51 +00:00
|
|
|
|
|
|
|
// This is the message ID, set by client, DMP.9 (message_id)
|
|
|
|
optional string id = 2;
|
|
|
|
|
|
|
|
// Project ID of the sender, DMP.1
|
|
|
|
required string from = 3;
|
|
|
|
|
|
|
|
// Part of DMRequest - also the key in DataMessageProto.
|
|
|
|
optional string to = 4;
|
|
|
|
|
|
|
|
// Package name. DMP.2
|
|
|
|
required string category = 5;
|
|
|
|
|
|
|
|
// The collapsed key, DMP.3
|
|
|
|
optional string token = 6;
|
|
|
|
|
|
|
|
// User data + GOOGLE. prefixed special entries, DMP.4
|
|
|
|
repeated AppData app_data = 7;
|
|
|
|
|
|
|
|
// Not used.
|
|
|
|
optional bool from_trusted_server = 8;
|
|
|
|
|
|
|
|
// Part of the ACK protocol, returned in DataMessageResponse on server side.
|
|
|
|
// It's part of the key of DMP.
|
|
|
|
optional string persistent_id = 9;
|
|
|
|
|
|
|
|
// In-stream ack. Increments on each message sent - a bit redundant
|
|
|
|
// Not used in DMP/DMR.
|
|
|
|
optional int32 stream_id = 10;
|
|
|
|
optional int32 last_stream_id_received = 11;
|
|
|
|
|
|
|
|
// Not used.
|
2016-08-27 18:00:31 +00:00
|
|
|
optional string permission = 12;
|
2015-03-22 13:32:51 +00:00
|
|
|
|
|
|
|
// Sent by the device shortly after registration.
|
|
|
|
optional string reg_id = 13;
|
|
|
|
|
|
|
|
// Not used.
|
2016-08-27 18:00:31 +00:00
|
|
|
optional string pkg_signature = 14;
|
2015-03-22 13:32:51 +00:00
|
|
|
// Not used.
|
2016-08-27 18:00:31 +00:00
|
|
|
optional string client_id = 15;
|
2015-03-22 13:32:51 +00:00
|
|
|
|
|
|
|
// serial number of the target user, DMP.8
|
|
|
|
// It is the 'serial number' according to user manager.
|
|
|
|
optional int64 device_user_id = 16;
|
|
|
|
|
|
|
|
// Time to live, in seconds.
|
|
|
|
optional int32 ttl = 17;
|
|
|
|
// Timestamp ( according to client ) when message was sent by app, in seconds
|
|
|
|
optional int64 sent = 18;
|
|
|
|
|
|
|
|
// How long has the message been queued before the flush, in seconds.
|
|
|
|
// This is needed to account for the time difference between server and
|
|
|
|
// client: server should adjust 'sent' based on his 'receive' time.
|
|
|
|
optional int32 queued = 19;
|
|
|
|
|
|
|
|
optional int64 status = 20;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Included in IQ with ID 13, sent from client or server after 10 unconfirmed
|
|
|
|
messages.
|
|
|
|
*/
|
|
|
|
message StreamAck {
|
|
|
|
// No last_streamid_received required. This is included within an IqStanza,
|
|
|
|
// which includes the last_stream_id_received.
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Included in IQ sent after LoginResponse from server with ID 12.
|
|
|
|
*/
|
|
|
|
message SelectiveAck {
|
|
|
|
repeated string id = 1;
|
|
|
|
}
|