# HG changeset patch # User Sadrul Habib Chowdhury # Date 1190379041 0 # Node ID b6a01d947a8a9dbb8dcd2b90198077c92be2e470 # Parent 383b9180b2c820aeb20b5c4ce385ea267fbad9ee Add and remove url-datas for alias update requests. diff -r 383b9180b2c8 -r b6a01d947a8a libpurple/protocols/yahoo/yahoo_aliases.c --- a/libpurple/protocols/yahoo/yahoo_aliases.c Fri Sep 21 12:48:42 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_aliases.c Fri Sep 21 12:50:41 2007 +0000 @@ -45,7 +45,7 @@ */ struct callback_data { PurpleConnection *gc; - const char *id; + char *id; }; @@ -56,11 +56,16 @@ static void yahoo_fetch_aliases_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,const gchar *url_text, size_t len, const gchar *error_message) { + struct callback_data *cb = user_data; + PurpleConnection *gc = cb->gc; + struct yahoo_data *yd = gc->proto_data; + + yd->url_datas = g_slist_remove(yd->url_datas, url_data); + if (len == 0) { purple_debug_info("yahoo","No Aliases to process\n"); } else { const char *yid, *full_name, *nick_name, *alias, *id, *fn, *ln, *nn; - struct callback_data *cb = user_data; PurpleBuddy *b = NULL; xmlnode *item, *contacts; @@ -123,8 +128,9 @@ } } xmlnode_free(contacts); - g_free(cb); } + g_free(cb->id); + g_free(cb); } void @@ -134,6 +140,7 @@ struct callback_data *cb; char *url, *request, *webpage, *webaddress, *strtmp; int inttmp; + PurpleUtilFetchUrlData *url_data; /* Using callback_data so I have access to gc in the callback function */ cb = g_new0(struct callback_data, 1); @@ -150,7 +157,12 @@ webpage, yd->cookie_t,yd->cookie_y, webaddress); /* We have a URL and some header information, let's connect and get some aliases */ - purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb); + url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb); + if (url_data != NULL) { + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + } else { + g_free(cb); + } g_free(url); g_free(request); @@ -165,6 +177,11 @@ { xmlnode *node, *result; struct callback_data *cb = user_data; + PurpleConnection *gc = cb->gc; + struct yahoo_data *yd; + + yd = gc->proto_data; + yd->url_datas = g_slist_remove(yd->url_datas, url_data); result = xmlnode_from_str(url_text, -1); @@ -184,6 +201,7 @@ purple_debug_info("yahoo", "Alias update failed (No contact record returned)\n"); } + g_free(cb->id); g_free(cb); xmlnode_free(result); } @@ -197,6 +215,7 @@ int inttmp; struct callback_data *cb; PurpleBuddy *buddy; + PurpleUtilFetchUrlData *url_data; g_return_if_fail(alias!= NULL); g_return_if_fail(who!=NULL); @@ -216,6 +235,7 @@ /* Using callback_data so I have access to gc in the callback function */ cb = g_new0(struct callback_data, 1); cb->id = g_strdup(yu->id); + cb->gc = gc; /* Build all the info to make the web request */ url = g_strdup(YAHOO_ALIAS_UPDATE_URL); @@ -236,7 +256,13 @@ strlen(content), content); /* We have a URL and some header information, let's connect and update the alias */ - purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb); + url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb); + if (url_data != NULL) { + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + } else { + g_free(cb->id); + g_free(cb); + } g_free(content); g_free(url);