summaryrefslogtreecommitdiff
path: root/protocols/IcqOscarJ/src/icq_servlist.h
blob: 84465b52f99a37691d336dab1c0aeadc458b8c85 (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
// ---------------------------------------------------------------------------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-2017 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.
// -----------------------------------------------------------------------------

#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 */