src/protocols/yahoo/yahoo.c

Mon, 19 Apr 2004 21:12:45 +0000

author
Gary Kramlich <grim@pidgin.im>
date
Mon, 19 Apr 2004 21:12:45 +0000
changeset 8713
8a7baa8f8460
parent 8697
c5e51aef2026
child 8735
01248ea222d3
permissions
-rw-r--r--

[gaim-migrate @ 9467]
" Expansion from my original protocol prefs to plugin prefs.

Things are handled a bit different in this iteration of
it, but I have already modified msn and jabber to use
it, and included an example plugin to show how to use
it. It will also generate pages with doxygen. The
example plugin doesn't not contain any translatable
strings seeing as we're in the string freeze. And it's
an example, whats the point of translating it..?

Also, I tweaked the documentation for 2 functions in
gtkprefs, gaim_gtk_prefs_dropdown and
gaim_gtk_prefs_dropdown_from_list. Nothing major in
that, just made it say that the list should be a list
of pairs label/value.

Also there's 5 new files that will need to be added to cvs:
src/pluginpref.h
src/pluginpref.c
src/gtkpluginpref.h
src/gtkpluginpref.c
plugins/pluginpref_example.c

the tarball already has them structured correctly and
contains the diff" --Gary Kramlich - amc_grim

and the german translator pointed out that sean missed the novell file for POTFILES.in

committer: Luke Schierer <lschiere@pidgin.im>

