summaryrefslogtreecommitdiff
path: root/libpurple/protocols/yahoo
diff options
context:
space:
mode:
authorJohn Bailey <rekkanoryo@rekkanoryo.org>2008-02-24 18:20:52 +0000
committerJohn Bailey <rekkanoryo@rekkanoryo.org>2008-02-24 18:20:52 +0000
commit9a2c542e76e997322cdf8039d8b59969639e426d (patch)
tree6281e0b52bbab91e192ae2bc96ef346c1e471355 /libpurple/protocols/yahoo
parentb89f8c03c799dcd023fe383a851a2a1f8e090644 (diff)
downloadpidgin-9a2c542e76e997322cdf8039d8b59969639e426d.tar.gz
A patch from Gideon N. Guillen, with some minor modifications from me. This
patch fixes retrieval of buddy icons and setting of server-side aliases when using an HTTP proxy.
Diffstat (limited to 'libpurple/protocols/yahoo')
-rw-r--r--libpurple/protocols/yahoo/yahoo.c7
-rw-r--r--libpurple/protocols/yahoo/yahoo_aliases.c23
-rw-r--r--libpurple/protocols/yahoo/yahoo_picture.c7
-rw-r--r--libpurple/protocols/yahoo/yahoo_profile.c8
4 files changed, 36 insertions, 9 deletions
diff --git a/libpurple/protocols/yahoo/yahoo.c b/libpurple/protocols/yahoo/yahoo.c
index 03a9b59557..e6b06bb3a2 100644
--- a/libpurple/protocols/yahoo/yahoo.c
+++ b/libpurple/protocols/yahoo/yahoo.c
@@ -3484,8 +3484,13 @@ static void yahoo_show_inbox(PurplePluginAction *action)
"Host: login.yahoo.com\r\n"
"Content-Length: 0\r\n\r\n",
yd->cookie_t, yd->cookie_y);
+ gboolean use_whole_url = FALSE;
- url_data = purple_util_fetch_url_request(base_url, FALSE,
+ /* use whole URL if using HTTP Proxy */
+ if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
+ use_whole_url = TRUE;
+
+ url_data = purple_util_fetch_url_request(base_url, use_whole_url,
"Mozilla/4.0 (compatible; MSIE 5.5)", TRUE, request, FALSE,
yahoo_get_inbox_token_cb, gc);
diff --git a/libpurple/protocols/yahoo/yahoo_aliases.c b/libpurple/protocols/yahoo/yahoo_aliases.c
index f31216c841..fdeeb3c6c9 100644
--- a/libpurple/protocols/yahoo/yahoo_aliases.c
+++ b/libpurple/protocols/yahoo/yahoo_aliases.c
@@ -143,21 +143,27 @@ yahoo_fetch_aliases(PurpleConnection *gc)
char *request, *webpage, *webaddress;
PurpleUtilFetchUrlData *url_data;
+ gboolean use_whole_url = FALSE;
+
+ /* use whole URL if using HTTP Proxy */
+ if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
+ use_whole_url = TRUE;
+
/* Using callback_data so I have access to gc in the callback function */
cb = g_new0(struct callback_data, 1);
cb->gc = gc;
/* Build all the info to make the web request */
purple_url_parse(url, &webaddress, NULL, &webpage, NULL, NULL);
- request = g_strdup_printf("GET /%s HTTP/1.1\r\n"
+ request = g_strdup_printf("GET %s%s/%s HTTP/1.1\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n"
"Cookie: T=%s; Y=%s\r\n"
"Host: %s\r\n"
"Cache-Control: no-cache\r\n\r\n",
- webpage, yd->cookie_t,yd->cookie_y, webaddress);
+ use_whole_url ? "http://" : "", use_whole_url ? webaddress : "", webpage, yd->cookie_t,yd->cookie_y, webaddress);
/* We have a URL and some header information, let's connect and get some aliases */
- url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb);
+ url_data = purple_util_fetch_url_request(url, use_whole_url, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb);
if (url_data != NULL) {
yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
}
@@ -225,6 +231,11 @@ yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
struct callback_data *cb;
PurpleBuddy *buddy;
PurpleUtilFetchUrlData *url_data;
+ gboolean use_whole_url = FALSE;
+
+ /* use whole URL if using HTTP Proxy */
+ if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
+ use_whole_url = TRUE;
g_return_if_fail(alias!= NULL);
g_return_if_fail(who!=NULL);
@@ -254,18 +265,18 @@ yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
"<ct e=\"1\" yi='%s' id='%s' nn='%s' pr='0' />\n</ab>\r\n",
gc->account->username, who, yu->id, g_markup_escape_text(alias, strlen(alias)));
- request = g_strdup_printf("POST /%s HTTP/1.1\r\n"
+ request = g_strdup_printf("POST %s%s/%s HTTP/1.1\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n"
"Cookie: T=%s; Y=%s\r\n"
"Host: %s\r\n"
"Content-Length: %" G_GSIZE_FORMAT "\r\n"
"Cache-Control: no-cache\r\n\r\n"
"%s",
- webpage, yd->cookie_t,yd->cookie_y, webaddress,
+ use_whole_url ? "http://" : "", use_whole_url ? webaddress : "", webpage, yd->cookie_t,yd->cookie_y, webaddress,
strlen(content), content);
/* We have a URL and some header information, let's connect and update the alias */
- url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb);
+ url_data = purple_util_fetch_url_request(url, use_whole_url, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb);
if (url_data != NULL) {
yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
}
diff --git a/libpurple/protocols/yahoo/yahoo_picture.c b/libpurple/protocols/yahoo/yahoo_picture.c
index 86e8b32964..0f40690963 100644
--- a/libpurple/protocols/yahoo/yahoo_picture.c
+++ b/libpurple/protocols/yahoo/yahoo_picture.c
@@ -116,6 +116,11 @@ void yahoo_process_picture(PurpleConnection *gc, struct yahoo_packet *pkt)
struct yahoo_fetch_picture_data *data;
PurpleBuddy *b = purple_find_buddy(gc->account, who);
const char *locksum = NULL;
+ gboolean use_whole_url = FALSE;
+
+ /* use whole URL if using HTTP Proxy */
+ if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
+ use_whole_url = TRUE;
/* FIXME: Cleanup this strtol() stuff if possible. */
if (b && (locksum = purple_buddy_icons_get_checksum_for_user(b)) != NULL &&
@@ -126,7 +131,7 @@ void yahoo_process_picture(PurpleConnection *gc, struct yahoo_packet *pkt)
data->gc = gc;
data->who = g_strdup(who);
data->checksum = checksum;
- url_data = purple_util_fetch_url(url, FALSE,
+ url_data = purple_util_fetch_url(url, use_whole_url,
"Mozilla/4.0 (compatible; MSIE 5.0)", FALSE,
yahoo_fetch_picture_cb, data);
if (url_data != NULL) {
diff --git a/libpurple/protocols/yahoo/yahoo_profile.c b/libpurple/protocols/yahoo/yahoo_profile.c
index f5c9161166..82d0f6a452 100644
--- a/libpurple/protocols/yahoo/yahoo_profile.c
+++ b/libpurple/protocols/yahoo/yahoo_profile.c
@@ -932,11 +932,17 @@ static void yahoo_got_info(PurpleUtilFetchUrlData *url_data, gpointer user_data,
/* Try to put the photo in there too, if there's one */
if (photo_url_text) {
PurpleUtilFetchUrlData *url_data;
+ gboolean use_whole_url = FALSE;
+
+ /* use whole URL if using HTTP Proxy */
+ if ((info_data->gc->account->proxy_info) && (info_data->gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
+ use_whole_url = TRUE;
+
/* User-uploaded photos use a different server that requires the Host
* header, but Yahoo Japan will use the "chunked" content encoding if
* we specify HTTP 1.1. So we have to specify 1.0 & fix purple_util_fetch_url
*/
- url_data = purple_util_fetch_url(photo_url_text, FALSE, NULL,
+ url_data = purple_util_fetch_url(photo_url_text, use_whole_url, NULL,
FALSE, yahoo_got_photo, info2_data);
if (url_data != NULL)
yd->url_datas = g_slist_prepend(yd->url_datas, url_data);