Thu, 17 Oct 2002 05:06:15 +0000
[gaim-migrate @ 3861]
This is better because Duffman says so, oh yeah!
No, but seriously... before these changes, if you got new email on an
account, but didn't read it, gaim would pop up a little "read yo email,
sucka!" notice every once in a while, because AIM sends you a little
email status thing every once in a while. This should alleviate that
problem (by attempting to keep track of the number of unread emails in
your account).
committer: Mark Doliner <markdoliner@pidgin.im>
| 3453 | 1 | |
| 2086 | 2 | /* |
| 3 | * gaim | |
| 4 | * | |
| 5 | * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 6 | * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx> | |
| 7 | * | |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 | * | |
| 22 | */ | |
| 23 | ||
| 24 | #ifdef HAVE_CONFIG_H | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
25 | #include <config.h> |
| 2086 | 26 | #endif |
| 27 | ||
| 3664 | 28 | #include <sys/types.h> |
| 29 | /*this must happen before sys/socket.h or freebsd won't compile*/ | |
| 30 | ||
| 3630 | 31 | #ifndef _WIN32 |
| 2086 | 32 | #include <netdb.h> |
| 33 | #include <netinet/in.h> | |
| 34 | #include <arpa/inet.h> | |
| 3630 | 35 | #include <sys/socket.h> |
| 36 | #include <unistd.h> | |
| 37 | #endif | |
| 38 | ||
| 39 | #include <errno.h> | |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
40 | #include <ctype.h> |
| 2086 | 41 | #include <string.h> |
| 42 | #include <stdlib.h> | |
| 43 | #include <stdio.h> | |
| 44 | #include <time.h> | |
| 45 | #include <sys/stat.h> | |
| 3630 | 46 | #include <signal.h> |
| 47 | ||
| 2086 | 48 | #include "multi.h" |
| 49 | #include "prpl.h" | |
| 50 | #include "gaim.h" | |
| 51 | #include "aim.h" | |
| 52 | #include "proxy.h" | |
| 53 | ||
| 3630 | 54 | #ifdef _WIN32 |
| 55 | #include "win32dep.h" | |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
56 | #define NOSIGALARM |
| 3630 | 57 | #endif |
| 58 | ||
| 3490 | 59 | #include "pixmaps/protocols/oscar/ab.xpm" |
| 60 | #include "pixmaps/protocols/oscar/admin_icon.xpm" | |
| 61 | #include "pixmaps/protocols/oscar/aol_icon.xpm" | |
| 62 | #include "pixmaps/protocols/oscar/away_icon.xpm" | |
| 63 | #include "pixmaps/protocols/oscar/dt_icon.xpm" | |
| 64 | #include "pixmaps/protocols/oscar/free_icon.xpm" | |
| 65 | #include "pixmaps/protocols/oscar/wireless_icon.xpm" | |
| 2086 | 66 | |
| 3579 | 67 | #include "pixmaps/protocols/icq/gnomeicu-online.xpm" |
| 68 | #include "pixmaps/protocols/icq/gnomeicu-offline.xpm" | |
| 69 | #include "pixmaps/protocols/icq/gnomeicu-away.xpm" | |
| 70 | #include "pixmaps/protocols/icq/gnomeicu-dnd.xpm" | |
| 71 | #include "pixmaps/protocols/icq/gnomeicu-na.xpm" | |
| 72 | #include "pixmaps/protocols/icq/gnomeicu-occ.xpm" | |
| 73 | #include "pixmaps/protocols/icq/gnomeicu-ffc.xpm" | |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
74 | |
| 2086 | 75 | /* constants to identify proto_opts */ |
| 76 | #define USEROPT_AUTH 0 | |
| 77 | #define USEROPT_AUTHPORT 1 | |
| 78 | ||
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
79 | #define UC_AOL 0x02 |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
80 | #define UC_ADMIN 0x04 |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
81 | #define UC_UNCONFIRMED 0x08 |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
82 | #define UC_NORMAL 0x10 |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
83 | #define UC_AB 0x20 |
|
3079
e55c9a9cc4fc
[gaim-migrate @ 3093]
Mark Doliner <markdoliner@pidgin.im>
parents:
3074
diff
changeset
|
84 | #define UC_WIRELESS 0x40 |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
85 | |
| 2086 | 86 | #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" |
| 87 | ||
| 3630 | 88 | /* For win32 compatability */ |
| 89 | G_MODULE_IMPORT GSList *connections; | |
| 90 | G_MODULE_IMPORT int report_idle; | |
| 91 | ||
| 92 | static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | | |
| 93 | AIM_CAPS_IMIMAGE | AIM_CAPS_SENDFILE; | |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
94 | |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
95 | /* Set AIM caps, because Gaim can still do them over ICQ and |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
96 | * Winicq doesn't mind. */ |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
97 | static int caps_icq = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_IMIMAGE; |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
98 | /* static int caps_icq = AIM_CAPS_ICQ; */ |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
99 | /* What does AIM_CAPS_ICQ actually mean? -SE */ |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
100 | |
|
2308
ea03e9136092
[gaim-migrate @ 2318]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2305
diff
changeset
|
101 | static fu8_t gaim_features[] = {0x01, 0x01, 0x01, 0x02}; |
| 2086 | 102 | |
| 103 | struct oscar_data { | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
104 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
105 | aim_conn_t *conn; |
| 2086 | 106 | |
| 107 | guint cnpa; | |
| 108 | guint paspa; | |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
109 | guint emlpa; |
| 2086 | 110 | |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
111 | GSList *create_rooms; |
| 2086 | 112 | |
| 113 | gboolean conf; | |
| 114 | gboolean reqemail; | |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
115 | gboolean setemail; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
116 | char *email; |
| 2979 | 117 | gboolean setnick; |
| 118 | char *newsn; | |
| 2086 | 119 | gboolean chpass; |
| 120 | char *oldp; | |
| 121 | char *newp; | |
| 122 | ||
| 123 | GSList *oscar_chats; | |
| 124 | GSList *direct_ims; | |
| 3630 | 125 | GSList *file_transfers; |
| 2086 | 126 | GSList *hasicons; |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
127 | GHashTable *supports_tn; |
| 2086 | 128 | |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
129 | gboolean killme; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
130 | gboolean icq; |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
131 | GSList *evilhack; |
| 2993 | 132 | |
| 133 | struct { | |
| 134 | guint maxbuddies; /* max users you can watch */ | |
| 135 | guint maxwatchers; /* max users who can watch you */ | |
| 136 | guint maxpermits; /* max users on permit list */ | |
| 137 | guint maxdenies; /* max users on deny list */ | |
| 138 | guint maxsiglen; /* max size (bytes) of profile */ | |
| 139 | guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
| 140 | } rights; | |
| 2086 | 141 | }; |
| 142 | ||
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
143 | struct create_room { |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
144 | char *name; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
145 | int exchange; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
146 | }; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
147 | |
| 2086 | 148 | struct chat_connection { |
| 149 | char *name; | |
| 150 | char *show; /* AOL did something funny to us */ | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
151 | fu16_t exchange; |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
152 | fu16_t instance; |
| 2086 | 153 | int fd; /* this is redundant since we have the conn below */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
154 | aim_conn_t *conn; |
| 2086 | 155 | int inpa; |
| 156 | int id; | |
| 157 | struct gaim_connection *gc; /* i hate this. */ | |
| 158 | struct conversation *cnv; /* bah. */ | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
159 | int maxlen; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
160 | int maxvis; |
| 2086 | 161 | }; |
| 162 | ||
| 163 | struct direct_im { | |
| 164 | struct gaim_connection *gc; | |
| 165 | char name[80]; | |
| 166 | int watcher; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
167 | aim_conn_t *conn; |
| 3008 | 168 | gboolean connected; |
| 2086 | 169 | }; |
| 170 | ||
| 171 | struct ask_direct { | |
| 172 | struct gaim_connection *gc; | |
| 173 | char *sn; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
174 | char ip[64]; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
175 | fu8_t cookie[8]; |
| 2086 | 176 | }; |
| 177 | ||
| 3630 | 178 | struct oscar_file_transfer { |
| 179 | enum { OFT_SENDFILE_IN, OFT_SENDFILE_OUT } type; | |
| 180 | aim_conn_t *conn; | |
| 181 | struct file_transfer *xfer; | |
| 182 | char *sn; | |
| 183 | char ip[64]; | |
| 184 | fu16_t port; | |
| 185 | fu8_t cookie[8]; | |
| 186 | int totsize; | |
| 187 | int filesdone; | |
| 188 | int totfiles; | |
| 189 | int watcher; | |
| 190 | }; | |
| 191 | ||
| 192 | static struct oscar_file_transfer *oft_listening; | |
| 193 | ||
| 2086 | 194 | struct icon_req { |
| 195 | char *user; | |
| 196 | time_t timestamp; | |
| 2196 | 197 | unsigned long length; |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2172
diff
changeset
|
198 | unsigned long checksum; |
| 2086 | 199 | gboolean request; |
| 200 | }; | |
| 201 | ||
| 3453 | 202 | struct channel4_data { |
| 3141 | 203 | struct gaim_connection *gc; |
| 3453 | 204 | gchar *uin; |
| 205 | gchar *nick; | |
| 3141 | 206 | }; |
| 207 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
208 | static struct direct_im *find_direct_im(struct oscar_data *od, const char *who) { |
| 2086 | 209 | GSList *d = od->direct_ims; |
| 210 | char *n = g_strdup(normalize(who)); | |
| 211 | struct direct_im *m = NULL; | |
| 212 | ||
| 213 | while (d) { | |
| 214 | m = (struct direct_im *)d->data; | |
| 215 | if (!strcmp(n, normalize(m->name))) | |
| 216 | break; | |
| 217 | m = NULL; | |
| 218 | d = d->next; | |
| 219 | } | |
| 220 | ||
| 221 | g_free(n); | |
| 222 | return m; | |
| 223 | } | |
| 224 | ||
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
225 | static char *extract_name(const char *name) { |
| 2086 | 226 | char *tmp; |
| 227 | int i, j; | |
| 228 | char *x = strchr(name, '-'); | |
| 229 | if (!x) return NULL; | |
| 230 | x = strchr(++x, '-'); | |
| 231 | if (!x) return NULL; | |
| 232 | tmp = g_strdup(++x); | |
| 233 | ||
| 234 | for (i = 0, j = 0; x[i]; i++) { | |
|
2361
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
235 | char hex[3]; |
|
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
236 | if (x[i] != '%') { |
| 2086 | 237 | tmp[j++] = x[i]; |
|
2361
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
238 | continue; |
| 2086 | 239 | } |
|
2361
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
240 | strncpy(hex, x + ++i, 2); hex[2] = 0; |
|
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
241 | i++; |
|
73a8ac410e85
[gaim-migrate @ 2374]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2357
diff
changeset
|
242 | tmp[j++] = strtol(hex, NULL, 16); |
| 2086 | 243 | } |
| 244 | ||
| 245 | tmp[j] = 0; | |
| 246 | return tmp; | |
| 247 | } | |
| 248 | ||
| 249 | static struct chat_connection *find_oscar_chat(struct gaim_connection *gc, int id) { | |
| 250 | GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; | |
| 251 | struct chat_connection *c = NULL; | |
| 252 | ||
| 253 | while (g) { | |
| 254 | c = (struct chat_connection *)g->data; | |
| 255 | if (c->id == id) | |
| 256 | break; | |
| 257 | g = g->next; | |
| 258 | c = NULL; | |
| 259 | } | |
| 260 | ||
| 261 | return c; | |
| 262 | } | |
| 263 | ||
| 264 | static struct chat_connection *find_oscar_chat_by_conn(struct gaim_connection *gc, | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
265 | aim_conn_t *conn) { |
| 2086 | 266 | GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; |
| 267 | struct chat_connection *c = NULL; | |
| 268 | ||
| 269 | while (g) { | |
| 270 | c = (struct chat_connection *)g->data; | |
| 271 | if (c->conn == conn) | |
| 272 | break; | |
| 273 | g = g->next; | |
| 274 | c = NULL; | |
| 275 | } | |
| 276 | ||
| 277 | return c; | |
| 278 | } | |
| 279 | ||
| 3630 | 280 | /* XXX there must be a better way than this.... -- wtm */ |
| 281 | static struct oscar_file_transfer *find_oft_by_conn(struct gaim_connection *gc, | |
| 282 | aim_conn_t *conn) { | |
| 283 | GSList *g = ((struct oscar_data *)gc->proto_data)->file_transfers; | |
| 284 | struct oscar_file_transfer *f = NULL; | |
| 285 | ||
| 286 | while (g) { | |
| 287 | f = (struct oscar_file_transfer *)g->data; | |
| 288 | if (f->conn == conn) | |
| 289 | break; | |
| 290 | g = g->next; | |
| 291 | f = NULL; | |
| 292 | } | |
| 293 | ||
| 294 | return f; | |
| 295 | } | |
| 296 | ||
| 297 | static struct oscar_file_transfer *find_oft_by_xfer(struct gaim_connection *gc, | |
| 298 | struct file_transfer *xfer) { | |
| 299 | GSList *g = ((struct oscar_data *)gc->proto_data)->file_transfers; | |
| 300 | struct oscar_file_transfer *f = NULL; | |
| 301 | ||
| 302 | while (g) { | |
| 303 | f = (struct oscar_file_transfer *)g->data; | |
| 304 | if (f->xfer == xfer) | |
| 305 | break; | |
| 306 | g = g->next; | |
| 307 | f = NULL; | |
| 308 | } | |
| 309 | ||
| 310 | return f; | |
| 311 | } | |
| 312 | ||
| 313 | static struct oscar_file_transfer *find_oft_by_cookie(struct gaim_connection *gc, | |
| 314 | const char *cookie) { | |
| 315 | GSList *g = ((struct oscar_data *)gc->proto_data)->file_transfers; | |
| 316 | struct oscar_file_transfer *f = NULL; | |
| 317 | ||
| 318 | while (g) { | |
| 319 | f = (struct oscar_file_transfer *)g->data; | |
| 320 | if (!strncmp(f->cookie, cookie, 8)) | |
| 321 | break; | |
| 322 | g = g->next; | |
| 323 | f = NULL; | |
| 324 | } | |
| 325 | ||
| 326 | return f; | |
| 327 | } | |
| 328 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
329 | static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
330 | static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
331 | static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
332 | static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
333 | static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
334 | static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
335 | static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
336 | static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
337 | static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
338 | static int gaim_parse_clientauto (aim_session_t *, aim_frame_t *, ...); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
339 | static int gaim_parse_user_info (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
340 | static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
341 | static int gaim_chatnav_info (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
342 | static int gaim_chat_join (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
343 | static int gaim_chat_leave (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
344 | static int gaim_chat_info_update (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
345 | static int gaim_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
346 | static int gaim_email_parseupdate(aim_session_t *, aim_frame_t *, ...); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
347 | static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
348 | static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
349 | static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
350 | static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
351 | static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
352 | static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
353 | static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
354 | static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
355 | static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
356 | static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
357 | static int conninitdone_email (aim_session_t *, aim_frame_t *, ...); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
358 | static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
359 | static int gaim_parse_mtn (aim_session_t *, aim_frame_t *, ...); |
| 2993 | 360 | static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
361 | static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
362 | static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
363 | static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
364 | static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
365 | static int gaim_memrequest (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
366 | static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
367 | static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
368 | static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
369 | static int gaim_simpleinfo (aim_session_t *, aim_frame_t *, ...); |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
370 | static int gaim_popup (aim_session_t *, aim_frame_t *, ...); |
| 2991 | 371 | static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); |
| 372 | static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); | |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
373 | |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
374 | static int gaim_directim_initiate(aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
375 | static int gaim_directim_incoming(aim_session_t *, aim_frame_t *, ...); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
376 | static int gaim_directim_typing (aim_session_t *, aim_frame_t *, ...); |
| 2993 | 377 | static int gaim_update_ui (aim_session_t *, aim_frame_t *, ...); |
| 2086 | 378 | |
| 3630 | 379 | static int oscar_file_transfer_do(aim_session_t *, aim_frame_t *, ...); |
| 380 | static void oscar_file_transfer_disconnect(aim_session_t *, | |
| 381 | aim_conn_t *); | |
| 382 | static void oscar_cancel_transfer(struct gaim_connection *, | |
| 383 | struct file_transfer *); | |
| 384 | static int oscar_sendfile_request(aim_session_t *sess, | |
| 385 | struct oscar_file_transfer *oft); | |
| 386 | ||
| 2086 | 387 | static char *msgerrreason[] = { |
| 388 | "Invalid error", | |
| 389 | "Invalid SNAC", | |
| 390 | "Rate to host", | |
| 391 | "Rate to client", | |
| 392 | "Not logged in", | |
| 393 | "Service unavailable", | |
| 394 | "Service not defined", | |
| 395 | "Obsolete SNAC", | |
| 396 | "Not supported by host", | |
| 397 | "Not supported by client", | |
| 398 | "Refused by client", | |
| 399 | "Reply too big", | |
| 400 | "Responses lost", | |
| 401 | "Request denied", | |
| 402 | "Busted SNAC payload", | |
| 403 | "Insufficient rights", | |
| 404 | "In local permit/deny", | |
| 405 | "Too evil (sender)", | |
| 406 | "Too evil (receiver)", | |
| 407 | "User temporarily unavailable", | |
| 408 | "No match", | |
| 409 | "List overflow", | |
| 410 | "Request ambiguous", | |
| 411 | "Queue full", | |
| 412 | "Not while on AOL" | |
| 413 | }; | |
| 414 | static int msgerrreasonlen = 25; | |
| 415 | ||
| 3630 | 416 | static void oscar_file_transfer_disconnect(aim_session_t *sess, |
| 417 | aim_conn_t *conn) { | |
| 418 | struct gaim_connection *gc = sess->aux_data; | |
| 419 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 420 | struct oscar_file_transfer *oft = find_oft_by_conn(gc, | |
| 421 | conn); | |
| 422 | ||
| 423 | od->file_transfers = g_slist_remove(od->file_transfers, oft); | |
| 424 | ||
| 425 | if (oft->watcher) { | |
| 426 | gaim_input_remove(oft->watcher); | |
| 427 | oft->watcher = 0; | |
| 428 | } | |
| 429 | ||
| 430 | aim_conn_kill(sess, &conn); | |
| 431 | ||
| 432 | g_free(oft->sn); | |
| 433 | g_free(oft); | |
| 434 | } | |
| 435 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
436 | static void gaim_directim_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
437 | struct gaim_connection *gc = sess->aux_data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
438 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
439 | struct conversation *cnv; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
440 | struct direct_im *dim; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
441 | char *sn; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
442 | char buf[256]; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
443 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
444 | sn = g_strdup(aim_directim_getsn(conn)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
445 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
446 | debug_printf("%s disconnected Direct IM.\n", sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
447 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
448 | dim = find_direct_im(od, sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
449 | od->direct_ims = g_slist_remove(od->direct_ims, dim); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
450 | gaim_input_remove(dim->watcher); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
451 | |
| 3008 | 452 | if (dim->connected) |
| 453 | g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
| 454 | else | |
| 455 | g_snprintf(buf, sizeof buf, _("Direct IM with %s failed"), sn); | |
| 456 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
457 | if ((cnv = find_conversation(sn))) |
|
2856
046ed5e89321
[gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2833
diff
changeset
|
458 | write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time(NULL), -1); |
| 2993 | 459 | update_progress(cnv, 100); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
460 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
461 | g_free(dim); /* I guess? I don't see it anywhere else... -- mid */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
462 | g_free(sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
463 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
464 | return; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
465 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
466 | |
| 2086 | 467 | static void oscar_callback(gpointer data, gint source, |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
468 | GaimInputCondition condition) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
469 | aim_conn_t *conn = (aim_conn_t *)data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
470 | aim_session_t *sess = aim_conn_getsess(conn); |
| 2086 | 471 | struct gaim_connection *gc = sess ? sess->aux_data : NULL; |
| 472 | struct oscar_data *odata; | |
| 473 | ||
| 474 | if (!gc) { | |
| 475 | /* gc is null. we return, else we seg SIGSEG on next line. */ | |
| 476 | debug_printf("oscar callback for closed connection (1).\n"); | |
| 477 | return; | |
| 478 | } | |
| 479 | ||
| 480 | odata = (struct oscar_data *)gc->proto_data; | |
| 481 | ||
| 482 | if (!g_slist_find(connections, gc)) { | |
| 483 | /* oh boy. this is probably bad. i guess the only thing we | |
| 484 | * can really do is return? */ | |
| 485 | debug_printf("oscar callback for closed connection (2).\n"); | |
| 486 | return; | |
| 487 | } | |
| 488 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
489 | if (condition & GAIM_INPUT_READ) { |
| 2086 | 490 | if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) { |
| 491 | debug_printf("got information on rendezvous\n"); | |
| 492 | if (aim_handlerendconnect(odata->sess, conn) < 0) { | |
| 493 | debug_printf(_("connection error (rend)\n")); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
494 | aim_conn_kill(odata->sess, &conn); |
| 2086 | 495 | } |
| 496 | } else { | |
| 497 | if (aim_get_command(odata->sess, conn) >= 0) { | |
| 498 | aim_rxdispatch(odata->sess); | |
| 499 | if (odata->killme) | |
| 500 | signoff(gc); | |
| 501 | } else { | |
| 502 | if ((conn->type == AIM_CONN_TYPE_BOS) || | |
| 503 | !(aim_getconn_type(odata->sess, AIM_CONN_TYPE_BOS))) { | |
| 504 | debug_printf(_("major connection error\n")); | |
|
3074
b6510843df8f
[gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3068
diff
changeset
|
505 | hide_login_progress_error(gc, _("Disconnected.")); |
| 2086 | 506 | signoff(gc); |
| 507 | } else if (conn->type == AIM_CONN_TYPE_CHAT) { | |
| 508 | struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
| 509 | char buf[BUF_LONG]; | |
| 510 | debug_printf("disconnected from chat room %s\n", c->name); | |
| 511 | c->conn = NULL; | |
| 512 | if (c->inpa > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
513 | gaim_input_remove(c->inpa); |
| 2086 | 514 | c->inpa = 0; |
| 515 | c->fd = -1; | |
| 516 | aim_conn_kill(odata->sess, &conn); | |
| 3574 | 517 | snprintf(buf, sizeof(buf), _("You have been disconnected from chat room %s."), c->name); |
| 3427 | 518 | do_error_dialog(buf, NULL, GAIM_ERROR); |
| 2086 | 519 | } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
| 520 | if (odata->cnpa > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
521 | gaim_input_remove(odata->cnpa); |
| 2086 | 522 | odata->cnpa = 0; |
| 523 | debug_printf("removing chatnav input watcher\n"); | |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
524 | while (odata->create_rooms) { |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
525 | struct create_room *cr = odata->create_rooms->data; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
526 | g_free(cr->name); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
527 | odata->create_rooms = |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
528 | g_slist_remove(odata->create_rooms, cr); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
529 | g_free(cr); |
| 3427 | 530 | do_error_dialog(_("Chat is currently unavailable"), NULL, GAIM_ERROR); |
| 2086 | 531 | } |
| 532 | aim_conn_kill(odata->sess, &conn); | |
| 533 | } else if (conn->type == AIM_CONN_TYPE_AUTH) { | |
| 534 | if (odata->paspa > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
535 | gaim_input_remove(odata->paspa); |
| 2086 | 536 | odata->paspa = 0; |
| 537 | debug_printf("removing authconn input watcher\n"); | |
| 538 | aim_conn_kill(odata->sess, &conn); | |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
539 | } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
540 | if (odata->emlpa > 0) |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
541 | gaim_input_remove(odata->emlpa); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
542 | odata->emlpa = 0; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
543 | debug_printf("removing email input watcher\n"); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
544 | aim_conn_kill(odata->sess, &conn); |
| 2086 | 545 | } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
546 | if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
547 | gaim_directim_disconnect(odata->sess, conn); |
| 3630 | 548 | else if (conn->subtype == AIM_CONN_SUBTYPE_OFT_SENDFILE) { |
| 549 | struct oscar_file_transfer *oft = find_oft_by_conn(gc, conn); | |
| 550 | if (oft) { | |
| 551 | transfer_abort(oft->xfer, _("Buddy canceled transfer")); | |
| 552 | } | |
| 553 | oscar_file_transfer_disconnect(odata->sess, conn); | |
| 554 | } | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
555 | else { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
556 | debug_printf("No handler for rendezvous disconnect (%d).\n", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
557 | source); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
558 | } |
| 2086 | 559 | aim_conn_kill(odata->sess, &conn); |
| 560 | } else { | |
| 561 | debug_printf("holy crap! generic connection error! %d\n", | |
| 562 | conn->type); | |
| 563 | aim_conn_kill(odata->sess, &conn); | |
| 564 | } | |
| 565 | } | |
| 566 | } | |
| 567 | } | |
| 568 | } | |
| 569 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
570 | static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
| 2086 | 571 | char *s = g_strdup_vprintf(format, va); |
| 572 | char buf[256]; | |
| 573 | char *t; | |
| 574 | struct gaim_connection *gc = sess->aux_data; | |
| 575 | ||
| 576 | g_snprintf(buf, sizeof(buf), "%s %d: ", gc->username, level); | |
| 577 | t = g_strconcat(buf, s, NULL); | |
| 578 | debug_printf(t); | |
| 579 | if (t[strlen(t)-1] != '\n') | |
| 580 | debug_printf("\n"); | |
| 581 | g_free(t); | |
| 582 | g_free(s); | |
| 583 | } | |
| 584 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
585 | static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 586 | { |
| 587 | struct gaim_connection *gc = data; | |
| 588 | struct oscar_data *odata; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
589 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
590 | aim_conn_t *conn; |
| 2086 | 591 | |
| 592 | if (!g_slist_find(connections, gc)) { | |
| 593 | close(source); | |
| 594 | return; | |
| 595 | } | |
| 596 | ||
| 597 | odata = gc->proto_data; | |
| 598 | sess = odata->sess; | |
| 599 | conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); | |
| 600 | ||
| 601 | if (source < 0) { | |
| 602 | hide_login_progress(gc, _("Couldn't connect to host")); | |
| 603 | signoff(gc); | |
| 604 | return; | |
| 605 | } | |
| 606 | ||
| 607 | aim_conn_completeconnect(sess, conn); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
608 | gc->inpa = gaim_input_add(conn->fd, GAIM_INPUT_READ, |
| 2086 | 609 | oscar_callback, conn); |
| 610 | debug_printf(_("Password sent, waiting for response\n")); | |
| 611 | } | |
| 612 | ||
| 613 | static void oscar_login(struct aim_user *user) { | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
614 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
615 | aim_conn_t *conn; |
| 2086 | 616 | char buf[256]; |
| 617 | struct gaim_connection *gc = new_gaim_conn(user); | |
| 618 | struct oscar_data *odata = gc->proto_data = g_new0(struct oscar_data, 1); | |
| 619 | ||
|
2589
9f90783f8bdd
[gaim-migrate @ 2602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2507
diff
changeset
|
620 | if (isdigit(*user->username)) { |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
621 | odata->icq = TRUE; |
|
2589
9f90783f8bdd
[gaim-migrate @ 2602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2507
diff
changeset
|
622 | /* this is odd but it's necessary for a proper do_import and do_export */ |
|
9f90783f8bdd
[gaim-migrate @ 2602]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2507
diff
changeset
|
623 | gc->protocol = PROTO_ICQ; |
| 3064 | 624 | gc->password[8] = 0; |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
625 | } else { |
|
2590
fecf2ce04325
[gaim-migrate @ 2603]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2589
diff
changeset
|
626 | gc->protocol = PROTO_TOC; |
|
2918
f4efca1781b7
[gaim-migrate @ 2931]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2916
diff
changeset
|
627 | gc->flags |= OPT_CONN_HTML; |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
628 | } |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
629 | odata->supports_tn = g_hash_table_new(g_str_hash, g_str_equal); |
| 2086 | 630 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
631 | sess = g_new0(aim_session_t, 1); |
| 2086 | 632 | |
| 633 | aim_session_init(sess, AIM_SESS_FLAGS_NONBLOCKCONNECT, 0); | |
| 634 | aim_setdebuggingcb(sess, oscar_debug); | |
| 635 | ||
| 636 | /* we need an immediate queue because we don't use a while-loop to | |
| 637 | * see if things need to be sent. */ | |
| 638 | aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); | |
| 639 | odata->sess = sess; | |
| 640 | sess->aux_data = gc; | |
| 641 | ||
| 642 | conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
| 643 | if (conn == NULL) { | |
| 644 | debug_printf(_("internal connection error\n")); | |
| 645 | hide_login_progress(gc, _("Unable to login to AIM")); | |
| 646 | signoff(gc); | |
| 647 | return; | |
| 648 | } | |
| 649 | ||
| 650 | g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); | |
| 651 | set_login_progress(gc, 2, buf); | |
| 652 | ||
| 653 | aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); | |
| 654 | aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
| 655 | ||
| 656 | conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
| 657 | conn->fd = proxy_connect(user->proto_opt[USEROPT_AUTH][0] ? | |
| 658 | user->proto_opt[USEROPT_AUTH] : FAIM_LOGIN_SERVER, | |
| 659 | user->proto_opt[USEROPT_AUTHPORT][0] ? | |
| 660 | atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
| 661 | oscar_login_connect, gc); | |
| 662 | if (conn->fd < 0) { | |
| 663 | hide_login_progress(gc, _("Couldn't connect to host")); | |
| 664 | signoff(gc); | |
| 665 | return; | |
| 666 | } | |
| 667 | aim_request_login(sess, conn, gc->username); | |
| 668 | } | |
| 669 | ||
| 670 | static void oscar_close(struct gaim_connection *gc) { | |
| 671 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 672 | ||
| 673 | while (odata->oscar_chats) { | |
| 674 | struct chat_connection *n = odata->oscar_chats->data; | |
| 675 | if (n->inpa > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
676 | gaim_input_remove(n->inpa); |
| 2086 | 677 | g_free(n->name); |
| 678 | g_free(n->show); | |
| 679 | odata->oscar_chats = g_slist_remove(odata->oscar_chats, n); | |
| 680 | g_free(n); | |
| 681 | } | |
| 682 | while (odata->direct_ims) { | |
| 683 | struct direct_im *n = odata->direct_ims->data; | |
| 684 | if (n->watcher > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
685 | gaim_input_remove(n->watcher); |
| 2086 | 686 | odata->direct_ims = g_slist_remove(odata->direct_ims, n); |
| 687 | g_free(n); | |
| 688 | } | |
| 3630 | 689 | while (odata->file_transfers) { |
| 690 | struct oscar_file_transfer *n = odata->file_transfers->data; | |
| 691 | if (n->watcher > 0) | |
| 692 | gaim_input_remove(n->watcher); | |
| 693 | odata->file_transfers = g_slist_remove(odata->file_transfers, n); | |
| 694 | g_free(n); | |
| 695 | } | |
| 2086 | 696 | while (odata->hasicons) { |
| 697 | struct icon_req *n = odata->hasicons->data; | |
| 698 | g_free(n->user); | |
| 699 | odata->hasicons = g_slist_remove(odata->hasicons, n); | |
| 700 | g_free(n); | |
| 701 | } | |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
702 | g_hash_table_destroy(odata->supports_tn); |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
703 | while (odata->evilhack) { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
704 | g_free(odata->evilhack->data); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
705 | odata->evilhack = g_slist_remove(odata->evilhack, odata->evilhack->data); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
706 | } |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
707 | while (odata->create_rooms) { |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
708 | struct create_room *cr = odata->create_rooms->data; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
709 | g_free(cr->name); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
710 | odata->create_rooms = g_slist_remove(odata->create_rooms, cr); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
711 | g_free(cr); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
712 | } |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
713 | if (odata->email) |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
714 | g_free(odata->email); |
|
2754
1deb656ee517
[gaim-migrate @ 2767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2742
diff
changeset
|
715 | if (odata->newp) |
|
1deb656ee517
[gaim-migrate @ 2767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2742
diff
changeset
|
716 | g_free(odata->newp); |
|
1deb656ee517
[gaim-migrate @ 2767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2742
diff
changeset
|
717 | if (odata->oldp) |
|
1deb656ee517
[gaim-migrate @ 2767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2742
diff
changeset
|
718 | g_free(odata->oldp); |
| 2086 | 719 | if (gc->inpa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
720 | gaim_input_remove(gc->inpa); |
| 2086 | 721 | if (odata->cnpa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
722 | gaim_input_remove(odata->cnpa); |
| 2086 | 723 | if (odata->paspa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
724 | gaim_input_remove(odata->paspa); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
725 | if (odata->emlpa > 0) |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
726 | gaim_input_remove(odata->emlpa); |
| 2086 | 727 | aim_session_kill(odata->sess); |
| 728 | g_free(odata->sess); | |
| 729 | odata->sess = NULL; | |
| 730 | g_free(gc->proto_data); | |
| 731 | gc->proto_data = NULL; | |
| 732 | debug_printf(_("Signed off.\n")); | |
| 733 | } | |
| 734 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
735 | static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
| 2086 | 736 | struct gaim_connection *gc = data; |
| 737 | struct oscar_data *odata; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
738 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
739 | aim_conn_t *bosconn; |
| 2086 | 740 | |
| 741 | if (!g_slist_find(connections, gc)) { | |
| 742 | close(source); | |
| 743 | return; | |
| 744 | } | |
| 745 | ||
| 746 | odata = gc->proto_data; | |
| 747 | sess = odata->sess; | |
| 748 | bosconn = odata->conn; | |
| 749 | ||
| 750 | if (source < 0) { | |
| 751 | hide_login_progress(gc, _("Could Not Connect")); | |
| 752 | signoff(gc); | |
| 753 | return; | |
| 754 | } | |
| 755 | ||
| 756 | aim_conn_completeconnect(sess, bosconn); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
757 | gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, |
| 2086 | 758 | oscar_callback, bosconn); |
| 759 | set_login_progress(gc, 4, _("Connection established, cookie sent")); | |
| 760 | } | |
| 761 | ||
| 3630 | 762 | static void oscar_ask_send_file(struct gaim_connection *gc, char *destsn) { |
| 763 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 764 | struct oscar_file_transfer *oft = oft_listening; | |
| 765 | ||
| 766 | /* Kludge: if we try to send a file to a client that doesn't | |
| 767 | * support it, the BOS server sends us back an error without | |
| 768 | * any information identifying which transfer was aborted. So | |
| 769 | * we only allow one sendfile request at a time, to ensure that | |
| 770 | * the transfer referenced by an error is unambiguous. It's ugly, | |
| 771 | * but what else can we do? -- wtm | |
| 772 | */ | |
| 773 | if (oft) { | |
| 774 | do_error_dialog(_("Sorry, you already have an outgoing transfer pending. Due to limitations of the Oscar protocol, only one outgoing transfer request is permitted at a time."), NULL, GAIM_ERROR); | |
| 775 | } | |
| 776 | else { | |
| 777 | struct oscar_file_transfer *oft = g_new0(struct oscar_file_transfer, | |
| 778 | 1); | |
| 779 | ||
| 780 | oft->type = OFT_SENDFILE_OUT; | |
| 781 | oft->sn = g_strdup(destsn); | |
| 782 | ||
| 783 | od->file_transfers = g_slist_append(od->file_transfers, oft); | |
| 784 | ||
| 785 | oft->xfer = transfer_out_add(gc, oft->sn); | |
| 786 | } | |
| 787 | } | |
| 788 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
789 | static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 790 | va_list ap; |
| 2704 | 791 | struct aim_authresp_info *info; |
| 2086 | 792 | int i; char *host; int port; |
| 793 | struct aim_user *user; | |
| 2704 | 794 | aim_conn_t *bosconn; |
| 2086 | 795 | |
| 796 | struct gaim_connection *gc = sess->aux_data; | |
| 797 | struct oscar_data *od = gc->proto_data; | |
| 798 | user = gc->user; | |
| 799 | port = user->proto_opt[USEROPT_AUTHPORT][0] ? | |
| 800 | atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
| 801 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
802 | va_start(ap, fr); |
| 2704 | 803 | info = va_arg(ap, struct aim_authresp_info *); |
| 2086 | 804 | va_end(ap); |
| 805 | ||
| 2704 | 806 | debug_printf("inside auth_resp (Screen name: %s)\n", info->sn); |
| 807 | ||
| 808 | if (info->errorcode || !info->bosip || !info->cookie) { | |
| 809 | switch (info->errorcode) { | |
| 2086 | 810 | case 0x05: |
| 811 | /* Incorrect nick/password */ | |
| 812 | hide_login_progress(gc, _("Incorrect nickname or password.")); | |
| 813 | plugin_event(event_error, (void *)980, 0, 0, 0); | |
| 814 | break; | |
| 815 | case 0x11: | |
| 816 | /* Suspended account */ | |
| 817 | hide_login_progress(gc, _("Your account is currently suspended.")); | |
| 818 | break; | |
|
3498
3f6ce04ea3ad
[gaim-migrate @ 3561]
Mark Doliner <markdoliner@pidgin.im>
parents:
3490
diff
changeset
|
819 | case 0x14: |
|
3f6ce04ea3ad
[gaim-migrate @ 3561]
Mark Doliner <markdoliner@pidgin.im>
parents:
3490
diff
changeset
|
820 | /* service temporarily unavailable */ |
|
3f6ce04ea3ad
[gaim-migrate @ 3561]
Mark Doliner <markdoliner@pidgin.im>
parents:
3490
diff
changeset
|
821 | hide_login_progress(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); |
|
3f6ce04ea3ad
[gaim-migrate @ 3561]
Mark Doliner <markdoliner@pidgin.im>
parents:
3490
diff
changeset
|
822 | break; |
| 2086 | 823 | case 0x18: |
| 824 | /* connecting too frequently */ | |
| 825 | hide_login_progress(gc, _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); | |
| 826 | plugin_event(event_error, (void *)983, 0, 0, 0); | |
| 827 | break; | |
| 828 | case 0x1c: | |
| 829 | /* client too old */ | |
| 830 | hide_login_progress(gc, _("The client version you are using is too old. Please upgrade at " WEBSITE)); | |
| 831 | plugin_event(event_error, (void *)989, 0, 0, 0); | |
| 832 | break; | |
| 833 | default: | |
| 834 | hide_login_progress(gc, _("Authentication Failed")); | |
| 835 | break; | |
| 836 | } | |
| 2704 | 837 | debug_printf("Login Error Code 0x%04x\n", info->errorcode); |
| 838 | debug_printf("Error URL: %s\n", info->errorurl); | |
| 2086 | 839 | od->killme = TRUE; |
| 840 | return 1; | |
| 841 | } | |
| 842 | ||
| 843 | ||
| 2704 | 844 | debug_printf("Reg status: %d\n", info->regstatus); |
| 845 | if (info->email) { | |
| 846 | debug_printf("Email: %s\n", info->email); | |
| 2086 | 847 | } else { |
| 848 | debug_printf("Email is NULL\n"); | |
| 849 | } | |
| 2704 | 850 | debug_printf("BOSIP: %s\n", info->bosip); |
| 2086 | 851 | debug_printf("Closing auth connection...\n"); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
852 | aim_conn_kill(sess, &fr->conn); |
| 2086 | 853 | |
| 854 | bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
| 855 | if (bosconn == NULL) { | |
| 856 | hide_login_progress(gc, _("Internal Error")); | |
| 857 | od->killme = TRUE; | |
| 858 | return 0; | |
| 859 | } | |
| 860 | ||
| 2675 | 861 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
| 2086 | 862 | aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
| 863 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
| 864 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
| 2993 | 865 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
| 2086 | 866 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
| 867 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
| 868 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
| 869 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
| 870 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
| 871 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
872 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
| 2086 | 873 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
| 874 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
| 875 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
| 876 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
| 877 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
878 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
| 2086 | 879 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_user_info, 0); |
| 880 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); | |
| 881 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_MOTD, gaim_parse_motd, 0); | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
882 | aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
| 2086 | 883 | aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
| 884 | aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
| 885 | aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
| 886 | aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
|
2507
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
887 | aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
888 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSG, gaim_offlinemsg, 0); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
889 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSGCOMPLETE, gaim_offlinemsgdone, 0); |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
890 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
891 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_SIMPLEINFO, gaim_simpleinfo, 0); |
| 2991 | 892 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
| 893 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
| 894 | aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
| 2086 | 895 | |
| 896 | ((struct oscar_data *)gc->proto_data)->conn = bosconn; | |
| 2704 | 897 | for (i = 0; i < (int)strlen(info->bosip); i++) { |
| 898 | if (info->bosip[i] == ':') { | |
| 899 | port = atoi(&(info->bosip[i+1])); | |
| 2086 | 900 | break; |
| 901 | } | |
| 902 | } | |
| 2704 | 903 | host = g_strndup(info->bosip, i); |
| 2086 | 904 | bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
| 905 | bosconn->fd = proxy_connect(host, port, oscar_bos_connect, gc); | |
| 906 | g_free(host); | |
| 907 | if (bosconn->fd < 0) { | |
| 908 | hide_login_progress(gc, _("Could Not Connect")); | |
| 909 | od->killme = TRUE; | |
| 910 | return 0; | |
| 911 | } | |
| 2704 | 912 | aim_sendcookie(sess, bosconn, info->cookie); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
913 | gaim_input_remove(gc->inpa); |
| 2704 | 914 | |
| 2086 | 915 | return 1; |
| 916 | } | |
| 917 | ||
| 918 | struct pieceofcrap { | |
| 919 | struct gaim_connection *gc; | |
| 920 | unsigned long offset; | |
| 921 | unsigned long len; | |
| 922 | char *modname; | |
| 923 | int fd; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
924 | aim_conn_t *conn; |
| 2086 | 925 | unsigned int inpa; |
| 926 | }; | |
| 927 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
928 | static void damn_you(gpointer data, gint source, GaimInputCondition c) |
| 2086 | 929 | { |
| 930 | struct pieceofcrap *pos = data; | |
| 931 | struct oscar_data *od = pos->gc->proto_data; | |
| 932 | char in = '\0'; | |
| 933 | int x = 0; | |
| 934 | unsigned char m[17]; | |
| 935 | ||
| 936 | while (read(pos->fd, &in, 1) == 1) { | |
| 937 | if (in == '\n') | |
| 938 | x++; | |
| 939 | else if (in != '\r') | |
| 940 | x = 0; | |
| 941 | if (x == 2) | |
| 942 | break; | |
| 943 | in = '\0'; | |
| 944 | } | |
| 945 | if (in != '\n') { | |
| 3427 | 946 | do_error_dialog(_("Gaim was Unable to get a valid AIM login hash."), |
| 947 | _("You may be disconnected shortly. You may want to use TOC until " | |
| 948 | "this is fixed. Check " WEBSITE " for updates."), GAIM_WARNING); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
949 | gaim_input_remove(pos->inpa); |
| 2086 | 950 | close(pos->fd); |
| 951 | g_free(pos); | |
| 952 | return; | |
| 953 | } | |
| 954 | read(pos->fd, m, 16); | |
| 955 | m[16] = '\0'; | |
| 956 | debug_printf("Sending hash: "); | |
| 957 | for (x = 0; x < 16; x++) | |
| 958 | debug_printf("%02x ", (unsigned char)m[x]); | |
| 959 | debug_printf("\n"); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
960 | gaim_input_remove(pos->inpa); |
| 2086 | 961 | close(pos->fd); |
| 962 | aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
| 963 | g_free(pos); | |
| 964 | } | |
| 965 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
966 | static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
| 2086 | 967 | struct pieceofcrap *pos = data; |
| 968 | char buf[BUF_LONG]; | |
| 969 | ||
| 970 | if (source < 0) { | |
| 3427 | 971 | do_error_dialog(_("Gaim was Unable to get a valid AIM login hash."), |
| 972 | _("You may be disconnected shortly. You may want to use TOC until " | |
| 973 | "this is fixed. Check " WEBSITE " for updates."), GAIM_WARNING); | |
| 2086 | 974 | if (pos->modname) |
| 975 | g_free(pos->modname); | |
| 976 | g_free(pos); | |
| 977 | return; | |
| 978 | } | |
| 979 | ||
| 980 | g_snprintf(buf, sizeof(buf), "GET " AIMHASHDATA | |
| 981 | "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", | |
| 982 | pos->offset, pos->len, pos->modname ? pos->modname : ""); | |
| 983 | write(pos->fd, buf, strlen(buf)); | |
| 984 | if (pos->modname) | |
| 985 | g_free(pos->modname); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
986 | pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
| 2086 | 987 | return; |
| 988 | } | |
| 989 | ||
| 990 | /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
| 991 | #define AIM_MAX_FILE_SIZE 98304 | |
| 992 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
993 | int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 994 | va_list ap; |
| 995 | struct pieceofcrap *pos; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
996 | fu32_t offset, len; |
| 2086 | 997 | char *modname; |
| 998 | int fd; | |
| 999 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1000 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1001 | offset = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1002 | len = (fu32_t)va_arg(ap, unsigned long); |
| 2086 | 1003 | modname = va_arg(ap, char *); |
| 1004 | va_end(ap); | |
| 1005 | ||
| 1006 | debug_printf("offset: %d, len: %d, file: %s\n", offset, len, modname ? modname : "aim.exe"); | |
| 1007 | if (len == 0) { | |
| 1008 | debug_printf("len is 0, hashing NULL\n"); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1009 | aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
| 2086 | 1010 | AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
| 1011 | return 1; | |
| 1012 | } | |
| 1013 | /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
| 1014 | if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
| 1015 | char *buf; | |
| 1016 | int i = 8; | |
| 1017 | if (modname) | |
| 1018 | i += strlen(modname); | |
| 1019 | buf = g_malloc(i); | |
| 1020 | i = 0; | |
| 1021 | if (modname) { | |
| 1022 | memcpy(buf, modname, strlen(modname)); | |
| 1023 | i += strlen(modname); | |
| 1024 | } | |
| 1025 | buf[i++] = offset & 0xff; | |
| 1026 | buf[i++] = (offset >> 8) & 0xff; | |
| 1027 | buf[i++] = (offset >> 16) & 0xff; | |
| 1028 | buf[i++] = (offset >> 24) & 0xff; | |
| 1029 | buf[i++] = len & 0xff; | |
| 1030 | buf[i++] = (len >> 8) & 0xff; | |
| 1031 | buf[i++] = (len >> 16) & 0xff; | |
| 1032 | buf[i++] = (len >> 24) & 0xff; | |
| 1033 | debug_printf("len + offset is invalid, hashing request\n"); | |
| 1034 | aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); | |
| 1035 | g_free(buf); | |
| 1036 | return 1; | |
| 1037 | } | |
| 1038 | */ | |
| 1039 | ||
| 1040 | pos = g_new0(struct pieceofcrap, 1); | |
| 1041 | pos->gc = sess->aux_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1042 | pos->conn = fr->conn; |
| 2086 | 1043 | |
| 1044 | pos->offset = offset; | |
| 1045 | pos->len = len; | |
| 1046 | pos->modname = modname ? g_strdup(modname) : NULL; | |
| 1047 | ||
| 1048 | fd = proxy_connect("gaim.sourceforge.net", 80, straight_to_hell, pos); | |
| 1049 | if (fd < 0) { | |
| 1050 | if (pos->modname) | |
| 1051 | g_free(pos->modname); | |
| 1052 | g_free(pos); | |
| 3427 | 1053 | do_error_dialog(_("Gaim was Unable to get valid login hash."), |
| 1054 | _("You may be disconnected shortly. You may want to use TOC until " | |
| 1055 | "this is fixed. Check " WEBSITE " for updates."), GAIM_WARNING); | |
| 2086 | 1056 | } |
| 1057 | pos->fd = fd; | |
| 1058 | ||
| 1059 | return 1; | |
| 1060 | } | |
| 1061 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1062 | static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 1063 | char *key; |
| 1064 | va_list ap; | |
| 1065 | struct gaim_connection *gc = sess->aux_data; | |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1066 | struct oscar_data *odata = gc->proto_data; |
| 2086 | 1067 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1068 | va_start(ap, fr); |
| 2086 | 1069 | key = va_arg(ap, char *); |
| 1070 | va_end(ap); | |
| 1071 | ||
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1072 | if (odata->icq) { |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1073 | struct client_info_s info = CLIENTINFO_ICQ_KNOWNGOOD; |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1074 | aim_send_login(sess, fr->conn, gc->username, gc->password, &info, key); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1075 | } else { |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1076 | #if 0 |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1077 | struct client_info_s info = {"gaim", 4, 1, 2010, "us", "en", 0x0004, 0x0000, 0x04b}; |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1078 | #endif |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1079 | struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1080 | aim_send_login(sess, fr->conn, gc->username, gc->password, &info, key); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
1081 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1082 | |
| 2086 | 1083 | return 1; |
| 1084 | } | |
| 1085 | ||
| 2675 | 1086 | static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2647 | 1087 | struct gaim_connection *gc = sess->aux_data; |
| 1088 | struct chat_connection *chatcon; | |
| 1089 | static int id = 1; | |
| 1090 | ||
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1091 | aim_conn_addhandler(sess, fr->conn, 0x000e, 0x0001, gaim_parse_genericerr, 0); |
| 2675 | 1092 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERJOIN, gaim_chat_join, 0); |
| 1093 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERLEAVE, gaim_chat_leave, 0); | |
| 1094 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_ROOMINFOUPDATE, gaim_chat_info_update, 0); | |
| 1095 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_chat_incoming_msg, 0); | |
| 1096 | ||
| 2672 | 1097 | aim_clientready(sess, fr->conn); |
| 2675 | 1098 | |
| 2647 | 1099 | chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
| 1100 | chatcon->id = id; | |
| 1101 | chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
| 1102 | ||
| 1103 | return 1; | |
| 1104 | } | |
| 1105 | ||
| 2675 | 1106 | static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 1107 | ||
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1108 | aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
| 2647 | 1109 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
| 2675 | 1110 | |
| 1111 | aim_clientready(sess, fr->conn); | |
| 1112 | ||
| 1113 | aim_chatnav_reqrights(sess, fr->conn); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1114 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1115 | return 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1116 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1117 | |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1118 | static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1119 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1120 | aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1121 | aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1122 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1123 | aim_email_sendcookies(sess, fr->conn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1124 | aim_email_activate(sess, fr->conn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1125 | aim_clientready(sess, fr->conn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1126 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1127 | return 1; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1128 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1129 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1130 | static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
| 2086 | 1131 | struct gaim_connection *gc = data; |
| 1132 | struct oscar_data *odata; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1133 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1134 | aim_conn_t *tstconn; |
| 2086 | 1135 | |
| 1136 | if (!g_slist_find(connections, gc)) { | |
| 1137 | close(source); | |
| 1138 | return; | |
| 1139 | } | |
| 1140 | ||
| 1141 | odata = gc->proto_data; | |
| 1142 | sess = odata->sess; | |
| 1143 | tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); | |
| 1144 | ||
| 1145 | if (source < 0) { | |
| 1146 | aim_conn_kill(sess, &tstconn); | |
| 1147 | debug_printf("unable to connect to chatnav server\n"); | |
| 1148 | return; | |
| 1149 | } | |
| 1150 | ||
| 1151 | aim_conn_completeconnect(sess, tstconn); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1152 | odata->cnpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1153 | oscar_callback, tstconn); |
| 2086 | 1154 | debug_printf("chatnav: connected\n"); |
| 1155 | } | |
| 1156 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1157 | static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 1158 | { |
| 1159 | struct gaim_connection *gc = data; | |
| 1160 | struct oscar_data *odata; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1161 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1162 | aim_conn_t *tstconn; |
| 2086 | 1163 | |
| 1164 | if (!g_slist_find(connections, gc)) { | |
| 1165 | close(source); | |
| 1166 | return; | |
| 1167 | } | |
| 1168 | ||
| 1169 | odata = gc->proto_data; | |
| 1170 | sess = odata->sess; | |
| 1171 | tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); | |
| 1172 | ||
| 1173 | if (source < 0) { | |
| 1174 | aim_conn_kill(sess, &tstconn); | |
| 1175 | debug_printf("unable to connect to authorizer\n"); | |
| 1176 | return; | |
| 1177 | } | |
| 1178 | ||
| 1179 | aim_conn_completeconnect(sess, tstconn); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1180 | odata->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, |
| 2086 | 1181 | oscar_callback, tstconn); |
| 1182 | debug_printf("chatnav: connected\n"); | |
| 1183 | } | |
| 1184 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1185 | static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 1186 | { |
| 1187 | struct chat_connection *ccon = data; | |
| 1188 | struct gaim_connection *gc = ccon->gc; | |
| 1189 | struct oscar_data *odata; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1190 | aim_session_t *sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1191 | aim_conn_t *tstconn; |
| 2086 | 1192 | |
| 1193 | if (!g_slist_find(connections, gc)) { | |
| 1194 | close(source); | |
| 1195 | g_free(ccon->show); | |
| 1196 | g_free(ccon->name); | |
| 1197 | g_free(ccon); | |
| 1198 | return; | |
| 1199 | } | |
| 1200 | ||
| 1201 | odata = gc->proto_data; | |
| 1202 | sess = odata->sess; | |
| 1203 | tstconn = ccon->conn; | |
| 1204 | ||
| 1205 | if (source < 0) { | |
| 1206 | aim_conn_kill(sess, &tstconn); | |
| 1207 | g_free(ccon->show); | |
| 1208 | g_free(ccon->name); | |
| 1209 | g_free(ccon); | |
| 1210 | return; | |
| 1211 | } | |
| 1212 | ||
| 1213 | aim_conn_completeconnect(sess, ccon->conn); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1214 | ccon->inpa = gaim_input_add(tstconn->fd, |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1215 | GAIM_INPUT_READ, |
| 2086 | 1216 | oscar_callback, tstconn); |
| 1217 | odata->oscar_chats = g_slist_append(odata->oscar_chats, ccon); | |
| 1218 | } | |
| 1219 | ||
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1220 | static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1221 | struct gaim_connection *gc = data; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1222 | struct oscar_data *odata; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1223 | aim_session_t *sess; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1224 | aim_conn_t *tstconn; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1225 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1226 | if (!g_slist_find(connections, gc)) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1227 | close(source); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1228 | return; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1229 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1230 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1231 | odata = gc->proto_data; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1232 | sess = odata->sess; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1233 | tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1234 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1235 | if (source < 0) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1236 | aim_conn_kill(sess, &tstconn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1237 | debug_printf("unable to connect to email server\n"); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1238 | return; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1239 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1240 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1241 | aim_conn_completeconnect(sess, tstconn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1242 | odata->emlpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1243 | debug_printf("email: connected\n"); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1244 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1245 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1246 | /* Hrmph. I don't know how to make this look better. --mid */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1247 | static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 1248 | va_list ap; |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1249 | struct aim_redirect_data *redir; |
| 2086 | 1250 | struct gaim_connection *gc = sess->aux_data; |
| 1251 | struct aim_user *user = gc->user; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1252 | aim_conn_t *tstconn; |
| 2086 | 1253 | int i; |
| 1254 | char *host; | |
| 1255 | int port; | |
| 1256 | ||
| 1257 | port = user->proto_opt[USEROPT_AUTHPORT][0] ? | |
| 1258 | atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
| 1259 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1260 | va_start(ap, fr); |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1261 | redir = va_arg(ap, struct aim_redirect_data *); |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1262 | va_end(ap); |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1263 | |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1264 | for (i = 0; i < (int)strlen(redir->ip); i++) { |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1265 | if (redir->ip[i] == ':') { |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1266 | port = atoi(&(redir->ip[i+1])); |
| 2086 | 1267 | break; |
| 1268 | } | |
| 1269 | } | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1270 | host = g_strndup(redir->ip, i); |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1271 | |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1272 | switch(redir->group) { |
| 2086 | 1273 | case 0x7: /* Authorizer */ |
| 1274 | debug_printf("Reconnecting with authorizor...\n"); | |
| 1275 | tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
| 1276 | if (tstconn == NULL) { | |
| 1277 | debug_printf("unable to reconnect with authorizer\n"); | |
| 1278 | g_free(host); | |
| 1279 | return 1; | |
| 1280 | } | |
| 2675 | 1281 | aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
| 2086 | 1282 | aim_conn_addhandler(sess, tstconn, 0x0007, 0x0003, gaim_info_change, 0); |
| 1283 | aim_conn_addhandler(sess, tstconn, 0x0007, 0x0005, gaim_info_change, 0); | |
| 1284 | aim_conn_addhandler(sess, tstconn, 0x0007, 0x0007, gaim_account_confirm, 0); | |
| 1285 | ||
| 1286 | tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
| 1287 | tstconn->fd = proxy_connect(host, port, oscar_auth_connect, gc); | |
| 1288 | if (tstconn->fd < 0) { | |
| 1289 | aim_conn_kill(sess, &tstconn); | |
| 1290 | debug_printf("unable to reconnect with authorizer\n"); | |
| 1291 | g_free(host); | |
| 1292 | return 1; | |
| 1293 | } | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1294 | aim_sendcookie(sess, tstconn, redir->cookie); |
| 2086 | 1295 | break; |
| 1296 | case 0xd: /* ChatNav */ | |
| 1297 | tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
| 1298 | if (tstconn == NULL) { | |
| 1299 | debug_printf("unable to connect to chatnav server\n"); | |
| 1300 | g_free(host); | |
| 1301 | return 1; | |
| 1302 | } | |
| 2675 | 1303 | aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
| 2086 | 1304 | |
| 1305 | tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
| 1306 | tstconn->fd = proxy_connect(host, port, oscar_chatnav_connect, gc); | |
| 1307 | if (tstconn->fd < 0) { | |
| 1308 | aim_conn_kill(sess, &tstconn); | |
| 1309 | debug_printf("unable to connect to chatnav server\n"); | |
| 1310 | g_free(host); | |
| 1311 | return 1; | |
| 1312 | } | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1313 | aim_sendcookie(sess, tstconn, redir->cookie); |
| 2086 | 1314 | break; |
| 1315 | case 0xe: /* Chat */ | |
| 1316 | { | |
| 1317 | struct chat_connection *ccon; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1318 | |
| 2086 | 1319 | tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
| 1320 | if (tstconn == NULL) { | |
| 1321 | debug_printf("unable to connect to chat server\n"); | |
| 1322 | g_free(host); | |
| 1323 | return 1; | |
| 1324 | } | |
| 1325 | ||
| 2675 | 1326 | aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
| 1327 | ||
| 2086 | 1328 | ccon = g_new0(struct chat_connection, 1); |
| 1329 | ccon->conn = tstconn; | |
| 1330 | ccon->gc = gc; | |
| 1331 | ccon->fd = -1; | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1332 | ccon->name = g_strdup(redir->chat.room); |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1333 | ccon->exchange = redir->chat.exchange; |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1334 | ccon->instance = redir->chat.instance; |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1335 | ccon->show = extract_name(redir->chat.room); |
| 2086 | 1336 | |
| 1337 | ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
| 1338 | ccon->conn->fd = proxy_connect(host, port, oscar_chat_connect, ccon); | |
| 1339 | if (ccon->conn->fd < 0) { | |
| 1340 | aim_conn_kill(sess, &tstconn); | |
| 1341 | debug_printf("unable to connect to chat server\n"); | |
| 1342 | g_free(host); | |
| 1343 | g_free(ccon->show); | |
| 1344 | g_free(ccon->name); | |
| 1345 | g_free(ccon); | |
| 1346 | return 1; | |
| 1347 | } | |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1348 | aim_sendcookie(sess, tstconn, redir->cookie); |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1349 | debug_printf("Connected to chat room %s exchange %d\n", ccon->name, ccon->exchange); |
| 2086 | 1350 | } |
| 1351 | break; | |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1352 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1353 | case 0x0018: { /* email */ |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1354 | if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1355 | debug_printf("unable to connect to email server\n"); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1356 | g_free(host); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1357 | return 1; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1358 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1359 | aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1360 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1361 | tstconn->status |= AIM_CONN_STATUS_INPROGRESS; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1362 | tstconn->fd = proxy_connect(host, port, oscar_email_connect, gc); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1363 | if (tstconn->fd < 0) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1364 | aim_conn_kill(sess, &tstconn); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1365 | debug_printf("unable to connect to email server\n"); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1366 | g_free(host); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1367 | return 1; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1368 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1369 | aim_sendcookie(sess, tstconn, redir->cookie); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1370 | } break; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
1371 | |
| 2086 | 1372 | default: /* huh? */ |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1373 | debug_printf("got redirect for unknown service 0x%04x\n", redir->group); |
| 2086 | 1374 | break; |
| 1375 | } | |
| 1376 | ||
| 1377 | g_free(host); | |
| 1378 | return 1; | |
| 1379 | } | |
| 1380 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1381 | static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 1382 | struct gaim_connection *gc = sess->aux_data; |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
1383 | struct oscar_data *od = gc->proto_data; |
| 2993 | 1384 | aim_userinfo_t *info; |
| 1385 | time_t time_idle = 0, signon = 0; | |
| 1386 | int type = 0; | |
| 1387 | int caps = 0; | |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1388 | char *tmp; |
| 2086 | 1389 | |
| 1390 | va_list ap; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1391 | va_start(ap, fr); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
1392 | info = va_arg(ap, aim_userinfo_t *); |
| 2086 | 1393 | va_end(ap); |
| 1394 | ||
| 2993 | 1395 | if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
| 1396 | caps = info->capabilities; | |
| 3267 | 1397 | if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
| 1398 | type |= UC_AB; | |
| 1399 | ||
| 1400 | if ((!od->icq) && (info->present & AIM_USERINFO_PRESENT_FLAGS)) { | |
| 1401 | if (info->flags & AIM_FLAG_UNCONFIRMED) | |
| 1402 | type |= UC_UNCONFIRMED; | |
| 1403 | if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
| 1404 | type |= UC_ADMIN; | |
| 1405 | if (info->flags & AIM_FLAG_AOL) | |
| 1406 | type |= UC_AOL; | |
| 1407 | if (info->flags & AIM_FLAG_FREE) | |
| 1408 | type |= UC_NORMAL; | |
| 1409 | if (info->flags & AIM_FLAG_AWAY) | |
| 1410 | type |= UC_UNAVAILABLE; | |
| 1411 | if (info->flags & AIM_FLAG_WIRELESS) | |
| 1412 | type |= UC_WIRELESS; | |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
1413 | } |
| 2993 | 1414 | if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
1415 | type = (info->icqinfo.status << 16); |
| 3013 | 1416 | if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
| 1417 | (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
| 2993 | 1418 | type |= UC_UNAVAILABLE; |
| 3013 | 1419 | } |
| 2993 | 1420 | } |
| 1421 | ||
| 1422 | if (caps & AIM_CAPS_ICQ) | |
| 1423 | caps ^= AIM_CAPS_ICQ; | |
| 1424 | ||
| 1425 | if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
| 2086 | 1426 | time(&time_idle); |
| 1427 | time_idle -= info->idletime*60; | |
| 2993 | 1428 | } |
| 1429 | ||
| 1430 | if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
| 1431 | signon = time(NULL) - info->sessionlen; | |
| 2086 | 1432 | |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1433 | tmp = g_strdup(normalize(gc->username)); |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1434 | if (!strcmp(tmp, normalize(info->sn))) |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1435 | g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", info->sn); |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1436 | g_free(tmp); |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
1437 | |
| 2993 | 1438 | serv_got_update(gc, info->sn, 1, info->warnlevel/10, signon, |
|
2713
c22d13046898
[gaim-migrate @ 2726]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2706
diff
changeset
|
1439 | time_idle, type, caps); |
| 2086 | 1440 | |
| 1441 | return 1; | |
| 1442 | } | |
| 1443 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1444 | static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
1445 | aim_userinfo_t *info; |
| 2086 | 1446 | va_list ap; |
| 1447 | struct gaim_connection *gc = sess->aux_data; | |
| 1448 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1449 | va_start(ap, fr); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
1450 | info = va_arg(ap, aim_userinfo_t *); |
| 2086 | 1451 | va_end(ap); |
| 1452 | ||
| 1453 | serv_got_update(gc, info->sn, 0, 0, 0, 0, 0, 0); | |
| 1454 | ||
| 1455 | return 1; | |
| 1456 | } | |
| 1457 | ||
| 1458 | static void cancel_direct_im(gpointer w, struct ask_direct *d) { | |
| 1459 | debug_printf("Freeing DirectIM prompts.\n"); | |
| 1460 | ||
| 1461 | g_free(d->sn); | |
| 1462 | g_free(d); | |
| 1463 | } | |
| 1464 | ||
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1465 | static void oscar_directim_callback(gpointer data, gint source, GaimInputCondition condition) { |
| 2086 | 1466 | struct direct_im *dim = data; |
| 1467 | struct gaim_connection *gc = dim->gc; | |
| 1468 | struct oscar_data *od = gc->proto_data; | |
|
2235
8828cb249372
[gaim-migrate @ 2245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2232
diff
changeset
|
1469 | struct conversation *cnv; |
| 2086 | 1470 | char buf[256]; |
| 3008 | 1471 | struct sockaddr name; |
| 1472 | socklen_t name_len = 1; | |
| 1473 | ||
| 2086 | 1474 | if (!g_slist_find(connections, gc)) { |
| 1475 | g_free(dim); | |
| 1476 | return; | |
| 1477 | } | |
| 1478 | ||
| 1479 | if (source < 0) { | |
| 1480 | g_free(dim); | |
| 1481 | return; | |
| 1482 | } | |
| 1483 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1484 | if (dim->conn->fd != source) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1485 | dim->conn->fd = source; |
| 2086 | 1486 | aim_conn_completeconnect(od->sess, dim->conn); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1487 | if (!(cnv = find_conversation(dim->name))) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1488 | cnv = new_conversation(dim->name); |
| 3008 | 1489 | |
| 1490 | /* This is the best way to see if we're connected or not */ | |
| 1491 | if (getpeername(source, &name, &name_len) == 0) { | |
| 1492 | g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
| 1493 | dim->connected = TRUE; | |
| 1494 | write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time(NULL), -1); | |
| 1495 | } | |
| 2086 | 1496 | od->direct_ims = g_slist_append(od->direct_ims, dim); |
| 3008 | 1497 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1498 | dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
| 3008 | 1499 | oscar_callback, dim->conn); |
| 2086 | 1500 | } |
| 1501 | ||
| 3630 | 1502 | static int oscar_sendfile_out_done(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 1503 | struct gaim_connection *gc = sess->aux_data; | |
| 1504 | va_list ap; | |
| 1505 | aim_conn_t *conn; | |
| 1506 | const char *cook; | |
| 1507 | struct oscar_file_transfer *oft; | |
| 1508 | ||
| 1509 | va_start(ap, fr); | |
| 1510 | conn = va_arg(ap, aim_conn_t *); | |
| 1511 | cook = va_arg(ap, const char *); | |
| 1512 | va_end(ap); | |
| 1513 | ||
| 1514 | oft = find_oft_by_cookie(gc, cook); | |
| 1515 | if (oft->filesdone == oft->totfiles) | |
| 1516 | oscar_file_transfer_disconnect(sess, conn); | |
| 1517 | else | |
| 1518 | /* Send header for next file */ | |
| 1519 | oscar_sendfile_request(sess, oft); | |
| 1520 | ||
| 1521 | return 0; | |
| 1522 | } | |
| 1523 | ||
| 1524 | /* Called once for each file before sending the raw data. */ | |
| 1525 | static int oscar_sendfile_request(aim_session_t *sess, | |
| 1526 | struct oscar_file_transfer *oft) { | |
| 1527 | char *name; | |
| 1528 | int size; | |
| 1529 | ||
| 1530 | transfer_get_file_info(oft->xfer, &size, &name); | |
| 1531 | aim_oft_sendfile_request(sess, oft->conn, name, oft->filesdone, | |
| 1532 | oft->totfiles, size, oft->totsize); | |
| 1533 | ||
| 1534 | return 0; | |
| 1535 | } | |
| 1536 | ||
| 1537 | static int oscar_sendfile_accepted(aim_session_t *sess, aim_frame_t *fr, ...) { | |
| 1538 | struct gaim_connection *gc = sess->aux_data; | |
| 1539 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 1540 | struct oscar_file_transfer *oft; | |
| 1541 | va_list ap; | |
| 1542 | aim_conn_t *conn, *listenerconn; | |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
1543 | #ifndef NOSIGALARM |
| 3630 | 1544 | alarm(0); /* reset timeout alarm */ |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
1545 | #endif |
| 3630 | 1546 | va_start(ap, fr); |
| 1547 | conn = va_arg(ap, aim_conn_t *); | |
| 1548 | listenerconn = va_arg(ap, aim_conn_t *); | |
| 1549 | va_end(ap); | |
| 1550 | ||
| 1551 | oft = find_oft_by_conn(gc, listenerconn); | |
| 1552 | oft->conn = conn; | |
| 1553 | /* Stop watching listener conn; watch transfer conn instead */ | |
| 1554 | gaim_input_remove(oft->watcher); | |
| 1555 | aim_conn_kill(sess, &listenerconn); | |
| 1556 | /* We no longer need to block other outgoing transfers. */ | |
| 1557 | oft_listening = NULL; | |
| 1558 | ||
| 1559 | aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, | |
| 1560 | AIM_CB_OFT_GETFILEFILESEND, | |
| 1561 | oscar_file_transfer_do, | |
| 1562 | 0); | |
| 1563 | aim_conn_addhandler(sess, conn, | |
| 1564 | AIM_CB_FAM_OFT, | |
| 1565 | AIM_CB_OFT_GETFILECOMPLETE, | |
| 1566 | oscar_sendfile_out_done, | |
| 1567 | 0); | |
| 1568 | oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | |
| 1569 | oscar_callback, oft->conn); | |
| 1570 | ||
| 1571 | oscar_sendfile_request(sess, oft); | |
| 1572 | ||
| 1573 | return 0; | |
| 1574 | } | |
| 1575 | ||
| 1576 | void oscar_sendfile_timeout(int sig) | |
| 1577 | { | |
| 1578 | struct oscar_file_transfer *oft = oft_listening; | |
| 1579 | ||
| 1580 | if (oft) { | |
| 1581 | aim_session_t *sess = aim_conn_getsess(oft->conn); | |
| 1582 | aim_conn_t *bosconn; | |
| 1583 | { | |
| 1584 | /* XXX is this valid? is there a better way? -- wtm */ | |
| 1585 | struct gaim_connection *gc = sess->aux_data; | |
| 1586 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 1587 | bosconn = odata->conn; | |
| 1588 | } | |
| 1589 | ||
| 1590 | oft_listening = NULL; | |
| 1591 | aim_canceltransfer(sess, bosconn, oft->cookie, | |
| 1592 | oft->sn, AIM_CAPS_SENDFILE); | |
| 1593 | ||
| 1594 | transfer_abort(oft->xfer, _("Transfer timed out")); | |
| 1595 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 1596 | } | |
| 1597 | } | |
| 1598 | ||
| 1599 | /* Called once at the beginning of an outgoing transfer session. */ | |
| 1600 | static void oscar_start_transfer_out(struct gaim_connection *gc, | |
| 1601 | struct file_transfer *xfer, const char *name, int totfiles, | |
| 1602 | int totsize) { | |
| 1603 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 1604 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 1605 | ||
| 1606 | oft->xfer = xfer; | |
| 1607 | oft->totsize = totsize; | |
| 1608 | oft->totfiles = totfiles; | |
| 1609 | oft->filesdone = 0; | |
| 1610 | oft_listening = oft; | |
| 1611 | ||
| 1612 | oft->conn = aim_sendfile_initiate(od->sess, oft->sn, | |
| 1613 | name, totfiles, oft->totsize, oft->cookie); | |
| 1614 | if (!oft->conn) { | |
| 1615 | do_error_dialog(_("Couldn't open listener to send file"), | |
| 1616 | _("File transfer aborted"), | |
| 1617 | GAIM_ERROR); | |
| 1618 | return; | |
| 1619 | } | |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
1620 | #ifndef NOSIGALARM |
| 3630 | 1621 | { |
| 1622 | /* XXX is there a good glib-oriented way of doing this? | |
| 1623 | * -- wtm */ | |
| 1624 | struct sigaction act; | |
| 1625 | act.sa_handler = oscar_sendfile_timeout; | |
| 3639 | 1626 | act.sa_flags = SA_RESETHAND; |
| 3630 | 1627 | sigemptyset (&act.sa_mask); |
| 1628 | sigaction(SIGALRM, &act, NULL); | |
| 1629 | alarm(OFT_TIMEOUT); | |
| 1630 | } | |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
1631 | #endif |
| 3630 | 1632 | aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, |
| 1633 | AIM_CB_OFT_GETFILEINITIATE, | |
| 1634 | oscar_sendfile_accepted, | |
| 1635 | 0); | |
| 1636 | oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | |
| 1637 | oscar_callback, oft->conn); | |
| 1638 | } | |
| 1639 | ||
| 1640 | static void oscar_transfer_data_chunk(struct gaim_connection *gc, | |
| 1641 | struct file_transfer *xfer, const char *buf, int len) | |
| 1642 | { | |
| 1643 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 1644 | aim_session_t *sess = aim_conn_getsess(oft->conn); | |
| 1645 | ||
| 1646 | if (oft->type == OFT_SENDFILE_IN) | |
| 1647 | aim_update_checksum(sess, oft->conn, buf, len); | |
| 1648 | } | |
| 1649 | ||
| 1650 | static void oscar_start_transfer_in(struct gaim_connection *gc, | |
| 1651 | struct file_transfer *xfer, int offset) { | |
| 1652 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 1653 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 1654 | ||
| 1655 | oft->xfer = xfer; | |
| 1656 | oft->conn = aim_accepttransfer(od->sess, od->conn, oft->sn, | |
| 1657 | oft->cookie, oft->ip, | |
| 1658 | oft->port, | |
| 1659 | AIM_CAPS_SENDFILE); | |
| 1660 | if (!oft->conn) { | |
| 1661 | char *buf = g_strdup_printf("Couldn't connect to remote host"); | |
| 1662 | do_error_dialog(buf, NULL, GAIM_ERROR); | |
| 1663 | g_free(buf); | |
| 1664 | return; | |
| 1665 | } | |
| 1666 | ||
| 1667 | aim_conn_addhandler(od->sess, oft->conn, AIM_CB_FAM_OFT, | |
| 1668 | AIM_CB_OFT_GETFILEFILEREQ, oscar_file_transfer_do, | |
| 1669 | 0); | |
| 1670 | ||
| 1671 | oft->watcher = gaim_input_add(oft->conn->fd, GAIM_INPUT_READ, | |
| 1672 | oscar_callback, oft->conn); | |
| 1673 | } | |
| 1674 | ||
| 1675 | static void oscar_cancel_transfer(struct gaim_connection *gc, | |
| 1676 | struct file_transfer *xfer) { | |
| 1677 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 1678 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 1679 | ||
| 1680 | if (oft->type == OFT_SENDFILE_IN) | |
| 1681 | aim_denytransfer(od->sess, oft->sn, oft->cookie, | |
| 1682 | AIM_TRANSFER_DENY_DECLINE); | |
| 1683 | ||
| 1684 | od->file_transfers = g_slist_remove(od->file_transfers, oft); | |
| 1685 | aim_conn_kill(od->sess, &oft->conn); | |
| 1686 | g_free(oft->sn); | |
| 1687 | g_free(oft); | |
| 1688 | } | |
| 1689 | ||
| 2086 | 1690 | static int accept_direct_im(gpointer w, struct ask_direct *d) { |
| 1691 | struct gaim_connection *gc = d->gc; | |
| 1692 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 1693 | struct direct_im *dim; | |
| 2945 | 1694 | char *host; int port = 4443; |
| 2086 | 1695 | int i; |
| 1696 | ||
| 1697 | debug_printf("Accepted DirectIM.\n"); | |
| 1698 | ||
| 1699 | dim = find_direct_im(od, d->sn); | |
| 1700 | if (dim) { | |
| 1701 | cancel_direct_im(w, d); /* 40 */ | |
| 1702 | return TRUE; | |
| 1703 | } | |
| 1704 | dim = g_new0(struct direct_im, 1); | |
| 1705 | dim->gc = d->gc; | |
| 1706 | g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
| 1707 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1708 | dim->conn = aim_directim_connect(od->sess, d->sn, NULL, d->cookie); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1709 | if (!dim->conn) { |
| 2086 | 1710 | g_free(dim); |
| 1711 | cancel_direct_im(w, d); | |
| 1712 | return TRUE; | |
| 1713 | } | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1714 | |
| 2086 | 1715 | aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
| 1716 | gaim_directim_incoming, 0); | |
| 1717 | aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, | |
| 1718 | gaim_directim_typing, 0); | |
| 3033 | 1719 | aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
| 2993 | 1720 | gaim_update_ui, 0); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1721 | for (i = 0; i < (int)strlen(d->ip); i++) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1722 | if (d->ip[i] == ':') { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1723 | port = atoi(&(d->ip[i+1])); |
| 2086 | 1724 | break; |
| 1725 | } | |
| 1726 | } | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1727 | host = g_strndup(d->ip, i); |
| 2086 | 1728 | dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
| 1729 | dim->conn->fd = proxy_connect(host, port, oscar_directim_callback, dim); | |
| 1730 | g_free(host); | |
| 1731 | if (dim->conn->fd < 0) { | |
| 1732 | aim_conn_kill(od->sess, &dim->conn); | |
| 1733 | g_free(dim); | |
| 1734 | cancel_direct_im(w, d); | |
| 1735 | return TRUE; | |
| 1736 | } | |
| 1737 | ||
| 1738 | cancel_direct_im(w, d); | |
| 1739 | ||
| 1740 | return TRUE; | |
| 1741 | } | |
| 1742 | ||
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
1743 | static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
| 3642 | 1744 | char *tmp; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1745 | struct gaim_connection *gc = sess->aux_data; |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
1746 | struct oscar_data *od = gc->proto_data; |
|
2273
b7c08d737d81
[gaim-migrate @ 2283]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2249
diff
changeset
|
1747 | int flags = 0; |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1748 | int convlen; |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1749 | GError *err = NULL; |
|
2273
b7c08d737d81
[gaim-migrate @ 2283]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2249
diff
changeset
|
1750 | |
|
b7c08d737d81
[gaim-migrate @ 2283]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2249
diff
changeset
|
1751 | if (args->icbmflags & AIM_IMFLAGS_AWAY) |
|
b7c08d737d81
[gaim-migrate @ 2283]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2249
diff
changeset
|
1752 | flags |= IM_FLAG_AWAY; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1753 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1754 | if (args->icbmflags & AIM_IMFLAGS_HASICON) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1755 | struct icon_req *ir = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1756 | GSList *h = od->hasicons; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1757 | char *who = normalize(userinfo->sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1758 | debug_printf("%s has an icon\n", userinfo->sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1759 | while (h) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1760 | ir = h->data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1761 | if (!strcmp(ir->user, who)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1762 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1763 | h = h->next; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1764 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1765 | if (!h) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1766 | ir = g_new0(struct icon_req, 1); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1767 | ir->user = g_strdup(who); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1768 | od->hasicons = g_slist_append(od->hasicons, ir); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1769 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1770 | if ((args->iconlen != ir->length) || |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1771 | (args->iconsum != ir->checksum) || |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1772 | (args->iconstamp != ir->timestamp)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1773 | ir->request = TRUE; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1774 | ir->length = args->iconlen; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1775 | ir->checksum = args->iconsum; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1776 | ir->timestamp = args->iconstamp; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1777 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1778 | |
|
2336
43d65c408209
[gaim-migrate @ 2349]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2315
diff
changeset
|
1779 | if (gc->user->iconfile[0] && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1780 | FILE *file; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1781 | struct stat st; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1782 | |
|
2248
091ec337929f
[gaim-migrate @ 2258]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
1783 | if (!stat(gc->user->iconfile, &st)) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1784 | char *buf = g_malloc(st.st_size); |
|
2248
091ec337929f
[gaim-migrate @ 2258]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
1785 | file = fopen(gc->user->iconfile, "r"); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1786 | if (file) { |
|
2603
0c39616168c9
[gaim-migrate @ 2616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2597
diff
changeset
|
1787 | int len = fread(buf, 1, st.st_size, file); |
|
0c39616168c9
[gaim-migrate @ 2616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2597
diff
changeset
|
1788 | debug_printf("Sending buddy icon to %s (%d bytes, %d reported)\n", |
|
0c39616168c9
[gaim-migrate @ 2616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2597
diff
changeset
|
1789 | userinfo->sn, len, st.st_size); |
|
2673
84bb25b76700
[gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2672
diff
changeset
|
1790 | aim_send_icon(sess, userinfo->sn, buf, st.st_size, |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1791 | st.st_mtime, aim_iconsum(buf, st.st_size)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1792 | fclose(file); |
|
2336
43d65c408209
[gaim-migrate @ 2349]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2315
diff
changeset
|
1793 | } else |
|
43d65c408209
[gaim-migrate @ 2349]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2315
diff
changeset
|
1794 | debug_printf("Can't open buddy icon file!\n"); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1795 | g_free(buf); |
|
2336
43d65c408209
[gaim-migrate @ 2349]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2315
diff
changeset
|
1796 | } else |
|
43d65c408209
[gaim-migrate @ 2349]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2315
diff
changeset
|
1797 | debug_printf("Can't stat buddy icon file!\n"); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1798 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1799 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1800 | if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
| 3722 | 1801 | /* This message is marked as UNICODE, so we have to |
| 1802 | * convert it to utf-8 before handing it to the gaim core. | |
| 1803 | * This conversion should *never* fail, if it does it | |
| 1804 | * means that either the incoming ICBM is corrupted or | |
| 1805 | * there is something we don't understand about it. */ | |
| 1806 | /* For the record, AIM Unicode is big-endian UCS-2 */ | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1807 | tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1808 | if (err) { |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1809 | debug_printf("Unicode IM conversion: %s\n", err->message); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1810 | tmp = strdup(_("(There was an error receiving this message)")); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1811 | } |
| 3722 | 1812 | } else { |
| 1813 | /* This will get executed for both AIM_IMFLAGS_UNICODE and | |
| 1814 | * unflagged messages, which are ASCII. That's OK because | |
| 1815 | * ASCII is a strict subset of ISO-8859-1; this should | |
| 1816 | * help with compatibility with old, broken versions of | |
| 1817 | * gaim (everything before 0.60) and other broken clients | |
| 1818 | * that will happily send ISO-8859-1 without marking it as | |
| 1819 | * such */ | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1820 | tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1821 | if (err) { |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1822 | debug_printf("ISO-8859-1 IM conversion: %s\n", err->message); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1823 | tmp = strdup(_("(There was an error receiving this message)")); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
1824 | } |
| 3642 | 1825 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1826 | |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
1827 | if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) { |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
1828 | char *who = normalize(userinfo->sn); |
|
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
1829 | if (!g_hash_table_lookup(od->supports_tn, who)) |
|
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
1830 | g_hash_table_insert(od->supports_tn, who, who); |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
1831 | } |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
1832 | |
| 3642 | 1833 | //strip_linefeed(tmp); |
|
2856
046ed5e89321
[gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2833
diff
changeset
|
1834 | serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL), -1); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1835 | g_free(tmp); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1836 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1837 | return 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1838 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1839 | |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
1840 | static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1841 | struct gaim_connection *gc = sess->aux_data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1842 | |
| 2869 | 1843 | debug_printf("rendezvous status %d (%s)\n", args->status, userinfo->sn); |
| 1844 | ||
| 3630 | 1845 | |
| 1846 | if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
| 1847 | struct oscar_file_transfer *oft; | |
| 1848 | oft = find_oft_by_cookie(gc, args->cookie); | |
| 1849 | if (oft) { | |
| 1850 | transfer_abort(oft->xfer, _("Buddy canceled transfer")); | |
| 1851 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 1852 | } | |
| 1853 | return 0; | |
| 1854 | } | |
| 1855 | else if (args->status == AIM_RENDEZVOUS_ACCEPT) { | |
| 1856 | /* The user accepted our transfer request, but we don't | |
| 1857 | * really need to do anything yet. | |
| 1858 | * -- wtm | |
| 1859 | */ | |
| 1860 | return 0; | |
| 1861 | } | |
| 1862 | else if (args->status != AIM_RENDEZVOUS_PROPOSE) { | |
| 2869 | 1863 | return 1; |
| 3630 | 1864 | } |
| 2869 | 1865 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1866 | if (args->reqclass & AIM_CAPS_CHAT) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1867 | char *name = extract_name(args->info.chat.roominfo.name); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1868 | int *exch = g_new0(int, 1); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1869 | GList *m = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1870 | m = g_list_append(m, g_strdup(name ? name : args->info.chat.roominfo.name)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1871 | *exch = args->info.chat.roominfo.exchange; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1872 | m = g_list_append(m, exch); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1873 | serv_got_chat_invite(gc, |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1874 | name ? name : args->info.chat.roominfo.name, |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1875 | userinfo->sn, |
| 2869 | 1876 | (char *)args->msg, |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1877 | m); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1878 | if (name) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1879 | g_free(name); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1880 | } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
| 3630 | 1881 | struct oscar_file_transfer *oft; |
| 1882 | ||
| 1883 | if (!args->verifiedip) { | |
| 1884 | /* It seems that Trillian sends a message | |
| 1885 | * with no file data during multiple-file | |
| 1886 | * transfers. | |
| 1887 | */ | |
| 1888 | debug_printf("sendfile: didn't get any data\n"); | |
| 1889 | return -1; | |
| 1890 | } | |
| 1891 | ||
| 1892 | oft = g_new0(struct oscar_file_transfer, 1); | |
| 1893 | ||
| 1894 | debug_printf("%s (%s) requests to send a file to %s\n", | |
| 1895 | userinfo->sn, args->verifiedip, gc->username); | |
| 1896 | ||
| 1897 | oft->type = OFT_SENDFILE_IN; | |
| 1898 | oft->sn = g_strdup(userinfo->sn); | |
| 1899 | strncpy(oft->ip, args->verifiedip, sizeof(oft->ip)); | |
| 1900 | oft->port = args->port; | |
| 1901 | memcpy(oft->cookie, args->cookie, 8); | |
| 1902 | ||
| 1903 | { /* XXX ugly... */ | |
| 1904 | struct gaim_connection *gc = sess->aux_data; | |
| 1905 | struct oscar_data *od = gc->proto_data; | |
| 1906 | od->file_transfers = g_slist_append(od->file_transfers, oft); | |
| 1907 | } | |
| 1908 | ||
| 1909 | oft->xfer = transfer_in_add(gc, userinfo->sn, | |
| 1910 | args->info.sendfile.filename, | |
| 1911 | args->info.sendfile.totsize, | |
| 1912 | args->info.sendfile.totfiles, | |
| 1913 | args->msg); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1914 | } else if (args->reqclass & AIM_CAPS_GETFILE) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1915 | } else if (args->reqclass & AIM_CAPS_VOICE) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1916 | } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1917 | set_icon_data(gc, normalize(userinfo->sn), args->info.icon.icon, |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1918 | args->info.icon.length); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1919 | } else if (args->reqclass & AIM_CAPS_IMIMAGE) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1920 | struct ask_direct *d = g_new0(struct ask_direct, 1); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1921 | char buf[256]; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1922 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1923 | debug_printf("%s received direct im request from %s (%s)\n", |
| 2869 | 1924 | gc->username, userinfo->sn, args->verifiedip); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1925 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1926 | d->gc = gc; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1927 | d->sn = g_strdup(userinfo->sn); |
| 2869 | 1928 | strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1929 | memcpy(d->cookie, args->cookie, 8); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1930 | g_snprintf(buf, sizeof buf, "%s has just asked to directly connect to %s.", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1931 | userinfo->sn, gc->username); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1932 | do_ask_dialog(buf, d, accept_direct_im, cancel_direct_im); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1933 | } else { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1934 | debug_printf("Unknown reqclass %d\n", args->reqclass); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1935 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1936 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1937 | return 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1938 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
1939 | |
| 3453 | 1940 | /* |
| 1941 | * Next 2 functions are for when other people ask you for authorization | |
| 1942 | */ | |
| 1943 | static void gaim_icq_authgrant(gpointer w, struct channel4_data *data) { | |
| 1944 | char message; | |
| 3141 | 1945 | struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
| 1946 | message = 0; | |
| 3453 | 1947 | aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHGRANTED, &message); |
| 1948 | show_got_added(data->gc, NULL, data->uin, NULL, NULL); | |
| 1949 | g_free(data->uin); | |
| 1950 | data->uin = NULL; | |
| 3141 | 1951 | } |
| 1952 | ||
| 3453 | 1953 | static void gaim_icq_authdeny(gpointer w, struct channel4_data *data) { |
| 3141 | 1954 | if (data->uin) { |
| 3453 | 1955 | gchar *message; |
| 3141 | 1956 | struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
| 1957 | message = g_strdup_printf("No reason given."); | |
| 3453 | 1958 | aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHDENIED, message); |
| 1959 | g_free(data->uin); | |
| 3141 | 1960 | g_free(message); |
| 1961 | } | |
| 1962 | g_free(data); | |
| 1963 | } | |
| 1964 | ||
| 1965 | /* | |
| 1966 | * For when other people ask you for authorization | |
| 1967 | */ | |
| 1968 | static void gaim_icq_authask(struct gaim_connection *gc, fu32_t uin, char *msg) { | |
| 3453 | 1969 | struct channel4_data *data = g_new(struct channel4_data, 1); |
| 3141 | 1970 | /* The first 6 chars of the message are some type of alien gibberish, so skip them */ |
| 3159 | 1971 | char *dialog_msg = g_strdup_printf("The user %lu wants to add you to their buddy list for the following reason:\n\n%s", uin, (msg && strlen(msg)>6) ? msg+6 : "No reason given."); |
| 1972 | debug_printf("Received an authorization request from UIN %lu\n", uin); | |
| 3141 | 1973 | data->gc = gc; |
| 3453 | 1974 | data->uin = g_strdup_printf("%lu", uin); |
| 3141 | 1975 | do_ask_dialog(dialog_msg, data, gaim_icq_authgrant, gaim_icq_authdeny); |
| 1976 | g_free(dialog_msg); | |
| 1977 | } | |
| 1978 | ||
| 3453 | 1979 | /* |
| 1980 | * Next 2 functions are for when someone sends you contacts | |
| 1981 | */ | |
| 1982 | static void gaim_icq_contactadd(gpointer w, struct channel4_data *data) { | |
| 1983 | show_add_buddy(data->gc, data->uin, NULL, data->nick); | |
| 1984 | } | |
| 1985 | ||
| 1986 | static void gaim_icq_contactdontadd(gpointer w, struct channel4_data *data) { | |
| 1987 | free(data->uin); | |
| 1988 | free(data->nick); | |
| 1989 | g_free(data); | |
| 1990 | } | |
| 1991 | ||
| 3141 | 1992 | static int incomingim_chan4(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch4_args *args) { |
| 1993 | struct gaim_connection *gc = sess->aux_data; | |
| 1994 | ||
| 3453 | 1995 | switch (args->type) |
| 1996 | { | |
|
3316
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
1997 | case 0x0001: { /* An almost-normal instant message. Mac ICQ sends this. It's peculiar. */ |
| 3453 | 1998 | gchar *uin, *message; |
|
3316
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
1999 | uin = g_strdup_printf("%lu", args->uin); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2000 | message = g_strdup(args->msg); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2001 | strip_linefeed(message); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2002 | serv_got_im(gc, uin, message, 0, time(NULL), -1); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2003 | g_free(uin); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2004 | g_free(message); |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2005 | } break; |
|
43bb95f6167a
[gaim-migrate @ 3334]
Mark Doliner <markdoliner@pidgin.im>
parents:
3279
diff
changeset
|
2006 | |
| 3453 | 2007 | case 0x0004: { /* Someone sent you a URL */ |
| 2008 | gchar **text, *uin, *message; | |
| 2009 | text = g_strsplit(args->msg, "þ", 2); | |
| 2010 | if (text) { | |
| 2011 | uin = g_strdup_printf("%lu", args->uin); | |
| 2012 | message = g_strdup_printf("<A HREF=\"%s\">%s</A>", text[1], text[0]); | |
| 2013 | strip_linefeed(message); | |
| 2014 | serv_got_im(gc, uin, message, 0, time(NULL), -1); | |
| 2015 | g_strfreev(text); | |
| 2016 | g_free(uin); | |
| 2017 | g_free(message); | |
| 2018 | } | |
| 2019 | } break; | |
| 2020 | ||
| 3141 | 2021 | case 0x0006: { /* Someone requested authorization */ |
| 2022 | gaim_icq_authask(gc, args->uin, args->msg); | |
| 2023 | } break; | |
| 2024 | ||
| 2025 | case 0x0007: { /* Someone has denied you authorization */ | |
| 2026 | char *dialog_msg; | |
| 3159 | 2027 | dialog_msg = g_strdup_printf(_("The user %lu has denied your request to add them to your contact list for the following reason:\n%s"), args->uin, args->msg ? args->msg : _("No reason given.")); |
| 3427 | 2028 | do_error_dialog(_("ICQ authorization denied."), dialog_msg, GAIM_ERROR); |
| 3141 | 2029 | g_free(dialog_msg); |
| 2030 | } break; | |
| 2031 | ||
| 2032 | case 0x0008: { /* Someone has granted you authorization */ | |
| 2033 | char *dialog_msg; | |
| 3159 | 2034 | dialog_msg = g_strdup_printf(_("The user %lu has granted your request to add them to your contact list."), args->uin); |
| 3427 | 2035 | do_error_dialog("ICQ authorization accepted.", dialog_msg, GAIM_INFO); |
| 3141 | 2036 | g_free(dialog_msg); |
| 2037 | } break; | |
| 2038 | ||
| 2039 | case 0x0012: { | |
| 2040 | /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ | |
| 2041 | } break; | |
| 2042 | ||
| 3453 | 2043 | case 0x0013: { /* Someone has sent you some ICQ contacts */ |
| 2044 | int i, num; | |
| 2045 | gchar **text; | |
| 2046 | text = g_strsplit(args->msg, "þ", 0); | |
| 2047 | if (text) { | |
| 2048 | num = 0; | |
| 2049 | for (i=0; i<strlen(text[0]); i++) | |
| 2050 | num = num*10 + text[0][i]-48; | |
| 2051 | for (i=0; i<num; i++) { | |
| 2052 | struct channel4_data *data = g_new(struct channel4_data, 1); | |
| 2053 | gchar *message = g_strdup_printf("ICQ user %lu has sent you a contact: %s (%s)\nDo you want to add this contact to your contact list?", args->uin, text[i*2+2], text[i*2+1]); | |
| 2054 | data->gc = gc; | |
| 2055 | data->uin = g_strdup(text[i*2+2]); | |
| 2056 | data->nick = g_strdup(text[i*2+1]); | |
| 2057 | do_ask_dialog(message, data, gaim_icq_contactadd, gaim_icq_contactdontadd); | |
| 2058 | g_free(message); | |
| 2059 | } | |
| 2060 | g_strfreev(text); | |
| 2061 | } | |
| 2062 | } break; | |
| 2063 | ||
| 2064 | case 0x001a: { /* Someone has requested that you send them from ICQ contacts */ | |
| 2065 | /* This is boring and silly. */ | |
| 2066 | } break; | |
| 2067 | ||
| 3141 | 2068 | default: { |
| 2069 | debug_printf("Received a channel 4 message of unknown type (type 0x%04d).\n", args->type); | |
| 2070 | } break; | |
| 2071 | } | |
| 2072 | ||
| 2073 | return 1; | |
| 2074 | } | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2075 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2076 | static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2077 | int channel, ret = 0; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2078 | aim_userinfo_t *userinfo; |
| 2086 | 2079 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2080 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2081 | va_start(ap, fr); |
| 2086 | 2082 | channel = va_arg(ap, int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2083 | userinfo = va_arg(ap, aim_userinfo_t *); |
| 2086 | 2084 | |
| 3141 | 2085 | switch (channel) { |
| 2086 | case 1: { /* standard message */ | |
| 2087 | struct aim_incomingim_ch1_args *args; | |
| 2088 | args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
| 2089 | ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
| 2090 | } break; | |
| 2091 | ||
| 2092 | case 2: { /* rendevous */ | |
| 2093 | struct aim_incomingim_ch2_args *args; | |
| 2094 | args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
| 2095 | ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
| 2096 | } break; | |
| 2097 | ||
| 2098 | case 4: { /* ICQ */ | |
| 2099 | struct aim_incomingim_ch4_args *args; | |
| 2100 | args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
| 2101 | ret = incomingim_chan4(sess, fr->conn, userinfo, args); | |
| 2102 | } break; | |
| 2103 | ||
| 2104 | default: { | |
| 2105 | debug_printf("ICBM received on unsupported channel (channel 0x%04d).", channel); | |
| 2106 | } break; | |
| 2086 | 2107 | } |
| 2108 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2109 | va_end(ap); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2110 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2111 | return ret; |
| 2086 | 2112 | } |
| 2113 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2114 | static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2115 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2116 | fu16_t chan, nummissed, reason; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2117 | aim_userinfo_t *userinfo; |
| 2086 | 2118 | char buf[1024]; |
| 2119 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2120 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2121 | chan = (fu16_t)va_arg(ap, unsigned int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2122 | userinfo = va_arg(ap, aim_userinfo_t *); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2123 | nummissed = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2124 | reason = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2125 | va_end(ap); |
| 2126 | ||
| 2127 | switch(reason) { | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2128 | case 0: |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2129 | /* Invalid (0) */ |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2130 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2131 | sizeof(buf), |
| 2946 | 2132 | nummissed == 1 ? |
| 2947 | 2133 | _("You missed %d message from %s because it was invalid.") : |
| 2134 | _("You missed %d messages from %s because they were invalid."), | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2135 | nummissed, |
| 2947 | 2136 | userinfo->sn); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2137 | break; |
| 2086 | 2138 | case 1: |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2139 | /* Message too large */ |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2140 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2141 | sizeof(buf), |
| 2943 | 2142 | nummissed == 1 ? |
| 2143 | _("You missed %d message from %s because it was too large.") : | |
| 2946 | 2144 | _("You missed %d messages from %s because they were too large."), |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2145 | nummissed, |
| 2943 | 2146 | userinfo->sn); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2147 | break; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2148 | case 2: |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2149 | /* Rate exceeded */ |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2150 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2151 | sizeof(buf), |
| 2943 | 2152 | nummissed == 1 ? |
| 2153 | _("You missed %d message from %s because the rate limit has been exceeded.") : | |
| 2154 | _("You missed %d messages from %s because the rate limit has been exceeded."), | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2155 | nummissed, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2156 | userinfo->sn); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2157 | break; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2158 | case 3: |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2159 | /* Evil Sender */ |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2160 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2161 | sizeof(buf), |
| 2943 | 2162 | nummissed == 1 ? |
| 2947 | 2163 | _("You missed %d message from %s because it was too evil.") : |
| 2943 | 2164 | _("You missed %d messages from %s because they are too evil."), |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2165 | nummissed, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2166 | userinfo->sn); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2167 | break; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2168 | case 4: |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2169 | /* Evil Receiver */ |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2170 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2171 | sizeof(buf), |
| 2943 | 2172 | nummissed == 1 ? |
| 2173 | _("You missed %d message from %s because you are too evil.") : | |
| 2174 | _("You missed %d messages from %s because you are too evil."), | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2175 | nummissed, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2176 | userinfo->sn); |
| 2086 | 2177 | break; |
| 2178 | default: | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2179 | g_snprintf(buf, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2180 | sizeof(buf), |
| 2943 | 2181 | nummissed == 1 ? |
| 2182 | _("You missed %d message from %s for unknown reasons.") : | |
| 2183 | _("You missed %d messages from %s for unknown reasons."), | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2184 | nummissed, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2185 | userinfo->sn); |
| 2086 | 2186 | break; |
| 2187 | } | |
| 3427 | 2188 | do_error_dialog(buf, NULL, GAIM_ERROR); |
| 2086 | 2189 | |
| 2190 | return 1; | |
| 2191 | } | |
| 2192 | ||
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2193 | static char *gaim_icq_status(int state) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2194 | /* Make a cute little string that shows the status of the dude or dudet */ |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2195 | if (state & AIM_ICQ_STATE_CHAT) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2196 | return g_strdup_printf("Free For Chat"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2197 | else if (state & AIM_ICQ_STATE_DND) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2198 | return g_strdup_printf("Do Not Disturb"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2199 | else if (state & AIM_ICQ_STATE_OUT) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2200 | return g_strdup_printf("Not Available"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2201 | else if (state & AIM_ICQ_STATE_BUSY) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2202 | return g_strdup_printf("Occupied"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2203 | else if (state & AIM_ICQ_STATE_AWAY) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2204 | return g_strdup_printf("Away"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2205 | else if (state & AIM_ICQ_STATE_WEBAWARE) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2206 | return g_strdup_printf("Web Aware"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2207 | else if (state & AIM_ICQ_STATE_INVISIBLE) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2208 | return g_strdup_printf("Invisible"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2209 | else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2210 | return g_strdup_printf("Online"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2211 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2212 | |
| 3630 | 2213 | static int gaim_parse_clientauto_rend(aim_session_t *sess, |
| 2214 | const char *who, int reason, const char *cookie) { | |
| 2215 | struct gaim_connection *gc = sess->aux_data; | |
| 2216 | struct oscar_file_transfer *oft; | |
| 2217 | char *buf; | |
| 2218 | ||
| 2219 | switch (reason) { | |
| 2220 | case 3: /* Decline sendfile. */ | |
| 2221 | oft = find_oft_by_cookie(gc, cookie); | |
| 2222 | ||
| 2223 | if (oft) { | |
| 2224 | buf = g_strdup_printf(_("%s has declined to receive a file from %s.\n"), | |
| 2225 | who, gc->username); | |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
2226 | #ifndef NOSIGALARM |
| 3630 | 2227 | alarm(0); /* reset timeout alarm */ |
|
3666
87a1c9e60c0e
[gaim-migrate @ 3795]
Herman Bloggs <herman@bluedigits.com>
parents:
3664
diff
changeset
|
2228 | #endif |
| 3630 | 2229 | oft_listening = NULL; |
| 2230 | transfer_abort(oft->xfer, buf); | |
| 2231 | g_free(buf); | |
| 2232 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 2233 | } | |
| 2234 | break; | |
| 2235 | default: | |
| 2236 | debug_printf("Received an unknown rendezvous client auto-response from %s. Type 0x%04x\n", who, reason); | |
| 2237 | ||
| 2238 | } | |
| 2239 | ||
| 2240 | return 0; | |
| 2241 | } | |
| 2242 | ||
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2243 | static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2244 | struct gaim_connection *gc = sess->aux_data; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2245 | va_list ap; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2246 | fu16_t chan, reason; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2247 | char *who; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2248 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2249 | va_start(ap, fr); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2250 | chan = (fu16_t)va_arg(ap, unsigned int); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2251 | who = va_arg(ap, char *); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2252 | reason = (fu16_t)va_arg(ap, unsigned int); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2253 | |
| 3630 | 2254 | if (chan == 2) { |
| 2255 | char *cookie = va_arg(ap, char *); | |
| 3637 | 2256 | va_end(ap); |
| 3630 | 2257 | |
| 2258 | return gaim_parse_clientauto_rend(sess, who, reason, | |
| 2259 | cookie); | |
| 2260 | } | |
| 2261 | ||
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2262 | switch(reason) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2263 | case 0x0003: { /* Reply from an ICQ status message request */ |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2264 | int state = (int)va_arg(ap, fu32_t); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2265 | char *msg = va_arg(ap, char *); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2266 | char *status_msg = gaim_icq_status(state); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2267 | char *dialog_msg, **splitmsg; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2268 | struct oscar_data *od = gc->proto_data; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2269 | GSList *l = od->evilhack; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2270 | gboolean evilhack = FALSE; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2271 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2272 | /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2273 | splitmsg = g_strsplit(msg, "\r\n", 0); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2274 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2275 | /* If who is in od->evilhack, then we're just getting the away message, otherwise this |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2276 | * will just get appended to the info box (which is already showing). */ |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2277 | while (l) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2278 | char *x = l->data; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2279 | if (!strcmp(x, normalize(who))) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2280 | evilhack = TRUE; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2281 | g_free(x); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2282 | od->evilhack = g_slist_remove(od->evilhack, x); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2283 | break; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2284 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2285 | l = l->next; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2286 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2287 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2288 | if (evilhack) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2289 | dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<BR><HR><BR>%s<BR>"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2290 | else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2291 | dialog_msg = g_strdup_printf(_("<B>Status:</B> %s<BR><HR><BR>%s<BR>"), status_msg, g_strjoinv("<BR>", splitmsg)); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2292 | g_show_info_text(gc, who, 2, dialog_msg, NULL); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2293 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2294 | g_free(status_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2295 | g_free(dialog_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2296 | g_strfreev(splitmsg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2297 | } break; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2298 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2299 | default: { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2300 | debug_printf("Received an unknown client auto-response from %s. Type 0x%04x\n", who, reason); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2301 | } break; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2302 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2303 | va_end(ap); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2304 | |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2305 | return 1; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2306 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
2307 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2308 | static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2309 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2310 | fu16_t reason; |
|
2865
fbc616afa491
[gaim-migrate @ 2878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2864
diff
changeset
|
2311 | char *m; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2312 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2313 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2314 | reason = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2315 | va_end(ap); |
| 2316 | ||
|
2864
fe3f11682640
[gaim-migrate @ 2877]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2856
diff
changeset
|
2317 | debug_printf("snac threw error (reason 0x%04x: %s)\n", reason, |
| 2086 | 2318 | (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
| 2319 | ||
|
2865
fbc616afa491
[gaim-migrate @ 2878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2864
diff
changeset
|
2320 | m = g_strdup_printf(_("SNAC threw error: %s\n"), |
|
fbc616afa491
[gaim-migrate @ 2878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2864
diff
changeset
|
2321 | reason < msgerrreasonlen ? msgerrreason[reason] : "Unknown error"); |
| 3427 | 2322 | do_error_dialog(m, NULL, GAIM_ERROR); |
|
2865
fbc616afa491
[gaim-migrate @ 2878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2864
diff
changeset
|
2323 | g_free(m); |
|
fbc616afa491
[gaim-migrate @ 2878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2864
diff
changeset
|
2324 | |
| 2086 | 2325 | return 1; |
| 2326 | } | |
| 2327 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2328 | static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2329 | va_list ap; |
| 2330 | char *destn; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2331 | fu16_t reason; |
| 2086 | 2332 | char buf[1024]; |
| 3630 | 2333 | struct oscar_file_transfer *oft = oft_listening; |
| 2086 | 2334 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2335 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2336 | reason = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2337 | destn = va_arg(ap, char *); |
| 2338 | va_end(ap); | |
| 2339 | ||
| 3630 | 2340 | if (oft) { |
| 2341 | /* If we try to send a file but it isn't supported, then | |
| 2342 | * we get this error without any information identifying | |
| 2343 | * the failed connection. So we can only have one outgoing | |
| 2344 | * transfer at a time. Ugh. -- wtm | |
| 2345 | */ | |
| 2346 | oft_listening = NULL; | |
| 2347 | transfer_abort(oft->xfer, | |
| 2348 | (reason < msgerrreasonlen) ? msgerrreason[reason] : _("No reason was given.")); | |
| 2349 | ||
| 2350 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 2351 | return 1; | |
| 2352 | } | |
| 2353 | ||
| 3574 | 2354 | snprintf(buf, sizeof(buf), _("Your message to %s did not get sent:"), destn); |
| 3427 | 2355 | do_error_dialog(buf, (reason < msgerrreasonlen) ? msgerrreason[reason] : _("No reason was given."), GAIM_ERROR); |
| 2086 | 2356 | |
| 2357 | return 1; | |
| 2358 | } | |
| 2359 | ||
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2360 | static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2361 | struct gaim_connection *gc = sess->aux_data; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2362 | va_list ap; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2363 | fu16_t type1, type2; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2364 | char *sn; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2365 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2366 | va_start(ap, fr); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2367 | type1 = (fu16_t)va_arg(ap, unsigned int); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2368 | sn = va_arg(ap, char *); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2369 | type2 = (fu16_t)va_arg(ap, unsigned int); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2370 | va_end(ap); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2371 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2372 | debug_printf("Received an mtn from %s. Type1 is 0x%04d and type2 is 0x%04d.\n", sn, type1, type2); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2373 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2374 | switch (type2) { |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2375 | case 0x0000: { /* Text has been cleared */ |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2376 | serv_got_typing_stopped(gc, sn); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2377 | } break; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2378 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2379 | case 0x0001: { /* Paused typing */ |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2380 | serv_got_typing_stopped(gc, sn); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2381 | } break; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2382 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2383 | case 0x0002: { /* Typing */ |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2384 | serv_got_typing(gc, sn, 0); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2385 | } break; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2386 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2387 | default: { |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2388 | printf("Received unknown typing notification type.\n"); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2389 | } break; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2390 | } |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2391 | |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2392 | return 1; |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2393 | } |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
2394 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2395 | static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2396 | va_list ap; |
| 2397 | char *destn; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2398 | fu16_t reason; |
| 2086 | 2399 | char buf[1024]; |
| 2400 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2401 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2402 | reason = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2403 | destn = va_arg(ap, char *); |
| 2404 | va_end(ap); | |
| 2405 | ||
| 3574 | 2406 | snprintf(buf, sizeof(buf), _("User information for %s unavailable:"), destn); |
| 3427 | 2407 | do_error_dialog(buf, (reason < msgerrreasonlen) ? msgerrreason[reason] : _("No reason was given."), GAIM_ERROR); |
| 2086 | 2408 | |
| 2409 | return 1; | |
| 2410 | } | |
| 2411 | ||
| 2412 | static char *images(int flags) { | |
| 2413 | static char buf[1024]; | |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2414 | g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
| 2679 | 2415 | (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
| 2086 | 2416 | (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
| 2417 | (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2418 | (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
| 2086 | 2419 | (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
|
3079
e55c9a9cc4fc
[gaim-migrate @ 3093]
Mark Doliner <markdoliner@pidgin.im>
parents:
3074
diff
changeset
|
2420 | (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
|
e55c9a9cc4fc
[gaim-migrate @ 3093]
Mark Doliner <markdoliner@pidgin.im>
parents:
3074
diff
changeset
|
2421 | (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); |
| 2086 | 2422 | return buf; |
| 2423 | } | |
| 2424 | ||
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2425 | |
| 2920 | 2426 | /* XXX This is horribly copied from ../../buddy.c. */ |
| 2427 | static char *caps_string(guint caps) | |
| 2428 | { | |
| 2429 | static char buf[512], *tmp; | |
| 2430 | int count = 0, i = 0; | |
| 2431 | guint bit = 1; | |
| 2432 | while (bit <= 0x10000) { | |
| 2433 | if (bit & caps) { | |
| 2434 | switch (bit) { | |
| 2435 | case 0x1: | |
| 2436 | tmp = _("Buddy Icon"); | |
| 2437 | break; | |
| 2438 | case 0x2: | |
| 2439 | tmp = _("Voice"); | |
| 2440 | break; | |
| 2441 | case 0x4: | |
| 2442 | tmp = _("IM Image"); | |
| 2443 | break; | |
| 2444 | case 0x8: | |
| 2445 | tmp = _("Chat"); | |
| 2446 | break; | |
| 2447 | case 0x10: | |
| 2448 | tmp = _("Get File"); | |
| 2449 | break; | |
| 2450 | case 0x20: | |
| 2451 | tmp = _("Send File"); | |
| 2452 | break; | |
| 2453 | case 0x40: | |
| 2454 | case 0x200: | |
| 2455 | tmp = _("Games"); | |
| 2456 | break; | |
| 2457 | case 0x80: | |
| 2458 | tmp = _("Stocks"); | |
| 2459 | break; | |
| 2460 | case 0x100: | |
| 2461 | tmp = _("Send Buddy List"); | |
| 2462 | break; | |
| 2463 | case 0x400: | |
| 2464 | tmp = _("EveryBuddy Bug"); | |
| 2465 | break; | |
| 2466 | case 0x800: | |
| 2467 | tmp = _("AP User"); | |
| 2468 | break; | |
| 2469 | case 0x1000: | |
| 2470 | tmp = _("ICQ RTF"); | |
| 2471 | break; | |
| 2472 | case 0x2000: | |
| 2473 | tmp = _("Nihilist"); | |
| 2474 | break; | |
| 2475 | case 0x4000: | |
| 2476 | tmp = _("ICQ Server Relay"); | |
| 2477 | break; | |
| 2478 | case 0x8000: | |
| 2479 | tmp = _("ICQ Unknown"); | |
| 2480 | break; | |
| 2481 | case 0x10000: | |
| 2482 | tmp = _("Trillian Encryption"); | |
| 2483 | break; | |
| 2484 | default: | |
| 2485 | tmp = NULL; | |
| 2486 | break; | |
| 2487 | } | |
| 2488 | if (tmp) | |
| 2489 | i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
| 2490 | tmp); | |
| 2491 | count++; | |
| 2492 | } | |
| 2493 | bit <<= 1; | |
| 2494 | } | |
| 2495 | return buf; | |
| 2496 | } | |
| 2497 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2498 | static int gaim_parse_user_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2499 | aim_userinfo_t *info; |
| 2086 | 2500 | char *prof_enc = NULL, *prof = NULL; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2501 | fu16_t infotype; |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2502 | char header[BUF_LONG]; |
|
2137
b0c18ea1dee8
[gaim-migrate @ 2147]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2131
diff
changeset
|
2503 | char legend[BUF_LONG]; |
| 2086 | 2504 | struct gaim_connection *gc = sess->aux_data; |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2505 | struct oscar_data *od = gc->proto_data; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2506 | GSList *l = od->evilhack; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2507 | gboolean evilhack = FALSE; |
| 2086 | 2508 | va_list ap; |
| 2993 | 2509 | gchar *membersince = NULL, *onlinesince = NULL, *idle = NULL; |
| 2086 | 2510 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2511 | va_start(ap, fr); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2512 | info = va_arg(ap, aim_userinfo_t *); |
| 2920 | 2513 | infotype = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2514 | prof_enc = va_arg(ap, char *); |
| 2515 | prof = va_arg(ap, char *); | |
| 2516 | va_end(ap); | |
| 2517 | ||
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2518 | if (!od->icq) { |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2519 | g_snprintf(legend, sizeof legend, |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2520 | _("<br><BODY BGCOLOR=WHITE><hr><I>Legend:</I><br><br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2521 | "<IMG SRC=\"free_icon.gif\"> : Normal AIM User<br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2522 | "<IMG SRC=\"aol_icon.gif\"> : AOL User <br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2523 | "<IMG SRC=\"dt_icon.gif\"> : Trial AIM User <br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2524 | "<IMG SRC=\"admin_icon.gif\"> : Administrator <br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2525 | "<IMG SRC=\"ab_icon.gif\"> : ActiveBuddy Interactive Agent<br>" |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2526 | "<IMG SRC=\"wireless_icon.gif\"> : Wireless Device User<br>")); |
| 3106 | 2527 | } else { |
| 2528 | legend[0] = 0; | |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2529 | } |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
2530 | |
| 2993 | 2531 | if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) { |
| 2532 | onlinesince = g_strdup_printf("Online Since : <B>%s</B><BR>\n", | |
| 2533 | asctime(localtime(&info->onlinesince))); | |
| 2534 | } | |
| 2535 | ||
| 2536 | if (info->present & AIM_USERINFO_PRESENT_MEMBERSINCE) { | |
| 2537 | membersince = g_strdup_printf("Member Since : <B>%s</B><BR>\n", | |
| 2538 | asctime(localtime(&info->membersince))); | |
| 2539 | } | |
| 2540 | ||
| 2541 | if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
| 2542 | idle = g_strdup_printf("Idle : <B>%d minutes</B>", | |
| 2543 | info->idletime); | |
| 2544 | } else | |
| 2545 | idle = g_strdup("Idle: <B>Active</B>"); | |
| 2546 | ||
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2547 | g_snprintf(header, sizeof header, |
| 2086 | 2548 | _("Username : <B>%s</B> %s <BR>\n" |
| 2993 | 2549 | "Warning Level : <B>%d %%</B><BR>\n" |
| 2086 | 2550 | "%s" |
| 2993 | 2551 | "%s" |
| 2552 | "%s<BR>\n" | |
| 2553 | "<HR><BR>\n"), | |
| 2086 | 2554 | info->sn, images(info->flags), |
| 2555 | info->warnlevel/10, | |
| 2993 | 2556 | onlinesince ? onlinesince : "", |
| 2557 | membersince ? membersince : "", | |
| 2558 | idle ? idle : ""); | |
| 2559 | ||
| 2560 | g_free(onlinesince); | |
| 2561 | g_free(membersince); | |
| 2562 | g_free(idle); | |
|
2773
3f711c709792
[gaim-migrate @ 2786]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2768
diff
changeset
|
2563 | |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2564 | while (l) { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2565 | char *x = l->data; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2566 | if (!strcmp(x, normalize(info->sn))) { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2567 | evilhack = TRUE; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2568 | g_free(x); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2569 | od->evilhack = g_slist_remove(od->evilhack, x); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2570 | break; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2571 | } |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2572 | l = l->next; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2573 | } |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2574 | |
| 2920 | 2575 | if (infotype == AIM_GETINFO_AWAYMESSAGE) { |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2576 | if (evilhack) { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2577 | g_show_info_text(gc, info->sn, 2, |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2578 | header, |
|
2797
860827047ac5
[gaim-migrate @ 2810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2791
diff
changeset
|
2579 | (prof && *prof) ? away_subs(prof, gc->username) : |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2580 | _("<i>User has no away message</i>"), |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2581 | legend, NULL); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2582 | } else { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2583 | g_show_info_text(gc, info->sn, 0, |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2584 | header, |
|
2797
860827047ac5
[gaim-migrate @ 2810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2791
diff
changeset
|
2585 | (prof && *prof) ? away_subs(prof, gc->username) : NULL, |
|
2799
250c4ae590a0
[gaim-migrate @ 2812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2797
diff
changeset
|
2586 | (prof && *prof) ? "<BR><HR><BR>" : NULL, |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2587 | NULL); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2588 | } |
| 2920 | 2589 | } else if (infotype == AIM_GETINFO_CAPABILITIES) { |
| 2590 | g_show_info_text(gc, info->sn, 2, | |
| 2591 | header, | |
| 2592 | "<i>", _("Client Capabilities: "), | |
| 2593 | caps_string(info->capabilities), | |
| 2594 | "</i>", | |
| 2595 | legend, | |
| 2596 | NULL); | |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2597 | } else { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2598 | g_show_info_text(gc, info->sn, 1, |
|
2797
860827047ac5
[gaim-migrate @ 2810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2791
diff
changeset
|
2599 | (prof && *prof) ? away_subs(prof, gc->username) : |
|
860827047ac5
[gaim-migrate @ 2810]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2791
diff
changeset
|
2600 | _("<i>No Information Provided</i>"), |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2601 | legend, |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2602 | NULL); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
2603 | } |
| 2086 | 2604 | |
| 2605 | return 1; | |
| 2606 | } | |
| 2607 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2608 | static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2609 | char *msg; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2610 | fu16_t id; |
| 2086 | 2611 | va_list ap; |
| 2612 | char buildbuf[150]; | |
| 2613 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2614 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2615 | id = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2616 | msg = va_arg(ap, char *); |
| 2617 | va_end(ap); | |
| 2618 | ||
| 2619 | aim_getbuildstring(buildbuf, sizeof(buildbuf)); | |
| 2620 | ||
| 2621 | debug_printf("MOTD: %s (%d)\n", msg ? msg : "Unknown", id); | |
|
2092
f56061012e3c
[gaim-migrate @ 2102]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
2622 | if (id < 4) |
| 3427 | 2623 | do_error_dialog(_("Your AIM connection may be lost."), NULL, GAIM_WARNING); |
| 2086 | 2624 | |
| 2625 | return 1; | |
| 2626 | } | |
| 2627 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2628 | static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2629 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2630 | fu16_t type; |
| 2086 | 2631 | struct gaim_connection *gc = sess->aux_data; |
| 2632 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 2633 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2634 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2635 | type = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2636 | |
| 2637 | switch(type) { | |
| 2638 | case 0x0002: { | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2639 | fu8_t maxrooms; |
| 2086 | 2640 | struct aim_chat_exchangeinfo *exchanges; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2641 | int exchangecount, i; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2642 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2643 | maxrooms = (fu8_t)va_arg(ap, unsigned int); |
| 2086 | 2644 | exchangecount = va_arg(ap, int); |
| 2645 | exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
| 2646 | va_end(ap); | |
| 2647 | ||
| 2648 | debug_printf("chat info: Chat Rights:\n"); | |
| 2649 | debug_printf("chat info: \tMax Concurrent Rooms: %d\n", maxrooms); | |
| 2650 | debug_printf("chat info: \tExchange List: (%d total)\n", exchangecount); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2651 | for (i = 0; i < exchangecount; i++) |
| 2931 | 2652 | debug_printf("chat info: \t\t%d %s\n", exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2653 | while (odata->create_rooms) { |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2654 | struct create_room *cr = odata->create_rooms->data; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2655 | debug_printf("creating room %s\n", cr->name); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2656 | aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2657 | g_free(cr->name); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2658 | odata->create_rooms = g_slist_remove(odata->create_rooms, cr); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
2659 | g_free(cr); |
| 2086 | 2660 | } |
| 2661 | } | |
| 2662 | break; | |
| 2663 | case 0x0008: { | |
| 2664 | char *fqcn, *name, *ck; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2665 | fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2666 | fu8_t createperms; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2667 | fu32_t createtime; |
| 2086 | 2668 | |
| 2669 | fqcn = va_arg(ap, char *); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2670 | instance = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2671 | exchange = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2672 | flags = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2673 | createtime = va_arg(ap, fu32_t); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2674 | maxmsglen = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2675 | maxoccupancy = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2676 | createperms = (fu8_t)va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2677 | unknown = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2678 | name = va_arg(ap, char *); |
| 2679 | ck = va_arg(ap, char *); | |
| 2680 | va_end(ap); | |
| 2681 | ||
| 2682 | debug_printf("created room: %s %d %d %d %lu %d %d %d %d %s %s\n", | |
| 2683 | fqcn, | |
| 2684 | exchange, instance, flags, | |
| 2685 | createtime, | |
| 2686 | maxmsglen, maxoccupancy, createperms, unknown, | |
| 2687 | name, ck); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2688 | aim_chat_join(odata->sess, odata->conn, exchange, ck, instance); |
| 2086 | 2689 | } |
| 2690 | break; | |
| 2691 | default: | |
| 2692 | va_end(ap); | |
| 2693 | debug_printf("chatnav info: unknown type (%04x)\n", type); | |
| 2694 | break; | |
| 2695 | } | |
| 2696 | return 1; | |
| 2697 | } | |
| 2698 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2699 | static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2700 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2701 | int count, i; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2702 | aim_userinfo_t *info; |
| 2086 | 2703 | struct gaim_connection *g = sess->aux_data; |
| 2704 | ||
| 2705 | struct chat_connection *c = NULL; | |
| 2706 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2707 | va_start(ap, fr); |
| 2086 | 2708 | count = va_arg(ap, int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2709 | info = va_arg(ap, aim_userinfo_t *); |
| 2086 | 2710 | va_end(ap); |
| 2711 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2712 | c = find_oscar_chat_by_conn(g, fr->conn); |
| 2086 | 2713 | if (!c) |
| 2714 | return 1; | |
| 2715 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2716 | for (i = 0; i < count; i++) |
| 3708 | 2717 | add_chat_buddy(c->cnv, info[i].sn, NULL); |
| 2086 | 2718 | |
| 2719 | return 1; | |
| 2720 | } | |
| 2721 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2722 | static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2723 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2724 | int count, i; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2725 | aim_userinfo_t *info; |
| 2086 | 2726 | struct gaim_connection *g = sess->aux_data; |
| 2727 | ||
| 2728 | struct chat_connection *c = NULL; | |
| 2729 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2730 | va_start(ap, fr); |
| 2086 | 2731 | count = va_arg(ap, int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2732 | info = va_arg(ap, aim_userinfo_t *); |
| 2086 | 2733 | va_end(ap); |
| 2734 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2735 | c = find_oscar_chat_by_conn(g, fr->conn); |
| 2086 | 2736 | if (!c) |
| 2737 | return 1; | |
| 2738 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2739 | for (i = 0; i < count; i++) |
|
2820
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2817
diff
changeset
|
2740 | remove_chat_buddy(c->cnv, info[i].sn, NULL); |
| 2086 | 2741 | |
| 2742 | return 1; | |
| 2743 | } | |
| 2744 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2745 | static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2746 | va_list ap; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2747 | aim_userinfo_t *userinfo; |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2748 | struct aim_chat_roominfo *roominfo; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2749 | char *roomname; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2750 | int usercount; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2751 | char *roomdesc; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2752 | fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2753 | fu32_t creationtime; |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2754 | struct gaim_connection *gc = sess->aux_data; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2755 | struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2756 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2757 | va_start(ap, fr); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2758 | roominfo = va_arg(ap, struct aim_chat_roominfo *); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2759 | roomname = va_arg(ap, char *); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2760 | usercount= va_arg(ap, int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2761 | userinfo = va_arg(ap, aim_userinfo_t *); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2762 | roomdesc = va_arg(ap, char *); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2763 | unknown_c9 = (fu16_t)va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2764 | creationtime = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2765 | maxmsglen = (fu16_t)va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2766 | unknown_d2 = (fu16_t)va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2767 | unknown_d5 = (fu16_t)va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2768 | maxvisiblemsglen = (fu16_t)va_arg(ap, int); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2769 | va_end(ap); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2770 | |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2771 | debug_printf("inside chat_info_update (maxmsglen = %d, maxvislen = %d)\n", |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2772 | maxmsglen, maxvisiblemsglen); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2773 | |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2774 | ccon->maxlen = maxmsglen; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2775 | ccon->maxvis = maxvisiblemsglen; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2776 | |
| 2086 | 2777 | return 1; |
| 2778 | } | |
| 2779 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2780 | static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2781 | va_list ap; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2782 | aim_userinfo_t *info; |
| 2086 | 2783 | char *msg; |
| 2784 | struct gaim_connection *gc = sess->aux_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2785 | struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
| 2086 | 2786 | char *tmp; |
| 2787 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2788 | va_start(ap, fr); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2789 | info = va_arg(ap, aim_userinfo_t *); |
| 2086 | 2790 | msg = va_arg(ap, char *); |
| 2791 | ||
| 2792 | tmp = g_malloc(BUF_LONG); | |
| 2793 | g_snprintf(tmp, BUF_LONG, "%s", msg); | |
| 2794 | serv_got_chat_in(gc, ccon->id, info->sn, 0, tmp, time((time_t)NULL)); | |
| 2795 | g_free(tmp); | |
| 2796 | ||
| 2797 | return 1; | |
| 2798 | } | |
| 2799 | ||
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2800 | static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2801 | va_list ap; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2802 | struct gaim_connection *gc = sess->aux_data; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2803 | struct aim_emailinfo *emailinfo; |
| 3725 | 2804 | int havenewmail; |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2805 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2806 | va_start(ap, fr); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2807 | emailinfo = va_arg(ap, struct aim_emailinfo *); |
| 3725 | 2808 | havenewmail = va_arg(ap, int); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2809 | va_end(ap); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2810 | |
| 3725 | 2811 | if (emailinfo) { |
| 2812 | debug_printf("Got email info. webmail address for screenname@%s is %s, new email: %hd, number new: %d, flag is %d, havenewmail is %d\n", emailinfo->domain, emailinfo->url, emailinfo->unread, emailinfo->nummsgs, emailinfo->flag, havenewmail); | |
| 2813 | if (emailinfo->unread) { | |
| 2814 | if (havenewmail) | |
| 2815 | connection_has_mail(gc, emailinfo->nummsgs ? emailinfo->nummsgs : -1, NULL, NULL, emailinfo->url); | |
| 2816 | } else | |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2817 | connection_has_mail(gc, 0, NULL, NULL, emailinfo->url); |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2818 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2819 | |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2820 | return 1; |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2821 | } |
|
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
2822 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2823 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2824 | * Recieved in response to an IM sent with the AIM_IMFLAGS_ACK option. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2825 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2826 | static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2827 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2828 | fu16_t type; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2829 | char *sn; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2830 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2831 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2832 | type = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 2833 | sn = va_arg(ap, char *); |
| 2834 | va_end(ap); | |
| 2835 | ||
| 2836 | debug_printf("Sent message to %s.\n", sn); | |
| 2837 | ||
| 2838 | return 1; | |
| 2839 | } | |
| 2840 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2841 | static int gaim_parse_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2842 | static const char *codes[5] = { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2843 | "invalid", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2844 | "change", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2845 | "warning", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2846 | "limit", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2847 | "limit cleared", |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2848 | }; |
| 2086 | 2849 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2850 | fu16_t code, rateclass; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2851 | fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2852 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2853 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2854 | code = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2855 | rateclass= (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2856 | windowsize = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2857 | clear = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2858 | alert = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2859 | limit = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2860 | disconnect = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2861 | currentavg = (fu32_t)va_arg(ap, unsigned long); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2862 | maxavg = (fu32_t)va_arg(ap, unsigned long); |
| 2086 | 2863 | va_end(ap); |
| 2864 | ||
| 2865 | debug_printf("rate %s (paramid 0x%04lx): curavg = %ld, maxavg = %ld, alert at %ld, " | |
| 2866 | "clear warning at %ld, limit at %ld, disconnect at %ld (window size = %ld)\n", | |
| 2867 | (code < 5) ? codes[code] : codes[0], | |
| 2868 | rateclass, | |
| 2869 | currentavg, maxavg, | |
| 2870 | alert, clear, | |
| 2871 | limit, disconnect, | |
| 2872 | windowsize); | |
| 2873 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2874 | /* XXX fix these values */ |
| 2086 | 2875 | if (code == AIM_RATE_CODE_CHANGE) { |
| 2876 | if (currentavg >= clear) | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2877 | aim_conn_setlatency(fr->conn, 0); |
| 2086 | 2878 | } else if (code == AIM_RATE_CODE_WARNING) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2879 | aim_conn_setlatency(fr->conn, windowsize/4); |
|
2909
2935ea93dfe7
[gaim-migrate @ 2922]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2906
diff
changeset
|
2880 | } else if (code == AIM_RATE_CODE_LIMIT) { |
| 3427 | 2881 | do_error_dialog(_("Rate limiting error."), |
| 2882 | _("The last message was not sent because you are over the rate limit. " | |
| 2883 | "Please wait 10 seconds and try again."), GAIM_ERROR); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2884 | aim_conn_setlatency(fr->conn, windowsize/2); |
| 2086 | 2885 | } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2886 | aim_conn_setlatency(fr->conn, 0); |
| 2086 | 2887 | } |
| 2888 | ||
| 2889 | return 1; | |
| 2890 | } | |
| 2891 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2892 | static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 2893 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2894 | fu16_t newevil; |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2895 | aim_userinfo_t *userinfo; |
| 2086 | 2896 | struct gaim_connection *gc = sess->aux_data; |
| 2897 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2898 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2899 | newevil = (fu16_t)va_arg(ap, unsigned int); |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2411
diff
changeset
|
2900 | userinfo = va_arg(ap, aim_userinfo_t *); |
| 2086 | 2901 | va_end(ap); |
| 2902 | ||
| 2903 | serv_got_eviled(gc, (userinfo && userinfo->sn[0]) ? userinfo->sn : NULL, newevil / 10); | |
| 2904 | ||
| 2905 | return 1; | |
| 2906 | } | |
| 2907 | ||
|
2507
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2908 | static int gaim_selfinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2909 | va_list ap; |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2910 | aim_userinfo_t *info; |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2911 | struct gaim_connection *gc = sess->aux_data; |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2912 | |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2913 | va_start(ap, fr); |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2914 | info = va_arg(ap, aim_userinfo_t *); |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2915 | va_end(ap); |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2916 | |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2917 | gc->evil = info->warnlevel/10; |
|
2698
29d3c1727fd1
[gaim-migrate @ 2711]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2689
diff
changeset
|
2918 | /* gc->correction_time = (info->onlinesince - gc->login_time); */ |
|
2507
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2919 | |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2920 | return 1; |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2921 | } |
|
4f2c8913240e
[gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2501
diff
changeset
|
2922 | |
| 2675 | 2923 | static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2924 | struct gaim_connection *gc = sess->aux_data; |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2925 | struct oscar_data *od = gc->proto_data; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2926 | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
2927 | aim_reqpersonalinfo(sess, fr->conn); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2928 | aim_bos_reqlocaterights(sess, fr->conn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2929 | aim_bos_reqbuddyrights(sess, fr->conn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2930 | |
|
2673
84bb25b76700
[gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2672
diff
changeset
|
2931 | aim_reqicbmparams(sess); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2932 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2933 | aim_bos_reqrights(sess, fr->conn); |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2934 | if (od->icq) { |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2935 | aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2936 | aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2937 | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
2938 | } |
| 2086 | 2939 | |
| 2940 | return 1; | |
| 2941 | } | |
| 2942 | ||
| 2675 | 2943 | static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2647 | 2944 | struct gaim_connection *gc = sess->aux_data; |
| 2945 | struct oscar_data *od = gc->proto_data; | |
| 2946 | ||
| 2672 | 2947 | aim_clientready(sess, fr->conn); |
| 2675 | 2948 | debug_printf("connected to admin\n"); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2949 | |
| 2647 | 2950 | if (od->chpass) { |
| 2951 | debug_printf("changing password\n"); | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
2952 | aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
| 2647 | 2953 | g_free(od->oldp); |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2954 | od->oldp = NULL; |
| 2647 | 2955 | g_free(od->newp); |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2956 | od->newp = NULL; |
| 2647 | 2957 | od->chpass = FALSE; |
| 2958 | } | |
| 2979 | 2959 | if (od->setnick) { |
| 2960 | debug_printf("formatting screenname\n"); | |
| 2961 | aim_admin_setnick(sess, fr->conn, od->newsn); | |
| 2962 | g_free(od->newsn); | |
| 2963 | od->newsn = NULL; | |
| 2964 | od->setnick = FALSE; | |
| 2965 | } | |
| 2647 | 2966 | if (od->conf) { |
| 2967 | debug_printf("confirming account\n"); | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
2968 | aim_admin_reqconfirm(sess, fr->conn); |
| 2647 | 2969 | od->conf = FALSE; |
| 2970 | } | |
| 2971 | if (od->reqemail) { | |
| 2972 | debug_printf("requesting email\n"); | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
2973 | aim_admin_getinfo(sess, fr->conn, 0x0011); |
| 2647 | 2974 | od->reqemail = FALSE; |
| 2975 | } | |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2976 | if (od->setemail) { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2977 | debug_printf("setting email\n"); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2978 | aim_admin_setemail(sess, fr->conn, od->email); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2979 | g_free(od->email); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2980 | od->setemail = FALSE; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
2981 | } |
| 2647 | 2982 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2983 | return 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2984 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2985 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2986 | static int gaim_icbm_param_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2987 | struct aim_icbmparameters *params; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2988 | va_list ap; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2989 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
2990 | va_start(ap, fr); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2991 | params = va_arg(ap, struct aim_icbmparameters *); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2992 | va_end(ap); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2993 | |
|
2427
761801814c88
[gaim-migrate @ 2440]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
2994 | /* evidently this crashes on solaris. i have no clue why |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2995 | debug_printf("ICBM Parameters: maxchannel = %d, default flags = 0x%08lx, max msg len = %d, " |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2996 | "max sender evil = %f, max receiver evil = %f, min msg interval = %ld\n", |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2997 | params->maxchan, params->flags, params->maxmsglen, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2998 | ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2999 | params->minmsginterval); |
|
2427
761801814c88
[gaim-migrate @ 2440]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
3000 | */ |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3001 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3002 | /* Maybe senderwarn and recverwarn should be user preferences... */ |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3003 | params->flags = 0x0000000b; |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3004 | params->maxmsglen = 8000; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3005 | params->minmsginterval = 0; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3006 | |
|
2673
84bb25b76700
[gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2672
diff
changeset
|
3007 | aim_seticbmparam(sess, params); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3008 | |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3009 | return 1; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3010 | } |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3011 | |
| 2993 | 3012 | static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
| 3013 | { | |
| 3014 | va_list ap; | |
| 3015 | fu16_t maxsiglen; | |
| 3016 | struct gaim_connection *gc = sess->aux_data; | |
| 3017 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 3018 | ||
| 3019 | va_start(ap, fr); | |
| 3020 | maxsiglen = va_arg(ap, int); | |
| 3021 | va_end(ap); | |
| 3022 | ||
| 3023 | debug_printf("locate rights: max sig len = %d\n", maxsiglen); | |
| 3024 | ||
| 3025 | odata->rights.maxsiglen = odata->rights.maxawaymsglen = (guint)maxsiglen; | |
| 3026 | ||
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3027 | if (odata->icq) |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3028 | aim_bos_setprofile(sess, fr->conn, NULL, NULL, caps_icq); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3029 | else |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3030 | aim_bos_setprofile(sess, fr->conn, gc->user->user_info, NULL, caps_aim); |
| 2993 | 3031 | |
| 3032 | return 1; | |
| 3033 | } | |
| 3034 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3035 | static int gaim_parse_buddyrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
3036 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3037 | fu16_t maxbuddies, maxwatchers; |
| 2993 | 3038 | struct gaim_connection *gc = sess->aux_data; |
| 3039 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3040 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3041 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3042 | maxbuddies = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3043 | maxwatchers = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 3044 | va_end(ap); |
| 3045 | ||
| 3046 | debug_printf("buddy list rights: Max buddies = %d / Max watchers = %d\n", maxbuddies, maxwatchers); | |
| 3047 | ||
| 2993 | 3048 | odata->rights.maxbuddies = (guint)maxbuddies; |
| 3049 | odata->rights.maxwatchers = (guint)maxwatchers; | |
| 3050 | ||
| 2086 | 3051 | return 1; |
| 3052 | } | |
| 3053 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3054 | static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3055 | fu16_t maxpermits, maxdenies; |
| 2086 | 3056 | va_list ap; |
| 2993 | 3057 | struct gaim_connection *gc = sess->aux_data; |
| 3058 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 2086 | 3059 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3060 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3061 | maxpermits = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3062 | maxdenies = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 3063 | va_end(ap); |
| 3064 | ||
| 3065 | debug_printf("BOS rights: Max permit = %d / Max deny = %d\n", maxpermits, maxdenies); | |
| 3066 | ||
| 2993 | 3067 | odata->rights.maxpermits = (guint)maxpermits; |
| 3068 | odata->rights.maxdenies = (guint)maxdenies; | |
| 3069 | ||
| 3070 | account_online(gc); | |
| 3071 | serv_finish_login(gc); | |
| 3072 | ||
| 3073 | if (bud_list_cache_exists(gc)) | |
| 3074 | do_import(gc, NULL); | |
| 3075 | ||
| 3076 | debug_printf("buddy list loaded\n"); | |
| 3077 | ||
| 2672 | 3078 | aim_clientready(sess, fr->conn); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3079 | |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3080 | aim_icq_reqofflinemsgs(sess); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3081 | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
3082 | aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
3083 | aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); |
| 2086 | 3084 | |
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3085 | if (!odata->icq) { |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3086 | debug_printf("ssi: requesting ssi list\n"); |
| 3092 | 3087 | aim_ssi_reqrights(sess, fr->conn); |
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3088 | aim_ssi_reqdata(sess, fr->conn, sess->ssi.timestamp, sess->ssi.revision); |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3089 | } |
| 2991 | 3090 | |
| 2086 | 3091 | return 1; |
| 3092 | } | |
| 3093 | ||
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3094 | static int gaim_offlinemsg(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3095 | va_list ap; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3096 | struct aim_icq_offlinemsg *msg; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3097 | struct gaim_connection *gc = sess->aux_data; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3098 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3099 | va_start(ap, fr); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3100 | msg = va_arg(ap, struct aim_icq_offlinemsg *); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3101 | va_end(ap); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3102 | |
| 3141 | 3103 | debug_printf("Received offline message of type 0x%04x\n", msg->type); |
| 3104 | ||
| 3105 | switch (msg->type) { | |
| 3106 | case 0x0001: { /* Basic offline message */ | |
| 3107 | char sender[32]; | |
| 3108 | char *dialog_msg = g_strdup(msg->msg); | |
| 3109 | time_t t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); | |
| 3110 | g_snprintf(sender, sizeof(sender), "%lu", msg->sender); | |
| 3111 | strip_linefeed(dialog_msg); | |
| 3112 | serv_got_im(gc, sender, dialog_msg, 0, t, -1); | |
| 3113 | g_free(dialog_msg); | |
| 3114 | } break; | |
| 3115 | ||
| 3116 | case 0x0006: { /* Authorization request */ | |
| 3117 | gaim_icq_authask(gc, msg->sender, msg->msg); | |
| 3118 | } break; | |
| 3119 | ||
| 3120 | case 0x0007: { /* Someone has denied you authorization */ | |
| 3121 | char *dialog_msg; | |
| 3159 | 3122 | dialog_msg = g_strdup_printf(_("The user %lu has denied your request to add them to your contact list for the following reason:\n%s"), msg->sender, msg->msg ? msg->msg : _("No reason given.")); |
| 3427 | 3123 | do_error_dialog(_("ICQ Authorization denied"), dialog_msg, GAIM_ERROR); |
| 3141 | 3124 | g_free(dialog_msg); |
| 3125 | } break; | |
| 3126 | ||
| 3127 | case 0x0008: { /* Someone has granted you authorization */ | |
| 3128 | char *dialog_msg; | |
| 3159 | 3129 | dialog_msg = g_strdup_printf(_("The user %lu has granted your request to add them to your contact list."), msg->sender); |
| 3427 | 3130 | do_error_dialog(_("ICQ Authorization Granted"), dialog_msg, GAIM_INFO); |
| 3141 | 3131 | g_free(dialog_msg); |
| 3132 | } break; | |
| 3133 | ||
| 3134 | case 0x0012: { | |
| 3135 | /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ | |
| 3136 | } break; | |
| 3137 | ||
| 3138 | default: { | |
| 3139 | debug_printf("unknown offline message type 0x%04x\n", msg->type); | |
| 3140 | } | |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3141 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3142 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3143 | return 1; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3144 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3145 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3146 | static int gaim_offlinemsgdone(aim_session_t *sess, aim_frame_t *fr, ...) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3147 | { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3148 | aim_icq_ackofflinemsgs(sess); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3149 | return 1; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3150 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2704
diff
changeset
|
3151 | |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3152 | static int gaim_simpleinfo(aim_session_t *sess, aim_frame_t *fr, ...) |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3153 | { |
|
2773
3f711c709792
[gaim-migrate @ 2786]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2768
diff
changeset
|
3154 | struct gaim_connection *gc = sess->aux_data; |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3155 | struct buddy *budlight; |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3156 | va_list ap; |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3157 | struct aim_icq_simpleinfo *info; |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3158 | char buf[16 * 1024]; |
|
2773
3f711c709792
[gaim-migrate @ 2786]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2768
diff
changeset
|
3159 | char who[16]; |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3160 | |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3161 | va_start(ap, fr); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3162 | info = va_arg(ap, struct aim_icq_simpleinfo *); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3163 | va_end(ap); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3164 | |
|
2773
3f711c709792
[gaim-migrate @ 2786]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2768
diff
changeset
|
3165 | g_snprintf(who, sizeof who, "%lu", info->uin); |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3166 | g_snprintf(buf, sizeof buf, |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3167 | "<B>UIN:</B> %lu<BR>" |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3168 | "<B>Nick:</B> %s<BR>" |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3169 | "<B>Name:</B> %s %s<BR>" |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3170 | "<B>Email:</B> %s<BR>\n", |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3171 | info->uin, |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3172 | info->nick, |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3173 | info->first, info->last, |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3174 | info->email); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3175 | |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3176 | /* If the contact is away, then we also want to get their status message |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3177 | * and show it in the same window as info. g_show_info_text gets the status |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3178 | * message if the third arg is 0 (this seems really gross to me). The |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3179 | * parse-icq-status-message function knows if it is putting it's message in |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3180 | * an info window because the name will _not_ be in od->evilhack. For getting |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3181 | * only the away message the contact's UIN is put in od->evilhack. */ |
| 3279 | 3182 | if ((budlight = find_buddy(gc, who))) { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3183 | if ((budlight->uc >> 16) & (AIM_ICQ_STATE_AWAY || AIM_ICQ_STATE_DND || AIM_ICQ_STATE_OUT || AIM_ICQ_STATE_BUSY || AIM_ICQ_STATE_CHAT)) { |
|
3270
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3184 | if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3185 | g_show_info_text(gc, who, 0, buf, NULL); |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3186 | else { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3187 | char *state_msg = gaim_icq_status((budlight->uc & 0xffff0000) >> 16); |
|
3270
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3188 | g_show_info_text(gc, who, 2, buf, "<B>Status:</B> ", state_msg, "<BR>\n<HR><BR><I>Remote client does not support sending status messages.</I><BR>\n", NULL); |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3189 | free(state_msg); |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3190 | } |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3191 | } else { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3192 | char *state_msg = gaim_icq_status((budlight->uc & 0xffff0000) >> 16); |
|
3270
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3193 | g_show_info_text(gc, who, 2, buf, "<B>Status:</B> ", state_msg, NULL); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3194 | free(state_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3195 | } |
|
3270
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3196 | } else |
|
e7767f467498
[gaim-migrate @ 3288]
Mark Doliner <markdoliner@pidgin.im>
parents:
3267
diff
changeset
|
3197 | g_show_info_text(gc, who, 2, buf, NULL); |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3198 | |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3199 | return 1; |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3200 | } |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3201 | |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3202 | static int gaim_popup(aim_session_t *sess, aim_frame_t *fr, ...) |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3203 | { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3204 | char *msg, *url; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3205 | fu16_t wid, hei, delay; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3206 | va_list ap; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3207 | |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3208 | va_start(ap, fr); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3209 | msg = va_arg(ap, char *); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3210 | url = va_arg(ap, char *); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3211 | wid = (fu16_t)va_arg(ap, int); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3212 | hei = (fu16_t)va_arg(ap, int); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3213 | delay = (fu16_t)va_arg(ap, int); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3214 | va_end(ap); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3215 | |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3216 | serv_got_popup(msg, url, wid, hei); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3217 | |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3218 | return 1; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3219 | } |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
3220 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3221 | static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 3222 | va_list ap; |
| 3223 | char *address, *SNs; | |
| 3224 | int i, num; | |
| 3225 | char *buf; | |
| 3226 | int at = 0, len; | |
| 3227 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3228 | va_start(ap, fr); |
| 2086 | 3229 | address = va_arg(ap, char *); |
| 3230 | num = va_arg(ap, int); | |
| 3231 | SNs = va_arg(ap, char *); | |
| 3232 | va_end(ap); | |
| 3233 | ||
| 3234 | len = num * (MAXSNLEN + 1) + 1024; | |
| 3235 | buf = g_malloc(len); | |
| 3236 | at += g_snprintf(buf + at, len - at, "<B>%s has the following screen names:</B><BR>", address); | |
| 3237 | for (i = 0; i < num; i++) | |
| 3238 | at += g_snprintf(buf + at, len - at, "%s<BR>", &SNs[i * (MAXSNLEN + 1)]); | |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3239 | g_show_info_text(NULL, NULL, 2, buf, NULL); |
| 2086 | 3240 | g_free(buf); |
| 3241 | ||
| 3242 | return 1; | |
| 3243 | } | |
| 3244 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3245 | static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 3246 | va_list ap; |
| 3247 | char *address; | |
| 3248 | char buf[BUF_LONG]; | |
| 3249 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3250 | va_start(ap, fr); |
| 2086 | 3251 | address = va_arg(ap, char *); |
| 3252 | va_end(ap); | |
| 3253 | ||
| 3254 | g_snprintf(buf, sizeof(buf), "No results found for email address %s", address); | |
| 3427 | 3255 | do_error_dialog(buf, NULL, GAIM_ERROR); |
| 2086 | 3256 | |
| 3257 | return 1; | |
| 3258 | } | |
| 3259 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3260 | static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3261 | fu16_t status; |
| 2086 | 3262 | va_list ap; |
| 3263 | char msg[256]; | |
| 3264 | struct gaim_connection *gc = sess->aux_data; | |
| 3265 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3266 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3267 | status = (fu16_t)va_arg(ap, unsigned int); /* status code of confirmation request */ |
| 2086 | 3268 | va_end(ap); |
| 3269 | ||
| 3270 | debug_printf("account confirmation returned status 0x%04x (%s)\n", status, | |
| 3271 | status ? "email sent" : "unknown"); | |
| 3272 | if (status) { | |
| 3273 | g_snprintf(msg, sizeof(msg), "You should receive an email asking to confirm %s.", | |
| 3274 | gc->username); | |
| 3427 | 3275 | do_error_dialog("Account confirmation requested.", msg, GAIM_INFO); |
| 2086 | 3276 | } |
| 3277 | ||
| 3278 | return 1; | |
| 3279 | } | |
| 3280 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3281 | static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3282 | int change, str; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3283 | fu16_t perms, type, length; |
| 2086 | 3284 | char *val; |
| 3285 | va_list ap; | |
| 3286 | char buf[BUF_LONG]; | |
| 3287 | struct gaim_connection *gc = sess->aux_data; | |
| 3288 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3289 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3290 | change = va_arg(ap, int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3291 | perms = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3292 | type = (fu16_t)va_arg(ap, unsigned int); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3293 | length = (fu16_t)va_arg(ap, unsigned int); |
| 2086 | 3294 | val = va_arg(ap, char *); |
| 3295 | str = va_arg(ap, int); | |
| 3296 | va_end(ap); | |
| 3297 | ||
| 3298 | debug_printf("info%s: perms = %d, type = %x, length = %d, val = %s\n", | |
| 3299 | change ? " change" : "", perms, type, length, str ? val : "(not string)"); | |
| 3300 | ||
| 3186 | 3301 | /* XXX Do something for other types too. */ |
| 3302 | if ((type == 0x0011) && str && length) { | |
| 2086 | 3303 | g_snprintf(buf, sizeof(buf), "The email address for %s is %s", gc->username, val); |
| 3427 | 3304 | do_error_dialog(buf, NULL, GAIM_INFO); |
| 2086 | 3305 | } |
| 3306 | ||
| 3307 | return 1; | |
| 3308 | } | |
| 3309 | ||
| 3310 | static void oscar_keepalive(struct gaim_connection *gc) { | |
| 3311 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
| 3312 | aim_flap_nop(odata->sess, odata->conn); | |
| 3313 | } | |
| 3314 | ||
| 3001 | 3315 | static int oscar_send_typing(struct gaim_connection *gc, char *name, int typing) { |
| 2993 | 3316 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; |
| 3317 | struct direct_im *dim = find_direct_im(odata, name); | |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3318 | if (dim) |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3319 | aim_send_typing(odata->sess, dim->conn, typing); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3320 | else { |
|
3600
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
3321 | char *who = normalize(name); |
|
776215788f43
[gaim-migrate @ 3702]
Mark Doliner <markdoliner@pidgin.im>
parents:
3596
diff
changeset
|
3322 | if (g_hash_table_lookup(odata->supports_tn, who)) { |
|
3596
94fcf584c358
[gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents:
3595
diff
changeset
|
3323 | if (typing == TYPING) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3324 | aim_mtn_send(odata->sess, 0x0001, name, 0x0002); |
|
3596
94fcf584c358
[gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents:
3595
diff
changeset
|
3325 | else if (typing == TYPED) |
|
94fcf584c358
[gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents:
3595
diff
changeset
|
3326 | aim_mtn_send(odata->sess, 0x0001, name, 0x0001); |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3327 | else |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3328 | aim_mtn_send(odata->sess, 0x0001, name, 0x0000); |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3329 | } |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3330 | } |
| 2993 | 3331 | return 0; |
| 3332 | } | |
| 3048 | 3333 | static void oscar_ask_direct_im(struct gaim_connection *gc, char *name); |
| 2993 | 3334 | |
| 3033 | 3335 | static int oscar_send_im(struct gaim_connection *gc, char *name, char *message, int len, int imflags) { |
| 2086 | 3336 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; |
| 3337 | struct direct_im *dim = find_direct_im(odata, name); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2297
diff
changeset
|
3338 | int ret = 0; |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3339 | GError *err = NULL; |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3340 | |
| 2086 | 3341 | if (dim) { |
| 3009 | 3342 | if (dim->connected) { /* If we're not connected yet, send through server */ |
| 3034 | 3343 | ret = aim_send_im_direct(odata->sess, dim->conn, message, len == -1 ? strlen(message) : len); |
| 3009 | 3344 | if (ret == 0) |
| 3345 | return 1; | |
| 3346 | else return ret; | |
| 3347 | } | |
| 3008 | 3348 | debug_printf("Direct IM pending, but not connected; sending through server\n"); |
| 3044 | 3349 | } else if (len != -1) { |
| 3350 | /* Trying to send an IM image outside of a direct connection. */ | |
| 3351 | oscar_ask_direct_im(gc, name); | |
| 3352 | return -ENOTCONN; | |
| 3353 | } | |
| 3008 | 3354 | if (imflags & IM_FLAG_AWAY) { |
| 3355 | ret = aim_send_im(odata->sess, name, AIM_IMFLAGS_AWAY, message); | |
| 2086 | 3356 | } else { |
| 3008 | 3357 | struct aim_sendimext_args args; |
| 3358 | GSList *h = odata->hasicons; | |
| 3359 | struct icon_req *ir = NULL; | |
| 3360 | char *who = normalize(name); | |
| 3361 | struct stat st; | |
| 3642 | 3362 | int i, len; |
| 3008 | 3363 | |
| 3364 | args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; | |
| 3365 | if (odata->icq) | |
| 3366 | args.flags |= AIM_IMFLAGS_OFFLINE; | |
| 3367 | ||
| 3368 | args.features = gaim_features; | |
| 3369 | args.featureslen = sizeof(gaim_features); | |
| 3370 | ||
| 3371 | while (h) { | |
| 3372 | ir = h->data; | |
| 3373 | if (ir->request && !strcmp(who, ir->user)) | |
| 3374 | break; | |
| 3375 | h = h->next; | |
| 2086 | 3376 | } |
| 3008 | 3377 | if (h) { |
| 3378 | ir->request = FALSE; | |
| 3379 | args.flags |= AIM_IMFLAGS_BUDDYREQ; | |
| 3380 | debug_printf("sending buddy icon request with message\n"); | |
| 3381 | } | |
| 3382 | ||
| 3383 | if (gc->user->iconfile[0] && !stat(gc->user->iconfile, &st)) { | |
| 3384 | FILE *file = fopen(gc->user->iconfile, "r"); | |
| 3385 | if (file) { | |
| 3386 | char *buf = g_malloc(st.st_size); | |
| 3387 | fread(buf, 1, st.st_size, file); | |
| 3388 | ||
| 3389 | args.iconlen = st.st_size; | |
| 3390 | args.iconsum = aim_iconsum(buf, st.st_size); | |
| 3391 | args.iconstamp = st.st_mtime; | |
| 3392 | ||
| 3393 | args.flags |= AIM_IMFLAGS_HASICON; | |
| 3394 | debug_printf("Claiming to have an icon.\n"); | |
| 3395 | ||
| 3396 | fclose(file); | |
| 3397 | g_free(buf); | |
| 2086 | 3398 | } |
| 3399 | } | |
| 3008 | 3400 | |
| 3401 | args.destsn = name; | |
| 3642 | 3402 | |
| 3403 | /* Determine how we can send this message. Per the | |
| 3404 | * warnings elsewhere in this file, these little | |
| 3405 | * checks determine the simplest encoding we can use | |
| 3406 | * for a given message send using it. */ | |
| 3407 | len = strlen(message); | |
| 3408 | i = 0; | |
| 3409 | while (message[i]) { | |
| 3410 | if ((unsigned char)message[i] > 0x7f) { | |
| 3411 | /* not ASCII! */ | |
| 3412 | args.flags |= AIM_IMFLAGS_ISO_8859_1; | |
| 3413 | break; | |
| 3414 | } | |
| 3415 | i++; | |
| 3416 | } | |
| 3417 | while (message[i]) { | |
| 3418 | /* ISO-8859-1 is 0x00-0xbf in the first byte | |
| 3419 | * followed by 0xc0-0xc3 in the second */ | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3420 | if ((unsigned char)message[i] < 0x80 || |
| 3660 | 3421 | (((unsigned char)message[i] & 0xc0) == 0x80 && |
| 3422 | ((unsigned char)message[i + 1] & 0xfc) == 0xc0)) { | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3423 | i++; |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3424 | continue; |
| 3642 | 3425 | } |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3426 | args.flags ^= AIM_IMFLAGS_ISO_8859_1; |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3427 | args.flags |= AIM_IMFLAGS_UNICODE; |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3428 | break; |
| 3642 | 3429 | } |
| 3430 | if (args.flags & AIM_IMFLAGS_UNICODE) { | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3431 | args.msg = g_convert(message, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3432 | if (err) { |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3433 | debug_printf("Error converting a unicode message: %s\n", err->message); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3434 | debug_printf("This really shouldn't happen!\n"); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3435 | /* We really shouldn't try to send the |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3436 | * IM now, but I'm not sure what to do */ |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3437 | } |
| 3642 | 3438 | } else if (args.flags & AIM_IMFLAGS_UNICODE) { |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3439 | args.msg = g_convert(message, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3440 | if (err) { |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3441 | debug_printf("conversion error: %s\n", err->message); |
| 3642 | 3442 | debug_printf("Someone tell Ethan his 8859-1 detection is wrong\n"); |
| 3443 | args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; | |
| 3444 | len = strlen(message); | |
|
3659
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3445 | args.msg = g_convert(message, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3446 | if (err) { |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3447 | debug_printf ("Error in unicode fallback: %s\n", err->message); |
|
95f6d95134cb
[gaim-migrate @ 3788]
Alex Converse <alex.converse@gmail.com>
parents:
3643
diff
changeset
|
3448 | } |
| 3642 | 3449 | } |
| 3450 | } else { | |
| 3451 | args.msg = message; | |
| 3452 | } | |
| 3453 | args.msglen = len; | |
| 3008 | 3454 | |
| 3455 | ret = aim_send_im_ext(odata->sess, &args); | |
| 2086 | 3456 | } |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2297
diff
changeset
|
3457 | if (ret >= 0) |
|
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2297
diff
changeset
|
3458 | return 1; |
|
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2297
diff
changeset
|
3459 | return ret; |
| 2086 | 3460 | } |
| 3461 | ||
| 3462 | static void oscar_get_info(struct gaim_connection *g, char *name) { | |
| 3463 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
|
2742
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3464 | if (odata->icq) |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3465 | aim_icq_getsimpleinfo(odata->sess, name); |
|
2ffd839888a5
[gaim-migrate @ 2755]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
3466 | else |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3467 | /* people want the away message on the top, so we get the away message |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3468 | * first and then get the regular info, since it's too difficult to |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3469 | * insert in the middle. i hate people. */ |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3470 | aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_AWAYMESSAGE); |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3471 | } |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3472 | |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3473 | static void oscar_get_away(struct gaim_connection *g, char *who) { |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
3474 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3475 | if (odata->icq) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3476 | struct buddy *budlight = find_buddy(g, who); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3477 | if (budlight) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3478 | if ((budlight->uc & 0xffff0000) >> 16) |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3479 | if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3480 | aim_send_im_ch2_geticqmessage(odata->sess, who, (budlight->uc & 0xffff0000) >> 16); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3481 | else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3482 | debug_printf("Error: Remote client does not support retrieval of status messages.\n"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3483 | else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3484 | debug_printf("Error: The user %s has no status message, therefore not requesting.\n", who); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3485 | else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3486 | debug_printf("Error: Could not find %s in local contact list, therefore unable to request status message.\n", who); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3487 | } else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3488 | aim_getinfo(odata->sess, odata->conn, who, AIM_GETINFO_GENERALINFO); |
| 2086 | 3489 | } |
| 3490 | ||
| 2920 | 3491 | static void oscar_get_caps(struct gaim_connection *g, char *name) { |
| 3492 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 3493 | aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_CAPABILITIES); | |
| 3494 | } | |
| 3495 | ||
| 3466 | 3496 | static void oscar_set_dir(struct gaim_connection *g, const char *first, const char *middle, const char *last, |
| 3497 | const char *maiden, const char *city, const char *state, const char *country, int web) { | |
| 2086 | 3498 | /* FIXME : some of these things are wrong, but i'm lazy */ |
| 3499 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 3500 | aim_setdirectoryinfo(odata->sess, odata->conn, first, middle, last, | |
| 3501 | maiden, NULL, NULL, city, state, NULL, 0, web); | |
| 3502 | } | |
| 3503 | ||
| 3504 | ||
| 3505 | static void oscar_set_idle(struct gaim_connection *g, int time) { | |
| 3506 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 3507 | aim_bos_setidle(odata->sess, odata->conn, time); | |
| 3508 | } | |
| 3509 | ||
| 3510 | static void oscar_set_info(struct gaim_connection *g, char *info) { | |
| 3511 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 2993 | 3512 | gchar *inforeal; |
| 3513 | ||
| 3514 | if (odata->rights.maxsiglen == 0) | |
| 3427 | 3515 | do_error_dialog(_("Unable to set AIM profile."), |
| 3516 | _("You have probably requested to set your profile before the login procedure completed. " | |
| 3517 | "Your profile remains unset; try setting it again when you are fully connected."), GAIM_ERROR); | |
| 2993 | 3518 | |
| 3519 | if (strlen(info) > odata->rights.maxsiglen) { | |
| 3520 | gchar *errstr; | |
| 3521 | ||
| 3427 | 3522 | errstr = g_strdup_printf(_("The maximum profile length of %d bytes has been exceeded. " |
| 3523 | "Gaim has truncated and set it."), odata->rights.maxsiglen); | |
| 3524 | do_error_dialog("Profile too long.", errstr, GAIM_WARNING); | |
| 2993 | 3525 | |
| 3526 | g_free(errstr); | |
| 3527 | } | |
| 3528 | ||
| 3529 | inforeal = g_strndup(info, odata->rights.maxsiglen); | |
| 3530 | ||
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3531 | if (odata->icq) |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3532 | aim_bos_setprofile(odata->sess, odata->conn, NULL, NULL, caps_icq); |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3533 | else |
|
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3534 | aim_bos_setprofile(odata->sess, odata->conn, inforeal, NULL, caps_aim); |
| 2993 | 3535 | |
| 3536 | g_free(inforeal); | |
| 3537 | ||
| 3538 | return; | |
| 2086 | 3539 | } |
| 3540 | ||
| 2993 | 3541 | static void oscar_set_away_aim(struct gaim_connection *gc, struct oscar_data *od, const char *message) |
| 3542 | { | |
| 3543 | ||
| 3544 | if (od->rights.maxawaymsglen == 0) | |
| 3427 | 3545 | do_error_dialog(_("Unable to set AIM away message."), |
| 3546 | _("You have probably requested to set your away message before the login procedure completed. " | |
| 3547 | "You remain in a \"present\" state; try setting it again when you are fully connected."), GAIM_ERROR); | |
| 3548 | ||
| 2993 | 3549 | if (gc->away) |
| 3550 | g_free(gc->away); | |
| 3551 | gc->away = NULL; | |
| 3552 | ||
| 3553 | if (!message) { | |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3554 | aim_bos_setprofile(od->sess, od->conn, NULL, "", caps_aim); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3555 | return; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3556 | } |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3557 | |
| 2993 | 3558 | if (strlen(message) > od->rights.maxawaymsglen) { |
| 3559 | gchar *errstr; | |
| 3560 | ||
| 3427 | 3561 | errstr = g_strdup_printf(_("The away message length of %d bytes has been exceeded. " |
| 3562 | "Gaim has truncated it and set you away."), od->rights.maxawaymsglen); | |
| 3563 | do_error_dialog("Away message too long.", errstr, GAIM_WARNING); | |
| 2993 | 3564 | g_free(errstr); |
| 3565 | } | |
| 3566 | ||
| 3567 | gc->away = g_strndup(message, od->rights.maxawaymsglen); | |
|
3458
6140a920776b
[gaim-migrate @ 3506]
Mark Doliner <markdoliner@pidgin.im>
parents:
3456
diff
changeset
|
3568 | aim_bos_setprofile(od->sess, od->conn, NULL, gc->away, caps_aim); |
| 2993 | 3569 | |
| 3570 | return; | |
| 3571 | } | |
| 3572 | ||
| 3573 | static void oscar_set_away_icq(struct gaim_connection *gc, struct oscar_data *od, const char *state, const char *message) | |
| 3574 | { | |
| 3575 | ||
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3576 | if (gc->away) |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3577 | gc->away = NULL; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3578 | |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3579 | if (!strcmp(state, "Online")) |
|
2866
159551b6db88
[gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2865
diff
changeset
|
3580 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_NORMAL); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3581 | else if (!strcmp(state, "Away")) { |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
3582 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_AWAY); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3583 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3584 | } else if (!strcmp(state, "Do Not Disturb")) { |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3585 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_DND | AIM_ICQ_STATE_BUSY); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3586 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3587 | } else if (!strcmp(state, "Not Available")) { |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
3588 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_OUT | AIM_ICQ_STATE_AWAY); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3589 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3590 | } else if (!strcmp(state, "Occupied")) { |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
3591 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_BUSY); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3592 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3593 | } else if (!strcmp(state, "Free For Chat")) { |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
3594 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_CHAT); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3595 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3596 | } else if (!strcmp(state, "Invisible")) { |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
3597 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_INVISIBLE); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3598 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3599 | } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
| 2998 | 3600 | if (message) { |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
3601 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_OUT | AIM_ICQ_STATE_AWAY); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3602 | gc->away = ""; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3603 | } else { |
|
2866
159551b6db88
[gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2865
diff
changeset
|
3604 | aim_setextstatus(od->sess, od->conn, AIM_ICQ_STATE_NORMAL); |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
3605 | } |
| 2086 | 3606 | } |
| 2993 | 3607 | |
| 3608 | return; | |
| 3609 | } | |
| 3610 | ||
| 3611 | static void oscar_set_away(struct gaim_connection *gc, char *state, char *message) | |
| 3612 | { | |
| 3613 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 3614 | ||
| 3615 | if (od->icq) | |
| 3616 | oscar_set_away_icq(gc, od, state, message); | |
| 3617 | else | |
| 3618 | oscar_set_away_aim(gc, od, message); | |
| 3619 | ||
| 3620 | return; | |
| 2086 | 3621 | } |
| 3622 | ||
| 3623 | static void oscar_warn(struct gaim_connection *g, char *name, int anon) { | |
| 3624 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 2113 | 3625 | aim_send_warning(odata->sess, odata->conn, name, anon ? AIM_WARN_ANON : 0); |
| 2086 | 3626 | } |
| 3627 | ||
| 3466 | 3628 | static void oscar_dir_search(struct gaim_connection *g, const char *first, const char *middle, const char *last, |
| 3629 | const char *maiden, const char *city, const char *state, const char *country, const char *email) { | |
| 2086 | 3630 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 3631 | if (strlen(email)) | |
| 3632 | aim_usersearch_address(odata->sess, odata->conn, email); | |
| 3633 | } | |
| 3634 | ||
| 3466 | 3635 | static void oscar_add_buddy(struct gaim_connection *g, const char *name) { |
| 2086 | 3636 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 3092 | 3637 | if (odata->icq) { |
| 3638 | aim_add_buddy(odata->sess, odata->conn, name); | |
| 3639 | } else { | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3640 | if ((odata->sess->ssi.received_data) && !(aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, name, 0x0000))) { |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3641 | debug_printf("ssi: adding buddy %s to group %s\n", name, find_group_by_buddy(g, name)->name); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3642 | aim_ssi_addbuddies(odata->sess, odata->conn, find_group_by_buddy(g, name)->name, &name, 1); |
| 3092 | 3643 | } |
| 2991 | 3644 | } |
| 2086 | 3645 | } |
| 3646 | ||
| 3647 | static void oscar_add_buddies(struct gaim_connection *g, GList *buddies) { | |
| 3648 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 3092 | 3649 | if (odata->icq) { |
| 3650 | char buf[MSG_LEN]; | |
| 3651 | int n=0; | |
| 3652 | while (buddies) { | |
| 3653 | if (n > MSG_LEN - 18) { | |
| 3654 | aim_bos_setbuddylist(odata->sess, odata->conn, buf); | |
| 3655 | n = 0; | |
| 3656 | } | |
| 3657 | n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); | |
| 3658 | buddies = buddies->next; | |
| 3659 | } | |
| 3660 | aim_bos_setbuddylist(odata->sess, odata->conn, buf); | |
| 3661 | } else { | |
| 3662 | if (odata->sess->ssi.received_data) { | |
| 3663 | int tmp; | |
| 3664 | GSList *curgrp, *curbud; | |
| 3665 | for (curgrp=g->groups; curgrp; curgrp=g_slist_next(curgrp)) { | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3666 | tmp = 0; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3667 | for (curbud=((struct group*)curgrp->data)->members; curbud; curbud=curbud->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3668 | if (!aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3669 | tmp++; |
| 3092 | 3670 | if (tmp) { |
| 3671 | char **sns = (char **)malloc(tmp*sizeof(char*)); | |
| 3672 | tmp = 0; | |
| 3673 | for (curbud=((struct group*)curgrp->data)->members; curbud; curbud=curbud->next) | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3674 | if (!aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) { |
| 3092 | 3675 | debug_printf("ssi: adding buddy %s to group %s\n", ((struct buddy*)curbud->data)->name, ((struct group*)curgrp->data)->name); |
| 3676 | sns[tmp] = (char *)((struct buddy*)curbud->data)->name; | |
| 3677 | tmp++; | |
| 3678 | } | |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
3679 | aim_ssi_addbuddies(odata->sess, odata->conn, ((struct group*)curgrp->data)->name, (const char**)sns, tmp); |
| 3092 | 3680 | free(sns); |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3681 | } |
| 3092 | 3682 | } |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3683 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3684 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3685 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3686 | |
| 3140 | 3687 | static void oscar_move_buddy(struct gaim_connection *g, char *name, char *old_group, char *new_group) { |
| 3688 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
| 3689 | if (!odata->icq) | |
| 3690 | if (odata->sess->ssi.received_data) { | |
| 3691 | aim_ssi_movebuddy(odata->sess, odata->conn, old_group, new_group, name); | |
| 3692 | debug_printf("ssi: moved buddy %s from group %s to group %s\n", name, old_group, new_group); | |
| 3693 | } | |
| 3694 | } | |
| 3695 | ||
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3696 | static void oscar_remove_buddy(struct gaim_connection *g, char *name, char *group) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3697 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 3092 | 3698 | if (odata->icq) { |
| 3699 | aim_remove_buddy(odata->sess, odata->conn, name); | |
| 3700 | } else { | |
| 3701 | if (odata->sess->ssi.received_data) { | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3702 | struct aim_ssi_item *ssigroup; |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3703 | while (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, name, 0x0000) && (ssigroup = aim_ssi_itemlist_findparent(odata->sess->ssi.items, name)) && !aim_ssi_delbuddies(odata->sess, odata->conn, ssigroup->name, &name, 1)) |
| 3092 | 3704 | debug_printf("ssi: deleted buddy %s from group %s\n", name, group); |
| 3705 | } | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3706 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3707 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3708 | |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3709 | static void oscar_remove_buddies(struct gaim_connection *g, GList *buddies, char *group) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3710 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 3092 | 3711 | if (odata->icq) { |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3712 | GList *cur; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3713 | for (cur=buddies; cur; cur=cur->next) |
| 3092 | 3714 | aim_remove_buddy(odata->sess, odata->conn, cur->data); |
| 3715 | } else { | |
| 3716 | if (odata->sess->ssi.received_data) { | |
| 3717 | GList *cur; | |
| 3718 | int tmp = 0; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3719 | for (cur=buddies; cur; cur=cur->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3720 | if (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, cur->data, 0x0000)) |
| 2991 | 3721 | tmp++; |
| 3092 | 3722 | if (tmp) { |
| 3723 | char **sns; | |
| 3724 | sns = (char **)malloc(tmp*sizeof(char*)); | |
| 3725 | tmp = 0; | |
| 3726 | for (cur=buddies; cur; cur=cur->next) | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3727 | if (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, cur->data, 0x0000)) { |
| 3092 | 3728 | debug_printf("ssi: deleting buddy %s from group %s\n", cur->data, group); |
| 3729 | sns[tmp] = cur->data; | |
| 3730 | tmp++; | |
| 3731 | } | |
| 3732 | aim_ssi_delbuddies(odata->sess, odata->conn, group, sns, tmp); | |
| 3733 | free(sns); | |
| 3734 | } | |
| 2991 | 3735 | } |
| 3736 | } | |
| 3737 | } | |
| 3738 | ||
|
3348
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3739 | static void oscar_rename_group(struct gaim_connection *g, char *old_group, char *new_group, GList *members) { |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3740 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3741 | if (!odata->icq) |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3742 | if (odata->sess->ssi.received_data) { |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3743 | if (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, new_group, 0x0001)) { |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3744 | oscar_remove_buddies(g, members, old_group); |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3745 | oscar_add_buddies(g, members); |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3746 | debug_printf("ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3747 | } else { |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3748 | aim_ssi_rename_group(odata->sess, odata->conn, old_group, new_group); |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3749 | debug_printf("ssi: renamed group %s to %s\n", old_group, new_group); |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3750 | } |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3751 | } |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3752 | } |
|
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
3753 | |
| 2991 | 3754 | static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 3755 | /* XXX - Fix parsing of the ssi rights packet and pass us the data | |
| 3756 | fu16_t maxbuddies, maxgroups, maxpermits, maxdenies; | |
| 3757 | va_list ap; | |
| 3758 | ||
| 3759 | va_start(ap, fr); | |
| 3760 | maxbuddies = (fu16_t)va_arg(ap, unsigned int); | |
| 3761 | maxgroupss = (fu16_t)va_arg(ap, unsigned int); | |
| 3762 | maxpermits = (fu16_t)va_arg(ap, unsigned int); | |
| 3763 | maxdenies = (fu16_t)va_arg(ap, unsigned int); | |
| 3764 | va_end(ap); | |
| 3765 | ||
| 3766 | debug_printf("ssi rights: Max buddies = %d / Max groups = %d / Max permits = %d / Max denies = %d\n", maxbuddies, maxgroups, maxpermits, maxdenies); | |
| 3767 | */ | |
| 3768 | ||
| 3769 | return 1; | |
| 3770 | } | |
| 3771 | ||
| 3772 | static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
| 3773 | struct gaim_connection *gc = sess->aux_data; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3774 | struct oscar_data *odata = (struct oscar_data *)gc->proto_data; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3775 | struct aim_ssi_item *curitem; |
| 2991 | 3776 | int tmp; |
| 3466 | 3777 | const char **sns; |
| 2991 | 3778 | |
| 3779 | debug_printf("ssi: syncing local list and server list\n"); | |
| 3780 | ||
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3781 | if (odata->icq) |
| 3092 | 3782 | return 1; |
| 3783 | ||
| 2991 | 3784 | /* Activate SSI */ |
| 3785 | debug_printf("ssi: activating server-stored buddy list\n"); | |
| 3786 | aim_ssi_enable(sess, fr->conn); | |
| 3787 | ||
| 3788 | /* Clean the buddy list */ | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3789 | aim_ssi_cleanlist(sess, fr->conn); |
| 2991 | 3790 | |
| 3791 | /* Add from server list to local list */ | |
| 3792 | tmp = 0; | |
| 3793 | for (curitem=sess->ssi.items; curitem; curitem=curitem->next) { | |
| 3794 | switch (curitem->type) { | |
| 3795 | case 0x0000: /* Buddy */ | |
| 3796 | if ((curitem->name) && (!find_buddy(gc, curitem->name))) { | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3797 | struct aim_ssi_item *curgroup = sess->ssi.items; |
| 2991 | 3798 | while (curgroup) { |
| 3799 | if ((curgroup->type == 0x0001) && (curgroup->gid == curitem->gid) && (curgroup->name)) { | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3800 | debug_printf("ssi: adding buddy %s to group %s to local list\n", curitem->name, curgroup->name); |
| 2991 | 3801 | add_buddy(gc, curgroup->name, curitem->name, 0); |
| 3802 | tmp++; | |
| 3803 | } | |
| 3804 | curgroup = curgroup->next; | |
| 3805 | } | |
| 3806 | } | |
| 3807 | break; | |
| 3808 | ||
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3809 | case 0x0002: /* Permit buddy */ |
| 2991 | 3810 | if (curitem->name) { |
| 3811 | GSList *list; | |
| 3812 | for (list=gc->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); | |
| 3813 | if (!list) { | |
| 3814 | char *name; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3815 | debug_printf("ssi: adding permit buddy %s to local list\n", curitem->name); |
| 2991 | 3816 | name = g_strdup(normalize(curitem->name)); |
| 3817 | gc->permit = g_slist_append(gc->permit, name); | |
| 3818 | build_allow_list(); | |
| 3819 | tmp++; | |
| 3820 | } | |
| 3821 | } | |
| 3822 | break; | |
| 3823 | ||
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3824 | case 0x0003: /* Deny buddy */ |
| 2991 | 3825 | if (curitem->name) { |
| 3826 | GSList *list; | |
| 3827 | for (list=gc->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); | |
| 3828 | if (!list) { | |
| 3829 | char *name; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3830 | debug_printf("ssi: adding deny buddy %s to local list\n", curitem->name); |
| 2991 | 3831 | name = g_strdup(normalize(curitem->name)); |
| 3832 | gc->deny = g_slist_append(gc->deny, name); | |
| 3833 | build_block_list(); | |
| 3834 | tmp++; | |
| 3835 | } | |
| 3836 | } | |
| 3837 | break; | |
| 3838 | ||
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3839 | case 0x0004: /* Permit/deny setting */ |
| 2991 | 3840 | if (curitem->data) { |
| 3841 | fu8_t permdeny; | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3842 | if ((permdeny = aim_ssi_getpermdeny(sess->ssi.items)) && (permdeny != gc->permdeny)) { |
| 2991 | 3843 | debug_printf("ssi: changing permdeny from %d to %d\n", gc->permdeny, permdeny); |
| 3844 | gc->permdeny = permdeny; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
3845 | tmp++; |
| 2991 | 3846 | } |
| 3847 | } | |
| 3848 | break; | |
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3849 | |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3850 | case 0x0005: /* Presence setting */ |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3851 | /* We don't want to change Gaim's setting because it applies to all accounts */ |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3852 | break; |
| 2991 | 3853 | } /* End of switch on curitem->type */ |
| 3854 | } /* End of for loop */ | |
| 3855 | if (tmp) | |
| 3856 | do_export(gc); | |
| 3857 | ||
| 3858 | /* Add from local list to server list */ | |
| 3859 | if (gc) { | |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3860 | GSList *cur; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3861 | |
| 2991 | 3862 | /* Buddies */ |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3863 | cur = gc->groups; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3864 | while (cur) { |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3865 | GSList *curbud; |
| 2991 | 3866 | tmp = 0; |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3867 | for (curbud=((struct group*)cur->data)->members; curbud; curbud=curbud->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3868 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) |
| 2991 | 3869 | tmp++; |
| 3870 | if (tmp) { | |
| 3466 | 3871 | sns = malloc(tmp*sizeof(char*)); |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3872 | tmp = 0; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3873 | for (curbud=((struct group*)cur->data)->members; curbud; curbud=curbud->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3874 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) { |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3875 | debug_printf("ssi: adding buddy %s from local list to server list\n", ((struct buddy*)curbud->data)->name); |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3876 | sns[tmp] = ((char *)((struct buddy*)curbud->data)->name); |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3877 | tmp++; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3878 | } |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3879 | aim_ssi_addbuddies(sess, fr->conn, ((struct group*)cur->data)->name, sns, tmp); |
| 2991 | 3880 | free(sns); |
| 3881 | } | |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3882 | cur = g_slist_next(cur); |
| 2991 | 3883 | } |
| 3884 | ||
| 3885 | /* Permit list */ | |
| 3886 | if (gc->permit) { | |
| 3887 | tmp = 0; | |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3888 | for (cur=gc->permit; cur; cur=cur->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3889 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0002)) |
| 2991 | 3890 | tmp++; |
| 3891 | if (tmp) { | |
| 3466 | 3892 | sns = malloc(tmp*sizeof(char*)); |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3893 | tmp = 0; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3894 | for (cur=gc->permit; cur; cur=cur->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3895 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0002)) { |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3896 | debug_printf("ssi: adding permit %s from local list to server list\n", cur->data); |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3897 | sns[tmp] = cur->data; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3898 | tmp++; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3899 | } |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3900 | aim_ssi_addpord(sess, fr->conn, sns, tmp, AIM_SSI_TYPE_PERMIT); |
| 2991 | 3901 | free(sns); |
| 3902 | } | |
| 3903 | } | |
| 3904 | ||
| 3905 | /* Deny list */ | |
| 3906 | if (gc->deny) { | |
| 3907 | tmp = 0; | |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3908 | for (cur=gc->deny; cur; cur=cur->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3909 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0003)) |
| 2991 | 3910 | tmp++; |
| 3911 | if (tmp) { | |
| 3466 | 3912 | sns = malloc(tmp*sizeof(char*)); |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3913 | tmp = 0; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3914 | for (cur=gc->deny; cur; cur=cur->next) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3915 | if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0003)) { |
|
3017
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3916 | debug_printf("ssi: adding deny %s from local list to server list\n", cur->data); |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3917 | sns[tmp] = cur->data; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3918 | tmp++; |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3919 | } |
|
e01d7ec2b5db
[gaim-migrate @ 3030]
Mark Doliner <markdoliner@pidgin.im>
parents:
3016
diff
changeset
|
3920 | aim_ssi_addpord(sess, fr->conn, sns, tmp, AIM_SSI_TYPE_DENY); |
| 2991 | 3921 | free(sns); |
| 3922 | } | |
| 3923 | } | |
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3924 | |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3925 | /* Presence settings (idle time visibility) */ |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3926 | if ((tmp = aim_ssi_getpresence(sess->ssi.items)) != 0xFFFFFFFF) |
|
3109
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3927 | if (report_idle && !(tmp & 0x400)) |
|
c193eb9c1c30
[gaim-migrate @ 3123]
Mark Doliner <markdoliner@pidgin.im>
parents:
3106
diff
changeset
|
3928 | aim_ssi_setpresence(sess, fr->conn, tmp | 0x400); |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3929 | |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3930 | /* Check for maximum number of buddies */ |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3931 | for (cur=gc->groups, tmp=0; cur; cur=g_slist_next(cur)) { |
| 3214 | 3932 | struct group* gr = (struct group*)cur->data; |
| 3933 | tmp = tmp + g_slist_length(gr->members); | |
| 3934 | } | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3935 | if (tmp > odata->rights.maxbuddies) { |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3936 | char *dialog_msg = g_strdup_printf(_("The maximum number of buddies allowed in your buddy list is %d, and you have %d." |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3937 | " Until you are below the limit, some buddies will not show up as online."), |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3938 | odata->rights.maxbuddies, tmp); |
| 3427 | 3939 | do_error_dialog("Maximum buddy list length exceeded.", dialog_msg, GAIM_WARNING); |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3940 | g_free(dialog_msg); |
|
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3941 | } |
| 3214 | 3942 | |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
3943 | } /* end if (gc) */ |
| 3092 | 3944 | |
| 2991 | 3945 | return 1; |
| 2086 | 3946 | } |
| 3947 | ||
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3948 | static GList *oscar_chat_info(struct gaim_connection *gc) { |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3949 | GList *m = NULL; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3950 | struct proto_chat_entry *pce; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3951 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3952 | pce = g_new0(struct proto_chat_entry, 1); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3953 | pce->label = _("Join what group:"); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3954 | m = g_list_append(m, pce); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3955 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3956 | pce = g_new0(struct proto_chat_entry, 1); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3957 | pce->label = _("Exchange:"); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3958 | pce->is_int = TRUE; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3959 | pce->min = 4; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3960 | pce->max = 20; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3961 | m = g_list_append(m, pce); |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3962 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3963 | return m; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3964 | } |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3965 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3966 | static void oscar_join_chat(struct gaim_connection *g, GList *data) { |
| 2086 | 3967 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
3968 | aim_conn_t *cur; |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3969 | char *name; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3970 | int *exchange; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3971 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3972 | if (!data || !data->next) |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3973 | return; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3974 | |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3975 | name = data->data; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3976 | exchange = data->next->data; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3977 | |
| 2086 | 3978 | debug_printf("Attempting to join chat room %s.\n", name); |
| 3979 | if ((cur = aim_getconn_type(odata->sess, AIM_CONN_TYPE_CHATNAV))) { | |
| 3980 | debug_printf("chatnav exists, creating room\n"); | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
3981 | aim_chatnav_createroom(odata->sess, cur, name, *exchange); |
| 2086 | 3982 | } else { |
| 3983 | /* this gets tricky */ | |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
3984 | struct create_room *cr = g_new0(struct create_room, 1); |
| 2086 | 3985 | debug_printf("chatnav does not exist, opening chatnav\n"); |
|
2822
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
3986 | cr->exchange = *exchange; |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
3987 | cr->name = g_strdup(name); |
|
a1ddcd96da44
[gaim-migrate @ 2835]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2821
diff
changeset
|
3988 | odata->create_rooms = g_slist_append(odata->create_rooms, cr); |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
3989 | aim_reqservice(odata->sess, odata->conn, AIM_CONN_TYPE_CHATNAV); |
| 2086 | 3990 | } |
| 3991 | } | |
| 3992 | ||
| 3466 | 3993 | static void oscar_chat_invite(struct gaim_connection *g, int id, const char *message, const char *name) { |
| 2086 | 3994 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 3995 | struct chat_connection *ccon = find_oscar_chat(g, id); | |
| 3996 | ||
| 3997 | if (!ccon) | |
| 3998 | return; | |
| 3999 | ||
| 4000 | aim_chat_invite(odata->sess, odata->conn, name, message ? message : "", | |
| 4001 | ccon->exchange, ccon->name, 0x0); | |
| 4002 | } | |
| 4003 | ||
| 4004 | static void oscar_chat_leave(struct gaim_connection *g, int id) { | |
| 4005 | struct oscar_data *odata = g ? (struct oscar_data *)g->proto_data : NULL; | |
| 4006 | GSList *bcs = g->buddy_chats; | |
| 4007 | struct conversation *b = NULL; | |
| 4008 | struct chat_connection *c = NULL; | |
| 4009 | int count = 0; | |
| 4010 | ||
| 4011 | while (bcs) { | |
| 4012 | count++; | |
| 4013 | b = (struct conversation *)bcs->data; | |
| 4014 | if (id == b->id) | |
| 4015 | break; | |
| 4016 | bcs = bcs->next; | |
| 4017 | b = NULL; | |
| 4018 | } | |
| 4019 | ||
| 4020 | if (!b) | |
| 4021 | return; | |
| 4022 | ||
| 4023 | debug_printf("Attempting to leave room %s (currently in %d rooms)\n", b->name, count); | |
| 4024 | ||
| 4025 | c = find_oscar_chat(g, b->id); | |
| 4026 | if (c != NULL) { | |
| 4027 | if (odata) | |
| 4028 | odata->oscar_chats = g_slist_remove(odata->oscar_chats, c); | |
| 4029 | if (c->inpa > 0) | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
4030 | gaim_input_remove(c->inpa); |
| 2086 | 4031 | if (g && odata->sess) |
| 4032 | aim_conn_kill(odata->sess, &c->conn); | |
| 4033 | g_free(c->name); | |
| 4034 | g_free(c->show); | |
| 4035 | g_free(c); | |
| 4036 | } | |
| 4037 | /* we do this because with Oscar it doesn't tell us we left */ | |
| 4038 | serv_got_chat_left(g, b->id); | |
| 4039 | } | |
| 4040 | ||
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4041 | static int oscar_chat_send(struct gaim_connection *g, int id, char *message) { |
| 2086 | 4042 | struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
| 4043 | GSList *bcs = g->buddy_chats; | |
| 4044 | struct conversation *b = NULL; | |
| 4045 | struct chat_connection *c = NULL; | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4046 | char *buf, *buf2; |
| 2086 | 4047 | int i, j; |
| 4048 | ||
| 4049 | while (bcs) { | |
| 4050 | b = (struct conversation *)bcs->data; | |
| 4051 | if (id == b->id) | |
| 4052 | break; | |
| 4053 | bcs = bcs->next; | |
| 4054 | b = NULL; | |
| 4055 | } | |
| 4056 | if (!b) | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4057 | return -EINVAL; |
| 2086 | 4058 | |
| 4059 | bcs = odata->oscar_chats; | |
| 4060 | while (bcs) { | |
| 4061 | c = (struct chat_connection *)bcs->data; | |
| 4062 | if (b == c->cnv) | |
| 4063 | break; | |
| 4064 | bcs = bcs->next; | |
| 4065 | c = NULL; | |
| 4066 | } | |
| 4067 | if (!c) | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4068 | return -EINVAL; |
| 2086 | 4069 | |
| 4070 | buf = g_malloc(strlen(message) * 4 + 1); | |
| 4071 | for (i = 0, j = 0; i < strlen(message); i++) { | |
| 4072 | if (message[i] == '\n') { | |
| 4073 | buf[j++] = '<'; | |
| 4074 | buf[j++] = 'B'; | |
| 4075 | buf[j++] = 'R'; | |
| 4076 | buf[j++] = '>'; | |
| 4077 | } else { | |
| 4078 | buf[j++] = message[i]; | |
| 4079 | } | |
| 4080 | } | |
| 4081 | buf[j] = '\0'; | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4082 | |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4083 | if (strlen(buf) > c->maxlen) |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4084 | return -E2BIG; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4085 | |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4086 | buf2 = strip_html(buf); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4087 | if (strlen(buf2) > c->maxvis) { |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4088 | g_free(buf2); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4089 | return -E2BIG; |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4090 | } |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4091 | g_free(buf2); |
|
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4092 | |
| 2086 | 4093 | aim_chat_send_im(odata->sess, c->conn, 0, buf, strlen(buf)); |
| 4094 | g_free(buf); | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
4095 | return 0; |
| 2086 | 4096 | } |
| 4097 | ||
| 4098 | static char **oscar_list_icon(int uc) { | |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4099 | if (uc == 0) |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4100 | return (char **)icon_online_xpm; |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4101 | if (uc & 0xffff0000) { |
|
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4102 | uc >>= 16; |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4103 | if (uc & AIM_ICQ_STATE_INVISIBLE) |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4104 | return icon_offline_xpm; |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4105 | if (uc & AIM_ICQ_STATE_CHAT) |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4106 | return icon_ffc_xpm; |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4107 | if (uc & AIM_ICQ_STATE_DND) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4108 | return icon_dnd_xpm; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4109 | if (uc & AIM_ICQ_STATE_OUT) |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4110 | return icon_na_xpm; |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4111 | if (uc & AIM_ICQ_STATE_BUSY) |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4112 | return icon_occ_xpm; |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4113 | if (uc & AIM_ICQ_STATE_AWAY) |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4114 | return icon_away_xpm; |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4115 | return icon_online_xpm; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4116 | } |
|
3101
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4117 | if (uc & UC_UNAVAILABLE) |
|
77ed45aa5ae2
[gaim-migrate @ 3115]
Mark Doliner <markdoliner@pidgin.im>
parents:
3092
diff
changeset
|
4118 | return (char **)away_icon_xpm; |
|
3079
e55c9a9cc4fc
[gaim-migrate @ 3093]
Mark Doliner <markdoliner@pidgin.im>
parents:
3074
diff
changeset
|
4119 | if (uc & UC_WIRELESS) |
|
e55c9a9cc4fc
[gaim-migrate @ 3093]
Mark Doliner <markdoliner@pidgin.im>
parents:
3074
diff
changeset
|
4120 | return (char **)wireless_icon_xpm; |
| 2689 | 4121 | if (uc & UC_AB) |
| 2679 | 4122 | return (char **)ab_xpm; |
| 2086 | 4123 | if (uc & UC_AOL) |
| 4124 | return (char **)aol_icon_xpm; | |
| 4125 | if (uc & UC_ADMIN) | |
| 4126 | return (char **)admin_icon_xpm; | |
| 4127 | if (uc & UC_UNCONFIRMED) | |
| 4128 | return (char **)dt_icon_xpm; | |
|
2297
d957c91e8562
[gaim-migrate @ 2307]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2288
diff
changeset
|
4129 | if (uc & UC_NORMAL) |
|
d957c91e8562
[gaim-migrate @ 2307]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2288
diff
changeset
|
4130 | return (char **)free_icon_xpm; |
| 2086 | 4131 | return NULL; |
| 4132 | } | |
| 4133 | ||
| 3630 | 4134 | void oscar_transfer_nextfile(struct gaim_connection *gc, |
| 4135 | struct file_transfer *xfer) { | |
| 4136 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 4137 | aim_conn_t *conn = oft->conn; | |
| 4138 | aim_session_t *sess = aim_conn_getsess(conn); | |
| 4139 | ||
| 4140 | oft->filesdone++; | |
| 4141 | oft->watcher = gaim_input_add(conn->fd, GAIM_INPUT_READ, | |
| 4142 | oscar_callback, conn); | |
| 4143 | ||
| 4144 | /* If this is an incoming sendfile transfer, we send an OK | |
| 4145 | * message to the sender; if this is an outgoing sendfile, we | |
| 4146 | * will get an OK from the receiver that will be handled in | |
| 4147 | * oscar_sendfile_out_done(), so we don't need to do anything | |
| 4148 | * yet. | |
| 4149 | */ | |
| 4150 | ||
| 4151 | if (oft->type == OFT_SENDFILE_IN) | |
| 4152 | aim_oft_end(sess, conn); | |
| 4153 | } | |
| 4154 | ||
| 4155 | void oscar_transfer_done(struct gaim_connection *gc, | |
| 4156 | struct file_transfer *xfer) { | |
| 4157 | struct oscar_file_transfer *oft = find_oft_by_xfer(gc, xfer); | |
| 4158 | aim_conn_t *conn = oft->conn; | |
| 4159 | aim_session_t *sess = aim_conn_getsess(conn); | |
| 4160 | ||
| 4161 | oft->filesdone++; | |
| 4162 | if (oft->type == OFT_SENDFILE_IN) { | |
| 4163 | aim_oft_end(sess, conn); | |
| 4164 | oscar_file_transfer_disconnect(sess, conn); | |
| 4165 | } | |
| 4166 | else if (oft->type == OFT_SENDFILE_OUT) { | |
| 4167 | #if 0 | |
| 4168 | /* Wait for response before closing connection. */ | |
| 4169 | oft->watcher = gaim_input_add(conn->fd, GAIM_INPUT_READ, | |
| 4170 | oscar_callback, conn); | |
| 4171 | #else | |
| 4172 | oscar_file_transfer_disconnect(sess, conn); | |
| 4173 | #endif | |
| 4174 | } | |
| 4175 | } | |
| 4176 | ||
| 4177 | static int oscar_file_transfer_do(aim_session_t *sess, aim_frame_t *fr, ...) { | |
| 4178 | struct gaim_connection *gc = sess->aux_data; | |
| 4179 | va_list ap; | |
| 4180 | aim_conn_t *conn; | |
| 4181 | struct oscar_file_transfer *oft; | |
| 4182 | ||
| 4183 | va_start(ap, fr); | |
| 4184 | conn = va_arg(ap, aim_conn_t *); | |
| 4185 | ||
| 4186 | oft = find_oft_by_conn(gc, conn); | |
| 4187 | ||
| 4188 | /* Don't use the regular input handler for the raw data. */ | |
| 4189 | gaim_input_remove(oft->watcher); | |
| 4190 | oft->watcher = 0; | |
| 4191 | ||
| 4192 | if (oft->type == OFT_SENDFILE_IN) { | |
| 4193 | const char *name = va_arg(ap, const char *); | |
| 4194 | int size = va_arg(ap, int); | |
| 4195 | if (transfer_in_do(oft->xfer, conn->fd, name, size)) | |
| 4196 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 4197 | } | |
| 4198 | else { | |
| 4199 | int offset = va_arg(ap, int); | |
| 4200 | if (transfer_out_do(oft->xfer, conn->fd, offset)) | |
| 4201 | oscar_file_transfer_disconnect(sess, oft->conn); | |
| 4202 | } | |
| 4203 | va_end(ap); | |
| 4204 | ||
| 4205 | return 0; | |
| 4206 | } | |
| 4207 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4208 | static int gaim_directim_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 4209 | va_list ap; |
| 4210 | struct gaim_connection *gc = sess->aux_data; | |
| 4211 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4212 | aim_conn_t *newconn, *listenerconn; |
|
2235
8828cb249372
[gaim-migrate @ 2245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2232
diff
changeset
|
4213 | struct conversation *cnv; |
| 2086 | 4214 | struct direct_im *dim; |
| 4215 | char buf[256]; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4216 | char *sn; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4217 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4218 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4219 | newconn = va_arg(ap, aim_conn_t *); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4220 | listenerconn = va_arg(ap, aim_conn_t *); |
| 2086 | 4221 | va_end(ap); |
| 4222 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4223 | aim_conn_close(listenerconn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4224 | aim_conn_kill(sess, &listenerconn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4225 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4226 | sn = g_strdup(aim_directim_getsn(newconn)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4227 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4228 | debug_printf("DirectIM: initiate success to %s\n", sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4229 | dim = find_direct_im(od, sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4230 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4231 | if (!(cnv = find_conversation(sn))) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4232 | cnv = new_conversation(sn); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
4233 | gaim_input_remove(dim->watcher); |
| 2086 | 4234 | dim->conn = newconn; |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
4235 | dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
| 2086 | 4236 | oscar_callback, dim->conn); |
| 3008 | 4237 | dim->connected = TRUE; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4238 | g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4239 | g_free(sn); |
|
2856
046ed5e89321
[gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2833
diff
changeset
|
4240 | write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time(NULL), -1); |
| 2086 | 4241 | |
| 4242 | aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, | |
| 4243 | gaim_directim_incoming, 0); | |
| 4244 | aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, | |
| 4245 | gaim_directim_typing, 0); | |
| 3033 | 4246 | aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
| 2993 | 4247 | gaim_update_ui, 0); |
| 4248 | return 1; | |
| 4249 | } | |
| 4250 | ||
| 4251 | static int gaim_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
| 4252 | va_list ap; | |
| 4253 | char *sn; | |
| 4254 | double percent; | |
| 4255 | struct gaim_connection *gc = sess->aux_data; | |
| 4256 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 4257 | struct conversation *c; | |
| 4258 | struct direct_im *dim; | |
| 4259 | ||
| 4260 | va_start(ap, fr); | |
| 4261 | sn = va_arg(ap, char *); | |
| 4262 | percent = va_arg(ap, double); | |
| 4263 | va_end(ap); | |
| 4264 | ||
| 2994 | 4265 | if (!(dim = find_direct_im(od, sn))) |
| 4266 | return 1; | |
|
3059
bd4d661482f5
[gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3048
diff
changeset
|
4267 | if (dim->watcher) { |
|
bd4d661482f5
[gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3048
diff
changeset
|
4268 | gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ |
|
bd4d661482f5
[gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3048
diff
changeset
|
4269 | dim->watcher = 0; |
|
bd4d661482f5
[gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3048
diff
changeset
|
4270 | } |
| 3044 | 4271 | while (gtk_events_pending()) |
| 4272 | gtk_main_iteration(); | |
| 4273 | ||
| 2993 | 4274 | if ((c = find_conversation(sn))) |
| 4275 | update_progress(c, percent); | |
| 4276 | dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, | |
| 4277 | oscar_callback, dim->conn); | |
| 2086 | 4278 | |
| 4279 | return 1; | |
| 4280 | } | |
| 4281 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4282 | static int gaim_directim_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 4283 | va_list ap; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4284 | char *msg, *sn; |
| 2993 | 4285 | int len; |
| 2086 | 4286 | struct gaim_connection *gc = sess->aux_data; |
| 4287 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4288 | va_start(ap, fr); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4289 | sn = va_arg(ap, char *); |
| 2086 | 4290 | msg = va_arg(ap, char *); |
| 2993 | 4291 | len = va_arg(ap, int); |
| 2086 | 4292 | va_end(ap); |
| 4293 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4294 | debug_printf("Got DirectIM message from %s\n", sn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4295 | |
| 2993 | 4296 | serv_got_im(gc, sn, msg, 0, time(NULL), len); |
| 2086 | 4297 | |
| 4298 | return 1; | |
| 4299 | } | |
| 4300 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4301 | static int gaim_directim_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
| 2086 | 4302 | va_list ap; |
| 4303 | char *sn; | |
| 2993 | 4304 | int typing; |
| 4305 | struct gaim_connection *gc = sess->aux_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4306 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4307 | va_start(ap, fr); |
| 2086 | 4308 | sn = va_arg(ap, char *); |
| 2993 | 4309 | typing = va_arg(ap, int); |
| 2086 | 4310 | va_end(ap); |
| 4311 | ||
| 2993 | 4312 | if (typing) { |
| 4313 | /* I had to leave this. It's just too funny. It reminds me of my sister. */ | |
| 4314 | debug_printf("ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", sn); | |
| 4315 | serv_got_typing(gc,sn,0); | |
| 4316 | } else | |
| 4317 | serv_got_typing_stopped(gc,sn); | |
| 2086 | 4318 | return 1; |
| 4319 | } | |
| 4320 | ||
| 4321 | struct ask_do_dir_im { | |
| 4322 | char *who; | |
| 4323 | struct gaim_connection *gc; | |
| 4324 | }; | |
| 4325 | ||
|
2235
8828cb249372
[gaim-migrate @ 2245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2232
diff
changeset
|
4326 | static void oscar_cancel_direct_im(gpointer obj, struct ask_do_dir_im *data) { |
| 2086 | 4327 | g_free(data); |
| 4328 | } | |
| 4329 | ||
|
2235
8828cb249372
[gaim-migrate @ 2245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2232
diff
changeset
|
4330 | static void oscar_direct_im(gpointer obj, struct ask_do_dir_im *data) { |
| 2086 | 4331 | struct gaim_connection *gc = data->gc; |
| 4332 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
| 4333 | struct direct_im *dim; | |
| 4334 | ||
| 4335 | dim = find_direct_im(od, data->who); | |
| 4336 | if (dim) { | |
| 3008 | 4337 | if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
| 4338 | od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
| 4339 | gaim_input_remove(dim->watcher); | |
| 4340 | g_free(dim); | |
| 4341 | debug_printf("Gave up on old direct IM, trying again\n"); | |
| 4342 | } else { | |
| 3427 | 4343 | do_error_dialog("DirectIM already open.", NULL, GAIM_ERROR); |
| 3008 | 4344 | return; |
| 4345 | } | |
| 2086 | 4346 | } |
| 4347 | dim = g_new0(struct direct_im, 1); | |
| 4348 | dim->gc = gc; | |
| 4349 | g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
| 4350 | ||
|
2717
b97d1ea4e28c
[gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2713
diff
changeset
|
4351 | dim->conn = aim_directim_initiate(od->sess, data->who); |
| 2086 | 4352 | if (dim->conn != NULL) { |
| 4353 | od->direct_ims = g_slist_append(od->direct_ims, dim); | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
4354 | dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
| 2086 | 4355 | oscar_callback, dim->conn); |
| 4356 | aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE, | |
| 4357 | gaim_directim_initiate, 0); | |
| 4358 | } else { | |
| 3427 | 4359 | do_error_dialog(_("Unable to open Direct IM"), NULL, GAIM_ERROR); |
| 2086 | 4360 | g_free(dim); |
| 4361 | } | |
| 4362 | } | |
| 4363 | ||
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4364 | static void oscar_ask_direct_im(struct gaim_connection *gc, gchar *who) { |
| 2086 | 4365 | char buf[BUF_LONG]; |
| 4366 | struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); | |
| 4367 | data->who = who; | |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4368 | data->gc = gc; |
| 2086 | 4369 | g_snprintf(buf, sizeof(buf), _("You have selected to open a Direct IM connection with %s." |
| 4370 | " Doing this will let them see your IP address, and may be" | |
| 4371 | " a security risk. Do you wish to continue?"), who); | |
| 4372 | do_ask_dialog(buf, data, oscar_direct_im, oscar_cancel_direct_im); | |
| 4373 | } | |
| 4374 | ||
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4375 | static void oscar_get_away_msg(struct gaim_connection *gc, char *who) { |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4376 | struct oscar_data *od = gc->proto_data; |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4377 | od->evilhack = g_slist_append(od->evilhack, g_strdup(normalize(who))); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4378 | if (od->icq) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4379 | struct buddy *budlight = find_buddy(gc, who); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4380 | if (budlight) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4381 | if ((budlight->uc >> 16) & (AIM_ICQ_STATE_AWAY || AIM_ICQ_STATE_DND || AIM_ICQ_STATE_OUT || AIM_ICQ_STATE_BUSY || AIM_ICQ_STATE_CHAT)) |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4382 | if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4383 | aim_send_im_ch2_geticqmessage(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4384 | else { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4385 | char *state_msg = gaim_icq_status((budlight->uc & 0xffff0000) >> 16); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4386 | char *dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<BR><HR><BR><I>Remote client does not support sending status messages.</I><BR>"), who, state_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4387 | g_show_info_text(gc, who, 2, dialog_msg, NULL); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4388 | free(state_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4389 | free(dialog_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4390 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4391 | else { |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4392 | char *state_msg = gaim_icq_status((budlight->uc & 0xffff0000) >> 16); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4393 | char *dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<BR><HR><BR><I>User has no status message.</I><BR>"), who, state_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4394 | g_show_info_text(gc, who, 2, dialog_msg, NULL); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4395 | free(state_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4396 | free(dialog_msg); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4397 | } |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4398 | else |
| 3427 | 4399 | do_error_dialog("Could not find contact in local list, therefore unable to request status message.\n", NULL, GAIM_ERROR); |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4400 | } else |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4401 | oscar_get_info(gc, who); |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4402 | } |
|
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4403 | |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4404 | static GList *oscar_buddy_menu(struct gaim_connection *gc, char *who) { |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4405 | GList *m = NULL; |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4406 | struct proto_buddy_menu *pbm; |
| 2086 | 4407 | char *n = g_strdup(normalize(gc->username)); |
|
2833
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4408 | struct oscar_data *odata = gc->proto_data; |
| 2086 | 4409 | |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4410 | pbm = g_new0(struct proto_buddy_menu, 1); |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4411 | pbm->label = _("Get Info"); |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4412 | pbm->callback = oscar_get_info; |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4413 | pbm->gc = gc; |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4414 | m = g_list_append(m, pbm); |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4415 | |
|
3212
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4416 | if (odata->icq) { |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4417 | pbm = g_new0(struct proto_buddy_menu, 1); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4418 | pbm->label = _("Get Status Msg"); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4419 | pbm->callback = oscar_get_away_msg; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4420 | pbm->gc = gc; |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4421 | m = g_list_append(m, pbm); |
|
3c00e6f5f085
[gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents:
3210
diff
changeset
|
4422 | } else { |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4423 | pbm = g_new0(struct proto_buddy_menu, 1); |
|
2833
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4424 | pbm->label = _("Get Away Msg"); |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4425 | pbm->callback = oscar_get_away_msg; |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4426 | pbm->gc = gc; |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4427 | m = g_list_append(m, pbm); |
|
2833
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4428 | |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4429 | if (strcmp(n, normalize(who))) { |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4430 | pbm = g_new0(struct proto_buddy_menu, 1); |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4431 | pbm->label = _("Direct IM"); |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4432 | pbm->callback = oscar_ask_direct_im; |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4433 | pbm->gc = gc; |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4434 | m = g_list_append(m, pbm); |
|
7062e95f00c3
[gaim-migrate @ 2846]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2822
diff
changeset
|
4435 | } |
| 3630 | 4436 | |
| 4437 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 4438 | pbm->label = _("Send File"); | |
| 4439 | pbm->callback = oscar_ask_send_file; | |
| 4440 | pbm->gc = gc; | |
| 4441 | m = g_list_append(m, pbm); | |
| 2086 | 4442 | } |
| 2920 | 4443 | |
| 4444 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 4445 | pbm->label = _("Get Capabilities"); | |
| 4446 | pbm->callback = oscar_get_caps; | |
| 4447 | pbm->gc = gc; | |
| 4448 | m = g_list_append(m, pbm); | |
| 4449 | ||
| 2086 | 4450 | g_free(n); |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4451 | |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
4452 | return m; |
| 2086 | 4453 | } |
| 4454 | ||
| 3456 | 4455 | static GList *oscar_edit_buddy_menu(struct gaim_connection *gc, char *who) |
| 4456 | { | |
| 4457 | GList *m = NULL; | |
| 4458 | struct proto_buddy_menu *pbm; | |
| 4459 | struct oscar_data *odata = gc->proto_data; | |
| 4460 | ||
| 4461 | if (odata->icq) { | |
| 4462 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 4463 | pbm->label = _("Get Info"); | |
| 4464 | pbm->callback = oscar_get_info; | |
| 4465 | pbm->gc = gc; | |
| 4466 | m = g_list_append(m, pbm); | |
| 4467 | } | |
| 4468 | ||
| 4469 | return m; | |
| 4470 | } | |
| 4471 | ||
| 2086 | 4472 | static void oscar_set_permit_deny(struct gaim_connection *gc) { |
| 4473 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4474 | if (od->icq) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4475 | GSList *list; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4476 | char buf[MAXMSGLEN]; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4477 | int at; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4478 | |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4479 | switch(gc->permdeny) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4480 | case 1: |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4481 | aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gc->username); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4482 | break; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4483 | case 2: |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4484 | aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gc->username); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4485 | break; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4486 | case 3: |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4487 | list = gc->permit; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4488 | at = 0; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4489 | while (list) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4490 | at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4491 | list = list->next; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4492 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4493 | aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4494 | break; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4495 | case 4: |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4496 | list = gc->deny; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4497 | at = 0; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4498 | while (list) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4499 | at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4500 | list = list->next; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4501 | } |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4502 | aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4503 | break; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4504 | default: |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4505 | break; |
| 2086 | 4506 | } |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4507 | signoff_blocked(gc); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4508 | } else { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4509 | if (od->sess->ssi.received_data) |
|
3210
9f0e2d3d8a02
[gaim-migrate @ 3227]
Mark Doliner <markdoliner@pidgin.im>
parents:
3186
diff
changeset
|
4510 | aim_ssi_setpermdeny(od->sess, od->conn, gc->permdeny, 0xffffffff); |
| 2086 | 4511 | } |
| 4512 | } | |
| 4513 | ||
| 4514 | static void oscar_add_permit(struct gaim_connection *gc, char *who) { | |
| 2991 | 4515 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4516 | if (od->icq) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4517 | if (gc->permdeny != 3) return; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4518 | oscar_set_permit_deny(gc); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4519 | } else { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4520 | debug_printf("ssi: About to add a permit\n"); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4521 | if (od->sess->ssi.received_data) |
| 3466 | 4522 | aim_ssi_addpord(od->sess, od->conn, (const char **) &who, 1, AIM_SSI_TYPE_PERMIT); |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4523 | } |
| 2086 | 4524 | } |
| 4525 | ||
| 4526 | static void oscar_add_deny(struct gaim_connection *gc, char *who) { | |
| 2991 | 4527 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4528 | if (od->icq) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4529 | if (gc->permdeny != 4) return; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4530 | oscar_set_permit_deny(gc); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4531 | } else { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4532 | debug_printf("ssi: About to add a deny\n"); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4533 | if (od->sess->ssi.received_data) |
| 3466 | 4534 | aim_ssi_addpord(od->sess, od->conn, (const char **) &who, 1, AIM_SSI_TYPE_DENY); |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4535 | } |
| 2086 | 4536 | } |
| 4537 | ||
| 4538 | static void oscar_rem_permit(struct gaim_connection *gc, char *who) { | |
| 2991 | 4539 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4540 | if (od->icq) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4541 | if (gc->permdeny != 3) return; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4542 | oscar_set_permit_deny(gc); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4543 | } else { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4544 | debug_printf("ssi: About to delete a permit\n"); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4545 | if (od->sess->ssi.received_data) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4546 | aim_ssi_delpord(od->sess, od->conn, (const char **) &who, 1, AIM_SSI_TYPE_PERMIT); |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4547 | } |
| 2086 | 4548 | } |
| 4549 | ||
| 4550 | static void oscar_rem_deny(struct gaim_connection *gc, char *who) { | |
| 2991 | 4551 | struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4552 | if (od->icq) { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4553 | if (gc->permdeny != 4) return; |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4554 | oscar_set_permit_deny(gc); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4555 | } else { |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4556 | debug_printf("ssi: About to delete a deny\n"); |
|
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4557 | if (od->sess->ssi.received_data) |
|
3595
28da7ae040a5
[gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents:
3579
diff
changeset
|
4558 | aim_ssi_delpord(od->sess, od->conn, (const char **) &who, 1, AIM_SSI_TYPE_DENY); |
|
2995
33231d4b2cd3
[gaim-migrate @ 3008]
Mark Doliner <markdoliner@pidgin.im>
parents:
2994
diff
changeset
|
4559 | } |
| 2086 | 4560 | } |
| 4561 | ||
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4562 | static GList *oscar_away_states(struct gaim_connection *gc) |
| 2086 | 4563 | { |
|
2501
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4564 | struct oscar_data *od = gc->proto_data; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4565 | GList *m = NULL; |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4566 | |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4567 | if (!od->icq) |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4568 | return g_list_append(m, GAIM_AWAY_CUSTOM); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4569 | |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4570 | m = g_list_append(m, "Online"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4571 | m = g_list_append(m, "Away"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4572 | m = g_list_append(m, "Do Not Disturb"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4573 | m = g_list_append(m, "Not Available"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4574 | m = g_list_append(m, "Occupied"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4575 | m = g_list_append(m, "Free For Chat"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4576 | m = g_list_append(m, "Invisible"); |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4577 | |
|
5e1fa4926c93
[gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2432
diff
changeset
|
4578 | return m; |
| 2086 | 4579 | } |
| 4580 | ||
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4581 | static void oscar_change_email(struct gaim_connection *gc, char *email) |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4582 | { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4583 | struct oscar_data *od = gc->proto_data; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4584 | aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4585 | |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4586 | if (conn) { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4587 | aim_admin_setemail(od->sess, conn, email); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4588 | } else { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4589 | od->setemail = TRUE; |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4590 | od->email = g_strdup(email); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4591 | aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4592 | } |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4593 | } |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4594 | |
| 2979 | 4595 | static void oscar_format_screenname(struct gaim_connection *gc, char *nick) { |
| 4596 | struct oscar_data *od = gc->proto_data; | |
| 3031 | 4597 | if (!strcmp(normalize(nick), normalize(gc->username))) { |
| 2979 | 4598 | if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
| 4599 | od->setnick = TRUE; | |
| 4600 | od->newsn = g_strdup(nick); | |
| 4601 | aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
| 4602 | } else { | |
| 4603 | aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
| 4604 | } | |
| 4605 | } else { | |
| 3427 | 4606 | do_error_dialog("The new formatting is invalid.", |
| 4607 | "Screenname formatting can change only capitalization and whitespace.", GAIM_ERROR); | |
| 2979 | 4608 | } |
| 4609 | } | |
| 4610 | ||
| 2086 | 4611 | static void oscar_do_action(struct gaim_connection *gc, char *act) |
| 4612 | { | |
| 4613 | struct oscar_data *od = gc->proto_data; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4614 | aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
| 2086 | 4615 | |
| 4616 | if (!strcmp(act, "Set User Info")) { | |
| 4617 | show_set_info(gc); | |
| 4618 | } else if (!strcmp(act, "Change Password")) { | |
| 4619 | show_change_passwd(gc); | |
| 2979 | 4620 | } else if (!strcmp(act, "Format Screenname")) { |
| 4621 | do_prompt_dialog("New screenname formatting:", | |
| 4622 | gc->displayname, gc, oscar_format_screenname, NULL); | |
| 2086 | 4623 | } else if (!strcmp(act, "Confirm Account")) { |
| 4624 | if (!conn) { | |
| 4625 | od->conf = TRUE; | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4626 | aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
| 2086 | 4627 | } else |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4628 | aim_admin_reqconfirm(od->sess, conn); |
| 2086 | 4629 | } else if (!strcmp(act, "Display Current Registered Address")) { |
| 4630 | if (!conn) { | |
| 4631 | od->reqemail = TRUE; | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4632 | aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
| 2086 | 4633 | } else |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4634 | aim_admin_getinfo(od->sess, conn, 0x11); |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4635 | } else if (!strcmp(act, "Change Current Registered Address")) { |
|
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4636 | do_prompt_dialog("Change Address To: ", NULL, gc, oscar_change_email, NULL); |
| 2086 | 4637 | } else if (!strcmp(act, "Search for Buddy by Email")) { |
| 4638 | show_find_email(gc); | |
| 4639 | } | |
| 4640 | } | |
| 4641 | ||
| 4642 | static GList *oscar_actions() | |
| 4643 | { | |
| 4644 | GList *m = NULL; | |
| 4645 | ||
| 4646 | m = g_list_append(m, "Set User Info"); | |
| 4647 | m = g_list_append(m, NULL); | |
| 4648 | m = g_list_append(m, "Change Password"); | |
| 2979 | 4649 | m = g_list_append(m, "Format Screenname"); |
| 2086 | 4650 | m = g_list_append(m, "Confirm Account"); |
| 4651 | m = g_list_append(m, "Display Current Registered Address"); | |
|
2768
908aa476ee73
[gaim-migrate @ 2781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2762
diff
changeset
|
4652 | m = g_list_append(m, "Change Current Registered Address"); |
| 2086 | 4653 | m = g_list_append(m, NULL); |
| 4654 | m = g_list_append(m, "Search for Buddy by Email"); | |
| 4655 | ||
| 4656 | return m; | |
| 4657 | } | |
| 4658 | ||
| 3466 | 4659 | static void oscar_change_passwd(struct gaim_connection *gc, const char *old, const char *new) |
| 2086 | 4660 | { |
| 4661 | struct oscar_data *od = gc->proto_data; | |
| 4662 | if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { | |
| 4663 | od->chpass = TRUE; | |
| 4664 | od->oldp = g_strdup(old); | |
| 4665 | od->newp = g_strdup(new); | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4666 | aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
| 2086 | 4667 | } else { |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2698
diff
changeset
|
4668 | aim_admin_changepasswd(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), |
| 2086 | 4669 | new, old); |
| 4670 | } | |
| 4671 | } | |
| 4672 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4673 | static void oscar_convo_closed(struct gaim_connection *gc, char *who) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4674 | { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4675 | struct oscar_data *od = gc->proto_data; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4676 | struct direct_im *dim = find_direct_im(od, who); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4677 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4678 | if (!dim) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4679 | return; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4680 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4681 | od->direct_ims = g_slist_remove(od->direct_ims, dim); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4682 | gaim_input_remove(dim->watcher); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4683 | aim_conn_kill(od->sess, &dim->conn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4684 | g_free(dim); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4685 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4686 | |
| 3035 | 4687 | |
| 4688 | ||
| 2086 | 4689 | static struct prpl *my_protocol = NULL; |
| 4690 | ||
| 3630 | 4691 | G_MODULE_EXPORT void oscar_init(struct prpl *ret) { |
| 3572 | 4692 | struct proto_user_opt *puo; |
| 2086 | 4693 | ret->protocol = PROTO_OSCAR; |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3666
diff
changeset
|
4694 | ret->options = OPT_PROTO_MAIL_CHECK | OPT_PROTO_BUDDY_ICON | OPT_PROTO_IM_IMAGE; |
| 3572 | 4695 | ret->name = g_strdup("Oscar"); |
| 2086 | 4696 | ret->list_icon = oscar_list_icon; |
| 4697 | ret->away_states = oscar_away_states; | |
| 4698 | ret->actions = oscar_actions; | |
| 4699 | ret->do_action = oscar_do_action; | |
| 4700 | ret->buddy_menu = oscar_buddy_menu; | |
| 3456 | 4701 | ret->edit_buddy_menu = oscar_edit_buddy_menu; |
| 2086 | 4702 | ret->login = oscar_login; |
| 4703 | ret->close = oscar_close; | |
| 4704 | ret->send_im = oscar_send_im; | |
| 2993 | 4705 | ret->send_typing = oscar_send_typing; |
| 2086 | 4706 | ret->set_info = oscar_set_info; |
| 4707 | ret->get_info = oscar_get_info; | |
| 4708 | ret->set_away = oscar_set_away; | |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2789
diff
changeset
|
4709 | ret->get_away = oscar_get_away; |
| 2086 | 4710 | ret->set_dir = oscar_set_dir; |
| 4711 | ret->get_dir = NULL; /* Oscar really doesn't have this */ | |
| 4712 | ret->dir_search = oscar_dir_search; | |
| 4713 | ret->set_idle = oscar_set_idle; | |
| 4714 | ret->change_passwd = oscar_change_passwd; | |
| 4715 | ret->add_buddy = oscar_add_buddy; | |
| 4716 | ret->add_buddies = oscar_add_buddies; | |
| 3140 | 4717 | ret->group_buddy = oscar_move_buddy; |
|
3348
57ed471963ba
[gaim-migrate @ 3367]
Mark Doliner <markdoliner@pidgin.im>
parents:
3316
diff
changeset
|
4718 | ret->rename_group = oscar_rename_group; |
| 3630 | 4719 | ret->file_transfer_cancel = oscar_cancel_transfer; |
| 4720 | ret->file_transfer_in = oscar_start_transfer_in; | |
| 4721 | ret->file_transfer_out = oscar_start_transfer_out; | |
| 4722 | ret->file_transfer_data_chunk = oscar_transfer_data_chunk; | |
| 4723 | ret->file_transfer_nextfile = oscar_transfer_nextfile; | |
| 4724 | ret->file_transfer_done = oscar_transfer_done; | |
| 2086 | 4725 | ret->remove_buddy = oscar_remove_buddy; |
| 2991 | 4726 | ret->remove_buddies = oscar_remove_buddies; |
| 2086 | 4727 | ret->add_permit = oscar_add_permit; |
| 4728 | ret->add_deny = oscar_add_deny; | |
| 4729 | ret->rem_permit = oscar_rem_permit; | |
| 4730 | ret->rem_deny = oscar_rem_deny; | |
| 4731 | ret->set_permit_deny = oscar_set_permit_deny; | |
| 4732 | ret->warn = oscar_warn; | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2197
diff
changeset
|
4733 | ret->chat_info = oscar_chat_info; |
| 2086 | 4734 | ret->join_chat = oscar_join_chat; |
| 4735 | ret->chat_invite = oscar_chat_invite; | |
| 4736 | ret->chat_leave = oscar_chat_leave; | |
| 4737 | ret->chat_whisper = NULL; | |
| 4738 | ret->chat_send = oscar_chat_send; | |
| 4739 | ret->keepalive = oscar_keepalive; | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2235
diff
changeset
|
4740 | ret->convo_closed = oscar_convo_closed; |
| 2086 | 4741 | |
| 3572 | 4742 | puo = g_new0(struct proto_user_opt, 1); |
| 4743 | puo->label = g_strdup("Auth Host:"); | |
| 4744 | puo->def = g_strdup("login.oscar.aol.com"); | |
| 4745 | puo->pos = USEROPT_AUTH; | |
| 4746 | ret->user_opts = g_list_append(ret->user_opts, puo); | |
| 4747 | ||
| 4748 | puo = g_new0(struct proto_user_opt, 1); | |
| 4749 | puo->label = g_strdup("Auth Port:"); | |
| 4750 | puo->def = g_strdup("5190"); | |
| 4751 | puo->pos = USEROPT_AUTHPORT; | |
| 4752 | ret->user_opts = g_list_append(ret->user_opts, puo); | |
| 4753 | ||
| 2086 | 4754 | my_protocol = ret; |
| 4755 | } | |
| 4756 | ||
| 4757 | #ifndef STATIC | |
| 4758 | ||
| 3630 | 4759 | G_MODULE_EXPORT void gaim_prpl_init(struct prpl *prpl) |
| 2086 | 4760 | { |
| 3572 | 4761 | oscar_init(prpl); |
| 4762 | prpl->plug->desc.api_version = PLUGIN_API_VERSION; | |
| 2086 | 4763 | } |
| 4764 | ||
| 4765 | #endif |