src/protocols/yahoo/yahoo.c

Mon, 31 Mar 2003 07:19:46 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Mon, 31 Mar 2003 07:19:46 +0000
changeset 4916
11b8fd3f8ffc
parent 4834
80bc171a5236
child 5002
606fb5c0be41
permissions
-rw-r--r--

[gaim-migrate @ 5250]
Buddy list editing.

Does this work? I don't know; I don't test things. It compiles though.

It probably does work though, because I'm perfect.

So, see, I did really terribly in school last semester (really terribly--
like, why didn't they kick me out terribly) and so I'm working really hard
to do well this semester (and I am so far :)). Anyway, that's why you may
have noticed I'm a bit slow with the development of late. In fact, I would
test and fix this stuff up, but I really need to work on an English paper,
so I figured it'd be best just to commit it as is and let Rob, Nathan, Chip
and the boys work out the kinks. Besides, I've had most of this code written
for weeks already.

Thank you all for your patience.

Oh, so there's now an Edit menu on your buddy list (which makes the minimum
buddy list width wider :-D) and here you'll find things with which to edit
your list and privacy, prefs and accounts. It should all be real intuitive.

Feel free to IM me if you want to talk about my paper.

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 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * 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
9 * the Free Software Foundation; either version 2 of the License, or
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 * (at your option) any later version.
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * GNU General Public License for more details.
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 *
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 *
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
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 #include "config.h"
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #endif
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
27 #ifndef _WIN32
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 #include <netdb.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #include <unistd.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 #include <netinet/in.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #include <arpa/inet.h>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
32 #include <sys/socket.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
33 #else
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
34 #include <winsock.h>
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
35 #endif
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
36
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
37 #include <errno.h>
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #include <string.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 #include <stdlib.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 #include <stdio.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 #include <time.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 #include <sys/stat.h>
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 #include <ctype.h>
4608
c165a90c65fc [gaim-migrate @ 4896]
Nathan Walp <nwalp@pidgin.im>
parents: 4606
diff changeset
44 #include "gaim.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #include "multi.h"
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #include "prpl.h"
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 #include "proxy.h"
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
48 #include "md5.h"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
50 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
51 #include "win32dep.h"
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
52 #endif
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
53
2795
b2e15894ab75 [gaim-migrate @ 2808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2786
diff changeset
54 extern char *yahoo_crypt(char *, char *);
b2e15894ab75 [gaim-migrate @ 2808]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2786
diff changeset
55
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
56 /* for win32 compatability */
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
57 G_MODULE_IMPORT GSList *connections;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
58
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
59 #define YAHOO_DEBUG
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
61 #define USEROPT_MAIL 0
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 #define USEROPT_PAGERHOST 3
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
64 #define YAHOO_PAGER_HOST "scs.yahoo.com"
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65 #define USEROPT_PAGERPORT 4
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 #define YAHOO_PAGER_PORT 5050
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67
3467
94a963c6c817 [gaim-migrate @ 3517]
Sean Egan <seanegan@pidgin.im>
parents: 3466
diff changeset
68 #define YAHOO_PROTO_VER 0x0900
94a963c6c817 [gaim-migrate @ 3517]
Sean Egan <seanegan@pidgin.im>
parents: 3466
diff changeset
69
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
70 enum yahoo_service { /* these are easier to see in hex */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 YAHOO_SERVICE_LOGON = 1,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 YAHOO_SERVICE_LOGOFF,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 YAHOO_SERVICE_ISAWAY,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 YAHOO_SERVICE_ISBACK,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
75 YAHOO_SERVICE_IDLE, /* 5 (placemarker) */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 YAHOO_SERVICE_MESSAGE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 YAHOO_SERVICE_IDACT,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 YAHOO_SERVICE_IDDEACT,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 YAHOO_SERVICE_MAILSTAT,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
80 YAHOO_SERVICE_USERSTAT, /* 0xa */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81 YAHOO_SERVICE_NEWMAIL,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 YAHOO_SERVICE_CHATINVITE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 YAHOO_SERVICE_CALENDAR,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 YAHOO_SERVICE_NEWPERSONALMAIL,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 YAHOO_SERVICE_NEWCONTACT,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
86 YAHOO_SERVICE_ADDIDENT, /* 0x10 */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 YAHOO_SERVICE_ADDIGNORE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 YAHOO_SERVICE_PING,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89 YAHOO_SERVICE_GROUPRENAME,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
90 YAHOO_SERVICE_SYSMESSAGE = 0x14,
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
91 YAHOO_SERVICE_PASSTHROUGH2 = 0x16,
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
92 YAHOO_SERVICE_CONFINVITE = 0x18,
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 YAHOO_SERVICE_CONFLOGON,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 YAHOO_SERVICE_CONFDECLINE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 YAHOO_SERVICE_CONFLOGOFF,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 YAHOO_SERVICE_CONFADDINVITE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 YAHOO_SERVICE_CONFMSG,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 YAHOO_SERVICE_CHATLOGON,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 YAHOO_SERVICE_CHATLOGOFF,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
100 YAHOO_SERVICE_CHATMSG = 0x20,
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
101 YAHOO_SERVICE_GAMELOGON = 0x28,
2786
c281356d8eda [gaim-migrate @ 2799]
brian macke
parents: 2772
diff changeset
102 YAHOO_SERVICE_GAMELOGOFF,
c281356d8eda [gaim-migrate @ 2799]
brian macke
parents: 2772
diff changeset
103 YAHOO_SERVICE_GAMEMSG = 0x2a,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
104 YAHOO_SERVICE_FILETRANSFER = 0x46,
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
105 YAHOO_SERVICE_NOTIFY = 0x4B,
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
106 YAHOO_SERVICE_AUTHRESP = 0x54,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
107 YAHOO_SERVICE_LIST = 0x55,
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
108 YAHOO_SERVICE_AUTH = 0x57,
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
109 YAHOO_SERVICE_ADDBUDDY = 0x83,
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
110 YAHOO_SERVICE_REMBUDDY = 0x84
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111 };
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 enum yahoo_status {
2686
75cfcc12285a [gaim-migrate @ 2699]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2683
diff changeset
114 YAHOO_STATUS_AVAILABLE = 0,
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115 YAHOO_STATUS_BRB,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116 YAHOO_STATUS_BUSY,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 YAHOO_STATUS_NOTATHOME,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 YAHOO_STATUS_NOTATDESK,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119 YAHOO_STATUS_NOTINOFFICE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120 YAHOO_STATUS_ONPHONE,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121 YAHOO_STATUS_ONVACATION,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 YAHOO_STATUS_OUTTOLUNCH,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123 YAHOO_STATUS_STEPPEDOUT,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 YAHOO_STATUS_INVISIBLE = 12,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 YAHOO_STATUS_CUSTOM = 99,
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126 YAHOO_STATUS_IDLE = 999,
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
127 YAHOO_STATUS_OFFLINE = 0x5a55aa56, /* don't ask */
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
128 YAHOO_STATUS_TYPING = 0x16
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 };
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
130 #define YAHOO_STATUS_GAME 0x2 /* Games don't fit into the regular status model */
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 struct yahoo_data {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 int fd;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 guchar *rxqueue;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135 int rxlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136 GHashTable *hash;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
137 GHashTable *games;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 int current_status;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139 gboolean logged_in;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 };
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142 struct yahoo_pair {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 int key;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 char *value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 };
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 struct yahoo_packet {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 guint16 service;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 guint32 status;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150 guint32 id;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 GSList *hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 };
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 #define YAHOO_PACKET_HDRLEN (4 + 2 + 2 + 2 + 2 + 4 + 4)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 static struct yahoo_packet *yahoo_packet_new(enum yahoo_service service, enum yahoo_status status, int id)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 struct yahoo_packet *pkt = g_new0(struct yahoo_packet, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 pkt->service = service;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 pkt->status = status;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 pkt->id = id;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 return pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3427
diff changeset
167 static 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
168 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170 pair->key = key;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 pair->value = g_strdup(value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172 pkt->hash = g_slist_append(pkt->hash, pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
173 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175 static int yahoo_packet_length(struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 GSList *l;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 int len = 0;
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 l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 int tmp = pair->key;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 do {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 tmp /= 10;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 len++;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 } while (tmp);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 len += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 len += strlen(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 len += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 return len;
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
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 /* sometimes i wish prpls could #include things from other prpls. then i could just
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 * use the routines from libfaim and not have to admit to knowing how they work. */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 #define yahoo_put16(buf, data) ( \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 (*(buf) = (u_char)((data)>>8)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 (*((buf)+1) = (u_char)(data)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 2)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 #define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff))
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 #define yahoo_put32(buf, data) ( \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 (*((buf)) = (u_char)((data)>>24)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 (*((buf)+1) = (u_char)((data)>>16)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 (*((buf)+2) = (u_char)((data)>>8)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 (*((buf)+3) = (u_char)(data)&0xff), \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 4)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 #define yahoo_get32(buf) ((((*(buf))<<24)&0xff000000) + \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 (((*((buf)+1))<<16)&0x00ff0000) + \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 (((*((buf)+2))<< 8)&0x0000ff00) + \
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 (((*((buf)+3) )&0x000000ff)))
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 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
217 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 while (pos + 1 < len) {
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
221 char key[64], *value = NULL;
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
222 int accept;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 int x;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 x = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 while (pos + 1 < len) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229 if (data[pos] == 0xc0 && data[pos + 1] == 0x80)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
231 key[x++] = data[pos++];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
233 key[x] = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235 pair->key = strtol(key, NULL, 10);
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
236 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
237
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
238 if (len - pos + 1 <= 0) {
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
239 /* Truncated. Garbage or something. */
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
240 accept = 0;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
241 }
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
242
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
243 if (accept) {
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
244 value = g_malloc(len - pos + 1);
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
245 x = 0;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
246 while (pos + 1 < len) {
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
247 if (data[pos] == 0xc0 && data[pos + 1] == 0x80)
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
248 break;
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
249 value[x++] = data[pos++];
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
250 }
2724
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
251 value[x] = 0;
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
252 pair->value = g_strdup(value);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
253 g_free(value);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
254 pkt->hash = g_slist_append(pkt->hash, pair);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
255 debug_printf("Key: %d \tValue: %s\n", pair->key, pair->value);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
256 } else {
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
257 g_free(pair);
d17b226540d3 [gaim-migrate @ 2737]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2723
diff changeset
258 }
3996
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
259 pos += 2;
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
260
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
261 /* Skip over garbage we've noticed in the mail notifications */
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
262 if (data[0] == '9' && data[pos] == 0x01)
5e58ec8c3b45 [gaim-migrate @ 4191]
Christian Hammond <chipx86@chipx86.com>
parents: 3768
diff changeset
263 pos++;
2681
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 }
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 static void yahoo_packet_write(struct yahoo_packet *pkt, guchar *data)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
274 guchar buf[100];
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 g_snprintf(buf, sizeof(buf), "%d", pair->key);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277 strcpy(data + pos, buf);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 pos += strlen(buf);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279 data[pos++] = 0xc0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 data[pos++] = 0x80;
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 strcpy(data + pos, pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283 pos += strlen(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284 data[pos++] = 0xc0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285 data[pos++] = 0x80;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
287 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
289 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 static void yahoo_packet_dump(guchar *data, int len)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
292 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293 #ifdef YAHOO_DEBUG
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294 int i;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295 for (i = 0; i + 1 < len; i += 2) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
296 if ((i % 16 == 0) && i)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297 debug_printf("\n");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
298 debug_printf("%02x", data[i]);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
299 debug_printf("%02x ", data[i+1]);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
300 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
301 if (i < len)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
302 debug_printf("%02x", data[i]);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303 debug_printf("\n");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 for (i = 0; i < len; i++) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
305 if ((i % 16 == 0) && i)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 debug_printf("\n");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307 if (isprint(data[i]))
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308 debug_printf("%c ", data[i]);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
309 else
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310 debug_printf(". ");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 debug_printf("\n");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 #endif
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
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 static int yahoo_send_packet(struct yahoo_data *yd, struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
318 int pktlen = yahoo_packet_length(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
319 int len = YAHOO_PACKET_HDRLEN + pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
320 int ret;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
321
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
322 guchar *data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
323 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
325 if (yd->fd < 0)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
326 return -1;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
327
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
328 data = g_malloc0(len + 1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
329
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
330 memcpy(data + pos, "YMSG", 4); pos += 4;
3467
94a963c6c817 [gaim-migrate @ 3517]
Sean Egan <seanegan@pidgin.im>
parents: 3466
diff changeset
331 pos += yahoo_put16(data + pos, YAHOO_PROTO_VER);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332 pos += yahoo_put16(data + pos, 0x0000);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333 pos += yahoo_put16(data + pos, pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
334 pos += yahoo_put16(data + pos, pkt->service);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
335 pos += yahoo_put32(data + pos, pkt->status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
336 pos += yahoo_put32(data + pos, pkt->id);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338 yahoo_packet_write(pkt, data + pos);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
339
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
340 yahoo_packet_dump(data, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
341 ret = write(yd->fd, data, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
342 g_free(data);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
343
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
344 return ret;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 static void yahoo_packet_free(struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
348 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
349 while (pkt->hash) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350 struct yahoo_pair *pair = pkt->hash->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
351 g_free(pair->value);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
352 g_free(pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
353 pkt->hash = g_slist_remove(pkt->hash, pair);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
354 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
355 g_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
356 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
357
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
358 static void yahoo_process_status(struct gaim_connection *gc, struct yahoo_packet *pkt)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
359 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
362 char *name = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363 int state = 0;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
364 int gamestate = 0;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
365 char *msg = NULL;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
366
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
368 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
369
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370 switch (pair->key) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
371 case 0: /* we won't actually do anything with this */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
372 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
373 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
374 if (!yd->logged_in) {
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
375 account_online(gc);
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
376 serv_finish_login(gc);
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
377 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", pair->value);
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
378 yd->logged_in = TRUE;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
379
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
380 /* 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
381 *
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
382 * scs.yahoo.com sends you the list before this packet without it being
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
383 * requested
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
384 *
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
385 * do_import(gc, NULL);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
386 * newpkt = yahoo_packet_new(YAHOO_SERVICE_LIST, YAHOO_STATUS_OFFLINE, 0);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
387 * yahoo_send_packet(yd, newpkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
388 * yahoo_packet_free(newpkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
389 */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
390
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
391 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
392 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
393 case 8: /* how many online buddies we have */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
394 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
395 case 7: /* the current buddy */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
396 name = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
397 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
398 case 10: /* state */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
399 state = strtol(pair->value, NULL, 10);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401 case 19: /* custom message */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
402 msg = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
403 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404 case 11: /* i didn't know what this was in the old protocol either */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
406 case 17: /* in chat? */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 break;
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
408 case 13: /* in pager? */
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
409 if (pkt->service == YAHOO_SERVICE_LOGOFF ||
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
410 strtol(pair->value, NULL, 10) == 0) {
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
411 serv_got_update(gc, name, 0, 0, 0, 0, 0);
2807
fe1ea0453890 [gaim-migrate @ 2820]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2805
diff changeset
412 break;
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
413 }
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
414 if (g_hash_table_lookup(yd->games, name))
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
415 gamestate = YAHOO_STATUS_GAME;
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
416 if (state == YAHOO_STATUS_CUSTOM) {
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
417 gpointer val = g_hash_table_lookup(yd->hash, name);
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
418 if (val) {
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
419 g_free(val);
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
420 g_hash_table_insert(yd->hash, name,
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
421 msg ? g_strdup(msg) : g_malloc0(1));
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
422 } else
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
423 g_hash_table_insert(yd->hash, g_strdup(name),
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
424 msg ? g_strdup(msg) : g_malloc0(1));
2771
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
425 }
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
426 if (state == YAHOO_STATUS_AVAILABLE)
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
427 serv_got_update(gc, name, 1, 0, 0, 0, gamestate);
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
428 else
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
429 serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE | gamestate);
2771
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
430 break;
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
431 case 60: /* no clue */
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
432 break;
2979
ea91012810b3 [gaim-migrate @ 2992]
Rob Flynn <gaim@robflynn.com>
parents: 2951
diff changeset
433 case 16: /* Custom error message */
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3193
diff changeset
434 do_error_dialog(pair->value, NULL, GAIM_ERROR);
2951
fa9b438bf678 [gaim-migrate @ 2964]
Rob Flynn <gaim@robflynn.com>
parents: 2918
diff changeset
435 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
436 default:
2805
31c7645db097 [gaim-migrate @ 2818]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2795
diff changeset
437 debug_printf("unknown status key %d\n", pair->key);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
438 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
439 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
440
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
441 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
442 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
443 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
444
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
445 static void yahoo_process_list(struct gaim_connection *gc, struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
448 gboolean export = FALSE;
4775
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
449 struct buddy *b;
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
450 struct group *g;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
453 char **lines;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
454 char **split;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455 char **buddies;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
456 char **tmp, **bud;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
457
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
458 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
459 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
460
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461 if (pair->key != 87)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
462 continue;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
463
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464 lines = g_strsplit(pair->value, "\n", -1);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
465 for (tmp = lines; *tmp; tmp++) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
466 split = g_strsplit(*tmp, ":", 2);
2697
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
467 if (!split)
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
468 continue;
2702
c647b4a9dc62 [gaim-migrate @ 2715]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2697
diff changeset
469 if (!split[0] || !split[1]) {
2697
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
470 g_strfreev(split);
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
471 continue;
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
472 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473 buddies = g_strsplit(split[1], ",", -1);
2697
3dc23ce1223f [gaim-migrate @ 2710]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2688
diff changeset
474 for (bud = buddies; bud && *bud; bud++)
4775
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
475 if (!(b = gaim_find_buddy(gc->account, *bud))) {
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
476 if (!(g = gaim_find_group(split[0]))) {
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
477 g = gaim_group_new(split[0]);
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
478 gaim_blist_add_group(g, NULL);
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
479 }
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
480 b = gaim_buddy_new(gc->account, *bud, NULL);
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
481 gaim_blist_add_buddy(b, g, NULL);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
482 export = TRUE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
483 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
484 g_strfreev(buddies);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
485 g_strfreev(split);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
486 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
487 g_strfreev(lines);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
488 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
489
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
490 if (export)
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
491 gaim_blist_save();
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
492 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
493
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
494 static void yahoo_process_notify(struct gaim_connection *gc, struct yahoo_packet *pkt)
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
495 {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
496 char *msg = NULL;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
497 char *from = NULL;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
498 char *stat = NULL;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
499 char *game = NULL;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
500 GSList *l = pkt->hash;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
501 struct yahoo_data *yd = (struct yahoo_data*) gc->proto_data;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
502 while (l) {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
503 struct yahoo_pair *pair = l->data;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
504 if (pair->key == 4)
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
505 from = pair->value;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
506 if (pair->key == 49)
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
507 msg = pair->value;
3001
9fc89391c8fa [gaim-migrate @ 3014]
Sean Egan <seanegan@pidgin.im>
parents: 2993
diff changeset
508 if (pair->key == 13)
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
509 stat = pair->value;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
510 if (pair->key == 14)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
511 game = pair->value;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
512 l = l->next;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
513 }
3640
870c747e2117 [gaim-migrate @ 3763]
Sean Egan <seanegan@pidgin.im>
parents: 3630
diff changeset
514
870c747e2117 [gaim-migrate @ 3763]
Sean Egan <seanegan@pidgin.im>
parents: 3630
diff changeset
515 if (!msg)
870c747e2117 [gaim-migrate @ 3763]
Sean Egan <seanegan@pidgin.im>
parents: 3630
diff changeset
516 return;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
517
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
518 if (!g_ascii_strncasecmp(msg, "TYPING", strlen("TYPING"))) {
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
519 if (*stat == '1')
3768
bb6cc9d30511 [gaim-migrate @ 3907]
Nathan Walp <nwalp@pidgin.im>
parents: 3720
diff changeset
520 serv_got_typing(gc, from, 0, TYPING);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
521 else
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
522 serv_got_typing_stopped(gc, from);
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
523 } else if (!g_ascii_strncasecmp(msg, "GAME", strlen("GAME"))) {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
524 struct buddy *bud = gaim_find_buddy(gc->account, from);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
525 void *free1=NULL, *free2=NULL;
4201
547da94c5a14 [gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents: 4115
diff changeset
526 if (!bud)
547da94c5a14 [gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents: 4115
diff changeset
527 debug_printf("%s is playing a game, and doesn't want you to know.\n", from);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
528 if (*stat == '1') {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
529 if (g_hash_table_lookup_extended (yd->games, from, free1, free2)) {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
530 g_free(free1);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
531 g_free(free2);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
532 }
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
533 g_hash_table_insert (yd->games, g_strdup(from), g_strdup(game));
3020
121e08802117 [gaim-migrate @ 3033]
Sean Egan <seanegan@pidgin.im>
parents: 3019
diff changeset
534 if (bud)
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
535 serv_got_update(gc, from, 1, 0, 0, 0, bud->uc | YAHOO_STATUS_GAME);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
536 } else {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
537 if (g_hash_table_lookup_extended (yd->games, from, free1, free2)) {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
538 g_free(free1);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
539 g_free(free2);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
540 g_hash_table_remove (yd->games, from);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
541 }
3020
121e08802117 [gaim-migrate @ 3033]
Sean Egan <seanegan@pidgin.im>
parents: 3019
diff changeset
542 if (bud)
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
543 serv_got_update(gc, from, 1, 0, 0, 0, bud->uc & ~YAHOO_STATUS_GAME);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
544 }
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
545 }
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
546 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
547
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
548 static void yahoo_process_message(struct gaim_connection *gc, struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
549 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
550 char *msg = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
551 char *from = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
552 time_t tm = time(NULL);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
553 GSList *l = pkt->hash;
3021
91e6cbdb62b1 [gaim-migrate @ 3034]
Sean Egan <seanegan@pidgin.im>
parents: 3020
diff changeset
554
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
556 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
557 if (pair->key == 4)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
558 from = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
559 if (pair->key == 14)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
560 msg = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
561 if (pair->key == 15)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
562 tm = strtol(pair->value, NULL, 10);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
563 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
564 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
565
3021
91e6cbdb62b1 [gaim-migrate @ 3034]
Sean Egan <seanegan@pidgin.im>
parents: 3020
diff changeset
566 if (pkt->status <= 1 || pkt->status == 5) {
2715
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
567 char *m;
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
568 int i, j;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
569 strip_linefeed(msg);
2715
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
570 m = msg;
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
571 for (i = 0, j = 0; m[i]; i++) {
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
572 if (m[i] == 033) {
2813
efdce60f3acc [gaim-migrate @ 2826]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2807
diff changeset
573 while (m[i] && (m[i] != 'm'))
2715
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
574 i++;
2813
efdce60f3acc [gaim-migrate @ 2826]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2807
diff changeset
575 if (!m[i])
efdce60f3acc [gaim-migrate @ 2826]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2807
diff changeset
576 i--;
2715
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
577 continue;
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
578 }
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
579 msg[j++] = m[i];
ffc250ace3ea [gaim-migrate @ 2728]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2708
diff changeset
580 }
2813
efdce60f3acc [gaim-migrate @ 2826]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2807
diff changeset
581 msg[j] = 0;
3642
707a07e64ea3 [gaim-migrate @ 3766]
Luke Schierer <lschiere@pidgin.im>
parents: 3640
diff changeset
582 serv_got_im(gc, from, g_strdup(msg), 0, tm, -1);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
583 } else if (pkt->status == 2) {
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3193
diff changeset
584 do_error_dialog(_("Your Yahoo! message did not get sent."), NULL, GAIM_ERROR);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
585 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
586 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
587
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
588
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
589 static void yahoo_process_contact(struct gaim_connection *gc, struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
590 {
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
591 struct yahoo_data *yd = gc->proto_data;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
592 char *id = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
593 char *who = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
594 char *msg = NULL;
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
595 char *name = NULL;
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
596 int state = YAHOO_STATUS_AVAILABLE;
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
597 int online = FALSE;
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
598
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
599 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
600
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
601 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
602 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
603 if (pair->key == 1)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
604 id = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
605 else if (pair->key == 3)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
606 who = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
607 else if (pair->key == 14)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
608 msg = pair->value;
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
609 else if (pair->key == 7)
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
610 name = pair->value;
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
611 else if (pair->key == 10)
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
612 state = strtol(pair->value, NULL, 10);
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
613 else if (pair->key == 13)
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
614 online = strtol(pair->value, NULL, 10);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
615 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
616 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
617
2682
49c15f67d4b1 [gaim-migrate @ 2695]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2681
diff changeset
618 if (id)
49c15f67d4b1 [gaim-migrate @ 2695]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2681
diff changeset
619 show_got_added(gc, id, who, NULL, msg);
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
620 if (name) {
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
621 if (state == YAHOO_STATUS_AVAILABLE)
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
622 serv_got_update(gc, name, 1, 0, 0, 0, 0);
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
623 else if (state == YAHOO_STATUS_IDLE)
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
624 serv_got_update(gc, name, 1, 0, 0, time(NULL) - 600, (state << 2));
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
625 else
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
626 serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE);
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
627 if (state == YAHOO_STATUS_CUSTOM) {
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
628 gpointer val = g_hash_table_lookup(yd->hash, name);
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
629 if (val) {
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
630 g_free(val);
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
631 g_hash_table_insert(yd->hash, name,
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
632 msg ? g_strdup(msg) : g_malloc0(1));
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
633 } else
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
634 g_hash_table_insert(yd->hash, g_strdup(name),
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
635 msg ? g_strdup(msg) : g_malloc0(1));
2683
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
636 }
06507dfdd96c [gaim-migrate @ 2696]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2682
diff changeset
637 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
638 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
639
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
640 static void yahoo_process_mail(struct gaim_connection *gc, struct yahoo_packet *pkt)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
641 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
642 char *who = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
643 char *email = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
644 char *subj = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
645 int count = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
646 GSList *l = pkt->hash;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
647
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
648 while (l) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
649 struct yahoo_pair *pair = l->data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
650 if (pair->key == 9)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
651 count = strtol(pair->value, NULL, 10);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
652 else if (pair->key == 43)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
653 who = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
654 else if (pair->key == 42)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
655 email = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
656 else if (pair->key == 18)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
657 subj = pair->value;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
658 l = l->next;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
659 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
660
4001
ec3725a49136 [gaim-migrate @ 4201]
Luke Schierer <lschiere@pidgin.im>
parents: 3996
diff changeset
661 if (who && subj && email && *email) {
2850
783e46199cb4 [gaim-migrate @ 2863]
abiligiri
parents: 2813
diff changeset
662 char *from = g_strdup_printf("%s (%s)", who, email);
783e46199cb4 [gaim-migrate @ 2863]
abiligiri
parents: 2813
diff changeset
663 connection_has_mail(gc, -1, from, subj, "http://mail.yahoo.com/");
783e46199cb4 [gaim-migrate @ 2863]
abiligiri
parents: 2813
diff changeset
664 g_free(from);
4001
ec3725a49136 [gaim-migrate @ 4201]
Luke Schierer <lschiere@pidgin.im>
parents: 3996
diff changeset
665 } else if (count > 0)
2850
783e46199cb4 [gaim-migrate @ 2863]
abiligiri
parents: 2813
diff changeset
666 connection_has_mail(gc, count, NULL, NULL, "http://mail.yahoo.com/");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
667 }
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
668 /* 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
669 char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
670
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
671 /* 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
672 * 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
673 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
674 /* 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
675 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
676 for (; inlen >= 3; inlen -= 3)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
677 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
678 *out++ = base64digits[in[0] >> 2];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
679 *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
680 *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
681 *out++ = base64digits[in[2] & 0x3f];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
682 in += 3;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
683 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
684 if (inlen > 0)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
685 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
686 unsigned char fragment;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
687
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
688 *out++ = base64digits[in[0] >> 2];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
689 fragment = (in[0] << 4) & 0x30;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
690 if (inlen > 1)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
691 fragment |= in[1] >> 4;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
692 *out++ = base64digits[fragment];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
693 *out++ = (inlen < 2) ? '-' : base64digits[(in[1] << 2) & 0x3c];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
694 *out++ = '-';
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
695 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
696 *out = '\0';
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
697 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
698
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
699 static void yahoo_process_auth(struct gaim_connection *gc, struct yahoo_packet *pkt)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
700 {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
701 char *seed = NULL;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
702 char *sn = NULL;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
703 GSList *l = pkt->hash;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
704 struct yahoo_data *yd = gc->proto_data;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
705
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
706 while (l) {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
707 struct yahoo_pair *pair = l->data;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
708 if (pair->key == 94)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
709 seed = pair->value;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
710 if (pair->key == 1)
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
711 sn = pair->value;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
712 l = l->next;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
713 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
714
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
715 if (seed) {
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
716 struct yahoo_packet *pack;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
717
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
718 /* So, Yahoo has stopped supporting its older clients in India, and undoubtedly
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
719 * will soon do so in the rest of the world.
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
720 *
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
721 * The new clients use this authentication method. I warn you in advance, it's
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
722 * bizzare, convoluted, inordinately complicated. It's also no more secure than
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
723 * crypt() was. The only purpose this scheme could serve is to prevent third
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
724 * part clients from connecting to their servers.
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
725 *
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
726 * Sorry, Yahoo.
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
727 */
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
728
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
729 md5_byte_t result[16];
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
730 md5_state_t ctx;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
731 char *crypt_result;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
732 char *password_hash = g_malloc(25);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
733 char *crypt_hash = g_malloc(25);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
734 char *hash_string_p = g_malloc(50 + strlen(sn));
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
735 char *hash_string_c = g_malloc(50 + strlen(sn));
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
736
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
737 char checksum;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
738
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
739 int sv;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
740
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
741 char *result6 = g_malloc(25);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
742 char *result96 = g_malloc(25);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
743
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
744 sv = seed[15];
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
745 sv = sv % 8;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
746
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
747 md5_init(&ctx);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
748 md5_append(&ctx, gc->password, strlen(gc->password));
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
749 md5_finish(&ctx, result);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
750 to_y64(password_hash, result, 16);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
751
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
752 md5_init(&ctx);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
753 crypt_result = yahoo_crypt(gc->password, "$1$_2S43d5f$");
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
754 md5_append(&ctx, crypt_result, strlen(crypt_result));
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
755 md5_finish(&ctx, result);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
756 to_y64(crypt_hash, result, 16);
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
757
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
758 switch (sv) {
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
759 case 1:
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
760 case 6:
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
761 checksum = seed[seed[9] % 16];
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
762 g_snprintf(hash_string_p, strlen(sn) + 50,
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
763 "%c%s%s%s", checksum, gc->username, seed, password_hash);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
764 g_snprintf(hash_string_c, strlen(sn) + 50,
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
765 "%c%s%s%s", checksum, gc->username, seed, crypt_hash);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
766 break;
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
767 case 2:
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
768 case 7:
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
769 checksum = seed[seed[15] % 16];
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
770 g_snprintf(hash_string_p, strlen(sn) + 50,
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
771 "%c%s%s%s", checksum, seed, password_hash, gc->username);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
772 g_snprintf(hash_string_c, strlen(sn) + 50,
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
773 "%c%s%s%s", checksum, seed, crypt_hash, gc->username);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
774 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
775 case 3:
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
776 checksum = seed[seed[1] % 16];
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
777 g_snprintf(hash_string_p, strlen(sn) + 50,
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
778 "%c%s%s%s", checksum, gc->username, password_hash, seed);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
779 g_snprintf(hash_string_c, strlen(sn) + 50,
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
780 "%c%s%s%s", checksum, gc->username, crypt_hash, seed);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
781 break;
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
782 case 4:
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
783 checksum = seed[seed[3] % 16];
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
784 g_snprintf(hash_string_p, strlen(sn) + 50,
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
785 "%c%s%s%s", checksum, password_hash, seed, gc->username);
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
786 g_snprintf(hash_string_c, strlen(sn) + 50,
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
787 "%c%s%s%s", checksum, crypt_hash, seed, gc->username);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
788 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
789 case 0:
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
790 case 5:
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
791 checksum = seed[seed[7] % 16];
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
792 g_snprintf(hash_string_p, strlen(sn) + 50,
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
793 "%c%s%s%s", checksum, password_hash, gc->username, seed);
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
794 g_snprintf(hash_string_c, strlen(sn) + 50,
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
795 "%c%s%s%s", checksum, crypt_hash, gc->username, seed);
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
796 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
797 }
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
798
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
799 md5_init(&ctx);
3157
42016075531b [gaim-migrate @ 3173]
Toby Gray
parents: 3147
diff changeset
800 md5_append(&ctx, hash_string_p, strlen(hash_string_p));
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
801 md5_finish(&ctx, result);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
802 to_y64(result6, result, 16);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
803
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
804 md5_init(&ctx);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
805 md5_append(&ctx, hash_string_c, strlen(hash_string_c));
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
806 md5_finish(&ctx, result);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
807 to_y64(result96, result, 16);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
808
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
809 pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
810 yahoo_packet_hash(pack, 0, gc->username);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
811 yahoo_packet_hash(pack, 6, result6);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
812 yahoo_packet_hash(pack, 96, result96);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
813 yahoo_packet_hash(pack, 1, gc->username);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
814
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
815 yahoo_send_packet(yd, pack);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
816
3523
ec640a5e0b22 [gaim-migrate @ 3596]
Sean Egan <seanegan@pidgin.im>
parents: 3504
diff changeset
817 g_free(result6);
ec640a5e0b22 [gaim-migrate @ 3596]
Sean Egan <seanegan@pidgin.im>
parents: 3504
diff changeset
818 g_free(result96);
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
819 g_free(password_hash);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
820 g_free(crypt_hash);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
821 g_free(hash_string_p);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
822 g_free(hash_string_c);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
823
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
824 yahoo_packet_free(pack);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
825 }
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
826 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
827
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
828 static void yahoo_packet_process(struct gaim_connection *gc, struct yahoo_packet *pkt)
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 switch (pkt->service)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
831 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
832 case YAHOO_SERVICE_LOGON:
2771
8c214f13da39 [gaim-migrate @ 2784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2741
diff changeset
833 case YAHOO_SERVICE_LOGOFF:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
834 case YAHOO_SERVICE_ISAWAY:
2737
f7edb9c3f348 [gaim-migrate @ 2750]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2724
diff changeset
835 case YAHOO_SERVICE_ISBACK:
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
836 case YAHOO_SERVICE_GAMELOGON:
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
837 case YAHOO_SERVICE_GAMELOGOFF:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
838 yahoo_process_status(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
839 break;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
840 case YAHOO_SERVICE_NOTIFY:
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
841 yahoo_process_notify(gc, pkt);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
842 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
843 case YAHOO_SERVICE_MESSAGE:
2786
c281356d8eda [gaim-migrate @ 2799]
brian macke
parents: 2772
diff changeset
844 case YAHOO_SERVICE_GAMEMSG:
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
845 yahoo_process_message(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
846 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
847 case YAHOO_SERVICE_NEWMAIL:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
848 yahoo_process_mail(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
849 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
850 case YAHOO_SERVICE_NEWCONTACT:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
851 yahoo_process_contact(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
852 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
853 case YAHOO_SERVICE_LIST:
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
854 yahoo_process_list(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
855 break;
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
856 case YAHOO_SERVICE_AUTH:
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
857 yahoo_process_auth(gc, pkt);
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
858 break;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
859 default:
2741
a955e690580c [gaim-migrate @ 2754]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2737
diff changeset
860 debug_printf("unhandled service 0x%02x\n", pkt->service);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
861 break;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
862 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
863 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
864
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
865 static void yahoo_pending(gpointer data, gint source, GaimInputCondition cond)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
866 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
867 struct gaim_connection *gc = data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
868 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
869 char buf[1024];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
870 int len;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
871
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
872 len = read(yd->fd, buf, sizeof(buf));
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
873
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
874 if (len <= 0) {
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3035
diff changeset
875 hide_login_progress_error(gc, "Unable to read");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
876 signoff(gc);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
877 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
878 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
879
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
880 yd->rxqueue = g_realloc(yd->rxqueue, len + yd->rxlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
881 memcpy(yd->rxqueue + yd->rxlen, buf, len);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
882 yd->rxlen += len;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
883
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
884 while (1) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
885 struct yahoo_packet *pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
886 int pos = 0;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
887 int pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
888
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
889 if (yd->rxlen < YAHOO_PACKET_HDRLEN)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
890 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
891
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
892 pos += 4; /* YMSG */
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
893 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
894 pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
895
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
896 pktlen = yahoo_get16(yd->rxqueue + pos); pos += 2;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
897 debug_printf("%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
898
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
899 if (yd->rxlen < (YAHOO_PACKET_HDRLEN + pktlen))
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
900 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
901
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
902 yahoo_packet_dump(yd->rxqueue, YAHOO_PACKET_HDRLEN + pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
903
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
904 pkt = yahoo_packet_new(0, 0, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
905
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
906 pkt->service = yahoo_get16(yd->rxqueue + pos); pos += 2;
3021
91e6cbdb62b1 [gaim-migrate @ 3034]
Sean Egan <seanegan@pidgin.im>
parents: 3020
diff changeset
907 pkt->status = yahoo_get32(yd->rxqueue + pos); pos += 4;
2741
a955e690580c [gaim-migrate @ 2754]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2737
diff changeset
908 debug_printf("Yahoo Service: 0x%02x Status: %d\n", pkt->service, pkt->status);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
909 pkt->id = yahoo_get32(yd->rxqueue + pos); pos += 4;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
910
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
911 yahoo_packet_read(pkt, yd->rxqueue + pos, pktlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
912
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
913 yd->rxlen -= YAHOO_PACKET_HDRLEN + pktlen;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
914 if (yd->rxlen) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
915 char *tmp = g_memdup(yd->rxqueue + YAHOO_PACKET_HDRLEN + pktlen, yd->rxlen);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
916 g_free(yd->rxqueue);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
917 yd->rxqueue = tmp;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
918 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
919 g_free(yd->rxqueue);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
920 yd->rxqueue = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
921 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
922
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
923 yahoo_packet_process(gc, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
924
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
925 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
926 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
927 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
928
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
929 static void yahoo_got_connected(gpointer data, gint source, GaimInputCondition cond)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
930 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
931 struct gaim_connection *gc = data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
932 struct yahoo_data *yd;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
933 struct yahoo_packet *pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
934
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
935 if (!g_slist_find(connections, gc)) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
936 close(source);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
937 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
938 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
939
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
940 if (source < 0) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
941 hide_login_progress(gc, "Unable to connect");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
942 signoff(gc);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
943 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
944 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
945
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
946 yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
947 yd->fd = source;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
948
3147
0dd86820c28c [gaim-migrate @ 3163]
Sean Egan <seanegan@pidgin.im>
parents: 3074
diff changeset
949 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, YAHOO_STATUS_AVAILABLE, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
950
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
951 yahoo_packet_hash(pkt, 1, gc->username);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
952 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
953
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
954 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
955
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
956 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
957 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
958
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
959 static void yahoo_login(struct gaim_account *account) {
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
960 struct gaim_connection *gc = new_gaim_conn(account);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
961 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
962
4834
80bc171a5236 [gaim-migrate @ 5159]
Luke Schierer <lschiere@pidgin.im>
parents: 4793
diff changeset
963 set_login_progress(gc, 1, _("Connecting"));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
964
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
965 yd->fd = -1;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
966 yd->hash = g_hash_table_new(g_str_hash, g_str_equal);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
967 yd->games = g_hash_table_new(g_str_hash, g_str_equal);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
968
3193
d2e3cc7c458d [gaim-migrate @ 3210]
Sean Egan <seanegan@pidgin.im>
parents: 3157
diff changeset
969
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
970 if (!g_ascii_strncasecmp(account->proto_opt[USEROPT_PAGERHOST], "cs.yahoo.com", strlen("cs.yahoo.com"))) {
3193
d2e3cc7c458d [gaim-migrate @ 3210]
Sean Egan <seanegan@pidgin.im>
parents: 3157
diff changeset
971 /* Figured out the new auth method -- cs.yahoo.com likes to disconnect on buddy remove and add now */
2951
fa9b438bf678 [gaim-migrate @ 2964]
Rob Flynn <gaim@robflynn.com>
parents: 2918
diff changeset
972 debug_printf("Setting new Yahoo! server.\n");
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
973 g_snprintf(account->proto_opt[USEROPT_PAGERHOST], strlen("scs.yahoo.com") + 1, "scs.yahoo.com");
2951
fa9b438bf678 [gaim-migrate @ 2964]
Rob Flynn <gaim@robflynn.com>
parents: 2918
diff changeset
974 save_prefs();
fa9b438bf678 [gaim-migrate @ 2964]
Rob Flynn <gaim@robflynn.com>
parents: 2918
diff changeset
975 }
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
976
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
977
4634
c4318fc60090 [gaim-migrate @ 4941]
Nathan Walp <nwalp@pidgin.im>
parents: 4608
diff changeset
978 if (proxy_connect(account, account->proto_opt[USEROPT_PAGERHOST][0] ?
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
979 account->proto_opt[USEROPT_PAGERHOST] : YAHOO_PAGER_HOST,
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
980 account->proto_opt[USEROPT_PAGERPORT][0] ?
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
981 atoi(account->proto_opt[USEROPT_PAGERPORT]) : YAHOO_PAGER_PORT,
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
982 yahoo_got_connected, gc) != 0) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
983 hide_login_progress(gc, "Connection problem");
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
984 signoff(gc);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
985 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
986 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
987
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
988 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
989
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
990 static gboolean yahoo_destroy_hash(gpointer key, gpointer val, gpointer data)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
991 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
992 g_free(key);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
993 g_free(val);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
994 return TRUE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
995 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
996
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
997 static void yahoo_close(struct gaim_connection *gc) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
998 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
999 g_hash_table_foreach_remove(yd->hash, yahoo_destroy_hash, NULL);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1000 g_hash_table_destroy(yd->hash);
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1001 g_hash_table_foreach_remove(yd->games, yahoo_destroy_hash, NULL);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1002 g_hash_table_destroy(yd->games);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1003 if (yd->fd >= 0)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1004 close(yd->fd);
3720
dbba62e0d603 [gaim-migrate @ 3853]
Herman Bloggs <herman@bluedigits.com>
parents: 3642
diff changeset
1005
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1006 if (yd->rxqueue)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1007 g_free(yd->rxqueue);
2687
664e22f507cf [gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2686
diff changeset
1008 yd->rxlen = 0;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1009 if (gc->inpa)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1010 gaim_input_remove(gc->inpa);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1011 g_free(yd);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1012 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1013
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
1014 static const char *yahoo_list_icon(struct gaim_account *a, struct buddy *b)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1015 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
1016 return "yahoo";
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1017 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1018
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1019 static void yahoo_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne)
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1020 {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1021 int i = 0;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1022 char *emblems[4] = {NULL,NULL,NULL,NULL};
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1023 if (b->present == 0) {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1024 *se = "offline";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1025 return;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1026 } else {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1027 if ((b->uc >> 2) == YAHOO_STATUS_IDLE)
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1028 emblems[i++] = "idle";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1029 if (b->uc & UC_UNAVAILABLE)
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1030 emblems[i++] = "away";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1031 if (b->uc & YAHOO_STATUS_GAME)
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1032 emblems[i++] = "game";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1033 }
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1034 *se = emblems[0];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1035 *sw = emblems[1];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1036 *nw = emblems[2];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1037 *ne = emblems[3];
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1038 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1039
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1040 static char *yahoo_get_status_string(enum yahoo_status a)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1041 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1042 switch (a) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1043 case YAHOO_STATUS_BRB:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1044 return _("Be Right Back");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1045 case YAHOO_STATUS_BUSY:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1046 return _("Busy");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1047 case YAHOO_STATUS_NOTATHOME:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1048 return _("Not At Home");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1049 case YAHOO_STATUS_NOTATDESK:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1050 return _("Not At Desk");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1051 case YAHOO_STATUS_NOTINOFFICE:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1052 return _("Not In Office");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1053 case YAHOO_STATUS_ONPHONE:
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
1054 return _("On The Phone");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1055 case YAHOO_STATUS_ONVACATION:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1056 return _("On Vacation");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1057 case YAHOO_STATUS_OUTTOLUNCH:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1058 return _("Out To Lunch");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1059 case YAHOO_STATUS_STEPPEDOUT:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1060 return _("Stepped Out");
2873
9e56887eeb06 [gaim-migrate @ 2886]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2856
diff changeset
1061 case YAHOO_STATUS_INVISIBLE:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1062 return _("Invisible");
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
1063 case YAHOO_STATUS_IDLE:
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
1064 return _("Idle");
2879
e417cf7111c4 [gaim-migrate @ 2892]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2878
diff changeset
1065 default:
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1066 return _("Online");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1067 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1068 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1069
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1070 static void yahoo_game(struct gaim_connection *gc, char *name) {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1071 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1072 char *game = g_hash_table_lookup(yd->games, name);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1073 char *t;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1074 char url[256];
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1075
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1076 if (!game)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1077 return;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1078 t = game = g_strdup(strstr(game, "ante?room="));
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1079 while (*t != '\t')
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1080 t++;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1081 *t = 0;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1082 g_snprintf(url, sizeof url, "http://games.yahoo.com/games/%s", game);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1083 open_url(NULL, url);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1084 g_free(game);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1085 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1086
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
1087 static char *yahoo_status_text(struct buddy *b)
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1088 {
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1089 struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data;
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
1090 if (b->uc & UC_UNAVAILABLE) {
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
1091 if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM)
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4731
diff changeset
1092 return g_strdup(yahoo_get_status_string(b->uc >> 2));
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1093 else {
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1094 char *stripped = strip_html(g_hash_table_lookup(yd->hash, b->name));
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1095 if(stripped) {
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1096 char *ret = g_markup_escape_text(stripped, strlen(stripped));
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1097 g_free(stripped);
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1098 return ret;
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1099 }
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1100 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1101 }
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
1102 return NULL;
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1103 }
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1104
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1105 static char *yahoo_tooltip_text(struct buddy *b)
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1106 {
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1107 struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data;
4730
f6ae5bf30171 [gaim-migrate @ 5043]
Sean Egan <seanegan@pidgin.im>
parents: 4729
diff changeset
1108 if (b->uc & UC_UNAVAILABLE) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1109 char *status;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1110 char *ret;
4731
b144de04b1fa [gaim-migrate @ 5044]
Nathan Walp <nwalp@pidgin.im>
parents: 4730
diff changeset
1111 if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM)
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1112 status = g_strdup(yahoo_get_status_string(b->uc >> 2));
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1113 else
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1114 status = strip_html(g_hash_table_lookup(yd->hash, b->name));
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1115 if(status) {
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1116 char *escaped = g_markup_escape_text(status, strlen(status));
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1117 ret = g_strdup_printf(_("<b>Status:</b> %s"), escaped);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1118 g_free(status);
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
1119 g_free(escaped);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1120 return ret;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4732
diff changeset
1121 }
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1122 }
4729
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
1123 return NULL;
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
1124 }
7521e221beb7 [gaim-migrate @ 5042]
Nathan Walp <nwalp@pidgin.im>
parents: 4724
diff changeset
1125
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1126 static GList *yahoo_buddy_menu(struct gaim_connection *gc, char *who)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1127 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1128 GList *m = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1129 struct proto_buddy_menu *pbm;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1130 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
1131 struct buddy *b = gaim_find_buddy(gc->account, who); /* this should never be null. if it is,
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1132 segfault and get the bug report. */
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1133 static char buf2[1024];
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1134
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1135 if (b->uc | YAHOO_STATUS_GAME) {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1136 char *game = g_hash_table_lookup(yd->games, b->name);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1137 char *room;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1138 if (!game)
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1139 return m;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1140 if (game) {
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1141 char *t;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1142 pbm = g_new0(struct proto_buddy_menu, 1);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1143 if (!(room = strstr(game, "&follow="))) /* skip ahead to the url */
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1144 return NULL;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1145 while (*room && *room != '\t') /* skip to the tab */
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1146 room++;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1147 t = room++; /* room as now at the name */
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1148 while (*t != '\n')
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1149 t++; /* replace the \n with a space */
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1150 *t = ' ';
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1151 g_snprintf(buf2, sizeof buf2, "%s", room);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1152 pbm->label = buf2;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1153 pbm->callback = yahoo_game;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1154 pbm->gc = gc;
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1155 m = g_list_append(m, pbm);
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1156 }
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1157 }
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1158
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1159 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1160 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1161
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1162 static void yahoo_act_id(gpointer data, char *entry)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1163 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1164 struct gaim_connection *gc = data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1165 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1166
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1167 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
1168 yahoo_packet_hash(pkt, 3, entry);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1169 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1170 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1171
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1172 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", entry);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1173 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1174
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1175 static void yahoo_show_act_id(struct gaim_connection *gc)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1176 {
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1177 do_prompt_dialog("Activate which ID:", gc->displayname, gc, yahoo_act_id, NULL);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1178 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1179
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1180 static GList *yahoo_actions(struct gaim_connection *gc) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1181 GList *m = NULL;
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1182 struct proto_actions_menu *pam;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1183
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1184 pam = g_new0(struct proto_actions_menu, 1);
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1185 pam->label = _("Activate ID");
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1186 pam->callback = yahoo_show_act_id;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1187 pam->gc = gc;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4201
diff changeset
1188 m = g_list_append(m, pam);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1189
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1190 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1191 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1192
3033
1f078ab46e76 [gaim-migrate @ 3046]
Sean Egan <seanegan@pidgin.im>
parents: 3021
diff changeset
1193 static int yahoo_send_im(struct gaim_connection *gc, char *who, char *what, int len, int flags)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1194 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1195 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1196 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, 0);
3642
707a07e64ea3 [gaim-migrate @ 3766]
Luke Schierer <lschiere@pidgin.im>
parents: 3640
diff changeset
1197 char *msg = g_strdup(what);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1198
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1199 yahoo_packet_hash(pkt, 1, gc->displayname);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1200 yahoo_packet_hash(pkt, 5, who);
3493
22733759ba51 [gaim-migrate @ 3553]
Luke Schierer <lschiere@pidgin.im>
parents: 3467
diff changeset
1201 yahoo_packet_hash(pkt, 14, msg);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1202
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1203 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1204
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1205 yahoo_packet_free(pkt);
3493
22733759ba51 [gaim-migrate @ 3553]
Luke Schierer <lschiere@pidgin.im>
parents: 3467
diff changeset
1206
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1207 return 1;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1208 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1209
3001
9fc89391c8fa [gaim-migrate @ 3014]
Sean Egan <seanegan@pidgin.im>
parents: 2993
diff changeset
1210 int yahoo_send_typing(struct gaim_connection *gc, char *who, int typ)
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1211 {
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1212 struct yahoo_data *yd = gc->proto_data;
3019
ef3dd4b0002a [gaim-migrate @ 3032]
Brian Macke
parents: 3001
diff changeset
1213 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
1214 yahoo_packet_hash(pkt, 49, "TYPING");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1215 yahoo_packet_hash(pkt, 1, gc->displayname);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1216 yahoo_packet_hash(pkt, 14, " ");
3596
94fcf584c358 [gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents: 3572
diff changeset
1217 yahoo_packet_hash(pkt, 13, typ == TYPING ? "1" : "0");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1218 yahoo_packet_hash(pkt, 5, who);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1219 yahoo_packet_hash(pkt, 1002, "1");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1220
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1221 yahoo_send_packet(yd, pkt);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1222
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1223 yahoo_packet_free(pkt);
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1224
3001
9fc89391c8fa [gaim-migrate @ 3014]
Sean Egan <seanegan@pidgin.im>
parents: 2993
diff changeset
1225 return 0;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1226 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1227
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1228 static void yahoo_set_away(struct gaim_connection *gc, char *state, char *msg)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1229 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1230 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1231 struct yahoo_packet *pkt;
2772
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1232 int service;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1233 char s[4];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1234
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1235 if (gc->away) {
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1236 g_free(gc->away);
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1237 gc->away = NULL;
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1238 }
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1239
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1240 if (msg) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1241 yd->current_status = YAHOO_STATUS_CUSTOM;
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1242 gc->away = g_strdup(msg);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1243 } else if (state) {
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1244 gc->away = g_strdup("");
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1245 if (!strcmp(state, _("Available"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1246 yd->current_status = YAHOO_STATUS_AVAILABLE;
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1247 g_free(gc->away);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1248 gc->away = NULL;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1249 } else if (!strcmp(state, _("Be Right Back"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1250 yd->current_status = YAHOO_STATUS_BRB;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1251 } else if (!strcmp(state, _("Busy"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1252 yd->current_status = YAHOO_STATUS_BUSY;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1253 } else if (!strcmp(state, _("Not At Home"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1254 yd->current_status = YAHOO_STATUS_NOTATHOME;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1255 } else if (!strcmp(state, _("Not At Desk"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1256 yd->current_status = YAHOO_STATUS_NOTATDESK;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1257 } else if (!strcmp(state, _("Not In Office"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1258 yd->current_status = YAHOO_STATUS_NOTINOFFICE;
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
1259 } else if (!strcmp(state, _("On The Phone"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1260 yd->current_status = YAHOO_STATUS_ONPHONE;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1261 } else if (!strcmp(state, _("On Vacation"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1262 yd->current_status = YAHOO_STATUS_ONVACATION;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1263 } else if (!strcmp(state, _("Out To Lunch"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1264 yd->current_status = YAHOO_STATUS_OUTTOLUNCH;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1265 } else if (!strcmp(state, _("Stepped Out"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1266 yd->current_status = YAHOO_STATUS_STEPPEDOUT;
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1267 } else if (!strcmp(state, _("Invisible"))) {
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1268 yd->current_status = YAHOO_STATUS_INVISIBLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1269 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1270 if (gc->is_idle) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1271 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1272 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1273 yd->current_status = YAHOO_STATUS_AVAILABLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1274 }
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4044
diff changeset
1275 g_free(gc->away);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1276 gc->away = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1277 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1278 } else if (gc->is_idle) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1279 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1280 } else {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1281 yd->current_status = YAHOO_STATUS_AVAILABLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1282 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1283
2772
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1284 if (yd->current_status == YAHOO_STATUS_AVAILABLE)
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1285 service = YAHOO_SERVICE_ISBACK;
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1286 else
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1287 service = YAHOO_SERVICE_ISAWAY;
f7659670fc0b [gaim-migrate @ 2785]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2771
diff changeset
1288 pkt = yahoo_packet_new(service, yd->current_status, 0);
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1289 g_snprintf(s, sizeof(s), "%d", yd->current_status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1290 yahoo_packet_hash(pkt, 10, s);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1291 if (yd->current_status == YAHOO_STATUS_CUSTOM)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1292 yahoo_packet_hash(pkt, 19, msg);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1293
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1294 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1295 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1296 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1297
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1298 static void yahoo_set_idle(struct gaim_connection *gc, int idle)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1299 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1300 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1301 struct yahoo_packet *pkt = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1302
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1303 if (idle && yd->current_status == YAHOO_STATUS_AVAILABLE) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1304 pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_IDLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1305 yd->current_status = YAHOO_STATUS_IDLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1306 } else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1307 pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1308 yd->current_status = YAHOO_STATUS_AVAILABLE;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1309 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1310
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1311 if (pkt) {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1312 char buf[4];
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1313 g_snprintf(buf, sizeof(buf), "%d", yd->current_status);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1314 yahoo_packet_hash(pkt, 10, buf);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1315 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1316 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1317 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1318 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1319
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1320 static GList *yahoo_away_states(struct gaim_connection *gc)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1321 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1322 GList *m = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1323
4596
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1324 m = g_list_append(m, _("Available"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1325 m = g_list_append(m, _("Be Right Back"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1326 m = g_list_append(m, _("Busy"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1327 m = g_list_append(m, _("Not At Home"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1328 m = g_list_append(m, _("Not At Desk"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1329 m = g_list_append(m, _("Not In Office"));
4606
82c33fac5704 [gaim-migrate @ 4894]
Matthew Smith <matthew@smigs.co.uk>
parents: 4596
diff changeset
1330 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
1331 m = g_list_append(m, _("On Vacation"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1332 m = g_list_append(m, _("Out To Lunch"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1333 m = g_list_append(m, _("Stepped Out"));
64e72bf4ece4 [gaim-migrate @ 4881]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 4491
diff changeset
1334 m = g_list_append(m, _("Invisible"));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1335 m = g_list_append(m, GAIM_AWAY_CUSTOM);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1336
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1337 return m;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1338 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1339
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1340 static void yahoo_keepalive(struct gaim_connection *gc)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1341 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1342 struct yahoo_data *yd = gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1343 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
1344 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1345 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1346 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1347
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3427
diff changeset
1348 static void yahoo_add_buddy(struct gaim_connection *gc, const char *who)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1349 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1350 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1351 struct yahoo_packet *pkt;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1352 struct group *g;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1353 char *group = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1354
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1355 if (!yd->logged_in)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1356 return;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1357
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4634
diff changeset
1358 g = gaim_find_buddys_group(gaim_find_buddy(gc->account, who));
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1359 if (g)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1360 group = g->name;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1361 else
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1362 group = "Buddies";
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1363
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1364 pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1365 yahoo_packet_hash(pkt, 1, gc->displayname);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1366 yahoo_packet_hash(pkt, 7, who);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1367 yahoo_packet_hash(pkt, 65, group);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1368 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1369 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1370 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1371
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1372 static void yahoo_remove_buddy(struct gaim_connection *gc, char *who, char *group)
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1373 {
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1374 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1375
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1376 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1377 yahoo_packet_hash(pkt, 1, gc->displayname);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1378 yahoo_packet_hash(pkt, 7, who);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1379 yahoo_packet_hash(pkt, 65, group);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1380 yahoo_send_packet(yd, pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1381 yahoo_packet_free(pkt);
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1382 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1383
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1384 static struct prpl *my_protocol = NULL;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1385
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
1386 G_MODULE_EXPORT void yahoo_init(struct prpl *ret) {
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1387 struct proto_user_opt *puo;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1388 ret->protocol = PROTO_YAHOO;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1389 ret->options = OPT_PROTO_MAIL_CHECK;
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1390 ret->name = g_strdup("Yahoo");
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1391 ret->login = yahoo_login;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1392 ret->close = yahoo_close;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1393 ret->buddy_menu = yahoo_buddy_menu;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1394 ret->list_icon = yahoo_list_icon;
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4834
diff changeset
1395 ret->list_emblems = yahoo_list_emblems;
4722
f834a9a217c4 [gaim-migrate @ 5034]
Sean Egan <seanegan@pidgin.im>
parents: 4690
diff changeset
1396 ret->status_text = yahoo_status_text;
4724
2c7fae3847c8 [gaim-migrate @ 5037]
Sean Egan <seanegan@pidgin.im>
parents: 4722
diff changeset
1397 ret->tooltip_text = yahoo_tooltip_text;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1398 ret->actions = yahoo_actions;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1399 ret->send_im = yahoo_send_im;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1400 ret->away_states = yahoo_away_states;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1401 ret->set_away = yahoo_set_away;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1402 ret->set_idle = yahoo_set_idle;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1403 ret->keepalive = yahoo_keepalive;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1404 ret->add_buddy = yahoo_add_buddy;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1405 ret->remove_buddy = yahoo_remove_buddy;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2979
diff changeset
1406 ret->send_typing = yahoo_send_typing;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1407
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1408 puo = g_new0(struct proto_user_opt, 1);
4115
7a92554f5800 [gaim-migrate @ 4332]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 4111
diff changeset
1409 puo->label = g_strdup(_("Pager Host:"));
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1410 puo->def = g_strdup(YAHOO_PAGER_HOST);
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1411 puo->pos = USEROPT_PAGERHOST;
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1412 ret->user_opts = g_list_append(ret->user_opts, puo);
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1413
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1414 puo = g_new0(struct proto_user_opt, 1);
4115
7a92554f5800 [gaim-migrate @ 4332]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 4111
diff changeset
1415 puo->label = g_strdup(_("Pager Port:"));
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1416 puo->def = g_strdup("5050");
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1417 puo->pos = USEROPT_PAGERPORT;
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1418 ret->user_opts = g_list_append(ret->user_opts, puo);
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1419
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1420 my_protocol = ret;
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1421 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1422
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1423 #ifndef STATIC
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1424
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3596
diff changeset
1425 G_MODULE_EXPORT void gaim_prpl_init(struct prpl *prpl)
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1426 {
3572
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1427 yahoo_init(prpl);
d07e14aa6f26 [gaim-migrate @ 3670]
Sean Egan <seanegan@pidgin.im>
parents: 3523
diff changeset
1428 prpl->plug->desc.api_version = PLUGIN_API_VERSION;
2681
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1429 }
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1430
73cd94b9e78e [gaim-migrate @ 2694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1431 #endif

mercurial