summaryrefslogtreecommitdiff
path: root/protocols/IcqOscarJ/src/icq_constants.h
blob: d4ef7d72ac14d46af1a3afefe9fff0e51d070cc4 (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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
// ---------------------------------------------------------------------------80
//                ICQ plugin for Miranda Instant Messenger
//                ________________________________________
//
// Copyright © 2000-2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
// Copyright © 2001-2002 Jon Keating, Richard Hughes
// Copyright © 2002-2004 Martin Öberg, Sam Kothari, Robert Rainwater
// Copyright © 2004-2010 Joe Kucera
// Copyright © 2012-2014 Miranda NG Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
// -----------------------------------------------------------------------------
//  DESCRIPTION:
//
//  Global constants and default settings are defined here
// -----------------------------------------------------------------------------
// Most of the protocol constants follow the naming conventions of the
// Oscar documentation at http://iserverd.khstu.ru/oscar/index.html
// BIG THANKS to Alexandr for maintaining this site and to everyone
// in the ICQ devel community who have helped to collect the data.

#ifndef __ICQ_CONSTANTS_H
#define __ICQ_CONSTANTS_H

/* Static icon indexes */
#define ISI_AUTH_REQUEST            0
#define ISI_AUTH_GRANT              1
#define ISI_AUTH_REVOKE             2
#define ISI_ADD_TO_SERVLIST         3

/* Contact menu item indexes */
#define ICMI_AUTH_REQUEST           0
#define ICMI_AUTH_GRANT             1
#define ICMI_AUTH_REVOKE            2
#define ICMI_ADD_TO_SERVLIST        3
#define ICMI_XSTATUS_DETAILS        4
#define ICMI_OPEN_PROFILE           5

/* Some default settings */
#define DEFAULT_SERVER_PORT         5190
#define DEFAULT_SERVER_PORT_SSL     443
#define DEFAULT_SERVER_HOST         "login.icq.com"
#define DEFAULT_SERVER_HOST_SSL     "slogin.icq.com"
#define DEFAULT_SS_ENABLED          1
#define DEFAULT_SS_ADDSERVER        1
#define DEFAULT_SS_LOAD             0
#define DEFAULT_SS_STORE            1
#define DEFAULT_SS_GROUP            "General"

#define DEFAULT_SECURE_LOGIN        1
#define DEFAULT_SECURE_CONNECTION   1
#define DEFAULT_LEGACY_FIX          0
#define DEFAULT_KEEPALIVE_ENABLED   1
#define DEFAULT_AIM_ENABLED         1
#define DEFAULT_UTF_ENABLED         2 // everything unicode is default
#define DEFAULT_ANSI_CODEPAGE       CP_ACP
#define DEFAULT_DCMSG_ENABLED       1 // passive dc messaging is default
#define DEFAULT_TEMPVIS_ENABLED     1 // temporary visible is enabled by default
#define DEFAULT_MTN_ENABLED         1
#define DEFAULT_AVATARS_ENABLED     1
#define DEFAULT_LOAD_AVATARS        1
#define DEFAULT_BIGGER_AVATARS      0
#define DEFAULT_AVATARS_CHECK       1
#define DEFAULT_XSTATUS_ENABLED     1
#define DEFAULT_XSTATUS_AUTO        1
#define DEFAULT_XSTATUS_RESET       0
#define DEFAULT_MOODS_ENABLED       1
#define DEFAULT_KILLSPAM_ENABLED    1

#define DEFAULT_SLOWSEND            1

#define DEFAULT_POPUPS_ENABLED      1
#define DEFAULT_SPAM_POPUPS_ENABLED 1
#define DEFAULT_LOG_POPUPS_ENABLED  1
#define DEFAULT_POPUPS_SYS_ICONS    1
#define DEFAULT_LOG0_TEXT_COLORS    RGB(0,0,0)  // LOG_NOTE
#define DEFAULT_LOG0_BACK_COLORS    RGB(255,255,255)
#define DEFAULT_LOG0_TIMEOUT        0
#define DEFAULT_LOG1_TEXT_COLORS    RGB(0,0,0)  // LOG_WARNING
#define DEFAULT_LOG1_BACK_COLORS    RGB(255,255,255)
#define DEFAULT_LOG1_TIMEOUT        0
#define DEFAULT_LOG2_TEXT_COLORS    RGB(0,0,0)  // LOG_ERROR
#define DEFAULT_LOG2_BACK_COLORS    RGB(255,255,255)
#define DEFAULT_LOG2_TIMEOUT        0
#define DEFAULT_LOG3_TEXT_COLORS    RGB(0,0,0)  // LOG_FATAL
#define DEFAULT_LOG3_BACK_COLORS    RGB(255,255,255)
#define DEFAULT_LOG3_TIMEOUT        0
#define DEFAULT_SPAM_TEXT_COLORS    RGB(193,0,38)
#define DEFAULT_SPAM_BACK_COLORS    RGB(213,209,208)
#define DEFAULT_SPAM_TIMEOUT        0
#define DEFAULT_POPUPS_WIN_COLORS   0
#define DEFAULT_POPUPS_DEF_COLORS   (BYTE)!DEFAULT_POPUPS_WIN_COLORS

/* Database setting names */
#define DBSETTING_CAPABILITIES      "caps"
// Contact's server-list items
#define DBSETTING_SERVLIST_ID       "ServerId"
#define DBSETTING_SERVLIST_GROUP    "SrvGroupId"
#define DBSETTING_SERVLIST_PERMIT   "SrvPermitId"
#define DBSETTING_SERVLIST_DENY     "SrvDenyId"
#define DBSETTING_SERVLIST_IGNORE   "SrvIgnoreId"
// Owner's server-list items
#define DBSETTING_SERVLIST_PRIVACY  "SrvVisibilityID"
#define DBSETTING_SERVLIST_PHOTO    "SrvPhotoID"
#define DBSETTING_SERVLIST_AVATAR   "SrvAvatarID"
#define DBSETTING_SERVLIST_METAINFO "SrvMetaInfoID"
#define DBSETTING_SERVLIST_UNHANDLED "SrvUnhandledIDList"
// Contact's data from server-list
#define DBSETTING_SERVLIST_DATA     "ServerData"
// User Details
#define DBSETTING_METAINFO_TOKEN    "MetaInfoToken"
#define DBSETTING_METAINFO_TIME     "MetaInfoTime"
#define DBSETTING_METAINFO_SAVED    "InfoTS"
// Status Note & Mood
#define DBSETTING_STATUS_NOTE       "StatusNote"
#define DBSETTING_STATUS_NOTE_TIME  "StatusNoteTS"
#define DBSETTING_STATUS_MOOD       "StatusMood"
// Custom Status
#define DBSETTING_XSTATUS_ID        "XStatusId"
#define DBSETTING_XSTATUS_NAME      "XStatusName"
#define DBSETTING_XSTATUS_MSG       "XStatusMsg"


// Status FLAGS (used to determine status of other users)
#define ICQ_STATUSF_ONLINE          0x0000
#define ICQ_STATUSF_AWAY            0x0001
#define ICQ_STATUSF_DND             0x0002
#define ICQ_STATUSF_NA              0x0004
#define ICQ_STATUSF_OCCUPIED        0x0010
#define ICQ_STATUSF_FFC             0x0020
#define ICQ_STATUSF_INVISIBLE       0x0100

// Status values (used to set own status)
#define ICQ_STATUS_ONLINE           0x0000
#define ICQ_STATUS_AWAY             0x0001
#define ICQ_STATUS_NA               0x0005
#define ICQ_STATUS_OCCUPIED         0x0011
#define ICQ_STATUS_DND              0x0013
#define ICQ_STATUS_FFC              0x0020
#define ICQ_STATUS_INVISIBLE        0x0100

#define STATUS_WEBAWARE             0x0001 // Status webaware flag
#define STATUS_SHOWIP               0x0002 // Status show ip flag
#define STATUS_BIRTHDAY             0x0008 // User birthday flag
#define STATUS_WEBFRONT             0x0020 // User active webfront flag
#define STATUS_DCDISABLED           0x0100 // Direct connection not supported
#define STATUS_DCAUTH               0x1000 // Direct connection upon authorization
#define STATUS_DCCONT               0x2000 // DC only with contact users



// Typing notification statuses
#define MTN_FINISHED                0x0000
#define MTN_TYPED                   0x0001
#define MTN_BEGUN                   0x0002
#define MTN_WINDOW_CLOSED           0x000F



// Ascii Capability IDs
#define CAP_RTFMSGS                 "{97B12751-243C-4334-AD22-D6ABF73F1492}"
#define CAP_UTF8MSGS                "{0946134E-4C7F-11D1-8222-444553540000}"

// Binary Capability Sizes
#define BINARY_CAP_SIZE             16
#define BINARY_SHORT_CAP_SIZE       2

// Binary Capability IDs
#define CAP_SRV_RELAY               0x09, 0x46, 0x13, 0x49, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
#define CAP_UTF                     0x09, 0x46, 0x13, 0x4e, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
#define CAP_RTF                     0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34, 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x92
#define CAP_CONTACTS                0x09, 0x46, 0x13, 0x4b, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
#define CAP_TYPING                  0x56, 0x3f, 0xc8, 0x09, 0x0b, 0x6f, 0x41, 0xbd, 0x9f, 0x79, 0x42, 0x26, 0x09, 0xdf, 0xa2, 0xf3
#define CAP_ICQDIRECT               0x09, 0x46, 0x13, 0x44, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
#define CAP_XTRAZ                   0x1A, 0x09, 0x3C, 0x6C, 0xD7, 0xFD, 0x4E, 0xC5, 0x9D, 0x51, 0xA6, 0x47, 0x4E, 0x34, 0xF5, 0xA0
#define CAP_OSCAR_FILE              0x09, 0x46, 0x13, 0x43, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00

// Miranda IM Capability bitmask
#define CAPF_SRV_RELAY              0x00000001
#define CAPF_UTF                    0x00000002
#define CAPF_RTF                    0x00000004
#define CAPF_CONTACTS               0x00000010
#define CAPF_TYPING                 0x00000020
#define CAPF_ICQDIRECT              0x00000080
#define CAPF_XTRAZ                  0x00000100
#define CAPF_OSCAR_FILE             0x00000400
#define CAPF_STATUS_MESSAGES        0x10000000
#define CAPF_STATUS_MOOD            0x40000000
#define CAPF_XSTATUS                0x80000000


// Message Capability IDs
#define MCAP_SRV_RELAY_FMT_s        0x09461349, 0x4c7f11d1, 0x82224445, 0x53540000
#define MCAP_REVERSE_DC_REQ_s       0x09461344, 0x4c7f11d1, 0x82224445, 0x53540000
#define MCAP_FILE_TRANSFER_s        0x09461343, 0x4c7f11d1, 0x82224445, 0x53540000
#define MCAP_CONTACTS_s             0x0946134b, 0x4c7f11d1, 0x82224445, 0x53540000

// Plugin Type GUIDs
#define PSIG_MESSAGE_s              0x00000000, 0x00000000, 0x00000000, 0x00000000
#define PSIG_INFO_PLUGIN_s          0xa0e93f37, 0x4fe9d311, 0xbcd20004, 0xac96dd96
#define PSIG_STATUS_PLUGIN_s        0x10cf40d1, 0x4fe9d311, 0xbcd20004, 0xac96dd96

// Plugin Message GUIDs
#define PMSG_QUERY_INFO_s           0xF002BF71, 0x4371D311, 0x8DD20010, 0x4B06462E
#define PMSG_QUERY_STATUS_s         0x10180670, 0x5471D311, 0x8DD20010, 0x4B06462E



// Message types
#define MTYPE_PLAIN                 0x01 // Plain text (simple) message
#define MTYPE_CHAT                  0x02 // Chat request message
#define MTYPE_FILEREQ               0x03 // File request / file ok message
#define MTYPE_URL                   0x04 // URL message (0xFE formatted)
#define MTYPE_AUTHREQ               0x06 // Authorization request message (0xFE formatted)
#define MTYPE_AUTHDENY              0x07 // Authorization denied message (0xFE formatted)
#define MTYPE_AUTHOK                0x08 // Authorization given message (empty)
#define MTYPE_SERVER                0x09 // Message from OSCAR server (0xFE formatted)
#define MTYPE_ADDED                 0x0C // "You-were-added" message (0xFE formatted)
#define MTYPE_WWP                   0x0D // Web pager message (0xFE formatted)
#define MTYPE_EEXPRESS              0x0E // Email express message (0xFE formatted)
#define MTYPE_CONTACTS              0x13 // Contact list message
#define MTYPE_PLUGIN                0x1A // Plugin message described by text string
#define MTYPE_AUTOONLINE            0xE7 // Auto online message (internal only)
#define MTYPE_AUTOAWAY              0xE8 // Auto away message
#define MTYPE_AUTOBUSY              0xE9 // Auto occupied message
#define MTYPE_AUTONA                0xEA // Auto not available message
#define MTYPE_AUTODND               0xEB // Auto do not disturb message
#define MTYPE_AUTOFFC               0xEC // Auto free for chat message
// Internal Message types
#define MTYPE_UNKNOWN               0x00 // Unknown message

#define MTYPE_GREETINGCARD          0x101 // Greeting Card
#define MTYPE_REQUESTCONTACTS       0x102 // Request for Contacts
#define MTYPE_MESSAGE               0x103 // Message+
#define MTYPE_STATUSMSGEXT          0x104 // StatusMsgExt (2003b)
#define MTYPE_SMS_MESSAGE           0x110 // SMS message from Mobile
#define MTYPE_SCRIPT_INVITATION     0x201 // Xtraz Invitation
#define MTYPE_SCRIPT_DATA           0x202 // Xtraz Message
#define MTYPE_SCRIPT_NOTIFY         0x208 // Xtraz Response
#define MTYPE_REVERSE_REQUEST       0x401 // Reverse DC request

// Message Plugin Type GUIDs
#define MGTYPE_MESSAGE_s            0xBE6B7305, 0x0FC2104F, 0xA6DE4DB1, 0xE3564B0E
#define MGTYPE_STATUSMSGEXT_s       0x811a18bc, 0x0e6c1847, 0xa5916f18, 0xdcc76f1a
#define MGTYPE_FILE_s               0xF02D12D9, 0x3091D311, 0x8DD70010, 0x4B06462E
#define MGTYPE_WEBURL_s             0x371C5872, 0xE987D411, 0xA4C100D0, 0xB759B1D9
#define MGTYPE_CONTACTS_s           0x2A0E7D46, 0x7676D411, 0xBCE60004, 0xAC961EA6
#define MGTYPE_GREETING_CARD_s      0x01E53B48, 0x2AE4D111, 0xB6790060, 0x97E1E294
#define MGTYPE_CHAT_s               0xBFF720B2, 0x378ED411, 0xBD280004, 0xAC96D905
#define MGTYPE_SMS_MESSAGE_s        0x0e28f600, 0x11e7d311, 0xbcf30004, 0xac969dc2
#define MGTYPE_XTRAZ_SCRIPT_s       0x3b60b3ef, 0xd82a6c45, 0xa4e09c5a, 0x5e67e865

// Message Plugin Sub-Type IDs
#define MGTYPE_STANDARD_SEND        0x0000
#define MGTYPE_CONTACTS_REQUEST     0x0002
#define MGTYPE_SCRIPT_INVITATION    0x0001
#define MGTYPE_SCRIPT_DATA          0x0002
#define MGTYPE_SCRIPT_USER_REMOVE   0x0004
#define MGTYPE_SCRIPT_NOTIFY        0x0008
#define MGTYPE_UNDEFINED            0xFFFF



/* Channels */
#define ICQ_LOGIN_CHAN              0x01
#define ICQ_DATA_CHAN               0x02
#define ICQ_ERROR_CHAN              0x03
#define ICQ_CLOSE_CHAN              0x04
#define ICQ_PING_CHAN               0x05

/* Families */
#define ICQ_SERVICE_FAMILY          0x0001
#define ICQ_LOCATION_FAMILY         0x0002
#define ICQ_BUDDY_FAMILY            0x0003
#define ICQ_MSG_FAMILY              0x0004
#define ICQ_BOS_FAMILY              0x0009
#define ICQ_LOOKUP_FAMILY           0x000a
#define ICQ_STATS_FAMILY            0x000b
#define ICQ_CHAT_NAVIGATION_FAMILY  0x000d
#define ICQ_CHAT_FAMILY             0x000e
#define ICQ_AVATAR_FAMILY           0x0010
#define ICQ_LISTS_FAMILY            0x0013
#define ICQ_EXTENSIONS_FAMILY       0x0015
#define ICQ_AUTHORIZATION_FAMILY    0x0017
#define ICQ_DIRECTORY_FAMILY        0x0025

/* Subtypes for Service Family 0x0001 */
#define ICQ_ERROR                   0x0001
#define ICQ_CLIENT_READY            0x0002
#define ICQ_SERVER_READY            0x0003
#define ICQ_CLIENT_NEW_SERVICE      0x0004
#define ICQ_SERVER_REDIRECT_SERVICE 0x0005
#define ICQ_CLIENT_REQ_RATE_INFO    0x0006
#define ICQ_SERVER_RATE_INFO        0x0007
#define ICQ_CLIENT_RATE_ACK         0x0008
#define ICQ_SERVER_RATE_CHANGE      0x000a
#define ICQ_SERVER_PAUSE            0x000b
#define ICQ_CLIENT_PAUSE_ACK        0x000c
#define ICQ_SERVER_RESUME           0x000d
#define ICQ_CLIENT_REQINFO          0x000e
#define ICQ_SERVER_NAME_INFO        0x000f
#define ICQ_SERVER_EVIL_NOTICE      0x0010
#define ICQ_CLIENT_SET_IDLE         0x0011
#define ICQ_SERVER_MIGRATIONREQ     0x0012
#define ICQ_SERVER_MOTD             0x0013
#define ICQ_CLIENT_FAMILIES         0x0017
#define ICQ_SERVER_FAMILIES2        0x0018
#define ICQ_CLIENT_SET_STATUS       0x001e
#define ICQ_SERVER_EXTSTATUS        0x0021

/* Subtypes for Location Family 0x0002 */
#define ICQ_LOCATION_CLI_REQ_RIGHTS 0x0002
#define ICQ_LOCATION_RIGHTS_REPLY   0x0003
#define ICQ_LOCATION_SET_USER_INFO  0x0004
#define ICQ_LOCATION_REQ_USER_INFO  0x0005
#define ICQ_LOCATION_USR_INFO_REPLY 0x0006
#define ICQ_LOCATION_QRY_USER_INFO  0x0015

/* Subtypes for Buddy Family 0x0003 */
#define ICQ_USER_CLI_REQBUDDY       0x0002
#define ICQ_USER_SRV_REPLYBUDDY     0x0003
#define ICQ_USER_ADDTOLIST          0x0004  /* deprecated */
#define ICQ_USER_REMOVEFROMLIST     0x0005  /* deprecated */
#define ICQ_USER_NOTIFY_REJECTED    0x000a
#define ICQ_USER_ONLINE             0x000b
#define ICQ_USER_OFFLINE            0x000c
#define ICQ_USER_ADDTOTEMPLIST      0x000f
#define ICQ_USER_REMOVEFROMTEMPLIST 0x0010

/* Subtypes for Message Family 0x0004 */
#define ICQ_MSG_SRV_ERROR           0x0001
#define ICQ_MSG_CLI_SETPARAMS       0x0002
#define ICQ_MSG_CLI_RESETPARAMS     0x0003
#define ICQ_MSG_CLI_REQICBM         0x0004
#define ICQ_MSG_SRV_REPLYICBM       0x0005
#define ICQ_MSG_SRV_SEND            0x0006
#define ICQ_MSG_SRV_RECV            0x0007
#define ICQ_MSG_SRV_MISSED_MESSAGE  0x000A
#define ICQ_MSG_RESPONSE            0x000B
#define ICQ_MSG_SRV_ACK             0x000C
#define ICQ_MSG_CLI_REQ_OFFLINE     0x0010
#define ICQ_MSG_MTN                 0x0014
#define ICQ_MSG_SRV_OFFLINE_REPLY   0x0017

/* Subtypes for Privacy Family 0x0009 */
#define ICQ_PRIVACY_REQ_RIGHTS      0x0002
#define ICQ_PRIVACY_RIGHTS_REPLY    0x0003
#define ICQ_CLI_ADDVISIBLE          0x0005
#define ICQ_CLI_REMOVEVISIBLE       0x0006
#define ICQ_CLI_ADDINVISIBLE        0x0007
#define ICQ_CLI_REMOVEINVISIBLE     0x0008
#define ICQ_PRIVACY_SERVICE_ERROR   0x0009
#define ICQ_CLI_ADDTEMPVISIBLE      0x000A
#define ICQ_CLI_REMOVETEMPVISIBLE   0x000B

/* Subtypes for Lookup Family 0x000a */
#define ICQ_LOOKUP_REQUEST          0x0002
#define ICQ_LOOKUP_EMAIL_REPLY      0x0003

/* Subtypes for Stats Family 0x000b */
#define ICQ_STATS_MINREPORTINTERVAL 0x0002

/* Subtypes for Avatar Family 0x0010 */
#define ICQ_AVATAR_ERROR            0x0001
#define ICQ_AVATAR_UPLOAD_REQUEST   0x0002
#define ICQ_AVATAR_UPLOAD_ACK       0x0003
#define ICQ_AVATAR_GET_REQUEST      0x0006
#define ICQ_AVATAR_GET_REPLY        0x0007

/* Subtypes for Server Lists Family 0x0013 */
#define ICQ_LISTS_ERROR             0x0001
#define ICQ_LISTS_CLI_REQLISTS      0x0002
#define ICQ_LISTS_SRV_REPLYLISTS    0x0003
#define ICQ_LISTS_CLI_REQUEST       0x0004
#define ICQ_LISTS_CLI_CHECK         0x0005
#define ICQ_LISTS_LIST              0x0006
#define ICQ_LISTS_GOTLIST           0x0007
#define ICQ_LISTS_ADDTOLIST         0x0008
#define ICQ_LISTS_UPDATEGROUP       0x0009
#define ICQ_LISTS_REMOVEFROMLIST    0x000A
#define ICQ_LISTS_ACK               0x000E
#define ICQ_LISTS_UPTODATE          0x000F
#define ICQ_LISTS_CLI_MODIFYSTART   0x0011
#define ICQ_LISTS_CLI_MODIFYEND     0x0012
#define ICQ_LISTS_GRANTAUTH         0x0014
#define ICQ_LISTS_AUTHGRANTED       0x0015
#define ICQ_LISTS_REVOKEAUTH        0x0016
#define ICQ_LISTS_REQUESTAUTH       0x0018
#define ICQ_LISTS_AUTHREQUEST       0x0019
#define ICQ_LISTS_CLI_AUTHRESPONSE  0x001A
#define ICQ_LISTS_SRV_AUTHRESPONSE  0x001B
#define ICQ_LISTS_YOUWEREADDED      0x001C

/* Subtypes for ICQ Extensions Family 0x0015 */
#define ICQ_META_ERROR              0x0001
#define ICQ_META_CLI_REQUEST        0x0002
#define ICQ_META_SRV_REPLY          0x0003
#define ICQ_META_SRV_UPDATE         0x0004

/* Subtypes for Authorization Family 0x0017 */
#define ICQ_SIGNON_ERROR            0x0001
#define ICQ_SIGNON_LOGIN_REQUEST    0x0002
#define ICQ_SIGNON_LOGIN_REPLY      0x0003
#define ICQ_SIGNON_REGISTRATION_REQ 0x0004
#define ICQ_SIGNON_NEW_UIN          0x0005
#define ICQ_SIGNON_AUTH_REQUEST     0x0006
#define ICQ_SIGNON_AUTH_KEY         0x0007
#define ICQ_SIGNON_REQUEST_IMAGE    0x000C
#define ICQ_SIGNON_REG_AUTH_IMAGE   0x000D

// Class constants
#define CLASS_UNCONFIRMED           0x0001
#define CLASS_ADMINISTRATOR         0x0002
#define CLASS_AOL                   0x0004
#define CLASS_COMMERCIAL            0x0008
#define CLASS_FREE                  0x0010
#define CLASS_AWAY                  0x0020
#define CLASS_ICQ                   0x0040
#define CLASS_WIRELESS              0x0080
#define CLASS_FORWARDING            0x0200
#define CLASS_BOT                   0x0400

// Reply types for SNAC 15/02 & 15/03
#define CLI_DELETE_OFFLINE_MSGS_REQ 0x003E
#define CLI_META_INFO_REQ           0x07D0
#define SRV_META_INFO_REPLY         0x07DA

// Reply subtypes for SNAC 15/02 & 15/03
#define META_PROCESSING_ERROR       0x0001 // Meta processing error server reply
#define META_SMS_DELIVERY_RECEIPT   0x0096 // Server SMS response (delivery receipt)
#define META_SET_PASSWORD_ACK       0x00AA // Set user password server ack
#define META_UNREGISTER_ACK         0x00B4 // Unregister account server ack
#define META_BASIC_USERINFO         0x00C8 // User basic info reply
#define META_WORK_USERINFO          0x00D2 // User work info reply
#define META_MORE_USERINFO          0x00DC // User more info reply
#define META_NOTES_USERINFO         0x00E6 // User notes (about) info reply
#define META_EMAIL_USERINFO         0x00EB // User extended email info reply
#define META_INTERESTS_USERINFO     0x00F0 // User interests info reply
#define META_AFFILATIONS_USERINFO   0x00FA // User past/affilations info reply
#define META_SHORT_USERINFO         0x0104 // Short user information reply
#define META_HPAGECAT_USERINFO      0x010E // User homepage category information reply
#define SRV_USER_FOUND              0x01A4 // Search: user found reply
#define SRV_LAST_USER_FOUND         0x01AE // Search: last user found reply
#define META_REGISTRATION_STATS_ACK 0x0302 // Registration stats ack
#define SRV_RANDOM_FOUND            0x0366 // Random search server reply
#define META_SET_PASSWORD_REQ       0x042E // Set user password request
#define META_REQUEST_FULL_INFO      0x04B2 // Request full user info
#define META_REQUEST_SHORT_INFO     0x04BA // Request short user info
#define META_REQUEST_SELF_INFO      0x04D0 // Request full self user info
#define META_SEARCH_GENERIC         0x055F // Search user by details (TLV)
#define META_SEARCH_UIN             0x0569 // Search user by UIN (TLV)
#define META_SEARCH_EMAIL           0x0573 // Search user by E-mail (TLV)
#define META_DIRECTORY_QUERY        0x0FA0
#define META_DIRECTORY_DATA         0x0FAA
#define META_DIRECTORY_RESPONSE     0x0FB4
#define META_DIRECTORY_UPDATE       0x0FD2
#define META_DIRECTORY_UPDATE_ACK   0x0FDC

#define META_XML_INFO               0x08A2 // Server variable requested via xml
#define META_SET_FULLINFO_REQ       0x0C3A // Set full user info request
#define META_SET_FULLINFO_ACK       0x0C3F // Server ack for set fullinfo command
#define META_SPAM_REPORT_ACK        0x2012 // Server ack for user spam report

// Subtypes for Directory meta requests (family 0x5b9)
#define DIRECTORY_QUERY_INFO        0x0002
#define DIRECTORY_SET_INFO          0x0003
#define DIRECTORY_QUERY_MULTI_INFO  0x0006
#define DIRECTORY_QUERY_INFO_ACK    0x0009
#define DIRECTORY_SET_INFO_ACK      0x000A

// TLV types

// SECURITY flags
#define TLV_AUTH        0x02F8  //   uint8      User authorization permissions
#define TLV_WEBAWARE    0x030C  //   uint8      User 'show web status' permissions


// SEARCH only TLVs
#define TLV_AGERANGE    0x0168  //   acombo     Age range to search
#define TLV_KEYWORDS    0x0226  //   sstring    Whitepages search keywords string
#define TLV_ONLINEONLY  0x0230  //   uint8      Search only online users flag
#define TLV_UIN         0x0136  //   uint32     User uin

// common
#define TLV_FIRSTNAME   0x0140  //   sstring    User firstname
#define TLV_LASTNAME    0x014A  //   sstring    User lastname
#define TLV_NICKNAME    0x0154  //   sstring    User nickname
#define TLV_EMAIL       0x015E  //   ecombo     User email
#define TLV_GENDER      0x017C  //   uint8      User gender
#define TLV_MARITAL     0x033E  //   uint8      User marital status
#define TLV_LANGUAGE    0x0186  //   uint16     User spoken language
#define TLV_CITY        0x0190  //   sstring    User home city name
#define TLV_STATE       0x019A  //   sstring    User home state abbr
#define TLV_COUNTRY     0x01A4  //   uint16     User home country code
#define TLV_COMPANY     0x01AE  //   sstring    User work company name
#define TLV_DEPARTMENT  0x01B8  //   sstring    User work department name
#define TLV_POSITION    0x01C2  //   sstring    User work position (title)
#define TLV_OCUPATION   0x01CC  //   uint16     User work ocupation code
#define TLV_PASTINFO    0x01D6  //   icombo     User affilations node
#define TLV_AFFILATIONS 0x01FE  //   icombo     User past info node
#define TLV_INTERESTS   0x01EA  //   icombo     User interests node
#define TLV_HOMEPAGE    0x0212  //   sstring    User homepage category/keywords

// changeinfo
#define TLV_AGE         0x0172  //   uint16     User age
#define TLV_URL         0x0213  //   sstring    User homepage url
#define TLV_BIRTH       0x023A  //   bcombo     User birthday info (year, month, day)
#define TLV_ABOUT       0x0258  //   sstring    User notes (about) text
#define TLV_STREET      0x0262  //   sstring    User home street address
#define TLV_ZIPCODE     0x026D  //   sstring    User home zip code
#define TLV_PHONE       0x0276  //   sstring    User home phone number
#define TLV_FAX         0x0280  //   sstring    User home fax number
#define TLV_MOBILE      0x028A  //   sstring    User home cellular phone number
#define TLV_WORKSTREET  0x0294  //   sstring    User work street address
#define TLV_WORKCITY    0x029E  //   sstring    User work city name
#define TLV_WORKSTATE   0x02A8  //   sstring    User work state name
#define TLV_WORKCOUNTRY 0x02B2  //   uint16     User work country code
#define TLV_WORKZIPCODE 0x02BD  //   sstring    User work zip code
#define TLV_WORKPHONE   0x02C6  //   sstring    User work phone number
#define TLV_WORKFAX     0x02D0  //   sstring    User work fax number
#define TLV_WORKURL     0x02DA  //   sstring    User work webpage url
#define TLV_TIMEZONE    0x0316  //   uint8      User GMT offset
#define TLV_ORGCITY     0x0320  //   sstring    User originally from city
#define TLV_ORGSTATE    0x032A  //   sstring    User originally from state
#define TLV_ORGCOUNTRY  0x0334  //   uint16     User originally from country (code)
#define TLV_ALLOWSPAM   0x0348  //   uint8
#define TLV_CODEPAGE    0x0352  //   uint16     Codepage used for details


/* Direct packet types */
#define PEER_INIT                   0xFF
#define PEER_INIT_ACK               0x01
#define PEER_MSG_INIT               0x03
#define PEER_MSG                    0x02
#define PEER_FILE_INIT              0x00
#define PEER_FILE_INIT_ACK          0x01
#define PEER_FILE_NEXTFILE          0x02
#define PEER_FILE_RESUME            0x03
#define PEER_FILE_STOP              0x04
#define PEER_FILE_SPEED             0x05
#define PEER_FILE_DATA              0x06

/* Direct command types */
#define DIRECT_CANCEL               0x07D0    /* 2000 TCP cancel previous file/chat request */
#define DIRECT_ACK                  0x07DA    /* 2010 TCP acknowledge message packet */
#define DIRECT_MESSAGE              0x07EE    /* 2030 TCP message */

// DC types
#define DC_DISABLED                 0x0000 // Direct connection disabled / auth required
#define DC_HTTPS                    0x0001 // Direct connection thru firewall or https proxy
#define DC_SOCKS                    0x0002 // Direct connection thru socks4/5 proxy server
#define DC_NORMAL                   0x0004 // Normal direct connection (without proxy/firewall)
#define DC_WEB                      0x0006 // Web client - no direct connection

// Message flags
#define MFLAG_NORMAL                0x01 // Normal message
#define MFLAG_AUTO                  0x03 // Auto-message flag
#define MFLAG_MULTI                 0x80 // This is multiple recipients message

// Some SSI constants
#define SSI_ITEM_BUDDY              0x0000  // Buddy record (name: uin for ICQ and screenname for AIM)
#define SSI_ITEM_GROUP              0x0001  // Group record
#define SSI_ITEM_PERMIT             0x0002  // Permit record ("Allow" list in AIM, and "Visible" list in ICQ)
#define SSI_ITEM_DENY               0x0003  // Deny record ("Block" list in AIM, and "Invisible" list in ICQ)
#define SSI_ITEM_VISIBILITY         0x0004  // Permit/deny settings or/and bitmask of the AIM classes
#define SSI_ITEM_PRESENCE           0x0005  // Presence info (if others can see your idle status, etc)
#define SSI_ITEM_CLIENTDATA         0x0009  // Client specific, e.g. ICQ2k shortcut bar items
#define SSI_ITEM_IGNORE             0x000e  // Ignore list record.
#define SSI_ITEM_LASTUPDATE         0x000f  // Item that contain roster update time (name: "LastUpdateDate")
#define SSI_ITEM_NONICQ             0x0010  // Non-ICQ contact (to send SMS). Name: 1#EXT, 2#EXT, etc
#define SSI_ITEM_UNKNOWN2           0x0011  // Unknown.
#define SSI_ITEM_IMPORTTIME         0x0013  // Item that contain roster import time (name: "Import time")
#define SSI_ITEM_BUDDYICON          0x0014  // Buddy icon info. (names: "1", "8", etc. according ot the icon type)
#define SSI_ITEM_SAVED              0x0019
#define SSI_ITEM_PREAUTH            0x001B
#define SSI_ITEM_METAINFO           0x0020  // Owner Details' token & last update time

#define SSI_TLV_AWAITING_AUTH       0x0066  // Contact not authorized in list
#define SSI_TLV_NOT_IN_LIST         0x006A  // Always empty
#define SSI_TLV_UNKNOWN             0x006D  // WTF ?
#define SSI_TLV_SUBITEMS            0x00C8  // List of sub-items IDs
#define SSI_TLV_VISIBILITY          0x00CA
#define SSI_TLV_SHORTCUT            0x00CD
#define SSI_TLV_TIMESTAMP           0x00D4  // Import Timestamp
#define SSI_TLV_AVATARHASH          0x00D5
#define SSI_TLV_NAME                0x0131  // Custom contact nickname
#define SSI_TLV_GROUP_OPENNED       0x0134
#define SSI_TLV_EMAIL               0x0137  // Custom contact email
#define SSI_TLV_PHONE               0x0138  // Custom contact phone number
#define SSI_TLV_PHONE_CELLULAR      0x0139  // Custom contact cellphone number
#define SSI_TLV_PHONE_SMS           0x013A  // Custom contact SMS number
#define SSI_TLV_COMMENT             0x013C  // User comment
#define SSI_TLV_METAINFO_TOKEN      0x015C  // Privacy token for Contact's details
#define SSI_TLV_METAINFO_TIME       0x015D  // Contact's details last update time

#define MAX_SSI_TLV_NAME_SIZE       0x40
#define MAX_SSI_TLV_COMMENT_SIZE    0x50

// Client ID constants (internal)
#define CLID_GENERIC                0x00  // Generic clients (eg. older official clients)
#define CLID_ALTERNATIVE            0x01  // Clients not using tick for MsgID (most third-party clients)
#define CLID_MIRANDA                0x02  // Hey, that's mate!
#define CLID_ICQ6                   0x10  // Mark ICQ6 as it has some non obvious limitations!


// Internal Constants
#define ICQ_PROTOCOL_NAME           LPGEN("ICQ")
#define ICQ_PLUG_VERSION            PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM)
#define ICQ_VERSION                 11        // Protocol version
#define DC_TYPE                     DC_NORMAL // Used for DC settings
#define MAX_CONTACTSSEND            15
#define MAX_MESSAGESNACSIZE         8000
#define CLIENTRATELIMIT             0
#define COOKIE_TIMEOUT              3600      // One hour
#define KEEPALIVE_INTERVAL          57000     // One minute
#define WEBFRONTPORT                0x50
#define CLIENTFEATURES              0x3
#define URL_FORGOT_PASSWORD         "https://www.icq.com/password/"
#define URL_REGISTER                "https://www.icq.com/register/"
#define FLAP_MARKER                 0x2a
#define CLIENT_MD5_STRING           "AOL Instant Messenger (SM)"
#define UNIQUEIDSETTING             "UIN"
#define UINMAXLEN                   11 // DWORD string max len + 1
#define PASSWORDMAXLEN              128
#define OSCAR_PROXY_HOST            "ars.icq.com"
#define OSCAR_PROXY_VERSION         0x044A

#define CLIENT_ID_STRING            "ICQ Client"  // Client identification, mimic ICQ 6.5
#define CLIENT_ID_CODE              0x010a
#define CLIENT_VERSION_MAJOR        0x0014
#define CLIENT_VERSION_MINOR        0x0034
#define CLIENT_VERSION_LESSER       0x0000
#define CLIENT_VERSION_BUILD        0x0c18
#define CLIENT_DISTRIBUTION         0x00000611
#define CLIENT_LANGUAGE             "en"
#define CLIENT_COUNTRY              "us"

#endif /* __ICQ_CONSTANTS_H */