Wed, 20 Aug 2003 01:17:26 +0000
[gaim-migrate @ 7030]
Tim Ringenbach (marv_sf) writes:
" This processes yahoo's weird color codes, and turns
them into normal html. It also strips about fade, alt,
and snd tags, while its at it.
This doesn't make gaim send valid yahoo color codes,
however.
If you don't like some aspect of this patch, let me
know and I'll fix it.
Actually, I added a couple files, and cvs diff wouldn't
cooperate, so I just tarred up the patch and the new
files. Maybe I should have just stuck it all in
yahoo.c. Oh well, you can make me redo it if you don't
like it."
someone test this and provide patches for any bugs.
committer: Luke Schierer <lschiere@pidgin.im>
| 2681 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 | * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx> | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * along with this program; if not, write to the Free Software | |
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 20 | * | |
| 21 | */ | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
22 | #include "internal.h" |
| 2681 | 23 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
24 | #include "account.h" |
|
5638
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
25 | #include "accountopt.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
26 | #include "debug.h" |
| 2681 | 27 | #include "multi.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
28 | #include "notify.h" |
| 2681 | 29 | #include "prpl.h" |
| 30 | #include "proxy.h" | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
31 | #include "request.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
32 | #include "server.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
33 | #include "util.h" |
|
6115
ac81410298f2
[gaim-migrate @ 6578]
Christian Hammond <chipx86@chipx86.com>
parents:
6069
diff
changeset
|
34 | #include "html.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
35 | |
| 6513 | 36 | #include "yahoo.h" |
| 3147 | 37 | #include "md5.h" |
| 2681 | 38 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
39 | /* XXX */ |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6321
diff
changeset
|
40 | #include "gtkinternal.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
41 | #include "ui.h" |
| 3630 | 42 | |
| 5583 | 43 | extern char *yahoo_crypt(const char *, const char *); |
|
2795
b2e15894ab75
[gaim-migrate @ 2808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2786
diff
changeset
|
44 | |
|
5493
f30de3b116ea
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
45 | /* #define YAHOO_DEBUG */ |
| 2681 | 46 | |
| 47 | #define USEROPT_MAIL 0 | |
| 48 | ||
| 3147 | 49 | #define YAHOO_PAGER_HOST "scs.yahoo.com" |
| 2681 | 50 | #define YAHOO_PAGER_PORT 5050 |
| 51 | ||
| 3467 | 52 | #define YAHOO_PROTO_VER 0x0900 |
| 53 | ||
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
54 | enum yahoo_service { /* these are easier to see in hex */ |
| 2681 | 55 | YAHOO_SERVICE_LOGON = 1, |
| 56 | YAHOO_SERVICE_LOGOFF, | |
| 57 | YAHOO_SERVICE_ISAWAY, | |
| 58 | YAHOO_SERVICE_ISBACK, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
59 | YAHOO_SERVICE_IDLE, /* 5 (placemarker) */ |
| 2681 | 60 | YAHOO_SERVICE_MESSAGE, |
| 61 | YAHOO_SERVICE_IDACT, | |
| 62 | YAHOO_SERVICE_IDDEACT, | |
| 63 | YAHOO_SERVICE_MAILSTAT, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
64 | YAHOO_SERVICE_USERSTAT, /* 0xa */ |
| 2681 | 65 | YAHOO_SERVICE_NEWMAIL, |
| 66 | YAHOO_SERVICE_CHATINVITE, | |
| 67 | YAHOO_SERVICE_CALENDAR, | |
| 68 | YAHOO_SERVICE_NEWPERSONALMAIL, | |
| 69 | YAHOO_SERVICE_NEWCONTACT, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
70 | YAHOO_SERVICE_ADDIDENT, /* 0x10 */ |
| 2681 | 71 | YAHOO_SERVICE_ADDIGNORE, |
| 72 | YAHOO_SERVICE_PING, | |
| 73 | YAHOO_SERVICE_GROUPRENAME, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
74 | YAHOO_SERVICE_SYSMESSAGE = 0x14, |
|
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
75 | YAHOO_SERVICE_PASSTHROUGH2 = 0x16, |
|
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
76 | YAHOO_SERVICE_CONFINVITE = 0x18, |
| 2681 | 77 | YAHOO_SERVICE_CONFLOGON, |
| 78 | YAHOO_SERVICE_CONFDECLINE, | |
| 79 | YAHOO_SERVICE_CONFLOGOFF, | |
| 80 | YAHOO_SERVICE_CONFADDINVITE, | |
| 81 | YAHOO_SERVICE_CONFMSG, | |
| 82 | YAHOO_SERVICE_CHATLOGON, | |
| 83 | YAHOO_SERVICE_CHATLOGOFF, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
84 | YAHOO_SERVICE_CHATMSG = 0x20, |
|
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
85 | YAHOO_SERVICE_GAMELOGON = 0x28, |
| 2786 | 86 | YAHOO_SERVICE_GAMELOGOFF, |
| 87 | YAHOO_SERVICE_GAMEMSG = 0x2a, | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
88 | YAHOO_SERVICE_FILETRANSFER = 0x46, |
| 3019 | 89 | YAHOO_SERVICE_NOTIFY = 0x4B, |
| 3147 | 90 | YAHOO_SERVICE_AUTHRESP = 0x54, |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
91 | YAHOO_SERVICE_LIST = 0x55, |
| 3147 | 92 | YAHOO_SERVICE_AUTH = 0x57, |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
93 | YAHOO_SERVICE_ADDBUDDY = 0x83, |
|
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
94 | YAHOO_SERVICE_REMBUDDY = 0x84 |
| 2681 | 95 | }; |
| 96 | ||
| 97 | enum yahoo_status { | |
|
2686
75cfcc12285a
[gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2683
diff
changeset
|
98 | YAHOO_STATUS_AVAILABLE = 0, |
| 2681 | 99 | YAHOO_STATUS_BRB, |
| 100 | YAHOO_STATUS_BUSY, | |
| 101 | YAHOO_STATUS_NOTATHOME, | |
| 102 | YAHOO_STATUS_NOTATDESK, | |
| 103 | YAHOO_STATUS_NOTINOFFICE, | |
| 104 | YAHOO_STATUS_ONPHONE, | |
| 105 | YAHOO_STATUS_ONVACATION, | |
| 106 | YAHOO_STATUS_OUTTOLUNCH, | |
| 107 | YAHOO_STATUS_STEPPEDOUT, | |
| 108 | YAHOO_STATUS_INVISIBLE = 12, | |
| 109 | YAHOO_STATUS_CUSTOM = 99, | |
| 110 | YAHOO_STATUS_IDLE = 999, | |
| 2993 | 111 | YAHOO_STATUS_OFFLINE = 0x5a55aa56, /* don't ask */ |
| 112 | YAHOO_STATUS_TYPING = 0x16 | |
| 2681 | 113 | }; |
| 3019 | 114 | #define YAHOO_STATUS_GAME 0x2 /* Games don't fit into the regular status model */ |
| 2681 | 115 | |
| 116 | struct yahoo_data { | |
| 117 | int fd; | |
| 118 | guchar *rxqueue; | |
| 119 | int rxlen; | |
| 120 | GHashTable *hash; | |
| 3019 | 121 | GHashTable *games; |
| 2681 | 122 | int current_status; |
| 123 | gboolean logged_in; | |
| 124 | }; | |
| 125 | ||
| 126 | struct yahoo_pair { | |
| 127 | int key; | |
| 128 | char *value; | |
| 129 | }; | |
| 130 | ||
| 131 | struct yahoo_packet { | |
| 132 | guint16 service; | |
| 133 | guint32 status; | |
| 134 | guint32 id; | |
| 135 | GSList *hash; | |
| 136 | }; | |
| 137 | ||
| 138 | #define YAHOO_PACKET_HDRLEN (4 + 2 + 2 + 2 + 2 + 4 + 4) | |
| 139 | ||
| 140 | static struct yahoo_packet *yahoo_packet_new(enum yahoo_service service, enum yahoo_status status, int id) | |
| 141 | { | |
| 142 | struct yahoo_packet *pkt = g_new0(struct yahoo_packet, 1); | |
| 143 | ||
| 144 | pkt->service = service; | |
| 145 | pkt->status = status; | |
| 146 | pkt->id = id; | |
| 147 | ||
| 148 | return pkt; | |
| 149 | } | |
| 150 | ||
| 3466 | 151 | static void yahoo_packet_hash(struct yahoo_packet *pkt, int key, const char *value) |
| 2681 | 152 | { |
| 153 | struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1); | |
| 154 | pair->key = key; | |
| 155 | pair->value = g_strdup(value); | |
| 156 | pkt->hash = g_slist_append(pkt->hash, pair); | |
| 157 | } | |
| 158 | ||
| 159 | static int yahoo_packet_length(struct yahoo_packet *pkt) | |
| 160 | { | |
| 161 | GSList *l; | |
| 162 | ||
| 163 | int len = 0; | |
| 164 | ||
| 165 | l = pkt->hash; | |
| 166 | while (l) { | |
| 167 | struct yahoo_pair *pair = l->data; | |
| 168 | int tmp = pair->key; | |
| 169 | do { | |
| 170 | tmp /= 10; | |
| 171 | len++; | |
| 172 | } while (tmp); | |
| 173 | len += 2; | |
| 174 | len += strlen(pair->value); | |
| 175 | len += 2; | |
| 176 | l = l->next; | |
| 177 | } | |
| 178 | ||
| 179 | return len; | |
| 180 | } | |
| 181 | ||
| 182 | /* sometimes i wish prpls could #include things from other prpls. then i could just | |
| 183 | * use the routines from libfaim and not have to admit to knowing how they work. */ | |
| 184 | #define yahoo_put16(buf, data) ( \ | |
| 185 | (*(buf) = (u_char)((data)>>8)&0xff), \ | |
| 186 | (*((buf)+1) = (u_char)(data)&0xff), \ | |
| 187 | 2) | |
| 188 | #define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff)) | |
| 189 | #define yahoo_put32(buf, data) ( \ | |
| 190 | (*((buf)) = (u_char)((data)>>24)&0xff), \ | |
| 191 | (*((buf)+1) = (u_char)((data)>>16)&0xff), \ | |
| 192 | (*((buf)+2) = (u_char)((data)>>8)&0xff), \ | |
| 193 | (*((buf)+3) = (u_char)(data)&0xff), \ | |
| 194 | 4) | |
| 195 | #define yahoo_get32(buf) ((((*(buf))<<24)&0xff000000) + \ | |
| 196 | (((*((buf)+1))<<16)&0x00ff0000) + \ | |
| 197 | (((*((buf)+2))<< 8)&0x0000ff00) + \ | |
| 198 | (((*((buf)+3) )&0x000000ff))) | |
| 199 | ||
| 200 | static void yahoo_packet_read(struct yahoo_packet *pkt, guchar *data, int len) | |
| 201 | { | |
| 202 | int pos = 0; | |
| 203 | ||
| 204 | while (pos + 1 < len) { | |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
205 | char key[64], *value = NULL; |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
206 | int accept; |
| 2681 | 207 | int x; |
| 208 | ||
| 209 | struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1); | |
| 210 | ||
| 211 | x = 0; | |
| 212 | while (pos + 1 < len) { | |
| 213 | if (data[pos] == 0xc0 && data[pos + 1] == 0x80) | |
| 214 | break; | |
| 215 | key[x++] = data[pos++]; | |
| 216 | } | |
| 217 | key[x] = 0; | |
| 218 | pos += 2; | |
| 219 | pair->key = strtol(key, NULL, 10); | |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
220 | accept = x; /* if x is 0 there was no key, so don't accept it */ |
| 2681 | 221 | |
|
3996
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
222 | if (len - pos + 1 <= 0) { |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
223 | /* Truncated. Garbage or something. */ |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
224 | accept = 0; |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
225 | } |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
226 | |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
227 | if (accept) { |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
228 | value = g_malloc(len - pos + 1); |
|
3996
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
229 | x = 0; |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
230 | while (pos + 1 < len) { |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
231 | if (data[pos] == 0xc0 && data[pos + 1] == 0x80) |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
232 | break; |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
233 | value[x++] = data[pos++]; |
|
3996
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
234 | } |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
235 | value[x] = 0; |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
236 | pair->value = g_strdup(value); |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
237 | g_free(value); |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
238 | pkt->hash = g_slist_append(pkt->hash, pair); |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
239 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
240 | "Key: %d \tValue: %s\n", pair->key, pair->value); |
|
2724
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
241 | } else { |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
242 | g_free(pair); |
|
d17b226540d3
[gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2723
diff
changeset
|
243 | } |
|
3996
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
244 | pos += 2; |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
245 | |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
246 | /* Skip over garbage we've noticed in the mail notifications */ |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
247 | if (data[0] == '9' && data[pos] == 0x01) |
|
5e58ec8c3b45
[gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents:
3768
diff
changeset
|
248 | pos++; |
| 2681 | 249 | } |
| 250 | } | |
| 251 | ||
| 252 | static void yahoo_packet_write(struct yahoo_packet *pkt, guchar *data) | |
| 253 | { | |
| 254 | GSList *l = pkt->hash; | |
| 255 | int pos = 0; | |
| 256 | ||
| 257 | while (l) { | |
| 258 | struct yahoo_pair *pair = l->data; | |
| 259 | guchar buf[100]; | |
| 260 | ||
| 261 | g_snprintf(buf, sizeof(buf), "%d", pair->key); | |
| 262 | strcpy(data + pos, buf); | |
| 263 | pos += strlen(buf); | |
| 264 | data[pos++] = 0xc0; | |
| 265 | data[pos++] = 0x80; | |
| 266 | ||
| 267 | strcpy(data + pos, pair->value); | |
| 268 | pos += strlen(pair->value); | |
| 269 | data[pos++] = 0xc0; | |
| 270 | data[pos++] = 0x80; | |
| 271 | ||
| 272 | l = l->next; | |
| 273 | } | |
| 274 | } | |
| 275 | ||
| 276 | static void yahoo_packet_dump(guchar *data, int len) | |
| 277 | { | |
| 278 | #ifdef YAHOO_DEBUG | |
| 279 | int i; | |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
280 | |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
281 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", ""); |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
282 | |
| 2681 | 283 | for (i = 0; i + 1 < len; i += 2) { |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
284 | if ((i % 16 == 0) && i) { |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
285 | gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
286 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", ""); |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
287 | } |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
288 | |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
289 | gaim_debug(GAIM_DEBUG_MISC, NULL, "%02x%02x ", data[i], data[i + 1]); |
| 2681 | 290 | } |
| 291 | if (i < len) | |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
292 | gaim_debug(GAIM_DEBUG_MISC, NULL, "%02x", data[i]); |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
293 | |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
294 | gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
295 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", ""); |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
296 | |
| 2681 | 297 | for (i = 0; i < len; i++) { |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
298 | if ((i % 16 == 0) && i) { |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
299 | gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
300 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", ""); |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
301 | } |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
302 | |
| 2681 | 303 | if (isprint(data[i])) |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
304 | gaim_debug(GAIM_DEBUG_MISC, NULL, "%c ", data[i]); |
| 2681 | 305 | else |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
306 | gaim_debug(GAIM_DEBUG_MISC, NULL, ". "); |
| 2681 | 307 | } |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
308 | |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
309 | gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
| 2681 | 310 | #endif |
| 311 | } | |
| 312 | ||
| 313 | static int yahoo_send_packet(struct yahoo_data *yd, struct yahoo_packet *pkt) | |
| 314 | { | |
| 315 | int pktlen = yahoo_packet_length(pkt); | |
| 316 | int len = YAHOO_PACKET_HDRLEN + pktlen; | |
| 317 | int ret; | |
| 318 | ||
| 319 | guchar *data; | |
| 320 | int pos = 0; | |
| 321 | ||
| 322 | if (yd->fd < 0) | |
| 323 | return -1; | |
| 324 | ||
| 325 | data = g_malloc0(len + 1); | |
| 326 | ||
| 327 | memcpy(data + pos, "YMSG", 4); pos += 4; | |
| 3467 | 328 | pos += yahoo_put16(data + pos, YAHOO_PROTO_VER); |
| 2681 | 329 | pos += yahoo_put16(data + pos, 0x0000); |
| 330 | pos += yahoo_put16(data + pos, pktlen); | |
| 331 | pos += yahoo_put16(data + pos, pkt->service); | |
| 332 | pos += yahoo_put32(data + pos, pkt->status); | |
| 333 | pos += yahoo_put32(data + pos, pkt->id); | |
| 334 | ||
| 335 | yahoo_packet_write(pkt, data + pos); | |
| 336 | ||
| 337 | yahoo_packet_dump(data, len); | |
| 338 | ret = write(yd->fd, data, len); | |
| 339 | g_free(data); | |
| 340 | ||
| 341 | return ret; | |
| 342 | } | |
| 343 | ||
| 344 | static void yahoo_packet_free(struct yahoo_packet *pkt) | |
| 345 | { | |
| 346 | while (pkt->hash) { | |
| 347 | struct yahoo_pair *pair = pkt->hash->data; | |
| 348 | g_free(pair->value); | |
| 349 | g_free(pair); | |
| 350 | pkt->hash = g_slist_remove(pkt->hash, pair); | |
| 351 | } | |
| 352 | g_free(pkt); | |
| 353 | } | |
| 354 | ||
| 5583 | 355 | static void yahoo_process_status(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 356 | { |
| 357 | struct yahoo_data *yd = gc->proto_data; | |
| 358 | GSList *l = pkt->hash; | |
| 359 | char *name = NULL; | |
| 360 | int state = 0; | |
| 3019 | 361 | int gamestate = 0; |
| 2681 | 362 | char *msg = NULL; |
| 3019 | 363 | |
| 2681 | 364 | while (l) { |
| 365 | struct yahoo_pair *pair = l->data; | |
| 366 | ||
| 367 | switch (pair->key) { | |
| 368 | case 0: /* we won't actually do anything with this */ | |
| 369 | break; | |
| 370 | case 1: /* we don't get the full buddy list here. */ | |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
371 | if (!yd->logged_in) { |
| 5583 | 372 | gaim_connection_set_state(gc, GAIM_CONNECTED); |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
373 | serv_finish_login(gc); |
| 5583 | 374 | gaim_connection_set_display_name(gc, pair->value); |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
375 | yd->logged_in = TRUE; |
| 2681 | 376 | |
| 3147 | 377 | /* this requests the list. i have a feeling that this is very evil |
| 378 | * | |
| 379 | * scs.yahoo.com sends you the list before this packet without it being | |
| 380 | * requested | |
| 381 | * | |
| 382 | * do_import(gc, NULL); | |
| 383 | * newpkt = yahoo_packet_new(YAHOO_SERVICE_LIST, YAHOO_STATUS_OFFLINE, 0); | |
| 384 | * yahoo_send_packet(yd, newpkt); | |
| 385 | * yahoo_packet_free(newpkt); | |
| 386 | */ | |
| 387 | ||
| 388 | } | |
| 2681 | 389 | break; |
| 390 | case 8: /* how many online buddies we have */ | |
| 391 | break; | |
| 392 | case 7: /* the current buddy */ | |
| 393 | name = pair->value; | |
| 394 | break; | |
| 395 | case 10: /* state */ | |
| 396 | state = strtol(pair->value, NULL, 10); | |
| 397 | break; | |
| 398 | case 19: /* custom message */ | |
| 399 | msg = pair->value; | |
| 400 | break; | |
| 401 | case 11: /* i didn't know what this was in the old protocol either */ | |
| 402 | break; | |
| 403 | case 17: /* in chat? */ | |
| 404 | break; | |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
405 | case 13: /* in pager? */ |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
406 | if (pkt->service == YAHOO_SERVICE_LOGOFF || |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
407 | strtol(pair->value, NULL, 10) == 0) { |
| 4732 | 408 | serv_got_update(gc, name, 0, 0, 0, 0, 0); |
|
2807
fe1ea0453890
[gaim-migrate @ 2820]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2805
diff
changeset
|
409 | break; |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
410 | } |
| 3019 | 411 | if (g_hash_table_lookup(yd->games, name)) |
| 412 | gamestate = YAHOO_STATUS_GAME; | |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
413 | if (state == YAHOO_STATUS_CUSTOM) { |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
414 | gpointer val = g_hash_table_lookup(yd->hash, name); |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
415 | if (val) { |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
416 | g_free(val); |
|
2873
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
417 | g_hash_table_insert(yd->hash, name, |
|
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
418 | msg ? g_strdup(msg) : g_malloc0(1)); |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
419 | } else |
|
2873
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
420 | g_hash_table_insert(yd->hash, g_strdup(name), |
|
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
421 | msg ? g_strdup(msg) : g_malloc0(1)); |
|
2771
8c214f13da39
[gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2741
diff
changeset
|
422 | } |
| 4777 | 423 | if (state == YAHOO_STATUS_AVAILABLE) |
| 424 | serv_got_update(gc, name, 1, 0, 0, 0, gamestate); | |
| 5002 | 425 | else if (state == YAHOO_STATUS_IDLE) |
| 426 | serv_got_update(gc, name, 1, 0, 0, -1, (state << 2) | UC_UNAVAILABLE | gamestate); | |
| 4777 | 427 | else |
| 428 | serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE | gamestate); | |
|
2771
8c214f13da39
[gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2741
diff
changeset
|
429 | break; |
|
2805
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
430 | case 60: /* no clue */ |
|
31c7645db097
[gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2795
diff
changeset
|
431 | break; |
| 2979 | 432 | case 16: /* Custom error message */ |
|
5436
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5367
diff
changeset
|
433 | gaim_notify_error(gc, NULL, pair->value, NULL); |
| 2951 | 434 | break; |
| 2681 | 435 | default: |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
436 | gaim_debug(GAIM_DEBUG_ERROR, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
437 | "Unknown status key %d\n", pair->key); |
| 2681 | 438 | break; |
| 439 | } | |
| 440 | ||
| 441 | l = l->next; | |
| 442 | } | |
| 443 | } | |
| 444 | ||
| 5583 | 445 | static void yahoo_process_list(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 446 | { |
| 447 | GSList *l = pkt->hash; | |
| 448 | gboolean export = FALSE; | |
|
4775
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
449 | struct buddy *b; |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
450 | struct group *g; |
| 2681 | 451 | |
| 452 | while (l) { | |
| 453 | char **lines; | |
| 454 | char **split; | |
| 455 | char **buddies; | |
| 456 | char **tmp, **bud; | |
| 457 | ||
| 458 | struct yahoo_pair *pair = l->data; | |
| 459 | l = l->next; | |
| 460 | ||
| 461 | if (pair->key != 87) | |
| 462 | continue; | |
| 463 | ||
| 464 | lines = g_strsplit(pair->value, "\n", -1); | |
| 465 | for (tmp = lines; *tmp; tmp++) { | |
| 466 | split = g_strsplit(*tmp, ":", 2); | |
|
2697
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
467 | if (!split) |
|
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
468 | continue; |
|
2702
c647b4a9dc62
[gaim-migrate @ 2715]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2697
diff
changeset
|
469 | if (!split[0] || !split[1]) { |
|
2697
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
470 | g_strfreev(split); |
|
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
471 | continue; |
|
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
472 | } |
| 2681 | 473 | buddies = g_strsplit(split[1], ",", -1); |
|
2697
3dc23ce1223f
[gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2688
diff
changeset
|
474 | for (bud = buddies; bud && *bud; bud++) |
|
4775
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
475 | if (!(b = gaim_find_buddy(gc->account, *bud))) { |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
476 | if (!(g = gaim_find_group(split[0]))) { |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
477 | g = gaim_group_new(split[0]); |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
478 | gaim_blist_add_group(g, NULL); |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
479 | } |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
480 | b = gaim_buddy_new(gc->account, *bud, NULL); |
|
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4745
diff
changeset
|
481 | gaim_blist_add_buddy(b, g, NULL); |
| 2681 | 482 | export = TRUE; |
| 483 | } | |
| 484 | g_strfreev(buddies); | |
| 485 | g_strfreev(split); | |
| 486 | } | |
| 487 | g_strfreev(lines); | |
| 488 | } | |
| 489 | ||
| 490 | if (export) | |
| 4349 | 491 | gaim_blist_save(); |
| 2681 | 492 | } |
| 493 | ||
| 5583 | 494 | static void yahoo_process_notify(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2993 | 495 | { |
| 496 | char *msg = NULL; | |
| 497 | char *from = NULL; | |
| 3019 | 498 | char *stat = NULL; |
| 499 | char *game = NULL; | |
| 2993 | 500 | GSList *l = pkt->hash; |
| 3019 | 501 | struct yahoo_data *yd = (struct yahoo_data*) gc->proto_data; |
| 2993 | 502 | while (l) { |
| 503 | struct yahoo_pair *pair = l->data; | |
| 504 | if (pair->key == 4) | |
| 505 | from = pair->value; | |
| 506 | if (pair->key == 49) | |
| 507 | msg = pair->value; | |
| 3001 | 508 | if (pair->key == 13) |
| 3019 | 509 | stat = pair->value; |
| 510 | if (pair->key == 14) | |
| 511 | game = pair->value; | |
| 2993 | 512 | l = l->next; |
| 513 | } | |
| 3640 | 514 | |
| 515 | if (!msg) | |
| 516 | return; | |
| 3019 | 517 | |
| 4793 | 518 | if (!g_ascii_strncasecmp(msg, "TYPING", strlen("TYPING"))) { |
| 3019 | 519 | if (*stat == '1') |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
520 | serv_got_typing(gc, from, 0, GAIM_TYPING); |
| 3019 | 521 | else |
| 522 | serv_got_typing_stopped(gc, from); | |
| 4793 | 523 | } else if (!g_ascii_strncasecmp(msg, "GAME", strlen("GAME"))) { |
| 4687 | 524 | struct buddy *bud = gaim_find_buddy(gc->account, from); |
| 3019 | 525 | void *free1=NULL, *free2=NULL; |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
526 | if (!bud) { |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
527 | gaim_debug(GAIM_DEBUG_WARNING, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
528 | "%s is playing a game, and doesn't want " |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
529 | "you to know.\n", from); |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
530 | } |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
531 | |
| 3019 | 532 | if (*stat == '1') { |
| 533 | if (g_hash_table_lookup_extended (yd->games, from, free1, free2)) { | |
| 534 | g_free(free1); | |
| 535 | g_free(free2); | |
| 536 | } | |
| 537 | g_hash_table_insert (yd->games, g_strdup(from), g_strdup(game)); | |
| 3020 | 538 | if (bud) |
| 4732 | 539 | serv_got_update(gc, from, 1, 0, 0, 0, bud->uc | YAHOO_STATUS_GAME); |
| 3019 | 540 | } else { |
| 541 | if (g_hash_table_lookup_extended (yd->games, from, free1, free2)) { | |
| 542 | g_free(free1); | |
| 543 | g_free(free2); | |
| 544 | g_hash_table_remove (yd->games, from); | |
| 545 | } | |
| 3020 | 546 | if (bud) |
| 4732 | 547 | serv_got_update(gc, from, 1, 0, 0, 0, bud->uc & ~YAHOO_STATUS_GAME); |
| 3019 | 548 | } |
| 549 | } | |
| 2993 | 550 | } |
| 551 | ||
| 5583 | 552 | static void yahoo_process_message(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 553 | { |
| 554 | char *msg = NULL; | |
| 555 | char *from = NULL; | |
| 556 | time_t tm = time(NULL); | |
| 557 | GSList *l = pkt->hash; | |
| 558 | ||
| 3021 | 559 | if (pkt->status <= 1 || pkt->status == 5) { |
| 6069 | 560 | while (l) { |
| 561 | struct yahoo_pair *pair = l->data; | |
| 562 | if (pair->key == 4) | |
| 563 | from = pair->value; | |
| 564 | if (pair->key == 15) | |
| 565 | tm = strtol(pair->value, NULL, 10); | |
| 566 | if (pair->key == 14) { | |
| 567 | char *m; | |
| 568 | ||
| 569 | msg = pair->value; | |
| 570 | ||
| 571 | strip_linefeed(msg); | |
| 6513 | 572 | m = yahoo_codes_to_html(msg); |
| 573 | serv_got_im(gc, from, m, 0, tm, -1); | |
| 574 | g_free(m); | |
| 6069 | 575 | |
| 576 | tm = time(NULL); | |
|
2715
ffc250ace3ea
[gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2708
diff
changeset
|
577 | } |
| 6069 | 578 | l = l->next; |
|
2715
ffc250ace3ea
[gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2708
diff
changeset
|
579 | } |
| 2681 | 580 | } else if (pkt->status == 2) { |
|
5436
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5367
diff
changeset
|
581 | gaim_notify_error(gc, NULL, |
|
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5367
diff
changeset
|
582 | _("Your Yahoo! message did not get sent."), NULL); |
| 2681 | 583 | } |
| 584 | } | |
| 585 | ||
| 586 | ||
| 5583 | 587 | static void yahoo_process_contact(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 588 | { |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
589 | struct yahoo_data *yd = gc->proto_data; |
| 2681 | 590 | char *id = NULL; |
| 591 | char *who = NULL; | |
| 592 | char *msg = NULL; | |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
593 | char *name = NULL; |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
594 | int state = YAHOO_STATUS_AVAILABLE; |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
595 | int online = FALSE; |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
596 | |
| 2681 | 597 | GSList *l = pkt->hash; |
| 598 | ||
| 599 | while (l) { | |
| 600 | struct yahoo_pair *pair = l->data; | |
| 601 | if (pair->key == 1) | |
| 602 | id = pair->value; | |
| 603 | else if (pair->key == 3) | |
| 604 | who = pair->value; | |
| 605 | else if (pair->key == 14) | |
| 606 | msg = pair->value; | |
| 5002 | 607 | else if (pair->key == 7) |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
608 | name = pair->value; |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
609 | else if (pair->key == 10) |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
610 | state = strtol(pair->value, NULL, 10); |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
611 | else if (pair->key == 13) |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
612 | online = strtol(pair->value, NULL, 10); |
| 2681 | 613 | l = l->next; |
| 614 | } | |
| 615 | ||
|
2682
49c15f67d4b1
[gaim-migrate @ 2695]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
616 | if (id) |
|
49c15f67d4b1
[gaim-migrate @ 2695]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
617 | show_got_added(gc, id, who, NULL, msg); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
618 | if (name) { |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
619 | if (state == YAHOO_STATUS_AVAILABLE) |
| 4732 | 620 | serv_got_update(gc, name, 1, 0, 0, 0, 0); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
621 | else if (state == YAHOO_STATUS_IDLE) |
| 5002 | 622 | serv_got_update(gc, name, 1, 0, 0, -1, (state << 2)); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
623 | else |
| 4732 | 624 | serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
625 | if (state == YAHOO_STATUS_CUSTOM) { |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
626 | gpointer val = g_hash_table_lookup(yd->hash, name); |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
627 | if (val) { |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
628 | g_free(val); |
|
2873
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
629 | g_hash_table_insert(yd->hash, name, |
|
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
630 | msg ? g_strdup(msg) : g_malloc0(1)); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
631 | } else |
|
2873
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
632 | g_hash_table_insert(yd->hash, g_strdup(name), |
|
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
633 | msg ? g_strdup(msg) : g_malloc0(1)); |
|
2683
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
634 | } |
|
06507dfdd96c
[gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2682
diff
changeset
|
635 | } |
| 2681 | 636 | } |
| 637 | ||
| 5583 | 638 | static void yahoo_process_mail(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 639 | { |
| 5583 | 640 | GaimAccount *account = gaim_connection_get_account(gc); |
| 2681 | 641 | char *who = NULL; |
| 642 | char *email = NULL; | |
| 643 | char *subj = NULL; | |
| 644 | int count = 0; | |
| 645 | GSList *l = pkt->hash; | |
| 646 | ||
| 5583 | 647 | if (!gaim_account_get_check_mail(account)) |
|
5521
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
648 | return; |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
649 | |
| 2681 | 650 | while (l) { |
| 651 | struct yahoo_pair *pair = l->data; | |
| 652 | if (pair->key == 9) | |
| 653 | count = strtol(pair->value, NULL, 10); | |
| 654 | else if (pair->key == 43) | |
| 655 | who = pair->value; | |
| 656 | else if (pair->key == 42) | |
| 657 | email = pair->value; | |
| 658 | else if (pair->key == 18) | |
| 659 | subj = pair->value; | |
| 660 | l = l->next; | |
| 661 | } | |
| 662 | ||
| 4001 | 663 | if (who && subj && email && *email) { |
| 2850 | 664 | char *from = g_strdup_printf("%s (%s)", who, email); |
|
5521
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
665 | |
| 5583 | 666 | gaim_notify_email(gc, subj, from, gaim_account_get_username(account), |
|
5521
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
667 | "http://mail.yahoo.com/", NULL, NULL); |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
668 | |
| 2850 | 669 | g_free(from); |
|
5521
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
670 | } else if (count > 0) { |
| 5583 | 671 | const char *to = gaim_account_get_username(account); |
|
5521
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
672 | const char *url = "http://mail.yahoo.com/"; |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
673 | |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
674 | gaim_notify_emails(gc, count, FALSE, NULL, NULL, &to, &url, |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
675 | NULL, NULL); |
|
fca5b7c1340d
[gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
676 | } |
| 2681 | 677 | } |
| 3147 | 678 | /* This is the y64 alphabet... it's like base64, but has a . and a _ */ |
| 679 | char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._"; | |
| 680 | ||
| 681 | /* This is taken from Sylpheed by Hiroyuki Yamamoto. We have our own tobase64 function | |
| 682 | * in util.c, but it has a bug I don't feel like finding right now ;) */ | |
| 683 | void to_y64(unsigned char *out, const unsigned char *in, int inlen) | |
| 684 | /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ | |
| 685 | { | |
| 686 | for (; inlen >= 3; inlen -= 3) | |
| 687 | { | |
| 688 | *out++ = base64digits[in[0] >> 2]; | |
| 689 | *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; | |
| 690 | *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; | |
| 691 | *out++ = base64digits[in[2] & 0x3f]; | |
| 692 | in += 3; | |
| 693 | } | |
| 694 | if (inlen > 0) | |
| 695 | { | |
| 696 | unsigned char fragment; | |
| 697 | ||
| 698 | *out++ = base64digits[in[0] >> 2]; | |
| 699 | fragment = (in[0] << 4) & 0x30; | |
| 700 | if (inlen > 1) | |
| 701 | fragment |= in[1] >> 4; | |
| 702 | *out++ = base64digits[fragment]; | |
| 703 | *out++ = (inlen < 2) ? '-' : base64digits[(in[1] << 2) & 0x3c]; | |
| 704 | *out++ = '-'; | |
| 705 | } | |
| 706 | *out = '\0'; | |
| 707 | } | |
| 708 | ||
| 5583 | 709 | static void yahoo_process_auth(GaimConnection *gc, struct yahoo_packet *pkt) |
| 3147 | 710 | { |
| 711 | char *seed = NULL; | |
| 712 | char *sn = NULL; | |
| 713 | GSList *l = pkt->hash; | |
| 714 | struct yahoo_data *yd = gc->proto_data; | |
| 715 | ||
| 716 | while (l) { | |
| 717 | struct yahoo_pair *pair = l->data; | |
| 718 | if (pair->key == 94) | |
| 719 | seed = pair->value; | |
| 720 | if (pair->key == 1) | |
| 721 | sn = pair->value; | |
| 722 | l = l->next; | |
| 723 | } | |
| 724 | ||
| 725 | if (seed) { | |
| 726 | struct yahoo_packet *pack; | |
| 5583 | 727 | GaimAccount *account = gaim_connection_get_account(gc); |
| 5921 | 728 | const char *name = normalize(gaim_account_get_username(account)); |
| 5583 | 729 | const char *pass = gaim_account_get_password(account); |
| 730 | ||
| 3147 | 731 | /* So, Yahoo has stopped supporting its older clients in India, and undoubtedly |
| 732 | * will soon do so in the rest of the world. | |
| 733 | * | |
| 734 | * The new clients use this authentication method. I warn you in advance, it's | |
| 735 | * bizzare, convoluted, inordinately complicated. It's also no more secure than | |
| 736 | * crypt() was. The only purpose this scheme could serve is to prevent third | |
| 737 | * part clients from connecting to their servers. | |
| 738 | * | |
| 739 | * Sorry, Yahoo. | |
| 740 | */ | |
| 741 | ||
| 742 | md5_byte_t result[16]; | |
| 743 | md5_state_t ctx; | |
| 5583 | 744 | |
| 3147 | 745 | char *crypt_result; |
| 5583 | 746 | char password_hash[25]; |
| 747 | char crypt_hash[25]; | |
| 3147 | 748 | char *hash_string_p = g_malloc(50 + strlen(sn)); |
| 749 | char *hash_string_c = g_malloc(50 + strlen(sn)); | |
| 750 | ||
| 751 | char checksum; | |
| 752 | ||
| 3157 | 753 | int sv; |
| 3147 | 754 | |
| 5583 | 755 | char result6[25]; |
| 756 | char result96[25]; | |
| 3147 | 757 | |
| 758 | sv = seed[15]; | |
| 3157 | 759 | sv = sv % 8; |
| 3147 | 760 | |
| 761 | md5_init(&ctx); | |
| 5583 | 762 | md5_append(&ctx, pass, strlen(pass)); |
| 3147 | 763 | md5_finish(&ctx, result); |
| 764 | to_y64(password_hash, result, 16); | |
| 765 | ||
| 766 | md5_init(&ctx); | |
| 5583 | 767 | crypt_result = yahoo_crypt(pass, "$1$_2S43d5f$"); |
| 3147 | 768 | md5_append(&ctx, crypt_result, strlen(crypt_result)); |
| 769 | md5_finish(&ctx, result); | |
| 770 | to_y64(crypt_hash, result, 16); | |
| 3157 | 771 | |
| 772 | switch (sv) { | |
| 3147 | 773 | case 1: |
| 774 | case 6: | |
| 3157 | 775 | checksum = seed[seed[9] % 16]; |
| 3147 | 776 | g_snprintf(hash_string_p, strlen(sn) + 50, |
| 5583 | 777 | "%c%s%s%s", checksum, name, seed, password_hash); |
| 3157 | 778 | g_snprintf(hash_string_c, strlen(sn) + 50, |
| 5583 | 779 | "%c%s%s%s", checksum, name, seed, crypt_hash); |
| 3147 | 780 | break; |
| 781 | case 2: | |
| 782 | case 7: | |
| 3157 | 783 | checksum = seed[seed[15] % 16]; |
| 3147 | 784 | g_snprintf(hash_string_p, strlen(sn) + 50, |
| 5583 | 785 | "%c%s%s%s", checksum, seed, password_hash, name); |
| 3157 | 786 | g_snprintf(hash_string_c, strlen(sn) + 50, |
| 5583 | 787 | "%c%s%s%s", checksum, seed, crypt_hash, name); |
| 3157 | 788 | break; |
| 3147 | 789 | case 3: |
| 3157 | 790 | checksum = seed[seed[1] % 16]; |
| 3147 | 791 | g_snprintf(hash_string_p, strlen(sn) + 50, |
| 5583 | 792 | "%c%s%s%s", checksum, name, password_hash, seed); |
| 3157 | 793 | g_snprintf(hash_string_c, strlen(sn) + 50, |
| 5583 | 794 | "%c%s%s%s", checksum, name, crypt_hash, seed); |
| 3157 | 795 | break; |
| 796 | case 4: | |
| 797 | checksum = seed[seed[3] % 16]; | |
| 798 | g_snprintf(hash_string_p, strlen(sn) + 50, | |
| 5583 | 799 | "%c%s%s%s", checksum, password_hash, seed, name); |
| 3147 | 800 | g_snprintf(hash_string_c, strlen(sn) + 50, |
| 5583 | 801 | "%c%s%s%s", checksum, crypt_hash, seed, name); |
| 3157 | 802 | break; |
| 3147 | 803 | case 0: |
| 804 | case 5: | |
| 3157 | 805 | checksum = seed[seed[7] % 16]; |
| 3147 | 806 | g_snprintf(hash_string_p, strlen(sn) + 50, |
| 5583 | 807 | "%c%s%s%s", checksum, password_hash, name, seed); |
| 3157 | 808 | g_snprintf(hash_string_c, strlen(sn) + 50, |
| 5583 | 809 | "%c%s%s%s", checksum, crypt_hash, name, seed); |
| 3157 | 810 | break; |
| 3147 | 811 | } |
| 3157 | 812 | |
| 3147 | 813 | md5_init(&ctx); |
| 3157 | 814 | md5_append(&ctx, hash_string_p, strlen(hash_string_p)); |
| 3147 | 815 | md5_finish(&ctx, result); |
| 816 | to_y64(result6, result, 16); | |
| 817 | ||
| 818 | md5_init(&ctx); | |
| 819 | md5_append(&ctx, hash_string_c, strlen(hash_string_c)); | |
| 820 | md5_finish(&ctx, result); | |
| 821 | to_y64(result96, result, 16); | |
| 822 | ||
| 823 | pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0); | |
| 5583 | 824 | yahoo_packet_hash(pack, 0, name); |
| 3147 | 825 | yahoo_packet_hash(pack, 6, result6); |
| 826 | yahoo_packet_hash(pack, 96, result96); | |
| 5583 | 827 | yahoo_packet_hash(pack, 1, name); |
| 3147 | 828 | |
| 829 | yahoo_send_packet(yd, pack); | |
| 830 | ||
| 831 | g_free(hash_string_p); | |
| 832 | g_free(hash_string_c); | |
| 833 | ||
| 834 | yahoo_packet_free(pack); | |
| 835 | } | |
| 836 | } | |
| 2681 | 837 | |
| 5583 | 838 | static void yahoo_packet_process(GaimConnection *gc, struct yahoo_packet *pkt) |
| 2681 | 839 | { |
| 840 | switch (pkt->service) | |
| 841 | { | |
| 842 | case YAHOO_SERVICE_LOGON: | |
|
2771
8c214f13da39
[gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2741
diff
changeset
|
843 | case YAHOO_SERVICE_LOGOFF: |
| 2681 | 844 | case YAHOO_SERVICE_ISAWAY: |
|
2737
f7edb9c3f348
[gaim-migrate @ 2750]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2724
diff
changeset
|
845 | case YAHOO_SERVICE_ISBACK: |
| 3019 | 846 | case YAHOO_SERVICE_GAMELOGON: |
| 847 | case YAHOO_SERVICE_GAMELOGOFF: | |
| 2681 | 848 | yahoo_process_status(gc, pkt); |
| 849 | break; | |
| 3019 | 850 | case YAHOO_SERVICE_NOTIFY: |
| 851 | yahoo_process_notify(gc, pkt); | |
| 2993 | 852 | break; |
| 2681 | 853 | case YAHOO_SERVICE_MESSAGE: |
| 2786 | 854 | case YAHOO_SERVICE_GAMEMSG: |
| 5939 | 855 | case YAHOO_SERVICE_CHATMSG: |
| 2681 | 856 | yahoo_process_message(gc, pkt); |
| 857 | break; | |
| 858 | case YAHOO_SERVICE_NEWMAIL: | |
| 859 | yahoo_process_mail(gc, pkt); | |
| 860 | break; | |
| 861 | case YAHOO_SERVICE_NEWCONTACT: | |
| 862 | yahoo_process_contact(gc, pkt); | |
| 863 | break; | |
| 864 | case YAHOO_SERVICE_LIST: | |
| 865 | yahoo_process_list(gc, pkt); | |
| 866 | break; | |
| 3147 | 867 | case YAHOO_SERVICE_AUTH: |
| 868 | yahoo_process_auth(gc, pkt); | |
| 869 | break; | |
| 2681 | 870 | default: |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
871 | gaim_debug(GAIM_DEBUG_ERROR, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
872 | "Unhandled service 0x%02x\n", pkt->service); |
| 2681 | 873 | break; |
| 874 | } | |
| 875 | } | |
| 876 | ||
| 877 | static void yahoo_pending(gpointer data, gint source, GaimInputCondition cond) | |
| 878 | { | |
| 5583 | 879 | GaimConnection *gc = data; |
| 2681 | 880 | struct yahoo_data *yd = gc->proto_data; |
| 881 | char buf[1024]; | |
| 882 | int len; | |
| 883 | ||
| 884 | len = read(yd->fd, buf, sizeof(buf)); | |
| 885 | ||
| 886 | if (len <= 0) { | |
|
6321
0b54b2a172d1
[gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
6115
diff
changeset
|
887 | gaim_connection_error(gc, _("Unable to read")); |
| 2681 | 888 | return; |
| 889 | } | |
| 890 | ||
| 891 | yd->rxqueue = g_realloc(yd->rxqueue, len + yd->rxlen); | |
| 892 | memcpy(yd->rxqueue + yd->rxlen, buf, len); | |
| 893 | yd->rxlen += len; | |
| 894 | ||
| 895 | while (1) { | |
| 896 | struct yahoo_packet *pkt; | |
| 897 | int pos = 0; | |
| 898 | int pktlen; | |
| 899 | ||
| 900 | if (yd->rxlen < YAHOO_PACKET_HDRLEN) | |
| 901 | return; | |
| 902 | ||
| 903 | pos += 4; /* YMSG */ | |
| 904 | pos += 2; | |
| 905 | pos += 2; | |
| 906 | ||
| 907 | pktlen = yahoo_get16(yd->rxqueue + pos); pos += 2; | |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
908 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
909 | "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen); |
| 2681 | 910 | |
| 911 | if (yd->rxlen < (YAHOO_PACKET_HDRLEN + pktlen)) | |
| 912 | return; | |
| 913 | ||
| 914 | yahoo_packet_dump(yd->rxqueue, YAHOO_PACKET_HDRLEN + pktlen); | |
| 915 | ||
| 916 | pkt = yahoo_packet_new(0, 0, 0); | |
| 917 | ||
| 918 | pkt->service = yahoo_get16(yd->rxqueue + pos); pos += 2; | |
| 3021 | 919 | pkt->status = yahoo_get32(yd->rxqueue + pos); pos += 4; |
|
5220
f42438a0cc06
[gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents:
5216
diff
changeset
|
920 | gaim_debug(GAIM_DEBUG_MISC, "yahoo", |
|
5216
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
921 | "Yahoo Service: 0x%02x Status: %d\n", |
|
13074c9a7ab0
[gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
922 | pkt->service, pkt->status); |
| 2681 | 923 | pkt->id = yahoo_get32(yd->rxqueue + pos); pos += 4; |
| 924 | ||
| 925 | yahoo_packet_read(pkt, yd->rxqueue + pos, pktlen); | |
| 926 | ||
| 927 | yd->rxlen -= YAHOO_PACKET_HDRLEN + pktlen; | |
| 928 | if (yd->rxlen) { | |
| 929 | char *tmp = g_memdup(yd->rxqueue + YAHOO_PACKET_HDRLEN + pktlen, yd->rxlen); | |
| 930 | g_free(yd->rxqueue); | |
| 931 | yd->rxqueue = tmp; | |
| 932 | } else { | |
| 933 | g_free(yd->rxqueue); | |
| 934 | yd->rxqueue = NULL; | |
| 935 | } | |
| 936 | ||
| 937 | yahoo_packet_process(gc, pkt); | |
| 938 | ||
| 939 | yahoo_packet_free(pkt); | |
| 940 | } | |
| 941 | } | |
| 942 | ||
| 943 | static void yahoo_got_connected(gpointer data, gint source, GaimInputCondition cond) | |
| 944 | { | |
| 5583 | 945 | GaimConnection *gc = data; |
| 2681 | 946 | struct yahoo_data *yd; |
| 947 | struct yahoo_packet *pkt; | |
| 948 | ||
|
5590
96f84b9aae41
[gaim-migrate @ 5994]
Christian Hammond <chipx86@chipx86.com>
parents:
5583
diff
changeset
|
949 | if (!g_list_find(gaim_connections_get_all(), gc)) { |
| 2681 | 950 | close(source); |
| 951 | return; | |
| 952 | } | |
| 953 | ||
| 954 | if (source < 0) { | |
|
6321
0b54b2a172d1
[gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
6115
diff
changeset
|
955 | gaim_connection_error(gc, _("Unable to connect")); |
| 2681 | 956 | return; |
| 957 | } | |
| 958 | ||
| 959 | yd = gc->proto_data; | |
| 960 | yd->fd = source; | |
| 961 | ||
| 3147 | 962 | pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, YAHOO_STATUS_AVAILABLE, 0); |
| 2681 | 963 | |
| 5921 | 964 | yahoo_packet_hash(pkt, 1, normalize(gaim_account_get_username(gaim_connection_get_account(gc)))); |
| 2681 | 965 | yahoo_send_packet(yd, pkt); |
| 966 | ||
| 967 | yahoo_packet_free(pkt); | |
| 968 | ||
| 969 | gc->inpa = gaim_input_add(yd->fd, GAIM_INPUT_READ, yahoo_pending, gc); | |
| 970 | } | |
| 971 | ||
| 5583 | 972 | static void yahoo_login(GaimAccount *account) { |
| 973 | GaimConnection *gc = gaim_account_get_connection(account); | |
| 2681 | 974 | struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1); |
| 975 | ||
| 5583 | 976 | gaim_connection_update_progress(gc, _("Connecting"), 1, 2); |
| 2681 | 977 | |
| 978 | yd->fd = -1; | |
| 979 | yd->hash = g_hash_table_new(g_str_hash, g_str_equal); | |
| 3019 | 980 | yd->games = g_hash_table_new(g_str_hash, g_str_equal); |
| 2681 | 981 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
982 | if (gaim_proxy_connect(account, gaim_account_get_string(account, "server", YAHOO_PAGER_HOST), |
| 5583 | 983 | gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), |
| 984 | yahoo_got_connected, gc) != 0) { | |
|
6321
0b54b2a172d1
[gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
6115
diff
changeset
|
985 | gaim_connection_error(gc, _("Connection problem")); |
| 2681 | 986 | return; |
| 987 | } | |
| 988 | ||
| 989 | } | |
| 990 | ||
| 991 | static gboolean yahoo_destroy_hash(gpointer key, gpointer val, gpointer data) | |
| 992 | { | |
| 993 | g_free(key); | |
| 994 | g_free(val); | |
| 995 | return TRUE; | |
| 996 | } | |
| 997 | ||
| 5583 | 998 | static void yahoo_close(GaimConnection *gc) { |
| 2681 | 999 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; |
| 1000 | g_hash_table_foreach_remove(yd->hash, yahoo_destroy_hash, NULL); | |
| 1001 | g_hash_table_destroy(yd->hash); | |
| 3019 | 1002 | g_hash_table_foreach_remove(yd->games, yahoo_destroy_hash, NULL); |
| 1003 | g_hash_table_destroy(yd->games); | |
| 2681 | 1004 | if (yd->fd >= 0) |
| 1005 | close(yd->fd); | |
|
3720
dbba62e0d603
[gaim-migrate @ 3853]
Herman Bloggs <herman@bluedigits.com>
parents:
3642
diff
changeset
|
1006 | |
| 2681 | 1007 | if (yd->rxqueue) |
| 1008 | g_free(yd->rxqueue); | |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2686
diff
changeset
|
1009 | yd->rxlen = 0; |
| 2681 | 1010 | if (gc->inpa) |
| 1011 | gaim_input_remove(gc->inpa); | |
| 1012 | g_free(yd); | |
| 1013 | } | |
| 1014 | ||
| 5583 | 1015 | static const char *yahoo_list_icon(GaimAccount *a, struct buddy *b) |
| 2681 | 1016 | { |
| 4687 | 1017 | return "yahoo"; |
| 2681 | 1018 | } |
| 4916 | 1019 | |
| 1020 | static void yahoo_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) | |
| 1021 | { | |
| 1022 | int i = 0; | |
| 1023 | char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
| 5068 | 1024 | if (b->present == GAIM_BUDDY_OFFLINE) { |
| 4916 | 1025 | *se = "offline"; |
| 1026 | return; | |
| 1027 | } else { | |
| 1028 | if (b->uc & UC_UNAVAILABLE) | |
| 1029 | emblems[i++] = "away"; | |
| 1030 | if (b->uc & YAHOO_STATUS_GAME) | |
| 1031 | emblems[i++] = "game"; | |
| 1032 | } | |
| 1033 | *se = emblems[0]; | |
| 1034 | *sw = emblems[1]; | |
| 1035 | *nw = emblems[2]; | |
| 1036 | *ne = emblems[3]; | |
| 1037 | } | |
| 2681 | 1038 | |
| 1039 | static char *yahoo_get_status_string(enum yahoo_status a) | |
| 1040 | { | |
| 1041 | switch (a) { | |
| 1042 | case YAHOO_STATUS_BRB: | |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1043 | return _("Be Right Back"); |
| 2681 | 1044 | case YAHOO_STATUS_BUSY: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1045 | return _("Busy"); |
| 2681 | 1046 | case YAHOO_STATUS_NOTATHOME: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1047 | return _("Not At Home"); |
| 2681 | 1048 | case YAHOO_STATUS_NOTATDESK: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1049 | return _("Not At Desk"); |
| 2681 | 1050 | case YAHOO_STATUS_NOTINOFFICE: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1051 | return _("Not In Office"); |
| 2681 | 1052 | case YAHOO_STATUS_ONPHONE: |
| 4606 | 1053 | return _("On The Phone"); |
| 2681 | 1054 | case YAHOO_STATUS_ONVACATION: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1055 | return _("On Vacation"); |
| 2681 | 1056 | case YAHOO_STATUS_OUTTOLUNCH: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1057 | return _("Out To Lunch"); |
| 2681 | 1058 | case YAHOO_STATUS_STEPPEDOUT: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1059 | return _("Stepped Out"); |
|
2873
9e56887eeb06
[gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
1060 | case YAHOO_STATUS_INVISIBLE: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1061 | return _("Invisible"); |
| 4730 | 1062 | case YAHOO_STATUS_IDLE: |
| 1063 | return _("Idle"); | |
|
2879
e417cf7111c4
[gaim-migrate @ 2892]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2878
diff
changeset
|
1064 | default: |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1065 | return _("Online"); |
| 2681 | 1066 | } |
| 1067 | } | |
| 1068 | ||
| 5583 | 1069 | static void yahoo_game(GaimConnection *gc, const char *name) { |
| 3019 | 1070 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; |
| 1071 | char *game = g_hash_table_lookup(yd->games, name); | |
| 1072 | char *t; | |
| 1073 | char url[256]; | |
| 1074 | ||
| 1075 | if (!game) | |
| 1076 | return; | |
| 1077 | t = game = g_strdup(strstr(game, "ante?room=")); | |
| 1078 | while (*t != '\t') | |
| 1079 | t++; | |
| 1080 | *t = 0; | |
| 1081 | g_snprintf(url, sizeof url, "http://games.yahoo.com/games/%s", game); | |
|
6465
bd201d637ff4
[gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
1082 | gaim_notify_uri(gc, url); |
| 3019 | 1083 | g_free(game); |
| 1084 | } | |
| 4722 | 1085 | |
| 4732 | 1086 | static char *yahoo_status_text(struct buddy *b) |
| 4722 | 1087 | { |
| 1088 | struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data; | |
| 4730 | 1089 | if (b->uc & UC_UNAVAILABLE) { |
| 4732 | 1090 | if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM) |
| 1091 | return g_strdup(yahoo_get_status_string(b->uc >> 2)); | |
| 4777 | 1092 | else { |
| 1093 | char *stripped = strip_html(g_hash_table_lookup(yd->hash, b->name)); | |
| 1094 | if(stripped) { | |
| 1095 | char *ret = g_markup_escape_text(stripped, strlen(stripped)); | |
| 1096 | g_free(stripped); | |
| 1097 | return ret; | |
| 1098 | } | |
| 1099 | } | |
| 4722 | 1100 | } |
| 4729 | 1101 | return NULL; |
| 4722 | 1102 | } |
| 1103 | ||
| 4724 | 1104 | static char *yahoo_tooltip_text(struct buddy *b) |
| 1105 | { | |
| 1106 | struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data; | |
| 4730 | 1107 | if (b->uc & UC_UNAVAILABLE) { |
| 4745 | 1108 | char *status; |
| 1109 | char *ret; | |
| 4731 | 1110 | if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM) |
| 4745 | 1111 | status = g_strdup(yahoo_get_status_string(b->uc >> 2)); |
| 4724 | 1112 | else |
| 4745 | 1113 | status = strip_html(g_hash_table_lookup(yd->hash, b->name)); |
| 1114 | if(status) { | |
| 4777 | 1115 | char *escaped = g_markup_escape_text(status, strlen(status)); |
| 1116 | ret = g_strdup_printf(_("<b>Status:</b> %s"), escaped); | |
| 4745 | 1117 | g_free(status); |
| 4777 | 1118 | g_free(escaped); |
| 4745 | 1119 | return ret; |
| 1120 | } | |
| 4724 | 1121 | } |
| 4729 | 1122 | return NULL; |
| 1123 | } | |
| 1124 | ||
| 5583 | 1125 | static GList *yahoo_buddy_menu(GaimConnection *gc, const char *who) |
| 2681 | 1126 | { |
| 1127 | GList *m = NULL; | |
| 1128 | struct proto_buddy_menu *pbm; | |
| 1129 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
| 4687 | 1130 | struct buddy *b = gaim_find_buddy(gc->account, who); /* this should never be null. if it is, |
| 2681 | 1131 | segfault and get the bug report. */ |
| 3019 | 1132 | static char buf2[1024]; |
| 4722 | 1133 | |
| 3019 | 1134 | if (b->uc | YAHOO_STATUS_GAME) { |
| 1135 | char *game = g_hash_table_lookup(yd->games, b->name); | |
| 1136 | char *room; | |
| 1137 | if (!game) | |
| 1138 | return m; | |
| 1139 | if (game) { | |
| 1140 | char *t; | |
| 1141 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 1142 | if (!(room = strstr(game, "&follow="))) /* skip ahead to the url */ | |
| 1143 | return NULL; | |
| 1144 | while (*room && *room != '\t') /* skip to the tab */ | |
| 1145 | room++; | |
| 1146 | t = room++; /* room as now at the name */ | |
| 1147 | while (*t != '\n') | |
| 1148 | t++; /* replace the \n with a space */ | |
| 1149 | *t = ' '; | |
| 1150 | g_snprintf(buf2, sizeof buf2, "%s", room); | |
| 1151 | pbm->label = buf2; | |
| 1152 | pbm->callback = yahoo_game; | |
| 1153 | pbm->gc = gc; | |
| 1154 | m = g_list_append(m, pbm); | |
| 1155 | } | |
| 1156 | } | |
| 4722 | 1157 | |
| 2681 | 1158 | return m; |
| 1159 | } | |
| 1160 | ||
| 5583 | 1161 | static void yahoo_act_id(GaimConnection *gc, const char *entry) |
| 2681 | 1162 | { |
| 1163 | struct yahoo_data *yd = gc->proto_data; | |
| 1164 | ||
| 1165 | struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, 0); | |
| 1166 | yahoo_packet_hash(pkt, 3, entry); | |
| 1167 | yahoo_send_packet(yd, pkt); | |
| 1168 | yahoo_packet_free(pkt); | |
| 1169 | ||
| 5583 | 1170 | gaim_connection_set_display_name(gc, entry); |
| 2681 | 1171 | } |
| 1172 | ||
| 5583 | 1173 | static void yahoo_show_act_id(GaimConnection *gc) |
| 2681 | 1174 | { |
|
5493
f30de3b116ea
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1175 | gaim_request_input(gc, NULL, _("Active which ID?"), NULL, |
|
6035
b245be9cbe3b
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
5939
diff
changeset
|
1176 | gaim_connection_get_display_name(gc), FALSE, FALSE, |
|
5493
f30de3b116ea
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1177 | _("OK"), G_CALLBACK(yahoo_act_id), |
|
f30de3b116ea
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1178 | _("Cancel"), NULL, gc); |
| 2681 | 1179 | } |
| 1180 | ||
| 5583 | 1181 | static GList *yahoo_actions(GaimConnection *gc) { |
| 2681 | 1182 | GList *m = NULL; |
|
4333
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1183 | struct proto_actions_menu *pam; |
| 2681 | 1184 | |
|
4333
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1185 | pam = g_new0(struct proto_actions_menu, 1); |
|
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1186 | pam->label = _("Activate ID"); |
|
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1187 | pam->callback = yahoo_show_act_id; |
|
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1188 | pam->gc = gc; |
|
f4c095774bc2
[gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents:
4201
diff
changeset
|
1189 | m = g_list_append(m, pam); |
| 2681 | 1190 | |
| 1191 | return m; | |
| 1192 | } | |
| 1193 | ||
| 5583 | 1194 | static int yahoo_send_im(GaimConnection *gc, const char *who, const char *what, int len, int flags) |
| 2681 | 1195 | { |
| 1196 | struct yahoo_data *yd = gc->proto_data; | |
| 1197 | struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, 0); | |
| 3642 | 1198 | char *msg = g_strdup(what); |
| 2681 | 1199 | |
| 5583 | 1200 | yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc)); |
| 2681 | 1201 | yahoo_packet_hash(pkt, 5, who); |
| 3493 | 1202 | yahoo_packet_hash(pkt, 14, msg); |
|
6044
7832d0fb043f
[gaim-migrate @ 6494]
Mark Doliner <markdoliner@pidgin.im>
parents:
6035
diff
changeset
|
1203 | yahoo_packet_hash(pkt, 97, "1"); |
| 2681 | 1204 | |
| 1205 | yahoo_send_packet(yd, pkt); | |
| 1206 | ||
| 1207 | yahoo_packet_free(pkt); | |
| 3493 | 1208 | |
| 2681 | 1209 | return 1; |
| 1210 | } | |
| 1211 | ||
|
6059
9934c862ca14
[gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents:
6044
diff
changeset
|
1212 | int yahoo_send_typing(GaimConnection *gc, const char *who, int typ) |
| 2993 | 1213 | { |
| 1214 | struct yahoo_data *yd = gc->proto_data; | |
| 3019 | 1215 | struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_NOTIFY, YAHOO_STATUS_TYPING, 0); |
| 2993 | 1216 | yahoo_packet_hash(pkt, 49, "TYPING"); |
| 5583 | 1217 | yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc)); |
| 2993 | 1218 | yahoo_packet_hash(pkt, 14, " "); |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5685
diff
changeset
|
1219 | yahoo_packet_hash(pkt, 13, typ == GAIM_TYPING ? "1" : "0"); |
| 2993 | 1220 | yahoo_packet_hash(pkt, 5, who); |
| 1221 | yahoo_packet_hash(pkt, 1002, "1"); | |
| 1222 | ||
| 1223 | yahoo_send_packet(yd, pkt); | |
| 1224 | ||
| 1225 | yahoo_packet_free(pkt); | |
| 1226 | ||
| 3001 | 1227 | return 0; |
| 2993 | 1228 | } |
| 1229 | ||
|
6059
9934c862ca14
[gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents:
6044
diff
changeset
|
1230 | static void yahoo_set_away(GaimConnection *gc, const char *state, const char *msg) |
| 2681 | 1231 | { |
| 1232 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
| 1233 | struct yahoo_packet *pkt; | |
|
2772
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1234 | int service; |
| 2681 | 1235 | char s[4]; |
| 1236 | ||
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1237 | if (gc->away) { |
|
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1238 | g_free(gc->away); |
|
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1239 | gc->away = NULL; |
|
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1240 | } |
| 2681 | 1241 | |
| 1242 | if (msg) { | |
| 1243 | yd->current_status = YAHOO_STATUS_CUSTOM; | |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1244 | gc->away = g_strdup(msg); |
| 2681 | 1245 | } else if (state) { |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1246 | gc->away = g_strdup(""); |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1247 | if (!strcmp(state, _("Available"))) { |
| 2681 | 1248 | yd->current_status = YAHOO_STATUS_AVAILABLE; |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1249 | g_free(gc->away); |
| 2681 | 1250 | gc->away = NULL; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1251 | } else if (!strcmp(state, _("Be Right Back"))) { |
| 2681 | 1252 | yd->current_status = YAHOO_STATUS_BRB; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1253 | } else if (!strcmp(state, _("Busy"))) { |
| 2681 | 1254 | yd->current_status = YAHOO_STATUS_BUSY; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1255 | } else if (!strcmp(state, _("Not At Home"))) { |
| 2681 | 1256 | yd->current_status = YAHOO_STATUS_NOTATHOME; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1257 | } else if (!strcmp(state, _("Not At Desk"))) { |
| 2681 | 1258 | yd->current_status = YAHOO_STATUS_NOTATDESK; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1259 | } else if (!strcmp(state, _("Not In Office"))) { |
| 2681 | 1260 | yd->current_status = YAHOO_STATUS_NOTINOFFICE; |
| 4606 | 1261 | } else if (!strcmp(state, _("On The Phone"))) { |
| 2681 | 1262 | yd->current_status = YAHOO_STATUS_ONPHONE; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1263 | } else if (!strcmp(state, _("On Vacation"))) { |
| 2681 | 1264 | yd->current_status = YAHOO_STATUS_ONVACATION; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1265 | } else if (!strcmp(state, _("Out To Lunch"))) { |
| 2681 | 1266 | yd->current_status = YAHOO_STATUS_OUTTOLUNCH; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1267 | } else if (!strcmp(state, _("Stepped Out"))) { |
| 2681 | 1268 | yd->current_status = YAHOO_STATUS_STEPPEDOUT; |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1269 | } else if (!strcmp(state, _("Invisible"))) { |
| 2681 | 1270 | yd->current_status = YAHOO_STATUS_INVISIBLE; |
| 1271 | } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { | |
| 1272 | if (gc->is_idle) { | |
| 1273 | yd->current_status = YAHOO_STATUS_IDLE; | |
| 1274 | } else { | |
| 1275 | yd->current_status = YAHOO_STATUS_AVAILABLE; | |
| 1276 | } | |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4044
diff
changeset
|
1277 | g_free(gc->away); |
| 2681 | 1278 | gc->away = NULL; |
| 1279 | } | |
| 1280 | } else if (gc->is_idle) { | |
| 1281 | yd->current_status = YAHOO_STATUS_IDLE; | |
| 1282 | } else { | |
| 1283 | yd->current_status = YAHOO_STATUS_AVAILABLE; | |
| 1284 | } | |
| 1285 | ||
|
2772
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1286 | if (yd->current_status == YAHOO_STATUS_AVAILABLE) |
|
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1287 | service = YAHOO_SERVICE_ISBACK; |
|
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1288 | else |
|
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1289 | service = YAHOO_SERVICE_ISAWAY; |
|
f7659670fc0b
[gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2771
diff
changeset
|
1290 | pkt = yahoo_packet_new(service, yd->current_status, 0); |
| 2681 | 1291 | g_snprintf(s, sizeof(s), "%d", yd->current_status); |
| 1292 | yahoo_packet_hash(pkt, 10, s); | |
| 1293 | if (yd->current_status == YAHOO_STATUS_CUSTOM) | |
| 1294 | yahoo_packet_hash(pkt, 19, msg); | |
| 1295 | ||
| 1296 | yahoo_send_packet(yd, pkt); | |
| 1297 | yahoo_packet_free(pkt); | |
| 1298 | } | |
| 1299 | ||
| 5583 | 1300 | static void yahoo_set_idle(GaimConnection *gc, int idle) |
| 2681 | 1301 | { |
| 1302 | struct yahoo_data *yd = gc->proto_data; | |
| 1303 | struct yahoo_packet *pkt = NULL; | |
| 1304 | ||
| 1305 | if (idle && yd->current_status == YAHOO_STATUS_AVAILABLE) { | |
| 1306 | pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_IDLE, 0); | |
| 1307 | yd->current_status = YAHOO_STATUS_IDLE; | |
| 1308 | } else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) { | |
| 1309 | pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0); | |
| 1310 | yd->current_status = YAHOO_STATUS_AVAILABLE; | |
| 1311 | } | |
| 1312 | ||
| 1313 | if (pkt) { | |
| 1314 | char buf[4]; | |
| 1315 | g_snprintf(buf, sizeof(buf), "%d", yd->current_status); | |
| 1316 | yahoo_packet_hash(pkt, 10, buf); | |
| 1317 | yahoo_send_packet(yd, pkt); | |
| 1318 | yahoo_packet_free(pkt); | |
| 1319 | } | |
| 1320 | } | |
| 1321 | ||
| 5583 | 1322 | static GList *yahoo_away_states(GaimConnection *gc) |
| 2681 | 1323 | { |
| 1324 | GList *m = NULL; | |
| 1325 | ||
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1326 | m = g_list_append(m, _("Available")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1327 | m = g_list_append(m, _("Be Right Back")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1328 | m = g_list_append(m, _("Busy")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1329 | m = g_list_append(m, _("Not At Home")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1330 | m = g_list_append(m, _("Not At Desk")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1331 | m = g_list_append(m, _("Not In Office")); |
| 4606 | 1332 | m = g_list_append(m, _("On The Phone")); |
|
4596
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1333 | m = g_list_append(m, _("On Vacation")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1334 | m = g_list_append(m, _("Out To Lunch")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1335 | m = g_list_append(m, _("Stepped Out")); |
|
64e72bf4ece4
[gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4491
diff
changeset
|
1336 | m = g_list_append(m, _("Invisible")); |
| 2681 | 1337 | m = g_list_append(m, GAIM_AWAY_CUSTOM); |
| 1338 | ||
| 1339 | return m; | |
| 1340 | } | |
| 1341 | ||
| 5583 | 1342 | static void yahoo_keepalive(GaimConnection *gc) |
| 2681 | 1343 | { |
| 1344 | struct yahoo_data *yd = gc->proto_data; | |
| 1345 | struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_PING, YAHOO_STATUS_AVAILABLE, 0); | |
| 1346 | yahoo_send_packet(yd, pkt); | |
| 1347 | yahoo_packet_free(pkt); | |
| 1348 | } | |
| 1349 | ||
| 5583 | 1350 | static void yahoo_add_buddy(GaimConnection *gc, const char *who) |
| 2681 | 1351 | { |
| 1352 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
| 1353 | struct yahoo_packet *pkt; | |
| 1354 | struct group *g; | |
| 1355 | char *group = NULL; | |
| 1356 | ||
| 1357 | if (!yd->logged_in) | |
| 1358 | return; | |
| 1359 | ||
| 4687 | 1360 | g = gaim_find_buddys_group(gaim_find_buddy(gc->account, who)); |
| 2681 | 1361 | if (g) |
| 1362 | group = g->name; | |
| 1363 | else | |
| 1364 | group = "Buddies"; | |
| 1365 | ||
| 1366 | pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0); | |
| 5583 | 1367 | yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc)); |
| 2681 | 1368 | yahoo_packet_hash(pkt, 7, who); |
| 1369 | yahoo_packet_hash(pkt, 65, group); | |
| 1370 | yahoo_send_packet(yd, pkt); | |
| 1371 | yahoo_packet_free(pkt); | |
| 1372 | } | |
| 1373 | ||
|
6059
9934c862ca14
[gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents:
6044
diff
changeset
|
1374 | static void yahoo_remove_buddy(GaimConnection *gc, const char *who, const char *group) |
| 2681 | 1375 | { |
| 1376 | struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
| 1377 | ||
| 1378 | struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0); | |
| 5583 | 1379 | yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc)); |
| 2681 | 1380 | yahoo_packet_hash(pkt, 7, who); |
| 1381 | yahoo_packet_hash(pkt, 65, group); | |
| 1382 | yahoo_send_packet(yd, pkt); | |
| 1383 | yahoo_packet_free(pkt); | |
| 1384 | } | |
| 1385 | ||
| 6513 | 1386 | static gboolean yahoo_unload_plugin(GaimPlugin *plugin) |
| 1387 | { | |
| 1388 | yahoo_dest_colorht(); | |
| 1389 | return TRUE; | |
| 1390 | } | |
| 1391 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1392 | static GaimPlugin *my_protocol = NULL; |
| 2681 | 1393 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1394 | static GaimPluginProtocolInfo prpl_info = |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1395 | { |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1396 | GAIM_PROTO_YAHOO, |
| 5367 | 1397 | OPT_PROTO_MAIL_CHECK | OPT_PROTO_USE_POINTSIZE, |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1398 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1399 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1400 | yahoo_list_icon, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1401 | yahoo_list_emblems, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1402 | yahoo_status_text, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1403 | yahoo_tooltip_text, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1404 | yahoo_away_states, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1405 | yahoo_actions, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1406 | yahoo_buddy_menu, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1407 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1408 | yahoo_login, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1409 | yahoo_close, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1410 | yahoo_send_im, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1411 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1412 | yahoo_send_typing, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1413 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1414 | yahoo_set_away, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1415 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1416 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1417 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1418 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1419 | yahoo_set_idle, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1420 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1421 | yahoo_add_buddy, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1422 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1423 | yahoo_remove_buddy, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1424 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1425 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1426 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1427 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1428 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1429 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1430 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1431 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1432 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1433 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1434 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1435 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1436 | yahoo_keepalive, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1437 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1438 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1439 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1440 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1441 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1442 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1443 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1444 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1445 | NULL |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1446 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1447 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1448 | static GaimPluginInfo info = |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1449 | { |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1450 | 2, /**< api_version */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1451 | GAIM_PLUGIN_PROTOCOL, /**< type */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1452 | NULL, /**< ui_requirement */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1453 | 0, /**< flags */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1454 | NULL, /**< dependencies */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1455 | GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1456 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1457 | "prpl-yahoo", /**< id */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1458 | "Yahoo", /**< name */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1459 | VERSION, /**< version */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1460 | /** summary */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1461 | N_("Yahoo Protocol Plugin"), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1462 | /** description */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1463 | N_("Yahoo Protocol Plugin"), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1464 | NULL, /**< author */ |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6321
diff
changeset
|
1465 | GAIM_WEBSITE, /**< homepage */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1466 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1467 | NULL, /**< load */ |
| 6513 | 1468 | yahoo_unload_plugin, /**< unload */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1469 | NULL, /**< destroy */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1470 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1471 | NULL, /**< ui_info */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1472 | &prpl_info /**< extra_info */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1473 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1474 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1475 | static void |
|
5920
963bfdefee02
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
1476 | init_plugin(GaimPlugin *plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1477 | { |
|
5638
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1478 | GaimAccountOption *option; |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1479 | |
|
5685
2523e4143d74
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
1480 | option = gaim_account_option_string_new(_("Pager host"), "server", |
|
5638
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1481 | YAHOO_PAGER_HOST); |
|
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1482 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
|
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1483 | option); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1484 | |
|
5685
2523e4143d74
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
1485 | option = gaim_account_option_int_new(_("Pager port"), "port", |
|
5638
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1486 | YAHOO_PAGER_PORT); |
|
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1487 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
|
53e752c88ea1
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5590
diff
changeset
|
1488 | option); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1489 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1490 | my_protocol = plugin; |
| 6513 | 1491 | |
| 1492 | yahoo_init_colorht(); | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1493 | } |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1494 | |
|
5920
963bfdefee02
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
1495 | GAIM_INIT_PLUGIN(yahoo, init_plugin, info); |