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;