2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * gaim
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8045
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8045
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8045
diff changeset
6 * source distribution.
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * (at your option) any later version.
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * GNU General Public License for more details.
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 */
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
23 #include "internal.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
25 #include "account.h"
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5590
diff changeset
26 #include "accountopt.h"
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
27 #include "blist.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
28 #include "debug.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #include "multi.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
30 #include "notify.h"
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
31 #include "privacy.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 #include "prpl.h"
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 #include "proxy.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
34 #include "request.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
35 #include "server.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
36 #include "util.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
37
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
38 #include "sha.h"
6513
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
39 #include "yahoo.h"
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
40 #include "yahoochat.h"
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
41 #include "yahoo_auth.h"
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
42 #include "yahoo_filexfer.h"
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
43 #include "md5.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
45 extern char *yahoo_crypt(const char *, const char *);
2795
b2e15894ab75 [gaim-migrate @ 2808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2786
diff changeset
46
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
47 typedef struct
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
48 {
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
49 GaimConnection *gc;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
50 char *name;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
51 } YahooGetInfoData;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
52
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
53
5493
f30de3b116ea [gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
54 /* #define YAHOO_DEBUG */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55
6791
af1653e39a87 [gaim-migrate @ 7330]
Luke Schierer <lschiere@pidgin.im>
parents: 6787
diff changeset
56 static void yahoo_add_buddy(GaimConnection *gc, const char *who, GaimGroup *);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
57
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
58 static struct yahoo_friend *yahoo_friend_new(void)
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
59 {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
60 struct yahoo_friend *ret;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
61
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
62 ret = g_new0(struct yahoo_friend, 1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
63 ret->status = YAHOO_STATUS_OFFLINE;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
64
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
65 return ret;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
66 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
67
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
68 static void yahoo_friend_free(gpointer p)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
69 {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
70 struct yahoo_friend *f = p;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
71 if (f->msg)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
72 g_free(f->msg);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
73 if (f->game)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
74 g_free(f->game);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
75 g_free(f);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
76 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
77
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
78 struct yahoo_packet *yahoo_packet_new(enum yahoo_service service, enum yahoo_status status, int id)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 struct yahoo_packet *pkt = g_new0(struct yahoo_packet, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 pkt->service = service;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 pkt->status = status;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 pkt->id = id;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 return pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
89 void yahoo_packet_hash(struct yahoo_packet *pkt, int key, const char *value)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 pair->key = key;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 pair->value = g_strdup(value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 pkt->hash = g_slist_append(pkt->hash, pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
97 int yahoo_packet_length(struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 GSList *l;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 int len = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 int tmp = pair->key;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 do {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 tmp /= 10;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 len++;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110 } while (tmp);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111 len += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112 len += strlen(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 len += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 return len;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120 static void yahoo_packet_read(struct yahoo_packet *pkt, guchar *data, int len)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 while (pos + 1 < len) {
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
125 char key[64], *value = NULL, *esc;
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
126 int accept;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 int x;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 x = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 while (pos + 1 < len) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 if (data[pos] == 0xc0 && data[pos + 1] == 0x80)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
135 if (x >= sizeof(key)-1) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
136 x++;
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8349
diff changeset
137 pos++;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
138 continue;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
139 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 key[x++] = data[pos++];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 }
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
142 if (x >= sizeof(key)-1) {
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
143 x = 0;
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
144 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 key[x] = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 pair->key = strtol(key, NULL, 10);
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
148 accept = x; /* if x is 0 there was no key, so don't accept it */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
150 if (len - pos + 1 <= 0) {
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
151 /* Truncated. Garbage or something. */
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
152 accept = 0;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
153 }
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
154
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
155 if (accept) {
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
156 value = g_malloc(len - pos + 1);
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
157 x = 0;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
158 while (pos + 1 < len) {
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
159 if (data[pos] == 0xc0 && data[pos + 1] == 0x80)
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
160 break;
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
161 value[x++] = data[pos++];
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
162 }
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
163 value[x] = 0;
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
164 pair->value = g_strdup(value);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
165 g_free(value);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
166 pkt->hash = g_slist_append(pkt->hash, pair);
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
167 esc = g_strescape(pair->value, NULL);
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
168 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
169 "Key: %d \tValue: %s\n", pair->key, esc);
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
170 g_free(esc);
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
171 } else {
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
172 g_free(pair);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
173 }
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
174 pos += 2;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
175
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
176 /* Skip over garbage we've noticed in the mail notifications */
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
177 if (data[0] == '9' && data[pos] == 0x01)
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
178 pos++;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
182 void yahoo_packet_write(struct yahoo_packet *pkt, guchar *data)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 guchar buf[100];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 g_snprintf(buf, sizeof(buf), "%d", pair->key);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 strcpy(data + pos, buf);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 pos += strlen(buf);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 data[pos++] = 0xc0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 data[pos++] = 0x80;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 strcpy(data + pos, pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 pos += strlen(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 data[pos++] = 0xc0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 data[pos++] = 0x80;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 static void yahoo_packet_dump(guchar *data, int len)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 #ifdef YAHOO_DEBUG
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 int i;
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
210
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
211 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
212
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 for (i = 0; i + 1 < len; i += 2) {
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
214 if ((i % 16 == 0) && i) {
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
215 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
216 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
217 }
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
218
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
219 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02x%02x ", data[i], data[i + 1]);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 if (i < len)
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
222 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02x", data[i]);
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
223
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
224 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
225 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
226
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 for (i = 0; i < len; i++) {
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
228 if ((i % 16 == 0) && i) {
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
229 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
230 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
231 }
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
232
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
233 if (g_ascii_isprint(data[i]))
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
234 gaim_debug(GAIM_DEBUG_MISC, NULL, "%c ", data[i]);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235 else
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
236 gaim_debug(GAIM_DEBUG_MISC, NULL, ". ");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
237 }
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
238
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
239 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240 #endif
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
241 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
243 int yahoo_send_packet(struct yahoo_data *yd, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245 int pktlen = yahoo_packet_length(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
246 int len = YAHOO_PACKET_HDRLEN + pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 int ret;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249 guchar *data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
251
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
252 if (yd->fd < 0)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253 return -1;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
254
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
255 data = g_malloc0(len + 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257 memcpy(data + pos, "YMSG", 4); pos += 4;
3467
94a963c6c817 [gaim-migrate @ 3517]
Sean Egan <seanegan@pidgin.im>
parents: 3466
diff changeset
258 pos += yahoo_put16(data + pos, YAHOO_PROTO_VER);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 pos += yahoo_put16(data + pos, 0x0000);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 pos += yahoo_put16(data + pos, pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 pos += yahoo_put16(data + pos, pkt->service);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262 pos += yahoo_put32(data + pos, pkt->status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 pos += yahoo_put32(data + pos, pkt->id);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265 yahoo_packet_write(pkt, data + pos);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
266
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
267 yahoo_packet_dump(data, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 ret = write(yd->fd, data, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 g_free(data);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271 return ret;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
274 void yahoo_packet_free(struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
275 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
276 while (pkt->hash) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277 struct yahoo_pair *pair = pkt->hash->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 g_free(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279 g_free(pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 pkt->hash = g_slist_remove(pkt->hash, pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
282 g_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
285 static void yahoo_update_status(GaimConnection *gc, const char *name, struct yahoo_friend *f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
286 {
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
287 int online = 1;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
288
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
289 if (!gc || !name || !f || !gaim_find_buddy(gaim_connection_get_account(gc), name))
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
290 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
291
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
292 if (f->status == YAHOO_STATUS_OFFLINE)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
293 online = 0;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
294
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
295 serv_got_update(gc, name, online, 0, 0, f->idle, f->away ? UC_UNAVAILABLE : 0);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
296 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
297
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
298 static void yahoo_process_status(GaimConnection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
299 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
300 struct yahoo_data *yd = gc->proto_data;
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
301 GaimAccount *account = gaim_connection_get_account(gc);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
302 GSList *l = pkt->hash;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
303 struct yahoo_friend *f = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 char *name = NULL;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
305
7892
227c27d0183d [gaim-migrate @ 8552]
Daniel Atallah <datallah@pidgin.im>
parents: 7883
diff changeset
306 if (pkt->service == YAHOO_SERVICE_LOGOFF && pkt->status == -1) {
8383
bd8f3eb5191d [gaim-migrate @ 9111]
Rob Foehl
parents: 8375
diff changeset
307 gc->wants_to_die = TRUE;
7892
227c27d0183d [gaim-migrate @ 8552]
Daniel Atallah <datallah@pidgin.im>
parents: 7883
diff changeset
308 gaim_connection_error(gc, _("You have been logged off as you have logged in on a different machine or device."));
227c27d0183d [gaim-migrate @ 8552]
Daniel Atallah <datallah@pidgin.im>
parents: 7883
diff changeset
309 return;
227c27d0183d [gaim-migrate @ 8552]
Daniel Atallah <datallah@pidgin.im>
parents: 7883
diff changeset
310 }
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
311
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
314
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
315 switch (pair->key) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 case 0: /* we won't actually do anything with this */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
318 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
319 if (!yd->logged_in) {
7664
d8e8d575276d [gaim-migrate @ 8308]
Tim Ringenbach <marv@pidgin.im>
parents: 7651
diff changeset
320 gaim_connection_set_display_name(gc, pair->value);
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
321 gaim_connection_set_state(gc, GAIM_CONNECTED);
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
322 serv_finish_login(gc);
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
323 yd->logged_in = TRUE;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
325 /* this requests the list. i have a feeling that this is very evil
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
326 *
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
327 * scs.yahoo.com sends you the list before this packet without it being
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
328 * requested
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
329 *
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
330 * do_import(gc, NULL);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
331 * newpkt = yahoo_packet_new(YAHOO_SERVICE_LIST, YAHOO_STATUS_OFFLINE, 0);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
332 * yahoo_send_packet(yd, newpkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
333 * yahoo_packet_free(newpkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
334 */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
335
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
336 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338 case 8: /* how many online buddies we have */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
339 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
340 case 7: /* the current buddy */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
341 name = pair->value;
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
342 f = g_hash_table_lookup(yd->friends, gaim_normalize(account, name));
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
343 if (!f) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
344 f = yahoo_friend_new();
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
345 g_hash_table_insert(yd->friends, g_strdup(gaim_normalize(account, name)), f);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
346 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
348 case 10: /* state */
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
349 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
350 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
351
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
352 f->status = strtol(pair->value, NULL, 10);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
353 if ((f->status >= YAHOO_STATUS_BRB) && (f->status <= YAHOO_STATUS_STEPPEDOUT))
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
354 f->away = 1;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
355 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
356 f->away = 0;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
357 if (f->status == YAHOO_STATUS_IDLE)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
358 f->idle = time(NULL);
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6796
diff changeset
359 else
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6796
diff changeset
360 f->idle = 0;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
361 if (f->status != YAHOO_STATUS_CUSTOM) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
362 g_free(f->msg);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
363 f->msg = NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
364 }
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
365
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
366 f->sms = 0;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
368 case 19: /* custom message */
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
369 if (f) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
370 if (f->msg)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
371 g_free(f->msg);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
372 f->msg = yahoo_string_decode(gc, pair->value, FALSE);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
373 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
374 break;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
375 case 11: /* this is the buddy's session id */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
376 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
377 case 17: /* in chat? */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
378 break;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
379 case 47: /* is custom status away or not? 2=idle*/
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
380 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
381 break;
8441
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
382
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
383 /* I have no idea what it means when this is
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
384 * set when someone's available, but it doesn't
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
385 * mean idle. */
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
386 if (f->status == YAHOO_STATUS_AVAILABLE)
94a84c00e8e0 [gaim-migrate @ 9171]
Tim Ringenbach <marv@pidgin.im>
parents: 8383
diff changeset
387 break;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
388 f->away = strtol(pair->value, NULL, 10);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
389 if (f->away == 2)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
390 f->idle = time(NULL);
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
391 break;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
392 case 138: /* either we're not idle, or we are but won't say how long */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
393 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
394 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
395
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
396 if (f->idle)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
397 f->idle = -1;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
398 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
399 case 137: /* usually idle time in seconds, sometimes login time */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
400 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
401 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
402
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
403 if (f->status != YAHOO_STATUS_AVAILABLE)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
404 f->idle = time(NULL) - strtol(pair->value, NULL, 10);
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
405 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
406 case 13: /* bitmask, bit 0 = pager, bit 1 = chat, bit 2 = game */
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
407 if (strtol(pair->value, NULL, 10) == 0) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
408 if (f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
409 f->status = YAHOO_STATUS_OFFLINE;
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
410 serv_got_update(gc, name, 0, 0, 0, 0, 0);
2807
fe1ea0453890 [gaim-migrate @ 2820]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2805
diff changeset
411 break;
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
412 }
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
413
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
414 if (f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
415 yahoo_update_status(gc, name, f);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
416 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
417 case 60: /* SMS */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
418 if (f) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
419 f->sms = strtol(pair->value, NULL, 10);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
420 yahoo_update_status(gc, name, f);
2771
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
421 }
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
422 break;
2979
ea91012810b3 [gaim-migrate @ 2992]
Rob Flynn <gaim@robflynn.com>
parents: 2951
diff changeset
423 case 16: /* Custom error message */
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
424 {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
425 char *tmp = yahoo_string_decode(gc, pair->value, TRUE);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
426 gaim_notify_error(gc, NULL, tmp, NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
427 g_free(tmp);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
428 }
2951
fa9b438bf678 [gaim-migrate @ 2964]
Rob Flynn <gaim@robflynn.com>
parents: 2918
diff changeset
429 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
430 default:
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
431 gaim_debug(GAIM_DEBUG_ERROR, "yahoo",
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
432 "Unknown status key %d\n", pair->key);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
433 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
435
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
436 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
437 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
438 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
439
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
440 static void yahoo_do_group_check(GaimAccount *account, GHashTable *ht, const char *name, const char *group,
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
441 gboolean *export)
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
442 {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
443 GaimBuddy *b;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
444 GaimGroup *g;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
445 GSList *list, *i;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
446 gboolean onlist = 0;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
447 char *oname = NULL;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
448
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
449 if (!g_hash_table_lookup_extended(ht, gaim_normalize(account, name), (gpointer *) &oname, (gpointer *) &list))
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
450 list = gaim_find_buddies(account, name);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
451 else
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
452 g_hash_table_steal(ht, name);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
453
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
454 for (i = list; i; i = i->next) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
455 b = i->data;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
456 g = gaim_find_buddys_group(b);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
457 if (!gaim_utf8_strcasecmp(group, g->name)) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
458 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
459 "Oh good, %s is in the right group (%s).\n", name, group);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
460 list = g_slist_delete_link(list, i);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
461 onlist = 1;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
462 break;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
463 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
464 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
465
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
466 if (!onlist) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
467 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
468 "Uhoh, %s isn't on the list (or not in this group), adding him to group %s.\n", name, group);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
469 if (!(g = gaim_find_group(group))) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
470 g = gaim_group_new(group);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
471 gaim_blist_add_group(g, NULL);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
472 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
473 b = gaim_buddy_new(account, name, NULL);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
474 gaim_blist_add_buddy(b, NULL, g, NULL);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
475 *export = TRUE;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
476 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
477
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
478 if (list) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
479 if (!oname)
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
480 oname = g_strdup(gaim_normalize(account, name));
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
481 g_hash_table_insert(ht, oname, list);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
482 } else if (oname)
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
483 g_free(oname);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
484 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
485
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
486 static void yahoo_do_group_cleanup(gpointer key, gpointer value, gpointer user_data)
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
487 {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
488 char *name = key;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
489 GSList *list = value, *i;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
490 GaimBuddy *b;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
491 GaimGroup *g;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
492 gboolean *export = user_data;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
493
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
494 if (list)
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
495 *export = TRUE;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
496
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
497 for (i = list; i; i = i->next) {
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
498 b = i->data;
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
499 g = gaim_find_buddys_group(b);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
500 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "Deleting Buddy %s from group %s.\n", name, g->name);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
501 gaim_blist_remove_buddy(b);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
502 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
503 }
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
504
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
505 static char *_getcookie(char *rawcookie)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
506 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
507 char *cookie = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
508 char *tmpcookie;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
509 char *cookieend;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
510
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
511 if (strlen(rawcookie) < 2)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
512 return NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
513 tmpcookie = g_strdup(rawcookie+2);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
514 cookieend = strchr(tmpcookie, ';');
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
515
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
516 if (cookieend)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
517 *cookieend = '\0';
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
518
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
519 cookie = g_strdup(tmpcookie);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
520 g_free(tmpcookie);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
521
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
522 return cookie;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
523 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
524
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
525 static void yahoo_process_cookie(struct yahoo_data *yd, char *c)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
526 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
527 if (c[0] == 'Y') {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
528 if (yd->cookie_y)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
529 g_free(yd->cookie_y);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
530 yd->cookie_y = _getcookie(c);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
531 } else if (c[0] == 'T') {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
532 if (yd->cookie_t)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
533 g_free(yd->cookie_t);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
534 yd->cookie_t = _getcookie(c);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
535 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
536 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
537
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
538 static void yahoo_process_list(GaimConnection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
539 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
540 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
541 gboolean export = FALSE;
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
542 gboolean got_serv_list = FALSE;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
543 GaimBuddy *b;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
544 GaimGroup *g;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
545 struct yahoo_friend *f = NULL;
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
546 GaimAccount *account = gaim_connection_get_account(gc);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
547 struct yahoo_data *yd = gc->proto_data;
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
548 GHashTable *ht;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
549
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
550 char **lines;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
551 char **split;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
552 char **buddies;
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
553 char **tmp, **bud, *norm_bud;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
554 char *grp = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
556 if (pkt->id)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
557 yd->session_id = pkt->id;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
558
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
559 while (l) {
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
560 struct yahoo_pair *pair = l->data;
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
561 l = l->next;
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
562
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
563 switch (pair->key) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
564 case 87:
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
565 if (!yd->tmp_serv_blist)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
566 yd->tmp_serv_blist = g_string_new(pair->value);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
567 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
568 g_string_append(yd->tmp_serv_blist, pair->value);
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
569 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
570 case 88:
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
571 if (!yd->tmp_serv_ilist)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
572 yd->tmp_serv_ilist = g_string_new(pair->value);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
573 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
574 g_string_append(yd->tmp_serv_ilist, pair->value);
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
575 break;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
576 case 59: /* cookies, yum */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
577 yahoo_process_cookie(yd, pair->value);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
578 break;
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
579 }
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
580 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
581
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
582 if (pkt->status != 0)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
583 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
584
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
585 if (yd->tmp_serv_blist) {
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
586 ht = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_slist_free);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
587
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
588 lines = g_strsplit(yd->tmp_serv_blist->str, "\n", -1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
589 for (tmp = lines; *tmp; tmp++) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
590 split = g_strsplit(*tmp, ":", 2);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
591 if (!split)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
592 continue;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
593 if (!split[0] || !split[1]) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
594 g_strfreev(split);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
595 continue;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
596 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
597 grp = yahoo_string_decode(gc, split[0], FALSE);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
598 buddies = g_strsplit(split[1], ",", -1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
599 for (bud = buddies; bud && *bud; bud++) {
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
600 norm_bud = g_strdup(gaim_normalize(account, *bud));
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
601 if (!(f = g_hash_table_lookup(yd->friends, norm_bud))) {
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
602 f = yahoo_friend_new();
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
603 g_hash_table_insert(yd->friends, g_strdup(norm_bud), f);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
604 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
605 if (!(b = gaim_find_buddy(account, norm_bud))) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
606 if (!(g = gaim_find_group(grp))) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
607 g = gaim_group_new(grp);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
608 gaim_blist_add_group(g, NULL);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
609 }
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
610 b = gaim_buddy_new(account, norm_bud, NULL);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
611 gaim_blist_add_buddy(b, NULL, g, NULL);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
612 export = TRUE;
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
613 }
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
614
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
615 yahoo_do_group_check(account, ht, norm_bud, grp, &export);
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
616 g_free(norm_bud);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
617 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
618 g_strfreev(buddies);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
619 g_strfreev(split);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
620 g_free(grp);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
621 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
622 g_strfreev(lines);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
623
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
624 g_string_free(yd->tmp_serv_blist, TRUE);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
625 yd->tmp_serv_blist = NULL;
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
626 g_hash_table_foreach(ht, yahoo_do_group_cleanup, &export);
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
627 g_hash_table_destroy(ht);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
628 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
629
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
630
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
631 if (yd->tmp_serv_ilist) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
632 buddies = g_strsplit(yd->tmp_serv_ilist->str, ",", -1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
633 for (bud = buddies; bud && *bud; bud++) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
634 /* The server is already ignoring the user */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
635 got_serv_list = TRUE;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
636 gaim_privacy_deny_add(gc->account, *bud, 1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
637 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
638 g_strfreev(buddies);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
639
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
640 g_string_free(yd->tmp_serv_ilist, TRUE);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
641 yd->tmp_serv_ilist = NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
642 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
643
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
644 if (got_serv_list) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
645 gc->account->perm_deny = 4;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
646 serv_set_permit_deny(gc);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
647 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
648 if (export)
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
649 gaim_blist_save();
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
650 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
651
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
652 static void yahoo_process_notify(GaimConnection *gc, struct yahoo_packet *pkt)
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
653 {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
654 char *msg = NULL;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
655 char *from = NULL;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
656 char *stat = NULL;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
657 char *game = NULL;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
658 struct yahoo_friend *f = NULL;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
659 GSList *l = pkt->hash;
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
660 GaimAccount *account = gaim_connection_get_account(gc);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
661 struct yahoo_data *yd = (struct yahoo_data*) gc->proto_data;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
662
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
663 while (l) {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
664 struct yahoo_pair *pair = l->data;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
665 if (pair->key == 4)
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
666 from = pair->value;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
667 if (pair->key == 49)
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
668 msg = pair->value;
3001
9fc89391c8fa [gaim-migrate @ 3014]
Sean Egan <seanegan@pidgin.im>
parents: 2993
diff changeset
669 if (pair->key == 13)
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
670 stat = pair->value;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
671 if (pair->key == 14)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
672 game = pair->value;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
673 l = l->next;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
674 }
3640
870c747e2117 [gaim-migrate @ 3763]
Sean Egan <seanegan@pidgin.im>
parents: 3630
diff changeset
675
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
676 if (!from || !msg)
3640
870c747e2117 [gaim-migrate @ 3763]
Sean Egan <seanegan@pidgin.im>
parents: 3630
diff changeset
677 return;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
678
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
679 if (!g_ascii_strncasecmp(msg, "TYPING", strlen("TYPING"))) {
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
680 if (*stat == '1')
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
681 serv_got_typing(gc, from, 0, GAIM_TYPING);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
682 else
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
683 serv_got_typing_stopped(gc, from);
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
684 } else if (!g_ascii_strncasecmp(msg, "GAME", strlen("GAME"))) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
685 GaimBuddy *bud = gaim_find_buddy(gc->account, from);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
686
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
687 if (!bud) {
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
688 gaim_debug(GAIM_DEBUG_WARNING, "yahoo",
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
689 "%s is playing a game, and doesn't want "
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
690 "you to know.\n", from);
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
691 }
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
692
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
693 f = g_hash_table_lookup(yd->friends, gaim_normalize(account, from));
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
694 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
695 return; /* if they're not on the list, don't bother */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
696
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
697 if (f->game) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
698 g_free(f->game);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
699 f->game = NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
700 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
701
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
702 if (*stat == '1') {
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
703 f->game = g_strdup(game);
3020
121e08802117 [gaim-migrate @ 3033]
Sean Egan <seanegan@pidgin.im>
parents: 3019
diff changeset
704 if (bud)
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
705 yahoo_update_status(gc, from, f);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
706 }
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
707 }
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
708 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
709
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
710
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
711 struct _yahoo_im {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
712 char *from;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
713 int time;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
714 int utf8;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
715 char *msg;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
716 };
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
717
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
718 static void yahoo_process_message(GaimConnection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
719 {
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
720 GSList *l = pkt->hash;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
721 GSList *list = NULL;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
722 struct _yahoo_im *im = NULL;
6069
9f46466c89f8 [gaim-migrate @ 6519]
Luke Schierer <lschiere@pidgin.im>
parents: 6061
diff changeset
723
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
724 if (pkt->status <= 1 || pkt->status == 5) {
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
725 while (l) {
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
726 struct yahoo_pair *pair = l->data;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
727 if (pair->key == 4) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
728 im = g_new0(struct _yahoo_im, 1);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
729 list = g_slist_append(list, im);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
730 im->from = pair->value;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
731 im->time = time(NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
732 }
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
733 if (pair->key == 97)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
734 if (im)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
735 im->utf8 = strtol(pair->value, NULL, 10);
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
736 if (pair->key == 15)
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
737 if (im)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
738 im->time = strtol(pair->value, NULL, 10);
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
739 if (pair->key == 14) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
740 if (im)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
741 im->msg = pair->value;
6687
39462117d34d [gaim-migrate @ 7213]
Nandan Dixit
parents: 6686
diff changeset
742 }
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
743 l = l->next;
6687
39462117d34d [gaim-migrate @ 7213]
Nandan Dixit
parents: 6686
diff changeset
744 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
745 } else if (pkt->status == 2) {
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5367
diff changeset
746 gaim_notify_error(gc, NULL,
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5367
diff changeset
747 _("Your Yahoo! message did not get sent."), NULL);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
748 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
749
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
750 for (l = list; l; l = l->next) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
751 char *m, *m2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
752 im = l->data;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
753
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
754 if (!im->from || !im->msg) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
755 g_free(im);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
756 continue;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
757 }
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
758
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
759 m = yahoo_string_decode(gc, im->msg, im->utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
760 gaim_str_strip_cr(m);
8375
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
761
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
762 if (!strcmp(m, "<ding>")) {
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
763 GaimConversation *c = gaim_conversation_new(GAIM_CONV_IM,
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
764 gaim_connection_get_account(gc), im->from);
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
765 gaim_conv_im_write(GAIM_CONV_IM(c), "", _("Buzz!!"), GAIM_MESSAGE_NICK|GAIM_MESSAGE_RECV,
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
766 im->time);
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
767 g_free(m);
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
768 g_free(im);
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
769 continue;
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
770 }
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
771
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
772 m2 = yahoo_codes_to_html(m);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
773 g_free(m);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
774 serv_got_im(gc, im->from, m2, 0, im->time);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
775 g_free(m2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
776 g_free(im);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
777 }
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
778 g_slist_free(list);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
779 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
780
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
781 static void yahoo_process_sysmessage(GaimConnection *gc, struct yahoo_packet *pkt)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
782 {
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
783 GSList *l = pkt->hash;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
784 char *prim, *me = NULL, *msg = NULL;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
785
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
786 while (l) {
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
787 struct yahoo_pair *pair = l->data;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
788
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
789 if (pair->key == 5)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
790 me = pair->value;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
791 if (pair->key == 14)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
792 msg = pair->value;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
793
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
794 l = l->next;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
795 }
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
796
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
797 if (!msg)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
798 return;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
799
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
800 prim = g_strdup_printf(_("Yahoo! system message for %s:"),
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
801 me?me:gaim_connection_get_display_name(gc));
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
802 gaim_notify_info(NULL, NULL, prim, msg);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
803 g_free(prim);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
804 }
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
805
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
806 static void yahoo_buddy_added_us(GaimConnection *gc, struct yahoo_packet *pkt) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
807 char *id = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
808 char *who = NULL;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
809 char *msg = NULL, *tmpmsg = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
810 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
811
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
812 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
813 struct yahoo_pair *pair = l->data;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
814
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
815 switch (pair->key) {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
816 case 1:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
817 id = pair->value;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
818 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
819 case 3:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
820 who = pair->value;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
821 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
822 case 15: /* time, for when they add us and we're offline */
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
823 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
824 case 14:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
825 msg = pair->value;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
826 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
827 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
828 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
829 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
830
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
831 if (id) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
832 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
833 tmpmsg = yahoo_string_decode(gc, msg, FALSE);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
834 gaim_account_notify_added(gc->account, id, who, NULL, tmpmsg);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
835 if (tmpmsg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
836 g_free(tmpmsg);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
837 }
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
838 }
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
839
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
840 static void yahoo_buddy_denied_our_add(GaimConnection *gc, struct yahoo_packet *pkt)
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
841 {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
842 char *who = NULL;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
843 char *msg = NULL;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
844 GSList *l = pkt->hash;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
845 GString *buf = NULL;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
846 struct yahoo_data *yd = gc->proto_data;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
847
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
848 while (l) {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
849 struct yahoo_pair *pair = l->data;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
850
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
851 switch (pair->key) {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
852 case 3:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
853 who = pair->value;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
854 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
855 case 14:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
856 msg = pair->value;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
857 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
858 }
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
859 l = l->next;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
860 }
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
861
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
862 if (who) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
863 char *msg2;
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
864 buf = g_string_sized_new(0);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
865 if (!msg) {
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
866 g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list."), who);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
867 } else {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
868 msg2 = yahoo_string_decode(gc, msg, FALSE);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
869 g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list for the following reason: %s."), who, msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
870 g_free(msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
871 }
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
872 gaim_notify_info(gc, NULL, _("Add buddy rejected"), buf->str);
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
873 g_string_free(buf, TRUE);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
874 g_hash_table_remove(yd->friends, who);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
875 serv_got_update(gc, who, 0, 0, 0, 0, 0);
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
876 }
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
877 }
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
878
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
879 static void yahoo_process_contact(GaimConnection *gc, struct yahoo_packet *pkt)
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
880 {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
881
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
882
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
883 switch (pkt->status) {
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
884 case 1:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
885 yahoo_process_status(gc, pkt);
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
886 return;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
887 case 3:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
888 yahoo_buddy_added_us(gc, pkt);
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
889 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
890 case 7:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
891 yahoo_buddy_denied_our_add(gc, pkt);
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
892 break;
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
893 default:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
894 break;
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
895 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
896 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
897
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
898 #define OUT_CHARSET "utf-8"
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
899
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
900 static char *yahoo_decode(const char *text)
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
901 {
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
902 char *converted;
8125
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
903 char *n, *new;
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
904 const char *end, *p;
8616
def20c824c3a [gaim-migrate @ 9367]
Ethan Blanton <elb@pidgin.im>
parents: 8591
diff changeset
905 int i, k;
8125
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
906
7771
2630e726f818 [gaim-migrate @ 8416]
Nathan Walp <nwalp@pidgin.im>
parents: 7747
diff changeset
907 n = new = g_malloc(strlen (text) + 1);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
908 end = text + strlen(text);
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
909
8125
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
910 for (p = text; p < end; p++, n++) {
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
911 if (*p == '\\') {
8620
7a811db6f56b [gaim-migrate @ 9371]
Ethan Blanton <elb@pidgin.im>
parents: 8617
diff changeset
912 k = 0;
8616
def20c824c3a [gaim-migrate @ 9367]
Ethan Blanton <elb@pidgin.im>
parents: 8591
diff changeset
913 sscanf(p + 1, "%3o%n\n", &i, &k);
8125
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
914 *n = i;
8617
ee1d90584422 [gaim-migrate @ 9368]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8616
diff changeset
915 p += k;
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
916 }
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
917 else
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
918 *n = *p;
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
919 }
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
920
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
921 *n = '\0';
8125
d172f84dbfe2 [gaim-migrate @ 8829]
Nathan Walp <nwalp@pidgin.im>
parents: 8118
diff changeset
922
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
923 converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
924 g_free(new);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
925
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
926 return converted;
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
927 }
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
928
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
929 static void yahoo_process_mail(GaimConnection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
930 {
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
931 GaimAccount *account = gaim_connection_get_account(gc);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
932 char *who = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
933 char *email = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
934 char *subj = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
935 int count = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
936 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
937
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
938 if (!gaim_account_get_check_mail(account))
5521
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
939 return;
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
940
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
941 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
942 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
943 if (pair->key == 9)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
944 count = strtol(pair->value, NULL, 10);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
945 else if (pair->key == 43)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
946 who = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
947 else if (pair->key == 42)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
948 email = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
949 else if (pair->key == 18)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
950 subj = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
951 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
952 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
953
4001
ec3725a49136 [gaim-migrate @ 4201]
Luke Schierer <lschiere@pidgin.im>
parents: 3996
diff changeset
954 if (who && subj && email && *email) {
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
955 char *dec_who = yahoo_decode(who);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
956 char *dec_subj = yahoo_decode(subj);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
957 char *from = g_strdup_printf("%s (%s)", dec_who, email);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
958
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
959 gaim_notify_email(gc, dec_subj, from, gaim_account_get_username(account),
5521
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
960 "http://mail.yahoo.com/", NULL, NULL);
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
961
7747
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
962 g_free(dec_who);
ce63da454857 [gaim-migrate @ 8392]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 7696
diff changeset
963 g_free(dec_subj);
2850
783e46199cb4 [gaim-migrate @ 2863]
abiligiri
parents: 2813
diff changeset
964 g_free(from);
5521
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
965 } else if (count > 0) {
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
966 const char *to = gaim_account_get_username(account);
5521
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
967 const char *url = "http://mail.yahoo.com/";
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
968
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
969 gaim_notify_emails(gc, count, FALSE, NULL, NULL, &to, &url,
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
970 NULL, NULL);
fca5b7c1340d [gaim-migrate @ 5921]
Christian Hammond <chipx86@chipx86.com>
parents: 5498
diff changeset
971 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
972 }
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
973 /* This is the y64 alphabet... it's like base64, but has a . and a _ */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
974 char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
975
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
976 /* This is taken from Sylpheed by Hiroyuki Yamamoto. We have our own tobase64 function
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
977 * in util.c, but it has a bug I don't feel like finding right now ;) */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
978 void to_y64(unsigned char *out, const unsigned char *in, int inlen)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
979 /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
980 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
981 for (; inlen >= 3; inlen -= 3)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
982 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
983 *out++ = base64digits[in[0] >> 2];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
984 *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
985 *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
986 *out++ = base64digits[in[2] & 0x3f];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
987 in += 3;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
988 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
989 if (inlen > 0)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
990 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
991 unsigned char fragment;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
992
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
993 *out++ = base64digits[in[0] >> 2];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
994 fragment = (in[0] << 4) & 0x30;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
995 if (inlen > 1)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
996 fragment |= in[1] >> 4;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
997 *out++ = base64digits[fragment];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
998 *out++ = (inlen < 2) ? '-' : base64digits[(in[1] << 2) & 0x3c];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
999 *out++ = '-';
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1000 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1001 *out = '\0';
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1002 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1003
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1004 static void yahoo_process_auth_old(GaimConnection *gc, const char *seed)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1005 {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1006 struct yahoo_packet *pack;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1007 GaimAccount *account = gaim_connection_get_account(gc);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7209
diff changeset
1008 const char *name = gaim_normalize(account, gaim_account_get_username(account));
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1009 const char *pass = gaim_account_get_password(account);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1010 struct yahoo_data *yd = gc->proto_data;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1011
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1012 /* So, Yahoo has stopped supporting its older clients in India, and undoubtedly
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1013 * will soon do so in the rest of the world.
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1014 *
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1015 * The new clients use this authentication method. I warn you in advance, it's
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1016 * bizzare, convoluted, inordinately complicated. It's also no more secure than
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1017 * crypt() was. The only purpose this scheme could serve is to prevent third
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1018 * part clients from connecting to their servers.
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1019 *
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1020 * Sorry, Yahoo.
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1021 */
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1022
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1023 md5_byte_t result[16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1024 md5_state_t ctx;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1025
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1026 char *crypt_result;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1027 char password_hash[25];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1028 char crypt_hash[25];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1029 char *hash_string_p = g_malloc(50 + strlen(name));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1030 char *hash_string_c = g_malloc(50 + strlen(name));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1031
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1032 char checksum;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1033
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1034 int sv;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1035
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1036 char result6[25];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1037 char result96[25];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1038
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1039 sv = seed[15];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1040 sv = sv % 8;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1041
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1042 md5_init(&ctx);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1043 md5_append(&ctx, pass, strlen(pass));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1044 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1045 to_y64(password_hash, result, 16);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1046
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1047 md5_init(&ctx);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1048 crypt_result = yahoo_crypt(pass, "$1$_2S43d5f$");
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1049 md5_append(&ctx, crypt_result, strlen(crypt_result));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1050 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1051 to_y64(crypt_hash, result, 16);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1052
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1053 switch (sv) {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1054 case 1:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1055 case 6:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1056 checksum = seed[seed[9] % 16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1057 g_snprintf(hash_string_p, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1058 "%c%s%s%s", checksum, name, seed, password_hash);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1059 g_snprintf(hash_string_c, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1060 "%c%s%s%s", checksum, name, seed, crypt_hash);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1061 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1062 case 2:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1063 case 7:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1064 checksum = seed[seed[15] % 16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1065 g_snprintf(hash_string_p, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1066 "%c%s%s%s", checksum, seed, password_hash, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1067 g_snprintf(hash_string_c, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1068 "%c%s%s%s", checksum, seed, crypt_hash, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1069 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1070 case 3:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1071 checksum = seed[seed[1] % 16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1072 g_snprintf(hash_string_p, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1073 "%c%s%s%s", checksum, name, password_hash, seed);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1074 g_snprintf(hash_string_c, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1075 "%c%s%s%s", checksum, name, crypt_hash, seed);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1076 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1077 case 4:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1078 checksum = seed[seed[3] % 16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1079 g_snprintf(hash_string_p, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1080 "%c%s%s%s", checksum, password_hash, seed, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1081 g_snprintf(hash_string_c, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1082 "%c%s%s%s", checksum, crypt_hash, seed, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1083 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1084 case 0:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1085 case 5:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1086 checksum = seed[seed[7] % 16];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1087 g_snprintf(hash_string_p, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1088 "%c%s%s%s", checksum, password_hash, name, seed);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1089 g_snprintf(hash_string_c, strlen(name) + 50,
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1090 "%c%s%s%s", checksum, crypt_hash, name, seed);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1091 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1092 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1093
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1094 md5_init(&ctx);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1095 md5_append(&ctx, hash_string_p, strlen(hash_string_p));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1096 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1097 to_y64(result6, result, 16);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1098
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1099 md5_init(&ctx);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1100 md5_append(&ctx, hash_string_c, strlen(hash_string_c));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1101 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1102 to_y64(result96, result, 16);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1103
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1104 pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1105 yahoo_packet_hash(pack, 0, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1106 yahoo_packet_hash(pack, 6, result6);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1107 yahoo_packet_hash(pack, 96, result96);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1108 yahoo_packet_hash(pack, 1, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1109
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1110 yahoo_send_packet(yd, pack);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1111
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1112 g_free(hash_string_p);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1113 g_free(hash_string_c);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1114
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1115 yahoo_packet_free(pack);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1116
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1117 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1118
6998
5a4cd00736ce [gaim-migrate @ 7554]
Sean Egan <seanegan@pidgin.im>
parents: 6989
diff changeset
1119 /* I'm dishing out some uber-mad props to Cerulean Studios for cracking this
5a4cd00736ce [gaim-migrate @ 7554]
Sean Egan <seanegan@pidgin.im>
parents: 6989
diff changeset
1120 * and sending the fix! Thanks guys. */
5a4cd00736ce [gaim-migrate @ 7554]
Sean Egan <seanegan@pidgin.im>
parents: 6989
diff changeset
1121
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1122 static void yahoo_process_auth_new(GaimConnection *gc, const char *seed)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1123 {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1124 struct yahoo_packet *pack = NULL;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1125 GaimAccount *account = gaim_connection_get_account(gc);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7209
diff changeset
1126 const char *name = gaim_normalize(account, gaim_account_get_username(account));
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1127 const char *pass = gaim_account_get_password(account);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1128 struct yahoo_data *yd = gc->proto_data;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1129
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1130 md5_byte_t result[16];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1131 md5_state_t ctx;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1132
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1133 SHA_CTX ctx1;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1134 SHA_CTX ctx2;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1135
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1136 char *alphabet1 = "FBZDWAGHrJTLMNOPpRSKUVEXYChImkwQ";
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1137 char *alphabet2 = "F0E1D2C3B4A59687abcdefghijklmnop";
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1138
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1139 char *challenge_lookup = "qzec2tb3um1olpar8whx4dfgijknsvy5";
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1140 char *operand_lookup = "+|&%/*^-";
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1141 char *delimit_lookup = ",;";
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1142
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1143 char *password_hash = (char *)g_malloc(25);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1144 char *crypt_hash = (char *)g_malloc(25);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1145 char *crypt_result = NULL;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1146
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1147 char pass_hash_xor1[64];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1148 char pass_hash_xor2[64];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1149 char crypt_hash_xor1[64];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1150 char crypt_hash_xor2[64];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1151 char resp_6[100];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1152 char resp_96[100];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1153
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1154 unsigned char digest1[20];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1155 unsigned char digest2[20];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1156 unsigned char comparison_src[20];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1157 unsigned char magic_key_char[4];
8375
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
1158 const unsigned char *magic_ptr;
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1159
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1160 unsigned int magic[64];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1161 unsigned int magic_work = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1162 unsigned int magic_4 = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1163
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1164 int x;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1165 int y;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1166 int cnt = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1167 int magic_cnt = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1168 int magic_len;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1169
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1170 memset(password_hash, 0, 25);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1171 memset(crypt_hash, 0, 25);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1172 memset(&pass_hash_xor1, 0, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1173 memset(&pass_hash_xor2, 0, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1174 memset(&crypt_hash_xor1, 0, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1175 memset(&crypt_hash_xor2, 0, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1176 memset(&digest1, 0, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1177 memset(&digest2, 0, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1178 memset(&magic, 0, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1179 memset(&resp_6, 0, 100);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1180 memset(&resp_96, 0, 100);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1181 memset(&magic_key_char, 0, 4);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1182 memset(&comparison_src, 0, 20);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1183
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1184 /*
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1185 * Magic: Phase 1. Generate what seems to be a 30 byte value (could change if base64
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1186 * ends up differently? I don't remember and I'm tired, so use a 64 byte buffer.
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1187 */
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1188
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1189 magic_ptr = seed;
8375
13448d864067 [gaim-migrate @ 9102]
Tim Ringenbach <marv@pidgin.im>
parents: 8357
diff changeset
1190
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1191 while (*magic_ptr != (int)NULL) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1192 char *loc;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1193
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1194 /* Ignore parentheses.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1195 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1196
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1197 if (*magic_ptr == '(' || *magic_ptr == ')') {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1198 magic_ptr++;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1199 continue;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1200 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1201
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1202 /* Characters and digits verify against the challenge lookup.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1203 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1204
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1205 if (isalpha(*magic_ptr) || isdigit(*magic_ptr)) {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1206 loc = strchr(challenge_lookup, *magic_ptr);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1207 if (!loc) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1208 /* SME XXX Error - disconnect here */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1209 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1210
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1211 /* Get offset into lookup table and shl 3.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1212 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1213
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1214 magic_work = loc - challenge_lookup;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1215 magic_work <<= 3;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1216
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1217 magic_ptr++;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1218 continue;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1219 } else {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1220 unsigned int local_store;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1221
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1222 loc = strchr(operand_lookup, *magic_ptr);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1223 if (!loc) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1224 /* SME XXX Disconnect */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1225 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1226
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1227 local_store = loc - operand_lookup;
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1228
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1229 /* Oops; how did this happen?
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1230 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1231
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1232 if (magic_cnt >= 64)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1233 break;
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1234
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1235 magic[magic_cnt++] = magic_work | local_store;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1236 magic_ptr++;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1237 continue;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1238 }
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1239 }
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1240
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1241 magic_len = magic_cnt;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1242 magic_cnt = 0;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1243
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1244 /* Magic: Phase 2. Take generated magic value and sprinkle fairy dust on the values.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1245 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1246
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1247 for (magic_cnt = magic_len-2; magic_cnt >= 0; magic_cnt--) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1248 unsigned char byte1;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1249 unsigned char byte2;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1250
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1251 /* Bad. Abort.
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1252 */
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1253
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1254 if ((magic_cnt + 1 > magic_len) || (magic_cnt > magic_len))
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1255 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1256
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1257 byte1 = magic[magic_cnt];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1258 byte2 = magic[magic_cnt+1];
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1259
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1260 byte1 *= 0xcd;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1261 byte1 ^= byte2;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1262
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1263 magic[magic_cnt+1] = byte1;
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1264 }
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1265
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1266 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1267 * Magic: Phase 3. This computes 20 bytes. The first 4 bytes are used as our magic
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1268 * key (and may be changed later); the next 16 bytes are an MD5 sum of the magic key
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1269 * plus 3 bytes. The 3 bytes are found by looping, and they represent the offsets
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1270 * into particular functions we'll later call to potentially alter the magic key.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1271 *
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1272 * %-)
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1273 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1274
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1275 magic_cnt = 1;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1276 x = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1277
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1278 do {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1279 unsigned int bl = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1280 unsigned int cl = magic[magic_cnt++];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1281
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1282 if (magic_cnt >= magic_len)
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1283 break;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1284
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1285 if (cl > 0x7F) {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1286 if (cl < 0xe0)
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1287 bl = cl = (cl & 0x1f) << 6;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1288 else {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1289 bl = magic[magic_cnt++];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1290 cl = (cl & 0x0f) << 6;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1291 bl = ((bl & 0x3f) + cl) << 6;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1292 }
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1293
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1294 cl = magic[magic_cnt++];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1295 bl = (cl & 0x3f) + bl;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1296 } else
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1297 bl = cl;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1298
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1299 comparison_src[x++] = (bl & 0xff00) >> 8;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1300 comparison_src[x++] = bl & 0xff;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1301 } while (x < 20);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1302
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1303 /* First four bytes are magic key.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1304 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1305
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1306 memcpy(&magic_key_char[0], comparison_src, 4);
8482
75fc0de5be78 [gaim-migrate @ 9215]
Andrew Wellington <proton@users.sourceforge.net>
parents: 8441
diff changeset
1307 magic_4 = magic_key_char[0] | (magic_key_char[1]<<8) | (magic_key_char[2]<<16) | (magic_key_char[3]<<24);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1308
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1309 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1310 * Magic: Phase 4. Determine what function to use later by getting outside/inside
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1311 * loop values until we match our previous buffer.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1312 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1313
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1314 for (x = 0; x < 65535; x++) {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1315 int leave = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1316
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1317 for (y = 0; y < 5; y++) {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1318 md5_byte_t result[16];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1319 md5_state_t ctx;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1320
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1321 unsigned char test[3];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1322
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1323 memset(&result, 0, 16);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1324 memset(&test, 0, 3);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1325
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1326 /* Calculate buffer.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1327 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1328
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1329 test[0] = x;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1330 test[1] = x >> 8;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1331 test[2] = y;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1332
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1333 md5_init(&ctx);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1334 md5_append(&ctx, magic_key_char, 4);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1335 md5_append(&ctx, test, 3);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1336 md5_finish(&ctx, result);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1337
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1338 if (!memcmp(result, comparison_src+4, 16)) {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1339 leave = 1;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1340 break;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1341 }
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1342 }
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1343
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1344 if (leave == 1)
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1345 break;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1346 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1347
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1348 /* If y != 0, we need some help.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1349 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1350
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1351 if (y != 0) {
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1352 unsigned int updated_key;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1353
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1354 /* Update magic stuff. Call it twice because Yahoo's encryption is super bad ass.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1355 */
7127
bf1aeae30428 [gaim-migrate @ 7694]
Sean Egan <seanegan@pidgin.im>
parents: 7118
diff changeset
1356
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1357 updated_key = yahoo_auth_finalCountdown(magic_4, 0x60, y, x);
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1358 updated_key = yahoo_auth_finalCountdown(updated_key, 0x60, y, x);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1359
8482
75fc0de5be78 [gaim-migrate @ 9215]
Andrew Wellington <proton@users.sourceforge.net>
parents: 8441
diff changeset
1360 magic_key_char[0] = updated_key & 0xff;
75fc0de5be78 [gaim-migrate @ 9215]
Andrew Wellington <proton@users.sourceforge.net>
parents: 8441
diff changeset
1361 magic_key_char[1] = (updated_key >> 8) & 0xff;
75fc0de5be78 [gaim-migrate @ 9215]
Andrew Wellington <proton@users.sourceforge.net>
parents: 8441
diff changeset
1362 magic_key_char[2] = (updated_key >> 16) & 0xff;
75fc0de5be78 [gaim-migrate @ 9215]
Andrew Wellington <proton@users.sourceforge.net>
parents: 8441
diff changeset
1363 magic_key_char[3] = (updated_key >> 24) & 0xff;
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1364 }
7127
bf1aeae30428 [gaim-migrate @ 7694]
Sean Egan <seanegan@pidgin.im>
parents: 7118
diff changeset
1365
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1366 /* Get password and crypt hashes as per usual.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1367 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1368
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1369 md5_init(&ctx);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1370 md5_append(&ctx, pass, strlen(pass));
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1371 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1372 to_y64(password_hash, result, 16);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1373
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1374 md5_init(&ctx);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1375 crypt_result = yahoo_crypt(pass, "$1$_2S43d5f$");
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1376 md5_append(&ctx, crypt_result, strlen(crypt_result));
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1377 md5_finish(&ctx, result);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1378 to_y64(crypt_hash, result, 16);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1379
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1380 /* Our first authentication response is based off of the password hash.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1381 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1382
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1383 for (x = 0; x < (int)strlen(password_hash); x++)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1384 pass_hash_xor1[cnt++] = password_hash[x] ^ 0x36;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1385
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1386 if (cnt < 64)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1387 memset(&(pass_hash_xor1[cnt]), 0x36, 64-cnt);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1388
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1389 cnt = 0;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1390
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1391 for (x = 0; x < (int)strlen(password_hash); x++)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1392 pass_hash_xor2[cnt++] = password_hash[x] ^ 0x5c;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1393
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1394 if (cnt < 64)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1395 memset(&(pass_hash_xor2[cnt]), 0x5c, 64-cnt);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1396
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1397 shaInit(&ctx1);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1398 shaInit(&ctx2);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1399
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1400 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1401 * The first context gets the password hash XORed with 0x36 plus a magic value
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1402 * which we previously extrapolated from our challenge.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1403 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1404
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1405 shaUpdate(&ctx1, pass_hash_xor1, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1406 shaUpdate(&ctx1, magic_key_char, 4);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1407 shaFinal(&ctx1, digest1);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1408
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1409 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1410 * The second context gets the password hash XORed with 0x5c plus the SHA-1 digest
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1411 * of the first context.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1412 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1413
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1414 shaUpdate(&ctx2, pass_hash_xor2, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1415 shaUpdate(&ctx2, digest1, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1416 shaFinal(&ctx2, digest2);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1417
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1418 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1419 * Now that we have digest2, use it to fetch characters from an alphabet to construct
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1420 * our first authentication response.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1421 */
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1422
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1423 for (x = 0; x < 20; x += 2) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1424 unsigned int val = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1425 unsigned int lookup = 0;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1426
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1427 char byte[6];
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1428
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1429 memset(&byte, 0, 6);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1430
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1431 /* First two bytes of digest stuffed together.
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1432 */
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1433
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1434 val = digest2[x];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1435 val <<= 8;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1436 val += digest2[x+1];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1437
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1438 lookup = (val >> 0x0b);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1439 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1440 if (lookup >= strlen(alphabet1))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1441 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1442 sprintf(byte, "%c", alphabet1[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1443 strcat(resp_6, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1444 strcat(resp_6, "=");
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1445
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1446 lookup = (val >> 0x06);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1447 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1448 if (lookup >= strlen(alphabet2))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1449 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1450 sprintf(byte, "%c", alphabet2[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1451 strcat(resp_6, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1452
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1453 lookup = (val >> 0x01);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1454 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1455 if (lookup >= strlen(alphabet2))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1456 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1457 sprintf(byte, "%c", alphabet2[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1458 strcat(resp_6, byte);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1459
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1460 lookup = (val & 0x01);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1461 if (lookup >= strlen(delimit_lookup))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1462 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1463 sprintf(byte, "%c", delimit_lookup[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1464 strcat(resp_6, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1465 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1466
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1467 /* Our second authentication response is based off of the crypto hash.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1468 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1469
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1470 cnt = 0;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1471 memset(&digest1, 0, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1472 memset(&digest2, 0, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1473
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1474 for (x = 0; x < (int)strlen(crypt_hash); x++)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1475 crypt_hash_xor1[cnt++] = crypt_hash[x] ^ 0x36;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1476
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1477 if (cnt < 64)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1478 memset(&(crypt_hash_xor1[cnt]), 0x36, 64-cnt);
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1479
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1480 cnt = 0;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1481
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1482 for (x = 0; x < (int)strlen(crypt_hash); x++)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1483 crypt_hash_xor2[cnt++] = crypt_hash[x] ^ 0x5c;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1484
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1485 if (cnt < 64)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1486 memset(&(crypt_hash_xor2[cnt]), 0x5c, 64-cnt);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1487
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1488 shaInit(&ctx1);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1489 shaInit(&ctx2);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1490
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1491 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1492 * The first context gets the password hash XORed with 0x36 plus a magic value
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1493 * which we previously extrapolated from our challenge.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1494 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1495
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1496 shaUpdate(&ctx1, crypt_hash_xor1, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1497 shaUpdate(&ctx1, magic_key_char, 4);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1498 shaFinal(&ctx1, digest1);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1499
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1500 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1501 * The second context gets the password hash XORed with 0x5c plus the SHA-1 digest
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1502 * of the first context.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1503 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1504
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1505 shaUpdate(&ctx2, crypt_hash_xor2, 64);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1506 shaUpdate(&ctx2, digest1, 20);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1507 shaFinal(&ctx2, digest2);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1508
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1509 /*
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1510 * Now that we have digest2, use it to fetch characters from an alphabet to construct
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1511 * our first authentication response.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1512 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1513
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1514 for (x = 0; x < 20; x += 2) {
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1515 unsigned int val = 0;
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1516 unsigned int lookup = 0;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1517
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1518 char byte[6];
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1519
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1520 memset(&byte, 0, 6);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1521
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1522 /* First two bytes of digest stuffed together.
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1523 */
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1524
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1525 val = digest2[x];
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1526 val <<= 8;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1527 val += digest2[x+1];
8349
0319a2f4d61d [gaim-migrate @ 9073]
Sean Egan <seanegan@pidgin.im>
parents: 8243
diff changeset
1528
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1529 lookup = (val >> 0x0b);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1530 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1531 if (lookup >= strlen(alphabet1))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1532 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1533 sprintf(byte, "%c", alphabet1[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1534 strcat(resp_96, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1535 strcat(resp_96, "=");
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1536
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1537 lookup = (val >> 0x06);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1538 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1539 if (lookup >= strlen(alphabet2))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1540 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1541 sprintf(byte, "%c", alphabet2[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1542 strcat(resp_96, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1543
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1544 lookup = (val >> 0x01);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1545 lookup &= 0x1f;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1546 if (lookup >= strlen(alphabet2))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1547 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1548 sprintf(byte, "%c", alphabet2[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1549 strcat(resp_96, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1550
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1551 lookup = (val & 0x01);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1552 if (lookup >= strlen(delimit_lookup))
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1553 break;
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1554 sprintf(byte, "%c", delimit_lookup[lookup]);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1555 strcat(resp_96, byte);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1556 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1557
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1558 pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1559 yahoo_packet_hash(pack, 0, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1560 yahoo_packet_hash(pack, 6, resp_6);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1561 yahoo_packet_hash(pack, 96, resp_96);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1562 yahoo_packet_hash(pack, 1, name);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1563 yahoo_send_packet(yd, pack);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1564 yahoo_packet_free(pack);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1565
7424
a9f6b975759c [gaim-migrate @ 8026]
Ethan Blanton <elb@pidgin.im>
parents: 7423
diff changeset
1566 g_free(password_hash);
a9f6b975759c [gaim-migrate @ 8026]
Ethan Blanton <elb@pidgin.im>
parents: 7423
diff changeset
1567 g_free(crypt_hash);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1568 }
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1569
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
1570 static void yahoo_process_auth(GaimConnection *gc, struct yahoo_packet *pkt)
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1571 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1572 char *seed = NULL;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1573 char *sn = NULL;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1574 GSList *l = pkt->hash;
7010
afa5752740a7 [gaim-migrate @ 7573]
Tim Ringenbach <marv@pidgin.im>
parents: 6998
diff changeset
1575 int m = 0;
7043
b79933739678 [gaim-migrate @ 7606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7015
diff changeset
1576 gchar *buf;
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1577
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1578
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1579 while (l) {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1580 struct yahoo_pair *pair = l->data;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1581 if (pair->key == 94)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1582 seed = pair->value;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1583 if (pair->key == 1)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1584 sn = pair->value;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1585 if (pair->key == 13)
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1586 m = atoi(pair->value);
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1587 l = l->next;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1588 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1589
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1590 if (seed) {
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1591 switch (m) {
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1592 case 0:
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1593 yahoo_process_auth_old(gc, seed);
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1594 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1595 case 1:
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1596 yahoo_process_auth_new(gc, seed);
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1597 break;
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1598 default:
7043
b79933739678 [gaim-migrate @ 7606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7015
diff changeset
1599 buf = g_strdup_printf(_("The Yahoo server has requested the use of an unrecognized "
7129
53748de036e6 [gaim-migrate @ 7696]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7127
diff changeset
1600 "authentication method. This version of Gaim will likely not be able "
7043
b79933739678 [gaim-migrate @ 7606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7015
diff changeset
1601 "to successfully sign on to Yahoo. Check %s for updates."), GAIM_WEBSITE);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1602 gaim_notify_error(gc, "", _("Failed Yahoo! Authentication"),
7043
b79933739678 [gaim-migrate @ 7606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7015
diff changeset
1603 buf);
b79933739678 [gaim-migrate @ 7606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7015
diff changeset
1604 g_free(buf);
6986
40613e58e3d6 [gaim-migrate @ 7542]
Sean Egan <seanegan@pidgin.im>
parents: 6982
diff changeset
1605 yahoo_process_auth_new(gc, seed); /* Can't hurt to try it anyway. */
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1606 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1607 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1608 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1609
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1610 static void ignore_buddy(GaimBuddy *b) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1611 GaimGroup *g;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1612 GaimConversation *c;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1613 GaimAccount *account;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1614 gchar *name;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1615
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1616 if (!b)
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1617 return;
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1618
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1619 g = gaim_find_buddys_group(b);
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1620 name = g_strdup(b->name);
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1621 account = b->account;
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1622
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1623 gaim_debug(GAIM_DEBUG_INFO, "blist",
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1624 "Removing '%s' from buddy list.\n", b->name);
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1625 serv_remove_buddy(account->gc, name, g->name);
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1626 gaim_blist_remove_buddy(b);
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1627
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1628 serv_add_deny(account->gc, name);
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1629 gaim_blist_save();
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1630
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1631 c = gaim_find_conversation_with_account(name, account);
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1632
6792
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1633 if (c != NULL)
381bafc8200c [gaim-migrate @ 7331]
Jesse Farmer
parents: 6791
diff changeset
1634 gaim_conversation_update(c, GAIM_CONV_UPDATE_REMOVE);
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1635
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1636 g_free(name);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1637 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1638
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1639 static void keep_buddy(GaimBuddy *b) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1640 gaim_privacy_deny_remove(b->account, b->name, 1);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1641 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1642
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1643 static void yahoo_process_ignore(GaimConnection *gc, struct yahoo_packet *pkt) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1644 GaimBuddy *b;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1645 GSList *l;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1646 gchar *who = NULL;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1647 gchar *sn = NULL;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1648 gchar buf[BUF_LONG];
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1649 gint ignore = 0;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1650 gint status = 0;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1651
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1652 for (l = pkt->hash; l; l = l->next) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1653 struct yahoo_pair *pair = l->data;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1654 switch (pair->key) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1655 case 0:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1656 who = pair->value;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1657 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1658 case 1:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1659 sn = pair->value;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1660 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1661 case 13:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1662 ignore = strtol(pair->value, NULL, 10);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1663 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1664 case 66:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1665 status = strtol(pair->value, NULL, 10);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1666 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1667 default:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1668 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1669 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1670 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1671
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1672 switch (status) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1673 case 12:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1674 b = gaim_find_buddy(gc->account, who);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1675 g_snprintf(buf, sizeof(buf), _("You have tried to ignore %s, but the "
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1676 "user is on your buddy list. Clicking \"Yes\" "
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1677 "will remove and ignore the buddy."), who);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1678 gaim_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0, b,
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1679 G_CALLBACK(ignore_buddy),
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1680 G_CALLBACK(keep_buddy));
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1681 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1682 case 2:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1683 case 3:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1684 case 0:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1685 default:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1686 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1687 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1688 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1689
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1690 static void yahoo_process_authresp(GaimConnection *gc, struct yahoo_packet *pkt)
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1691 {
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1692 GSList *l = pkt->hash;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1693 int err = 0;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1694 char *msg;
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1695 char *url = NULL;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1696 char *fullmsg;
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1697
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1698 while (l) {
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1699 struct yahoo_pair *pair = l->data;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1700
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1701 if (pair->key == 66)
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1702 err = strtol(pair->value, NULL, 10);
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1703 if (pair->key == 20)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1704 url = pair->value;
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1705
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1706 l = l->next;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1707 }
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1708
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1709 switch (err) {
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1710 case 3:
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1711 msg = g_strdup(_("Invalid username."));
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1712 break;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1713 case 13:
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1714 msg = g_strdup(_("Incorrect password."));
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1715 break;
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1716 case 14:
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1717 msg = g_strdup(_("Your account is locked, please log in to the yahoo website."));
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1718 break;
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1719 default:
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1720 msg = g_strdup_printf(_("Unknown error number %d."), err);
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1721 }
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1722
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1723 if (url)
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1724 fullmsg = g_strdup_printf("%s\n%s", msg, url);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1725 else
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1726 fullmsg = g_strdup(msg);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1727
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1728 gaim_connection_error(gc, fullmsg);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1729 g_free(msg);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1730 g_free(fullmsg);
6761
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1731 }
87201975746a [gaim-migrate @ 7293]
Tim Ringenbach <marv@pidgin.im>
parents: 6760
diff changeset
1732
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1733 static void yahoo_process_addbuddy(GaimConnection *gc, struct yahoo_packet *pkt)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1734 {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1735 int err = 0;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1736 char *who = NULL;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1737 char *group = NULL;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
1738 char *decoded_group;
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1739 char *buf;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1740 struct yahoo_friend *f;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1741 struct yahoo_data *yd = gc->proto_data;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1742 GSList *l = pkt->hash;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1743
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1744 while (l) {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1745 struct yahoo_pair *pair = l->data;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1746
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1747 switch (pair->key) {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1748 case 66:
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1749 err = strtol(pair->value, NULL, 10);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1750 break;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1751 case 7:
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1752 who = pair->value;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1753 break;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1754 case 65:
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1755 group = pair->value;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1756 break;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1757 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1758
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1759 l = l->next;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1760 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1761
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1762 if (!who)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1763 return;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1764 if (!group)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1765 group = "";
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1766
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1767 if (!err || (err == 2)) { /* 0 = ok, 2 = already on serv list */
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
1768 if (!g_hash_table_lookup(yd->friends, gaim_normalize(gaim_connection_get_account(gc), who))) {
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1769 f = yahoo_friend_new();
7823
88f397380ed3 [gaim-migrate @ 8475]
Tim Ringenbach <marv@pidgin.im>
parents: 7771
diff changeset
1770 g_hash_table_insert(yd->friends, g_strdup(gaim_normalize(gaim_connection_get_account(gc), who)), f);
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1771 yahoo_update_status(gc, who, f);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1772 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1773 return;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1774 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1775
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
1776 decoded_group = yahoo_string_decode(gc, group, FALSE);
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1777 buf = g_strdup_printf(_("Could not add buddy %s to group %s to the server list on account %s."),
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
1778 who, decoded_group, gaim_connection_get_display_name(gc));
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1779 gaim_notify_error(gc, NULL, _("Could not add buddy to server list"), buf);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1780 g_free(buf);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
1781 g_free(decoded_group);
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1782 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1783
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
1784 static void yahoo_packet_process(GaimConnection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1785 {
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1786 switch (pkt->service) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1787 case YAHOO_SERVICE_LOGON:
2771
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
1788 case YAHOO_SERVICE_LOGOFF:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1789 case YAHOO_SERVICE_ISAWAY:
2737
f7edb9c3f348 [gaim-migrate @ 2750]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2724
diff changeset
1790 case YAHOO_SERVICE_ISBACK:
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1791 case YAHOO_SERVICE_GAMELOGON:
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1792 case YAHOO_SERVICE_GAMELOGOFF:
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
1793 case YAHOO_SERVICE_CHATLOGON:
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
1794 case YAHOO_SERVICE_CHATLOGOFF:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1795 yahoo_process_status(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1796 break;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1797 case YAHOO_SERVICE_NOTIFY:
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1798 yahoo_process_notify(gc, pkt);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1799 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1800 case YAHOO_SERVICE_MESSAGE:
2786
c281356d8eda [gaim-migrate @ 2799]
brian macke
parents: 2772
diff changeset
1801 case YAHOO_SERVICE_GAMEMSG:
5939
cedbbd2d983a [gaim-migrate @ 6379]
Tim Ringenbach <marv@pidgin.im>
parents: 5921
diff changeset
1802 case YAHOO_SERVICE_CHATMSG:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1803 yahoo_process_message(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1804 break;
7865
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1805 case YAHOO_SERVICE_SYSMESSAGE:
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1806 yahoo_process_sysmessage(gc, pkt);
bcca41cf1ce2 [gaim-migrate @ 8519]
Tim Ringenbach <marv@pidgin.im>
parents: 7829
diff changeset
1807 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1808 case YAHOO_SERVICE_NEWMAIL:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1809 yahoo_process_mail(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1810 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1811 case YAHOO_SERVICE_NEWCONTACT:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1812 yahoo_process_contact(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1813 break;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
1814 case YAHOO_SERVICE_AUTHRESP:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
1815 yahoo_process_authresp(gc, pkt);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
1816 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1817 case YAHOO_SERVICE_LIST:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1818 yahoo_process_list(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1819 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1820 case YAHOO_SERVICE_AUTH:
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1821 yahoo_process_auth(gc, pkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1822 break;
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1823 case YAHOO_SERVICE_ADDBUDDY:
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1824 yahoo_process_addbuddy(gc, pkt);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
1825 break;
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1826 case YAHOO_SERVICE_IGNORECONTACT:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1827 yahoo_process_ignore(gc, pkt);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
1828 break;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1829 case YAHOO_SERVICE_CONFINVITE:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1830 case YAHOO_SERVICE_CONFADDINVITE:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1831 yahoo_process_conference_invite(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1832 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1833 case YAHOO_SERVICE_CONFDECLINE:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1834 yahoo_process_conference_decline(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1835 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1836 case YAHOO_SERVICE_CONFLOGON:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1837 yahoo_process_conference_logon(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1838 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1839 case YAHOO_SERVICE_CONFLOGOFF:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1840 yahoo_process_conference_logoff(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1841 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1842 case YAHOO_SERVICE_CONFMSG:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1843 yahoo_process_conference_message(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1844 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1845 case YAHOO_SERVICE_CHATONLINE:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1846 yahoo_process_chat_online(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1847 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1848 case YAHOO_SERVICE_CHATLOGOUT:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1849 yahoo_process_chat_logout(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1850 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1851 case YAHOO_SERVICE_CHATGOTO:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1852 yahoo_process_chat_goto(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1853 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1854 case YAHOO_SERVICE_CHATJOIN:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1855 yahoo_process_chat_join(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1856 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1857 case YAHOO_SERVICE_CHATLEAVE: /* XXX is this right? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1858 case YAHOO_SERVICE_CHATEXIT:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1859 yahoo_process_chat_exit(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1860 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1861 case YAHOO_SERVICE_CHATINVITE: /* XXX never seen this one, might not do it right */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1862 case YAHOO_SERVICE_CHATADDINVITE:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1863 yahoo_process_chat_addinvite(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1864 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1865 case YAHOO_SERVICE_COMMENT:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1866 yahoo_process_chat_message(gc, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
1867 break;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
1868 case YAHOO_SERVICE_P2PFILEXFER:
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
1869 case YAHOO_SERVICE_FILETRANSFER:
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
1870 yahoo_process_filetransfer(gc, pkt);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
1871 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1872 default:
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
1873 gaim_debug(GAIM_DEBUG_ERROR, "yahoo",
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1874 "Unhandled service 0x%02x\n", pkt->service);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1875 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1876 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1877 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1878
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1879 static void yahoo_pending(gpointer data, gint source, GaimInputCondition cond)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1880 {
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
1881 GaimConnection *gc = data;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1882 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1883 char buf[1024];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1884 int len;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1885
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1886 len = read(yd->fd, buf, sizeof(buf));
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1887
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1888 if (len <= 0) {
6321
0b54b2a172d1 [gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6115
diff changeset
1889 gaim_connection_error(gc, _("Unable to read"));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1890 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1891 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1892
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1893 yd->rxqueue = g_realloc(yd->rxqueue, len + yd->rxlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1894 memcpy(yd->rxqueue + yd->rxlen, buf, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1895 yd->rxlen += len;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1896
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1897 while (1) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1898 struct yahoo_packet *pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1899 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1900 int pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1901
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1902 if (yd->rxlen < YAHOO_PACKET_HDRLEN)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1903 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1904
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1905 pos += 4; /* YMSG */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1906 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1907 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1908
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1909 pktlen = yahoo_get16(yd->rxqueue + pos); pos += 2;
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
1910 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1911 "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1912
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1913 if (yd->rxlen < (YAHOO_PACKET_HDRLEN + pktlen))
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1914 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1915
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1916 yahoo_packet_dump(yd->rxqueue, YAHOO_PACKET_HDRLEN + pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1917
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1918 pkt = yahoo_packet_new(0, 0, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1919
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1920 pkt->service = yahoo_get16(yd->rxqueue + pos); pos += 2;
3021
91e6cbdb62b1 [gaim-migrate @ 3034]
Sean Egan <seanegan@pidgin.im>
parents: 3020
diff changeset
1921 pkt->status = yahoo_get32(yd->rxqueue + pos); pos += 4;
5220
f42438a0cc06 [gaim-migrate @ 5590]
Christian Hammond <chipx86@chipx86.com>
parents: 5216
diff changeset
1922 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
5216
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1923 "Yahoo Service: 0x%02x Status: %d\n",
13074c9a7ab0 [gaim-migrate @ 5586]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1924 pkt->service, pkt->status);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1925 pkt->id = yahoo_get32(yd->rxqueue + pos); pos += 4;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1926
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1927 yahoo_packet_read(pkt, yd->rxqueue + pos, pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1928
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1929 yd->rxlen -= YAHOO_PACKET_HDRLEN + pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1930 if (yd->rxlen) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1931 char *tmp = g_memdup(yd->rxqueue + YAHOO_PACKET_HDRLEN + pktlen, yd->rxlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1932 g_free(yd->rxqueue);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1933 yd->rxqueue = tmp;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1934 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1935 g_free(yd->rxqueue);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1936 yd->rxqueue = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1937 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1938
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1939 yahoo_packet_process(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1940
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1941 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1942 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1943 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1944
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
1945 #ifndef YAHOO_WEBMESSENGER
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1946 static void yahoo_got_connected(gpointer data, gint source, GaimInputCondition cond)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1947 {
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
1948 GaimConnection *gc = data;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1949 struct yahoo_data *yd;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1950 struct yahoo_packet *pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1951
5590
96f84b9aae41 [gaim-migrate @ 5994]
Christian Hammond <chipx86@chipx86.com>
parents: 5583
diff changeset
1952 if (!g_list_find(gaim_connections_get_all(), gc)) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1953 close(source);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1954 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1955 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1956
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1957 if (source < 0) {
8057
1b3bd2942b2b [gaim-migrate @ 8743]
Sean Egan <seanegan@pidgin.im>
parents: 8046
diff changeset
1958 gaim_connection_error(gc, _("Unable to connect."));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1959 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1960 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1961
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1962 yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1963 yd->fd = source;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1964
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
1965 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, YAHOO_STATUS_AVAILABLE, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1966
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7209
diff changeset
1967 yahoo_packet_hash(pkt, 1, gaim_normalize(gc->account, gaim_account_get_username(gaim_connection_get_account(gc))));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1968 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1969
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1970 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1971
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1972 gc->inpa = gaim_input_add(yd->fd, GAIM_INPUT_READ, yahoo_pending, gc);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1973 }
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
1974 #endif
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1975
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1976 #ifdef YAHOO_WEBMESSENGER
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1977 static void yahoo_got_web_connected(gpointer data, gint source, GaimInputCondition cond)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1978 {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1979 GaimConnection *gc = data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1980 struct yahoo_data *yd;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1981 struct yahoo_packet *pkt;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1982
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1983 if (!g_list_find(gaim_connections_get_all(), gc)) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1984 close(source);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1985 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1986 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1987
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1988 if (source < 0) {
8057
1b3bd2942b2b [gaim-migrate @ 8743]
Sean Egan <seanegan@pidgin.im>
parents: 8046
diff changeset
1989 gaim_connection_error(gc, _("Unable to connect."));
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1990 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1991 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1992
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1993 yd = gc->proto_data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1994 yd->fd = source;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1995
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1996 pkt = yahoo_packet_new(YAHOO_SERVICE_WEBLOGIN, YAHOO_STATUS_WEBLOGIN, 0);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
1997
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7209
diff changeset
1998 yahoo_packet_hash(pkt, 0, gaim_normalize(gc->account, gaim_account_get_username(gaim_connection_get_account(gc))));
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7209
diff changeset
1999 yahoo_packet_hash(pkt, 1, gaim_normalize(gc->account, gaim_account_get_username(gaim_connection_get_account(gc))));
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2000 yahoo_packet_hash(pkt, 6, yd->auth);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2001 yahoo_send_packet(yd, pkt);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2002
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2003 yahoo_packet_free(pkt);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2004 g_free(yd->auth);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2005 gc->inpa = gaim_input_add(yd->fd, GAIM_INPUT_READ, yahoo_pending, gc);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2006 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2007
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2008 static void yahoo_web_pending(gpointer data, gint source, GaimInputCondition cond)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2009 {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2010 GaimConnection *gc = data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2011 GaimAccount *account = gaim_connection_get_account(gc);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2012 struct yahoo_data *yd = gc->proto_data;
8243
e40bd494b78e [gaim-migrate @ 8966]
Daniel Atallah <datallah@pidgin.im>
parents: 8235
diff changeset
2013 char buf[2048], *i = buf;
8161
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2014 int len;
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2015 GString *s;
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2016
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2017 len = read(source, buf, sizeof(buf)-1);
8216
9c4bc4d5a373 [gaim-migrate @ 8939]
Christian Hammond <chipx86@chipx86.com>
parents: 8212
diff changeset
2018 if (len <= 0 || (strncmp(buf, "HTTP/1.0 302", strlen("HTTP/1.0 302")) &&
9c4bc4d5a373 [gaim-migrate @ 8939]
Christian Hammond <chipx86@chipx86.com>
parents: 8212
diff changeset
2019 strncmp(buf, "HTTP/1.1 302", strlen("HTTP/1.1 302")))) {
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2020 gaim_connection_error(gc, _("Unable to read"));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2021 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2022 }
8161
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2023
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2024 s = g_string_sized_new(len);
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2025 buf[sizeof(buf)-1] = '\0';
8161
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2026
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2027 while ((i = strstr(i, "Set-Cookie: "))) {
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2028 i += strlen("Set-Cookie: ");
8243
e40bd494b78e [gaim-migrate @ 8966]
Daniel Atallah <datallah@pidgin.im>
parents: 8235
diff changeset
2029 for (;*i != ';' && *i != '\0'; i++)
8161
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2030 g_string_append_c(s, *i);
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2031
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2032 g_string_append(s, "; ");
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2033 }
8161
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2034
d92ec6ecfdeb [gaim-migrate @ 8873]
Tim Ringenbach <marv@pidgin.im>
parents: 8125
diff changeset
2035 yd->auth = g_string_free(s, FALSE);
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2036 gaim_input_remove(gc->inpa);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2037 close(source);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2038 /* Now we have our cookies to login with. I'll go get the milk. */
8045
7628b5654ea5 [gaim-migrate @ 8729]
Sean Egan <seanegan@pidgin.im>
parents: 7986
diff changeset
2039 if (gaim_proxy_connect(account, "wcs2.msg.dcn.yahoo.com",
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2040 gaim_account_get_int(account, "port", YAHOO_PAGER_PORT),
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2041 yahoo_got_web_connected, gc) != 0) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2042 gaim_connection_error(gc, _("Connection problem"));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2043 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2044 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2045 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2046
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2047 static void yahoo_got_cookies(gpointer data, gint source, GaimInputCondition cond)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2048 {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2049 GaimConnection *gc = data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2050 struct yahoo_data *yd = gc->proto_data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2051 if (source < 0) {
8057
1b3bd2942b2b [gaim-migrate @ 8743]
Sean Egan <seanegan@pidgin.im>
parents: 8046
diff changeset
2052 gaim_connection_error(gc, _("Unable to connect."));
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2053 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2054 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2055 write(source, yd->auth, strlen(yd->auth));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2056 g_free(yd->auth);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2057 gc->inpa = gaim_input_add(source, GAIM_INPUT_READ, yahoo_web_pending, gc);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2058 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2059
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2060 static void yahoo_login_page_hash_iter(const char *key, const char *val, GString *url)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2061 {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2062 if (!strcmp(key, "passwd"))
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2063 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2064 url = g_string_append_c(url, '&');
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2065 url = g_string_append(url, key);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2066 url = g_string_append_c(url, '=');
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2067 if (!strcmp(key, ".save") || !strcmp(key, ".js"))
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2068 url = g_string_append_c(url, '1');
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2069 else if (!strcmp(key, ".challenge"))
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2070 url = g_string_append(url, val);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2071 else
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2072 url = g_string_append(url, gaim_url_encode(val));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2073 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2074
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2075 static GHashTable *yahoo_login_page_hash(const char *buf, size_t len)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2076 {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2077 GHashTable *hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2078 const char *c = buf;
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2079 char *d;
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2080 char name[64], value[64];
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2081 int count = sizeof(name)-1;
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2082 while ((c < (buf + len)) && (c = strstr(c, "<input "))) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2083 c = strstr(c, "name=\"") + strlen("name=\"");
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2084 for (d = name; *c!='"' && count; c++, d++, count--)
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2085 *d = *c;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2086 *d = '\0';
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2087 count = sizeof(value)-1;
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2088 d = strstr(c, "value=\"") + strlen("value=\"");
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2089 if (strchr(c, '>') < d)
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2090 break;
8118
7f5315bb4506 [gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents: 8113
diff changeset
2091 for (c = d, d = value; *c!='"' && count; c++, d++, count--)
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2092 *d = *c;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2093 *d = '\0';
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2094 g_hash_table_insert(hash, g_strdup(name), g_strdup(value));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2095 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2096 return hash;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2097 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2098
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2099 static void yahoo_login_page_cb(void *user_data, const char *buf, size_t len)
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2100 {
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2101 GaimConnection *gc = (GaimConnection *)user_data;
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2102 GaimAccount *account = gaim_connection_get_account(gc);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2103 struct yahoo_data *yd = gc->proto_data;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2104 const char *sn = gaim_account_get_username(account);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2105 const char *pass = gaim_account_get_password(account);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2106 GHashTable *hash = yahoo_login_page_hash(buf, len);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2107 GString *url = g_string_new("GET /config/login?login=");
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2108 char md5[33], *hashp = md5, *chal;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2109 int i;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2110 md5_byte_t result[16];
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2111 md5_state_t ctx;
7191
6c67ab87df26 [gaim-migrate @ 7760]
Herman Bloggs <herman@bluedigits.com>
parents: 7161
diff changeset
2112
6c67ab87df26 [gaim-migrate @ 7760]
Herman Bloggs <herman@bluedigits.com>
parents: 7161
diff changeset
2113 url = g_string_append(url, sn);
6c67ab87df26 [gaim-migrate @ 7760]
Herman Bloggs <herman@bluedigits.com>
parents: 7161
diff changeset
2114 url = g_string_append(url, "&passwd=");
6c67ab87df26 [gaim-migrate @ 7760]
Herman Bloggs <herman@bluedigits.com>
parents: 7161
diff changeset
2115
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2116 md5_init(&ctx);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2117 md5_append(&ctx, pass, strlen(pass));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2118 md5_finish(&ctx, result);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2119 for (i = 0; i < 16; ++i) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2120 g_snprintf(hashp, 3, "%02x", result[i]);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2121 hashp += 2;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2122 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2123 chal = g_strconcat(md5, g_hash_table_lookup(hash, ".challenge"), NULL);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2124 md5_init(&ctx);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2125 md5_append(&ctx, chal, strlen(chal));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2126 md5_finish(&ctx, result);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2127 hashp = md5;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2128 for (i = 0; i < 16; ++i) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2129 g_snprintf(hashp, 3, "%02x", result[i]);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2130 hashp += 2;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2131 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2132 /*
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2133 md5_init(&ctx);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2134 md5_append(&ctx, md5, strlen(md5));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2135 md5_finish(&ctx, result);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2136 hashp = md5;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2137 for (i = 0; i < 16; ++i) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2138 g_snprintf(hashp, 3, "%02x", result[i]);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2139 hashp += 2;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2140 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2141 */
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2142 g_free(chal);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2143
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2144 url = g_string_append(url, md5);
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2145 g_hash_table_foreach(hash, (GHFunc)yahoo_login_page_hash_iter, url);
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2146
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2147 url = g_string_append(url, "&.hash=1&.md5=1 HTTP/1.1\r\n"
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2148 "Host: login.yahoo.com\r\n\r\n");
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2149 g_hash_table_destroy(hash);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2150 yd->auth = g_string_free(url, FALSE);
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2151 if (gaim_proxy_connect(account, "login.yahoo.com", 80, yahoo_got_cookies, gc) != 0) {
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2152 gaim_connection_error(gc, _("Connection problem"));
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2153 return;
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2154 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2155 }
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2156
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2157 #endif /* YAHOO_WEBMESSENGER */
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2158
7883
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2159 #ifndef YAHOO_WEBMESSENGER
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2160 static void yahoo_server_check(GaimAccount *account)
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2161 {
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2162 const char *server;
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2163
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2164 server = gaim_account_get_string(account, "server", YAHOO_PAGER_HOST);
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2165
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2166 if (strcmp(server, "scs.yahoo.com") == 0)
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2167 gaim_account_set_string(account, "server", YAHOO_PAGER_HOST);
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2168 }
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2169 #endif
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2170
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2171 static void yahoo_login(GaimAccount *account) {
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2172 GaimConnection *gc = gaim_account_get_connection(account);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2173 struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2174
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2175 gc->flags |= GAIM_CONNECTION_HTML | GAIM_CONNECTION_NO_BGCOLOR;
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2176
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2177 gaim_connection_update_progress(gc, _("Connecting"), 1, 2);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2178
8235
00045afab151 [gaim-migrate @ 8958]
Gary Kramlich <grim@pidgin.im>
parents: 8216
diff changeset
2179 gaim_connection_set_display_name(gc, gaim_account_get_username(account));
00045afab151 [gaim-migrate @ 8958]
Gary Kramlich <grim@pidgin.im>
parents: 8216
diff changeset
2180
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2181 yd->fd = -1;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2182 yd->friends = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, yahoo_friend_free);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2183 yd->confs = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2184 yd->conf_id = 2;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2185
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2186 #ifndef YAHOO_WEBMESSENGER
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2187
7883
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2188 yahoo_server_check(account);
02cf91894bcf [gaim-migrate @ 8537]
Tim Ringenbach <marv@pidgin.im>
parents: 7878
diff changeset
2189
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2190 if (gaim_proxy_connect(account,
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2191 gaim_account_get_string(account, "server", YAHOO_PAGER_HOST),
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2192 gaim_account_get_int(account, "port", YAHOO_PAGER_PORT),
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2193 yahoo_got_connected, gc) != 0)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2194 {
6321
0b54b2a172d1 [gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6115
diff changeset
2195 gaim_connection_error(gc, _("Connection problem"));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2196 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2197 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2198
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2199 #else
7138
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2200 gaim_url_fetch(WEBMESSENGER_URL, TRUE, "Gaim/" VERSION, FALSE,
12b7979bce6e [gaim-migrate @ 7705]
Christian Hammond <chipx86@chipx86.com>
parents: 7134
diff changeset
2201 yahoo_login_page_cb, gc);
7134
e999c4697e38 [gaim-migrate @ 7701]
Sean Egan <seanegan@pidgin.im>
parents: 7129
diff changeset
2202 #endif
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2203
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2204 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2205
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2206 static void yahoo_close(GaimConnection *gc) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2207 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2208
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2209 g_hash_table_destroy(yd->friends);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2210 g_slist_free(yd->confs);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2211 if (yd->chat_name)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2212 g_free(yd->chat_name);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2213
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2214 if (yd->cookie_y)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2215 g_free(yd->cookie_y);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2216 if (yd->cookie_t)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2217 g_free(yd->cookie_t);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2218
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2219 if (yd->fd >= 0)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2220 close(yd->fd);
3720
dbba62e0d603 [gaim-migrate @ 3853]
Herman Bloggs <herman@bluedigits.com>
parents: 3642
diff changeset
2221
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2222 if (yd->rxqueue)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2223 g_free(yd->rxqueue);
2687
664e22f507cf [gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2686
diff changeset
2224 yd->rxlen = 0;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2225 if (gc->inpa)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2226 gaim_input_remove(gc->inpa);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2227 g_free(yd);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2228 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2229
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
2230 static const char *yahoo_list_icon(GaimAccount *a, GaimBuddy *b)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2231 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
2232 return "yahoo";
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2233 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2234
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
2235 static void yahoo_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne)
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2236 {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2237 int i = 0;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2238 char *emblems[4] = {NULL,NULL,NULL,NULL};
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2239 GaimAccount *account;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2240 GaimConnection *gc;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2241 struct yahoo_data *yd;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2242 struct yahoo_friend *f;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2243
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2244 if (!b || !(account = b->account) || !(gc = gaim_account_get_connection(account)) ||
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2245 !(yd = gc->proto_data))
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2246 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2247
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2248 f = g_hash_table_lookup(yd->friends, b->name);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2249 if (!f) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2250 *se = "notauthorized";
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2251 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2252 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2253
5068
0d4c4df65dd0 [gaim-migrate @ 5419]
Nathan Walp <nwalp@pidgin.im>
parents: 5002
diff changeset
2254 if (b->present == GAIM_BUDDY_OFFLINE) {
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2255 *se = "offline";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2256 return;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2257 } else {
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2258 if (f->away)
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
2259 emblems[i++] = "away";
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2260 if (f->sms)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2261 emblems[i++] = "wireless";
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2262 if (f->game)
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2263 emblems[i++] = "game";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2264 }
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2265 *se = emblems[0];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2266 *sw = emblems[1];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2267 *nw = emblems[2];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2268 *ne = emblems[3];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
2269 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2270
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2271 static char *yahoo_get_status_string(enum yahoo_status a)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2272 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2273 switch (a) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2274 case YAHOO_STATUS_BRB:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2275 return _("Be Right Back");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2276 case YAHOO_STATUS_BUSY:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2277 return _("Busy");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2278 case YAHOO_STATUS_NOTATHOME:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2279 return _("Not At Home");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2280 case YAHOO_STATUS_NOTATDESK:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2281 return _("Not At Desk");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2282 case YAHOO_STATUS_NOTINOFFICE:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2283 return _("Not In Office");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2284 case YAHOO_STATUS_ONPHONE:
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
2285 return _("On The Phone");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2286 case YAHOO_STATUS_ONVACATION:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2287 return _("On Vacation");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2288 case YAHOO_STATUS_OUTTOLUNCH:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2289 return _("Out To Lunch");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2290 case YAHOO_STATUS_STEPPEDOUT:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2291 return _("Stepped Out");
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
2292 case YAHOO_STATUS_INVISIBLE:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2293 return _("Invisible");
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
2294 case YAHOO_STATUS_IDLE:
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
2295 return _("Idle");
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2296 case YAHOO_STATUS_OFFLINE:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2297 return _("Offline");
2879
e417cf7111c4 [gaim-migrate @ 2892]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2878
diff changeset
2298 default:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2299 return _("Online");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2300 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2301 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2302
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2303 static void yahoo_initiate_conference(GaimConnection *gc, const char *name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2304 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2305 GHashTable *components;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2306 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2307 int id;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2308
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2309 yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2310 id = yd->conf_id;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2311
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2312 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2313 g_hash_table_replace(components, g_strdup("room"),
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2314 g_strdup_printf("%s-%d", gaim_connection_get_display_name(gc), id));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2315 g_hash_table_replace(components, g_strdup("topic"), g_strdup("Join my conference..."));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2316 g_hash_table_replace(components, g_strdup("type"), g_strdup("Conference"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2317 yahoo_c_join(gc, components);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2318 g_hash_table_destroy(components);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2319
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2320 yahoo_c_invite(gc, id, "Join my conference...", name);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2321 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2322
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2323 static void yahoo_game(GaimConnection *gc, const char *name) {
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2324 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2325 char *game = NULL;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2326 char *t;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2327 char url[256];
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2328 struct yahoo_friend *f;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2329
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2330 f = g_hash_table_lookup(yd->friends, name);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2331 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2332 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2333
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2334 game = f->game;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2335 if (!game)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2336 return;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2337
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2338 t = game = g_strdup(strstr(game, "ante?room="));
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2339 while (*t != '\t')
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2340 t++;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2341 *t = 0;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2342 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
2343 gaim_notify_uri(gc, url);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2344 g_free(game);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2345 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2346
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
2347 static char *yahoo_status_text(GaimBuddy *b)
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2348 {
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2349 struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2350 struct yahoo_friend *f = NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2351 char *stripped = NULL;
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
2352
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2353 f = g_hash_table_lookup(yd->friends, b->name);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2354 if (!f)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2355 return g_strdup(_("Not on server list"));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2356
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2357 switch (f->status) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2358 case YAHOO_STATUS_AVAILABLE:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2359 return NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2360 case YAHOO_STATUS_IDLE:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2361 if (f->idle == -1)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2362 return g_strdup(yahoo_get_status_string(f->status));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2363 return NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2364 case YAHOO_STATUS_CUSTOM:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2365 if (!f->msg)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2366 return NULL;
7095
17d2b54254f8 [gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents: 7094
diff changeset
2367 stripped = gaim_markup_strip_html(f->msg);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2368 if (stripped) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2369 char *ret = g_markup_escape_text(stripped, strlen(stripped));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2370 g_free(stripped);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2371 return ret;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2372 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2373 return NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2374 default:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2375 return g_strdup(yahoo_get_status_string(f->status));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2376 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2377 }
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2378
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
2379 static char *yahoo_tooltip_text(GaimBuddy *b)
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
2380 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
2381 struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2382 struct yahoo_friend *f;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2383 char *escaped, *status, *ret;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2384
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2385 f = g_hash_table_lookup(yd->friends, b->name);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2386 if (!f)
8591
ae42ad1cd127 [gaim-migrate @ 9342]
Mark Doliner <markdoliner@pidgin.im>
parents: 8589
diff changeset
2387 status = g_strdup_printf("\n%s", _("Not on server list"));
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2388 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2389 switch (f->status) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2390 case YAHOO_STATUS_IDLE:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2391 if (f->idle == -1) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2392 status = g_strdup(yahoo_get_status_string(f->status));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2393 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2394 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2395 return NULL;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2396 case YAHOO_STATUS_CUSTOM:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2397 if (!f->msg)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2398 return NULL;
7095
17d2b54254f8 [gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents: 7094
diff changeset
2399 status = gaim_markup_strip_html(f->msg);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2400 break;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2401 default:
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2402 status = g_strdup(yahoo_get_status_string(f->status));
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2403 break;
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
2404 }
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2405
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2406 escaped = g_markup_escape_text(status, strlen(status));
8591
ae42ad1cd127 [gaim-migrate @ 9342]
Mark Doliner <markdoliner@pidgin.im>
parents: 8589
diff changeset
2407 ret = g_strdup_printf(_("\n<b>%s:</b> %s"), _("Status"), escaped);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2408 g_free(status);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2409 g_free(escaped);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2410
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2411 return ret;
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
2412 }
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
2413
6796
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2414 static void yahoo_addbuddyfrommenu_cb(GaimConnection *gc, const char *who)
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2415 {
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2416 yahoo_add_buddy(gc, who, NULL);
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2417 }
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2418
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2419 static GList *yahoo_buddy_menu(GaimConnection *gc, const char *who)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2420 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2421 GList *m = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2422 struct proto_buddy_menu *pbm;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2423 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2424 static char buf2[1024];
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2425 struct yahoo_friend *f;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2426
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2427 f = g_hash_table_lookup(yd->friends, who);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2428
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2429 if (!f) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2430 pbm = g_new0(struct proto_buddy_menu, 1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2431 pbm->label = _("Add Buddy");
6796
2f3f12a30ab9 [gaim-migrate @ 7336]
Tim Ringenbach <marv@pidgin.im>
parents: 6795
diff changeset
2432 pbm->callback = yahoo_addbuddyfrommenu_cb;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2433 pbm->gc = gc;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2434 m = g_list_append(m, pbm);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2435
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2436 return m;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2437 }
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2438
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2439 if (f->status == YAHOO_STATUS_OFFLINE)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2440 return NULL;
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
2441
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2442 pbm = g_new0(struct proto_buddy_menu, 1);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2443 pbm->label = _("Join in Chat");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2444 pbm->callback = yahoo_chat_goto;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2445 pbm->gc = gc;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2446 m = g_list_append(m, pbm);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2447
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2448 pbm = g_new0(struct proto_buddy_menu, 1);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2449 pbm->label = _("Initiate Conference");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2450 pbm->callback = yahoo_initiate_conference;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2451 pbm->gc = gc;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2452 m = g_list_append(m, pbm);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2453
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2454 /* FIXME: remove this when the ui does it for us. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2455 pbm = g_new0(struct proto_buddy_menu, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2456 pbm->label = _("Send File");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2457 pbm->callback = yahoo_ask_send_file;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2458 pbm->gc = gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2459 m = g_list_append(m, pbm);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
2460
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2461 if (f->game) {
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2462 char *game = f->game;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2463 char *room;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2464 char *t;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2465
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2466 if (!game)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2467 return m;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2468
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2469 pbm = g_new0(struct proto_buddy_menu, 1);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2470 if (!(room = strstr(game, "&follow="))) /* skip ahead to the url */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2471 return m;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2472 while (*room && *room != '\t') /* skip to the tab */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2473 room++;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2474 t = room++; /* room as now at the name */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2475 while (*t != '\n')
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2476 t++; /* replace the \n with a space */
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2477 *t = ' ';
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2478 g_snprintf(buf2, sizeof buf2, "%s", room);
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2479 pbm->label = buf2;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2480 pbm->callback = yahoo_game;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2481 pbm->gc = gc;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2482 m = g_list_append(m, pbm);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2483 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2484
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2485 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2486 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2487
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2488 static void yahoo_act_id(GaimConnection *gc, const char *entry)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2489 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2490 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2491
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2492 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2493 yahoo_packet_hash(pkt, 3, entry);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2494 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2495 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2496
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2497 gaim_connection_set_display_name(gc, entry);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2498 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2499
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2500 static void yahoo_show_act_id(GaimConnection *gc)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2501 {
5493
f30de3b116ea [gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
2502 gaim_request_input(gc, NULL, _("Active which ID?"), NULL,
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8620
diff changeset
2503 gaim_connection_get_display_name(gc), FALSE, FALSE, NULL,
5493
f30de3b116ea [gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
2504 _("OK"), G_CALLBACK(yahoo_act_id),
f30de3b116ea [gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
2505 _("Cancel"), NULL, gc);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2506 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2507
7878
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2508 static void yahoo_show_chat_goto(GaimConnection *gc)
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2509 {
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2510 gaim_request_input(gc, NULL, _("Join who in chat?"), NULL,
8697
c5e51aef2026 [gaim-migrate @ 9450]
Jon Oberheide
parents: 8620
diff changeset
2511 "", FALSE, FALSE, NULL,
7878
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2512 _("OK"), G_CALLBACK(yahoo_chat_goto),
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2513 _("Cancel"), NULL, gc);
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2514 }
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2515
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2516 static GList *yahoo_actions(GaimConnection *gc) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2517 GList *m = NULL;
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
2518 struct proto_actions_menu *pam;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2519
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
2520 pam = g_new0(struct proto_actions_menu, 1);
7878
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2521 pam->label = _("Activate ID...");
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
2522 pam->callback = yahoo_show_act_id;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
2523 pam->gc = gc;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
2524 m = g_list_append(m, pam);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2525
7878
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2526 pam = g_new0(struct proto_actions_menu, 1);
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2527 pam->label = _("Join user in chat...");
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2528 pam->callback = yahoo_show_chat_goto;
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2529 pam->gc = gc;
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2530 m = g_list_append(m, pam);
1d2f95edc400 [gaim-migrate @ 8532]
Tim Ringenbach <marv@pidgin.im>
parents: 7865
diff changeset
2531
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2532 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2533 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2534
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7112
diff changeset
2535 static int yahoo_send_im(GaimConnection *gc, const char *who, const char *what, GaimConvImFlags flags)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2536 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2537 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2538 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, 0);
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2539 char *msg = yahoo_html_to_codes(what);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2540 char *msg2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2541 gboolean utf8 = TRUE;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2542
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2543 msg2 = yahoo_string_encode(gc, msg, &utf8);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2544
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2545 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2546 yahoo_packet_hash(pkt, 5, who);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2547 if (utf8)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2548 yahoo_packet_hash(pkt, 97, "1");
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2549 yahoo_packet_hash(pkt, 14, msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2550
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2551
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2552 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2553
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2554 yahoo_packet_free(pkt);
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2555
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2556 g_free(msg);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2557 g_free(msg2);
6629
9d6bbc91ba24 [gaim-migrate @ 7153]
Tim Ringenbach <marv@pidgin.im>
parents: 6623
diff changeset
2558
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2559 return 1;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2560 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2561
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6044
diff changeset
2562 int yahoo_send_typing(GaimConnection *gc, const char *who, int typ)
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2563 {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2564 struct yahoo_data *yd = gc->proto_data;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
2565 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_NOTIFY, YAHOO_STATUS_TYPING, 0);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2566 yahoo_packet_hash(pkt, 49, "TYPING");
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2567 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2568 yahoo_packet_hash(pkt, 14, " ");
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
2569 yahoo_packet_hash(pkt, 13, typ == GAIM_TYPING ? "1" : "0");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2570 yahoo_packet_hash(pkt, 5, who);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2571 yahoo_packet_hash(pkt, 1002, "1");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2572
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2573 yahoo_send_packet(yd, pkt);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2574
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2575 yahoo_packet_free(pkt);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2576
3001
9fc89391c8fa [gaim-migrate @ 3014]
Sean Egan <seanegan@pidgin.im>
parents: 2993
diff changeset
2577 return 0;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2578 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
2579
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6044
diff changeset
2580 static void yahoo_set_away(GaimConnection *gc, const char *state, const char *msg)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2581 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2582 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2583 struct yahoo_packet *pkt;
2772
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
2584 int service;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2585 char s[4];
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2586 char *conv_msg = NULL;
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2587 char *conv_msg2 = NULL;
6691
fecdc585c292 [gaim-migrate @ 7217]
Christian Hammond <chipx86@chipx86.com>
parents: 6687
diff changeset
2588
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
2589 if (gc->away) {
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
2590 g_free(gc->away);
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
2591 gc->away = NULL;
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
2592 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2593
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2594 if (msg) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2595 yd->current_status = YAHOO_STATUS_CUSTOM;
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2596 gc->away = g_strndup(msg, YAHOO_MAX_STATUS_MESSAGE_LENGTH);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2597 } else if (state) {
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
2598 gc->away = g_strdup("");
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2599 if (!strcmp(state, _("Available"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2600 yd->current_status = YAHOO_STATUS_AVAILABLE;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2601 } else if (!strcmp(state, _("Be Right Back"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2602 yd->current_status = YAHOO_STATUS_BRB;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2603 } else if (!strcmp(state, _("Busy"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2604 yd->current_status = YAHOO_STATUS_BUSY;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2605 } else if (!strcmp(state, _("Not At Home"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2606 yd->current_status = YAHOO_STATUS_NOTATHOME;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2607 } else if (!strcmp(state, _("Not At Desk"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2608 yd->current_status = YAHOO_STATUS_NOTATDESK;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2609 } else if (!strcmp(state, _("Not In Office"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2610 yd->current_status = YAHOO_STATUS_NOTINOFFICE;
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
2611 } else if (!strcmp(state, _("On The Phone"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2612 yd->current_status = YAHOO_STATUS_ONPHONE;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2613 } else if (!strcmp(state, _("On Vacation"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2614 yd->current_status = YAHOO_STATUS_ONVACATION;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2615 } else if (!strcmp(state, _("Out To Lunch"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2616 yd->current_status = YAHOO_STATUS_OUTTOLUNCH;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2617 } else if (!strcmp(state, _("Stepped Out"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2618 yd->current_status = YAHOO_STATUS_STEPPEDOUT;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2619 } else if (!strcmp(state, _("Invisible"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2620 yd->current_status = YAHOO_STATUS_INVISIBLE;
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2621 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { /* this should never happen? */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2622 if (gc->is_idle) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2623 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2624 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2625 yd->current_status = YAHOO_STATUS_AVAILABLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2626 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2627 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2628 } else if (gc->is_idle) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2629 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2630 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2631 yd->current_status = YAHOO_STATUS_AVAILABLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2632 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2633
2772
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
2634 if (yd->current_status == YAHOO_STATUS_AVAILABLE)
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
2635 service = YAHOO_SERVICE_ISBACK;
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
2636 else
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
2637 service = YAHOO_SERVICE_ISAWAY;
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2638
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2639 pkt = yahoo_packet_new(service, YAHOO_STATUS_AVAILABLE, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2640 g_snprintf(s, sizeof(s), "%d", yd->current_status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2641 yahoo_packet_hash(pkt, 10, s);
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2642
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2643 if ((yd->current_status == YAHOO_STATUS_CUSTOM) && gc->away) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2644 conv_msg = yahoo_string_encode(gc, gc->away, NULL);
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2645 conv_msg2 = gaim_unescape_html(conv_msg);
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2646 yahoo_packet_hash(pkt, 19, conv_msg2);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2647 }
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2648
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2649 if ((yd->current_status != YAHOO_STATUS_AVAILABLE) &&
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2650 (yd->current_status != YAHOO_STATUS_IDLE)) {
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2651 if (gc->is_idle)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2652 yahoo_packet_hash(pkt, 47, "2");
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2653 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2654 yahoo_packet_hash(pkt, 47, "1");
6686
df609a8001f6 [gaim-migrate @ 7212]
Tim Ringenbach <marv@pidgin.im>
parents: 6657
diff changeset
2655 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2656
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2657 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2658 yahoo_packet_free(pkt);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2659 if (conv_msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2660 g_free(conv_msg);
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2661 if (conv_msg2)
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2662 g_free(conv_msg2);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2663 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2664
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2665 static void yahoo_set_idle(GaimConnection *gc, int idle)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2666 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2667 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2668 struct yahoo_packet *pkt = NULL;
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2669 char *msg = NULL, *msg2 = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2670
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2671 if (idle && yd->current_status == YAHOO_STATUS_AVAILABLE) {
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2672 pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2673 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2674 } else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2675 pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2676 yd->current_status = YAHOO_STATUS_AVAILABLE;
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2677 } else {
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2678 pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2679 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2680
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2681 if (pkt) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2682 char buf[4];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2683 g_snprintf(buf, sizeof(buf), "%d", yd->current_status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2684 yahoo_packet_hash(pkt, 10, buf);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2685 if (gc->away && yd->current_status == YAHOO_STATUS_CUSTOM) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2686 msg = yahoo_string_encode(gc, gc->away, NULL);
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2687 msg2 = gaim_unescape_html(msg);
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2688 yahoo_packet_hash(pkt, 19, msg2);
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2689 if (idle)
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2690 yahoo_packet_hash(pkt, 47, "2");
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2691 else
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2692 yahoo_packet_hash(pkt, 47, "1"); /* fixme when available messages are possible */
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2693 } else if (idle && (yd->current_status != YAHOO_STATUS_AVAILABLE) &&
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2694 (yd->current_status != YAHOO_STATUS_IDLE)) {
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2695 yahoo_packet_hash(pkt, 47, "2");
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2696 } else if (!idle && (yd->current_status != YAHOO_STATUS_AVAILABLE) &&
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2697 (yd->current_status != YAHOO_STATUS_IDLE)) {
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2698 yahoo_packet_hash(pkt, 47, "1");
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2699 }
6847
0fda06bb588a [gaim-migrate @ 7392]
Tim Ringenbach <marv@pidgin.im>
parents: 6840
diff changeset
2700
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2701 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2702 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2703 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2704 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2705 g_free(msg);
8503
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2706 if (msg2)
08a06c098df6 [gaim-migrate @ 9239]
Tim Ringenbach <marv@pidgin.im>
parents: 8482
diff changeset
2707 g_free(msg2);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2708 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2709
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2710 static GList *yahoo_away_states(GaimConnection *gc)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2711 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2712 GList *m = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2713
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2714 m = g_list_append(m, _("Available"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2715 m = g_list_append(m, _("Be Right Back"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2716 m = g_list_append(m, _("Busy"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2717 m = g_list_append(m, _("Not At Home"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2718 m = g_list_append(m, _("Not At Desk"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2719 m = g_list_append(m, _("Not In Office"));
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
2720 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
2721 m = g_list_append(m, _("On Vacation"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2722 m = g_list_append(m, _("Out To Lunch"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2723 m = g_list_append(m, _("Stepped Out"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
2724 m = g_list_append(m, _("Invisible"));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2725 m = g_list_append(m, GAIM_AWAY_CUSTOM);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2726
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2727 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2728 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2729
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2730 static void yahoo_keepalive(GaimConnection *gc)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2731 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2732 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2733 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_PING, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2734 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2735 yahoo_packet_free(pkt);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2736
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2737 if (!yd->chat_online)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2738 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2739
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2740 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATPING, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2741 yahoo_packet_hash(pkt, 109, gaim_connection_get_display_name(gc));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2742 yahoo_send_packet(yd, pkt);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
2743 yahoo_packet_free(pkt);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2744 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2745
6787
7d8e0ba98f68 [gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents: 6784
diff changeset
2746 static void yahoo_add_buddy(GaimConnection *gc, const char *who, GaimGroup *foo)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2747 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2748 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2749 struct yahoo_packet *pkt;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6691
diff changeset
2750 GaimGroup *g;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2751 char *group = NULL;
7829
86a709c24689 [gaim-migrate @ 8481]
Ethan Blanton <elb@pidgin.im>
parents: 7827
diff changeset
2752 char *group2 = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2753
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2754 if (!yd->logged_in)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2755 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2756
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2757 if (foo)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2758 group = foo->name;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2759 if (!group) {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2760 g = gaim_find_buddys_group(gaim_find_buddy(gc->account, who));
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2761 if (g)
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2762 group = g->name;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2763 else
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2764 group = "Buddies";
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2765 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2766
7829
86a709c24689 [gaim-migrate @ 8481]
Ethan Blanton <elb@pidgin.im>
parents: 7827
diff changeset
2767 group2 = yahoo_string_encode(gc, group, NULL);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2768 pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0);
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2769 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2770 yahoo_packet_hash(pkt, 7, who);
7829
86a709c24689 [gaim-migrate @ 8481]
Ethan Blanton <elb@pidgin.im>
parents: 7827
diff changeset
2771 yahoo_packet_hash(pkt, 65, group2);
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
2772 yahoo_packet_hash(pkt, 14, "");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2773 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2774 yahoo_packet_free(pkt);
7829
86a709c24689 [gaim-migrate @ 8481]
Ethan Blanton <elb@pidgin.im>
parents: 7827
diff changeset
2775 g_free(group2);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2776 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2777
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6044
diff changeset
2778 static void yahoo_remove_buddy(GaimConnection *gc, const char *who, const char *group)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2779 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2780 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2781 struct yahoo_friend *f;
6795
396b24cfeeb6 [gaim-migrate @ 7334]
Herman Bloggs <herman@bluedigits.com>
parents: 6793
diff changeset
2782 struct yahoo_packet *pkt;
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2783 GSList *buddies, *l;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2784 GaimGroup *g;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2785 gboolean remove = TRUE;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2786 char *cg;
6784
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2787
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2788 if (!(f = g_hash_table_lookup(yd->friends, who)))
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2789 return;
6623b18f188a [gaim-migrate @ 7323]
Tim Ringenbach <marv@pidgin.im>
parents: 6761
diff changeset
2790
6840
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2791 buddies = gaim_find_buddies(gaim_connection_get_account(gc), who);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2792 for (l = buddies; l; l = l->next) {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2793 g = gaim_find_buddys_group(l->data);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2794 if (gaim_utf8_strcasecmp(group, g->name)) {
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2795 remove = FALSE;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2796 break;
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2797 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2798 }
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2799
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2800 g_slist_free(buddies);
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2801
d4e05db5bccb [gaim-migrate @ 7385]
Tim Ringenbach <marv@pidgin.im>
parents: 6820
diff changeset
2802 if (remove)
6820
17d946b9bfe8 [gaim-migrate @ 7364]
Tim Ringenbach <marv@pidgin.im>
parents: 6810
diff changeset
2803 g_hash_table_remove(yd->friends, who);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2804
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2805 cg = yahoo_string_encode(gc, group, NULL);
6795
396b24cfeeb6 [gaim-migrate @ 7334]
Herman Bloggs <herman@bluedigits.com>
parents: 6793
diff changeset
2806 pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0);
5583
823143bef3b0 [gaim-migrate @ 5987]
Sean Egan <seanegan@pidgin.im>
parents: 5521
diff changeset
2807 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2808 yahoo_packet_hash(pkt, 7, who);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2809 yahoo_packet_hash(pkt, 65, cg);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2810 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2811 yahoo_packet_free(pkt);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
2812 g_free(cg);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2813 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2814
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2815 static void yahoo_add_deny(GaimConnection *gc, const char *who) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2816 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2817 struct yahoo_packet *pkt;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2818
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2819 if (!yd->logged_in)
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2820 return;
8057
1b3bd2942b2b [gaim-migrate @ 8743]
Sean Egan <seanegan@pidgin.im>
parents: 8046
diff changeset
2821 /* It seems to work better without this */
1b3bd2942b2b [gaim-migrate @ 8743]
Sean Egan <seanegan@pidgin.im>
parents: 8046
diff changeset
2822
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2823 /* if (gc->account->perm_deny != 4)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2824 return; */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2825
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2826 if (!who || who[0] == '\0')
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2827 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
2828
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2829 pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, 0);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2830 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2831 yahoo_packet_hash(pkt, 7, who);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2832 yahoo_packet_hash(pkt, 13, "1");
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2833 yahoo_send_packet(yd, pkt);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2834 yahoo_packet_free(pkt);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2835 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2836
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2837 static void yahoo_rem_deny(GaimConnection *gc, const char *who) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2838 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2839 struct yahoo_packet *pkt;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2840
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2841 if (!yd->logged_in)
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2842 return;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2843
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2844 if (!who || who[0] == '\0')
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2845 return;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2846
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2847 pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, 0);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2848 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2849 yahoo_packet_hash(pkt, 7, who);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2850 yahoo_packet_hash(pkt, 13, "2");
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2851 yahoo_send_packet(yd, pkt);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2852 yahoo_packet_free(pkt);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2853 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2854
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2855 static void yahoo_set_permit_deny(GaimConnection *gc) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2856 GaimAccount *acct;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2857 GSList *deny;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2858
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2859 acct = gc->account;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2860
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2861 switch (acct->perm_deny) {
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2862 case 1:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2863 case 3:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2864 case 5:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2865 for (deny = acct->deny;deny;deny = deny->next)
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2866 yahoo_rem_deny(gc, deny->data);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2867 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2868 case 4:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2869 for (deny = acct->deny;deny;deny = deny->next)
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2870 yahoo_add_deny(gc, deny->data);
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2871 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2872 case 2:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2873 default:
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2874 break;
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2875 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2876 }
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
2877
6513
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2878 static gboolean yahoo_unload_plugin(GaimPlugin *plugin)
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2879 {
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2880 yahoo_dest_colorht();
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2881 return TRUE;
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2882 }
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
2883
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2884 static void yahoo_got_info(void *data, const char *url_text, size_t len)
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2885 {
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2886 YahooGetInfoData *info_data = (YahooGetInfoData *)data;
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2887 char *stripped, *p;
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2888 char buf[1024];
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2889 gboolean found = FALSE;
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2890 char *url_buffer;
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2891 GString *s;
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2892 int stripped_len;
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2893
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2894 gaim_debug_info("yahoo", "In yahoo_got_info\n");
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2895
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2896 /* we failed to grab the profile URL */
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2897 if (url_text == NULL || strcmp(url_text, "") == 0) {
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2898 gaim_notify_formatted(info_data->gc, NULL, _("Buddy Information"), NULL,
7062
26abb8b189ce [gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents: 7043
diff changeset
2899 _("<html><body><b>Error retrieving profile</b></body></html>"),
26abb8b189ce [gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents: 7043
diff changeset
2900 NULL, NULL);
26abb8b189ce [gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents: 7043
diff changeset
2901
7161
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2902 g_free(info_data->name);
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2903 g_free(info_data);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2904 return;
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2905 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2906
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2907 /* we don't yet support the multiple link level of the warning page for
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2908 * 'adult' profiles, not to mention the fact that yahoo wants you to be
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2909 * logged in (on the website) to be able to view an 'adult' profile. for
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2910 * now, just tell them that we can't help them, and provide a link to the
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2911 * profile if they want to do the web browser thing.
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2912 */
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2913 p = strstr(url_text, "Adult Profiles Warning Message");
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2914 if (p) {
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2915 g_snprintf(buf, 1024, "<html><body>%s%s<a href=\"%s%s\">%s%s</a></body></html>",
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2916 _("<b>Sorry, profiles marked as containing adult content are not supported at this time.</b><br><br>\n"),
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2917 _("If you wish to view this profile, you will need to visit this link in your web browser<br>"),
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2918 YAHOO_PROFILE_URL, info_data->name, YAHOO_PROFILE_URL, info_data->name);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2919
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2920 gaim_notify_formatted(info_data->gc, NULL, _("Buddy Information"), NULL,
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2921 buf, NULL, NULL);
7161
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2922
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2923 g_free(info_data->name);
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2924 g_free(info_data);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2925 return;
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2926 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2927
6630
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2928 /* at the moment we don't support profile pages with languages other than
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2929 * english. the problem is, that every user may choose his/her own profile
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2930 * language. this language has nothing to do with the preferences of the
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2931 * user which looks at the profile
6630
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2932 */
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2933 p = strstr(url_text, "Last Updated:");
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2934 if (!p) {
7550
deceec35bb4b [gaim-migrate @ 8164]
Ambrose Li <ambrose.li@gmail.com>
parents: 7478
diff changeset
2935 p = strstr(url_text, "Last Updated&nbsp;");
deceec35bb4b [gaim-migrate @ 8164]
Ambrose Li <ambrose.li@gmail.com>
parents: 7478
diff changeset
2936 }
deceec35bb4b [gaim-migrate @ 8164]
Ambrose Li <ambrose.li@gmail.com>
parents: 7478
diff changeset
2937 if (!p) {
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2938 g_snprintf(buf, 1024, "<html><body>%s%s<a href=\"%s%s\">%s%s</a></body></html>",
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2939 _("<b>Sorry, non-English profiles are not supported at this time.</b><br><br>\n"),
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2940 _("If you wish to view this profile, you will need to visit this link in your web browser<br>"),
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2941 YAHOO_PROFILE_URL, info_data->name, YAHOO_PROFILE_URL, info_data->name);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2942
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2943 gaim_notify_formatted(info_data->gc, NULL, _("Buddy Information"), NULL,
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2944 buf, NULL, NULL);
7161
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2945
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2946 g_free(info_data->name);
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
2947 g_free(info_data);
6630
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2948 return;
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2949 }
397873e01b05 [gaim-migrate @ 7154]
Luke Schierer <lschiere@pidgin.im>
parents: 6629
diff changeset
2950
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2951 url_buffer = g_strdup(url_text);
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2952
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2953 /*
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2954 * gaim_markup_strip_html() doesn't strip out character entities like &nbsp;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2955 * and &#183;
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2956 */
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2957 while ((p = strstr(url_buffer, "&nbsp;")) != NULL) {
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2958 memmove(p, p + 6, strlen(p + 6));
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2959 url_buffer[strlen(url_buffer) - 6] = '\0';
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2960 }
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2961 while ((p = strstr(url_buffer, "&#183;")) != NULL) {
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2962 memmove(p, p + 6, strlen(p + 6));
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2963 url_buffer[strlen(url_buffer) - 6] = '\0';
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2964 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2965
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2966 /* nuke the nasty \r's */
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2967 while ((p = strchr(url_buffer, '\r')) != NULL) {
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2968 memmove(p, p + 1, strlen(p + 1));
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2969 url_buffer[strlen(url_buffer) - 1] = '\0';
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2970 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2971
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2972 /* nuke the html, it's easier than trying to parse the horrid stuff */
7095
17d2b54254f8 [gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents: 7094
diff changeset
2973 stripped = gaim_markup_strip_html(url_buffer);
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2974 stripped_len = strlen(stripped);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2975
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2976 gaim_debug_misc("yahoo", "stripped = %p\n", stripped);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2977 gaim_debug_misc("yahoo", "url_buffer = %p\n", url_buffer);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2978
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
2979 /* gonna re-use the memory we've already got for url_buffer */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2980 /* no we're not */
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2981 s = g_string_sized_new(strlen(url_buffer));
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2982 g_string_append(s, "<html><body>\n");
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2983
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2984 /* extract their Yahoo! ID and put it in. Don't bother marking has_info as
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2985 * true, since the Yahoo! ID will always be there */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2986 if (!gaim_markup_extract_info_field(stripped, stripped_len, s, "Yahoo! ID:", 2, "\n", 0,
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2987 NULL, _("Yahoo! ID"), 0, NULL))
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2988 g_string_append_printf(s, "<b>%s:</b> %s<br>", _("Yahoo! ID"), info_data->name);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2989
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
2990
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2991 /* extract their Email address and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2992 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "My Email", 5, "\n", 0,
6657
31bb7535e168 [gaim-migrate @ 7182]
Nathan Poznick
parents: 6630
diff changeset
2993 "Private", _("Email"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2994
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2995 /* extract the Nickname if it exists */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
2996 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Nickname:", 1, "\n", '\n',
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
2997 NULL, _("Nickname"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2998
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
2999 /* extract their RealName and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3000 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "RealName:", 1, "\n", '\n',
6623
75ba9eb9d3f8 [gaim-migrate @ 7147]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6622
diff changeset
3001 NULL, _("Realname"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3002
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3003 /* extract their Location and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3004 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Location:", 2, "\n", '\n',
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3005 NULL, _("Location"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3006
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3007 /* extract their Age and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3008 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Age:", 3, "\n", '\n',
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3009 NULL, _("Age"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3010
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3011 /* extract their MaritalStatus and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3012 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "MaritalStatus:", 3, "\n", '\n',
6657
31bb7535e168 [gaim-migrate @ 7182]
Nathan Poznick
parents: 6630
diff changeset
3013 "No Answer", _("Marital Status"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3014
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3015 /* extract their Gender and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3016 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Gender:", 3, "\n", '\n',
6657
31bb7535e168 [gaim-migrate @ 7182]
Nathan Poznick
parents: 6630
diff changeset
3017 "No Answer", _("Gender"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3018
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3019 /* extract their Occupation and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3020 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Occupation:", 2, "\n", '\n',
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3021 NULL, _("Occupation"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3022
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3023 /* Hobbies, Latest News, and Favorite Quote are a bit different, since the
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3024 * values can contain embedded newlines... but any or all of them can also
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3025 * not appear. The way we delimit them is to successively look for the next
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3026 * one that _could_ appear, and if all else fails, we end the section by
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3027 * looking for the 'Links' heading, which is the next thing to follow this
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3028 * bunch.
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3029 */
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3030
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3031 if (!gaim_markup_extract_info_field(stripped, stripped_len, s, "Hobbies:", 1, "Latest News",
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3032 '\n', NULL, _("Hobbies"), 0, NULL))
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3033 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3034 if (!gaim_markup_extract_info_field(stripped, stripped_len, s, "Hobbies:", 1, "Favorite Quote",
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3035 '\n', NULL, _("Hobbies"), 0, NULL))
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3036 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3037 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Hobbies:", 1, "Links",
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3038 '\n', NULL, _("Hobbies"), 0, NULL);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3039 }
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3040 else
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3041 found = TRUE;
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3042 }
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3043 else
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3044 found = TRUE;
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3045
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3046 if (!gaim_markup_extract_info_field(stripped, stripped_len, s, "Latest News:", 1, "Favorite Quote",
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3047 '\n', NULL, _("Latest News"), 0, NULL))
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3048 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3049 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Latest News:", 1, "Links",
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3050 '\n', NULL, _("Latest News"), 0, NULL);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3051 }
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3052 else
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3053 found = TRUE;
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3054
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3055 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Favorite Quote:", 0, "Links",
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3056 '\n', NULL, _("Favorite Quote"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3057
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3058 /* Home Page will either be "No home page specified",
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3059 * or "Home Page: " and a link. */
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3060 p = strstr(stripped, "No home page specified");
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3061 if(!p)
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3062 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3063 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Home Page:", 1, " ", 0, NULL,
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3064 _("Home Page"), 1, NULL);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3065 }
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3066
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3067 /* Cool Link {1,2,3} is also different. If "No cool link specified" exists,
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3068 * then we have none. If we have one however, we'll need to check and see if
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3069 * we have a second one. If we have a second one, we have to check to see if
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3070 * we have a third one.
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3071 */
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3072 p = strstr(stripped,"No cool link specified");
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3073 if (!p)
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3074 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3075 if (gaim_markup_extract_info_field(stripped, stripped_len, s, "Cool Link 1:", 1, " ", 0, NULL,
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3076 _("Cool Link 1"), 1, NULL))
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3077 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3078 found = TRUE;
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3079 if (gaim_markup_extract_info_field(stripped, stripped_len, s, "Cool Link 2:", 1, " ", 0, NULL,
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3080 _("Cool Link 2"), 1, NULL))
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3081 gaim_markup_extract_info_field(stripped, stripped_len, s, "Cool Link 3:", 1, " ", 0, NULL,
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3082 _("Cool Link 3"), 1, NULL);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3083 }
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3084 }
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3085
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3086 /* see if Member Since is there, and if so, extract it. */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3087 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Member Since:", 1, "Last Updated:",
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3088 '\n', NULL, _("Member Since"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3089
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3090 /* extract the Last Updated date and put it in */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3091 found |= gaim_markup_extract_info_field(stripped, stripped_len, s, "Last Updated:", 1, "\n", '\n', NULL,
6573
a3d6102d1e65 [gaim-migrate @ 7095]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6546
diff changeset
3092 _("Last Updated"), 0, NULL);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3093
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3094 /* finish off the html */
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3095 g_string_append(s, "</body></html>\n");
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3096 g_free(stripped);
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3097
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3098 if(found)
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3099 {
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3100 /* show it to the user */
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3101 gaim_notify_formatted(info_data->gc, NULL, _("Buddy Information"), NULL,
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3102 s->str, NULL, NULL);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3103 }
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3104 else
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3105 {
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3106 char *primary;
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3107 primary = g_strdup_printf(_("User information for %s unavailable"), info_data->name);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3108 gaim_notify_error(info_data->gc, NULL, primary,
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3109 _("The user's profile is empty."));
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3110 g_free(primary);
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3111 }
7094
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
3112
8f9588491993 [gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents: 7084
diff changeset
3113 g_free(url_buffer);
7675
8058cedec7a2 [gaim-migrate @ 8319]
Tim Ringenbach <marv@pidgin.im>
parents: 7664
diff changeset
3114 g_string_free(s, TRUE);
7161
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
3115 g_free(info_data->name);
bcbe9858671b [gaim-migrate @ 7728]
Mark Doliner <markdoliner@pidgin.im>
parents: 7138
diff changeset
3116 g_free(info_data);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3117 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3118
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3119 static void yahoo_get_info(GaimConnection *gc, const char *name)
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3120 {
7112
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3121 YahooGetInfoData *data;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3122 char *url;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3123
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3124 data = g_new0(YahooGetInfoData, 1);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3125 data->gc = gc;
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3126 data->name = g_strdup(name);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3127
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3128 url = g_strdup_printf("%s%s", YAHOO_PROFILE_URL, name);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3129
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3130 gaim_url_fetch(url, FALSE, NULL, FALSE, yahoo_got_info, data);
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3131
f5a47bd013d3 [gaim-migrate @ 7679]
Nathan Poznick
parents: 7108
diff changeset
3132 g_free(url);
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3133 }
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3134
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3135 static void yahoo_change_buddys_group(GaimConnection *gc, const char *who,
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3136 const char *old_group, const char *new_group)
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3137 {
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3138 struct yahoo_data *yd = gc->proto_data;
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3139 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3140 char *gpn, *gpo;
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3141
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3142 /* Step 0: If they aren't on the server list anyway,
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3143 * don't bother letting the server know.
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3144 */
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3145 if (!g_hash_table_lookup(yd->friends, who))
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3146 return;
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3147
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3148 /* If old and new are the same, we would probably
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3149 * end up deleting the buddy, which would be bad.
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3150 * This might happen because of the charset conversation.
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3151 */
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3152 gpn = yahoo_string_encode(gc, new_group, NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3153 gpo = yahoo_string_encode(gc, old_group, NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3154 if (!strcmp(gpn, gpo)) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3155 g_free(gpn);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3156 g_free(gpo);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3157 return;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3158 }
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3159
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3160 /* Step 1: Add buddy to new group. */
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3161 pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3162 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3163 yahoo_packet_hash(pkt, 7, who);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3164 yahoo_packet_hash(pkt, 65, gpn);
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3165 yahoo_packet_hash(pkt, 14, "");
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3166 yahoo_send_packet(yd, pkt);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3167 yahoo_packet_free(pkt);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3168
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3169 /* Step 2: Remove buddy from old group */
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3170 pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3171 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3172 yahoo_packet_hash(pkt, 7, who);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3173 yahoo_packet_hash(pkt, 65, gpo);
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3174 yahoo_send_packet(yd, pkt);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3175 yahoo_packet_free(pkt);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3176 g_free(gpn);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3177 g_free(gpo);
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3178 }
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3179
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3180 static void yahoo_rename_group(GaimConnection *gc, const char *old_group,
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3181 const char *new_group, GList *whocares)
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3182 {
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3183 struct yahoo_data *yd = gc->proto_data;
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3184 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3185 char *gpn, *gpo;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3186
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3187 gpn = yahoo_string_encode(gc, new_group, NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3188 gpo = yahoo_string_encode(gc, old_group, NULL);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3189 if (!strcmp(gpn, gpo)) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3190 g_free(gpn);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3191 g_free(gpo);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3192 return;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3193 }
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3194
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3195 pkt = yahoo_packet_new(YAHOO_SERVICE_GROUPRENAME, YAHOO_STATUS_AVAILABLE, 0);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3196 yahoo_packet_hash(pkt, 1, gaim_connection_get_display_name(gc));
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3197 yahoo_packet_hash(pkt, 65, gpo);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3198 yahoo_packet_hash(pkt, 67, gpn);
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3199 yahoo_send_packet(yd, pkt);
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3200 yahoo_packet_free(pkt);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3201 g_free(gpn);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3202 g_free(gpo);
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3203 }
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3204
7696
d65c53691a9d [gaim-migrate @ 8341]
Mark Doliner <markdoliner@pidgin.im>
parents: 7675
diff changeset
3205 #if 0
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3206 static gboolean yahoo_has_send_file(GaimConnection *gc, const char *who)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3207 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3208 return TRUE;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3209 }
7696
d65c53691a9d [gaim-migrate @ 8341]
Mark Doliner <markdoliner@pidgin.im>
parents: 7675
diff changeset
3210 #endif
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3211
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3212 static GaimPlugin *my_protocol = NULL;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3213
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3214 static GaimPluginProtocolInfo prpl_info =
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3215 {
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3216 OPT_PROTO_MAIL_CHECK | OPT_PROTO_CHAT_TOPIC,
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3217 NULL, /* user_splits */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3218 NULL, /* protocol_options */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3219 yahoo_list_icon,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3220 yahoo_list_emblems,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3221 yahoo_status_text,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3222 yahoo_tooltip_text,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3223 yahoo_away_states,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3224 yahoo_actions,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3225 yahoo_buddy_menu,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3226 yahoo_c_info,
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3227 yahoo_login,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3228 yahoo_close,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3229 yahoo_send_im,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3230 NULL, /* set info */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3231 yahoo_send_typing,
6514
3de8c6a985ab [gaim-migrate @ 7031]
Nathan Poznick
parents: 6513
diff changeset
3232 yahoo_get_info,
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3233 yahoo_set_away,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3234 NULL, /* set_dir */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3235 NULL, /* get_dir */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3236 NULL, /* dir_search */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3237 yahoo_set_idle,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3238 NULL, /* change_passwd*/
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3239 yahoo_add_buddy,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3240 NULL, /* add_buddies */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3241 yahoo_remove_buddy,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3242 NULL, /*remove_buddies */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3243 NULL, /* add_permit */
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
3244 yahoo_add_deny,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3245 NULL, /* rem_permit */
6760
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
3246 yahoo_rem_deny,
b7078ee3cc54 [gaim-migrate @ 7292]
Jesse Farmer
parents: 6729
diff changeset
3247 yahoo_set_permit_deny,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3248 NULL, /* warn */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3249 yahoo_c_join,
8562
7e73676d1772 [gaim-migrate @ 9306]
Christopher O'Brien <siege@pidgin.im>
parents: 8503
diff changeset
3250 NULL, /* reject chat invite */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3251 yahoo_c_invite,
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3252 yahoo_c_leave,
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3253 NULL, /* chat whisper */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3254 yahoo_c_send,
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3255 yahoo_keepalive,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3256 NULL, /* register_user */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3257 NULL, /* get_cb_info */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3258 NULL, /* get_cb_away */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3259 NULL, /* alias_buddy */
6793
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3260 yahoo_change_buddys_group,
f96cfd6ee8cd [gaim-migrate @ 7332]
Tim Ringenbach <marv@pidgin.im>
parents: 6792
diff changeset
3261 yahoo_rename_group,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3262 NULL, /* buddy_free */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3263 NULL, /* convo_closed */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents: 6695
diff changeset
3264 NULL, /* normalize */
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3265 NULL, /* set_buddy_icon */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3266 NULL, /* void (*remove_group)(GaimConnection *gc, const char *group);*/
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3267 NULL, /* char *(*get_cb_real_name)(GaimConnection *gc, int id, const char *who); */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3268 #if 0
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3269 yahoo_ask_send_file,
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3270 yahoo_send_file,
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3271 yahoo_has_send_file,
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3272 #endif
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3273 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3274 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3275 yahoo_roomlist_get_list,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3276 yahoo_roomlist_cancel,
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8568
diff changeset
3277 yahoo_roomlist_expand_category,
8589
21b3d99bb8e7 [gaim-migrate @ 9340]
Mark Doliner <markdoliner@pidgin.im>
parents: 8586
diff changeset
3278 NULL
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3279 };
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3280
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3281 static GaimPluginInfo info =
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3282 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3283 2, /**< api_version */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3284 GAIM_PLUGIN_PROTOCOL, /**< type */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3285 NULL, /**< ui_requirement */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3286 0, /**< flags */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3287 NULL, /**< dependencies */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3288 GAIM_PRIORITY_DEFAULT, /**< priority */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3289
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3290 "prpl-yahoo", /**< id */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3291 "Yahoo", /**< name */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3292 VERSION, /**< version */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3293 /** summary */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3294 N_("Yahoo Protocol Plugin"),
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3295 /** description */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3296 N_("Yahoo Protocol Plugin"),
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3297 NULL, /**< author */
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
3298 GAIM_WEBSITE, /**< homepage */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3299
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3300 NULL, /**< load */
6513
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
3301 yahoo_unload_plugin, /**< unload */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3302 NULL, /**< destroy */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3303
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3304 NULL, /**< ui_info */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3305 &prpl_info /**< extra_info */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3306 };
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3307
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3308 static void
5920
963bfdefee02 [gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
3309 init_plugin(GaimPlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3310 {
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5590
diff changeset
3311 GaimAccountOption *option;
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3312
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3313 option = gaim_account_option_string_new(_("Pager host"), "server", YAHOO_PAGER_HOST);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3314 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3315
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3316 option = gaim_account_option_int_new(_("Pager port"), "port", YAHOO_PAGER_PORT);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7823
diff changeset
3317 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3318
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3319 option = gaim_account_option_string_new(_("File transfer host"), "xfer_host", YAHOO_XFER_HOST);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3320 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3321
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3322 option = gaim_account_option_int_new(_("File transfer port"), "xfer_port", YAHOO_XFER_PORT);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3323 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents: 7631
diff changeset
3324
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3325 option = gaim_account_option_string_new(_("Chat Room List Url"), "room_list", YAHOO_ROOMLIST_URL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3326 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8087
diff changeset
3327
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3328 my_protocol = plugin;
6513
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
3329
191231aceb3f [gaim-migrate @ 7030]
Tim Ringenbach <marv@pidgin.im>
parents: 6465
diff changeset
3330 yahoo_init_colorht();
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3331 }
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5136
diff changeset
3332
5920
963bfdefee02 [gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
3333 GAIM_INIT_PLUGIN(yahoo, init_plugin, info);

mercurial