comparison libpurple/protocols/msn/slplink.c @ 28830:24b341ae63f7

msn: Use the PurpleXfer size if available. This fixes file transfers not being detected as complete when there is no file on the system (the receiving end isn't able to tell how much data to expect).
author Paul Aurich <paul@darkrain42.org>
date Mon, 28 Dec 2009 21:19:51 +0000
parents bcea7c92d3f1
children 932f16167621
comparison
equal deleted inserted replaced
28825:ac6c2dda0eae 28830:24b341ae63f7
667 } MsnContextHeader; 667 } MsnContextHeader;
668 668
669 #define MAX_FILE_NAME_LEN 0x226 669 #define MAX_FILE_NAME_LEN 0x226
670 670
671 static gchar * 671 static gchar *
672 gen_context(const char *file_name, const char *file_path) 672 gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path)
673 { 673 {
674 struct stat st; 674 struct stat st;
675 gsize size = 0; 675 gsize size = 0;
676 MsnContextHeader header; 676 MsnContextHeader header;
677 gchar *u8 = NULL; 677 gchar *u8 = NULL;
681 gunichar2 *uni = NULL; 681 gunichar2 *uni = NULL;
682 glong currentChar = 0; 682 glong currentChar = 0;
683 glong uni_len = 0; 683 glong uni_len = 0;
684 gsize len; 684 gsize len;
685 685
686 if (g_stat(file_path, &st) == 0) 686 if (xfer)
687 size = purple_xfer_get_size(xfer);
688
689 if (size == 0 && g_stat(file_path, &st) == 0)
687 size = st.st_size; 690 size = st.st_size;
688 691
689 if(!file_name) { 692 if(!file_name) {
690 gchar *basename = g_path_get_basename(file_path); 693 gchar *basename = g_path_get_basename(file_path);
691 u8 = purple_utf8_try_convert(basename); 694 u8 = purple_utf8_try_convert(basename);
759 purple_xfer_set_read_fnc(xfer, msn_xfer_read); 762 purple_xfer_set_read_fnc(xfer, msn_xfer_read);
760 purple_xfer_set_write_fnc(xfer, msn_xfer_write); 763 purple_xfer_set_write_fnc(xfer, msn_xfer_write);
761 764
762 xfer->data = slpcall; 765 xfer->data = slpcall;
763 766
764 context = gen_context(fn, fp); 767 context = gen_context(xfer, fn, fp);
765 768
766 msn_slpcall_invite(slpcall, MSN_FT_GUID, 2, context); 769 msn_slpcall_invite(slpcall, MSN_FT_GUID, 2, context);
767 770
768 g_free(context); 771 g_free(context);
769 } 772 }