Mercurial > pidgin
annotate plugins/icq/udp.c @ 1840:00aef397a1fe
[gaim-migrate @ 1850]
reworked some of the proxy stuff so that it's non-blocking now. next thing to do is to get IRC, MSN, Napster, and Jabber to use the new proxy_connect code. After that, Oscar and Yahoo (maybe Zephyr too? not likely)
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sat, 12 May 2001 01:38:04 +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 } |
