Thu, 27 May 2021 20:25:24 -0500
Change the default irc server to libera.chat
This seems to make the most sense for users right now as many many channels have migrated away from freenode with many of them moving to libera.
Testing Done:
Compile only.
Reviewed at https://reviews.imfreedom.org/r/675/
| 14520 | 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ |
| 2086 | 2 | /* |
| 15884 | 3 | * purple |
| 2086 | 4 | * |
| 5 | * Copyright (C) 1998-2001, Mark Spencer <markster@marko.net> | |
| 6 | * Some code borrowed from GtkZephyr, by | |
|
7084
da83f7ead5c6
[gaim-migrate @ 7649]
Christian Hammond <chipx86@chipx86.com>
parents:
7070
diff
changeset
|
7 | * Jag/Sean Dilda <agrajag@linuxpower.org>/<smdilda@unity.ncsu.edu> |
|
da83f7ead5c6
[gaim-migrate @ 7649]
Christian Hammond <chipx86@chipx86.com>
parents:
7070
diff
changeset
|
8 | * http://gtkzephyr.linuxpower.org/ |
| 2086 | 9 | * |
| 9896 | 10 | * Some code borrowed from kzephyr, by |
| 11 | * Chris Colohan <colohan+@cs.cmu.edu> | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
12 | * |
| 2086 | 13 | * This program is free software; you can redistribute it and/or modify |
| 14 | * it under the terms of the GNU General Public License as published by | |
| 15 | * the Free Software Foundation; either version 2 of the License, or | |
| 16 | * (at your option) any later version. | |
| 17 | * | |
| 18 | * This program is distributed in the hope that it will be useful, | |
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 9896 | 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 2086 | 21 | * GNU General Public License for more details. |
| 22 | * | |
| 23 | * You should have received a copy of the GNU General Public License | |
| 24 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19832
diff
changeset
|
25 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 2086 | 26 | * |
| 9896 | 27 | |
| 28 | */ | |
|
15435
4b933b06d75e
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@pidgin.im>
parents:
15369
diff
changeset
|
29 | #include "libpurple/internal.h" |
| 2086 | 30 | |
| 8212 | 31 | #include "accountopt.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
32 | #include "debug.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
33 | #include "notify.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
34 | #include "prpl.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
35 | #include "server.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
36 | #include "util.h" |
| 9434 | 37 | #include "cmds.h" |
| 9896 | 38 | #include "privacy.h" |
| 9943 | 39 | #include "version.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
40 | |
| 9478 | 41 | #include "internal.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
42 | |
|
8386
5b9e02f4c03d
[gaim-migrate @ 9114]
Mark Doliner <markdoliner@pidgin.im>
parents:
8354
diff
changeset
|
43 | #include <strings.h> |
|
5b9e02f4c03d
[gaim-migrate @ 9114]
Mark Doliner <markdoliner@pidgin.im>
parents:
8354
diff
changeset
|
44 | |
| 8560 | 45 | #define ZEPHYR_FALLBACK_CHARSET "ISO-8859-1" |
| 46 | ||
| 9478 | 47 | /* these are deliberately high, since most people don't send multiple "PING"s */ |
| 48 | #define ZEPHYR_TYPING_SEND_TIMEOUT 15 | |
| 49 | #define ZEPHYR_TYPING_RECV_TIMEOUT 10 | |
| 9896 | 50 | #define ZEPHYR_FD_READ 0 |
| 51 | #define ZEPHYR_FD_WRITE 1 | |
| 9478 | 52 | |
| 2086 | 53 | extern Code_t ZGetLocations(ZLocations_t *, int *); |
| 54 | extern Code_t ZSetLocation(char *); | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
55 | extern Code_t ZUnsetLocation(void); |
| 9478 | 56 | extern Code_t ZGetSubscriptions(ZSubscription_t *, int*); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
57 | extern char __Zephyr_realm[]; |
| 2086 | 58 | typedef struct _zframe zframe; |
| 59 | typedef struct _zephyr_triple zephyr_triple; | |
| 9610 | 60 | typedef struct _zephyr_account zephyr_account; |
| 9896 | 61 | typedef struct _parse_tree parse_tree; |
| 2086 | 62 | |
| 9896 | 63 | typedef enum { |
| 15884 | 64 | PURPLE_ZEPHYR_NONE, /* Non-kerberized ZEPH0.2 */ |
| 65 | PURPLE_ZEPHYR_KRB4, /* ZEPH0.2 w/ KRB4 support */ | |
| 66 | PURPLE_ZEPHYR_TZC, /* tzc executable proxy */ | |
|
25105
fe13c190ca13
Remove the commas at the end of enumerator lists. This resolves warnings
Florian Quèze <florian@instantbird.org>
parents:
25085
diff
changeset
|
67 | PURPLE_ZEPHYR_INTERGALACTIC_KRB4 /* Kerberized ZEPH0.3 */ |
| 9896 | 68 | } zephyr_connection_type; |
| 9610 | 69 | |
| 70 | struct _zephyr_account { | |
| 15884 | 71 | PurpleAccount* account; |
| 9896 | 72 | char *username; |
| 73 | char *realm; | |
| 74 | char *encoding; | |
| 75 | char* galaxy; /* not yet useful */ | |
| 76 | char* krbtkfile; /* not yet useful */ | |
| 77 | guint32 nottimer; | |
| 78 | guint32 loctimer; | |
| 79 | GList *pending_zloc_names; | |
| 80 | GSList *subscrips; | |
| 81 | int last_id; | |
| 82 | unsigned short port; | |
| 83 | char ourhost[HOST_NAME_MAX + 1]; | |
| 84 | char ourhostcanon[HOST_NAME_MAX + 1]; | |
| 85 | zephyr_connection_type connection_type; | |
| 86 | int totzc[2]; | |
| 87 | int fromtzc[2]; | |
| 88 | char *exposure; | |
| 9986 | 89 | pid_t tzc_pid; |
| 90 | gchar *away; | |
| 9610 | 91 | }; |
| 9478 | 92 | |
| 9896 | 93 | #define MAXCHILDREN 20 |
| 94 | ||
| 95 | struct _parse_tree { | |
| 96 | gchar* contents; | |
| 97 | parse_tree *children[MAXCHILDREN]; | |
| 98 | int num_children; | |
| 99 | }; | |
| 100 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
101 | parse_tree null_parse_tree = { |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
102 | "", |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
103 | {NULL}, |
| 9896 | 104 | 0, |
| 105 | }; | |
| 106 | ||
| 15884 | 107 | #define use_none(zephyr) ((zephyr->connection_type == PURPLE_ZEPHYR_NONE)?1:0) |
| 108 | #define use_krb4(zephyr) ((zephyr->connection_type == PURPLE_ZEPHYR_KRB4)?1:0) | |
| 109 | #define use_tzc(zephyr) ((zephyr->connection_type == PURPLE_ZEPHYR_TZC)?1:0) | |
| 9896 | 110 | |
| 15884 | 111 | #define use_zeph02(zephyr) ( (zephyr->connection_type == PURPLE_ZEPHYR_NONE)?1: ((zephyr->connection_type == PURPLE_ZEPHYR_KRB4)?1:0)) |
| 9896 | 112 | |
| 2086 | 113 | /* struct I need for zephyr_to_html */ |
| 114 | struct _zframe { | |
| 115 | /* true for everything but @color, since inside the parens of that one is | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
116 | * the color. */ |
| 2086 | 117 | gboolean has_closer; |
| 14520 | 118 | /* @i, @b, etc. */ |
| 119 | const char *env; | |
| 120 | /* }=1, ]=2, )=4, >=8 */ | |
| 121 | int closer_mask; | |
| 122 | /* }, ], ), > */ | |
| 123 | char *closer; | |
| 2086 | 124 | /* </i>, </font>, </b>, etc. */ |
| 14520 | 125 | const char *closing; |
| 2086 | 126 | /* text including the opening html thingie. */ |
| 127 | GString *text; | |
| 14520 | 128 | /* href for links */ |
| 129 | gboolean is_href; | |
| 130 | GString *href; | |
| 2086 | 131 | struct _zframe *enclosing; |
| 132 | }; | |
| 133 | ||
| 134 | struct _zephyr_triple { | |
| 135 | char *class; | |
| 136 | char *instance; | |
| 137 | char *recipient; | |
| 138 | char *name; | |
| 139 | gboolean open; | |
| 140 | int id; | |
| 141 | }; | |
| 142 | ||
| 143 | #define z_call(func) if (func != ZERR_NONE)\ | |
| 144 | return; | |
| 145 | #define z_call_r(func) if (func != ZERR_NONE)\ | |
| 146 | return TRUE; | |
| 9896 | 147 | |
| 2086 | 148 | #define z_call_s(func, err) if (func != ZERR_NONE) {\ |
| 15884 | 149 | purple_connection_error(gc, err);\ |
| 2086 | 150 | return;\ |
| 151 | } | |
| 152 | ||
| 10867 | 153 | #ifdef WIN32 |
| 154 | extern const char *username; | |
| 155 | #endif | |
| 9896 | 156 | |
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
157 | static Code_t zephyr_subscribe_to(zephyr_account* zephyr, char* class, char *instance, char *recipient, char* galaxy) { |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
158 | size_t result; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
159 | Code_t ret_val = -1; |
| 9328 | 160 | |
| 9896 | 161 | if (use_tzc(zephyr)) { |
| 162 | /* ((tzcfodder . subscribe) ("class" "instance" "recipient")) */ | |
| 163 | gchar *zsubstr = g_strdup_printf("((tzcfodder . subscribe) (\"%s\" \"%s\" \"%s\"))\n",class,instance,recipient); | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
164 | size_t len = strlen(zsubstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
165 | result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zsubstr,len); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
166 | if (result != len) { |
|
22257
dd49963fe3f6
Use g_strerror() instead of strerror() in a few places.
Richard Laager <rlaager@pidgin.im>
parents:
22197
diff
changeset
|
167 | purple_debug_error("zephyr", "Unable to write a message: %s\n", g_strerror(errno)); |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
168 | } else { |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
169 | ret_val = ZERR_NONE; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
170 | } |
| 9896 | 171 | g_free(zsubstr); |
| 172 | } | |
| 173 | else { | |
| 174 | if (use_zeph02(zephyr)) { | |
| 175 | ZSubscription_t sub; | |
| 176 | sub.zsub_class = class; | |
| 177 | sub.zsub_classinst = instance; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
178 | sub.zsub_recipient = recipient; |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
179 | ret_val = ZSubscribeTo(&sub,1,0); |
| 9896 | 180 | } |
| 181 | } | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
182 | return ret_val; |
| 9896 | 183 | } |
| 184 | ||
| 185 | char *local_zephyr_normalize(zephyr_account* zephyr,const char *); | |
| 15884 | 186 | static void zephyr_chat_set_topic(PurpleConnection * gc, int id, const char *topic); |
| 9896 | 187 | char* zephyr_tzc_deescape_str(const char *message); |
| 188 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
189 | static char *zephyr_strip_local_realm(zephyr_account* zephyr,const char* user){ |
| 9896 | 190 | /* |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
191 | Takes in a username of the form username or username@realm |
| 9896 | 192 | and returns: |
| 193 | username, if there is no realm, or the realm is the local realm | |
| 194 | or: | |
| 195 | username@realm if there is a realm and it is foreign | |
| 196 | */ | |
| 9328 | 197 | char *tmp = g_strdup(user); |
| 198 | char *at = strchr(tmp,'@'); | |
| 9896 | 199 | if (at && !g_ascii_strcasecmp(at+1,zephyr->realm)) { |
| 9328 | 200 | /* We're passed in a username of the form user@users-realm */ |
| 201 | char* tmp2; | |
| 202 | *at = '\0'; | |
| 203 | tmp2 = g_strdup(tmp); | |
| 204 | g_free(tmp); | |
| 205 | return tmp2; | |
| 206 | } | |
| 207 | else { | |
| 208 | /* We're passed in a username of the form user or user@foreign-realm */ | |
| 209 | return tmp; | |
| 210 | } | |
| 211 | } | |
| 2086 | 212 | |
| 213 | /* this is so bad, and if Zephyr weren't so fucked up to begin with I | |
| 214 | * wouldn't do this. but it is so i will. */ | |
| 9610 | 215 | |
| 9328 | 216 | /* just for debugging */ |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
217 | static void handle_unknown(ZNotice_t *notice) |
| 2086 | 218 | { |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
219 | purple_debug_error("zephyr","z_packet: %s\n", notice->z_packet); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
220 | purple_debug_error("zephyr","z_version: %s\n", notice->z_version); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
221 | purple_debug_error("zephyr","z_kind: %d\n", (int)(notice->z_kind)); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
222 | purple_debug_error("zephyr","z_class: %s\n", notice->z_class); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
223 | purple_debug_error("zephyr","z_class_inst: %s\n", notice->z_class_inst); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
224 | purple_debug_error("zephyr","z_opcode: %s\n", notice->z_opcode); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
225 | purple_debug_error("zephyr","z_sender: %s\n", notice->z_sender); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
226 | purple_debug_error("zephyr","z_recipient: %s\n", notice->z_recipient); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
227 | purple_debug_error("zephyr","z_message: %s\n", notice->z_message); |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
228 | purple_debug_error("zephyr","z_message_len: %d\n", notice->z_message_len); |
| 2086 | 229 | } |
| 9328 | 230 | |
| 2086 | 231 | |
| 9610 | 232 | static zephyr_triple *new_triple(zephyr_account *zephyr,const char *c, const char *i, const char *r) |
| 2086 | 233 | { |
| 234 | zephyr_triple *zt; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
235 | |
| 2086 | 236 | zt = g_new0(zephyr_triple, 1); |
| 237 | zt->class = g_strdup(c); | |
| 238 | zt->instance = g_strdup(i); | |
| 239 | zt->recipient = g_strdup(r); | |
| 9610 | 240 | zt->name = g_strdup_printf("%s,%s,%s", c, i?i:"", r?r:""); |
| 241 | zt->id = ++(zephyr->last_id); | |
| 2086 | 242 | zt->open = FALSE; |
| 243 | return zt; | |
| 244 | } | |
| 245 | ||
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
246 | static void free_triple(zephyr_triple * zt) |
| 2086 | 247 | { |
| 248 | g_free(zt->class); | |
| 249 | g_free(zt->instance); | |
| 250 | g_free(zt->recipient); | |
| 251 | g_free(zt->name); | |
| 252 | g_free(zt); | |
| 253 | } | |
| 254 | ||
| 9328 | 255 | /* returns true if zt1 is a subset of zt2. This function is used to |
| 256 | determine whether a zephyr sent to zt1 should be placed in the chat | |
| 257 | with triple zt2 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
258 | |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
259 | zt1 is a subset of zt2 |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
260 | iff. the classnames are identical ignoring case |
| 9328 | 261 | AND. the instance names are identical (ignoring case), or zt2->instance is *. |
| 262 | AND. the recipient names are identical | |
| 263 | */ | |
| 264 | ||
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
265 | static gboolean triple_subset(zephyr_triple * zt1, zephyr_triple * zt2) |
| 2086 | 266 | { |
| 9896 | 267 | |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
268 | if (!zt2) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
269 | purple_debug_error("zephyr","zt2 doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
270 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
271 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
272 | if (!zt1) { |
| 15884 | 273 | purple_debug_error("zephyr","zt1 doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
274 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
275 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
276 | if (!(zt1->class)) { |
| 15884 | 277 | purple_debug_error("zephyr","zt1c doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
278 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
279 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
280 | if (!(zt1->instance)) { |
| 15884 | 281 | purple_debug_error("zephyr","zt1i doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
282 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
283 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
284 | if (!(zt1->recipient)) { |
| 15884 | 285 | purple_debug_error("zephyr","zt1r doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
286 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
287 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
288 | if (!(zt2->class)) { |
| 15884 | 289 | purple_debug_error("zephyr","zt2c doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
290 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
291 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
292 | if (!(zt2->recipient)) { |
| 15884 | 293 | purple_debug_error("zephyr","zt2r doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
294 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
295 | } |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
296 | if (!(zt2->instance)) { |
| 15884 | 297 | purple_debug_error("zephyr","zt2i doesn't exist\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
298 | return FALSE; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
299 | } |
| 9896 | 300 | |
| 9328 | 301 | if (g_ascii_strcasecmp(zt2->class, zt1->class)) { |
| 2086 | 302 | return FALSE; |
| 303 | } | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
304 | if (g_ascii_strcasecmp(zt2->instance, zt1->instance) && g_ascii_strcasecmp(zt2->instance, "*")) { |
| 2086 | 305 | return FALSE; |
| 306 | } | |
| 9328 | 307 | if (g_ascii_strcasecmp(zt2->recipient, zt1->recipient)) { |
| 2086 | 308 | return FALSE; |
| 309 | } | |
| 15884 | 310 | purple_debug_info("zephyr","<%s,%s,%s> is in <%s,%s,%s>\n",zt1->class,zt1->instance,zt1->recipient,zt2->class,zt2->instance,zt2->recipient); |
| 2086 | 311 | return TRUE; |
| 312 | } | |
| 313 | ||
| 9610 | 314 | static zephyr_triple *find_sub_by_triple(zephyr_account *zephyr,zephyr_triple * zt) |
| 2086 | 315 | { |
| 316 | zephyr_triple *curr_t; | |
| 9610 | 317 | GSList *curr = zephyr->subscrips; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
318 | |
| 2086 | 319 | while (curr) { |
| 320 | curr_t = curr->data; | |
| 321 | if (triple_subset(zt, curr_t)) | |
| 322 | return curr_t; | |
| 323 | curr = curr->next; | |
| 324 | } | |
| 325 | return NULL; | |
| 326 | } | |
| 327 | ||
| 9610 | 328 | static zephyr_triple *find_sub_by_id(zephyr_account *zephyr,int id) |
| 2086 | 329 | { |
| 330 | zephyr_triple *zt; | |
| 9610 | 331 | GSList *curr = zephyr->subscrips; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
332 | |
| 2086 | 333 | while (curr) { |
| 334 | zt = curr->data; | |
| 335 | if (zt->id == id) | |
| 336 | return zt; | |
| 337 | curr = curr->next; | |
| 338 | } | |
| 339 | return NULL; | |
| 340 | } | |
| 341 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
342 | /* |
| 9434 | 343 | Converts strings to utf-8 if necessary using user specified encoding |
| 9328 | 344 | */ |
| 345 | ||
|
24806
467284acbc0c
Remove the length parameter from zephyr_recv_convert(), because we were
Richard Laager <rlaager@pidgin.im>
parents:
24756
diff
changeset
|
346 | static gchar *zephyr_recv_convert(PurpleConnection *gc, gchar *string) |
| 8560 | 347 | { |
| 348 | gchar *utf8; | |
| 349 | GError *err = NULL; | |
| 9896 | 350 | zephyr_account *zephyr = gc->proto_data; |
| 24808 | 351 | if (g_utf8_validate(string, -1, NULL)) { |
|
8568
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
352 | return g_strdup(string); |
|
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
353 | } else { |
|
24806
467284acbc0c
Remove the length parameter from zephyr_recv_convert(), because we were
Richard Laager <rlaager@pidgin.im>
parents:
24756
diff
changeset
|
354 | utf8 = g_convert(string, -1, "UTF-8", zephyr->encoding, NULL, NULL, &err); |
|
8568
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
355 | if (err) { |
| 15884 | 356 | purple_debug_error("zephyr", "recv conversion error: %s\n", err->message); |
| 9896 | 357 | utf8 = g_strdup(_("(There was an error converting this message. Check the 'Encoding' option in the Account Editor)")); |
| 8954 | 358 | g_error_free(err); |
|
8568
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
359 | } |
|
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
360 | |
|
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
361 | return utf8; |
|
66907b37ce85
[gaim-migrate @ 9316]
Mark Doliner <markdoliner@pidgin.im>
parents:
8562
diff
changeset
|
362 | } |
| 8560 | 363 | } |
| 364 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
365 | /* This parses HTML formatting (put out by one of the gtkimhtml widgets |
| 8451 | 366 | And converts it to zephyr formatting. |
| 367 | It currently deals properly with <b>, <br>, <i>, <font face=...>, <font color=...>, | |
| 368 | It ignores <font back=...> | |
| 369 | It does | |
| 370 | <font size = "1 or 2" -> @small | |
| 371 | 3 or 4 @medium() | |
| 372 | 5,6, or 7 @large() | |
| 14520 | 373 | <a href is dealt with by outputting "description <link>" or just "description" as appropriate |
| 8451 | 374 | */ |
| 375 | ||
| 376 | static char *html_to_zephyr(const char *message) | |
| 377 | { | |
| 14520 | 378 | zframe *frames, *new_f; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
379 | char *ret; |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
380 | |
| 14520 | 381 | if (*message == '\0') |
| 9478 | 382 | return g_strdup(""); |
| 383 | ||
| 14520 | 384 | frames = g_new(zframe, 1); |
| 385 | frames->text = g_string_new(""); | |
| 386 | frames->href = NULL; | |
| 387 | frames->is_href = FALSE; | |
| 388 | frames->enclosing = NULL; | |
| 389 | frames->closing = NULL; | |
| 390 | frames->env = ""; | |
| 391 | frames->has_closer = FALSE; | |
| 392 | frames->closer_mask = 15; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
393 | |
| 15884 | 394 | purple_debug_info("zephyr","html received %s\n",message); |
| 14520 | 395 | while (*message) { |
| 396 | if (frames->closing && !g_ascii_strncasecmp(message, frames->closing, strlen(frames->closing))) { | |
| 397 | zframe *popped; | |
| 398 | message += strlen(frames->closing); | |
| 399 | popped = frames; | |
| 400 | frames = frames->enclosing; | |
| 401 | if (popped->is_href) { | |
| 402 | frames->href = popped->text; | |
| 403 | } else { | |
| 404 | g_string_append(frames->text, popped->env); | |
| 405 | if (popped->has_closer) { | |
| 406 | g_string_append_c(frames->text, | |
| 407 | (popped->closer_mask & 1) ? '{' : | |
| 408 | (popped->closer_mask & 2) ? '[' : | |
| 409 | (popped->closer_mask & 4) ? '(' : | |
| 410 | '<'); | |
| 9896 | 411 | } |
| 14520 | 412 | g_string_append(frames->text, popped->text->str); |
| 413 | if (popped->href) | |
| 414 | { | |
| 415 | int text_len = strlen(popped->text->str), href_len = strlen(popped->href->str); | |
| 416 | if (!((text_len == href_len && !strncmp(popped->href->str, popped->text->str, text_len)) || | |
| 417 | (7 + text_len == href_len && !strncmp(popped->href->str, "http://", 7) && | |
| 418 | !strncmp(popped->href->str + 7, popped->text->str, text_len)) || | |
| 419 | (7 + text_len == href_len && !strncmp(popped->href->str, "mailto:", 7) && | |
| 420 | !strncmp(popped->href->str + 7, popped->text->str, text_len)))) { | |
| 421 | g_string_append(frames->text, " <"); | |
| 422 | g_string_append(frames->text, popped->href->str); | |
| 423 | if (popped->closer_mask & ~8) { | |
| 424 | g_string_append_c(frames->text, '>'); | |
| 425 | popped->closer_mask &= ~8; | |
| 426 | } else { | |
| 427 | g_string_append(frames->text, "@{>}"); | |
| 428 | } | |
| 429 | } | |
| 430 | g_string_free(popped->href, TRUE); | |
| 9896 | 431 | } |
| 14520 | 432 | if (popped->has_closer) { |
| 433 | g_string_append_c(frames->text, | |
| 434 | (popped->closer_mask & 1) ? '}' : | |
| 435 | (popped->closer_mask & 2) ? ']' : | |
| 436 | (popped->closer_mask & 4) ? ')' : | |
| 437 | '>'); | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
438 | } |
| 14520 | 439 | if (!popped->has_closer) |
| 440 | frames->closer_mask = popped->closer_mask; | |
| 441 | g_string_free(popped->text, TRUE); | |
| 442 | } | |
| 443 | g_free(popped); | |
| 444 | } else if (*message == '<') { | |
| 445 | if (!g_ascii_strncasecmp(message + 1, "i>", 2)) { | |
| 446 | new_f = g_new(zframe, 1); | |
| 447 | new_f->enclosing = frames; | |
| 448 | new_f->text = g_string_new(""); | |
| 449 | new_f->href = NULL; | |
| 450 | new_f->is_href = FALSE; | |
| 451 | new_f->closing = "</i>"; | |
| 452 | new_f->env = "@i"; | |
| 453 | new_f->has_closer = TRUE; | |
| 454 | new_f->closer_mask = 15; | |
| 455 | frames = new_f; | |
| 456 | message += 3; | |
| 457 | } else if (!g_ascii_strncasecmp(message + 1, "b>", 2)) { | |
| 458 | new_f = g_new(zframe, 1); | |
| 459 | new_f->enclosing = frames; | |
| 460 | new_f->text = g_string_new(""); | |
| 461 | new_f->href = NULL; | |
| 462 | new_f->is_href = FALSE; | |
| 463 | new_f->closing = "</b>"; | |
| 464 | new_f->env = "@b"; | |
| 465 | new_f->has_closer = TRUE; | |
| 466 | new_f->closer_mask = 15; | |
| 467 | frames = new_f; | |
| 468 | message += 3; | |
| 469 | } else if (!g_ascii_strncasecmp(message + 1, "br>", 3)) { | |
| 470 | g_string_append_c(frames->text, '\n'); | |
| 471 | message += 4; | |
| 472 | } else if (!g_ascii_strncasecmp(message + 1, "a href=\"", 8)) { | |
| 473 | message += 9; | |
| 474 | new_f = g_new(zframe, 1); | |
| 475 | new_f->enclosing = frames; | |
| 476 | new_f->text = g_string_new(""); | |
| 477 | new_f->href = NULL; | |
| 478 | new_f->is_href = FALSE; | |
| 479 | new_f->closing = "</a>"; | |
| 480 | new_f->env = ""; | |
| 481 | new_f->has_closer = FALSE; | |
| 482 | new_f->closer_mask = frames->closer_mask; | |
| 483 | frames = new_f; | |
| 484 | new_f = g_new(zframe, 1); | |
| 485 | new_f->enclosing = frames; | |
| 486 | new_f->text = g_string_new(""); | |
| 487 | new_f->href = NULL; | |
| 488 | new_f->is_href = TRUE; | |
| 489 | new_f->closing = "\">"; | |
| 490 | new_f->has_closer = FALSE; | |
| 491 | new_f->closer_mask = frames->closer_mask; | |
| 492 | frames = new_f; | |
| 493 | } else if (!g_ascii_strncasecmp(message + 1, "font", 4)) { | |
| 494 | new_f = g_new(zframe, 1); | |
| 495 | new_f->enclosing = frames; | |
| 496 | new_f->text = g_string_new(""); | |
| 497 | new_f->href = NULL; | |
| 498 | new_f->is_href = FALSE; | |
| 499 | new_f->closing = "</font>"; | |
| 500 | new_f->has_closer = TRUE; | |
| 501 | new_f->closer_mask = 15; | |
| 502 | message += 5; | |
| 503 | while (*message == ' ') | |
| 504 | message++; | |
| 505 | if (!g_ascii_strncasecmp(message, "color=\"", 7)) { | |
| 506 | message += 7; | |
| 507 | new_f->env = "@"; | |
| 508 | frames = new_f; | |
| 509 | new_f = g_new(zframe, 1); | |
| 510 | new_f->enclosing = frames; | |
| 511 | new_f->env = "@color"; | |
| 512 | new_f->text = g_string_new(""); | |
| 513 | new_f->href = NULL; | |
| 514 | new_f->is_href = FALSE; | |
| 515 | new_f->closing = "\">"; | |
| 516 | new_f->has_closer = TRUE; | |
| 517 | new_f->closer_mask = 15; | |
| 518 | } else if (!g_ascii_strncasecmp(message, "face=\"", 6)) { | |
| 519 | message += 6; | |
| 520 | new_f->env = "@"; | |
| 521 | frames = new_f; | |
| 522 | new_f = g_new(zframe, 1); | |
| 523 | new_f->enclosing = frames; | |
| 524 | new_f->env = "@font"; | |
| 525 | new_f->text = g_string_new(""); | |
| 526 | new_f->href = NULL; | |
| 527 | new_f->is_href = FALSE; | |
| 528 | new_f->closing = "\">"; | |
| 529 | new_f->has_closer = TRUE; | |
| 530 | new_f->closer_mask = 15; | |
| 531 | } else if (!g_ascii_strncasecmp(message, "size=\"", 6)) { | |
| 532 | message += 6; | |
| 533 | if ((*message == '1') || (*message == '2')) { | |
| 534 | new_f->env = "@small"; | |
| 535 | } else if ((*message == '3') | |
| 536 | || (*message == '4')) { | |
| 537 | new_f->env = "@medium"; | |
| 538 | } else if ((*message == '5') | |
| 539 | || (*message == '6') | |
| 540 | || (*message == '7')) { | |
| 541 | new_f->env = "@large"; | |
| 542 | } else { | |
| 543 | new_f->env = ""; | |
| 544 | new_f->has_closer = FALSE; | |
| 545 | new_f->closer_mask = frames->closer_mask; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
546 | } |
| 14520 | 547 | message += 3; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
548 | } else { |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
549 | /* Drop all unrecognized/misparsed font tags */ |
| 14520 | 550 | new_f->env = ""; |
| 551 | new_f->has_closer = FALSE; | |
| 552 | new_f->closer_mask = frames->closer_mask; | |
| 553 | while (g_ascii_strncasecmp(message, "\">", 2) != 0) { | |
| 554 | message++; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
555 | } |
| 14520 | 556 | if (*message != '\0') |
| 557 | message += 2; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
558 | } |
| 14520 | 559 | frames = new_f; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
560 | } else { |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
561 | /* Catch all for all unrecognized/misparsed <foo> tage */ |
| 14520 | 562 | g_string_append_c(frames->text, *message++); |
| 563 | } | |
| 564 | } else if (*message == '@') { | |
| 565 | g_string_append(frames->text, "@@"); | |
| 566 | message++; | |
| 567 | } else if (*message == '}') { | |
| 568 | if (frames->closer_mask & ~1) { | |
| 569 | frames->closer_mask &= ~1; | |
| 570 | g_string_append_c(frames->text, *message++); | |
| 571 | } else { | |
| 572 | g_string_append(frames->text, "@[}]"); | |
| 573 | message++; | |
| 574 | } | |
| 575 | } else if (*message == ']') { | |
| 576 | if (frames->closer_mask & ~2) { | |
| 577 | frames->closer_mask &= ~2; | |
| 578 | g_string_append_c(frames->text, *message++); | |
| 579 | } else { | |
| 580 | g_string_append(frames->text, "@{]}"); | |
| 581 | message++; | |
| 582 | } | |
| 583 | } else if (*message == ')') { | |
| 584 | if (frames->closer_mask & ~4) { | |
| 585 | frames->closer_mask &= ~4; | |
| 586 | g_string_append_c(frames->text, *message++); | |
| 587 | } else { | |
| 588 | g_string_append(frames->text, "@{)}"); | |
| 589 | message++; | |
| 590 | } | |
| 591 | } else if (!g_ascii_strncasecmp(message, ">", 4)) { | |
| 592 | if (frames->closer_mask & ~8) { | |
| 593 | frames->closer_mask &= ~8; | |
| 594 | g_string_append_c(frames->text, *message++); | |
| 595 | } else { | |
| 596 | g_string_append(frames->text, "@{>}"); | |
| 597 | message += 4; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
598 | } |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
599 | } else { |
| 14520 | 600 | g_string_append_c(frames->text, *message++); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
601 | } |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
602 | } |
| 14520 | 603 | ret = frames->text->str; |
| 604 | g_string_free(frames->text, FALSE); | |
| 605 | g_free(frames); | |
| 15884 | 606 | purple_debug_info("zephyr","zephyr outputted %s\n",ret); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
607 | return ret; |
| 8451 | 608 | } |
| 609 | ||
| 2086 | 610 | /* this parses zephyr formatting and converts it to html. For example, if |
| 611 | * you pass in "@{@color(blue)@i(hello)}" you should get out | |
| 612 | * "<font color=blue><i>hello</i></font>". */ | |
| 14520 | 613 | static char *zephyr_to_html(const char *message) |
| 2086 | 614 | { |
| 615 | zframe *frames, *curr; | |
| 616 | char *ret; | |
| 617 | ||
| 618 | frames = g_new(zframe, 1); | |
| 619 | frames->text = g_string_new(""); | |
| 620 | frames->enclosing = NULL; | |
| 621 | frames->closing = ""; | |
| 622 | frames->has_closer = FALSE; | |
| 14520 | 623 | frames->closer = NULL; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
624 | |
| 14520 | 625 | while (*message) { |
| 626 | if (*message == '@' && message[1] == '@') { | |
| 627 | g_string_append(frames->text, "@"); | |
| 628 | message += 2; | |
| 629 | } else if (*message == '@') { | |
| 630 | int end; | |
| 631 | for (end = 1; message[end] && (isalnum(message[end]) || message[end] == '_'); end++); | |
| 632 | if (message[end] && | |
| 633 | (message[end] == '{' || message[end] == '[' || message[end] == '(' || | |
| 634 | !g_ascii_strncasecmp(message + end, "<", 4))) { | |
| 635 | zframe *new_f; | |
| 636 | char *buf; | |
| 637 | buf = g_new0(char, end); | |
| 638 | g_snprintf(buf, end, "%s", message + 1); | |
| 639 | message += end; | |
| 8451 | 640 | new_f = g_new(zframe, 1); |
| 641 | new_f->enclosing = frames; | |
| 2086 | 642 | new_f->has_closer = TRUE; |
| 14520 | 643 | new_f->closer = (*message == '{' ? "}" : |
| 644 | *message == '[' ? "]" : | |
| 645 | *message == '(' ? ")" : | |
| 646 | ">"); | |
| 647 | message += (*message == '&' ? 4 : 1); | |
| 648 | if (!g_ascii_strcasecmp(buf, "italic") || !g_ascii_strcasecmp(buf, "i")) { | |
| 649 | new_f->text = g_string_new("<i>"); | |
| 650 | new_f->closing = "</i>"; | |
| 651 | } else if (!g_ascii_strcasecmp(buf, "small")) { | |
| 652 | new_f->text = g_string_new("<font size=\"1\">"); | |
| 653 | new_f->closing = "</font>"; | |
| 654 | } else if (!g_ascii_strcasecmp(buf, "medium")) { | |
| 655 | new_f->text = g_string_new("<font size=\"3\">"); | |
| 656 | new_f->closing = "</font>"; | |
| 657 | } else if (!g_ascii_strcasecmp(buf, "large")) { | |
| 658 | new_f->text = g_string_new("<font size=\"7\">"); | |
| 659 | new_f->closing = "</font>"; | |
| 660 | } else if (!g_ascii_strcasecmp(buf, "bold") | |
| 661 | || !g_ascii_strcasecmp(buf, "b")) { | |
| 662 | new_f->text = g_string_new("<b>"); | |
| 663 | new_f->closing = "</b>"; | |
| 664 | } else if (!g_ascii_strcasecmp(buf, "font")) { | |
| 665 | zframe *extra_f; | |
| 666 | extra_f = g_new(zframe, 1); | |
| 667 | extra_f->enclosing = frames; | |
| 668 | new_f->enclosing = extra_f; | |
| 669 | extra_f->text = g_string_new(""); | |
| 670 | extra_f->has_closer = FALSE; | |
| 671 | extra_f->closer = frames->closer; | |
| 672 | extra_f->closing = "</font>"; | |
| 673 | new_f->text = g_string_new("<font face=\""); | |
| 674 | new_f->closing = "\">"; | |
| 675 | } else if (!g_ascii_strcasecmp(buf, "color")) { | |
| 676 | zframe *extra_f; | |
| 677 | extra_f = g_new(zframe, 1); | |
| 678 | extra_f->enclosing = frames; | |
| 679 | new_f->enclosing = extra_f; | |
| 680 | extra_f->text = g_string_new(""); | |
| 681 | extra_f->has_closer = FALSE; | |
| 682 | extra_f->closer = frames->closer; | |
| 683 | extra_f->closing = "</font>"; | |
| 684 | new_f->text = g_string_new("<font color=\""); | |
| 685 | new_f->closing = "\">"; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
686 | } else { |
| 2086 | 687 | new_f->text = g_string_new(""); |
| 688 | new_f->closing = ""; | |
| 689 | } | |
| 14520 | 690 | frames = new_f; |
| 691 | } else { | |
| 692 | /* Not a formatting tag, add the character as normal. */ | |
| 693 | g_string_append_c(frames->text, *message++); | |
| 2086 | 694 | } |
| 14520 | 695 | } else if (frames->closer && !g_ascii_strncasecmp(message, frames->closer, strlen(frames->closer))) { |
| 2086 | 696 | zframe *popped; |
| 697 | gboolean last_had_closer; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
698 | |
| 14520 | 699 | message += strlen(frames->closer); |
|
36029
cd7db320cf5c
Fix coverity regression warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35993
diff
changeset
|
700 | if (frames->enclosing) { |
| 2086 | 701 | do { |
| 702 | popped = frames; | |
| 703 | frames = frames->enclosing; | |
| 704 | g_string_append(frames->text, popped->text->str); | |
| 705 | g_string_append(frames->text, popped->closing); | |
| 706 | g_string_free(popped->text, TRUE); | |
| 707 | last_had_closer = popped->has_closer; | |
| 708 | g_free(popped); | |
|
36029
cd7db320cf5c
Fix coverity regression warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35993
diff
changeset
|
709 | } while (frames->enclosing && !last_had_closer); |
| 2086 | 710 | } else { |
| 14520 | 711 | g_string_append_c(frames->text, *message); |
| 2086 | 712 | } |
| 14520 | 713 | } else if (*message == '\n') { |
| 2086 | 714 | g_string_append(frames->text, "<br>"); |
| 14520 | 715 | message++; |
| 2086 | 716 | } else { |
| 14520 | 717 | g_string_append_c(frames->text, *message++); |
| 2086 | 718 | } |
| 719 | } | |
| 720 | /* go through all the stuff that they didn't close */ | |
| 721 | while (frames->enclosing) { | |
| 722 | curr = frames; | |
| 723 | g_string_append(frames->enclosing->text, frames->text->str); | |
| 724 | g_string_append(frames->enclosing->text, frames->closing); | |
| 725 | g_string_free(frames->text, TRUE); | |
| 726 | frames = frames->enclosing; | |
| 727 | g_free(curr); | |
| 728 | } | |
| 729 | ret = frames->text->str; | |
| 730 | g_string_free(frames->text, FALSE); | |
| 731 | g_free(frames); | |
| 732 | return ret; | |
| 733 | } | |
| 734 | ||
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
735 | static gboolean pending_zloc(zephyr_account *zephyr, const char *who) |
| 2086 | 736 | { |
| 737 | GList *curr; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
738 | |
| 9610 | 739 | for (curr = zephyr->pending_zloc_names; curr != NULL; curr = curr->next) { |
| 9896 | 740 | char* normalized_who = local_zephyr_normalize(zephyr,who); |
| 9328 | 741 | if (!g_ascii_strcasecmp(normalized_who, (char *)curr->data)) { |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
742 | g_free((char *)curr->data); |
| 9610 | 743 | zephyr->pending_zloc_names = g_list_remove(zephyr->pending_zloc_names, curr->data); |
| 2086 | 744 | return TRUE; |
| 745 | } | |
| 746 | } | |
| 747 | return FALSE; | |
| 748 | } | |
| 749 | ||
| 9328 | 750 | /* Called when the server notifies us a message couldn't get sent */ |
| 751 | ||
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
752 | static void message_failed(PurpleConnection *gc, ZNotice_t *notice, struct sockaddr_in from) |
| 8559 | 753 | { |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
754 | if (g_ascii_strcasecmp(notice->z_class, "message")) { |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
755 | gchar* chat_failed = g_strdup_printf( |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
756 | _("Unable to send to chat %s,%s,%s"), |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
757 | notice->z_class, notice->z_class_inst, |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
758 | notice->z_recipient); |
| 15884 | 759 | purple_notify_error(gc,"",chat_failed,NULL); |
| 9328 | 760 | g_free(chat_failed); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
761 | } else { |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
762 | purple_notify_error(gc, notice->z_recipient, |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
763 | _("User is offline"), NULL); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
764 | } |
| 8559 | 765 | } |
| 766 | ||
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
767 | static void handle_message(PurpleConnection *gc, ZNotice_t *notice_p) |
| 2086 | 768 | { |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
769 | ZNotice_t notice; |
| 9896 | 770 | zephyr_account* zephyr = gc->proto_data; |
| 771 | ||
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
772 | memcpy(¬ice, notice_p, sizeof(notice)); /* TODO - use pointer? */ |
|
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
773 | |
| 4793 | 774 | if (!g_ascii_strcasecmp(notice.z_class, LOGIN_CLASS)) { |
| 3277 | 775 | /* well, we'll be updating in 20 seconds anyway, might as well ignore this. */ |
| 4793 | 776 | } else if (!g_ascii_strcasecmp(notice.z_class, LOCATE_CLASS)) { |
| 777 | if (!g_ascii_strcasecmp(notice.z_opcode, LOCATE_LOCATE)) { | |
| 2086 | 778 | int nlocs; |
| 779 | char *user; | |
| 15884 | 780 | PurpleBuddy *b; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
781 | const char *bname; |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
782 | |
| 9478 | 783 | /* XXX add real error reporting */ |
| 2086 | 784 | if (ZParseLocations(¬ice, NULL, &nlocs, &user) != ZERR_NONE) |
| 785 | return; | |
| 8435 | 786 | |
| 15884 | 787 | if ((b = purple_find_buddy(gc->account, user)) == NULL) { |
| 9986 | 788 | char* stripped_user = zephyr_strip_local_realm(zephyr,user); |
| 15884 | 789 | b = purple_find_buddy(gc->account,stripped_user); |
| 9986 | 790 | g_free(stripped_user); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
791 | } |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
792 | |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
793 | bname = b ? purple_buddy_get_name(b) : NULL; |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
794 | if ((b && pending_zloc(zephyr,bname)) || pending_zloc(zephyr,user)) { |
| 2086 | 795 | ZLocations_t locs; |
| 796 | int one = 1; | |
| 15884 | 797 | PurpleNotifyUserInfo *user_info = purple_notify_user_info_new(); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
798 | char *tmp; |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
799 | const char *balias; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
800 | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
801 | purple_notify_user_info_add_pair(user_info, _("User"), (b ? bname : user)); |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
802 | balias = purple_buddy_get_local_buddy_alias(b); |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
803 | if (b && balias) |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
804 | purple_notify_user_info_add_pair(user_info, _("Alias"), balias); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
805 | |
| 2086 | 806 | if (!nlocs) { |
| 15884 | 807 | purple_notify_user_info_add_pair(user_info, NULL, _("Hidden or not logged-in")); |
| 2086 | 808 | } |
| 809 | for (; nlocs > 0; nlocs--) { | |
| 9478 | 810 | /* XXX add real error reporting */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
811 | |
| 2086 | 812 | ZGetLocations(&locs, &one); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
813 | tmp = g_strdup_printf(_("<br>At %s since %s"), locs.host, locs.time); |
| 15884 | 814 | purple_notify_user_info_add_pair(user_info, _("Location"), tmp); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
815 | g_free(tmp); |
| 2086 | 816 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
817 | purple_notify_userinfo(gc, (b ? bname : user), |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
818 | user_info, NULL, NULL); |
| 15884 | 819 | purple_notify_user_info_destroy(user_info); |
| 9986 | 820 | } else { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
821 | if (nlocs>0) |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
822 | purple_prpl_got_user_status(gc->account, b ? bname : user, "available", NULL); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
823 | else |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
824 | purple_prpl_got_user_status(gc->account, b ? bname : user, "offline", NULL); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
825 | } |
| 2086 | 826 | |
| 9434 | 827 | g_free(user); |
| 2086 | 828 | } |
| 829 | } else { | |
| 8560 | 830 | char *buf, *buf2, *buf3; |
| 2804 | 831 | char *send_inst; |
| 15884 | 832 | PurpleConversation *gconv1; |
| 833 | PurpleConvChat *gcc; | |
|
12624
c1c92f08976b
[gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents:
12621
diff
changeset
|
834 | char *ptr = (char *) notice.z_message + (strlen(notice.z_message) + 1); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
835 | int len; |
|
24807
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
836 | char *stripped_sender; |
| 9478 | 837 | int signature_length = strlen(notice.z_message); |
| 15884 | 838 | PurpleMessageFlags flags = 0; |
| 9896 | 839 | gchar *tmpescape; |
| 8560 | 840 | |
| 9478 | 841 | /* Need to deal with 0 length messages to handle typing notification (OPCODE) ping messages */ |
| 15884 | 842 | /* One field zephyrs would have caused purple to crash */ |
| 9478 | 843 | if ( (notice.z_message_len == 0) || (signature_length >= notice.z_message_len - 1)) { |
| 844 | len = 0; | |
| 15884 | 845 | purple_debug_info("zephyr","message_size %d %d %d\n",len,notice.z_message_len,signature_length); |
| 9478 | 846 | buf3 = g_strdup(""); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
847 | |
| 9478 | 848 | } else { |
| 849 | len = notice.z_message_len - ( signature_length +1); | |
| 15884 | 850 | purple_debug_info("zephyr","message_size %d %d %d\n",len,notice.z_message_len,signature_length); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
851 | buf = g_malloc(len + 1); |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
852 | g_snprintf(buf, len + 1, "%s", ptr); |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
853 | g_strchomp(buf); |
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10690
diff
changeset
|
854 | tmpescape = g_markup_escape_text(buf, -1); |
| 9478 | 855 | g_free(buf); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
856 | buf2 = zephyr_to_html(tmpescape); |
|
24806
467284acbc0c
Remove the length parameter from zephyr_recv_convert(), because we were
Richard Laager <rlaager@pidgin.im>
parents:
24756
diff
changeset
|
857 | buf3 = zephyr_recv_convert(gc, buf2); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
858 | g_free(buf2); |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
859 | g_free(tmpescape); |
| 9478 | 860 | } |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
861 | |
|
24807
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
862 | stripped_sender = zephyr_strip_local_realm(zephyr,notice.z_sender); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
863 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
864 | if (!g_ascii_strcasecmp(notice.z_class, "MESSAGE") && !g_ascii_strcasecmp(notice.z_class_inst, "PERSONAL") |
| 9896 | 865 | && !g_ascii_strcasecmp(notice.z_recipient,zephyr->username)) { |
| 866 | if (!g_ascii_strcasecmp(notice.z_message, "Automated reply:")) | |
| 15884 | 867 | flags |= PURPLE_MESSAGE_AUTO_RESP; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
868 | |
| 9478 | 869 | if (!g_ascii_strcasecmp(notice.z_opcode,"PING")) |
| 15884 | 870 | serv_got_typing(gc,stripped_sender,ZEPHYR_TYPING_RECV_TIMEOUT, PURPLE_TYPING); |
|
22391
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
871 | else |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
872 | serv_got_im(gc, stripped_sender, buf3, flags, time(NULL)); |
| 9896 | 873 | |
| 874 | } else { | |
| 875 | zephyr_triple *zt1, *zt2; | |
| 876 | gchar *send_inst_utf8; | |
| 877 | zephyr_account *zephyr = gc->proto_data; | |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
878 | zt1 = new_triple(zephyr,notice.z_class, notice.z_class_inst, notice.z_recipient); |
|
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
879 | zt2 = find_sub_by_triple(zephyr,zt1); |
| 9896 | 880 | if (!zt2) { |
| 881 | /* This is a server supplied subscription */ | |
| 882 | zephyr->subscrips = g_slist_append(zephyr->subscrips, new_triple(zephyr,zt1->class,zt1->instance,zt1->recipient)); | |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
883 | zt2 = find_sub_by_triple(zephyr,zt1); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
884 | } |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
885 | |
| 9896 | 886 | if (!zt2->open) { |
| 887 | zt2->open = TRUE; | |
| 888 | serv_got_joined_chat(gc, zt2->id, zt2->name); | |
| 889 | zephyr_chat_set_topic(gc,zt2->id,notice.z_class_inst); | |
| 890 | } | |
|
24807
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
891 | |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
892 | if (!g_ascii_strcasecmp(notice.z_class_inst,"PERSONAL")) |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
893 | send_inst_utf8 = g_strdup(stripped_sender); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
894 | else { |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
895 | send_inst = g_strdup_printf("[%s] %s",notice.z_class_inst,stripped_sender); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
896 | send_inst_utf8 = zephyr_recv_convert(gc,send_inst); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
897 | g_free(send_inst); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
898 | if (!send_inst_utf8) { |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
899 | purple_debug_error("zephyr","Failed to convert instance for sender %s.\n", stripped_sender); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
900 | send_inst_utf8 = g_strdup(stripped_sender); |
|
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
901 | } |
| 2086 | 902 | } |
| 9912 | 903 | |
| 15884 | 904 | gconv1 = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10116
diff
changeset
|
905 | zt2->name, gc->account); |
| 15884 | 906 | gcc = purple_conversation_get_chat_data(gconv1); |
|
23352
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
907 | #ifndef INET_ADDRSTRLEN |
|
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
908 | #define INET_ADDRSTRLEN 16 |
|
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
909 | #endif |
| 24808 | 910 | if (!purple_conv_chat_find_user(gcc, stripped_sender)) { |
|
15369
9820bdea78a6
[gaim-migrate @ 18098]
Evan Schoenberg <evands@pidgin.im>
parents:
15205
diff
changeset
|
911 | gchar ipaddr[INET_ADDRSTRLEN]; |
|
23352
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
912 | #ifdef HAVE_INET_NTOP |
|
15369
9820bdea78a6
[gaim-migrate @ 18098]
Evan Schoenberg <evands@pidgin.im>
parents:
15205
diff
changeset
|
913 | inet_ntop(AF_INET, ¬ice.z_sender_addr.s_addr, ipaddr, sizeof(ipaddr)); |
|
23352
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
914 | #else |
|
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
915 | memcpy(ipaddr,inet_ntoa(notice.z_sender_addr),sizeof(ipaddr)); |
|
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23315
diff
changeset
|
916 | #endif |
| 24809 | 917 | purple_conv_chat_add_user(gcc, stripped_sender, ipaddr, PURPLE_CBFLAGS_NONE, TRUE); |
| 9896 | 918 | } |
|
15369
9820bdea78a6
[gaim-migrate @ 18098]
Evan Schoenberg <evands@pidgin.im>
parents:
15205
diff
changeset
|
919 | serv_got_chat_in(gc, zt2->id, send_inst_utf8, 0, buf3, time(NULL)); |
| 9896 | 920 | g_free(send_inst_utf8); |
|
24807
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
921 | |
| 9896 | 922 | free_triple(zt1); |
| 923 | } | |
|
24807
699a4dc72c49
A Warmenhoved patch from rwbarton to avoid showing the default instance
Richard Laager <rlaager@pidgin.im>
parents:
24806
diff
changeset
|
924 | g_free(stripped_sender); |
| 9896 | 925 | g_free(buf3); |
| 2086 | 926 | } |
| 927 | } | |
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
928 | |
|
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
929 | static int free_parse_tree(parse_tree* tree) { |
| 9896 | 930 | if (!tree) { |
| 931 | return 0; | |
| 932 | } | |
| 933 | else { | |
| 934 | int i; | |
|
33787
eb88fd4cbced
Remove various array comparisons to NULL because they're silly
Daniel Atallah <datallah@pidgin.im>
parents:
33782
diff
changeset
|
935 | for(i=0;i<tree->num_children;i++){ |
|
eb88fd4cbced
Remove various array comparisons to NULL because they're silly
Daniel Atallah <datallah@pidgin.im>
parents:
33782
diff
changeset
|
936 | if (tree->children[i]) { |
|
eb88fd4cbced
Remove various array comparisons to NULL because they're silly
Daniel Atallah <datallah@pidgin.im>
parents:
33782
diff
changeset
|
937 | free_parse_tree(tree->children[i]); |
|
eb88fd4cbced
Remove various array comparisons to NULL because they're silly
Daniel Atallah <datallah@pidgin.im>
parents:
33782
diff
changeset
|
938 | g_free(tree->children[i]); |
| 9896 | 939 | } |
| 940 | } | |
| 941 | if ((tree != &null_parse_tree) && (tree->contents != NULL)) | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
942 | g_free(tree->contents); |
| 2086 | 943 | |
| 9896 | 944 | } |
| 945 | return 0; | |
| 946 | } | |
| 947 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
948 | static parse_tree *tree_child(parse_tree* tree,int index) { |
| 9896 | 949 | if (index < tree->num_children) { |
| 950 | return tree->children[index]; | |
| 951 | } else { | |
| 952 | return &null_parse_tree; | |
| 953 | } | |
| 954 | } | |
| 955 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
956 | static parse_tree *find_node(parse_tree* ptree,gchar* key) |
| 9896 | 957 | { |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
958 | gchar* tc; |
| 9896 | 959 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
960 | if (!ptree || ! key) |
| 9896 | 961 | return &null_parse_tree; |
| 962 | ||
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
963 | tc = tree_child(ptree,0)->contents; |
|
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
964 | |
|
17156
6d4cc0f310d1
More strcasecmp() replacements.
Richard Laager <rlaager@pidgin.im>
parents:
16746
diff
changeset
|
965 | /* g_strcasecmp() is deprecated. What is the encoding here??? */ |
|
26726
b81bcec8f359
Updates for GTK+ 3.0. Remove some deprecated functions (someone should
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26337
diff
changeset
|
966 | if (ptree->num_children > 0 && tc && !g_ascii_strcasecmp(tc, key)) { |
| 9896 | 967 | return ptree; |
| 968 | } else { | |
| 969 | parse_tree *result = &null_parse_tree; | |
| 970 | int i; | |
| 971 | for(i = 0; i < ptree->num_children; i++) { | |
| 972 | result = find_node(ptree->children[i],key); | |
| 973 | if(result != &null_parse_tree) { | |
| 974 | break; | |
| 975 | } | |
| 976 | } | |
| 977 | return result; | |
| 978 | } | |
| 979 | } | |
| 980 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
981 | static parse_tree *parse_buffer(gchar* source, gboolean do_parse) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
982 | |
| 9896 | 983 | parse_tree *ptree = g_new0(parse_tree,1); |
| 984 | ptree->contents = NULL; | |
| 985 | ptree->num_children=0; | |
| 986 | if (do_parse) { | |
| 987 | unsigned int p = 0; | |
| 988 | while(p < strlen(source)) { | |
| 989 | unsigned int end; | |
| 9986 | 990 | gchar *newstr; |
| 9896 | 991 | |
| 992 | /* Eat white space: */ | |
| 993 | if(g_ascii_isspace(source[p]) || source[p] == '\001') { | |
| 994 | p++; | |
| 995 | continue; | |
| 996 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
997 | |
| 9896 | 998 | /* Skip comments */ |
| 999 | if(source[p] == ';') { | |
| 1000 | while(source[p] != '\n' && p < strlen(source)) { | |
| 1001 | p++; | |
| 1002 | } | |
| 1003 | continue; | |
| 1004 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1005 | |
| 9896 | 1006 | if(source[p] == '(') { |
| 1007 | int nesting = 0; | |
| 1008 | gboolean in_quote = FALSE; | |
| 1009 | gboolean escape_next = FALSE; | |
| 1010 | p++; | |
| 1011 | end = p; | |
| 1012 | while(!(source[end] == ')' && nesting == 0 && !in_quote) && end < strlen(source)) { | |
| 1013 | if(!escape_next) { | |
| 1014 | if(source[end] == '\\') { | |
| 1015 | escape_next = TRUE; | |
| 1016 | } | |
| 1017 | if(!in_quote) { | |
| 1018 | if(source[end] == '(') { | |
| 1019 | nesting++; | |
| 1020 | } | |
| 1021 | if(source[end] == ')') { | |
| 1022 | nesting--; | |
| 1023 | } | |
| 1024 | } | |
| 1025 | if(source[end] == '"') { | |
| 1026 | in_quote = !in_quote; | |
| 1027 | } | |
| 1028 | } else { | |
| 1029 | escape_next = FALSE; | |
| 1030 | } | |
| 1031 | end++; | |
| 1032 | } | |
| 1033 | do_parse = TRUE; | |
| 1034 | ||
| 1035 | } else { | |
| 1036 | gchar end_char; | |
| 1037 | if(source[p] == '"') { | |
| 1038 | end_char = '"'; | |
| 1039 | p++; | |
| 1040 | } else { | |
| 1041 | end_char = ' '; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1042 | } |
| 9896 | 1043 | do_parse = FALSE; |
| 1044 | ||
| 1045 | end = p; | |
| 1046 | while(source[end] != end_char && end < strlen(source)) { | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1047 | if(source[end] == '\\') |
| 9896 | 1048 | end++; |
| 1049 | end++; | |
| 1050 | } | |
| 1051 | } | |
| 1052 | newstr = g_new0(gchar, end+1-p); | |
| 1053 | strncpy(newstr,source+p,end-p); | |
| 1054 | if (ptree->num_children < MAXCHILDREN) { | |
| 1055 | /* In case we surpass maxchildren, ignore this */ | |
| 1056 | ptree->children[ptree->num_children++] = parse_buffer( newstr, do_parse); | |
| 1057 | } else { | |
| 15884 | 1058 | purple_debug_error("zephyr","too many children in tzc output. skipping\n"); |
| 9896 | 1059 | } |
| 1060 | g_free(newstr); | |
| 1061 | p = end + 1; | |
| 1062 | } | |
| 1063 | return ptree; | |
| 1064 | } else { | |
| 1065 | /* XXX does this have to be strdup'd */ | |
| 1066 | ptree->contents = g_strdup(source); | |
| 1067 | return ptree; | |
| 1068 | } | |
| 1069 | } | |
| 1070 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
1071 | static parse_tree *read_from_tzc(zephyr_account* zephyr){ |
| 9896 | 1072 | struct timeval tv; |
| 1073 | fd_set rfds; | |
| 1074 | int bufsize = 2048; | |
| 1075 | char *buf = (char *)calloc(bufsize, 1); | |
| 1076 | char *bufcur = buf; | |
| 1077 | int selected = 0; | |
| 9986 | 1078 | parse_tree *incoming_msg; |
| 9896 | 1079 | |
| 1080 | FD_ZERO(&rfds); | |
| 1081 | FD_SET(zephyr->fromtzc[ZEPHYR_FD_READ], &rfds); | |
| 1082 | tv.tv_sec = 0; | |
| 1083 | tv.tv_usec = 0; | |
| 9986 | 1084 | incoming_msg=NULL; |
| 9896 | 1085 | |
| 1086 | while (select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, &tv)) { | |
| 1087 | selected = 1; | |
|
35518
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1088 | if (read(zephyr->fromtzc[ZEPHYR_FD_READ], bufcur, 1) != 1) { |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1089 | purple_debug_error("zephyr", "couldn't read\n"); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1090 | purple_connection_error(purple_account_get_connection(zephyr->account), "couldn't read"); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1091 | free(buf); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1092 | return NULL; |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1093 | } |
| 9896 | 1094 | bufcur++; |
| 1095 | if ((bufcur - buf) > (bufsize - 1)) { | |
| 1096 | if ((buf = realloc(buf, bufsize * 2)) == NULL) { | |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
1097 | purple_debug_error("zephyr","Ran out of memory\n"); |
| 9896 | 1098 | exit(-1); |
| 1099 | } else { | |
| 1100 | bufcur = buf + bufsize; | |
| 1101 | bufsize *= 2; | |
| 1102 | } | |
| 1103 | } | |
| 1104 | } | |
| 1105 | *bufcur = '\0'; | |
| 1106 | ||
| 1107 | if (selected) { | |
| 1108 | incoming_msg = parse_buffer(buf,TRUE); | |
| 1109 | } | |
| 1110 | free(buf); | |
| 1111 | return incoming_msg; | |
| 1112 | } | |
| 1113 | ||
| 1114 | static gint check_notify_tzc(gpointer data) | |
| 1115 | { | |
| 15884 | 1116 | PurpleConnection *gc = (PurpleConnection *)data; |
| 9896 | 1117 | zephyr_account* zephyr = gc->proto_data; |
| 1118 | parse_tree *newparsetree = read_from_tzc(zephyr); | |
| 1119 | if (newparsetree != NULL) { | |
| 1120 | gchar *spewtype; | |
| 1121 | if ( (spewtype = tree_child(find_node(newparsetree,"tzcspew"),2)->contents) ) { | |
| 1122 | if (!g_ascii_strncasecmp(spewtype,"message",7)) { | |
| 1123 | ZNotice_t notice; | |
| 1124 | parse_tree *msgnode = tree_child(find_node(newparsetree,"message"),2); | |
| 1125 | parse_tree *bodynode = tree_child(msgnode,1); | |
| 15884 | 1126 | /* char *zsig = g_strdup(" "); */ /* purple doesn't care about zsigs */ |
| 9896 | 1127 | char *msg = zephyr_tzc_deescape_str(bodynode->contents); |
| 1128 | size_t bufsize = strlen(msg) + 3; | |
| 1129 | char *buf = g_new0(char,bufsize); | |
| 1130 | g_snprintf(buf,1+strlen(msg)+2," %c%s",'\0',msg); | |
|
19387
8dc4480381f3
bcopy and bzero shouldn't be used. This allows Alver to compile nat-pmp.c on one of his obscure systems (and I fixed some other stuff that I noticed at the same time).
Daniel Atallah <datallah@pidgin.im>
parents:
17156
diff
changeset
|
1131 | memset((char *)¬ice, 0, sizeof(notice)); |
| 9896 | 1132 | notice.z_kind = ACKED; |
| 1133 | notice.z_port = 0; | |
| 1134 | notice.z_opcode = tree_child(find_node(newparsetree,"opcode"),2)->contents; | |
| 1135 | notice.z_class = zephyr_tzc_deescape_str(tree_child(find_node(newparsetree,"class"),2)->contents); | |
| 1136 | notice.z_class_inst = tree_child(find_node(newparsetree,"instance"),2)->contents; | |
| 1137 | notice.z_recipient = local_zephyr_normalize(zephyr,tree_child(find_node(newparsetree,"recipient"),2)->contents); | |
| 1138 | notice.z_sender = local_zephyr_normalize(zephyr,tree_child(find_node(newparsetree,"sender"),2)->contents); | |
| 1139 | notice.z_default_format = "Class $class, Instance $instance:\n" "To: @bold($recipient) at $time $date\n" "From: @bold($1) <$sender>\n\n$2"; | |
| 1140 | notice.z_message_len = strlen(msg) + 3; | |
| 1141 | notice.z_message = buf; | |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
1142 | handle_message(gc, ¬ice); |
| 9896 | 1143 | g_free(msg); |
| 1144 | /* g_free(zsig); */ | |
| 1145 | g_free(buf); | |
| 1146 | /* free_parse_tree(msgnode); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1147 | free_parse_tree(bodynode); |
| 9896 | 1148 | g_free(msg); |
| 1149 | g_free(zsig); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1150 | g_free(buf); |
| 9896 | 1151 | */ |
| 1152 | } | |
| 1153 | else if (!g_ascii_strncasecmp(spewtype,"zlocation",9)) { | |
| 1154 | /* check_loc or zephyr_zloc respectively */ | |
| 1155 | /* XXX fix */ | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1156 | char *user; |
| 15884 | 1157 | PurpleBuddy *b; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1158 | const char *bname; |
| 9896 | 1159 | int nlocs = 0; |
| 9912 | 1160 | parse_tree *locations; |
| 1161 | gchar *locval; | |
| 9896 | 1162 | user = tree_child(find_node(newparsetree,"user"),2)->contents; |
| 1163 | ||
| 15884 | 1164 | if ((b = purple_find_buddy(gc->account, user)) == NULL) { |
| 9986 | 1165 | gchar *stripped_user = zephyr_strip_local_realm(zephyr,user); |
| 15884 | 1166 | b = purple_find_buddy(gc->account, stripped_user); |
| 9986 | 1167 | g_free(stripped_user); |
| 9896 | 1168 | } |
| 1169 | locations = find_node(newparsetree,"locations"); | |
| 1170 | locval = tree_child(tree_child(tree_child(tree_child(locations,2),0),0),2)->contents; | |
| 1171 | ||
| 1172 | if (!locval || !g_ascii_strcasecmp(locval," ") || (strlen(locval) == 0)) { | |
| 1173 | nlocs = 0; | |
| 1174 | } else { | |
| 1175 | nlocs = 1; | |
| 1176 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1177 | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1178 | bname = b ? purple_buddy_get_name(b) : NULL; |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1179 | if ((b && pending_zloc(zephyr,bname)) || pending_zloc(zephyr,user) || pending_zloc(zephyr,local_zephyr_normalize(zephyr,user))){ |
| 15884 | 1180 | PurpleNotifyUserInfo *user_info = purple_notify_user_info_new(); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1181 | char *tmp; |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
1182 | const char *balias; |
| 9896 | 1183 | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1184 | purple_notify_user_info_add_pair(user_info, _("User"), (b ? bname : user)); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1185 | |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
1186 | balias = b ? purple_buddy_get_local_buddy_alias(b) : NULL; |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
1187 | if (balias) |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
1188 | purple_notify_user_info_add_pair(user_info, _("Alias"), balias); |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24945
diff
changeset
|
1189 | |
| 9896 | 1190 | if (!nlocs) { |
| 15884 | 1191 | purple_notify_user_info_add_pair(user_info, NULL, _("Hidden or not logged-in")); |
| 9896 | 1192 | } else { |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1193 | tmp = g_strdup_printf(_("<br>At %s since %s"), |
|
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1194 | tree_child(tree_child(tree_child(tree_child(locations,2),0),0),2)->contents, |
|
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1195 | tree_child(tree_child(tree_child(tree_child(locations,2),0),2),2)->contents); |
| 15884 | 1196 | purple_notify_user_info_add_pair(user_info, _("Location"), tmp); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1197 | g_free(tmp); |
| 9896 | 1198 | } |
| 1199 | ||
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1200 | purple_notify_userinfo(gc, b ? bname : user, |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15185
diff
changeset
|
1201 | user_info, NULL, NULL); |
| 15884 | 1202 | purple_notify_user_info_destroy(user_info); |
| 9896 | 1203 | } else { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1204 | if (nlocs>0) |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1205 | purple_prpl_got_user_status(gc->account, b ? bname : user, "available", NULL); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1206 | else |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1207 | purple_prpl_got_user_status(gc->account, b ? bname : user, "offline", NULL); |
| 9896 | 1208 | } |
| 1209 | } | |
| 1210 | else if (!g_ascii_strncasecmp(spewtype,"subscribed",10)) { | |
| 1211 | } | |
| 1212 | else if (!g_ascii_strncasecmp(spewtype,"start",5)) { | |
| 1213 | } | |
| 1214 | else if (!g_ascii_strncasecmp(spewtype,"error",5)) { | |
| 1215 | /* XXX handle */ | |
| 1216 | } | |
| 1217 | } else { | |
| 1218 | } | |
| 1219 | } else { | |
| 1220 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1221 | |
| 9896 | 1222 | free_parse_tree(newparsetree); |
| 1223 | return TRUE; | |
| 1224 | } | |
| 1225 | ||
| 1226 | static gint check_notify_zeph02(gpointer data) | |
| 2086 | 1227 | { |
| 9478 | 1228 | /* XXX add real error reporting */ |
| 15884 | 1229 | PurpleConnection *gc = (PurpleConnection*) data; |
| 2086 | 1230 | while (ZPending()) { |
| 1231 | ZNotice_t notice; | |
| 1232 | struct sockaddr_in from; | |
| 9478 | 1233 | /* XXX add real error reporting */ |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1234 | |
| 2086 | 1235 | z_call_r(ZReceiveNotice(¬ice, &from)); |
| 1236 | ||
| 1237 | switch (notice.z_kind) { | |
| 1238 | case UNSAFE: | |
| 1239 | case UNACKED: | |
| 1240 | case ACKED: | |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
1241 | handle_message(gc, ¬ice); |
| 2086 | 1242 | break; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1243 | case SERVACK: |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1244 | if (!(g_ascii_strcasecmp(notice.z_message, ZSRVACK_NOTSENT))) { |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
1245 | message_failed(gc, ¬ice, from); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1246 | } |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1247 | break; |
| 9328 | 1248 | case CLIENTACK: |
| 15884 | 1249 | purple_debug_error("zephyr", "Client ack received\n"); |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
1250 | handle_unknown(¬ice); /* XXX: is it really unknown? */ |
|
35966
d603bfb42fd9
Fix some coverity CWE-484 issues
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35518
diff
changeset
|
1251 | break; |
| 2086 | 1252 | default: |
| 1253 | /* we'll just ignore things for now */ | |
|
35993
bd0a2508b477
Fix some other coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35966
diff
changeset
|
1254 | handle_unknown(¬ice); |
| 15884 | 1255 | purple_debug_error("zephyr", "Unhandled notice.\n"); |
| 2086 | 1256 | break; |
| 1257 | } | |
| 9478 | 1258 | /* XXX add real error reporting */ |
| 2086 | 1259 | ZFreeNotice(¬ice); |
| 1260 | } | |
| 1261 | ||
| 1262 | return TRUE; | |
| 1263 | } | |
| 1264 | ||
| 10867 | 1265 | #ifdef WIN32 |
| 1266 | ||
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1267 | static gint check_loc(gpointer data) |
| 10867 | 1268 | { |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1269 | GSList *buddies; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1270 | ZLocations_t locations; |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1271 | PurpleConnection *gc = data; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1272 | zephyr_account *zephyr = gc->proto_data; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1273 | PurpleAccount *account = purple_connection_get_account(gc); |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1274 | int numlocs; |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1275 | int one = 1; |
| 10867 | 1276 | |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1277 | for (buddies = purple_find_buddies(account, NULL); buddies; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1278 | buddies = g_slist_delete_link(buddies, buddies)) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1279 | PurpleBuddy *b = buddies->data; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1280 | char *chk; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1281 | const char *bname = purple_buddy_get_name(b); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1282 | chk = local_zephyr_normalize(bname); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1283 | ZLocateUser(chk,&numlocs, ZAUTH); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1284 | if (numlocs) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1285 | int i; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1286 | for(i=0;i<numlocs;i++) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1287 | ZGetLocations(&locations,&one); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1288 | serv_got_update(zgc,bname,1,0,0,0,0); |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1289 | } |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1290 | } |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1291 | } |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1292 | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1293 | return TRUE; |
| 10867 | 1294 | } |
| 1295 | ||
| 1296 | #else | |
| 1297 | ||
| 2086 | 1298 | static gint check_loc(gpointer data) |
| 1299 | { | |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1300 | GSList *buddies; |
| 2086 | 1301 | ZAsyncLocateData_t ald; |
| 15884 | 1302 | PurpleConnection *gc = (PurpleConnection *)data; |
| 9896 | 1303 | zephyr_account *zephyr = gc->proto_data; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1304 | PurpleAccount *account = purple_connection_get_account(gc); |
| 2086 | 1305 | |
| 9896 | 1306 | if (use_zeph02(zephyr)) { |
| 1307 | ald.user = NULL; | |
| 1308 | memset(&(ald.uid), 0, sizeof(ZUnique_Id_t)); | |
| 1309 | ald.version = NULL; | |
| 1310 | } | |
| 2086 | 1311 | |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1312 | for (buddies = purple_find_buddies(account, NULL); buddies; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1313 | buddies = g_slist_delete_link(buddies, buddies)) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1314 | PurpleBuddy *b = buddies->data; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1315 | |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1316 | const char *chk; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1317 | const char *name = purple_buddy_get_name(b); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1318 | |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1319 | chk = local_zephyr_normalize(zephyr,name); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1320 | purple_debug_info("zephyr","chk: %s b->name %s\n",chk,name); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1321 | /* XXX add real error reporting */ |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1322 | /* doesn't matter if this fails or not; we'll just move on to the next one */ |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1323 | if (use_zeph02(zephyr)) { |
| 9896 | 1324 | #ifdef WIN32 |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1325 | int numlocs; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1326 | int one=1; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1327 | ZLocateUser(chk,&numlocs,ZAUTH); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1328 | if (numlocs) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1329 | int i; |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1330 | for(i=0;i<numlocs;i++) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1331 | ZGetLocations(&locations,&one); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1332 | if (nlocs>0) |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1333 | purple_prpl_got_user_status(account,name,"available",NULL); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1334 | else |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1335 | purple_prpl_got_user_status(account,name,"offline",NULL); |
| 6695 | 1336 | } |
| 4349 | 1337 | } |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1338 | #else |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1339 | ZRequestLocations(chk, &ald, UNACKED, ZAUTH); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1340 | g_free(ald.user); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1341 | g_free(ald.version); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1342 | #endif /* WIN32 */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1343 | } else |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1344 | if (use_tzc(zephyr)) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1345 | gchar *zlocstr = g_strdup_printf("((tzcfodder . zlocate) \"%s\")\n",chk); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1346 | size_t len = strlen(zlocstr); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1347 | size_t result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zlocstr,len); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1348 | if (result != len) { |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1349 | purple_debug_error("zephyr", "Unable to write a message: %s\n", g_strerror(errno)); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1350 | } |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1351 | g_free(zlocstr); |
|
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1352 | } |
| 2086 | 1353 | } |
|
27198
da6e03d6f9d6
Convert zephyr to use purple_find_buddies.
Paul Aurich <darkrain42@pidgin.im>
parents:
26752
diff
changeset
|
1354 | |
| 2086 | 1355 | return TRUE; |
| 1356 | } | |
| 1357 | ||
| 10867 | 1358 | #endif /* WIN32 */ |
| 1359 | ||
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
1360 | static char *get_exposure_level(void) |
| 2086 | 1361 | { |
| 9478 | 1362 | /* XXX add real error reporting */ |
| 2086 | 1363 | char *exposure = ZGetVariable("exposure"); |
| 1364 | ||
| 1365 | if (!exposure) | |
| 1366 | return EXPOSE_REALMVIS; | |
| 4793 | 1367 | if (!g_ascii_strcasecmp(exposure, EXPOSE_NONE)) |
| 2086 | 1368 | return EXPOSE_NONE; |
| 4793 | 1369 | if (!g_ascii_strcasecmp(exposure, EXPOSE_OPSTAFF)) |
| 2086 | 1370 | return EXPOSE_OPSTAFF; |
| 4793 | 1371 | if (!g_ascii_strcasecmp(exposure, EXPOSE_REALMANN)) |
| 2086 | 1372 | return EXPOSE_REALMANN; |
| 4793 | 1373 | if (!g_ascii_strcasecmp(exposure, EXPOSE_NETVIS)) |
| 2086 | 1374 | return EXPOSE_NETVIS; |
| 4793 | 1375 | if (!g_ascii_strcasecmp(exposure, EXPOSE_NETANN)) |
| 2086 | 1376 | return EXPOSE_NETANN; |
| 1377 | return EXPOSE_REALMVIS; | |
| 1378 | } | |
| 1379 | ||
| 1380 | static void strip_comments(char *str) | |
| 1381 | { | |
| 1382 | char *tmp = strchr(str, '#'); | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1383 | |
| 2086 | 1384 | if (tmp) |
| 1385 | *tmp = '\0'; | |
| 1386 | g_strchug(str); | |
| 1387 | g_strchomp(str); | |
| 1388 | } | |
| 1389 | ||
| 9896 | 1390 | static void zephyr_inithosts(zephyr_account *zephyr) |
| 9478 | 1391 | { |
| 1392 | /* XXX This code may not be Win32 clean */ | |
| 1393 | struct hostent *hent; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1394 | |
|
9802
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1395 | if (gethostname(zephyr->ourhost, sizeof(zephyr->ourhost)) == -1) { |
| 15884 | 1396 | purple_debug_error("zephyr", "unable to retrieve hostname, %%host%% and %%canon%% will be wrong in subscriptions and have been set to unknown\n"); |
|
9802
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1397 | g_strlcpy(zephyr->ourhost, "unknown", sizeof(zephyr->ourhost)); |
|
9803
3bf25f940805
[gaim-migrate @ 10671]
Mark Doliner <markdoliner@pidgin.im>
parents:
9802
diff
changeset
|
1398 | g_strlcpy(zephyr->ourhostcanon, "unknown", sizeof(zephyr->ourhostcanon)); |
| 9478 | 1399 | return; |
| 1400 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1401 | |
| 9610 | 1402 | if (!(hent = gethostbyname(zephyr->ourhost))) { |
| 15884 | 1403 | purple_debug_error("zephyr", "unable to resolve hostname, %%canon%% will be wrong in subscriptions.and has been set to the value of %%host%%, %s\n",zephyr->ourhost); |
|
9803
3bf25f940805
[gaim-migrate @ 10671]
Mark Doliner <markdoliner@pidgin.im>
parents:
9802
diff
changeset
|
1404 | g_strlcpy(zephyr->ourhostcanon, zephyr->ourhost, sizeof(zephyr->ourhostcanon)); |
| 9478 | 1405 | return; |
| 1406 | } | |
|
9802
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1407 | |
|
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1408 | g_strlcpy(zephyr->ourhostcanon, hent->h_name, sizeof(zephyr->ourhostcanon)); |
|
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1409 | |
| 9478 | 1410 | return; |
| 1411 | } | |
| 1412 | ||
| 9610 | 1413 | static void process_zsubs(zephyr_account *zephyr) |
| 2086 | 1414 | { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1415 | /* Loads zephyr chats "(subscriptions) from ~/.zephyr.subs, and |
|
9802
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1416 | registers (subscribes to) them on the server */ |
| 9434 | 1417 | |
|
9802
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1418 | /* XXX deal with unsubscriptions */ |
|
5de715c25c22
[gaim-migrate @ 10670]
Mark Doliner <markdoliner@pidgin.im>
parents:
9797
diff
changeset
|
1419 | /* XXX deal with punts */ |
| 9434 | 1420 | |
| 2086 | 1421 | FILE *f; |
| 1422 | gchar *fname; | |
| 1423 | gchar buff[BUFSIZ]; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1424 | |
| 15884 | 1425 | fname = g_strdup_printf("%s/.zephyr.subs", purple_home_dir()); |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10401
diff
changeset
|
1426 | f = g_fopen(fname, "r"); |
| 2086 | 1427 | if (f) { |
| 1428 | char **triple; | |
| 1429 | char *recip; | |
| 9478 | 1430 | char *z_class; |
| 1431 | char *z_instance; | |
| 9896 | 1432 | char *z_galaxy = NULL; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1433 | |
| 2086 | 1434 | while (fgets(buff, BUFSIZ, f)) { |
| 1435 | strip_comments(buff); | |
| 1436 | if (buff[0]) { | |
| 1437 | triple = g_strsplit(buff, ",", 3); | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1438 | if (triple[0] && triple[1]) { |
| 9896 | 1439 | char *tmp = g_strdup_printf("%s", zephyr->username); |
| 2804 | 1440 | char *atptr; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1441 | |
| 9896 | 1442 | z_class = triple[0]; |
| 1443 | z_instance = triple[1]; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1444 | if (triple[2] == NULL) { |
| 3277 | 1445 | recip = g_malloc0(1); |
| 4793 | 1446 | } else if (!g_ascii_strcasecmp(triple[2], "%me%")) { |
| 9896 | 1447 | recip = g_strdup_printf("%s", zephyr->username); |
| 4793 | 1448 | } else if (!g_ascii_strcasecmp(triple[2], "*")) { |
| 2804 | 1449 | /* wildcard |
| 1450 | * form of class,instance,* */ | |
| 1451 | recip = g_malloc0(1); | |
| 4793 | 1452 | } else if (!g_ascii_strcasecmp(triple[2], tmp)) { |
| 2804 | 1453 | /* form of class,instance,aatharuv@ATHENA.MIT.EDU */ |
| 1454 | recip = g_strdup(triple[2]); | |
| 1455 | } else if ((atptr = strchr(triple[2], '@')) != NULL) { | |
| 1456 | /* form of class,instance,*@ANDREW.CMU.EDU | |
| 1457 | * class,instance,@ANDREW.CMU.EDU | |
| 1458 | * If realm is local realm, blank recipient, else | |
| 1459 | * @REALM-NAME | |
| 1460 | */ | |
| 9896 | 1461 | char *realmat = g_strdup_printf("@%s",zephyr->realm); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1462 | |
| 4793 | 1463 | if (!g_ascii_strcasecmp(atptr, realmat)) |
| 2804 | 1464 | recip = g_malloc0(1); |
| 1465 | else | |
| 1466 | recip = g_strdup(atptr); | |
| 1467 | g_free(realmat); | |
| 2086 | 1468 | } else { |
| 1469 | recip = g_strdup(triple[2]); | |
| 1470 | } | |
| 2804 | 1471 | g_free(tmp); |
| 9478 | 1472 | |
| 1473 | if (!g_ascii_strcasecmp(triple[0],"%host%")) { | |
| 9610 | 1474 | z_class = g_strdup(zephyr->ourhost); |
| 9478 | 1475 | } else if (!g_ascii_strcasecmp(triple[0],"%canon%")) { |
| 9610 | 1476 | z_class = g_strdup(zephyr->ourhostcanon); |
| 9478 | 1477 | } else { |
| 1478 | z_class = g_strdup(triple[0]); | |
| 1479 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1480 | |
| 9478 | 1481 | if (!g_ascii_strcasecmp(triple[1],"%host%")) { |
| 9610 | 1482 | z_instance = g_strdup(zephyr->ourhost); |
| 9478 | 1483 | } else if (!g_ascii_strcasecmp(triple[1],"%canon%")) { |
| 9610 | 1484 | z_instance = g_strdup(zephyr->ourhostcanon); |
| 9478 | 1485 | } else { |
| 1486 | z_instance = g_strdup(triple[1]); | |
| 1487 | } | |
| 1488 | ||
| 1489 | /* There should be some sort of error report listing classes that couldn't be subbed to. | |
| 1490 | Not important right now though */ | |
| 1491 | ||
| 9896 | 1492 | if (zephyr_subscribe_to(zephyr,z_class, z_instance, recip,z_galaxy) != ZERR_NONE) { |
| 9478 | 1493 | |
| 15884 | 1494 | purple_debug_error("zephyr", "Couldn't subscribe to %s, %s, %s\n", z_class,z_instance,recip); |
| 2086 | 1495 | } |
| 9478 | 1496 | |
| 9896 | 1497 | zephyr->subscrips = g_slist_append(zephyr->subscrips, new_triple(zephyr,z_class,z_instance,recip)); |
| 9478 | 1498 | /* g_hash_table_destroy(sub_hash_table); */ |
| 1499 | g_free(z_instance); | |
| 1500 | g_free(z_class); | |
| 2086 | 1501 | g_free(recip); |
| 1502 | } | |
| 1503 | g_strfreev(triple); | |
| 1504 | } | |
| 1505 | } | |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
1506 | fclose(f); |
| 2086 | 1507 | } |
| 1508 | } | |
| 1509 | ||
| 15884 | 1510 | static void process_anyone(PurpleConnection *gc) |
| 2086 | 1511 | { |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1512 | zephyr_account *zephyr = purple_connection_get_protocol_data(gc); |
| 2086 | 1513 | FILE *fd; |
| 1514 | gchar buff[BUFSIZ], *filename; | |
| 15884 | 1515 | PurpleGroup *g; |
| 1516 | PurpleBuddy *b; | |
|
4775
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4770
diff
changeset
|
1517 | |
| 15884 | 1518 | if (!(g = purple_find_group(_("Anyone")))) { |
| 1519 | g = purple_group_new(_("Anyone")); | |
| 1520 | purple_blist_add_group(g, NULL); | |
|
4775
239cb803fb1d
[gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents:
4770
diff
changeset
|
1521 | } |
| 6695 | 1522 | |
| 15884 | 1523 | filename = g_strconcat(purple_home_dir(), "/.anyone", NULL); |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10401
diff
changeset
|
1524 | if ((fd = g_fopen(filename, "r")) != NULL) { |
| 2086 | 1525 | while (fgets(buff, BUFSIZ, fd)) { |
| 1526 | strip_comments(buff); | |
| 4687 | 1527 | if (buff[0]) { |
|
33782
1690e0b2c508
Fix a bunch of unused variables
Daniel Atallah <datallah@pidgin.im>
parents:
31954
diff
changeset
|
1528 | if (!purple_find_buddy(gc->account, buff)) { |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1529 | char *stripped_user = zephyr_strip_local_realm(zephyr,buff); |
| 15884 | 1530 | purple_debug_info("zephyr","stripped_user %s\n",stripped_user); |
|
33782
1690e0b2c508
Fix a bunch of unused variables
Daniel Atallah <datallah@pidgin.im>
parents:
31954
diff
changeset
|
1531 | if (!purple_find_buddy(gc->account,stripped_user)){ |
| 15884 | 1532 | b = purple_buddy_new(gc->account, stripped_user, NULL); |
| 1533 | purple_blist_add_buddy(b, NULL, g, NULL); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1534 | } |
| 9986 | 1535 | g_free(stripped_user); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1536 | } |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1537 | } |
| 2086 | 1538 | } |
| 1539 | fclose(fd); | |
| 1540 | } | |
| 1541 | g_free(filename); | |
| 1542 | } | |
| 1543 | ||
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1544 | static char* normalize_zephyr_exposure(const char* exposure) { |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1545 | char *exp2 = g_strstrip(g_ascii_strup(exposure,-1)); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1546 | |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1547 | if (!exp2) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1548 | return EXPOSE_REALMVIS; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1549 | if (!g_ascii_strcasecmp(exp2, EXPOSE_NONE)) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1550 | return EXPOSE_NONE; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1551 | if (!g_ascii_strcasecmp(exp2, EXPOSE_OPSTAFF)) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1552 | return EXPOSE_OPSTAFF; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1553 | if (!g_ascii_strcasecmp(exp2, EXPOSE_REALMANN)) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1554 | return EXPOSE_REALMANN; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1555 | if (!g_ascii_strcasecmp(exp2, EXPOSE_NETVIS)) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1556 | return EXPOSE_NETVIS; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1557 | if (!g_ascii_strcasecmp(exp2, EXPOSE_NETANN)) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1558 | return EXPOSE_NETANN; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1559 | return EXPOSE_REALMVIS; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1560 | } |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1561 | |
| 15884 | 1562 | static void zephyr_login(PurpleAccount * account) |
| 2086 | 1563 | { |
| 15884 | 1564 | PurpleConnection *gc; |
| 9896 | 1565 | zephyr_account *zephyr; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1566 | gboolean read_anyone; |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1567 | gboolean read_zsubs; |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1568 | gchar *exposure; |
| 9427 | 1569 | |
| 15884 | 1570 | gc = purple_account_get_connection(account); |
| 1571 | read_anyone = purple_account_get_bool(gc->account,"read_anyone",TRUE); | |
| 1572 | read_zsubs = purple_account_get_bool(gc->account,"read_zsubs",TRUE); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1573 | exposure = (gchar *)purple_account_get_string(gc->account, "exposure_level", EXPOSE_REALMVIS); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1574 | |
| 10867 | 1575 | #ifdef WIN32 |
| 15884 | 1576 | username = purple_account_get_username(account); |
| 10867 | 1577 | #endif |
|
24756
69d6dd20d674
Enable atuo-response functionality on Zephyr. This should emulate the
Toby Schaffer <jts@adc.idt.com>
parents:
23352
diff
changeset
|
1578 | gc->flags |= PURPLE_CONNECTION_AUTO_RESP | PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1579 | gc->proto_data = zephyr=g_new0(zephyr_account,1); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1580 | |
| 9896 | 1581 | zephyr->account = account; |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1582 | |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1583 | /* Make sure that the exposure (visibility) is set to a sane value */ |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1584 | zephyr->exposure=g_strdup(normalize_zephyr_exposure(exposure)); |
| 2086 | 1585 | |
| 15884 | 1586 | if (purple_account_get_bool(gc->account,"use_tzc",0)) { |
| 1587 | zephyr->connection_type = PURPLE_ZEPHYR_TZC; | |
| 9896 | 1588 | } else { |
| 15884 | 1589 | zephyr->connection_type = PURPLE_ZEPHYR_KRB4; |
| 9896 | 1590 | } |
| 1591 | ||
| 15884 | 1592 | zephyr->encoding = (char *)purple_account_get_string(gc->account, "encoding", ZEPHYR_FALLBACK_CHARSET); |
| 1593 | purple_connection_update_progress(gc, _("Connecting"), 0, 8); | |
| 9478 | 1594 | |
| 1595 | /* XXX z_call_s should actually try to report the com_err determined error */ | |
| 9896 | 1596 | if (use_tzc(zephyr)) { |
| 1597 | pid_t pid; | |
| 15884 | 1598 | /* purple_connection_error(gc,"tzc not supported yet"); */ |
| 9896 | 1599 | if ((pipe(zephyr->totzc) != 0) || (pipe(zephyr->fromtzc) != 0)) { |
| 15884 | 1600 | purple_debug_error("zephyr", "pipe creation failed. killing\n"); |
| 9896 | 1601 | exit(-1); |
| 1602 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1603 | |
| 9896 | 1604 | pid = fork(); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1605 | |
| 9896 | 1606 | if (pid == -1) { |
| 15884 | 1607 | purple_debug_error("zephyr", "forking failed\n"); |
| 9896 | 1608 | exit(-1); |
| 1609 | } | |
| 1610 | if (pid == 0) { | |
| 1611 | unsigned int i=0; | |
| 1612 | gboolean found_ps = FALSE; | |
| 15884 | 1613 | gchar ** tzc_cmd_array = g_strsplit(purple_account_get_string(gc->account,"tzc_command","/usr/bin/tzc -e %s")," ",0); |
| 9896 | 1614 | if (close(1) == -1) { |
| 1615 | exit(-1); | |
| 1616 | } | |
| 1617 | if (dup2(zephyr->fromtzc[1], 1) == -1) { | |
| 1618 | exit(-1); | |
| 1619 | } | |
| 1620 | if (close(zephyr->fromtzc[1]) == -1) { | |
| 1621 | exit(-1); | |
| 1622 | } | |
| 1623 | if (close(0) == -1) { | |
| 1624 | exit(-1); | |
| 1625 | } | |
| 1626 | if (dup2(zephyr->totzc[0], 0) == -1) { | |
| 1627 | exit(-1); | |
| 1628 | } | |
| 1629 | if (close(zephyr->totzc[0]) == -1) { | |
| 1630 | exit(-1); | |
| 1631 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1632 | /* tzc_command should really be of the form |
| 9896 | 1633 | path/to/tzc -e %s |
| 1634 | or | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1635 | ssh username@hostname pathtotzc -e %s |
| 9896 | 1636 | -- this should not require a password, and ideally should be kerberized ssh -- |
| 1637 | or | |
| 1638 | fsh username@hostname pathtotzc -e %s | |
| 1639 | */ | |
| 1640 | while(tzc_cmd_array[i] != NULL){ | |
| 12621 | 1641 | if (!g_ascii_strncasecmp(tzc_cmd_array[i],"%s",2)) { |
| 9986 | 1642 | /* fprintf(stderr,"replacing %%s with %s\n",zephyr->exposure); */ |
| 9896 | 1643 | tzc_cmd_array[i] = g_strdup(zephyr->exposure); |
| 1644 | found_ps = TRUE; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1645 | |
| 9896 | 1646 | } else { |
| 9986 | 1647 | /* fprintf(stderr,"keeping %s\n",tzc_cmd_array[i]); */ |
| 9896 | 1648 | } |
| 1649 | i++; | |
| 1650 | } | |
|
8645
8446e0a232e0
[gaim-migrate @ 9397]
Mark Doliner <markdoliner@pidgin.im>
parents:
8644
diff
changeset
|
1651 | |
| 9896 | 1652 | if (!found_ps) { |
|
25080
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1653 | exit(-1); |
| 9896 | 1654 | } |
| 1655 | ||
| 1656 | execvp(tzc_cmd_array[0], tzc_cmd_array); | |
|
25080
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1657 | exit(-1); |
| 9896 | 1658 | } |
| 1659 | else { | |
| 1660 | fd_set rfds; | |
| 1661 | int bufsize = 2048; | |
| 1662 | char *buf = (char *)calloc(bufsize, 1); | |
| 1663 | char *bufcur = buf; | |
| 1664 | struct timeval tv; | |
| 1665 | char *ptr; | |
| 1666 | int parenlevel=0; | |
| 1667 | char* tempstr; | |
| 1668 | int tempstridx; | |
|
25080
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1669 | int select_status; |
| 9896 | 1670 | |
| 9986 | 1671 | zephyr->tzc_pid = pid; |
| 9896 | 1672 | /* wait till we have data to read from ssh */ |
| 1673 | FD_ZERO(&rfds); | |
| 1674 | FD_SET(zephyr->fromtzc[ZEPHYR_FD_READ], &rfds); | |
| 1675 | ||
| 1676 | tv.tv_sec = 10; | |
| 1677 | tv.tv_usec = 0; | |
| 1678 | ||
| 15884 | 1679 | purple_debug_info("zephyr", "about to read from tzc\n"); |
| 9896 | 1680 | |
|
25085
1f1e715da7b9
Sadrul pointed out that I'm less than bright today and let a // comment slip in.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25080
diff
changeset
|
1681 | if (waitpid(pid, NULL, WNOHANG) == 0) { /* Only select if tzc is still running */ |
|
25080
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1682 | purple_debug_info("zephyr", "about to read from tzc\n"); |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1683 | select_status = select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, NULL); |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1684 | } |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1685 | else { |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1686 | purple_debug_info("zephyr", "tzc exited early\n"); |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1687 | select_status = -1; |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1688 | } |
| 9896 | 1689 | |
| 1690 | FD_ZERO(&rfds); | |
| 1691 | FD_SET(zephyr->fromtzc[ZEPHYR_FD_READ], &rfds); | |
|
25080
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1692 | while (select_status > 0 && |
|
fd2910516af3
Fix a Zephyr crash and 10-second delay that can happen when you have an account
Michael Terry <michael.terry@canonical.com>
parents:
24810
diff
changeset
|
1693 | select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, &tv) > 0) { |
|
35518
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1694 | if (read(zephyr->fromtzc[ZEPHYR_FD_READ], bufcur, 1) != 1) { |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1695 | purple_debug_error("zephyr", "couldn't read\n"); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1696 | purple_connection_error(gc, "couldn't read"); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1697 | free(buf); |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1698 | return; |
|
0e2608c5682d
Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33787
diff
changeset
|
1699 | } |
| 9896 | 1700 | bufcur++; |
| 1701 | if ((bufcur - buf) > (bufsize - 1)) { | |
| 1702 | if ((buf = realloc(buf, bufsize * 2)) == NULL) { | |
| 1703 | exit(-1); | |
| 1704 | } else { | |
| 1705 | bufcur = buf + bufsize; | |
| 1706 | bufsize *= 2; | |
| 1707 | } | |
| 1708 | } | |
| 1709 | FD_ZERO(&rfds); | |
| 1710 | FD_SET(zephyr->fromtzc[ZEPHYR_FD_READ], &rfds); | |
| 1711 | tv.tv_sec = 10; | |
| 1712 | tv.tv_usec = 0; | |
| 2086 | 1713 | |
| 9896 | 1714 | } |
| 9986 | 1715 | /* fprintf(stderr, "read from tzc\n"); */ |
| 9896 | 1716 | *bufcur = '\0'; |
| 1717 | ptr = buf; | |
| 1718 | ||
| 1719 | /* ignore all tzcoutput till we've received the first (*/ | |
| 1720 | while (ptr < bufcur && (*ptr !='(')) { | |
| 1721 | ptr++; | |
| 1722 | } | |
| 1723 | if (ptr >=bufcur) { | |
| 15884 | 1724 | purple_connection_error(gc,"invalid output by tzc (or bad parsing code)"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
1725 | free(buf); |
| 9896 | 1726 | return; |
| 1727 | } | |
| 9427 | 1728 | |
| 9896 | 1729 | while(ptr < bufcur) { |
| 1730 | if (*ptr == '(') { | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1731 | parenlevel++; |
| 9896 | 1732 | } |
| 1733 | else if (*ptr == ')') { | |
| 1734 | parenlevel--; | |
| 1735 | } | |
| 15884 | 1736 | purple_debug_info("zephyr","tzc parenlevel is %d\n",parenlevel); |
| 9896 | 1737 | switch (parenlevel) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1738 | case 0: |
| 9896 | 1739 | break; |
| 1740 | case 1: | |
| 1741 | /* Search for next beginning (, or for the ending */ | |
| 1742 | ptr++; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1743 | while((*ptr != '(') && (*ptr != ')') && (ptr <bufcur)) |
| 9896 | 1744 | ptr++; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1745 | if (ptr >= bufcur) |
| 15884 | 1746 | purple_debug_error("zephyr","tzc parsing error\n"); |
| 9896 | 1747 | break; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1748 | case 2: |
| 9896 | 1749 | /* You are probably at |
| 1750 | (foo . bar ) or (foo . "bar") or (foo . chars) or (foo . numbers) or (foo . () ) | |
| 1751 | Parse all the data between the first and last f, and move past ) | |
| 1752 | */ | |
| 1753 | tempstr = g_malloc0(20000); | |
| 1754 | tempstridx=0; | |
| 1755 | while(parenlevel >1) { | |
| 1756 | ptr++; | |
| 1757 | if (*ptr == '(') | |
| 1758 | parenlevel++; | |
| 1759 | if (*ptr == ')') | |
| 1760 | parenlevel--; | |
| 1761 | if (parenlevel > 1) { | |
| 1762 | tempstr[tempstridx++]=*ptr; | |
| 1763 | } else { | |
| 1764 | ptr++; | |
| 1765 | } | |
| 1766 | } | |
| 15884 | 1767 | purple_debug_info("zephyr","tempstr parsed\n"); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1768 | /* tempstr should now be a tempstridx length string containing all characters |
| 9896 | 1769 | from that after the first ( to the one before the last paren ). */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1770 | /* We should have the following possible lisp strings but we don't care |
| 9896 | 1771 | (tzcspew . start) (version . "something") (pid . number)*/ |
| 1772 | /* We care about 'zephyrid . "username@REALM.NAME"' and 'exposure . "SOMETHING"' */ | |
| 1773 | tempstridx=0; | |
| 1774 | if (!g_ascii_strncasecmp(tempstr,"zephyrid",8)) { | |
| 1775 | gchar* username = g_malloc0(100); | |
| 1776 | int username_idx=0; | |
| 1777 | char *realm; | |
| 15884 | 1778 | purple_debug_info("zephyr","zephyrid found\n"); |
| 9896 | 1779 | tempstridx+=8; |
| 1780 | while(tempstr[tempstridx] !='"' && tempstridx < 20000) | |
| 1781 | tempstridx++; | |
| 1782 | tempstridx++; | |
| 1783 | while(tempstr[tempstridx] !='"' && tempstridx < 20000) | |
| 1784 | username[username_idx++]=tempstr[tempstridx++]; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1785 | |
| 9896 | 1786 | zephyr->username = g_strdup_printf("%s",username); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1787 | if ((realm = strchr(username,'@'))) |
| 9896 | 1788 | zephyr->realm = g_strdup_printf("%s",realm+1); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1789 | else { |
| 15884 | 1790 | realm = (gchar *)purple_account_get_string(gc->account,"realm",""); |
| 12621 | 1791 | if (!*realm) { |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1792 | realm = "local-realm"; |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1793 | } |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1794 | zephyr->realm = g_strdup(realm); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1795 | g_strlcpy(__Zephyr_realm, (const char*)zephyr->realm, REALM_SZ-1); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1796 | } |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1797 | /* else { |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1798 | zephyr->realm = g_strdup("local-realm"); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1799 | }*/ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1800 | |
| 9896 | 1801 | g_free(username); |
| 1802 | } else { | |
| 15884 | 1803 | purple_debug_info("zephyr", "something that's not zephyr id found %s\n",tempstr); |
| 9896 | 1804 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1805 | |
| 9896 | 1806 | /* We don't care about anything else yet */ |
| 1807 | g_free(tempstr); | |
| 1808 | break; | |
| 1809 | default: | |
| 15884 | 1810 | purple_debug_info("zephyr","parenlevel is not 1 or 2\n"); |
| 9896 | 1811 | /* This shouldn't be happening */ |
| 1812 | break; | |
| 1813 | } | |
| 1814 | if (parenlevel==0) | |
| 1815 | break; | |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
1816 | } /* while (ptr < bufcur) */ |
| 15884 | 1817 | purple_debug_info("zephyr", "tzc startup done\n"); |
|
13454
10592212bb27
[gaim-migrate @ 15828]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13297
diff
changeset
|
1818 | free(buf); |
| 9896 | 1819 | } |
| 1820 | } | |
| 1821 | else if ( use_zeph02(zephyr)) { | |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1822 | gchar* realm; |
| 9896 | 1823 | z_call_s(ZInitialize(), "Couldn't initialize zephyr"); |
| 1824 | z_call_s(ZOpenPort(&(zephyr->port)), "Couldn't open port"); | |
| 1825 | z_call_s(ZSetLocation((char *)zephyr->exposure), "Couldn't set location"); | |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1826 | |
| 15884 | 1827 | realm = (gchar *)purple_account_get_string(gc->account,"realm",""); |
| 12621 | 1828 | if (!*realm) { |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1829 | realm = ZGetRealm(); |
| 12621 | 1830 | } |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1831 | zephyr->realm = g_strdup(realm); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1832 | g_strlcpy(__Zephyr_realm, (const char*)zephyr->realm, REALM_SZ-1); |
| 9896 | 1833 | zephyr->username = g_strdup(ZGetSender()); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1834 | |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1835 | /* zephyr->realm = g_strdup(ZGetRealm()); */ |
| 15884 | 1836 | purple_debug_info("zephyr","realm: %s\n",zephyr->realm); |
| 12621 | 1837 | } |
| 9896 | 1838 | else { |
| 15884 | 1839 | purple_connection_error(gc,"Only ZEPH0.2 supported currently"); |
| 9896 | 1840 | return; |
| 1841 | } | |
| 15884 | 1842 | purple_debug_info("zephyr","does it get here\n"); |
| 1843 | purple_debug_info("zephyr"," realm: %s username:%s\n", zephyr->realm, zephyr->username); | |
| 9896 | 1844 | |
| 1845 | /* For now */ | |
| 1846 | zephyr->galaxy = NULL; | |
| 1847 | zephyr->krbtkfile = NULL; | |
| 1848 | zephyr_inithosts(zephyr); | |
| 1849 | ||
| 1850 | if (zephyr_subscribe_to(zephyr,"MESSAGE","PERSONAL",zephyr->username,NULL) != ZERR_NONE) { | |
| 9478 | 1851 | /* XXX don't translate this yet. It could be written better */ |
| 1852 | /* XXX error messages could be handled with more detail */ | |
| 15884 | 1853 | purple_notify_error(account->gc, NULL, |
| 9478 | 1854 | "Unable to subscribe to messages", "Unable to subscribe to initial messages"); |
| 1855 | return; | |
| 2086 | 1856 | } |
| 1857 | ||
| 15884 | 1858 | purple_connection_set_state(gc, PURPLE_CONNECTED); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1859 | |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1860 | if (read_anyone) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1861 | process_anyone(gc); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1862 | if (read_zsubs) |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1863 | process_zsubs(zephyr); |
|
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
1864 | |
| 9896 | 1865 | if (use_zeph02(zephyr)) { |
| 15884 | 1866 | zephyr->nottimer = purple_timeout_add(100, check_notify_zeph02, gc); |
| 9896 | 1867 | } else if (use_tzc(zephyr)) { |
| 15884 | 1868 | zephyr->nottimer = purple_timeout_add(100, check_notify_tzc, gc); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1869 | } |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1870 | zephyr->loctimer = purple_timeout_add_seconds(20, check_loc, gc); |
| 2086 | 1871 | |
| 1872 | } | |
| 1873 | ||
| 9610 | 1874 | static void write_zsubs(zephyr_account *zephyr) |
| 2086 | 1875 | { |
| 9896 | 1876 | /* Exports subscription (chat) list back to |
| 1877 | * .zephyr.subs | |
| 1878 | * XXX deal with %host%, %canon%, unsubscriptions, and negative subscriptions (punts?) | |
| 1879 | */ | |
| 9434 | 1880 | |
| 9610 | 1881 | GSList *s = zephyr->subscrips; |
| 2086 | 1882 | zephyr_triple *zt; |
| 1883 | FILE *fd; | |
| 1884 | char *fname; | |
| 1885 | ||
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1886 | char **triple; |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1887 | |
| 15884 | 1888 | fname = g_strdup_printf("%s/.zephyr.subs", purple_home_dir()); |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10401
diff
changeset
|
1889 | fd = g_fopen(fname, "w"); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1890 | |
| 2086 | 1891 | if (!fd) { |
| 1892 | g_free(fname); | |
| 1893 | return; | |
| 1894 | } | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1895 | |
| 2086 | 1896 | while (s) { |
| 9478 | 1897 | char *zclass, *zinst, *zrecip; |
| 2086 | 1898 | zt = s->data; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1899 | triple = g_strsplit(zt->name, ",", 3); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1900 | |
| 9478 | 1901 | /* deal with classes */ |
| 9610 | 1902 | if (!g_ascii_strcasecmp(triple[0],zephyr->ourhost)) { |
|
9775
e3a3555b0621
[gaim-migrate @ 10643]
Daniel Atallah <datallah@pidgin.im>
parents:
9754
diff
changeset
|
1903 | zclass = g_strdup("%host%"); |
| 9610 | 1904 | } else if (!g_ascii_strcasecmp(triple[0],zephyr->ourhostcanon)) { |
|
9775
e3a3555b0621
[gaim-migrate @ 10643]
Daniel Atallah <datallah@pidgin.im>
parents:
9754
diff
changeset
|
1905 | zclass = g_strdup("%canon%"); |
| 9478 | 1906 | } else { |
| 1907 | zclass = g_strdup(triple[0]); | |
| 1908 | } | |
| 1909 | ||
| 1910 | /* deal with instances */ | |
| 1911 | ||
| 9610 | 1912 | if (!g_ascii_strcasecmp(triple[1],zephyr->ourhost)) { |
|
9775
e3a3555b0621
[gaim-migrate @ 10643]
Daniel Atallah <datallah@pidgin.im>
parents:
9754
diff
changeset
|
1913 | zinst = g_strdup("%host%"); |
| 9610 | 1914 | } else if (!g_ascii_strcasecmp(triple[1],zephyr->ourhostcanon)) { |
| 9896 | 1915 | zinst = g_strdup("%canon%");; |
| 1916 | } else { | |
| 9478 | 1917 | zinst = g_strdup(triple[1]); |
| 9896 | 1918 | } |
| 9478 | 1919 | |
| 1920 | /* deal with recipients */ | |
| 1921 | if (triple[2] == NULL) { | |
| 1922 | zrecip = g_strdup("*"); | |
| 1923 | } else if (!g_ascii_strcasecmp(triple[2],"")){ | |
| 1924 | zrecip = g_strdup("*"); | |
| 9896 | 1925 | } else if (!g_ascii_strcasecmp(triple[2], zephyr->username)) { |
| 9478 | 1926 | zrecip = g_strdup("%me%"); |
| 3277 | 1927 | } else { |
| 9478 | 1928 | zrecip = g_strdup(triple[2]); |
| 3277 | 1929 | } |
| 9478 | 1930 | |
| 1931 | fprintf(fd, "%s,%s,%s\n",zclass,zinst,zrecip); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
1932 | |
| 9478 | 1933 | g_free(zclass); |
| 1934 | g_free(zinst); | |
| 1935 | g_free(zrecip); | |
| 3277 | 1936 | g_free(triple); |
| 2086 | 1937 | s = s->next; |
| 1938 | } | |
| 1939 | g_free(fname); | |
| 1940 | fclose(fd); | |
| 1941 | } | |
| 1942 | ||
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1943 | static void write_anyone(zephyr_account *zephyr) |
| 2086 | 1944 | { |
|
27199
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1945 | GSList *buddies; |
| 9912 | 1946 | char *fname; |
| 2086 | 1947 | FILE *fd; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
1948 | PurpleAccount *account; |
| 15884 | 1949 | fname = g_strdup_printf("%s/.anyone", purple_home_dir()); |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10401
diff
changeset
|
1950 | fd = g_fopen(fname, "w"); |
| 2086 | 1951 | if (!fd) { |
| 1952 | g_free(fname); | |
| 1953 | return; | |
| 1954 | } | |
| 1955 | ||
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1956 | account = zephyr->account; |
|
27199
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1957 | for (buddies = purple_find_buddies(account, NULL); buddies; |
|
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1958 | buddies = g_slist_delete_link(buddies, buddies)) { |
|
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1959 | PurpleBuddy *b = buddies->data; |
|
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1960 | gchar *stripped_user = zephyr_strip_local_realm(zephyr, purple_buddy_get_name(b)); |
|
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1961 | fprintf(fd, "%s\n", stripped_user); |
|
ab2af9d15cba
Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents:
27198
diff
changeset
|
1962 | g_free(stripped_user); |
| 2086 | 1963 | } |
| 1964 | ||
| 1965 | fclose(fd); | |
| 1966 | g_free(fname); | |
| 1967 | } | |
| 1968 | ||
| 15884 | 1969 | static void zephyr_close(PurpleConnection * gc) |
| 2086 | 1970 | { |
| 1971 | GList *l; | |
| 1972 | GSList *s; | |
| 9896 | 1973 | zephyr_account *zephyr = gc->proto_data; |
| 9986 | 1974 | pid_t tzc_pid = zephyr->tzc_pid; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1975 | |
| 9610 | 1976 | l = zephyr->pending_zloc_names; |
| 2086 | 1977 | while (l) { |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1978 | g_free((char *)l->data); |
| 2086 | 1979 | l = l->next; |
| 1980 | } | |
| 9610 | 1981 | g_list_free(zephyr->pending_zloc_names); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1982 | |
| 15884 | 1983 | if (purple_account_get_bool(gc->account, "write_anyone", FALSE)) |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1984 | write_anyone(zephyr); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1985 | |
| 15884 | 1986 | if (purple_account_get_bool(gc->account, "write_zsubs", FALSE)) |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
1987 | write_zsubs(zephyr); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1988 | |
| 9610 | 1989 | s = zephyr->subscrips; |
| 2086 | 1990 | while (s) { |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1991 | free_triple((zephyr_triple *) s->data); |
| 2086 | 1992 | s = s->next; |
| 1993 | } | |
| 9610 | 1994 | g_slist_free(zephyr->subscrips); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
1995 | |
| 9610 | 1996 | if (zephyr->nottimer) |
| 15884 | 1997 | purple_timeout_remove(zephyr->nottimer); |
| 9610 | 1998 | zephyr->nottimer = 0; |
| 1999 | if (zephyr->loctimer) | |
| 15884 | 2000 | purple_timeout_remove(zephyr->loctimer); |
| 9610 | 2001 | zephyr->loctimer = 0; |
| 2002 | gc = NULL; | |
| 9896 | 2003 | if (use_zeph02(zephyr)) { |
| 2004 | z_call(ZCancelSubscriptions(0)); | |
| 2005 | z_call(ZUnsetLocation()); | |
| 2006 | z_call(ZClosePort()); | |
| 2007 | } else { | |
| 2008 | /* assume tzc */ | |
| 9986 | 2009 | if (kill(tzc_pid,SIGTERM) == -1) { |
| 2010 | int err=errno; | |
| 2011 | if (err==EINVAL) { | |
| 15884 | 2012 | purple_debug_error("zephyr","An invalid signal was specified when killing tzc\n"); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2013 | } |
| 9986 | 2014 | else if (err==ESRCH) { |
| 15884 | 2015 | purple_debug_error("zephyr","Tzc's pid didn't exist while killing tzc\n"); |
| 9986 | 2016 | } |
| 2017 | else if (err==EPERM) { | |
| 15884 | 2018 | purple_debug_error("zephyr","purple didn't have permission to kill tzc\n"); |
| 9986 | 2019 | } |
| 2020 | else { | |
| 15884 | 2021 | purple_debug_error("zephyr","miscellaneous error while attempting to close tzc\n"); |
| 9986 | 2022 | } |
| 2023 | } | |
| 9896 | 2024 | } |
| 2086 | 2025 | } |
| 2026 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2027 | static int zephyr_send_message(zephyr_account *zephyr,char* zclass, char* instance, char* recipient, const char *im, |
| 9478 | 2028 | const char *sig, char *opcode) ; |
| 9434 | 2029 | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
2030 | static const char * zephyr_get_signature(void) |
| 9434 | 2031 | { |
| 9478 | 2032 | /* XXX add zephyr error reporting */ |
| 2033 | const char * sig =ZGetVariable("zwrite-signature"); | |
| 9896 | 2034 | if (!sig) { |
| 2035 | sig = g_get_real_name(); | |
| 2036 | } | |
| 2037 | return sig; | |
| 9434 | 2038 | } |
| 2039 | ||
| 15884 | 2040 | static int zephyr_chat_send(PurpleConnection * gc, int id, const char *im, PurpleMessageFlags flags) |
| 2086 | 2041 | { |
| 2042 | zephyr_triple *zt; | |
| 2043 | const char *sig; | |
| 15884 | 2044 | PurpleConversation *gconv1; |
| 2045 | PurpleConvChat *gcc; | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2046 | char *inst; |
| 9896 | 2047 | char *recipient; |
| 2048 | zephyr_account *zephyr = gc->proto_data; | |
| 2086 | 2049 | |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
2050 | zt = find_sub_by_id(zephyr,id); |
| 2086 | 2051 | if (!zt) |
| 2052 | /* this should never happen. */ | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2053 | return -EINVAL; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2054 | |
| 9896 | 2055 | sig = zephyr_get_signature(); |
| 2086 | 2056 | |
| 15884 | 2057 | gconv1 = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, zt->name, |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10116
diff
changeset
|
2058 | gc->account); |
| 15884 | 2059 | gcc = purple_conversation_get_chat_data(gconv1); |
| 8212 | 2060 | |
| 15884 | 2061 | if (!(inst = (char *)purple_conv_chat_get_topic(gcc))) |
| 9434 | 2062 | inst = g_strdup("PERSONAL"); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2063 | |
| 4793 | 2064 | if (!g_ascii_strcasecmp(zt->recipient, "*")) |
| 9896 | 2065 | recipient = local_zephyr_normalize(zephyr,""); |
| 2086 | 2066 | else |
| 9896 | 2067 | recipient = local_zephyr_normalize(zephyr,zt->recipient); |
| 8451 | 2068 | |
| 9896 | 2069 | zephyr_send_message(zephyr,zt->class,inst,recipient,im,sig,""); |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2162
diff
changeset
|
2070 | return 0; |
| 2086 | 2071 | } |
| 2072 | ||
| 9434 | 2073 | |
| 15884 | 2074 | static int zephyr_send_im(PurpleConnection * gc, const char *who, const char *im, PurpleMessageFlags flags) |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2075 | { |
| 2086 | 2076 | const char *sig; |
| 9896 | 2077 | zephyr_account *zephyr = gc->proto_data; |
| 15884 | 2078 | if (flags & PURPLE_MESSAGE_AUTO_RESP) |
| 2086 | 2079 | sig = "Automated reply:"; |
| 2080 | else { | |
| 9434 | 2081 | sig = zephyr_get_signature(); |
| 2086 | 2082 | } |
| 9896 | 2083 | zephyr_send_message(zephyr,"MESSAGE","PERSONAL",local_zephyr_normalize(zephyr,who),im,sig,""); |
| 9434 | 2084 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2085 | return 1; |
| 9434 | 2086 | } |
| 2086 | 2087 | |
| 9896 | 2088 | /* Munge the outgoing zephyr so that any quotes or backslashes are |
| 2089 | escaped and do not confuse tzc: */ | |
| 2090 | ||
|
12424
af82a40f2488
[gaim-migrate @ 14731]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
2091 | static char* zephyr_tzc_escape_msg(const char *message) |
| 9896 | 2092 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36029
diff
changeset
|
2093 | gsize pos = 0, pos2 = 0; |
| 9896 | 2094 | char *newmsg; |
| 2095 | ||
| 2096 | if (message && (strlen(message) > 0)) { | |
| 2097 | newmsg = g_new0(char,1+strlen(message)*2); | |
| 2098 | while(pos < strlen(message)) { | |
| 2099 | if (message[pos]=='\\') { | |
| 2100 | newmsg[pos2]='\\'; | |
| 2101 | newmsg[pos2+1]='\\'; | |
| 2102 | pos2+=2; | |
| 2103 | } | |
| 2104 | else if (message[pos]=='"') { | |
| 2105 | newmsg[pos2]='\\'; | |
| 2106 | newmsg[pos2+1]='"'; | |
| 2107 | pos2+=2; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2108 | } |
| 9896 | 2109 | else { |
| 2110 | newmsg[pos2] = message[pos]; | |
| 2111 | pos2++; | |
| 2112 | } | |
| 2113 | pos++; | |
| 2114 | } | |
| 2115 | } else { | |
| 2116 | newmsg = g_strdup(""); | |
| 2117 | } | |
| 9986 | 2118 | /* fprintf(stderr,"newmsg %s message %s\n",newmsg,message); */ |
| 9896 | 2119 | return newmsg; |
| 2120 | } | |
| 2121 | ||
| 2122 | char* zephyr_tzc_deescape_str(const char *message) | |
| 2123 | { | |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36029
diff
changeset
|
2124 | gsize pos = 0, pos2 = 0; |
| 9896 | 2125 | char *newmsg; |
| 2126 | ||
| 2127 | if (message && (strlen(message) > 0)) { | |
| 2128 | newmsg = g_new0(char,strlen(message)+1); | |
| 2129 | while(pos < strlen(message)) { | |
| 2130 | if (message[pos]=='\\') { | |
| 2131 | pos++; | |
| 2132 | } | |
| 2133 | newmsg[pos2] = message[pos]; | |
| 2134 | pos++;pos2++; | |
| 2135 | } | |
| 2136 | newmsg[pos2]='\0'; | |
| 2137 | } else { | |
| 2138 | newmsg = g_strdup(""); | |
| 2139 | } | |
| 2140 | ||
| 2141 | return newmsg; | |
| 2142 | } | |
| 2143 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2144 | static int zephyr_send_message(zephyr_account *zephyr,char* zclass, char* instance, char* recipient, const char *im, |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2145 | const char *sig, char *opcode) |
| 9434 | 2146 | { |
| 8451 | 2147 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2148 | /* (From the tzc source) |
| 9896 | 2149 | * emacs sends something of the form: |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2150 | * ((class . "MESSAGE") |
| 9896 | 2151 | * (auth . t) |
| 2152 | * (recipients ("PERSONAL" . "bovik") ("test" . "")) | |
| 2153 | * (sender . "bovik") | |
| 2154 | * (message . ("Harry Bovik" "my zgram")) | |
| 2155 | * ) | |
| 2156 | */ | |
| 2157 | char *html_buf; | |
| 2158 | char *html_buf2; | |
| 2159 | html_buf = html_to_zephyr(im); | |
| 15884 | 2160 | html_buf2 = purple_unescape_html(html_buf); |
| 9434 | 2161 | |
| 9896 | 2162 | if(use_tzc(zephyr)) { |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2163 | size_t len; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2164 | size_t result; |
| 9896 | 2165 | char* zsendstr; |
| 2166 | /* CMU cclub tzc doesn't grok opcodes for now */ | |
| 2167 | char* tzc_sig = zephyr_tzc_escape_msg(sig); | |
| 2168 | char *tzc_body = zephyr_tzc_escape_msg(html_buf2); | |
| 2169 | zsendstr = g_strdup_printf("((tzcfodder . send) (class . \"%s\") (auth . t) (recipients (\"%s\" . \"%s\")) (message . (\"%s\" \"%s\")) ) \n", | |
| 9986 | 2170 | zclass, instance, recipient, tzc_sig, tzc_body); |
| 2171 | /* fprintf(stderr,"zsendstr = %s\n",zsendstr); */ | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2172 | len = strlen(zsendstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2173 | result = write(zephyr->totzc[ZEPHYR_FD_WRITE], zsendstr, len); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2174 | if (result != len) { |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2175 | g_free(zsendstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2176 | g_free(html_buf2); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2177 | g_free(html_buf); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2178 | return errno; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2179 | } |
| 9896 | 2180 | g_free(zsendstr); |
| 2181 | } else if (use_zeph02(zephyr)) { | |
| 2182 | ZNotice_t notice; | |
| 2183 | char *buf = g_strdup_printf("%s%c%s", sig, '\0', html_buf2); | |
|
19387
8dc4480381f3
bcopy and bzero shouldn't be used. This allows Alver to compile nat-pmp.c on one of his obscure systems (and I fixed some other stuff that I noticed at the same time).
Daniel Atallah <datallah@pidgin.im>
parents:
17156
diff
changeset
|
2184 | memset((char *)¬ice, 0, sizeof(notice)); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2185 | |
| 9896 | 2186 | notice.z_kind = ACKED; |
| 2187 | notice.z_port = 0; | |
| 2188 | notice.z_opcode = ""; | |
| 2189 | notice.z_class = zclass; | |
| 2190 | notice.z_class_inst = instance; | |
| 2191 | notice.z_recipient = recipient; | |
| 2192 | notice.z_sender = 0; | |
| 2193 | notice.z_default_format = "Class $class, Instance $instance:\n" "To: @bold($recipient) at $time $date\n" "From: @bold($1) <$sender>\n\n$2"; | |
| 2194 | notice.z_message_len = strlen(html_buf2) + strlen(sig) + 2; | |
| 2195 | notice.z_message = buf; | |
| 2196 | notice.z_opcode = g_strdup(opcode); | |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
2197 | purple_debug_info("zephyr","About to send notice\n"); |
| 9896 | 2198 | if (! ZSendNotice(¬ice, ZAUTH) == ZERR_NONE) { |
| 2199 | /* XXX handle errors here */ | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2200 | g_free(buf); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2201 | g_free(html_buf2); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2202 | g_free(html_buf); |
| 9896 | 2203 | return 0; |
| 2204 | } | |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
2205 | purple_debug_info("zephyr","notice sent\n"); |
| 9896 | 2206 | g_free(buf); |
| 9478 | 2207 | } |
| 2208 | ||
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2209 | g_free(html_buf2); |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2210 | g_free(html_buf); |
| 8451 | 2211 | |
| 9896 | 2212 | return 1; |
| 2086 | 2213 | } |
| 2214 | ||
| 9896 | 2215 | char *local_zephyr_normalize(zephyr_account *zephyr,const char *orig) |
| 8354 | 2216 | { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2217 | /* |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2218 | Basically the inverse of zephyr_strip_local_realm |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2219 | */ |
| 9896 | 2220 | char* buf; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2221 | |
| 8354 | 2222 | if (!g_ascii_strcasecmp(orig, "")) { |
| 9896 | 2223 | return g_strdup(""); |
| 7126 | 2224 | } |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2225 | |
| 9896 | 2226 | if (strchr(orig,'@')) { |
| 2227 | buf = g_strdup_printf("%s",orig); | |
| 2086 | 2228 | } else { |
| 9896 | 2229 | buf = g_strdup_printf("%s@%s",orig,zephyr->realm); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2230 | } |
| 2086 | 2231 | return buf; |
| 2232 | } | |
| 2233 | ||
|
22391
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2234 | static const char *zephyr_normalize(const PurpleAccount *account, const char *who) |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2235 | { |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2236 | static char buf[BUF_LEN]; |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2237 | PurpleConnection *gc; |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2238 | char *tmp; |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2239 | |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2240 | gc = purple_account_get_connection(account); |
|
22543
a73c80f1b40d
Fix a crash in the zephyr normalize function that I added when gc is
Mark Doliner <markdoliner@pidgin.im>
parents:
22391
diff
changeset
|
2241 | if (gc == NULL) |
|
a73c80f1b40d
Fix a crash in the zephyr normalize function that I added when gc is
Mark Doliner <markdoliner@pidgin.im>
parents:
22391
diff
changeset
|
2242 | return NULL; |
|
a73c80f1b40d
Fix a crash in the zephyr normalize function that I added when gc is
Mark Doliner <markdoliner@pidgin.im>
parents:
22391
diff
changeset
|
2243 | |
|
22391
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2244 | tmp = local_zephyr_normalize(gc->proto_data, who); |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2245 | |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2246 | if (strlen(tmp) >= sizeof(buf)) { |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2247 | g_free(tmp); |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2248 | return NULL; |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2249 | } |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2250 | |
|
31954
e5631d5590cc
Replace numerous strcpy() invocations with strlcpy() in Zephyr.
Ethan Blanton <elb@pidgin.im>
parents:
31595
diff
changeset
|
2251 | g_strlcpy(buf, tmp, sizeof(buf)); |
|
22391
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2252 | g_free(tmp); |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2253 | |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2254 | return buf; |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2255 | } |
|
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2256 | |
| 15884 | 2257 | static void zephyr_zloc(PurpleConnection *gc, const char *who) |
| 2086 | 2258 | { |
| 2259 | ZAsyncLocateData_t ald; | |
| 9896 | 2260 | zephyr_account *zephyr = gc->proto_data; |
| 2261 | gchar* normalized_who = local_zephyr_normalize(zephyr,who); | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2262 | |
| 9896 | 2263 | if (use_zeph02(zephyr)) { |
| 2264 | if (ZRequestLocations(normalized_who, &ald, UNACKED, ZAUTH) == ZERR_NONE) { | |
| 2265 | zephyr->pending_zloc_names = g_list_append(zephyr->pending_zloc_names, | |
| 2266 | g_strdup(normalized_who)); | |
| 2267 | } else { | |
| 2268 | /* XXX deal with errors somehow */ | |
| 2269 | } | |
| 2270 | } else if (use_tzc(zephyr)) { | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2271 | size_t len; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2272 | size_t result; |
| 9896 | 2273 | char* zlocstr = g_strdup_printf("((tzcfodder . zlocate) \"%s\")\n",normalized_who); |
| 2274 | zephyr->pending_zloc_names = g_list_append(zephyr->pending_zloc_names, g_strdup(normalized_who)); | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2275 | len = strlen(zlocstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2276 | result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zlocstr,len); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2277 | if (result != len) { |
|
22257
dd49963fe3f6
Use g_strerror() instead of strerror() in a few places.
Richard Laager <rlaager@pidgin.im>
parents:
22197
diff
changeset
|
2278 | purple_debug_error("zephyr", "Unable to write a message: %s\n", g_strerror(errno)); |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2279 | } |
| 9896 | 2280 | g_free(zlocstr); |
| 2086 | 2281 | } |
| 2282 | } | |
| 2283 | ||
| 15884 | 2284 | static void zephyr_set_status(PurpleAccount *account, PurpleStatus *status) { |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2285 | size_t len; |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2286 | size_t result; |
| 15884 | 2287 | zephyr_account *zephyr = purple_account_get_connection(account)->proto_data; |
| 2288 | PurpleStatusPrimitive primitive = purple_status_type_get_primitive(purple_status_get_type(status)); | |
| 9986 | 2289 | |
| 2290 | if (zephyr->away) { | |
| 2291 | g_free(zephyr->away); | |
| 2292 | zephyr->away=NULL; | |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
3867
diff
changeset
|
2293 | } |
|
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
3867
diff
changeset
|
2294 | |
| 15884 | 2295 | if (primitive == PURPLE_STATUS_AWAY) { |
| 2296 | zephyr->away = g_strdup(purple_status_get_attr_string(status,"message")); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2297 | } |
| 15884 | 2298 | else if (primitive == PURPLE_STATUS_AVAILABLE) { |
| 9986 | 2299 | if (use_zeph02(zephyr)) { |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2300 | ZSetLocation(zephyr->exposure); |
| 9986 | 2301 | } |
| 2302 | else { | |
| 2303 | char *zexpstr = g_strdup_printf("((tzcfodder . set-location) (hostname . \"%s\") (exposure . \"%s\"))\n",zephyr->ourhost,zephyr->exposure); | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2304 | len = strlen(zexpstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2305 | result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zexpstr,len); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2306 | if (result != len) { |
|
22257
dd49963fe3f6
Use g_strerror() instead of strerror() in a few places.
Richard Laager <rlaager@pidgin.im>
parents:
22197
diff
changeset
|
2307 | purple_debug_error("zephyr", "Unable to write message: %s\n", g_strerror(errno)); |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2308 | } |
| 9986 | 2309 | g_free(zexpstr); |
| 2310 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2311 | } |
| 15884 | 2312 | else if (primitive == PURPLE_STATUS_INVISIBLE) { |
| 9478 | 2313 | /* XXX handle errors */ |
| 9896 | 2314 | if (use_zeph02(zephyr)) { |
| 2315 | ZSetLocation(EXPOSE_OPSTAFF); | |
| 2316 | } else { | |
| 2317 | char *zexpstr = g_strdup_printf("((tzcfodder . set-location) (hostname . \"%s\") (exposure . \"%s\"))\n",zephyr->ourhost,EXPOSE_OPSTAFF); | |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2318 | len = strlen(zexpstr); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2319 | result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zexpstr,len); |
|
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2320 | if (result != len) { |
|
22257
dd49963fe3f6
Use g_strerror() instead of strerror() in a few places.
Richard Laager <rlaager@pidgin.im>
parents:
22197
diff
changeset
|
2321 | purple_debug_error("zephyr", "Unable to write message: %s\n", g_strerror(errno)); |
|
22197
853f77cffbbd
Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents:
22104
diff
changeset
|
2322 | } |
| 9896 | 2323 | g_free(zexpstr); |
| 2324 | } | |
| 9478 | 2325 | } |
| 2086 | 2326 | } |
| 2327 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2328 | static GList *zephyr_status_types(PurpleAccount *account) |
| 2086 | 2329 | { |
| 15884 | 2330 | PurpleStatusType *type; |
| 9986 | 2331 | GList *types = NULL; |
| 2332 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2333 | /* zephyr has several exposures |
| 9986 | 2334 | NONE (where you are hidden, and zephyrs to you are in practice silently dropped -- yes this is wrong) |
| 2335 | OPSTAFF "hidden" | |
| 2336 | REALM-VISIBLE visible to people in local realm | |
| 2337 | REALM-ANNOUNCED REALM-VISIBLE+ plus your logins/logouts are announced to <login,username,*> | |
| 2338 | NET-VISIBLE REALM-ANNOUNCED, plus visible to people in foreign realm | |
| 2339 | NET-ANNOUNCED NET-VISIBLE, plus logins/logouts are announced to <login,username,*> | |
|
12658
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
2340 | |
| 9986 | 2341 | Online will set the user to the exposure they have in their options (defaulting to REALM-VISIBLE), |
| 2342 | Hidden, will set the user's exposure to OPSTAFF | |
| 2086 | 2343 | |
| 9986 | 2344 | Away won't change their exposure but will set an auto away message (for IMs only) |
| 2345 | */ | |
|
12658
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
2346 | |
| 15884 | 2347 | type = purple_status_type_new(PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE); |
| 9986 | 2348 | types = g_list_append(types,type); |
| 2086 | 2349 | |
| 15884 | 2350 | type = purple_status_type_new(PURPLE_STATUS_INVISIBLE, NULL, NULL, TRUE); |
| 9986 | 2351 | types = g_list_append(types,type); |
| 2352 | ||
| 15884 | 2353 | type = purple_status_type_new_with_attrs( |
| 2354 | PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, | |
| 2355 | "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12467
diff
changeset
|
2356 | NULL); |
| 9986 | 2357 | types = g_list_append(types, type); |
| 2358 | ||
| 15884 | 2359 | type = purple_status_type_new(PURPLE_STATUS_OFFLINE, NULL, NULL, TRUE); |
|
12658
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
2360 | types = g_list_append(types,type); |
|
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
2361 | |
| 9986 | 2362 | return types; |
| 2086 | 2363 | } |
| 2364 | ||
| 15884 | 2365 | static GList *zephyr_chat_info(PurpleConnection * gc) |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2366 | { |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2367 | GList *m = NULL; |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2368 | struct proto_chat_entry *pce; |
| 2086 | 2369 | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2370 | pce = g_new0(struct proto_chat_entry, 1); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2371 | |
|
7841
0000a4c68bf8
[gaim-migrate @ 8494]
Mark Doliner <markdoliner@pidgin.im>
parents:
7475
diff
changeset
|
2372 | pce->label = _("_Class:"); |
| 5234 | 2373 | pce->identifier = "class"; |
| 3158 | 2374 | m = g_list_append(m, pce); |
| 2086 | 2375 | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2376 | pce = g_new0(struct proto_chat_entry, 1); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2377 | |
|
7841
0000a4c68bf8
[gaim-migrate @ 8494]
Mark Doliner <markdoliner@pidgin.im>
parents:
7475
diff
changeset
|
2378 | pce->label = _("_Instance:"); |
| 5234 | 2379 | pce->identifier = "instance"; |
| 3158 | 2380 | m = g_list_append(m, pce); |
| 2086 | 2381 | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2382 | pce = g_new0(struct proto_chat_entry, 1); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2383 | |
|
7841
0000a4c68bf8
[gaim-migrate @ 8494]
Mark Doliner <markdoliner@pidgin.im>
parents:
7475
diff
changeset
|
2384 | pce->label = _("_Recipient:"); |
| 5234 | 2385 | pce->identifier = "recipient"; |
| 3158 | 2386 | m = g_list_append(m, pce); |
| 2086 | 2387 | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2388 | return m; |
| 2086 | 2389 | } |
| 2390 | ||
| 9478 | 2391 | /* Called when the server notifies us a message couldn't get sent */ |
| 2392 | ||
| 15884 | 2393 | static void zephyr_subscribe_failed(PurpleConnection *gc,char * z_class, char *z_instance, char * z_recipient, char* z_galaxy) |
| 9478 | 2394 | { |
| 9896 | 2395 | gchar* subscribe_failed = g_strdup_printf(_("Attempt to subscribe to %s,%s,%s failed"), z_class, z_instance,z_recipient); |
| 15884 | 2396 | purple_notify_error(gc,"", subscribe_failed, NULL); |
| 9478 | 2397 | g_free(subscribe_failed); |
| 2398 | } | |
| 2399 | ||
|
9921
f38d288f6617
[gaim-migrate @ 10813]
Daniel Atallah <datallah@pidgin.im>
parents:
9917
diff
changeset
|
2400 | static char *zephyr_get_chat_name(GHashTable *data) { |
| 9922 | 2401 | gchar* zclass = g_hash_table_lookup(data,"class"); |
| 2402 | gchar* inst = g_hash_table_lookup(data,"instance"); | |
| 2403 | gchar* recipient = g_hash_table_lookup(data, "recipient"); | |
| 2404 | if (!zclass) /* This should never happen */ | |
| 2405 | zclass = ""; | |
| 2406 | if (!inst) | |
| 2407 | inst = "*"; | |
| 2408 | if (!recipient) | |
| 2409 | recipient = ""; | |
| 2410 | return g_strdup_printf("%s,%s,%s",zclass,inst,recipient); | |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9912
diff
changeset
|
2411 | } |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9912
diff
changeset
|
2412 | |
| 9922 | 2413 | |
| 15884 | 2414 | static void zephyr_join_chat(PurpleConnection * gc, GHashTable * data) |
| 2086 | 2415 | { |
| 9896 | 2416 | /* ZSubscription_t sub; */ |
| 2086 | 2417 | zephyr_triple *zt1, *zt2; |
| 2418 | const char *classname; | |
| 2419 | const char *instname; | |
| 2420 | const char *recip; | |
| 9896 | 2421 | zephyr_account *zephyr=gc->proto_data; |
| 5234 | 2422 | classname = g_hash_table_lookup(data, "class"); |
| 2423 | instname = g_hash_table_lookup(data, "instance"); | |
| 2424 | recip = g_hash_table_lookup(data, "recipient"); | |
| 2425 | ||
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2426 | |
| 9328 | 2427 | if (!classname) |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2170
diff
changeset
|
2428 | return; |
| 9478 | 2429 | |
| 2430 | if (!g_ascii_strcasecmp(classname,"%host%")) | |
| 9896 | 2431 | classname = g_strdup(zephyr->ourhost); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2432 | if (!g_ascii_strcasecmp(classname,"%canon%")) |
| 9896 | 2433 | classname = g_strdup(zephyr->ourhostcanon); |
| 9478 | 2434 | |
| 9328 | 2435 | if (!instname || !strlen(instname)) |
| 2436 | instname = "*"; | |
| 9478 | 2437 | |
| 2438 | if (!g_ascii_strcasecmp(instname,"%host%")) | |
| 9896 | 2439 | instname = g_strdup(zephyr->ourhost); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2440 | if (!g_ascii_strcasecmp(instname,"%canon%")) |
| 9896 | 2441 | instname = g_strdup(zephyr->ourhostcanon); |
| 9478 | 2442 | |
| 9328 | 2443 | if (!recip || (*recip == '*')) |
| 2444 | recip = ""; | |
| 4793 | 2445 | if (!g_ascii_strcasecmp(recip, "%me%")) |
| 9896 | 2446 | recip = zephyr->username; |
| 2086 | 2447 | |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
2448 | zt1 = new_triple(zephyr,classname, instname, recip); |
|
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
2449 | zt2 = find_sub_by_triple(zephyr,zt1); |
| 2086 | 2450 | if (zt2) { |
| 2451 | free_triple(zt1); | |
| 9328 | 2452 | if (!zt2->open) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2453 | if (!g_ascii_strcasecmp(instname,"*")) |
| 9328 | 2454 | instname = "PERSONAL"; |
| 9434 | 2455 | serv_got_joined_chat(gc, zt2->id, zt2->name); |
| 9896 | 2456 | zephyr_chat_set_topic(gc,zt2->id,instname); |
| 9328 | 2457 | zt2->open = TRUE; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2458 | } |
| 2086 | 2459 | return; |
| 2460 | } | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2461 | |
| 9896 | 2462 | /* sub.zsub_class = zt1->class; |
| 2463 | sub.zsub_classinst = zt1->instance; | |
| 2464 | sub.zsub_recipient = zt1->recipient; */ | |
| 2465 | ||
| 2466 | if (zephyr_subscribe_to(zephyr,zt1->class,zt1->instance,zt1->recipient,NULL) != ZERR_NONE) { | |
| 9478 | 2467 | /* XXX output better subscription information */ |
| 9896 | 2468 | zephyr_subscribe_failed(gc,zt1->class,zt1->instance,zt1->recipient,NULL); |
| 2086 | 2469 | free_triple(zt1); |
| 2470 | return; | |
| 2471 | } | |
| 2472 | ||
| 9610 | 2473 | zephyr->subscrips = g_slist_append(zephyr->subscrips, zt1); |
| 2086 | 2474 | zt1->open = TRUE; |
| 2475 | serv_got_joined_chat(gc, zt1->id, zt1->name); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2476 | if (!g_ascii_strcasecmp(instname,"*")) |
| 9328 | 2477 | instname = "PERSONAL"; |
| 9896 | 2478 | zephyr_chat_set_topic(gc,zt1->id,instname); |
| 2086 | 2479 | } |
| 2480 | ||
| 15884 | 2481 | static void zephyr_chat_leave(PurpleConnection * gc, int id) |
| 2086 | 2482 | { |
| 2483 | zephyr_triple *zt; | |
| 9896 | 2484 | zephyr_account *zephyr = gc->proto_data; |
| 9610 | 2485 | zt = find_sub_by_id(zephyr,id); |
| 9896 | 2486 | |
| 2086 | 2487 | if (zt) { |
| 2488 | zt->open = FALSE; | |
| 9610 | 2489 | zt->id = ++(zephyr->last_id); |
| 2086 | 2490 | } |
| 2491 | } | |
| 2492 | ||
| 15884 | 2493 | static PurpleChat *zephyr_find_blist_chat(PurpleAccount *account, const char *name) |
| 9478 | 2494 | { |
| 15884 | 2495 | PurpleBlistNode *gnode, *cnode; |
| 9478 | 2496 | |
| 2497 | /* XXX needs to be %host%,%canon%, and %me% clean */ | |
|
24945
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
2498 | for(gnode = purple_blist_get_root(); gnode; |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
2499 | gnode = purple_blist_node_get_sibling_next(gnode)) { |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
2500 | for(cnode = purple_blist_node_get_first_child(gnode); |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
2501 | cnode; |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
2502 | cnode = purple_blist_node_get_sibling_next(cnode)) { |
| 15884 | 2503 | PurpleChat *chat = (PurpleChat*)cnode; |
| 9478 | 2504 | char *zclass, *inst, *recip; |
| 2505 | char** triple; | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2506 | GHashTable *components; |
| 15884 | 2507 | if(!PURPLE_BLIST_NODE_IS_CHAT(cnode)) |
| 9478 | 2508 | continue; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2509 | if(purple_chat_get_account(chat) != account) |
| 9478 | 2510 | continue; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2511 | components = purple_chat_get_components(chat); |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2512 | if(!(zclass = g_hash_table_lookup(components, "class"))) |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2513 | continue; |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2514 | if(!(inst = g_hash_table_lookup(components, "instance"))) |
| 9478 | 2515 | inst = g_strdup(""); |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2516 | if(!(recip = g_hash_table_lookup(components, "recipient"))) |
| 9478 | 2517 | recip = g_strdup(""); |
| 15884 | 2518 | /* purple_debug_info("zephyr","in zephyr_find_blist_chat name: %s\n",name?name:""); */ |
| 9478 | 2519 | triple = g_strsplit(name,",",3); |
| 2520 | if (!g_ascii_strcasecmp(triple[0],zclass) && !g_ascii_strcasecmp(triple[1],inst) && !g_ascii_strcasecmp(triple[2],recip)) | |
| 2521 | return chat; | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23352
diff
changeset
|
2522 | |
| 9478 | 2523 | } |
| 2524 | } | |
| 2525 | return NULL; | |
| 2526 | } | |
| 15884 | 2527 | static const char *zephyr_list_icon(PurpleAccount * a, PurpleBuddy * b) |
|
5202
2c78987f497b
[gaim-migrate @ 5568]
Mark Doliner <markdoliner@pidgin.im>
parents:
5136
diff
changeset
|
2528 | { |
|
2c78987f497b
[gaim-migrate @ 5568]
Mark Doliner <markdoliner@pidgin.im>
parents:
5136
diff
changeset
|
2529 | return "zephyr"; |
|
2c78987f497b
[gaim-migrate @ 5568]
Mark Doliner <markdoliner@pidgin.im>
parents:
5136
diff
changeset
|
2530 | } |
|
2c78987f497b
[gaim-migrate @ 5568]
Mark Doliner <markdoliner@pidgin.im>
parents:
5136
diff
changeset
|
2531 | |
| 15884 | 2532 | static unsigned int zephyr_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state) { |
| 9478 | 2533 | gchar *recipient; |
| 9896 | 2534 | zephyr_account *zephyr = gc->proto_data; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2535 | if (use_tzc(zephyr)) |
| 9896 | 2536 | return 0; |
| 2537 | ||
| 15884 | 2538 | if (state == PURPLE_NOT_TYPING) |
| 9478 | 2539 | return 0; |
|
13844
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13548
diff
changeset
|
2540 | |
| 9478 | 2541 | /* XXX We probably should care if this fails. Or maybe we don't want to */ |
| 2542 | if (!who) { | |
| 15884 | 2543 | purple_debug_info("zephyr", "who is null\n"); |
| 9896 | 2544 | recipient = local_zephyr_normalize(zephyr,""); |
| 9478 | 2545 | } else { |
| 10111 | 2546 | char *comma = strrchr(who, ','); |
| 9896 | 2547 | /* Don't ping broadcast (chat) recipients */ |
| 2548 | /* The strrchr case finds a realm-stripped broadcast subscription | |
| 2549 | e.g. comma is the last character in the string */ | |
| 10111 | 2550 | if (comma && ( (*(comma+1) == '\0') || (*(comma+1) == '@'))) |
| 9896 | 2551 | return 0; |
| 10111 | 2552 | |
| 9896 | 2553 | recipient = local_zephyr_normalize(zephyr,who); |
| 9478 | 2554 | } |
| 2555 | ||
| 15884 | 2556 | purple_debug_info("zephyr","about to send typing notification to %s\n",recipient); |
| 9896 | 2557 | zephyr_send_message(zephyr,"MESSAGE","PERSONAL",recipient,"","","PING"); |
| 15884 | 2558 | purple_debug_info("zephyr","sent typing notification\n"); |
|
13844
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13548
diff
changeset
|
2559 | |
|
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13548
diff
changeset
|
2560 | /* |
|
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13548
diff
changeset
|
2561 | * TODO: Is this correct? It means we will call |
| 15884 | 2562 | * serv_send_typing(gc, who, PURPLE_TYPING) once every 15 seconds |
| 2563 | * until the Purple user stops typing. | |
|
13844
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13548
diff
changeset
|
2564 | */ |
| 9478 | 2565 | return ZEPHYR_TYPING_SEND_TIMEOUT; |
| 2566 | } | |
| 8212 | 2567 | |
| 9434 | 2568 | |
| 2569 | ||
| 15884 | 2570 | static void zephyr_chat_set_topic(PurpleConnection * gc, int id, const char *topic) |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2571 | { |
|
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2572 | zephyr_triple *zt; |
| 15884 | 2573 | PurpleConversation *gconv; |
| 2574 | PurpleConvChat *gcc; | |
| 9896 | 2575 | gchar *topic_utf8; |
| 2576 | zephyr_account* zephyr = gc->proto_data; | |
| 2577 | char *sender = (char *)zephyr->username; | |
| 8212 | 2578 | |
|
31352
7f6c8c77ead0
Use convenience variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31294
diff
changeset
|
2579 | zt = find_sub_by_id(zephyr,id); |
| 9986 | 2580 | /* find_sub_by_id can return NULL */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2581 | if (!zt) |
| 9986 | 2582 | return; |
| 15884 | 2583 | gconv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, zt->name, |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10116
diff
changeset
|
2584 | gc->account); |
| 15884 | 2585 | gcc = purple_conversation_get_chat_data(gconv); |
| 9434 | 2586 | |
|
24806
467284acbc0c
Remove the length parameter from zephyr_recv_convert(), because we were
Richard Laager <rlaager@pidgin.im>
parents:
24756
diff
changeset
|
2587 | topic_utf8 = zephyr_recv_convert(gc,(gchar *)topic); |
| 15884 | 2588 | purple_conv_chat_set_topic(gcc,sender,topic_utf8); |
| 9896 | 2589 | g_free(topic_utf8); |
| 2590 | return; | |
| 9434 | 2591 | } |
| 2592 | ||
| 2593 | /* commands */ | |
| 2594 | ||
| 15884 | 2595 | static PurpleCmdRet zephyr_purple_cmd_msg(PurpleConversation *conv, |
| 9896 | 2596 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2597 | { |
| 9896 | 2598 | char *recipient; |
| 15884 | 2599 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
| 9896 | 2600 | if (!g_ascii_strcasecmp(args[0],"*")) |
| 15884 | 2601 | return PURPLE_CMD_RET_FAILED; /* "*" is not a valid argument */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2602 | else |
| 9896 | 2603 | recipient = local_zephyr_normalize(zephyr,args[0]); |
| 9434 | 2604 | |
| 9896 | 2605 | if (strlen(recipient) < 1) |
| 15884 | 2606 | return PURPLE_CMD_RET_FAILED; /* a null recipient is a chat message, not an IM */ |
| 9478 | 2607 | |
| 9896 | 2608 | if (zephyr_send_message(zephyr,"MESSAGE","PERSONAL",recipient,args[1],zephyr_get_signature(),"")) |
| 15884 | 2609 | return PURPLE_CMD_RET_OK; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2610 | else |
| 15884 | 2611 | return PURPLE_CMD_RET_FAILED; |
| 9434 | 2612 | } |
| 2613 | ||
| 15884 | 2614 | static PurpleCmdRet zephyr_purple_cmd_zlocate(PurpleConversation *conv, |
| 9896 | 2615 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2616 | { |
| 15884 | 2617 | zephyr_zloc(purple_conversation_get_gc(conv),args[0]); |
| 2618 | return PURPLE_CMD_RET_OK; | |
| 9434 | 2619 | } |
| 2620 | ||
| 15884 | 2621 | static PurpleCmdRet zephyr_purple_cmd_instance(PurpleConversation *conv, |
| 9896 | 2622 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2623 | { |
| 9896 | 2624 | /* Currently it sets the instance with leading spaces and |
| 2625 | * all. This might not be the best thing to do, though having | |
| 2626 | * one word isn't ideal either. */ | |
| 9434 | 2627 | |
| 15884 | 2628 | PurpleConvChat *gcc = purple_conversation_get_chat_data(conv); |
| 9896 | 2629 | int id = gcc->id; |
| 2630 | const char* instance = args[0]; | |
| 15884 | 2631 | zephyr_chat_set_topic(purple_conversation_get_gc(conv),id,instance); |
| 2632 | return PURPLE_CMD_RET_OK; | |
| 9434 | 2633 | } |
| 2634 | ||
| 15884 | 2635 | static PurpleCmdRet zephyr_purple_cmd_joinchat_cir(PurpleConversation *conv, |
| 9896 | 2636 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2637 | { |
| 9896 | 2638 | /* Join a new zephyr chat */ |
| 2639 | GHashTable *triple = g_hash_table_new(NULL,NULL); | |
| 2640 | g_hash_table_insert(triple,"class",args[0]); | |
| 2641 | g_hash_table_insert(triple,"instance",args[1]); | |
| 2642 | g_hash_table_insert(triple,"recipient",args[2]); | |
| 15884 | 2643 | zephyr_join_chat(purple_conversation_get_gc(conv),triple); |
| 2644 | return PURPLE_CMD_RET_OK; | |
| 9434 | 2645 | } |
| 2646 | ||
| 15884 | 2647 | static PurpleCmdRet zephyr_purple_cmd_zi(PurpleConversation *conv, |
| 9896 | 2648 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2649 | { |
| 9896 | 2650 | /* args = instance, message */ |
| 15884 | 2651 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
| 9896 | 2652 | if ( zephyr_send_message(zephyr,"message",args[0],"",args[1],zephyr_get_signature(),"")) |
| 15884 | 2653 | return PURPLE_CMD_RET_OK; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2654 | else |
| 15884 | 2655 | return PURPLE_CMD_RET_FAILED; |
| 9434 | 2656 | } |
| 2657 | ||
| 15884 | 2658 | static PurpleCmdRet zephyr_purple_cmd_zci(PurpleConversation *conv, |
| 9896 | 2659 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2660 | { |
| 9896 | 2661 | /* args = class, instance, message */ |
| 15884 | 2662 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
| 9896 | 2663 | if ( zephyr_send_message(zephyr,args[0],args[1],"",args[2],zephyr_get_signature(),"")) |
| 15884 | 2664 | return PURPLE_CMD_RET_OK; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2665 | else |
| 15884 | 2666 | return PURPLE_CMD_RET_FAILED; |
| 9434 | 2667 | } |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2668 | |
| 15884 | 2669 | static PurpleCmdRet zephyr_purple_cmd_zcir(PurpleConversation *conv, |
| 9896 | 2670 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2671 | { |
| 9896 | 2672 | /* args = class, instance, recipient, message */ |
| 15884 | 2673 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2674 | if ( zephyr_send_message(zephyr,args[0],args[1],args[2],args[3],zephyr_get_signature(),"")) |
| 15884 | 2675 | return PURPLE_CMD_RET_OK; |
| 9896 | 2676 | else |
| 15884 | 2677 | return PURPLE_CMD_RET_FAILED; |
| 8212 | 2678 | } |
| 2679 | ||
| 15884 | 2680 | static PurpleCmdRet zephyr_purple_cmd_zir(PurpleConversation *conv, |
| 9896 | 2681 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2682 | { |
| 9896 | 2683 | /* args = instance, recipient, message */ |
| 15884 | 2684 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2685 | if ( zephyr_send_message(zephyr,"message",args[0],args[1],args[2],zephyr_get_signature(),"")) |
| 15884 | 2686 | return PURPLE_CMD_RET_OK; |
| 9896 | 2687 | else |
| 15884 | 2688 | return PURPLE_CMD_RET_FAILED; |
| 9434 | 2689 | } |
| 2690 | ||
| 15884 | 2691 | static PurpleCmdRet zephyr_purple_cmd_zc(PurpleConversation *conv, |
| 9896 | 2692 | const char *cmd, char **args, char **error, void *data) |
| 9434 | 2693 | { |
| 9896 | 2694 | /* args = class, message */ |
| 15884 | 2695 | zephyr_account *zephyr = purple_conversation_get_gc(conv)->proto_data; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2696 | if ( zephyr_send_message(zephyr,args[0],"PERSONAL","",args[1],zephyr_get_signature(),"")) |
| 15884 | 2697 | return PURPLE_CMD_RET_OK; |
| 9896 | 2698 | else |
| 15884 | 2699 | return PURPLE_CMD_RET_FAILED; |
| 9434 | 2700 | } |
| 2701 | ||
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
20288
diff
changeset
|
2702 | static void zephyr_register_slash_commands(void) |
| 9434 | 2703 | { |
| 2704 | ||
| 15884 | 2705 | purple_cmd_register("msg","ws", PURPLE_CMD_P_PRPL, |
| 2706 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2707 | "prpl-zephyr", |
| 15884 | 2708 | zephyr_purple_cmd_msg, _("msg <nick> <message>: Send a private message to a user"), NULL); |
| 9434 | 2709 | |
| 15884 | 2710 | purple_cmd_register("zlocate","w", PURPLE_CMD_P_PRPL, |
| 2711 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2712 | "prpl-zephyr", |
| 15884 | 2713 | zephyr_purple_cmd_zlocate, _("zlocate <nick>: Locate user"), NULL); |
| 9434 | 2714 | |
| 15884 | 2715 | purple_cmd_register("zl","w", PURPLE_CMD_P_PRPL, |
| 2716 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2717 | "prpl-zephyr", |
| 15884 | 2718 | zephyr_purple_cmd_zlocate, _("zl <nick>: Locate user"), NULL); |
| 9434 | 2719 | |
| 15884 | 2720 | purple_cmd_register("instance","s", PURPLE_CMD_P_PRPL, |
| 2721 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2722 | "prpl-zephyr", |
| 15884 | 2723 | zephyr_purple_cmd_instance, _("instance <instance>: Set the instance to be used on this class"), NULL); |
| 9434 | 2724 | |
| 15884 | 2725 | purple_cmd_register("inst","s", PURPLE_CMD_P_PRPL, |
| 2726 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2727 | "prpl-zephyr", |
| 15884 | 2728 | zephyr_purple_cmd_instance, _("inst <instance>: Set the instance to be used on this class"), NULL); |
| 9434 | 2729 | |
| 15884 | 2730 | purple_cmd_register("topic","s", PURPLE_CMD_P_PRPL, |
| 2731 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2732 | "prpl-zephyr", |
| 15884 | 2733 | zephyr_purple_cmd_instance, _("topic <instance>: Set the instance to be used on this class"), NULL); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2734 | |
| 15884 | 2735 | purple_cmd_register("sub", "www", PURPLE_CMD_P_PRPL, |
| 2736 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2737 | "prpl-zephyr", |
| 15884 | 2738 | zephyr_purple_cmd_joinchat_cir, |
| 9896 | 2739 | _("sub <class> <instance> <recipient>: Join a new chat"), NULL); |
| 9434 | 2740 | |
| 15884 | 2741 | purple_cmd_register("zi","ws", PURPLE_CMD_P_PRPL, |
| 2742 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2743 | "prpl-zephyr", |
| 15884 | 2744 | zephyr_purple_cmd_zi, _("zi <instance>: Send a message to <message,<i>instance</i>,*>"), NULL); |
| 9434 | 2745 | |
| 15884 | 2746 | purple_cmd_register("zci","wws",PURPLE_CMD_P_PRPL, |
| 2747 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2748 | "prpl-zephyr", |
| 15884 | 2749 | zephyr_purple_cmd_zci, |
| 9896 | 2750 | _("zci <class> <instance>: Send a message to <<i>class</i>,<i>instance</i>,*>"), NULL); |
| 9434 | 2751 | |
| 15884 | 2752 | purple_cmd_register("zcir","wwws",PURPLE_CMD_P_PRPL, |
| 2753 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2754 | "prpl-zephyr", |
| 15884 | 2755 | zephyr_purple_cmd_zcir, |
| 9896 | 2756 | _("zcir <class> <instance> <recipient>: Send a message to <<i>class</i>,<i>instance</i>,<i>recipient</i>>"), NULL); |
| 9434 | 2757 | |
| 15884 | 2758 | purple_cmd_register("zir","wws",PURPLE_CMD_P_PRPL, |
| 2759 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2760 | "prpl-zephyr", |
| 15884 | 2761 | zephyr_purple_cmd_zir, |
| 9896 | 2762 | _("zir <instance> <recipient>: Send a message to <MESSAGE,<i>instance</i>,<i>recipient</i>>"), NULL); |
| 9434 | 2763 | |
| 15884 | 2764 | purple_cmd_register("zc","ws", PURPLE_CMD_P_PRPL, |
| 2765 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9896 | 2766 | "prpl-zephyr", |
| 15884 | 2767 | zephyr_purple_cmd_zc, _("zc <class>: Send a message to <<i>class</i>,PERSONAL,*>"), NULL); |
| 9597 | 2768 | |
| 9434 | 2769 | } |
| 2770 | ||
| 2771 | ||
| 15884 | 2772 | static int zephyr_resubscribe(PurpleConnection *gc) |
| 9427 | 2773 | { |
| 9896 | 2774 | /* Resubscribe to the in-memory list of subscriptions and also |
| 2775 | unsubscriptions*/ | |
| 2776 | zephyr_account *zephyr = gc->proto_data; | |
| 2777 | GSList *s = zephyr->subscrips; | |
| 2778 | zephyr_triple *zt; | |
| 2779 | while (s) { | |
| 2780 | zt = s->data; | |
| 2781 | /* XXX We really should care if this fails */ | |
| 2782 | zephyr_subscribe_to(zephyr,zt->class,zt->instance,zt->recipient,NULL); | |
| 2783 | s = s->next; | |
| 2784 | } | |
| 2785 | /* XXX handle unsubscriptions */ | |
| 2786 | return 1; | |
| 9427 | 2787 | } |
| 2788 | ||
| 9434 | 2789 | |
| 15884 | 2790 | static void zephyr_action_resubscribe(PurplePluginAction *action) |
| 9427 | 2791 | { |
| 2792 | ||
| 15884 | 2793 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 9896 | 2794 | zephyr_resubscribe(gc); |
| 9427 | 2795 | } |
| 2796 | ||
| 2797 | ||
| 15884 | 2798 | static void zephyr_action_get_subs_from_server(PurplePluginAction *action) |
| 9478 | 2799 | { |
| 15884 | 2800 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 9896 | 2801 | zephyr_account *zephyr = gc->proto_data; |
| 9478 | 2802 | gchar *title; |
| 2803 | int retval, nsubs, one,i; | |
| 2804 | ZSubscription_t subs; | |
| 9896 | 2805 | if (use_zeph02(zephyr)) { |
| 2806 | GString* subout = g_string_new("Subscription list<br>"); | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2807 | |
| 9896 | 2808 | title = g_strdup_printf("Server subscriptions for %s", zephyr->username); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2809 | |
| 9896 | 2810 | if (zephyr->port == 0) { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
2811 | purple_debug_error("zephyr", "error while retrieving port\n"); |
| 9896 | 2812 | return; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2813 | } |
| 9896 | 2814 | if ((retval = ZRetrieveSubscriptions(zephyr->port,&nsubs)) != ZERR_NONE) { |
| 9478 | 2815 | /* XXX better error handling */ |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
2816 | purple_debug_error("zephyr", "error while retrieving subscriptions from server\n"); |
| 9478 | 2817 | return; |
| 2818 | } | |
| 9896 | 2819 | for(i=0;i<nsubs;i++) { |
| 2820 | one = 1; | |
| 2821 | if ((retval = ZGetSubscriptions(&subs,&one)) != ZERR_NONE) { | |
| 2822 | /* XXX better error handling */ | |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19387
diff
changeset
|
2823 | purple_debug_error("zephyr", "error while retrieving individual subscription\n"); |
| 9896 | 2824 | return; |
| 2825 | } | |
| 2826 | g_string_append_printf(subout, "Class %s Instance %s Recipient %s<br>", | |
| 2827 | subs.zsub_class, subs.zsub_classinst, | |
| 2828 | subs.zsub_recipient); | |
| 2829 | } | |
| 15884 | 2830 | purple_notify_formatted(gc, title, title, NULL, subout->str, NULL, NULL); |
| 9896 | 2831 | } else { |
| 2832 | /* XXX fix */ | |
| 15884 | 2833 | purple_notify_error(gc,"","tzc doesn't support this action",NULL); |
| 9478 | 2834 | } |
| 2835 | } | |
| 2836 | ||
| 2837 | ||
| 15884 | 2838 | static GList *zephyr_actions(PurplePlugin *plugin, gpointer context) |
| 9427 | 2839 | { |
| 2840 | GList *list = NULL; | |
| 15884 | 2841 | PurplePluginAction *act = NULL; |
| 9427 | 2842 | |
| 15884 | 2843 | act = purple_plugin_action_new(_("Resubscribe"), zephyr_action_resubscribe); |
| 9427 | 2844 | list = g_list_append(list, act); |
| 2845 | ||
| 15884 | 2846 | act = purple_plugin_action_new(_("Retrieve subscriptions from server"), zephyr_action_get_subs_from_server); |
| 9478 | 2847 | list = g_list_append(list,act); |
| 2848 | ||
| 9427 | 2849 | return list; |
| 2850 | } | |
| 2851 | ||
| 15884 | 2852 | static PurplePlugin *my_protocol = NULL; |
| 2086 | 2853 | |
| 15884 | 2854 | static PurplePluginProtocolInfo prpl_info = { |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2855 | OPT_PROTO_CHAT_TOPIC | OPT_PROTO_NO_PASSWORD, |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2856 | NULL, /* ??? user_splits */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2857 | NULL, /* ??? protocol_options */ |
| 9478 | 2858 | NO_BUDDY_ICONS, |
| 2859 | zephyr_list_icon, | |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2860 | NULL, /* ??? list_emblems */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2861 | NULL, /* ??? status_text */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2862 | NULL, /* ??? tooltip_text */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2863 | zephyr_status_types, /* status_types */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2864 | NULL, /* ??? blist_node_menu - probably all useful actions are already handled*/ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2865 | zephyr_chat_info, /* chat_info */ |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9741
diff
changeset
|
2866 | NULL, /* chat_info_defaults */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2867 | zephyr_login, /* login */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2868 | zephyr_close, /* close */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2869 | zephyr_send_im, /* send_im */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2870 | NULL, /* XXX set info (Location?) */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2871 | zephyr_send_typing, /* send_typing */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2872 | zephyr_zloc, /* get_info */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2873 | zephyr_set_status, /* set_status */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2874 | NULL, /* ??? set idle */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2875 | NULL, /* change password */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2876 | NULL, /* add_buddy */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2877 | NULL, /* add_buddies */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2878 | NULL, /* remove_buddy */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2879 | NULL, /* remove_buddies */ |
|
22389
21650aee2a19
Remove the privacy prpl callbacks in Zephyr since they're basically a
Mark Doliner <markdoliner@pidgin.im>
parents:
22257
diff
changeset
|
2880 | NULL, /* add_permit */ |
|
21650aee2a19
Remove the privacy prpl callbacks in Zephyr since they're basically a
Mark Doliner <markdoliner@pidgin.im>
parents:
22257
diff
changeset
|
2881 | NULL, /* add_deny */ |
|
21650aee2a19
Remove the privacy prpl callbacks in Zephyr since they're basically a
Mark Doliner <markdoliner@pidgin.im>
parents:
22257
diff
changeset
|
2882 | NULL, /* remove_permit */ |
|
21650aee2a19
Remove the privacy prpl callbacks in Zephyr since they're basically a
Mark Doliner <markdoliner@pidgin.im>
parents:
22257
diff
changeset
|
2883 | NULL, /* remove_deny */ |
|
21650aee2a19
Remove the privacy prpl callbacks in Zephyr since they're basically a
Mark Doliner <markdoliner@pidgin.im>
parents:
22257
diff
changeset
|
2884 | NULL, /* set_permit_deny */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2885 | zephyr_join_chat, /* join_chat */ |
| 9896 | 2886 | NULL, /* reject_chat -- No chat invites*/ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2887 | zephyr_get_chat_name, /* get_chat_name */ |
| 9896 | 2888 | NULL, /* chat_invite -- No chat invites*/ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2889 | zephyr_chat_leave, /* chat_leave */ |
| 9896 | 2890 | NULL, /* chat_whisper -- No "whispering"*/ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2891 | zephyr_chat_send, /* chat_send */ |
| 9896 | 2892 | NULL, /* keepalive -- Not necessary*/ |
| 2893 | NULL, /* register_user -- Not supported*/ | |
| 2894 | NULL, /* XXX get_cb_info */ | |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2895 | NULL, /* get_cb_away */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2896 | NULL, /* alias_buddy */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2897 | NULL, /* group_buddy */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2898 | NULL, /* rename_group */ |
| 9896 | 2899 | NULL, /* buddy_free */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2900 | NULL, /* convo_closed */ |
|
22391
823ac1e9cfbb
Get rid of some privacy checking code from zephyr that is done in
Mark Doliner <markdoliner@pidgin.im>
parents:
22389
diff
changeset
|
2901 | zephyr_normalize, /* normalize */ |
| 9896 | 2902 | NULL, /* XXX set_buddy_icon */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2903 | NULL, /* remove_group */ |
| 9896 | 2904 | NULL, /* XXX get_cb_real_name */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2905 | zephyr_chat_set_topic, /* set_chat_topic */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2906 | zephyr_find_blist_chat, /* find_blist_chat */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2907 | NULL, /* roomlist_get_list */ |
|
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2908 | NULL, /* roomlist_cancel */ |
| 9896 | 2909 | NULL, /* roomlist_expand_category */ |
|
9475
8c8d4ac992a6
[gaim-migrate @ 10300]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9473
diff
changeset
|
2910 | NULL, /* can_receive_file */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2911 | NULL, /* send_file */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12595
diff
changeset
|
2912 | NULL, /* new_xfer */ |
|
12645
a907ba243930
[gaim-migrate @ 14983]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12624
diff
changeset
|
2913 | NULL, /* offline_message */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12595
diff
changeset
|
2914 | NULL, /* whiteboard_prpl_ops */ |
| 14604 | 2915 | NULL, /* send_raw */ |
| 15185 | 2916 | NULL, /* roomlist_room_serialize */ |
|
16746
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2917 | |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2918 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2919 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2920 | NULL, |
|
23276
f4944cfaa1ff
Use up the last padding for PurplePluginProtocolInfo in a way that allows
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22543
diff
changeset
|
2921 | sizeof(PurplePluginProtocolInfo), /* struct_size */ |
| 23708 | 2922 | NULL, /* get_account_text_table */ |
|
22648
e286d795c5f9
Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22646
diff
changeset
|
2923 | NULL, /* initate_media */ |
|
29757
f137c1386384
Add a NULL for PurplePluginProtocolInfo::get_moods to all the plugins I build
Paul Aurich <darkrain42@pidgin.im>
parents:
27361
diff
changeset
|
2924 | NULL, /* get_media_caps */ |
|
30138
cca9685df785
Add purple_account_[gs]et_public_alias functions, per discussion in d@cpi
Paul Aurich <darkrain42@pidgin.im>
parents:
29757
diff
changeset
|
2925 | NULL, /* get_moods */ |
|
cca9685df785
Add purple_account_[gs]et_public_alias functions, per discussion in d@cpi
Paul Aurich <darkrain42@pidgin.im>
parents:
29757
diff
changeset
|
2926 | NULL, /* set_public_alias */ |
|
31595
ffc150f21bec
Update PRPL structs with new fields.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31352
diff
changeset
|
2927 | NULL, /* get_public_alias */ |
|
ffc150f21bec
Update PRPL structs with new fields.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31352
diff
changeset
|
2928 | NULL, /* add_buddy_with_invite */ |
|
38967
303c75b86d86
Add get_cb_alias() to PRPLs
David Woodhouse <dwmw2@infradead.org>
parents:
36256
diff
changeset
|
2929 | NULL, /* add_buddies_with_invite */ |
|
303c75b86d86
Add get_cb_alias() to PRPLs
David Woodhouse <dwmw2@infradead.org>
parents:
36256
diff
changeset
|
2930 | NULL, /* get_cb_alias */ |
|
40427
93bf0203f935
Add chat_send_file() facility
David Woodhouse <dwmw2@infradead.org>
parents:
38967
diff
changeset
|
2931 | NULL, /* chat_can_receive_file */ |
|
93bf0203f935
Add chat_send_file() facility
David Woodhouse <dwmw2@infradead.org>
parents:
38967
diff
changeset
|
2932 | NULL, /* chat_send_file */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2933 | }; |
| 2086 | 2934 | |
| 15884 | 2935 | static PurplePluginInfo info = { |
| 2936 | PURPLE_PLUGIN_MAGIC, | |
| 2937 | PURPLE_MAJOR_VERSION, | |
| 2938 | PURPLE_MINOR_VERSION, | |
| 2939 | PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2940 | NULL, /**< ui_requirement */ |
| 9896 | 2941 | 0, /**< flags */ |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2942 | NULL, /**< dependencies */ |
| 15884 | 2943 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2944 | |
| 9896 | 2945 | "prpl-zephyr", /**< id */ |
| 2946 | "Zephyr", /**< name */ | |
|
20288
5ca925a094e2
applied changes from 03b709ec2a153e7e82719df0ba4635108bb1d3c6
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19859
diff
changeset
|
2947 | DISPLAY_VERSION, /**< version */ |
| 9896 | 2948 | /** summary */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2949 | N_("Zephyr Protocol Plugin"), |
| 9896 | 2950 | /** description */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2951 | N_("Zephyr Protocol Plugin"), |
| 9896 | 2952 | NULL, /**< author */ |
| 15884 | 2953 | PURPLE_WEBSITE, /**< homepage */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2954 | |
| 9896 | 2955 | NULL, /**< load */ |
| 2956 | NULL, /**< unload */ | |
| 2957 | NULL, /**< destroy */ | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2958 | |
| 9896 | 2959 | NULL, /**< ui_info */ |
| 8993 | 2960 | &prpl_info, /**< extra_info */ |
| 2961 | NULL, | |
| 14604 | 2962 | zephyr_actions, |
|
16746
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2963 | |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2964 | /* padding */ |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2965 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2966 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2967 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
15884
diff
changeset
|
2968 | NULL |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2969 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2970 | |
| 15884 | 2971 | static void init_plugin(PurplePlugin * plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
2972 | { |
| 15884 | 2973 | PurpleAccountOption *option; |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2974 | char *tmp = get_exposure_level(); |
| 11033 | 2975 | |
| 15884 | 2976 | option = purple_account_option_bool_new(_("Use tzc"), "use_tzc", FALSE); |
| 9896 | 2977 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 2978 | ||
| 15884 | 2979 | option = purple_account_option_string_new(_("tzc command"), "tzc_command", "/usr/bin/tzc -e %s"); |
| 9896 | 2980 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 2981 | ||
| 15884 | 2982 | option = purple_account_option_bool_new(_("Export to .anyone"), "write_anyone", FALSE); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2983 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 8212 | 2984 | |
| 15884 | 2985 | option = purple_account_option_bool_new(_("Export to .zephyr.subs"), "write_zsubs", FALSE); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2986 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 8212 | 2987 | |
| 15884 | 2988 | option = purple_account_option_bool_new(_("Import from .anyone"), "read_anyone", TRUE); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2989 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2990 | |
| 15884 | 2991 | option = purple_account_option_bool_new(_("Import from .zephyr.subs"), "read_zsubs", TRUE); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2992 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2993 | |
| 15884 | 2994 | option = purple_account_option_string_new(_("Realm"), "realm", ""); |
|
10038
3589c2eed81c
[gaim-migrate @ 10997]
Luke Schierer <lschiere@pidgin.im>
parents:
10009
diff
changeset
|
2995 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30138
diff
changeset
|
2996 | |
| 15884 | 2997 | option = purple_account_option_string_new(_("Exposure"), "exposure_level", tmp?tmp: EXPOSE_REALMVIS); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
2998 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 8212 | 2999 | |
| 15884 | 3000 | option = purple_account_option_string_new(_("Encoding"), "encoding", ZEPHYR_FALLBACK_CHARSET); |
|
8644
ba37f1cc0006
[gaim-migrate @ 9396]
Mark Doliner <markdoliner@pidgin.im>
parents:
8641
diff
changeset
|
3001 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 8560 | 3002 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5202
diff
changeset
|
3003 | my_protocol = plugin; |
| 9896 | 3004 | zephyr_register_slash_commands(); |
| 2086 | 3005 | } |
| 3006 | ||
| 15884 | 3007 | PURPLE_INIT_PLUGIN(zephyr, init_plugin, info); |