comparison src/protocols/oscar/auth.c @ 2821:9467e4ee81be

[gaim-migrate @ 2834] new libfaim stuff. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sat, 01 Dec 2001 00:56:31 +0000
parents fee85ed7fc3f
children 1b64206cfbdc
comparison
equal deleted inserted replaced
2820:b917845dad3c 2821:9467e4ee81be
170 170
171 aimbs_put32(&fr->data, 0x00000001); 171 aimbs_put32(&fr->data, 0x00000001);
172 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); 172 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn);
173 aim_addtlvtochain_raw(&tl, 0x0002, strlen(password), password_encoded); 173 aim_addtlvtochain_raw(&tl, 0x0002, strlen(password), password_encoded);
174 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientstr), clientstr); 174 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientstr), clientstr);
175 aim_addtlvtochain16(&tl, 0x0016, 0x010a); 175 aim_addtlvtochain16(&tl, 0x0016, 0x010a); /* cliend ID */
176 aim_addtlvtochain16(&tl, 0x0017, 0x0004); 176 aim_addtlvtochain16(&tl, 0x0017, 0x0004); /* major version */
177 aim_addtlvtochain16(&tl, 0x0018, 0x0041); 177 aim_addtlvtochain16(&tl, 0x0018, 0x0041); /* minor version */
178 aim_addtlvtochain16(&tl, 0x0019, 0x0001); 178 aim_addtlvtochain16(&tl, 0x0019, 0x0001); /* point version */
179 aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); 179 aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); /* build */
180 aim_addtlvtochain32(&tl, 0x0014, 0x00000055); 180 aim_addtlvtochain32(&tl, 0x0014, 0x00000055); /* distribution chan */
181 aim_addtlvtochain_raw(&tl, 0x000f, strlen(lang), lang); 181 aim_addtlvtochain_raw(&tl, 0x000f, strlen(lang), lang);
182 aim_addtlvtochain_raw(&tl, 0x000e, strlen(country), country); 182 aim_addtlvtochain_raw(&tl, 0x000e, strlen(country), country);
183 183
184 aim_writetlvchain(&fr->data, &tl); 184 aim_writetlvchain(&fr->data, &tl);
185 185
198 * 198 *
199 * NOTE!! If you want/need to make use of the aim_sendmemblock() function, 199 * NOTE!! If you want/need to make use of the aim_sendmemblock() function,
200 * then the client information you send here must exactly match the 200 * then the client information you send here must exactly match the
201 * executable that you're pulling the data from. 201 * executable that you're pulling the data from.
202 * 202 *
203 * Latest WinAIM: 203 * WinAIM 4.8.2540
204 * clientstring = "AOL Instant Messenger (SM), version 4.8.2540/WIN32"
205 * clientid = 0x0109
206 * major = 0x0004
207 * minor = 0x0008
208 * point = 0x0000
209 * build = 0x09ec
210 * t(0x0014) = 0x000000af
211 * t(0x004a) = 0x01
212 *
213 * WinAIM 4.3.2188:
204 * clientstring = "AOL Instant Messenger (SM), version 4.3.2188/WIN32" 214 * clientstring = "AOL Instant Messenger (SM), version 4.3.2188/WIN32"
205 * major2 = 0x0109 215 * clientid = 0x0109
206 * major = 0x0400 216 * major = 0x0400
207 * minor = 0x0003 217 * minor = 0x0003
208 * minor2 = 0x0000 218 * point = 0x0000
209 * build = 0x088c 219 * build = 0x088c
210 * unknown = 0x00000086 220 * unknown = 0x00000086
211 * lang = "en" 221 * lang = "en"
212 * country = "us" 222 * country = "us"
213 * unknown4a = 0x01 223 * unknown4a = 0x01
214 * 224 *
215 * Latest WinAIM that libfaim can emulate without server-side buddylists: 225 * Latest WinAIM that libfaim can emulate without server-side buddylists:
216 * clientstring = "AOL Instant Messenger (SM), version 4.1.2010/WIN32" 226 * clientstring = "AOL Instant Messenger (SM), version 4.1.2010/WIN32"
217 * major2 = 0x0004 227 * clientid = 0x0004
218 * major = 0x0004 228 * major = 0x0004
219 * minor = 0x0001 229 * minor = 0x0001
220 * minor2 = 0x0000 230 * point = 0x0000
221 * build = 0x07da 231 * build = 0x07da
222 * unknown= 0x0000004b 232 * unknown= 0x0000004b
223 * 233 *
224 * WinAIM 3.5.1670: 234 * WinAIM 3.5.1670:
225 * clientstring = "AOL Instant Messenger (SM), version 3.5.1670/WIN32" 235 * clientstring = "AOL Instant Messenger (SM), version 3.5.1670/WIN32"
226 * major2 = 0x0004 236 * clientid = 0x0004
227 * major = 0x0003 237 * major = 0x0003
228 * minor = 0x0005 238 * minor = 0x0005
229 * minor2 = 0x0000 239 * point = 0x0000
230 * build = 0x0686 240 * build = 0x0686
231 * unknown =0x0000002a 241 * unknown =0x0000002a
232 * 242 *
233 * Java AIM 1.1.19: 243 * Java AIM 1.1.19:
234 * clientstring = "AOL Instant Messenger (TM) version 1.1.19 for Java built 03/24/98, freeMem 215871 totalMem 1048567, i686, Linus, #2 SMP Sun Feb 11 03:41:17 UTC 2001 2.4.1-ac9, IBM Corporation, 1.1.8, 45.3, Tue Mar 27 12:09:17 PST 2001" 244 * clientstring = "AOL Instant Messenger (TM) version 1.1.19 for Java built 03/24/98, freeMem 215871 totalMem 1048567, i686, Linus, #2 SMP Sun Feb 11 03:41:17 UTC 2001 2.4.1-ac9, IBM Corporation, 1.1.8, 45.3, Tue Mar 27 12:09:17 PST 2001"
235 * major2 = 0x0001 245 * clientid = 0x0001
236 * major = 0x0001 246 * major = 0x0001
237 * minor = 0x0001 247 * minor = 0x0001
238 * minor2 = (not sent) 248 * point = (not sent)
239 * build = 0x0013 249 * build = 0x0013
240 * unknown= (not sent) 250 * unknown= (not sent)
241 * 251 *
242 * AIM for Linux 1.1.112: 252 * AIM for Linux 1.1.112:
243 * clientstring = "AOL Instant Messenger (SM)" 253 * clientstring = "AOL Instant Messenger (SM)"
244 * major2 = 0x1d09 254 * clientid = 0x1d09
245 * major = 0x0001 255 * major = 0x0001
246 * minor = 0x0001 256 * minor = 0x0001
247 * minor2 = 0x0001 257 * point = 0x0001
248 * build = 0x0070 258 * build = 0x0070
249 * unknown= 0x0000008b 259 * unknown= 0x0000008b
250 * serverstore = 0x01 260 * serverstore = 0x01
251 * 261 *
252 */ 262 */
253 faim_export int aim_send_login(aim_session_t *sess, aim_conn_t *conn, const char *sn, const char *password, struct client_info_s *clientinfo, const char *key) 263 faim_export int aim_send_login(aim_session_t *sess, aim_conn_t *conn, const char *sn, const char *password, struct client_info_s *ci, const char *key)
254 { 264 {
255 aim_frame_t *fr; 265 aim_frame_t *fr;
256 aim_tlvlist_t *tl = NULL; 266 aim_tlvlist_t *tl = NULL;
257 fu8_t digest[16]; 267 fu8_t digest[16];
258 aim_snacid_t snacid; 268 aim_snacid_t snacid;
259 269
260 if (!clientinfo || !sn || !password) 270 if (!ci || !sn || !password)
261 return -EINVAL; 271 return -EINVAL;
262 272
273 /*
274 * What the XORLOGIN flag _really_ means is that its an ICQ login,
275 * which is really stupid and painful, so its not done here.
276 *
277 */
263 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) 278 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN)
264 return goddamnicq2(sess, conn, sn, password); 279 return goddamnicq2(sess, conn, sn, password);
265 280
281
266 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152))) 282 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152)))
267 return -ENOMEM; 283 return -ENOMEM;
268 284
269 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) {
270 fr->hdr.flap.type = 0x01;
271
272 /* Use very specific version numbers to further indicate hack */
273 clientinfo->major2 = 0x010a;
274 clientinfo->major = 0x0004;
275 clientinfo->minor = 0x003c;
276 clientinfo->minor2 = 0x0001;
277 clientinfo->build = 0x0cce;
278 clientinfo->unknown = 0x00000055;
279 }
280
281 snacid = aim_cachesnac(sess, 0x0017, 0x0002, 0x0000, NULL, 0); 285 snacid = aim_cachesnac(sess, 0x0017, 0x0002, 0x0000, NULL, 0);
282 aim_putsnac(&fr->data, 0x0017, 0x0002, 0x0000, snacid); 286 aim_putsnac(&fr->data, 0x0017, 0x0002, 0x0000, snacid);
283 287
284 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); 288 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn);
285 289
286 aim_encode_password_md5(password, key, digest); 290 aim_encode_password_md5(password, key, digest);
287 aim_addtlvtochain_raw(&tl, 0x0025, 16, digest); 291 aim_addtlvtochain_raw(&tl, 0x0025, 16, digest);
288 292
289 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientinfo->clientstring), clientinfo->clientstring); 293 if (ci->clientstring)
290 aim_addtlvtochain16(&tl, 0x0016, (fu16_t)clientinfo->major2); 294 aim_addtlvtochain_raw(&tl, 0x0003, strlen(ci->clientstring), ci->clientstring);
291 aim_addtlvtochain16(&tl, 0x0017, (fu16_t)clientinfo->major); 295 aim_addtlvtochain16(&tl, 0x0016, (fu16_t)ci->clientid);
292 aim_addtlvtochain16(&tl, 0x0018, (fu16_t)clientinfo->minor); 296 aim_addtlvtochain16(&tl, 0x0017, (fu16_t)ci->major);
293 aim_addtlvtochain16(&tl, 0x0019, (fu16_t)clientinfo->minor2); 297 aim_addtlvtochain16(&tl, 0x0018, (fu16_t)ci->minor);
294 aim_addtlvtochain16(&tl, 0x001a, (fu16_t)clientinfo->build); 298 aim_addtlvtochain16(&tl, 0x0019, (fu16_t)ci->point);
295 aim_addtlvtochain_raw(&tl, 0x000e, strlen(clientinfo->country), clientinfo->country); 299 aim_addtlvtochain16(&tl, 0x001a, (fu16_t)ci->build);
296 aim_addtlvtochain_raw(&tl, 0x000f, strlen(clientinfo->lang), clientinfo->lang); 300 aim_addtlvtochain_raw(&tl, 0x000e, strlen(ci->country), ci->country);
297 aim_addtlvtochain16(&tl, 0x0009, 0x0015); 301 aim_addtlvtochain_raw(&tl, 0x000f, strlen(ci->lang), ci->lang);
302
303 /*
304 * If set, old-fashioned buddy lists will not work. You will need
305 * to use SSI.
306 */
307 if (0)
308 aim_addtlvtochain8(&tl, 0x004a, 0x01);
298 309
299 aim_writetlvchain(&fr->data, &tl); 310 aim_writetlvchain(&fr->data, &tl);
300 311
301 aim_freetlvchain(&tl); 312 aim_freetlvchain(&tl);
302 313