summaryrefslogtreecommitdiff
path: root/icqj_s7_sss_mod/icq_servlist.h
blob: af15cc72863f87e9b35db061f8a37ea76ca48e69 (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
// ---------------------------------------------------------------------------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,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
// Copyright  2004,2005,2006,2007 Joe Kucera
// Copyright  2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
// 
// 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// -----------------------------------------------------------------------------
//
// File name      : $Source$
// Revision       : $Revision: 36 $
// Last change on : $Date: 2007-08-05 03:45:10 +0300 (Вс, 05 авг 2007) $
// Last change by : $Author: sss123next $
//
// DESCRIPTION:
//
//  Describe me here please...
//
// -----------------------------------------------------------------------------

#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_PRE_ADD   0x14  // add contact to new group, group added
#define SSA_CONTACT_ADD       0x10  // add contact w/o auth
#define SSA_CONTACT_ADD_AUTH  0x11  // add contact with 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

typedef void (*GROUPADDCALLBACK)(WORD wGroupId, LPARAM lParam);

// cookie struct for SSI actions
typedef struct servlistcookie_t
{
  DWORD dwUin;
  HANDLE hContact;
  WORD wContactId;
  WORD wGroupId;
  char* szGroupName;
  WORD wNewContactId;
  WORD wNewGroupId;
  int dwAction; 
  GROUPADDCALLBACK ofCallback;
  LPARAM lParam;
} servlistcookie;


void InitServerLists(void);
void UninitServerLists(void);
void ResetAllSSISettings(void);
void ResetUserSSISettings(HANDLE hContact);

void* collectGroups(int *count);
void* collectBuddyGroup(WORD wGroupID, int *count);
char* getServerGroupNameUtf(WORD wGroupID);
void setServerGroupNameUtf(WORD wGroupID, const char* szGroupNameUtf);
WORD getServerGroupIDUtf(const char* szPath);
void setServerGroupIDUtf(const char* szPath, WORD wGroupID);
int IsServerGroupsDefined();
char* makeGroupPathUtf(WORD wGroupId);
WORD makeGroupId(const char* szGroupPath, GROUPADDCALLBACK ofCallback, servlistcookie* lParam);
void removeGroupPathLinks(WORD wGroupID);
int countGroupLevel(WORD wGroupId);

void FlushSrvGroupsCache();

DWORD icq_sendServerContact(HANDLE hContact, DWORD dwCookie, WORD wAction, WORD wGroupId, WORD wContactId);
DWORD icq_sendSimpleItem(DWORD dwCookie, WORD wAction, DWORD dwUin, char* szUID, WORD wGroupId, WORD wItemId, WORD wItemType);
DWORD icq_sendGroupUtf(DWORD dwCookie, WORD wAction, WORD wGroupId, const char *szName, void *pContent, int cbContent);

DWORD icq_removeServerPrivacyItem(HANDLE hContact, DWORD dwUin, char* szUid, WORD wItemId, WORD wType);
DWORD icq_addServerPrivacyItem(HANDLE hContact, DWORD dwUin, char* szUid, WORD wItemId, WORD wType);


void resetServContactAuthState(HANDLE hContact, DWORD dwUin);

// id type groups
#define SSIT_ITEM 0
#define SSIT_GROUP 1

WORD GenerateServerId(int bGroupId);
WORD GenerateServerIdPair(int bGroupId, int wCount);
void ReserveServerID(WORD wID, int bGroupId);
void FreeServerID(WORD wID, int bGroupId);
BOOL CheckServerID(WORD wID, unsigned int wCount);
void FlushServerIDs();
void LoadServerIDs();

void FlushPendingOperations();
void RemovePendingOperation(HANDLE hContact, int nResult);
void AddGroupRename(WORD wGroupID);
void RemoveGroupRename(WORD wGroupID);
void FlushGroupRenames();

void AddJustAddedContact(HANDLE hContact);
BOOL IsContactJustAdded(HANDLE hContact);
void FlushJustAddedContacts();

#endif /* __ICQ_SERVLIST_H */