1// server -> client
2message GG110LoginOK
3{
4	required int32 dummy1 = 1 [default = 1];
5	required string dummyhash = 2;
6	required uint32 uin = 3;
7	required fixed32 server_time = 4;
8}
9
10// server -> client
11message GG110Pong
12{
13	required fixed32 server_time = 1;
14}
15
16// client -> server
17message GG110Ack
18{
19	enum Type
20	{
21		MSG = 1;
22		CHAT = 2;
23		CHAT_INFO = 3;
24		MAGIC_NOTIFICATION = 5;
25		MPA = 6;
26		TRANSFER_INFO = 7;
27	}
28
29	required Type type = 1;
30	required uint32 seq = 2;
31	required uint32 dummy1 = 3 [default = 1];
32}
33
34// client -> server
35message GG105Login
36{
37	required string lang = 1;
38	required bytes uin = 2;
39	required bytes hash = 3;
40	required string client = 7;
41	required fixed32 initial_status = 8 [default = 0x2023]; // GG_STATUS_NOT_SET | USE_LAST_STATUS
42	required string initial_descr = 9 [default = ""];
43	required string supported_features = 11;
44
45	/**
46	 * GG11.2: 0x02
47	 * GG11.3: 0x04
48	 */
49	required int32 dummy1 = 4 [default = 4];
50
51	/* GG10.5: 0x0002e737
52	 * GG11.0: 0x01aeff77
53	 * GG11.2: 0x03eeff77
54	 */
55	required fixed32 dummy2 = 5 [default = 0x03eeff77];
56
57	/* privacy flag: 0x00000600
58	 * GG11.0:       0x00030014
59	 * GG10.5:       0x00000003
60	 */
61	required fixed32 dummy3 = 6 [default = 0x00030614];
62
63	required bytes dummy4 = 10; // 4x 0x00
64	required int32 dummy5 = 12 [default = 0xFF];
65	required int32 dummy6 = 13 [default = 100];
66	optional fixed32 dummy7 = 14 [default = 0x7F]; // GG11.0+
67	optional int32 dummy8 = 15 [default = 0]; // GG11.0+
68	//optional unknown_type dummy9 = 16;
69	optional uint32 dummy10 = 17 [default = 0]; // GG11.0+
70}
71
72// komponent GG110MessageAck
73message GG110MessageAckLink
74{
75	required fixed64 id = 1;
76	required string url = 2;
77}
78
79// server -> client
80message GG110MessageAck
81{
82	required uint32 msg_type = 1;
83	required uint32 seq = 2;
84	required fixed32 time = 3;
85	optional fixed64 msg_id = 4;
86	optional fixed64 conv_id = 5;
87	repeated GG110MessageAckLink links = 6;
88	required uint32 dummy1 = 7 [default = 0];
89}
90
91// server -> client
92message GG110Event
93{
94	enum Type
95	{
96		XML = 0;
97		JSON = 2;
98	}
99
100	required Type type = 1;
101	required uint32 seq = 2;
102	required string data = 3;
103	required string subtype = 4;
104	optional uint64 id = 5;
105}
106
107// server -> client
108message GG110RecvMessage
109{
110	optional bytes sender = 1; // nieobecne w GG_CHAT_RECV_OWN_MSG
111
112	/*       0x09: archiwalna wiadomość
113	 *     0x4040: odbierany obrazek
114	 * 0x00080008: GG w orange
115	 */
116	required uint32 flags = 2;
117
118	required uint32 seq = 3;
119	required fixed32 time = 4;
120	required string msg_plain = 5 [default = ""];
121	optional string msg_xhtml = 6;
122	optional bytes data = 7;
123	//optional unknown_type dummy1 = 8;
124	optional fixed64 msg_id = 9;
125	optional fixed64 chat_id = 10; // tylko w GG_CHAT_RECV_MSG i GG_CHAT_RECV_OWN_MSG
126	optional fixed64 conv_id = 11;
127}
128
129// client -> server
130// bardzo podobne do GG110RecvMessage
131message GG110SendMessage
132{
133	optional bytes recipient = 1;
134	required uint32 dummy1 = 2 [default = 0x08];
135	required uint32 seq = 3;
136	//optional unknown_type dummy2 = 4;
137	required string msg_plain = 5;
138	required string msg_xhtml = 6;
139	optional string dummy3 = 7 [default = ""]; // tylko, gdy chat_id jest ustawiony
140	//optional uknown_type dummy4 = 8;
141	//optional uknown_type dummy5 = 9;
142	optional fixed64 chat_id = 10;
143}
144
145// server -> client
146message GG110Imtoken
147{
148	required string imtoken = 1;
149}
150
151// server -> client
152message GG110ChatInfoUpdate
153{
154	required bytes participant = 1;
155	required bytes inviter = 2;
156	required fixed32 update_type = 3;
157	required fixed32 time = 4;
158	required fixed32 dummy1 = 5;
159	required uint32 version = 6;
160	required uint32 dummy2 = 7;
161	//optional unknown_type dummy3 = 8;
162	required fixed64 msg_id = 9;
163	required fixed64 chat_id = 10;
164	required fixed64 conv_id = 11;
165}
166
167message ProtobufKVP
168{
169	required string key = 1;
170	required string value = 2;
171}
172
173/* aol_enabled: zawsze 1
174 * expires_at: 0 lub data (z przeszłości?) powiązana z kontem
175 * state: 1 (jeżeli expires_at=0) lub 2
176 * subnet: zawsze 1
177 */
178// server -> client
179message GG110Options
180{
181	repeated ProtobufKVP options = 1;
182	required uint32 dummy1 = 2 [default = 0];
183}
184
185// server -> client
186message GG110AccessInfo
187{
188	required uint32 dummy1 = 1 [default = 1];
189	required uint32 dummy2 = 2; // 1 - stare numery, 2 - nowsze
190	required uint32 last_message = 3;
191	required uint32 last_file_transfer = 4;
192	required uint32 last_conference_ch = 5;
193}
194
195// komponent GG112TransferInfo
196message GG112TransferInfoUin
197{
198	required uint32 dummy1 = 1 [default = 1];
199	required bytes uin = 2;
200}
201
202// komponent GG112TransferInfo
203message GG112TransferInfoFile
204{
205	required string type = 1 [default = "other"]; // other, image
206	required string url = 2; // drive://...
207	// nieznane pola: 3-5
208	required string content_type = 6;
209	required string filename = 7;
210	required uint32 filesize = 8;
211	required fixed64 msg_id = 1001;
212}
213
214/* tablica data:
215 *  contentType
216 *  deliveryStatus = delivered
217 *  fileName
218 *  fileSize
219 *  fileUrl
220 */
221// server -> client
222message GG112TransferInfo
223{
224	required uint32 dummy1 = 1; // 6 for file transfers; 5 for missed video call info
225	required GG112TransferInfoUin peer = 2; // osoba, z którą się wymieniamy plikiem
226	required GG112TransferInfoUin sender = 4; // nadawca (my, albo peer)
227	required fixed32 time = 3;
228	repeated ProtobufKVP data = 5;
229	optional GG112TransferInfoFile file = 6; // only for dummy1 = 6
230	required uint32 seq = 7;
231	required fixed64 msg_id = 1001;
232	required fixed64 conv_id = 1002;
233}
234
235// server -> client
236message GG110MagicNotification
237{
238	required int32 dummy1 = 1 [default = 2];
239	required int32 seq = 2;
240	required int32 dummy2 = 3 [default = 1];
241	required int32 dummy3 = 4 [default = 1];
242	required bytes uin = 5;
243	required string dummy4 = 6 [default = ""];
244}
245