annotate src/protocols/yahoo/yahoo_picture.c @ 9310:085190b9dd64

[gaim-migrate @ 10118] This is supposed to make us alert our buddies when we change our buddy icon, or turn it off. Except it crashes when we turn it off. But I think that's either Sean's fault or else Chip's fault. Also its supposed to make us announce our buddy icon when we log on if we have an old one set. But I don't think it does. Or was that the last commit that was supposed to do taht? either way it doesn't work for some reason, I need more packet dumps. It does succeed in announing our buddy icon to everyone when we set one. Well except people not on our list. committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Sat, 19 Jun 2004 07:11:53 +0000
parents 04a3e9e869ee
children 119f8a2c00b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /*
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * gaim
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
6 * source distribution.
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
7 *
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
04a3e9e869ee [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
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 *
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 *
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 *
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 #include "account.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27 #include "accountopt.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28 #include "blist.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #include "debug.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "prpl.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #include "proxy.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32 #include "util.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34 #include "yahoo.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35 #include "yahoo_friend.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36 #include "yahoo_picture.h"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39 struct yahoo_fetch_picture_data {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
40 GaimConnection *gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41 char *who;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
42 int checksum;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
43 };
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
44
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
45
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
46
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47 void yahoo_fetch_picture_cb(void *user_data, const char *pic_data, size_t len)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49 struct yahoo_fetch_picture_data *d = user_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 GaimBuddy *b;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 if (GAIM_CONNECTION_IS_VALID(d->gc) && len) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53 gaim_buddy_icons_set_for_user(gaim_connection_get_account(d->gc), d->who, (void *)pic_data, len);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
54 b = gaim_find_buddy(gaim_connection_get_account(d->gc), d->who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
55 if (b)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56 gaim_blist_node_set_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY, d->checksum);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 } else {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
58 gaim_debug_error("yahoo", "Fetching buddy icon failed.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
59 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
60
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
61 g_free(d->who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62 g_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
64
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
65 void yahoo_send_picture_info(GaimConnection *gc, const char *who)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 struct yahoo_data *yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 struct yahoo_packet *pkt;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69 char *buf;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 if (!yd->picture_url)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
72 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE, YAHOO_STATUS_AVAILABLE, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
75 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 yahoo_packet_hash(pkt, 4, gaim_connection_get_display_name(gc));
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 yahoo_packet_hash(pkt, 5, who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 yahoo_packet_hash(pkt, 13, "2");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 yahoo_packet_hash(pkt, 20, yd->picture_url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80 buf = g_strdup_printf("%d", yd->picture_checksum);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 yahoo_packet_hash(pkt, 192, buf);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83 yahoo_send_packet(yd, pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 yahoo_packet_free(pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 g_free(buf);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88 void yahoo_process_picture(GaimConnection *gc, struct yahoo_packet *pkt)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 GSList *l = pkt->hash;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 char *who = NULL, *us = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 gboolean got_icon_info = FALSE, send_icon_info = FALSE;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 char *url = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94 int checksum = 0;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 while (l) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 struct yahoo_pair *pair = l->data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 switch (pair->key) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 case 1:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101 case 4:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 who = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104 case 5:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 us = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 case 13: {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 int tmp;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109 tmp = strtol(pair->value, NULL, 10);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 if (tmp == 1) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 send_icon_info = TRUE;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112 } else if (tmp == 2) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113 got_icon_info = TRUE;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
114 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117 case 20:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118 url = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120 case 192:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 checksum = strtol(pair->value, NULL, 10);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 l = l->next;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 if (who && got_icon_info && url) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 /* TODO: make this work p2p, try p2p before the url */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 struct yahoo_fetch_picture_data *data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 GaimBuddy *b = gaim_find_buddy(gc->account, who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 if (b && (checksum == gaim_blist_node_get_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)))
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
133 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135 data = g_new0(struct yahoo_fetch_picture_data, 1);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136 data->gc = gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
137 data->who = g_strdup(who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
138 data->checksum = checksum;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 gaim_url_fetch(url, FALSE, "Mozilla/4.0 (compatible; MSIE 5.0)", FALSE,
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140 yahoo_fetch_picture_cb, data);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 } else if (who && send_icon_info) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 yahoo_send_picture_info(gc, who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 void yahoo_process_picture_update(GaimConnection *gc, struct yahoo_packet *pkt)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
149 GSList *l = pkt->hash;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150 char *who = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 int icon = 0;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 while (l) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 struct yahoo_pair *pair = l->data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 switch (pair->key) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157 case 4:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
158 who = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
159 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160 case 5:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
161 /* us */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163 case 206:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 icon = strtol(pair->value, NULL, 10);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 l = l->next;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 if (who) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 if (icon == 2)
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
172 yahoo_send_picture_request(gc, who);
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
173 else if (icon == 0)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174 gaim_buddy_icons_set_for_user(gc->account, who, NULL, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178 void yahoo_process_picture_checksum(GaimConnection *gc, struct yahoo_packet *pkt)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
179 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 GSList *l = pkt->hash;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
181 char *who = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182 int checksum = 0;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184 while (l) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185 struct yahoo_pair *pair = l->data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
187 switch (pair->key) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
188 case 4:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 who = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
190 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
191 case 5:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
192 /* us */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
194 case 192:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195 checksum = strtol(pair->value, NULL, 10);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198 l = l->next;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
200
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
201 if (who) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
202 GaimBuddy *b = gaim_find_buddy(gc->account, who);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
203 if (b && (checksum != gaim_blist_node_get_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)))
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
204 yahoo_send_picture_request(gc, who);
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
205 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
206 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
208 void yahoo_process_picture_upload(GaimConnection *gc, struct yahoo_packet *pkt)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
209 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
210 GaimAccount *account = gaim_connection_get_account(gc);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
211 struct yahoo_data *yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 GSList *l = pkt->hash;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
213 char *url = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
214
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215 while (l) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
216 struct yahoo_pair *pair = l->data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218 switch (pair->key) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
219 case 5:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
220 /* us */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
221 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
222 case 27:
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
223 /* filename on our computer. */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
225 case 20: /* url at yahoo */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
226 url = pair->value;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
227 case 38: /* timestamp */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228 break;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
229 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230 l = l->next;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
231 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
232
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233 if (url) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
234 if (yd->picture_url)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 g_free(yd->picture_url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 yd->picture_url = g_strdup(url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237 gaim_account_set_string(account, YAHOO_PICURL_SETTING, url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
238 gaim_account_set_int(account, YAHOO_PICCKSUM_SETTING, yd->picture_checksum);
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
239 yahoo_send_picture_update(gc, 2);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
240 yahoo_send_picture_checksum(gc);
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
243
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
245 void yahoo_send_picture_request(GaimConnection *gc, const char *who)
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
247 struct yahoo_data *yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248 struct yahoo_packet *pkt;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
249
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE, YAHOO_STATUS_AVAILABLE, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251 yahoo_packet_hash(pkt, 4, gaim_connection_get_display_name(gc)); /* me */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252 yahoo_packet_hash(pkt, 5, who); /* the other guy */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 yahoo_packet_hash(pkt, 13, "1"); /* 1 = request, 2 = reply */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254 yahoo_send_packet(yd, pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
255 yahoo_packet_free(pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
257
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
258 void yahoo_send_picture_checksum(GaimConnection *gc)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
259 {
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
260 struct yahoo_data *yd = gc->proto_data;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
261 struct yahoo_packet *pkt;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
262 char *cksum = g_strdup_printf("%d", yd->picture_checksum);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
263
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
264 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE_CHECKSUM, YAHOO_STATUS_AVAILABLE, 0);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
265 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
266 yahoo_packet_hash(pkt, 212, "1");
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
267 yahoo_packet_hash(pkt, 192, cksum);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
268 yahoo_send_packet(yd, pkt);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
269 yahoo_packet_free(pkt);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
270 g_free(cksum);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
271 }
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
272
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
273 void yahoo_send_picture_update_to_user(GaimConnection *gc, const char *who, int type)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
274 {
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
275 struct yahoo_data *yd = gc->proto_data;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
276 struct yahoo_packet *pkt;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
277 char *typestr = g_strdup_printf("%d", type);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
278
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
279 pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE_UPDATE, YAHOO_STATUS_AVAILABLE, 0);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
280 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
281 yahoo_packet_hash(pkt, 5, who);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
282 yahoo_packet_hash(pkt, 206, typestr);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
283 yahoo_send_packet(yd, pkt);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
284 yahoo_packet_free(pkt);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
285
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
286 g_free(typestr);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
287 }
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
288
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
289 struct yspufe {
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
290 GaimConnection *gc;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
291 int type;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
292 };
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
293
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
294 static void yahoo_send_picture_update_foreach(gpointer key, gpointer value, gpointer data)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
295 {
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
296 char *who = key;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
297 YahooFriend *f = value;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
298 struct yspufe *d = data;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
299
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
300 if (f->status != YAHOO_STATUS_OFFLINE)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
301 yahoo_send_picture_update_to_user(d->gc, who, d->type);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
302 }
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
303
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
304 void yahoo_send_picture_update(GaimConnection *gc, int type)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
305 {
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
306 struct yahoo_data *yd = gc->proto_data;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
307 struct yspufe data;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
308
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
309 data.gc = gc;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
310 data.type = type;
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
311
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
312 g_hash_table_foreach(yd->friends, yahoo_send_picture_update_foreach, &data);
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
313 }
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
314
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
315 void yahoo_buddy_icon_upload_data_free(struct yahoo_buddy_icon_upload_data *d)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317 gaim_debug_misc("yahoo", "In yahoo_buddy_icon_upload_data_free()\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319 if (d->str)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 g_string_free(d->str, TRUE);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321 if (d->filename)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
322 g_free(d->filename);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323 if (d->watcher)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 gaim_input_remove(d->watcher);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325 if (d->fd != -1)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
326 close(d->fd);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
327 g_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
328 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
329
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
330 /* we could care less about the server's responce, but yahoo gets grumpy if we close before it sends it */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
331 static void yahoo_buddy_icon_upload_reading(gpointer data, gint source, GaimInputCondition condition)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
332 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
333 struct yahoo_buddy_icon_upload_data *d = data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
334 GaimConnection *gc = d->gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
335 char buf[1024];
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
336
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
337 if (!GAIM_CONNECTION_IS_VALID(gc)) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
338 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
339 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
340 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
341
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
342 if (read(d->fd, buf, sizeof(buf)) <= 0)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
343 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
344 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
345
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
346 static void yahoo_buddy_icon_upload_pending(gpointer data, gint source, GaimInputCondition condition)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
347 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
348 struct yahoo_buddy_icon_upload_data *d = data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
349 GaimConnection *gc = d->gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
350 ssize_t wrote;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352 if (!GAIM_CONNECTION_IS_VALID(gc)) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 wrote = write(d->fd, d->str->str + d->pos, d->str->len - d->pos);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358 if (wrote <= 0) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 d->pos += wrote;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363 if (d->pos >= d->str->len) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364 gaim_debug_misc("yahoo", "Finished uploading buddy icon.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
365 gaim_input_remove(d->watcher);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
366 d->watcher = gaim_input_add(d->fd, GAIM_INPUT_READ, yahoo_buddy_icon_upload_reading, d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
367 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
368 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
369
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
370 static void yahoo_buddy_icon_upload_connected(gpointer data, gint source, GaimInputCondition condition)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
371 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
372 struct yahoo_buddy_icon_upload_data *d = data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
373 struct yahoo_packet *pkt;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
374 gchar *size, *post, *buf;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375 int content_length;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 GaimConnection *gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
377 GaimAccount *account;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378 struct yahoo_data *yd;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 if (!d)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
382
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 gc = d->gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
385 account = gaim_connection_get_account(gc);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
386 yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
388
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 if (source < 0) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 gaim_debug_error("yahoo", "Buddy icon upload failed, no file desc.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
391 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
392 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
393 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395 d->fd = source;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 d->watcher = gaim_input_add(d->fd, GAIM_INPUT_WRITE, yahoo_buddy_icon_upload_pending, d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
397
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398 pkt = yahoo_packet_new(0xc2, YAHOO_STATUS_AVAILABLE, yd->session_id);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 size = g_strdup_printf("%d", d->str->len);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 /* 1 = me, 38 = expire time(?), 0 = me, 28 = size, 27 = filename, 14 = NULL, 29 = data */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
403 yahoo_packet_hash(pkt, 38, "604800"); /* time til expire */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
404 gaim_account_set_int(account, YAHOO_PICEXPIRE_SETTING, time(NULL) + 604800);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
405 yahoo_packet_hash(pkt, 0, gaim_connection_get_display_name(gc));
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
406 yahoo_packet_hash(pkt, 28, size);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
407 yahoo_packet_hash(pkt, 27, d->filename);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
408 yahoo_packet_hash(pkt, 14, "");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
412 buf = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
413
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
414 post = g_strdup_printf("POST /notifyft HTTP/1.0\r\n"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415 "Content-length: %d\r\n"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 "Host: %s:%d\r\n"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417 "Cookie: %s\r\n"
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
418 "\r\n",
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
419 content_length + 4 + d->str->len,
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
420 gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
421 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
422 buf);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
423 write(d->fd, post, strlen(post));
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
424
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
425 yahoo_send_packet_special(d->fd, pkt, 8);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
426 yahoo_packet_free(pkt);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
427
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
428 write(d->fd, "29\xc0\x80", 4);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
429
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
430 g_free(size);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
431 g_free(post);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
432 g_free(buf);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
433 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
434
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
435 void yahoo_buddy_icon_upload(GaimConnection *gc, struct yahoo_buddy_icon_upload_data *d)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
436 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
437 GaimAccount *account = gaim_connection_get_account(gc);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
438 struct yahoo_data *yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
439
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
440 if (yd->jp) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
441 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
442 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
443 yahoo_buddy_icon_upload_connected, d) == -1)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
444 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
445 gaim_debug_error("yahoo", "Uploading our buddy icon failed to connect.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
446 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
447 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
448 } else {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
449 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
450 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
451 yahoo_buddy_icon_upload_connected, d) == -1)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
452 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
453 gaim_debug_error("yahoo", "Uploading our buddy icon failed to connect.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
454 yahoo_buddy_icon_upload_data_free(d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
455 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
456 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
457 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
458
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
459 void yahoo_set_buddy_icon(GaimConnection *gc, const char *iconfile)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
460 {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
461 struct yahoo_data *yd = gc->proto_data;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
462 GaimAccount *account = gc->account;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
463 FILE *file;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
464 struct stat st;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
465
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
466 if (iconfile == NULL) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
467 if (yd->picture_url)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
468 g_free(yd->picture_url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
469 yd->picture_url = NULL;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
470
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
471 gaim_account_set_string(account, YAHOO_PICURL_SETTING, NULL);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
472 gaim_account_set_int(account, YAHOO_PICCKSUM_SETTING, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
473 gaim_account_set_int(account, YAHOO_PICEXPIRE_SETTING, 0);
9310
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
474 if (yd->logged_in)
085190b9dd64 [gaim-migrate @ 10118]
Tim Ringenbach <marv@pidgin.im>
parents: 9306
diff changeset
475 yahoo_send_picture_update(gc, 0);
9306
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
476 /* TODO: check if we're connected and tell everyone we ain't not one no more */
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
477 } else if (!stat(iconfile, &st)) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
478 file = fopen(iconfile, "rb");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
479 if (file) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480 GString *s = g_string_sized_new(st.st_size);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 size_t len;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
482 struct yahoo_buddy_icon_upload_data *d;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
483 int oldcksum = gaim_account_get_int(account, YAHOO_PICCKSUM_SETTING, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
484 int expire = gaim_account_get_int(account, YAHOO_PICEXPIRE_SETTING, 0);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485 const char *oldurl = gaim_account_get_string(account, YAHOO_PICURL_SETTING, NULL);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
487 g_string_set_size(s, st.st_size);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488 len = fread(s->str, 1, st.st_size, file);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489 fclose(file);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
490 g_string_set_size(s, len);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491 yd->picture_checksum = g_string_hash(s);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
492
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
493 if ((yd->picture_checksum == oldcksum) && (expire > (time(NULL) + 60*60*24)) &&
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494 oldcksum && expire && oldurl) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
495 gaim_debug_misc("yahoo", "buddy icon is up to date. Not reuploading.\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
496 g_string_free(s, TRUE);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
497 if (yd->picture_url)
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
498 g_free(yd->picture_url);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
499 yd->picture_url = g_strdup(oldurl);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
502
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
503 d = g_new0(struct yahoo_buddy_icon_upload_data, 1);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
504 d->gc = gc;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505 d->str = s;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
506 d->fd = -1;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
507 d->filename = g_strdup(iconfile);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509 if (!yd->logged_in) {
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
510 yd->picture_upload_todo = d;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
511 return;
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
512 }
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
513
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
514 yahoo_buddy_icon_upload(gc, d);
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
515 } else
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
516 gaim_debug_error("yahoo",
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
517 "Can't open buddy icon file!\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
518 } else
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
519 gaim_debug_error("yahooo",
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520 "Can't stat buddy icon file!\n");
04a3e9e869ee [gaim-migrate @ 10114]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521 }