Mercurial > pidgin
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); |