Mercurial > pidgin
annotate plugins/icq/udp.c @ 1678:1573a65fd0cd
[gaim-migrate @ 1688]
Add and Remove buttons work in IRC...
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Mon, 02 Apr 2001 07:15:06 +0000 |
parents | ba8e6e211af5 |
children | 8ed70631ed15 |
rev | line source |
---|---|
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
1152 | 2 /* |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
3 $Id: udp.c 1535 2001-03-03 00:26:04Z warmenhoven $ |
1152 | 4 $Log$ |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
5 Revision 1.5 2001/03/03 00:26:04 warmenhoven |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
6 icqlib updates. beginnings of system logging. |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
7 |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
8 Revision 1.29 2001/03/01 05:37:15 bills |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
9 rewrote icq_UDPEncode and icq_UDPCheckCode functions to do their work in |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
10 a seperate buffer so original icq_Packet isn't corrupted, fixed bug where |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
11 UDP_CMD_ACKs were being queued on the UDP packet queue |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
12 |
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
13 Revision 1.28 2001/02/22 05:40:04 bills |
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
14 port tcp connect timeout code and UDP queue to new timeout manager |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
15 |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
16 Revision 1.27 2001/01/16 00:10:13 denis |
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
17 Invisible list has been finished. |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
18 |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
19 Revision 1.26 2000/12/19 06:00:07 bills |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
20 moved members from ICQLINK to ICQLINK_private struct |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
21 |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
22 Revision 1.25 2000/11/02 07:29:07 denis |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
23 Ability to disable TCP protocol has been added. |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
24 |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
25 Revision 1.24 2000/08/13 00:59:52 denis |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
26 Patch #101057 have been applied. |
1152 | 27 |
28 Revision 1.23 2000/07/09 22:19:35 bills | |
29 added new *Close functions, use *Close functions instead of *Delete | |
30 where correct, and misc cleanup | |
31 | |
32 Revision 1.22 2000/07/09 18:25:44 denis | |
33 icq_UpdateNewUserInfo() now returns seq1 instead of seq2 since it | |
34 isn't META function. | |
35 | |
36 Revision 1.21 2000/06/25 16:43:19 denis | |
37 icq_SendMetaInfoReq() was added. | |
38 All icq_*Meta*() functions now returns sequence number 2 because their | |
39 replies from the server are synced with it. | |
40 | |
41 Revision 1.20 2000/06/15 01:50:39 bills | |
42 removed *Seq functions | |
43 | |
44 Revision 1.19 2000/05/10 19:06:59 denis | |
45 UDP outgoing packet queue was implemented. | |
46 | |
47 Revision 1.18 2000/05/03 18:34:43 denis | |
48 icq_UpdateNewUserInfo() was added. | |
49 All icq_UpdateMetaInfo*() now return their sequence number. | |
50 | |
51 Revision 1.17 2000/04/10 16:36:04 denis | |
52 Some more Win32 compatibility from Guillaume Rosanis <grs@mail.com> | |
53 | |
54 Revision 1.16 2000/04/06 19:03:07 denis | |
55 return sequence number | |
56 | |
57 Revision 1.15 2000/04/06 16:36:18 denis | |
58 So called "Online List problem" bug with Long Contact List was fixed. | |
59 icq_*Send*Seq() functions with specified sequence number were added. | |
60 | |
61 Revision 1.14 2000/04/05 14:37:02 denis | |
62 Applied patch from "Guillaume R." <grs@mail.com> for basic Win32 | |
63 compatibility. | |
64 | |
65 Revision 1.13 1999/12/27 11:12:35 denis | |
66 icq_UpdateMetaInfoSecurity() added for setting "My authorization is | |
67 required", "Web Aware" and "IP Publishing". | |
68 | |
69 Revision 1.12 1999/10/14 11:43:28 denis | |
70 icq_UpdateMetaInfo* functions added. | |
71 | |
72 Revision 1.11 1999/10/07 18:36:27 denis | |
73 proxy.h file removed. | |
74 | |
75 Revision 1.10 1999/10/04 13:36:17 denis | |
76 Cleanups. | |
77 | |
78 Revision 1.9 1999/09/29 20:15:30 bills | |
79 tcp port wasn't being sent properly in login packet | |
80 | |
81 Revision 1.8 1999/09/29 17:13:45 denis | |
82 Webaware functions enabled without success even with UDP v5 - need more | |
83 investigations. | |
84 | |
85 Revision 1.7 1999/07/18 20:22:16 bills | |
86 changed to use new byte-order functions & contact list functions | |
87 | |
88 Revision 1.6 1999/07/16 15:46:00 denis | |
89 Cleaned up. | |
90 | |
91 Revision 1.5 1999/07/16 12:40:53 denis | |
92 ICQ UDP v5 implemented. | |
93 Encription for ICQ UDP v5 implemented. | |
94 icq_Packet* unified interface for UDP packets implemented. | |
95 Multipacket support of ICQ UDP v5 support added. | |
96 | |
97 Revision 1.4 1999/07/12 15:13:43 cproch | |
98 - added definition of ICQLINK to hold session-specific global variabled | |
99 applications which have more than one connection are now possible | |
100 - changed nearly every function defintion to support ICQLINK parameter | |
101 | |
102 Revision 1.3 1999/04/29 09:40:52 denis | |
103 Unsuccessful attempt to implement web presence (webaware) feature | |
104 | |
105 Revision 1.2 1999/04/14 15:04:13 denis | |
106 Cleanups for "strict" compiling (-ansi -pedantic) | |
107 Switched from icq_Log callback to icq_Fmt function. | |
108 | |
109 Revision 1.1 1999/03/24 11:37:38 denis | |
110 Underscored files with TCP stuff renamed. | |
111 TCP stuff cleaned up | |
112 Function names changed to corresponding names. | |
113 icqlib.c splitted to many small files by subject. | |
114 C++ comments changed to ANSI C comments. | |
115 | |
116 */ | |
117 | |
118 #ifndef _WIN32 | |
119 #include <unistd.h> | |
120 #endif | |
121 | |
122 #ifdef _WIN32 | |
123 #include <winsock.h> | |
124 #endif | |
125 | |
126 #include <stdlib.h> | |
127 | |
128 #include "icqtypes.h" | |
129 #include "icqlib.h" | |
130 #include "udp.h" | |
131 #include "queue.h" | |
132 | |
133 #include "stdpackets.h" | |
134 #include "icqbyteorder.h" | |
135 | |
136 static const BYTE icq_UDPTable[] = { | |
137 0x59, 0x60, 0x37, 0x6B, 0x65, 0x62, 0x46, 0x48, 0x53, 0x61, 0x4C, 0x59, 0x60, 0x57, 0x5B, 0x3D, | |
138 0x5E, 0x34, 0x6D, 0x36, 0x50, 0x3F, 0x6F, 0x67, 0x53, 0x61, 0x4C, 0x59, 0x40, 0x47, 0x63, 0x39, | |
139 0x50, 0x5F, 0x5F, 0x3F, 0x6F, 0x47, 0x43, 0x69, 0x48, 0x33, 0x31, 0x64, 0x35, 0x5A, 0x4A, 0x42, | |
140 0x56, 0x40, 0x67, 0x53, 0x41, 0x07, 0x6C, 0x49, 0x58, 0x3B, 0x4D, 0x46, 0x68, 0x43, 0x69, 0x48, | |
141 0x33, 0x31, 0x44, 0x65, 0x62, 0x46, 0x48, 0x53, 0x41, 0x07, 0x6C, 0x69, 0x48, 0x33, 0x51, 0x54, | |
142 0x5D, 0x4E, 0x6C, 0x49, 0x38, 0x4B, 0x55, 0x4A, 0x62, 0x46, 0x48, 0x33, 0x51, 0x34, 0x6D, 0x36, | |
143 0x50, 0x5F, 0x5F, 0x5F, 0x3F, 0x6F, 0x47, 0x63, 0x59, 0x40, 0x67, 0x33, 0x31, 0x64, 0x35, 0x5A, | |
144 0x6A, 0x52, 0x6E, 0x3C, 0x51, 0x34, 0x6D, 0x36, 0x50, 0x5F, 0x5F, 0x3F, 0x4F, 0x37, 0x4B, 0x35, | |
145 0x5A, 0x4A, 0x62, 0x66, 0x58, 0x3B, 0x4D, 0x66, 0x58, 0x5B, 0x5D, 0x4E, 0x6C, 0x49, 0x58, 0x3B, | |
146 0x4D, 0x66, 0x58, 0x3B, 0x4D, 0x46, 0x48, 0x53, 0x61, 0x4C, 0x59, 0x40, 0x67, 0x33, 0x31, 0x64, | |
147 0x55, 0x6A, 0x32, 0x3E, 0x44, 0x45, 0x52, 0x6E, 0x3C, 0x31, 0x64, 0x55, 0x6A, 0x52, 0x4E, 0x6C, | |
148 0x69, 0x48, 0x53, 0x61, 0x4C, 0x39, 0x30, 0x6F, 0x47, 0x63, 0x59, 0x60, 0x57, 0x5B, 0x3D, 0x3E, | |
149 0x64, 0x35, 0x3A, 0x3A, 0x5A, 0x6A, 0x52, 0x4E, 0x6C, 0x69, 0x48, 0x53, 0x61, 0x6C, 0x49, 0x58, | |
150 0x3B, 0x4D, 0x46, 0x68, 0x63, 0x39, 0x50, 0x5F, 0x5F, 0x3F, 0x6F, 0x67, 0x53, 0x41, 0x25, 0x41, | |
151 0x3C, 0x51, 0x54, 0x3D, 0x5E, 0x54, 0x5D, 0x4E, 0x4C, 0x39, 0x50, 0x5F, 0x5F, 0x5F, 0x3F, 0x6F, | |
152 0x47, 0x43, 0x69, 0x48, 0x33, 0x51, 0x54, 0x5D, 0x6E, 0x3C, 0x31, 0x64, 0x35, 0x5A, 0x00, 0x00, | |
153 }; | |
154 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
155 DWORD icq_UDPCalculateCheckCode(icq_Packet *p) |
1152 | 156 { |
157 DWORD num1, num2; | |
158 DWORD r1,r2; | |
159 | |
160 num1 = p->data[8]; | |
161 num1 <<= 8; | |
162 num1 += p->data[4]; | |
163 num1 <<= 8; | |
164 num1 += p->data[2]; | |
165 num1 <<= 8; | |
166 num1 += p->data[6]; | |
167 | |
168 r1 = 0x18 + (rand() % (p->length - 0x18)); | |
169 r2 = rand() & 0xff; | |
170 | |
171 num2 = r1; | |
172 num2 <<= 8; | |
173 num2 += p->data[r1]; | |
174 num2 <<= 8; | |
175 num2 += r2; | |
176 num2 <<= 8; | |
177 num2 += icq_UDPTable[r2]; | |
178 num2 ^= 0xFF00FF; | |
179 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
180 return num1 ^ num2; |
1152 | 181 } |
182 | |
183 DWORD icq_UDPScramble(DWORD cc) | |
184 { | |
185 DWORD a[5]; | |
186 | |
187 a[0] = cc & 0x0000001F; | |
188 a[1] = cc & 0x03E003E0; | |
189 a[2] = cc & 0xF8000400; | |
190 a[3] = cc & 0x0000F800; | |
191 a[4] = cc & 0x041F0000; | |
192 | |
193 a[0] <<= 0x0C; | |
194 a[1] <<= 0x01; | |
195 a[2] >>= 0x0A; | |
196 a[3] <<= 0x10; | |
197 a[4] >>= 0x0F; | |
198 | |
199 return a[0] + a[1] + a[2] + a[3] + a[4]; | |
200 } | |
201 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
202 void icq_UDPEncode(icq_Packet *p, void *buffer) |
1152 | 203 { |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
204 DWORD checkcode = icq_UDPCalculateCheckCode(p); |
1152 | 205 DWORD code1, code2, code3; |
206 DWORD pos; | |
207 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
208 memcpy(buffer, p->data, p->length); |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
209 |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
210 *(DWORD *)(buffer+0x14)=htoicql(checkcode); |
1152 | 211 code1 = p->length * 0x68656c6cL; |
212 code2 = code1 + checkcode; | |
213 pos = 0x0A; | |
214 | |
215 for(; pos < p->length; pos+=4) | |
216 { | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
217 DWORD data = icqtohl(*(DWORD *)((p->data)+pos)); |
1152 | 218 code3 = code2 + icq_UDPTable[pos & 0xFF]; |
219 data ^= code3; | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
220 *(DWORD*)(buffer+pos)=htoicql(data); |
1152 | 221 } |
222 checkcode = icq_UDPScramble(checkcode); | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
223 *(DWORD *)(buffer+0x14)=htoicql(checkcode); |
1152 | 224 } |
225 | |
226 /********************************************************* | |
227 icq_UDPSockWrite and icq_UDPSockRead are for _UDP_ packets | |
228 proxy support for TCP sockets is different! | |
229 *********************************************************/ | |
230 int icq_UDPSockWriteDirect(ICQLINK *link, icq_Packet *p) | |
231 { | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
232 char tmpbuf[ICQ_PACKET_DATA_SIZE+10]; |
1152 | 233 |
234 if(link->icq_UDPSok <= 3) | |
235 { | |
236 icq_FmtLog(link, ICQ_LOG_ERROR, "Bad socket!\n"); | |
237 return -1; | |
238 } | |
239 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
240 icq_UDPEncode(p, tmpbuf+10); |
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
241 |
1152 | 242 if(!link->icq_UseProxy) |
243 { | |
244 #ifdef _WIN32 | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
245 return send(link->icq_UDPSok, tmpbuf+10, p->length, 0); |
1152 | 246 #else |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
247 return write(link->icq_UDPSok, tmpbuf+10, p->length); |
1152 | 248 #endif |
249 } | |
250 else | |
251 { | |
252 tmpbuf[0] = 0; /* reserved */ | |
253 tmpbuf[1] = 0; /* reserved */ | |
254 tmpbuf[2] = 0; /* standalone packet */ | |
255 tmpbuf[3] = 1; /* address type IP v4 */ | |
256 *(unsigned long*)&tmpbuf[4] = htonl(link->icq_ProxyDestIP); | |
257 *(unsigned short*)&tmpbuf[8] = htons(link->icq_ProxyDestPort); | |
258 #ifdef _WIN32 | |
259 return send(link->icq_UDPSok, tmpbuf, p->length+10, 0)-10; | |
260 #else | |
261 return write(link->icq_UDPSok, tmpbuf, p->length+10)-10; | |
262 #endif | |
263 } | |
264 } | |
265 | |
266 int icq_UDPSockWrite(ICQLINK *link, icq_Packet *p) | |
267 { | |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
268 icq_UDPQueuePut(link, p); |
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
269 |
1152 | 270 return icq_UDPSockWriteDirect(link, p); |
271 } | |
272 | |
273 int icq_UDPSockRead(ICQLINK *link, icq_Packet *p) | |
274 { | |
275 int res; | |
276 char tmpbuf[ICQ_PACKET_DATA_SIZE]; | |
277 | |
278 if(!link->icq_UseProxy) | |
279 { | |
280 #ifdef _WIN32 | |
281 res = recv(link->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE, 0); | |
282 #else | |
283 res = read(link->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE); | |
284 #endif | |
285 p->length = res; | |
286 return res; | |
287 } | |
288 else | |
289 { | |
290 #ifdef _WIN32 | |
291 res = recv(link->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE, 0); | |
292 #else | |
293 res = read(link->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE); | |
294 #endif | |
295 if(res<0) | |
296 return res; | |
297 memcpy(p->data, &tmpbuf[10], res-10); | |
298 p->length = res-10; | |
299 return res-10; | |
300 } | |
301 } | |
302 | |
303 /**************************************** | |
304 This must be called every 2 min. | |
305 so the server knows we're still alive. | |
306 JAVA client sends two different commands | |
307 so we do also :) | |
308 *****************************************/ | |
309 WORD icq_KeepAlive(ICQLINK *link) /* V5 */ | |
310 { | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
311 icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_KEEP_ALIVE, link->d->icq_UDPSeqNum1++); |
1152 | 312 icq_PacketAppend32(p, rand()); |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
313 icq_UDPSockWriteDirect(link, p); /* don't queue keep alive packets! */ |
1152 | 314 icq_PacketDelete(p); |
315 | |
316 icq_FmtLog(link, ICQ_LOG_MESSAGE, "Send Keep Alive packet to the server\n"); | |
317 | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
318 return link->d->icq_UDPSeqNum1-1; |
1152 | 319 } |
320 | |
321 /********************************** | |
322 This must be called to remove | |
323 messages from the server | |
324 ***********************************/ | |
325 void icq_SendGotMessages(ICQLINK *link) /* V5 */ | |
326 { | |
327 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_ACK_MESSAGES); | |
328 icq_PacketAppend32(p, rand()); | |
329 icq_UDPSockWrite(link, p); | |
330 } | |
331 | |
332 /************************************* | |
333 this sends over the contact list | |
334 *************************************/ | |
335 void icq_SendContactList(ICQLINK *link) /* V5 */ | |
336 { | |
337 char num_used; | |
338 icq_ContactItem *ptr = icq_ContactGetFirst(link); | |
339 | |
340 while(ptr) | |
341 { | |
342 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_CONT_LIST); | |
343 | |
344 num_used = 0; | |
345 icq_PacketAdvance(p,1); | |
346 while(ptr && num_used<64) | |
347 { | |
348 icq_PacketAppend32(p, ptr->uin); | |
349 num_used++; | |
350 ptr = icq_ContactGetNext(ptr); | |
351 } | |
352 icq_PacketGotoUDPOutData(p, 0); | |
353 icq_PacketAppend8(p, num_used); | |
354 icq_UDPSockWrite(link, p); | |
355 } | |
356 } | |
357 | |
358 void icq_SendNewUser(ICQLINK *link, unsigned long uin) /* V5 */ | |
359 { | |
360 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_ADD_TO_LIST); | |
361 icq_PacketAppend32(p, uin); | |
362 icq_UDPSockWrite(link, p); | |
363 } | |
364 | |
365 /************************************* | |
366 this sends over the visible list | |
367 that allows certain users to see you | |
368 if you're invisible. | |
369 *************************************/ | |
370 void icq_SendVisibleList(ICQLINK *link) /* V5 */ | |
371 { | |
372 char num_used; | |
373 icq_ContactItem *ptr = icq_ContactGetFirst(link); | |
374 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_VIS_LIST); | |
375 | |
376 num_used = 0; | |
377 icq_PacketAdvance(p,1); | |
378 while(ptr) | |
379 { | |
380 if(ptr->vis_list) | |
381 { | |
382 icq_PacketAppend32(p, ptr->uin); | |
383 num_used++; | |
384 } | |
385 ptr = icq_ContactGetNext(ptr); | |
386 } | |
387 if(num_used != 0) | |
388 { | |
389 icq_PacketGotoUDPOutData(p, 0); | |
390 icq_PacketAppend8(p, num_used); | |
391 icq_UDPSockWrite(link, p); | |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
392 } else |
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
393 icq_PacketDelete(p); |
1152 | 394 } |
395 | |
396 void icq_SendInvisibleList(ICQLINK *link) /* V5 */ | |
397 { | |
398 char num_used; | |
399 icq_ContactItem *ptr = icq_ContactGetFirst(link); | |
400 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_INVIS_LIST); | |
401 | |
402 num_used = 0; | |
403 icq_PacketAdvance(p,1); | |
404 while(ptr) | |
405 { | |
1432
4c510ca3563f
[gaim-migrate @ 1442]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1309
diff
changeset
|
406 if(ptr->invis_list) |
1152 | 407 { |
408 icq_PacketAppend32(p, ptr->uin); | |
409 num_used++; | |
410 } | |
411 ptr = icq_ContactGetNext(ptr); | |
412 } | |
413 if(num_used != 0) | |
414 { | |
415 icq_PacketGotoUDPOutData(p, 0); | |
416 icq_PacketAppend8(p, num_used); | |
417 icq_UDPSockWrite(link, p); | |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
418 } else |
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
419 icq_PacketDelete(p); |
1152 | 420 } |
421 | |
422 /************************************** | |
423 This sends the second login command | |
424 this is necessary to finish logging in. | |
425 ***************************************/ | |
426 void icq_SendLogin1(ICQLINK *link) /* V5 */ | |
427 { | |
428 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_LOGIN_1); | |
429 icq_PacketAppend32(p, rand()); | |
430 icq_UDPSockWrite(link, p); | |
431 } | |
432 | |
433 /************************************ | |
434 This procedure logins into the server with icq_Uin and pass | |
435 on the socket icq_Sok and gives our ip and port. | |
436 It does NOT wait for any kind of a response. | |
437 *************************************/ | |
438 void icq_Login(ICQLINK *link, DWORD status) /* V5 */ | |
439 { | |
440 icq_Packet *p; | |
441 | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
442 memset(link->d->icq_UDPServMess, FALSE, sizeof(link->d->icq_UDPServMess)); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
443 link->d->icq_UDPSession = rand() & 0x3FFFFFFF; |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
444 link->d->icq_UDPSeqNum1 = rand() & 0x7FFF; |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
445 link->d->icq_UDPSeqNum2 = 1; |
1152 | 446 |
447 p = icq_UDPCreateStdPacket(link, UDP_CMD_LOGIN); | |
448 icq_PacketAppend32(p, time(0L)); | |
449 icq_PacketAppend32n(p, link->icq_TCPSrvPort); | |
450 /*icq_PacketAppend16(p, 0); | |
451 icq_PacketAppend16n(p, htons(link->icq_OurPort));*/ | |
452 icq_PacketAppendString(p, link->icq_Password); | |
453 icq_PacketAppend32(p, LOGIN_X1_DEF); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
454 if(link->icq_UseTCP) |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
455 { |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
456 if(link->icq_UseProxy) |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
457 { |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
458 icq_PacketAppend32n(p, htonl(link->icq_ProxyIP)); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
459 icq_PacketAppend8(p, LOGIN_SNDONLY_TCP); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
460 } |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
461 else |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
462 { |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
463 icq_PacketAppend32n(p, htonl(link->icq_OurIP)); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
464 icq_PacketAppend8(p, LOGIN_SNDRCV_TCP); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
465 } |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
466 } |
1152 | 467 else |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
468 { |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
469 icq_PacketAppend32n(p, htonl(link->icq_ProxyIP)); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
470 icq_PacketAppend8(p, LOGIN_NO_TCP); |
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
471 } |
1152 | 472 icq_PacketAppend32(p, status); |
473 icq_PacketAppend32(p, LOGIN_X3_DEF); | |
474 icq_PacketAppend32(p, LOGIN_X4_DEF); | |
475 icq_PacketAppend32(p, LOGIN_X5_DEF); | |
476 | |
477 icq_UDPSockWrite(link, p); | |
478 } | |
479 | |
480 /********************** | |
481 Logs off ICQ | |
482 ***********************/ | |
483 void icq_Logout(ICQLINK *link) /* V5 */ | |
484 { | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
485 icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_SEND_TEXT_CODE, link->d->icq_UDPSeqNum1++); |
1152 | 486 icq_PacketAppendString(p, "B_USER_DISCONNECTED"); |
487 icq_PacketAppend8(p, 5); | |
488 icq_PacketAppend8(p, 0); | |
1498
0ef6603d986e
[gaim-migrate @ 1508]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1432
diff
changeset
|
489 icq_UDPSockWriteDirect(link, p); /* don't queue */ |
1152 | 490 icq_PacketDelete(p); |
491 } | |
492 | |
493 /******************************* | |
494 This routine sends the aknowlegement cmd to the | |
495 server it appears that this must be done after | |
496 everything the server sends us | |
497 *******************************/ | |
498 void icq_UDPAck(ICQLINK *link, int seq) /* V5 */ | |
499 { | |
500 icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_ACK, seq); | |
501 icq_PacketAppend32(p, rand()); | |
502 | |
503 icq_FmtLog(link, ICQ_LOG_MESSAGE, "Acking\n"); | |
1525
ba8e6e211af5
[gaim-migrate @ 1535]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1498
diff
changeset
|
504 icq_UDPSockWriteDirect(link, p); |
1152 | 505 } |
506 | |
507 /*************************************************** | |
508 Sends a message thru the server to uin. Text is the | |
509 message to send. | |
510 ***************************************************/ | |
511 WORD icq_UDPSendMessage(ICQLINK *link, DWORD uin, const char *text) /* V5 */ | |
512 { | |
513 char buf[512]; /* message may be only 450 bytes long */ | |
514 icq_Packet *p; | |
515 | |
516 strncpy(buf, text, 512); | |
517 icq_RusConv("kw", buf); | |
518 | |
519 p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); | |
520 icq_PacketAppend32(p, uin); | |
521 icq_PacketAppend16(p, TYPE_MSG); | |
522 icq_PacketAppendString(p, buf); | |
523 | |
524 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
525 return link->d->icq_UDPSeqNum1-1; |
1152 | 526 } |
527 | |
528 WORD icq_UDPSendURL(ICQLINK *link, DWORD uin, const char *url, const char *descr) /* V5 */ | |
529 { | |
530 char buf1[512], buf2[512]; | |
531 icq_Packet *p; | |
532 | |
533 strncpy(buf1, descr, 512); | |
534 icq_RusConv("kw", buf1); | |
535 strncpy(buf2, url, 512); | |
536 | |
537 p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); | |
538 icq_PacketAppend32(p, uin); | |
539 icq_PacketAppend16(p, TYPE_URL); | |
540 icq_PacketAppend16(p, strlen(buf1)+strlen(buf2)+2); /* length + the NULL + 0xFE delimiter */ | |
541 icq_PacketAppendStringFE(p, buf1); | |
542 icq_PacketAppendString0(p, buf2); | |
543 | |
544 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
545 return link->d->icq_UDPSeqNum1-1; |
1152 | 546 } |
547 | |
548 /************************************************** | |
549 Sends a authorization to the server so the Mirabilis | |
550 client can add the user. | |
551 ***************************************************/ | |
552 WORD icq_SendAuthMsg(ICQLINK *link, DWORD uin) /* V5 */ | |
553 { | |
554 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); | |
555 icq_PacketAppend32(p, uin); | |
556 icq_PacketAppend32(p, TYPE_AUTH); | |
557 icq_PacketAppend16(p, 0); | |
558 icq_UDPSockWrite(link, p); | |
559 | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
560 return link->d->icq_UDPSeqNum1-1; |
1152 | 561 } |
562 | |
563 /************************************************** | |
564 Changes the users status on the server | |
565 ***************************************************/ | |
566 void icq_ChangeStatus(ICQLINK *link, DWORD status) /* V5 */ | |
567 { | |
568 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_STATUS_CHANGE); | |
569 icq_PacketAppend32(p, status); | |
570 link->icq_Status = status; | |
571 icq_UDPSockWrite(link, p); | |
572 } | |
573 | |
574 /******************************************************** | |
575 Sends a request to the server for info on a specific user | |
576 *********************************************************/ | |
577 WORD icq_SendInfoReq(ICQLINK *link, DWORD uin) /* V5 */ | |
578 { | |
579 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_INFO_REQ); | |
580 icq_PacketAppend32(p, uin); | |
581 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
582 return link->d->icq_UDPSeqNum1-1; |
1152 | 583 } |
584 | |
585 /******************************************************** | |
586 Sends a request to the server for info on a specific user | |
587 *********************************************************/ | |
588 WORD icq_SendExtInfoReq(ICQLINK *link, DWORD uin) /* V5 */ | |
589 { | |
590 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_EXT_INFO_REQ); | |
591 icq_PacketAppend32(p, uin); | |
592 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
593 return link->d->icq_UDPSeqNum1-1; |
1152 | 594 } |
595 | |
596 /************************************************************** | |
597 Initializes a server search for the information specified | |
598 ***************************************************************/ | |
599 void icq_SendSearchReq(ICQLINK *link, const char *email, const char *nick, const char *first, | |
600 const char *last) /* V5 */ | |
601 { | |
602 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEARCH_USER); | |
603 icq_PacketAppendString(p, nick); | |
604 icq_PacketAppendString(p, first); | |
605 icq_PacketAppendString(p, last); | |
606 icq_PacketAppendString(p, email); | |
607 icq_UDPSockWrite(link, p); | |
608 } | |
609 | |
610 /************************************************************** | |
611 Initializes a server search for the information specified | |
612 ***************************************************************/ | |
613 void icq_SendSearchUINReq(ICQLINK *link, DWORD uin) /* V5 */ | |
614 { | |
615 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEARCH_UIN); | |
616 icq_PacketAppend32(p, uin); | |
617 icq_UDPSockWrite(link, p); | |
618 } | |
619 | |
620 /************************************************** | |
621 Registers a new uin in the ICQ network | |
622 ***************************************************/ | |
623 void icq_RegNewUser(ICQLINK *link, const char *pass) /* V5 */ | |
624 { | |
625 char pass8[9]; | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
626 icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_REG_NEW_USER, link->d->icq_UDPSeqNum1++); |
1152 | 627 strncpy(pass8, pass, 8); |
628 icq_PacketAppendString(p, pass8); | |
629 icq_PacketAppend32(p, 0xA0); | |
630 icq_PacketAppend32(p, 0x2461); | |
631 icq_PacketAppend32(p, 0xA00000); | |
632 icq_PacketAppend32(p, 0x00); | |
633 icq_PacketGoto(p, 6); | |
634 icq_PacketAppend32(p, 0); | |
635 icq_PacketAppend32(p, rand()); | |
636 icq_UDPSockWrite(link, p); | |
637 icq_FmtLog(link, ICQ_LOG_MESSAGE, "Send RegNewUser packet to the server\n"); | |
638 } | |
639 | |
640 WORD icq_UpdateUserInfo(ICQLINK *link, const char *nick, const char *first, const char *last, | |
641 const char *email) /* V5 */ | |
642 { | |
643 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_UPDATE_INFO); | |
644 icq_PacketAppendString(p, nick); | |
645 icq_PacketAppendString(p, first); | |
646 icq_PacketAppendString(p, last); | |
647 icq_PacketAppendString(p, email); | |
648 /* auth (byte)? */ | |
649 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
650 return link->d->icq_UDPSeqNum1-1; |
1152 | 651 } |
652 | |
653 WORD icq_UpdateAuthInfo(ICQLINK *link, DWORD auth) /* V5 */ | |
654 { | |
655 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_UPDATE_AUTH); | |
656 icq_PacketAppend32(p, auth); /* NOT auth? */ | |
657 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
658 return link->d->icq_UDPSeqNum1-1; |
1152 | 659 } |
660 | |
661 WORD icq_UpdateMetaInfoSet(ICQLINK *link, const char *nick, const char *first, const char *last, | |
662 const char *email, const char *email2, const char *email3, | |
663 const char *city, const char *state, const char *phone, const char *fax, | |
664 const char *street, const char *cellular, unsigned long zip, | |
665 unsigned short cnt_code, unsigned char cnt_stat, unsigned char emailhide) | |
666 { | |
667 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); | |
668 icq_PacketAppend16(p, META_CMD_SET_INFO); | |
669 icq_PacketAppendString(p, nick); | |
670 icq_PacketAppendString(p, first); | |
671 icq_PacketAppendString(p, last); | |
672 icq_PacketAppendString(p, email); | |
673 icq_PacketAppendString(p, email2); | |
674 icq_PacketAppendString(p, email3); | |
675 icq_PacketAppendString(p, city); | |
676 icq_PacketAppendString(p, state); | |
677 icq_PacketAppendString(p, phone); | |
678 icq_PacketAppendString(p, fax); | |
679 icq_PacketAppendString(p, street); | |
680 icq_PacketAppendString(p, cellular); | |
681 icq_PacketAppend32(p, zip); | |
682 icq_PacketAppend16(p, cnt_code); | |
683 icq_PacketAppend8(p, cnt_stat); | |
684 icq_PacketAppend8(p, emailhide); | |
685 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
686 return link->d->icq_UDPSeqNum2-1; |
1152 | 687 } |
688 | |
689 WORD icq_UpdateMetaInfoHomepage(ICQLINK *link, unsigned char age, const char *homepage, | |
690 unsigned char year, unsigned char month, unsigned char day, | |
691 unsigned char lang1, unsigned char lang2, unsigned char lang3) | |
692 { | |
693 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); | |
694 icq_PacketAppend16(p, META_CMD_SET_HOMEPAGE); | |
695 icq_PacketAppend8(p, age); | |
696 icq_PacketAppend16(p, 0x0200); | |
697 icq_PacketAppendString(p, homepage); | |
698 icq_PacketAppend8(p, year); | |
699 icq_PacketAppend8(p, month); | |
700 icq_PacketAppend8(p, day); | |
701 icq_PacketAppend8(p, 0xFF /* lang1 */); | |
702 icq_PacketAppend8(p, 0xFF /* lang2 */); | |
703 icq_PacketAppend8(p, 0xFF /* lang3 */); | |
704 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
705 return link->d->icq_UDPSeqNum2-1; |
1152 | 706 } |
707 | |
708 WORD icq_UpdateMetaInfoAbout(ICQLINK *link, const char *about) | |
709 { | |
710 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); | |
711 icq_PacketAppend16(p, META_CMD_SET_ABOUT); | |
712 icq_PacketAppendString(p, about); | |
713 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
714 return link->d->icq_UDPSeqNum2-1; |
1152 | 715 } |
716 | |
717 WORD icq_UpdateMetaInfoSecurity(ICQLINK *link, unsigned char reqauth, unsigned char webpresence, | |
718 unsigned char pubip) | |
719 { | |
720 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); | |
721 icq_PacketAppend16(p, META_CMD_SET_SECURE); | |
722 icq_PacketAppend8(p, !reqauth); | |
723 icq_PacketAppend8(p, webpresence); | |
724 icq_PacketAppend8(p, pubip); | |
725 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
726 return link->d->icq_UDPSeqNum2-1; |
1152 | 727 } |
728 | |
729 WORD icq_UpdateNewUserInfo(ICQLINK *link, const char *nick, const char *first, const char *last, | |
730 const char *email) /* V5 */ | |
731 { | |
732 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_NEW_USER_INFO); | |
733 icq_PacketAppendString(p, nick); | |
734 icq_PacketAppendString(p, first); | |
735 icq_PacketAppendString(p, last); | |
736 icq_PacketAppendString(p, email); | |
737 icq_PacketAppend8(p, 1); | |
738 icq_PacketAppend8(p, 1); | |
739 icq_PacketAppend8(p, 1); | |
740 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
741 return link->d->icq_UDPSeqNum1-1; |
1152 | 742 } |
743 | |
744 WORD icq_SendMetaInfoReq(ICQLINK *link, unsigned long uin) | |
745 { | |
746 icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); | |
747 icq_PacketAppend16(p, META_CMD_REQ_INFO); | |
748 icq_PacketAppend32(p, uin); | |
749 icq_UDPSockWrite(link, p); | |
1309
0a766047b4fd
[gaim-migrate @ 1319]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1152
diff
changeset
|
750 return link->d->icq_UDPSeqNum2-1; |
1152 | 751 } |