Mercurial > pidgin
comparison libpurple/protocols/yahoo/yahoo_filexfer.c @ 27797:0a056130718e
yahoo: Fix some "leaks" (in reality these shouldn't happen). Refs #9822.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 02 Aug 2009 04:10:32 +0000 |
parents | 908be3822215 |
children | da33da2e1a1e |
comparison
equal
deleted
inserted
replaced
27796:aca8afc93264 | 27797:0a056130718e |
---|---|
882 purple_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n", | 882 purple_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n", |
883 xfer_data->host, xfer_data->port, xfer_data->path, url); | 883 xfer_data->host, xfer_data->port, xfer_data->path, url); |
884 | 884 |
885 /* Build the file transfer handle. */ | 885 /* Build the file transfer handle. */ |
886 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); | 886 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); |
887 if (xfer) | 887 if (xfer == NULL) { |
888 { | 888 g_free(xfer_data); |
889 xfer->data = xfer_data; | 889 g_return_if_reached(); |
890 | 890 } |
891 /* Set the info about the incoming file. */ | 891 |
892 if (filename) { | 892 xfer->data = xfer_data; |
893 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); | 893 |
894 /* Set the info about the incoming file. */ | |
895 if (filename) { | |
896 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); | |
897 purple_xfer_set_filename(xfer, utf8_filename); | |
898 g_free(utf8_filename); | |
899 } else { | |
900 gchar *start, *end; | |
901 start = g_strrstr(xfer_data->path, "/"); | |
902 if (start) | |
903 start++; | |
904 end = g_strrstr(xfer_data->path, "?"); | |
905 if (start && *start && end) { | |
906 char *utf8_filename; | |
907 filename = g_strndup(start, end - start); | |
908 utf8_filename = yahoo_string_decode(gc, filename, TRUE); | |
909 g_free(filename); | |
894 purple_xfer_set_filename(xfer, utf8_filename); | 910 purple_xfer_set_filename(xfer, utf8_filename); |
895 g_free(utf8_filename); | 911 g_free(utf8_filename); |
896 } else { | 912 filename = NULL; |
897 gchar *start, *end; | 913 } |
898 start = g_strrstr(xfer_data->path, "/"); | 914 } |
899 if (start) | 915 |
900 start++; | 916 purple_xfer_set_size(xfer, filesize); |
901 end = g_strrstr(xfer_data->path, "?"); | 917 |
902 if (start && *start && end) { | 918 /* Setup our I/O op functions */ |
903 char *utf8_filename; | 919 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); |
904 filename = g_strndup(start, end - start); | 920 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); |
905 utf8_filename = yahoo_string_decode(gc, filename, TRUE); | 921 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); |
906 g_free(filename); | 922 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); |
907 purple_xfer_set_filename(xfer, utf8_filename); | 923 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); |
908 g_free(utf8_filename); | 924 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); |
909 filename = NULL; | 925 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); |
910 } | 926 |
911 } | 927 /* Now perform the request */ |
912 | 928 purple_xfer_request(xfer); |
913 purple_xfer_set_size(xfer, filesize); | |
914 | |
915 /* Setup our I/O op functions */ | |
916 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); | |
917 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); | |
918 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); | |
919 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); | |
920 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | |
921 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | |
922 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | |
923 | |
924 /* Now perform the request */ | |
925 purple_xfer_request(xfer); | |
926 } | |
927 } | 929 } |
928 | 930 |
929 PurpleXfer *yahoo_new_xfer(PurpleConnection *gc, const char *who) | 931 PurpleXfer *yahoo_new_xfer(PurpleConnection *gc, const char *who) |
930 { | 932 { |
931 PurpleXfer *xfer; | 933 PurpleXfer *xfer; |
936 xfer_data = g_new0(struct yahoo_xfer_data, 1); | 938 xfer_data = g_new0(struct yahoo_xfer_data, 1); |
937 xfer_data->gc = gc; | 939 xfer_data->gc = gc; |
938 | 940 |
939 /* Build the file transfer handle. */ | 941 /* Build the file transfer handle. */ |
940 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); | 942 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); |
941 if (xfer) | 943 if (xfer == NULL) |
942 { | 944 { |
943 xfer->data = xfer_data; | 945 g_free(xfer_data); |
944 | 946 g_return_val_if_reached(NULL); |
945 /* Setup our I/O op functions */ | 947 } |
946 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); | 948 |
947 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); | 949 xfer->data = xfer_data; |
948 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); | 950 |
949 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); | 951 /* Setup our I/O op functions */ |
950 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | 952 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); |
951 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | 953 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); |
952 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | 954 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); |
953 } | 955 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); |
956 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | |
957 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | |
958 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | |
954 | 959 |
955 return xfer; | 960 return xfer; |
956 } | 961 } |
957 | 962 |
958 static gchar* yahoo_xfer_new_xfer_id(void) | 963 static gchar* yahoo_xfer_new_xfer_id(void) |
1586 YahooData *yd; | 1591 YahooData *yd; |
1587 struct yahoo_xfer_data *xfer_data; | 1592 struct yahoo_xfer_data *xfer_data; |
1588 char *service = NULL; | 1593 char *service = NULL; |
1589 char *filename = NULL; | 1594 char *filename = NULL; |
1590 char *xfer_peer_idstring = NULL; | 1595 char *xfer_peer_idstring = NULL; |
1596 char *utf8_filename | |
1591 unsigned long filesize = 0L; | 1597 unsigned long filesize = 0L; |
1592 GSList *l; | 1598 GSList *l; |
1593 GSList *filename_list = NULL; | 1599 GSList *filename_list = NULL; |
1594 GSList *size_list = NULL; | 1600 GSList *size_list = NULL; |
1595 int nooffiles = 0; | 1601 int nooffiles = 0; |
1712 xfer_data->filename_list = filename_list; | 1718 xfer_data->filename_list = filename_list; |
1713 xfer_data->size_list = size_list; | 1719 xfer_data->size_list = size_list; |
1714 | 1720 |
1715 /* Build the file transfer handle. */ | 1721 /* Build the file transfer handle. */ |
1716 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); | 1722 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); |
1723 if (xfer == NULL) | |
1724 { | |
1725 g_free(xfer_data); | |
1726 g_return_if_reached(); | |
1727 } | |
1728 | |
1717 xfer->message = NULL; | 1729 xfer->message = NULL; |
1718 | 1730 |
1719 if (xfer) | 1731 /* Set the info about the incoming file. */ |
1720 { | 1732 utf8_filename = yahoo_string_decode(gc, filename, TRUE); |
1721 /* Set the info about the incoming file. */ | 1733 purple_xfer_set_filename(xfer, utf8_filename); |
1722 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); | 1734 g_free(utf8_filename); |
1723 purple_xfer_set_filename(xfer, utf8_filename); | 1735 purple_xfer_set_size(xfer, filesize); |
1724 g_free(utf8_filename); | 1736 |
1725 purple_xfer_set_size(xfer, filesize); | 1737 xfer->data = xfer_data; |
1726 | 1738 |
1727 xfer->data = xfer_data; | 1739 /* Setup our I/O op functions */ |
1728 | 1740 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init_15); |
1729 | 1741 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); |
1730 /* Setup our I/O op functions */ | 1742 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); |
1731 purple_xfer_set_init_fnc(xfer, yahoo_xfer_init_15); | 1743 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); |
1732 purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); | 1744 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); |
1733 purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); | 1745 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); |
1734 purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); | 1746 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); |
1735 purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | 1747 purple_xfer_set_request_denied_fnc(xfer,yahoo_xfer_cancel_recv); |
1736 purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | 1748 |
1737 purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | 1749 g_hash_table_insert(yd->xfer_peer_idstring_map, |
1738 purple_xfer_set_request_denied_fnc(xfer,yahoo_xfer_cancel_recv); | 1750 xfer_data->xfer_peer_idstring, |
1739 | 1751 xfer); |
1740 g_hash_table_insert(yd->xfer_peer_idstring_map, | 1752 |
1741 xfer_data->xfer_peer_idstring, | 1753 if(nooffiles > 1) { |
1742 xfer); | 1754 gchar* message; |
1743 | 1755 message = g_strdup_printf(_("%s is trying to send you a group of %d files.\n"), xfer->who, nooffiles); |
1744 if(nooffiles > 1) { | 1756 purple_xfer_conversation_write(xfer, message, FALSE); |
1745 gchar* message; | 1757 g_free(message); |
1746 message = g_strdup_printf(_("%s is trying to send you a group of %d files.\n"), xfer->who, nooffiles); | 1758 } |
1747 purple_xfer_conversation_write(xfer, message, FALSE); | 1759 /* Now perform the request */ |
1748 g_free(message); | 1760 purple_xfer_request(xfer); |
1749 } | |
1750 /* Now perform the request */ | |
1751 purple_xfer_request(xfer); | |
1752 } | |
1753 } | 1761 } |
1754 | 1762 |
1755 void yahoo_process_filetrans_info_15(PurpleConnection *gc, struct yahoo_packet *pkt) | 1763 void yahoo_process_filetrans_info_15(PurpleConnection *gc, struct yahoo_packet *pkt) |
1756 { | 1764 { |
1757 char *from = NULL; | 1765 char *from = NULL; |