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
|
// ---------------------------------------------------------------------------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
//
// 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.
// -----------------------------------------------------------------------------
#ifndef __ICQ_SERVLIST_H
#define __ICQ_SERVLIST_H
// actions:
#define SSA_CHECK_ROSTER 0 // request serv-list
#define SSA_VISIBILITY 1 // update visibility
#define SSA_CONTACT_UPDATE 2 // update contact's details
#define SSA_GROUP_RENAME 5 // rename group
#define SSA_PRIVACY_ADD 0xA // add privacy item
#define SSA_PRIVACY_REMOVE 0xB // remove privacy item
#define SSA_CONTACT_ADD 0x10 // add contact w/o auth
#define SSA_CONTACT_SET_GROUP 0x12 // move to group
#define SSA_CONTACT_REMOVE 0x13 // delete contact
#define SSA_CONTACT_FIX_AUTH 0x40 // reuploading contact for auth re-request
#define SSA_GROUP_ADD 0x15 // create group
#define SSA_GROUP_REMOVE 0x16 // delete group
#define SSA_GROUP_UPDATE 0x17 // update group
#define SSA_SERVLIST_ACK 0x20 // send proto ack only (UploadUI)
#define SSA_SETAVATAR 0x30
#define SSA_REMOVEAVATAR 0x31
#define SSA_IMPORT 7
#define SSA_ACTION_GROUP 0x80 // grouped action
struct CIcqProto;
// callback prototypes for pending operation mechanism:
typedef int (__cdecl CIcqProto::*PENDING_GROUP_CALLBACK)(const char* pszGroup, WORD wGroupId, LPARAM lParam, int nResult);
typedef int (__cdecl CIcqProto::*PENDING_CONTACT_CALLBACK)(MCONTACT hContact, WORD wContactId, WORD wGroupId, LPARAM lParam, int nResult);
// cookie struct for SSI actions
struct cookie_servlist_action
{
MCONTACT hContact;
char *szGroup;
WORD wContactId;
WORD wGroupId;
char *szGroupName;
WORD wNewContactId;
WORD wNewGroupId;
int dwAction;
LPARAM lParam;
int dwGroupCount;
cookie_servlist_action **pGroupItems;
};
// server id type groups
#define SSIT_ITEM 0x00000000
#define SSIT_GROUP 0x00010000
// server id flags
#define SSIF_UNHANDLED 0x01000000
// pending operations
#define PENDING_RESULT_SUCCESS 0x00
#define PENDING_RESULT_INLINE 0x01
#define PENDING_RESULT_FAILED 0x0F
#define PENDING_RESULT_PURGE 0x10
// serv-list update board
#define SSOG_SINGLE 0x00010000
#define SSOG_DOUBLE 0x00020000
#define SSOF_CONTACT 0x00800000
#define SSOF_BEGIN_OPERATION 0x00100000
#define SSOF_END_OPERATION 0x00200000
#define SSOF_IMPORT_OPERATION 0x00400000
#define SSOP_ITEM_ACTION 0x01000000 | SSOG_SINGLE
// SSA_PRIVACY_ADD
// SSA_CONTACT_ADD
// SSA_CONTACT_UPDATE
// SSA_VISIBILITY
// SSA_PRIVACY_REMOVE
// SSA_CONTACT_REMOVE
// SSA_SETAVATAR
// SSA_REMOVEAVATAR
#define SSOP_GROUP_ACTION 0x02000000 | SSOG_SINGLE
// SSA_GROUP_ADD
// SSA_GROUP_RENAME
// SSA_GROUP_UPDATE
// SSA_GROUP_REMOVE
#define SSO_CONTACT_SETGROUP 0x04000000 | SSOG_DOUBLE
// SSA_CONTACT_SET_GROUP
#define SSO_CONTACT_FIXAUTH 0x06000000 | SSOG_DOUBLE
// SSA_CONTACT_FIX_AUTH
#define SSO_BEGIN_OPERATION 0x80000000
#define SSO_END_OPERATION 0x40000000
#define SSOF_SEND_DIRECTLY 0x10000000
#define SSOF_ACTIONMASK 0x0000FFFF
#define SSOF_GROUPINGMASK 0x0F0FFFFF
#define MAX_SERVLIST_PACKET_ITEMS 200
// server-list request handler item
struct servlistgroupitem
{ // generic parent
DWORD dwOperation;
cookie_servlist_action* cookie;
icq_packet packet;
// perhaps add some dummy bytes
};
struct servlistgroupitemdouble: public servlistgroupitem
{
icq_packet packet2;
WORD wAction2;
};
struct ssiqueueditems
{
time_t tAdded;
int dwTimeout;
int nItems;
servlistgroupitem* pItems[MAX_SERVLIST_PACKET_ITEMS];
};
// cookie structs for pending records
struct servlistpendingoperation
{
DWORD flags;
PENDING_GROUP_CALLBACK callback;
LPARAM param;
};
struct servlistpendingitem
{
int nType;
MCONTACT hContact;
char* szGroup;
WORD wContactID;
WORD wGroupID;
servlistpendingoperation* operations;
int operationsCount;
};
#endif /* __ICQ_SERVLIST_H */
|