comparison libpurple/protocols/msn/slp.c @ 32672:3828a61c44da

A boring and large patch so I can merge heads.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 23 Dec 2011 08:21:58 +0000
parents 462c19eb31d8
children
comparison
equal deleted inserted replaced
32671:0e69949b3e61 32672:3828a61c44da
251 MsnFetchUserDisplayData *data = g_new0(MsnFetchUserDisplayData, 1); 251 MsnFetchUserDisplayData *data = g_new0(MsnFetchUserDisplayData, 1);
252 PurpleUtilFetchUrlData *url_data; 252 PurpleUtilFetchUrlData *url_data;
253 data->session = session; 253 data->session = session;
254 data->remote_user = user->passport; 254 data->remote_user = user->passport;
255 data->sha1 = info; 255 data->sha1 = info;
256 url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE, 200*1024, 256 url_data = purple_util_fetch_url(url, TRUE, NULL, TRUE, 200*1024,
257 fetched_user_display, data); 257 fetched_user_display, data);
258 session->url_datas = g_slist_prepend(session->url_datas, url_data); 258 session->url_datas = g_slist_prepend(session->url_datas, url_data);
259 } else { 259 } else {
260 msn_slplink_request_object(slplink, info, got_user_display, 260 msn_slplink_request_object(slplink, info, got_user_display,
261 end_user_display, obj); 261 end_user_display, obj);
289 } 289 }
290 290
291 static gchar * 291 static gchar *
292 gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path) 292 gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path)
293 { 293 {
294 gsize size = 0; 294 goffset size = 0;
295 MsnFileContext context; 295 MsnFileContext context;
296 gchar *u8 = NULL; 296 gchar *u8 = NULL;
297 gchar *ret; 297 gchar *ret;
298 gunichar2 *uni = NULL; 298 gunichar2 *uni = NULL;
299 glong currentChar = 0; 299 glong currentChar = 0;
320 u8 = NULL; 320 u8 = NULL;
321 } 321 }
322 322
323 preview = purple_xfer_get_thumbnail(xfer, &preview_len); 323 preview = purple_xfer_get_thumbnail(xfer, &preview_len);
324 324
325 context.length = MSN_FILE_CONTEXT_SIZE; 325 context.length = MSN_FILE_CONTEXT_SIZE_V2;
326 context.version = 2; /* V.3 contains additional unnecessary data */ 326 context.version = 2; /* V.3 contains additional unnecessary data */
327 context.file_size = size; 327 context.file_size = size;
328 if (preview) 328 if (preview)
329 context.type = 0; 329 context.type = 0;
330 else 330 else
334 for (currentChar = 0; currentChar < len; currentChar++) { 334 for (currentChar = 0; currentChar < len; currentChar++) {
335 context.file_name[currentChar] = GUINT16_TO_LE(uni[currentChar]); 335 context.file_name[currentChar] = GUINT16_TO_LE(uni[currentChar]);
336 } 336 }
337 memset(&context.file_name[currentChar], 0x00, (MAX_FILE_NAME_LEN - currentChar) * 2); 337 memset(&context.file_name[currentChar], 0x00, (MAX_FILE_NAME_LEN - currentChar) * 2);
338 338
339 #if 0
339 memset(&context.unknown1, 0, sizeof(context.unknown1)); 340 memset(&context.unknown1, 0, sizeof(context.unknown1));
340 context.unknown2 = 0xffffffff; 341 context.unknown2 = 0xffffffff;
342 #endif
341 343
342 /* Mind the cast, as in, don't free it after! */ 344 /* Mind the cast, as in, don't free it after! */
343 context.preview = (char *)preview; 345 context.preview = (char *)preview;
344 context.preview_len = preview_len; 346 context.preview_len = preview_len;
345 347
346 u8 = msn_file_context_to_wire(&context); 348 u8 = msn_file_context_to_wire(&context);
347 ret = purple_base64_encode((const guchar *)u8, MSN_FILE_CONTEXT_SIZE + preview_len); 349 ret = purple_base64_encode((const guchar *)u8, MSN_FILE_CONTEXT_SIZE_V2 + preview_len);
348 350
349 g_free(uni); 351 g_free(uni);
350 g_free(u8); 352 g_free(u8);
351 353
352 return ret; 354 return ret;
362 const char *fp; 364 const char *fp;
363 365
364 fn = purple_xfer_get_filename(xfer); 366 fn = purple_xfer_get_filename(xfer);
365 fp = purple_xfer_get_local_filename(xfer); 367 fp = purple_xfer_get_local_filename(xfer);
366 368
367 slplink = xfer->data; 369 slplink = purple_xfer_get_protocol_data(xfer);
368 370
369 g_return_if_fail(slplink != NULL); 371 g_return_if_fail(slplink != NULL);
370 g_return_if_fail(fp != NULL); 372 g_return_if_fail(fp != NULL);
371 373
372 slpcall = msn_slpcall_new(slplink); 374 slpcall = msn_slpcall_new(slplink);
382 384
383 purple_xfer_set_cancel_send_fnc(xfer, msn_xfer_cancel); 385 purple_xfer_set_cancel_send_fnc(xfer, msn_xfer_cancel);
384 purple_xfer_set_read_fnc(xfer, msn_xfer_read); 386 purple_xfer_set_read_fnc(xfer, msn_xfer_read);
385 purple_xfer_set_write_fnc(xfer, msn_xfer_write); 387 purple_xfer_set_write_fnc(xfer, msn_xfer_write);
386 388
387 xfer->data = slpcall; 389 purple_xfer_set_protocol_data(xfer, slpcall);
388 390
389 context = gen_context(xfer, fn, fp); 391 context = gen_context(xfer, fn, fp);
390 392
391 msn_slpcall_invite(slpcall, MSN_FT_GUID, P2P_APPID_FILE, context); 393 msn_slpcall_invite(slpcall, MSN_FT_GUID, P2P_APPID_FILE, context);
392 msn_slplink_unref(slplink); 394 msn_slplink_unref(slplink);