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
|
// ---------------------------------------------------------------------------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.
//
// -----------------------------------------------------------------------------
//
// File name : $URL: http://miranda.googlecode.com/svn/trunk/miranda/protocols/IcqOscarJ/icq_avatar.h $
// Revision : $Revision: 14141 $
// Last change on : $Date: 2012-03-09 22:52:15 +0200 (Пт, 09 мар 2012) $
// Last change by : $Author: george.hazan $
//
// DESCRIPTION:
//
// Avatars connection support declarations
//
// -----------------------------------------------------------------------------
#ifndef __ICQ_AVATAR_H
#define __ICQ_AVATAR_H
extern BYTE hashEmptyAvatar[9];
#define AVATAR_HASH_MINI 0x00
#define AVATAR_HASH_STATIC 0x01
#define AVATAR_HASH_FLASH 0x08
#define AVATAR_HASH_PHOTO 0x0C
struct CIcqProto;
struct avatars_server_connection : public lockable_struct
{
protected:
CIcqProto *ppro;
HANDLE hConnection; // handle to the connection
HANDLE hPacketRecver;
WORD wLocalSequence;
icq_critical_section *localSeqMutex;
BOOL isLoggedIn;
BOOL isActive;
BOOL stopThread; // horrible, but simple - signal for thread to stop
char *pCookie; // auth to server
WORD wCookieLen;
int sendServerPacket(icq_packet *pPacket);
int handleServerPackets(BYTE *buf, int buflen);
void handleLoginChannel(BYTE *buf, WORD datalen);
void handleDataChannel(BYTE *buf, WORD datalen);
void handleServiceFam(BYTE *pBuffer, WORD wBufferLength, snac_header *pSnacHeader);
void handleAvatarFam(BYTE *pBuffer, WORD wBufferLength, snac_header *pSnacHeader);
rates *m_rates;
icq_critical_section *m_ratesMutex;
int NetLog_Server(const char *fmt,...);
HANDLE runContact[4];
DWORD runTime[4];
int runCount;
void checkRequestQueue();
public:
avatars_server_connection(CIcqProto *ppro, HANDLE hConnection, char *pCookie, WORD wCookieLen);
virtual ~avatars_server_connection();
void connectionThread();
void closeConnection();
void shutdownConnection();
__inline BOOL isPending() { return !isLoggedIn; };
__inline BOOL isReady() { return isLoggedIn && isActive && !stopThread; };
DWORD sendGetAvatarRequest(HANDLE hContact, DWORD dwUin, char *szUid, const BYTE *hash, unsigned int hashlen, const TCHAR *file);
DWORD sendUploadAvatarRequest(HANDLE hContact, WORD wRef, const BYTE *data, unsigned int datalen);
};
__inline static void SAFE_DELETE(avatars_server_connection **p) { SAFE_DELETE((lockable_struct**)p); };
struct avatars_request : public void_struct
{
int type;
HANDLE hContact;
DWORD dwUin;
uid_str szUid;
BYTE *hash;
unsigned int hashlen;
TCHAR *szFile;
BYTE *pData;
unsigned int cbData;
WORD wRef;
DWORD timeOut;
avatars_request *pNext;
public:
avatars_request(int type);
virtual ~avatars_request();
};
__inline static void SAFE_DELETE(avatars_request **p) { SAFE_DELETE((void_struct**)p); };
#define ART_GET 1
#define ART_UPLOAD 2
#define ART_BLOCK 4
int DetectAvatarFormat(const TCHAR *szFile);
void AddAvatarExt(int dwFormat, TCHAR *pszDest);
BYTE* calcMD5HashOfFile(const TCHAR *szFile);
#endif /* __ICQ_AVATAR_H */
|