libpurple/protocols/yahoo/yahoo_picture.c

Sun, 11 Sep 2011 04:18:46 +0000

author
John Bailey <rekkanoryo@rekkanoryo.org>
date
Sun, 11 Sep 2011 04:18:46 +0000
branch
release-2.x.y
changeset 32044
364a3c96654a
parent 27959
f842ae57da4e
child 32332
07469c57c14d
child 33102
dbf343cd9e05
permissions
-rw-r--r--

Remove a bogus short-circuit check intended to prevent downloading the same icon
every time a buddy logs in. There are three problems with the check:
* The fact that we already have an icon for the buddy doesn't mean it hasn't
changed on the server since we last downloaded.
* We should really be checking against the server-provided checksum, but we
don't know how to checksum the same way the server does.
* We no longer receive a checksum at the YMSG protocol level, so we'd have to
parse such a checksum out of the picture URL, which is going to be fragile
and seems just plain stupid to me.

It seems better to me all around to just axe the check and potentially waste
some bandwidth. If someone wants to figure out a bandwidth-saving fix for this,
feel free.

At any rate, this fixes #13050.

9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * purple
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
6 * source distribution.
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
7 *
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 *
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 *
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18552
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 *
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 #include "account.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27 #include "accountopt.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28 #include "blist.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #include "debug.h"
23960
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
30 #include "privacy.h"
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #include "prpl.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32 #include "proxy.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33 #include "util.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34
27555
afb7cb5c350c Update for file renames.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27467
diff changeset
35 #include "libymsg.h"
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
36 #include "yahoo_packet.h"
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 #include "yahoo_friend.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38 #include "yahoo_picture.h"
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
40
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41 struct yahoo_fetch_picture_data {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
42 PurpleConnection *gc;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
43 char *who;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
44 int checksum;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
45 };
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
47 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
48 yahoo_fetch_picture_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
49 const gchar *pic_data, size_t len, const gchar *error_message)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 {
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
51 struct yahoo_fetch_picture_data *d;
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
52 YahooData *yd;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
54 d = user_data;
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
55 yd = d->gc->proto_data;
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
56 yd->url_datas = g_slist_remove(yd->url_datas, url_data);
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
57
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
58 if (error_message != NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
59 purple_debug_error("yahoo", "Fetching buddy icon failed: %s\n", error_message);
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
60 } else if (len == 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
61 purple_debug_error("yahoo", "Fetched an icon with length 0. Strange.\n");
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
62 } else {
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
63 char *checksum = g_strdup_printf("%i", d->checksum);
16539
75a20ae3a527 Change the imgstore and by extension, then the buddy icon code to take over
Richard Laager <rlaager@pidgin.im>
parents: 16538
diff changeset
64 purple_buddy_icons_set_for_user(purple_connection_get_account(d->gc), d->who, g_memdup(pic_data, len), len, checksum);
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
65 g_free(checksum);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 g_free(d->who);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69 g_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
72 void yahoo_process_picture(PurpleConnection *gc, struct yahoo_packet *pkt)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
74 YahooData *yd;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
75 GSList *l = pkt->hash;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 char *who = NULL, *us = NULL;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 gboolean got_icon_info = FALSE, send_icon_info = FALSE;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 char *url = NULL;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 int checksum = 0;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 while (l) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82 struct yahoo_pair *pair = l->data;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 switch (pair->key) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 case 1:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 case 4:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87 who = pair->value;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 case 5:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 us = pair->value;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 case 13: {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 int tmp;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94 tmp = strtol(pair->value, NULL, 10);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95 if (tmp == 1) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 send_icon_info = TRUE;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 } else if (tmp == 2) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 got_icon_info = TRUE;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 case 20:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 url = pair->value;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 case 192:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106 checksum = strtol(pair->value, NULL, 10);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 l = l->next;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112
27400
d8c31c7e084d This should prevent pidgin from crashing, as reported by the ticket #9426.
Sulabh Mahajan <sulabh@pidgin.im>
parents: 27361
diff changeset
113 if (!who)
d8c31c7e084d This should prevent pidgin from crashing, as reported by the ticket #9426.
Sulabh Mahajan <sulabh@pidgin.im>
parents: 27361
diff changeset
114 return;
d8c31c7e084d This should prevent pidgin from crashing, as reported by the ticket #9426.
Sulabh Mahajan <sulabh@pidgin.im>
parents: 27361
diff changeset
115
23960
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
116 if (!purple_privacy_check(purple_connection_get_account(gc), who)) {
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
117 purple_debug_info("yahoo", "Picture packet from %s dropped.\n", who);
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
118 return;
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
119 }
e57706b32d2a Patch from "Chris G." to extend the yahoo privacy to picture requests to help
Daniel Atallah <datallah@pidgin.im>
parents: 23181
diff changeset
120
9675
127db3bbb4f2 [gaim-migrate @ 10527]
Peter Lawler <pidgin@bleeter.id.au>
parents: 9329
diff changeset
121 /* Yahoo IM 6 spits out 0.png as the URL if the buddy icon is not set */
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17151
diff changeset
122 if (who && got_icon_info && url && !g_ascii_strncasecmp(url, "http://", 7)) {
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 /* TODO: make this work p2p, try p2p before the url */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
124 PurpleUtilFetchUrlData *url_data;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 struct yahoo_fetch_picture_data *data;
22145
458640401515 A patch from Gideon N. Guillen, with some minor modifications from me. This
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
126 /* use whole URL if using HTTP Proxy */
24181
e028e31dcc67 Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents: 23960
diff changeset
127 gboolean use_whole_url = yahoo_account_use_http_proxy(gc);
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
128
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 data = g_new0(struct yahoo_fetch_picture_data, 1);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 data->gc = gc;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 data->who = g_strdup(who);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 data->checksum = checksum;
25762
0c1a4287c70c Backport the parts of b859960a4a19f57f20db0536c1815a6d79e08e36 that apply to
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 25152
diff changeset
133 /* TODO: Does this need to be MSIE 5.0? */
22145
458640401515 A patch from Gideon N. Guillen, with some minor modifications from me. This
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
134 url_data = purple_util_fetch_url(url, use_whole_url,
27409
a760d82df1b3 Mimic the official client's HTTP User-Agent strings.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27400
diff changeset
135 "Mozilla/4.0 (compatible; MSIE 5.5)", FALSE,
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
136 yahoo_fetch_picture_cb, data);
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
137 if (url_data != NULL) {
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
138 yd = gc->proto_data;
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
139 yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
23181
d05abf92a22a applied changes from 9409309cfd4634425fdacbdb3d751afd0bc89a84
Daniel Atallah <datallah@pidgin.im>
parents: 23170
diff changeset
140 } else {
d05abf92a22a applied changes from 9409309cfd4634425fdacbdb3d751afd0bc89a84
Daniel Atallah <datallah@pidgin.im>
parents: 23170
diff changeset
141 g_free(data->who);
d05abf92a22a applied changes from 9409309cfd4634425fdacbdb3d751afd0bc89a84
Daniel Atallah <datallah@pidgin.im>
parents: 23170
diff changeset
142 g_free(data);
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14321
diff changeset
143 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144 } else if (who && send_icon_info) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 yahoo_send_picture_info(gc, who);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
149 void yahoo_process_picture_checksum(PurpleConnection *gc, struct yahoo_packet *pkt)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150 {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 GSList *l = pkt->hash;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152 char *who = NULL;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 int checksum = 0;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155 while (l) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 struct yahoo_pair *pair = l->data;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
158 switch (pair->key) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
159 case 4:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160 who = pair->value;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
161 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162 case 5:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163 /* us */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165 case 192:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166 checksum = strtol(pair->value, NULL, 10);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169 l = l->next;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172 if (who) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
173 PurpleBuddy *b = purple_find_buddy(gc->account, who);
16606
b31fca4f6f60 Thanks to Bleeter, yahoo will not crash for non-existent buddyicons anymore.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16539
diff changeset
174 const char *locksum = NULL;
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
175
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
176 /* FIXME: Cleanup this strtol() stuff if possible. */
17151
7d28dd13c4db Patch #1038. Fix receiving of Yahoo buddy icons. Thanks, vampire!
Sean Egan <seanegan@pidgin.im>
parents: 16757
diff changeset
177 if (b) {
7d28dd13c4db Patch #1038. Fix receiving of Yahoo buddy icons. Thanks, vampire!
Sean Egan <seanegan@pidgin.im>
parents: 16757
diff changeset
178 locksum = purple_buddy_icons_get_checksum_for_user(b);
7d28dd13c4db Patch #1038. Fix receiving of Yahoo buddy icons. Thanks, vampire!
Sean Egan <seanegan@pidgin.im>
parents: 16757
diff changeset
179 if (!locksum || (checksum != strtol(locksum, NULL, 10)))
7d28dd13c4db Patch #1038. Fix receiving of Yahoo buddy icons. Thanks, vampire!
Sean Egan <seanegan@pidgin.im>
parents: 16757
diff changeset
180 yahoo_send_picture_request(gc, who);
7d28dd13c4db Patch #1038. Fix receiving of Yahoo buddy icons. Thanks, vampire!
Sean Egan <seanegan@pidgin.im>
parents: 16757
diff changeset
181 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
185 void yahoo_process_picture_upload(PurpleConnection *gc, struct yahoo_packet *pkt)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
187 PurpleAccount *account = purple_connection_get_account(gc);
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
188 YahooData *yd = gc->proto_data;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 GSList *l = pkt->hash;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
190 char *url = NULL;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
191
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
192 while (l) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 struct yahoo_pair *pair = l->data;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
194
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195 switch (pair->key) {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196 case 5:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 /* us */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 case 27:
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
200 /* filename on our computer. */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
201 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
202 case 20: /* url at yahoo */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
203 url = pair->value;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
204 case 38: /* timestamp */
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
205 break;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
206 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207 l = l->next;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
208 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
209
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
210 if (url) {
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
211 g_free(yd->picture_url);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 yd->picture_url = g_strdup(url);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
213 purple_account_set_string(account, YAHOO_PICURL_SETTING, url);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
214 purple_account_set_int(account, YAHOO_PICCKSUM_SETTING, yd->picture_checksum);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
215 yahoo_send_picture_checksum(gc);
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
216 yahoo_send_picture_update(gc, 2);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
219
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
220 void yahoo_process_avatar_update(PurpleConnection *gc, struct yahoo_packet *pkt)
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
221 {
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
222 GSList *l = pkt->hash;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
223 char *who = NULL;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
224 int avatar = 0;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
225
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
226 while (l) {
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
227 struct yahoo_pair *pair = l->data;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
228
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
229 switch (pair->key) {
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
230 case 4:
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
231 who = pair->value;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
232 break;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
233 case 5:
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
234 /* us */
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
235 break;
27467
5fd6936c4ed7 Some more fixes for when unsetting buddy picture, for both when sending and receiving updates.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27413
diff changeset
236 case 206: /* Older versions. Still needed? */
5fd6936c4ed7 Some more fixes for when unsetting buddy picture, for both when sending and receiving updates.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27413
diff changeset
237 case 213: /* Newer versions */
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
238 /*
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
239 * 0 - No icon or avatar
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
240 * 1 - Using an avatar
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
241 * 2 - Using an icon
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
242 */
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
243 avatar = strtol(pair->value, NULL, 10);
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
244 break;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
245 }
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
246 l = l->next;
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
247 }
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
248
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
249 if (who) {
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
250 if (avatar == 2)
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
251 yahoo_send_picture_request(gc, who);
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
252 else if ((avatar == 0) || (avatar == 1)) {
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
253 YahooFriend *f;
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16076
diff changeset
254 purple_buddy_icons_set_for_user(gc->account, who, NULL, 0, NULL);
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
255 if ((f = yahoo_friend_find(gc, who)))
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
256 yahoo_friend_set_buddy_icon_need_request(f, TRUE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
257 purple_debug_misc("yahoo", "Setting user %s's icon to NULL.\n", who);
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
258 }
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
259 }
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
260 }
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13277
diff changeset
261
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
262 void yahoo_send_picture_info(PurpleConnection *gc, const char *who)
9322
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
263 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
264 YahooData *yd = gc->proto_data;
9322
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
265 struct yahoo_packet *pkt;
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
266
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9325
diff changeset
267 if (!yd->picture_url) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
268 purple_debug_warning("yahoo", "Attempted to send picture info without a picture\n");
9322
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
269 return;
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9325
diff changeset
270 }
9322
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
271
27866
4a8d47263e98 Change a bunch more of our yahoo packets to use the session ID. I believe this
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27555
diff changeset
272 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE, YAHOO_STATUS_AVAILABLE, yd->session_id);
27413
2c10bbbac69c This fixes sending updates to buddies when I change my pic.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27412
diff changeset
273 yahoo_packet_hash(pkt, "ssssi", 1, purple_connection_get_display_name(gc),
2c10bbbac69c This fixes sending updates to buddies when I change my pic.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27412
diff changeset
274 5, who,
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
275 13, "2", 20, yd->picture_url, 192, yd->picture_checksum);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
276 yahoo_packet_send_and_free(pkt, yd);
9322
d3be9630aaf1 [gaim-migrate @ 10130]
Tim Ringenbach <marv@pidgin.im>
parents: 9310
diff changeset
277 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
278
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
279 void yahoo_send_picture_request(PurpleConnection *gc, const char *who)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
280 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
281 YahooData *yd = gc->proto_data;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
282 struct yahoo_packet *pkt;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283
27866
4a8d47263e98 Change a bunch more of our yahoo packets to use the session ID. I believe this
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27555
diff changeset
284 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE, YAHOO_STATUS_AVAILABLE, yd->session_id);
27412
1db60cfcad9b This fixes buddyicon fetches for me.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27409
diff changeset
285 yahoo_packet_hash_str(pkt, 1, purple_connection_get_display_name(gc)); /* me */
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
286 yahoo_packet_hash_str(pkt, 5, who); /* the other guy */
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
287 yahoo_packet_hash_str(pkt, 13, "1"); /* 1 = request, 2 = reply */
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
288 yahoo_packet_send_and_free(pkt, yd);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
289 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
290
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
291 void yahoo_send_picture_checksum(PurpleConnection *gc)
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
292 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
293 YahooData *yd = gc->proto_data;
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
294 struct yahoo_packet *pkt;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
295
27866
4a8d47263e98 Change a bunch more of our yahoo packets to use the session ID. I believe this
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27555
diff changeset
296 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE_CHECKSUM, YAHOO_STATUS_AVAILABLE, yd->session_id);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
297 yahoo_packet_hash(pkt, "ssi", 1, purple_connection_get_display_name(gc),
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
298 212, "1", 192, yd->picture_checksum);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
299 yahoo_packet_send_and_free(pkt, yd);
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
300 }
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
301
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
302 void yahoo_send_picture_update_to_user(PurpleConnection *gc, const char *who, int type)
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
303 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
304 YahooData *yd = gc->proto_data;
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
305 struct yahoo_packet *pkt;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
306
27866
4a8d47263e98 Change a bunch more of our yahoo packets to use the session ID. I believe this
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27555
diff changeset
307 pkt = yahoo_packet_new(YAHOO_SERVICE_AVATAR_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id);
27467
5fd6936c4ed7 Some more fixes for when unsetting buddy picture, for both when sending and receiving updates.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27413
diff changeset
308 yahoo_packet_hash(pkt, "si", 3, who, 213, type);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
309 yahoo_packet_send_and_free(pkt, yd);
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
310 }
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
311
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
312 struct yspufe {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
313 PurpleConnection *gc;
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
314 int type;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
315 };
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
316
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
317 static void yahoo_send_picture_update_foreach(gpointer key, gpointer value, gpointer data)
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
318 {
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
319 const char *who = key;
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
320 YahooFriend *f = value;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
321 struct yspufe *d = data;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
322
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
323 if (f->status != YAHOO_STATUS_OFFLINE)
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
324 yahoo_send_picture_update_to_user(d->gc, who, d->type);
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
325 }
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
326
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
327 void yahoo_send_picture_update(PurpleConnection *gc, int type)
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
328 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
329 YahooData *yd = gc->proto_data;
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
330 struct yspufe data;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
331
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
332 data.gc = gc;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
333 data.type = type;
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
334
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
335 g_hash_table_foreach(yd->friends, yahoo_send_picture_update_foreach, &data);
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
336 }
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
337
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
338 void yahoo_buddy_icon_upload_data_free(struct yahoo_buddy_icon_upload_data *d)
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
339 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
340 purple_debug_misc("yahoo", "In yahoo_buddy_icon_upload_data_free()\n");
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
341
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
342 if (d->str)
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
343 g_string_free(d->str, TRUE);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
344 g_free(d->filename);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
345 if (d->watcher)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
346 purple_input_remove(d->watcher);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
347 if (d->fd != -1)
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
348 close(d->fd);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
349 g_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
350 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
352 /* we couldn't care less about the server's response, but yahoo gets grumpy if we close before it sends it */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
353 static void yahoo_buddy_icon_upload_reading(gpointer data, gint source, PurpleInputCondition condition)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 struct yahoo_buddy_icon_upload_data *d = data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
356 PurpleConnection *gc = d->gc;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 char buf[1024];
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
358 int ret;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
360 if (!PURPLE_CONNECTION_IS_VALID(gc)) {
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361 yahoo_buddy_icon_upload_data_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 return;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
365 ret = read(d->fd, buf, sizeof(buf));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
366
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
367 if (ret < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
368 return;
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
369 else if (ret <= 0) {
25152
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
370 /* There are other problems if d->str->len overflows, so shut up the
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
371 * warning on 64-bit. */
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
372 purple_debug_info("yahoo", "Buddy icon upload response (%" G_GSIZE_FORMAT ") bytes (> ~400 indicates failure):\n%.*s\n",
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
373 d->str->len, (guint)d->str->len, d->str->str);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
374
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375 yahoo_buddy_icon_upload_data_free(d);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
376 return;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
377 }
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
378
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
379 g_string_append_len(d->str, buf, ret);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
382 static void yahoo_buddy_icon_upload_pending(gpointer data, gint source, PurpleInputCondition condition)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383 {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 struct yahoo_buddy_icon_upload_data *d = data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
385 PurpleConnection *gc = d->gc;
23073
e731fbd84c71 Use gssize instead of ssize_t as the latter isn't available everywhere.
Daniel Atallah <datallah@pidgin.im>
parents: 22145
diff changeset
386 gssize wrote;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
388 if (!PURPLE_CONNECTION_IS_VALID(gc)) {
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 yahoo_buddy_icon_upload_data_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 return;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
391 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
392
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
393 wrote = write(d->fd, d->str->str + d->pos, d->str->len - d->pos);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
394 if (wrote < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
395 return;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 if (wrote <= 0) {
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
397 purple_debug_info("yahoo", "Error uploading buddy icon.\n");
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398 yahoo_buddy_icon_upload_data_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399 return;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 d->pos += wrote;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402 if (d->pos >= d->str->len) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
403 purple_debug_misc("yahoo", "Finished uploading buddy icon.\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
404 purple_input_remove(d->watcher);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
405 /* Clean out the sent buffer and reuse it to read the result */
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
406 g_string_free(d->str, TRUE);
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
407 d->str = g_string_new("");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
408 d->watcher = purple_input_add(d->fd, PURPLE_INPUT_READ, yahoo_buddy_icon_upload_reading, d);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411
14182
517f4531b8a0 [gaim-migrate @ 16754]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
412 static void yahoo_buddy_icon_upload_connected(gpointer data, gint source, const gchar *error_message)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
413 {
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
414 struct yahoo_buddy_icon_upload_data *d = data;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415 struct yahoo_packet *pkt;
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
416 gchar *tmp, *header;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
417 guchar *pkt_buf;
10576
ce7a6c585bc6 [gaim-migrate @ 11970]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10394
diff changeset
418 const char *host;
13272
fd4f3356640f [gaim-migrate @ 15637]
Daniel Atallah <datallah@pidgin.im>
parents: 13201
diff changeset
419 int port;
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
420 gsize pkt_buf_len;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
421 PurpleConnection *gc = d->gc;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
422 PurpleAccount *account;
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
423 YahooData *yd;
24181
e028e31dcc67 Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents: 23960
diff changeset
424 /* use whole URL if using HTTP Proxy */
e028e31dcc67 Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents: 23960
diff changeset
425 gboolean use_whole_url = yahoo_account_use_http_proxy(gc);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
426
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
427 account = purple_connection_get_account(gc);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
428 yd = gc->proto_data;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
429
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
430 /* Buddy icon connect is now complete; clear the PurpleProxyConnectData */
14693
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
431 yd->buddy_icon_connect_data = NULL;
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
432
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
433 if (source < 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
434 purple_debug_error("yahoo", "Buddy icon upload failed: %s\n", error_message);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
435 yahoo_buddy_icon_upload_data_free(d);
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
436 return;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
437 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
438
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
439 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE_UPLOAD, YAHOO_STATUS_AVAILABLE, yd->session_id);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
440
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
441 tmp = g_strdup_printf("%" G_GSIZE_FORMAT, d->str->len);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
442 /* 1 = me, 38 = expire time(?), 0 = me, 28 = size, 27 = filename, 14 = NULL, 29 = data */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
443 yahoo_packet_hash_str(pkt, 1, purple_connection_get_display_name(gc));
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
444 yahoo_packet_hash_str(pkt, 38, "604800"); /* time til expire */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
445 purple_account_set_int(account, YAHOO_PICEXPIRE_SETTING, time(NULL) + 604800);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
446 yahoo_packet_hash_str(pkt, 0, purple_connection_get_display_name(gc));
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
447 yahoo_packet_hash_str(pkt, 28, tmp);
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
448 g_free(tmp);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
449 yahoo_packet_hash_str(pkt, 27, d->filename);
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
450 yahoo_packet_hash_str(pkt, 14, "");
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
451 /* 4 padding for the 29 key name */
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
452 pkt_buf_len = yahoo_packet_build(pkt, 4, FALSE, yd->jp, &pkt_buf);
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
453 yahoo_packet_free(pkt);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
454
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
455 /* header + packet + "29" + 0xc0 + 0x80) + pictureblob */
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
456
27958
761556eeff82 And clean up two instances where Yahoo Japan needs to be correctly detected
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27866
diff changeset
457 host = purple_account_get_string(account, "xfer_host", yd->jp? YAHOOJP_XFER_HOST : YAHOO_XFER_HOST);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
458 port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
459 tmp = g_strdup_printf("%s:%d", host, port);
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
460 header = g_strdup_printf("POST %s%s/notifyft HTTP/1.1\r\n"
25762
0c1a4287c70c Backport the parts of b859960a4a19f57f20db0536c1815a6d79e08e36 that apply to
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 25152
diff changeset
461 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n"
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
462 "Cookie: T=%s; Y=%s\r\n"
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
463 "Host: %s\r\n"
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
464 "Content-Length: %" G_GSIZE_FORMAT "\r\n"
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
465 "Cache-Control: no-cache\r\n\r\n",
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
466 use_whole_url ? "http://" : "", use_whole_url ? tmp : "",
27335
06a805d4e690 Strip trailing whitespace and comment #endif marcos that close #ifdef macros
Mark Doliner <markdoliner@pidgin.im>
parents: 27052
diff changeset
467 yd->cookie_t, yd->cookie_y,
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
468 tmp,
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
469 pkt_buf_len + 4 + d->str->len);
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
470 g_free(tmp);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
471
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
472 /* There's no magic here, we just need to prepend in reverse order */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
473 g_string_prepend(d->str, "29\xc0\x80");
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
474
14321
21c565de27ea [gaim-migrate @ 16941]
Tim Ringenbach <marv@pidgin.im>
parents: 14254
diff changeset
475 g_string_prepend_len(d->str, (char *)pkt_buf, pkt_buf_len);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
476 g_free(pkt_buf);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
477
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
478 g_string_prepend(d->str, header);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
479 g_free(header);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480
25152
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
481 /* There are other problems if we're uploading over 4GB of data */
128b99dfb286 Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents: 24181
diff changeset
482 purple_debug_info("yahoo", "Buddy icon upload data:\n%.*s\n", (guint)d->str->len, d->str->str);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
483
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
484 d->fd = source;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
485 d->watcher = purple_input_add(d->fd, PURPLE_INPUT_WRITE, yahoo_buddy_icon_upload_pending, d);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12412
diff changeset
486
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
487 yahoo_buddy_icon_upload_pending(d, d->fd, PURPLE_INPUT_WRITE);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
490 void yahoo_buddy_icon_upload(PurpleConnection *gc, struct yahoo_buddy_icon_upload_data *d)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
492 PurpleAccount *account = purple_connection_get_account(gc);
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
493 YahooData *yd = gc->proto_data;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
495 if (yd->buddy_icon_connect_data != NULL) {
14693
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
496 /* Cancel any in-progress buddy icon upload */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
497 purple_proxy_connect_cancel(yd->buddy_icon_connect_data);
14693
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
498 yd->buddy_icon_connect_data = NULL;
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
499 }
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
500
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
501 yd->buddy_icon_connect_data = purple_proxy_connect(NULL, account,
27958
761556eeff82 And clean up two instances where Yahoo Japan needs to be correctly detected
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27866
diff changeset
502 purple_account_get_string(account, "xfer_host",
761556eeff82 And clean up two instances where Yahoo Japan needs to be correctly detected
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27866
diff changeset
503 yd->jp? YAHOOJP_XFER_HOST : YAHOO_XFER_HOST),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
504 purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
505 yahoo_buddy_icon_upload_connected, d);
14693
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
506
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
507 if (yd->buddy_icon_connect_data == NULL)
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
508 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
509 purple_debug_error("yahoo", "Uploading our buddy icon failed to connect.\n");
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
510 yahoo_buddy_icon_upload_data_free(d);
14693
9e3d4f9609e1 [gaim-migrate @ 17377]
Evan Schoenberg <evands@pidgin.im>
parents: 14686
diff changeset
511 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
512 }
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
513
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
514 static int yahoo_buddy_icon_calculate_checksum(const guchar *data, gsize len)
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
515 {
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
516 /* This code is borrowed from Kopete, which seems to be managing to calculate
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
517 checksums in such a manner that Yahoo!'s servers are happy */
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
518
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
519 const guchar *p = data;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
520 int checksum = 0, g, i = len;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
521
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
522 while(i--) {
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
523 checksum = (checksum << 4) + *p++;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
524
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
525 if((g = (checksum & 0xf0000000)) != 0)
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
526 checksum ^= g >> 23;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
527
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
528 checksum &= ~g;
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
529 }
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
530
25895
ab35a3dda3c5 Add a newline to this log message
Mark Doliner <markdoliner@pidgin.im>
parents: 25152
diff changeset
531 purple_debug_misc("yahoo", "Calculated buddy icon checksum: %d\n", checksum);
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
532
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
533 return checksum;
27335
06a805d4e690 Strip trailing whitespace and comment #endif marcos that close #ifdef macros
Mark Doliner <markdoliner@pidgin.im>
parents: 27052
diff changeset
534 }
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
535
16538
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
536 void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537 {
27959
f842ae57da4e Move from "struct yahoo_data" to "YahooData" to be consistent with other structs
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 27958
diff changeset
538 YahooData *yd = gc->proto_data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
539 PurpleAccount *account = gc->account;
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
540
16538
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
541 if (img == NULL) {
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
542 g_free(yd->picture_url);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
543 yd->picture_url = NULL;
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
544
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
545 /* TODO: don't we have to clear it on the server too?! */
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
546
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
547 purple_account_set_string(account, YAHOO_PICURL_SETTING, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
548 purple_account_set_int(account, YAHOO_PICCKSUM_SETTING, 0);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
549 purple_account_set_int(account, YAHOO_PICEXPIRE_SETTING, 0);
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
550 if (yd->logged_in)
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
551 /* Tell everyone we ain't got one no more */
9310
bd81f41ae944 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
552 yahoo_send_picture_update(gc, 0);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
553
16538
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
554 } else {
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
555 gconstpointer data = purple_imgstore_get_data(img);
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
556 size_t len = purple_imgstore_get_size(img);
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
557 GString *s = g_string_new_len(data, len);
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
558 struct yahoo_buddy_icon_upload_data *d;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
559 int oldcksum = purple_account_get_int(account, YAHOO_PICCKSUM_SETTING, 0);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
560 int expire = purple_account_get_int(account, YAHOO_PICEXPIRE_SETTING, 0);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
561 const char *oldurl = purple_account_get_string(account, YAHOO_PICURL_SETTING, NULL);
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
562
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
563 yd->picture_checksum = yahoo_buddy_icon_calculate_checksum(data, len);
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
564
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
565 if ((yd->picture_checksum == oldcksum) &&
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
566 (expire > (time(NULL) + 60*60*24)) && oldurl)
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
567 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
568 purple_debug_misc("yahoo", "buddy icon is up to date. Not reuploading.\n");
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
569 g_string_free(s, TRUE);
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
570 g_free(yd->picture_url);
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
571 yd->picture_url = g_strdup(oldurl);
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
572 return;
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
573 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
574
16757
aae5c0ced2da Update the comments about yahoo buddy icons. Only send the filename and not the whole path.
Tim Ringenbach <marv@pidgin.im>
parents: 16606
diff changeset
575 /* We use this solely for sending a filename to the server */
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
576 d = g_new0(struct yahoo_buddy_icon_upload_data, 1);
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
577 d->gc = gc;
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
578 d->str = s;
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
579 d->fd = -1;
23170
456cbed76e54 applied changes from c7504bbbe35f5bef52032c0cdf6bc7182128a469
Daniel Atallah <datallah@pidgin.im>
parents: 23156
diff changeset
580 d->filename = g_strdup(purple_imgstore_get_filename(img));
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
581
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
582 if (!yd->logged_in) {
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
583 yd->picture_upload_todo = d;
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
584 return;
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
585 }
9306
3df21f4d438b [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
586
15239
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
587 yahoo_buddy_icon_upload(gc, d);
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
588
f31e2c11334e [gaim-migrate @ 17964]
Mark Doliner <markdoliner@pidgin.im>
parents: 15042
diff changeset
589 }
15245
3abed8bd82fb [gaim-migrate @ 17972]
Mark Doliner <markdoliner@pidgin.im>
parents: 15239
diff changeset
590 }

mercurial