Mercurial > pidgin
annotate src/server.c @ 13967:99b9b58b19dd
[gaim-migrate @ 16523]
Fix a crazy MSN crash. Basically it's possible to have more than one
slplink associated with a given switchboard, but our code did not
allow for that. I think it happens when you're in a multi-user
chat and you do stuff with multiple users that involves slplinks.
Like maybe file transfer and buddy icon related stuff.
Tracking this down took an ungodly amount of time, but thanks to
Meebo for letting me do it :-)
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 20 Jul 2006 07:31:15 +0000 |
parents | ad171112d52c |
children | 8bda65b88e49 |
rev | line source |
---|---|
1 | 1 /* |
2 * gaim | |
3 * | |
8046 | 4 * Gaim is the legal property of its developers, whose names are too numerous |
5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
6 * source distribution. | |
1 | 7 * |
8 * This program is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 * | |
22 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
23 #include "internal.h" |
9944 | 24 #include "blist.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
25 #include "conversation.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
26 #include "debug.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
27 #include "log.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
28 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
29 #include "prefs.h" |
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
30 #include "privacy.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
31 #include "prpl.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
32 #include "request.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
33 #include "signals.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
34 #include "server.h" |
9944 | 35 #include "status.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
36 #include "util.h" |
1 | 37 |
8948 | 38 #define SECS_BEFORE_RESENDING_AUTORESPONSE 600 |
9285 | 39 #define SEX_BEFORE_RESENDING_AUTORESPONSE "Only after you're married" |
8948 | 40 |
13842 | 41 unsigned int |
42 serv_send_typing(GaimConnection *gc, const char *name, GaimTypingState state) | |
43 { | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
44 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
45 |
13842 | 46 if (gc != NULL && gc->prpl != NULL) |
47 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
48 |
13842 | 49 if (prpl_info && prpl_info->send_typing) |
50 return prpl_info->send_typing(gc, name, state); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
51 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
52 return 0; |
2993 | 53 } |
1 | 54 |
10871 | 55 static GSList *last_auto_responses = NULL; |
6479 | 56 struct last_auto_response { |
57 GaimConnection *gc; | |
3815 | 58 char name[80]; |
6479 | 59 time_t sent; |
3815 | 60 }; |
61 | |
10850 | 62 static gboolean |
63 expire_last_auto_responses(gpointer data) | |
6479 | 64 { |
65 GSList *tmp, *cur; | |
66 struct last_auto_response *lar; | |
67 | |
68 tmp = last_auto_responses; | |
69 | |
70 while (tmp) { | |
71 cur = tmp; | |
72 tmp = tmp->next; | |
73 lar = (struct last_auto_response *)cur->data; | |
74 | |
8948 | 75 if ((time(NULL) - lar->sent) > SECS_BEFORE_RESENDING_AUTORESPONSE) { |
6479 | 76 last_auto_responses = g_slist_remove(last_auto_responses, lar); |
77 g_free(lar); | |
78 } | |
79 } | |
80 | |
81 return FALSE; /* do not run again */ | |
82 } | |
83 | |
10850 | 84 static struct last_auto_response * |
85 get_last_auto_response(GaimConnection *gc, const char *name) | |
6479 | 86 { |
87 GSList *tmp; | |
88 struct last_auto_response *lar; | |
89 | |
90 /* because we're modifying or creating a lar, schedule the | |
91 * function to expire them as the pref dictates */ | |
8948 | 92 gaim_timeout_add((SECS_BEFORE_RESENDING_AUTORESPONSE + 1) * 1000, expire_last_auto_responses, NULL); |
6479 | 93 |
94 tmp = last_auto_responses; | |
95 | |
96 while (tmp) { | |
97 lar = (struct last_auto_response *)tmp->data; | |
98 | |
99 if (gc == lar->gc && !strncmp(name, lar->name, sizeof(lar->name))) | |
100 return lar; | |
101 | |
102 tmp = tmp->next; | |
103 } | |
104 | |
105 lar = (struct last_auto_response *)g_new0(struct last_auto_response, 1); | |
106 g_snprintf(lar->name, sizeof(lar->name), "%s", name); | |
107 lar->gc = gc; | |
108 lar->sent = 0; | |
13789
99688ab310c8
[gaim-migrate @ 16201]
Richard Laager <rlaager@wiktel.com>
parents:
13663
diff
changeset
|
109 last_auto_responses = g_slist_prepend(last_auto_responses, lar); |
6479 | 110 |
111 return lar; | |
112 } | |
113 | |
6059 | 114 int serv_send_im(GaimConnection *gc, const char *name, const char *message, |
12216 | 115 GaimMessageFlags flags) |
1 | 116 { |
9949 | 117 GaimConversation *conv; |
118 GaimAccount *account; | |
119 GaimPresence *presence; | |
13421
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
120 GaimPluginProtocolInfo *prpl_info; |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2108
diff
changeset
|
121 int val = -EINVAL; |
9594 | 122 const gchar *auto_reply_pref; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
123 |
13421
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
124 g_return_val_if_fail(gc != NULL, val); |
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
125 g_return_val_if_fail(gc->prpl != NULL, val); |
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
126 |
2ec69a9763a5
[gaim-migrate @ 15796]
Richard Laager <rlaager@wiktel.com>
parents:
13417
diff
changeset
|
127 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
128 |
9949 | 129 account = gaim_connection_get_account(gc); |
130 presence = gaim_account_get_presence(account); | |
131 | |
11338 | 132 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
133 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
134 if (prpl_info && prpl_info->send_im) |
12216 | 135 val = prpl_info->send_im(gc, name, message, flags); |
94
9f6ce50ffb78
[gaim-migrate @ 104]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
79
diff
changeset
|
136 |
9594 | 137 /* |
138 * XXX - If "only auto-reply when away & idle" is set, then shouldn't | |
139 * this only reset lar->sent if we're away AND idle? | |
140 */ | |
141 auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply"); | |
9949 | 142 if ((gc->flags & GAIM_CONNECTION_AUTO_RESP) && |
143 !gaim_presence_is_available(presence) && | |
144 strcmp(auto_reply_pref, "never")) { | |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5539
diff
changeset
|
145 |
6479 | 146 struct last_auto_response *lar; |
147 lar = get_last_auto_response(gc, name); | |
148 lar->sent = time(NULL); | |
3815 | 149 } |
150 | |
13842 | 151 if (conv && gaim_conv_im_get_send_typed_timeout(GAIM_CONV_IM(conv))) |
152 gaim_conv_im_stop_send_typed_timeout(GAIM_CONV_IM(conv)); | |
3601 | 153 |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2108
diff
changeset
|
154 return val; |
1 | 155 } |
156 | |
9285 | 157 void serv_get_info(GaimConnection *gc, const char *name) |
1 | 158 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
159 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
160 |
9285 | 161 if (gc != NULL && gc->prpl != NULL) |
162 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
163 |
9285 | 164 if (gc && prpl_info && prpl_info->get_info) |
165 prpl_info->get_info(gc, name); | |
249
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
248
diff
changeset
|
166 } |
810c595258c8
[gaim-migrate @ 259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
248
diff
changeset
|
167 |
9285 | 168 void serv_set_info(GaimConnection *gc, const char *info) |
1 | 169 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
170 GaimPluginProtocolInfo *prpl_info = NULL; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
171 GaimAccount *account; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
172 |
9285 | 173 if (gc != NULL && gc->prpl != NULL) |
174 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
175 |
9285 | 176 if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
177 prpl_info->set_info) { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
178 |
9285 | 179 account = gaim_connection_get_account(gc); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
180 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
181 if (gaim_signal_emit_return_1(gaim_accounts_get_handle(), |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
182 "account-setting-info", account, info)) |
3456 | 183 return; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
184 |
9285 | 185 prpl_info->set_info(gc, info); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
186 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
187 gaim_signal_emit(gaim_accounts_get_handle(), |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
188 "account-set-info", account, info); |
1749
5bfc58c20e82
[gaim-migrate @ 1759]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1734
diff
changeset
|
189 } |
237
6ced2f1c8b24
[gaim-migrate @ 247]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
190 } |
6ced2f1c8b24
[gaim-migrate @ 247]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
191 |
3136 | 192 /* |
193 * Set buddy's alias on server roster/list | |
194 */ | |
6695 | 195 void serv_alias_buddy(GaimBuddy *b) |
3136 | 196 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
197 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
198 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
199 if (b != NULL && b->account->gc->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
200 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(b->account->gc->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
201 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
202 if (b && prpl_info && prpl_info->alias_buddy) { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
203 prpl_info->alias_buddy(b->account->gc, b->name, b->alias); |
3136 | 204 } |
205 } | |
206 | |
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
207 void |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
208 serv_got_alias(GaimConnection *gc, const char *who, const char *alias) |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
209 { |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
210 GaimAccount *account = gaim_connection_get_account(gc); |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
211 GSList *buds, *buddies = gaim_find_buddies(account, who); |
8870 | 212 GaimBuddy *b; |
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
213 GaimConversation *conv; |
6058 | 214 |
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
215 for (buds = buddies; buds; buds = buds->next) |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
216 { |
8870 | 217 b = buds->data; |
218 gaim_blist_server_alias_buddy(b, alias); | |
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
219 |
11338 | 220 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, b->name, account); |
9135
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
221 |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
222 if (conv != NULL && b->server_alias != NULL && |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
223 strcmp(b->server_alias, alias)) |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
224 { |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
225 char *tmp = g_strdup_printf(_("%s is now known as %s.\n"), |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
226 who, alias); |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
227 |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
228 gaim_conversation_write(conv, NULL, tmp, GAIM_MESSAGE_SYSTEM, |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
229 time(NULL)); |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
230 |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
231 g_free(tmp); |
6038664a67fe
[gaim-migrate @ 9919]
Christian Hammond <chipx86@chipx86.com>
parents:
9109
diff
changeset
|
232 } |
8870 | 233 } |
8894 | 234 g_slist_free(buddies); |
4227 | 235 } |
236 | |
3136 | 237 /* |
238 * Move a buddy from one group to another on server. | |
239 * | |
240 * Note: For now we'll not deal with changing gc's at the same time, but | |
9285 | 241 * it should be possible. Probably needs to be done, someday. Although, |
242 * the UI for that would be difficult, because groups are Gaim-wide. | |
3136 | 243 */ |
6695 | 244 void serv_move_buddy(GaimBuddy *b, GaimGroup *og, GaimGroup *ng) |
3136 | 245 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
246 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
247 |
13417
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
248 g_return_if_fail(b != NULL); |
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
249 g_return_if_fail(og != NULL); |
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
250 g_return_if_fail(ng != NULL); |
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
251 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
252 if (b->account->gc != NULL && b->account->gc->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
253 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(b->account->gc->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
254 |
13417
dc05405864bd
[gaim-migrate @ 15792]
Richard Laager <rlaager@wiktel.com>
parents:
13293
diff
changeset
|
255 if (b->account->gc && og && ng) { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
256 if (prpl_info && prpl_info->group_buddy) { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
257 prpl_info->group_buddy(b->account->gc, b->name, og->name, ng->name); |
3136 | 258 } |
259 } | |
260 } | |
261 | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
262 void serv_add_permit(GaimConnection *g, const char *name) |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
263 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
264 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
265 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
266 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
267 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
268 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
269 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_permit) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
270 prpl_info->add_permit(g, name); |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
271 } |
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
272 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
273 void serv_add_deny(GaimConnection *g, const char *name) |
1 | 274 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
275 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
276 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
277 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
278 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
279 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
280 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_deny) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
281 prpl_info->add_deny(g, name); |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
282 } |
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
283 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
284 void serv_rem_permit(GaimConnection *g, const char *name) |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
285 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
286 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
287 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
288 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
289 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
290 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
291 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_permit) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
292 prpl_info->rem_permit(g, name); |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
293 } |
1 | 294 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
295 void serv_rem_deny(GaimConnection *g, const char *name) |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
296 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
297 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
298 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
299 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
300 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
301 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
302 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_deny) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
303 prpl_info->rem_deny(g, name); |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
304 } |
678
c72f58814e9f
[gaim-migrate @ 688]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
660
diff
changeset
|
305 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
306 void serv_set_permit_deny(GaimConnection *g) |
1030
38452403563b
[gaim-migrate @ 1040]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1026
diff
changeset
|
307 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
308 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
309 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
310 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
311 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
312 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
313 /* |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
314 * this is called when either you import a buddy list, and make lots |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
315 * of changes that way, or when the user toggles the permit/deny mode |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
316 * in the prefs. In either case you should probably be resetting and |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
317 * resending the permit/deny info when you get this. |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
318 */ |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
319 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->set_permit_deny) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
320 prpl_info->set_permit_deny(g); |
1 | 321 } |
322 | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
323 void serv_join_chat(GaimConnection *g, GHashTable *data) |
1 | 324 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
325 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
326 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
327 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
328 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
329 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
330 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->join_chat) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
331 prpl_info->join_chat(g, data); |
1 | 332 } |
333 | |
8562 | 334 |
335 void serv_reject_chat(GaimConnection *g, GHashTable *data) | |
336 { | |
337 GaimPluginProtocolInfo *prpl_info = NULL; | |
338 | |
339 if (g != NULL && g->prpl != NULL) | |
340 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); | |
341 | |
342 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->reject_chat) | |
343 prpl_info->reject_chat(g, data); | |
344 } | |
345 | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
346 void serv_chat_invite(GaimConnection *g, int id, const char *message, const char *name) |
1 | 347 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
348 GaimPluginProtocolInfo *prpl_info = NULL; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
349 GaimConversation *conv; |
2359
ad56a93661fc
[gaim-migrate @ 2372]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2345
diff
changeset
|
350 char *buffy = message && *message ? g_strdup(message) : NULL; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
351 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
352 conv = gaim_find_chat(g, id); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
353 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
354 if (conv == NULL) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
355 return; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
356 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
357 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
358 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
359 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
360 gaim_signal_emit(gaim_conversations_get_handle(), "chat-inviting-user", |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
361 conv, name, &buffy); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
362 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
363 if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->chat_invite) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
364 prpl_info->chat_invite(g, id, buffy, name); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
365 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
366 gaim_signal_emit(gaim_conversations_get_handle(), "chat-invited-user", |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
367 conv, name, buffy); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
368 |
2359
ad56a93661fc
[gaim-migrate @ 2372]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2345
diff
changeset
|
369 if (buffy) |
ad56a93661fc
[gaim-migrate @ 2372]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2345
diff
changeset
|
370 g_free(buffy); |
1 | 371 } |
372 | |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
373 /* Ya know, nothing uses this except gaim_conversation_destroy(), |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
374 * I think I'll just merge it into that later... |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
375 * Then again, something might want to use this, from outside prpl-land |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
376 * to leave a chat without destroying the conversation. |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
377 */ |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
378 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
379 void serv_chat_leave(GaimConnection *g, int id) |
1 | 380 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
381 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
382 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
383 if (!g_list_find(gaim_connections_get_all(), g)) |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
384 return; |
1015
c3579d03a0c1
[gaim-migrate @ 1025]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1013
diff
changeset
|
385 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
386 if (g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
387 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
388 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
389 if (prpl_info && prpl_info->chat_leave) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
390 prpl_info->chat_leave(g, id); |
1 | 391 } |
392 | |
6059 | 393 void serv_chat_whisper(GaimConnection *g, int id, const char *who, const char *message) |
1 | 394 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
395 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
396 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
397 if (g != NULL && g->prpl != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
398 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
399 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
400 if (prpl_info && prpl_info->chat_whisper) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
401 prpl_info->chat_whisper(g, id, who, message); |
1 | 402 } |
403 | |
12216 | 404 int serv_chat_send(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags) |
1 | 405 { |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
406 int val = -EINVAL; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
407 GaimPluginProtocolInfo *prpl_info = NULL; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
408 |
11907 | 409 if (gc->prpl != NULL) |
410 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
411 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
412 if (prpl_info && prpl_info->chat_send) |
12216 | 413 val = prpl_info->chat_send(gc, id, message, flags); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5170
diff
changeset
|
414 |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
415 return val; |
1 | 416 } |
417 | |
5842 | 418 void serv_set_buddyicon(GaimConnection *gc, const char *filename) |
419 { | |
420 GaimPluginProtocolInfo *prpl_info = NULL; | |
8674
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
421 |
5842 | 422 if (gc->prpl != NULL) |
423 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
424 | |
425 if (prpl_info && prpl_info->set_buddy_icon) | |
426 prpl_info->set_buddy_icon(gc, filename); | |
8674
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
427 |
8c7da2e36136
[gaim-migrate @ 9426]
Christian Hammond <chipx86@chipx86.com>
parents:
8619
diff
changeset
|
428 } |
5842 | 429 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
430 /* |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
431 * woo. i'm actually going to comment this function. isn't that fun. make |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
432 * sure to follow along, kids |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
433 */ |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
434 void serv_got_im(GaimConnection *gc, const char *who, const char *msg, |
12216 | 435 GaimMessageFlags flags, time_t mtime) |
1 | 436 { |
9944 | 437 GaimAccount *account; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
438 GaimConversation *cnv; |
5136 | 439 char *message, *name; |
6622 | 440 char *angel, *buffy; |
441 int plugin_return; | |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
442 |
11903 | 443 g_return_if_fail(msg != NULL); |
444 | |
9944 | 445 account = gaim_connection_get_account(gc); |
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
446 |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
447 if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->set_permit_deny == NULL) { |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
448 /* protocol does not support privacy, handle it ourselves */ |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
449 if (!gaim_privacy_check(account, who)) |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
450 return; |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
451 } |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
452 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
453 /* |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
454 * We should update the conversation window buttons and menu, |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
455 * if it exists. |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
456 */ |
11338 | 457 cnv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, who, gc->account); |
2106
efb39c151cf7
[gaim-migrate @ 2116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2104
diff
changeset
|
458 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
459 /* |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
460 * Plugin stuff. we pass a char ** but we don't want to pass what's |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
461 * been given us by the prpls. So we create temp holders and pass |
6982 | 462 * those instead. It's basically just to avoid segfaults. |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
463 */ |
6982 | 464 buffy = g_malloc(MAX(strlen(msg) + 1, BUF_LONG)); |
465 strcpy(buffy, msg); | |
466 angel = g_strdup(who); | |
1339 | 467 |
6982 | 468 plugin_return = GPOINTER_TO_INT( |
469 gaim_signal_emit_return_1(gaim_conversations_get_handle(), | |
8999 | 470 "receiving-im-msg", gc->account, |
12216 | 471 &angel, &buffy, cnv, &flags)); |
6982 | 472 |
473 if (!buffy || !angel || plugin_return) { | |
474 if (buffy) | |
475 g_free(buffy); | |
476 if (angel) | |
477 g_free(angel); | |
478 return; | |
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
479 } |
8619 | 480 |
8999 | 481 name = angel; |
6982 | 482 message = buffy; |
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
483 |
8999 | 484 gaim_signal_emit(gaim_conversations_get_handle(), "received-im-msg", gc->account, |
12216 | 485 name, message, cnv, flags); |
8999 | 486 |
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
487 /* search for conversation again in case it was created by received-im-msg handler */ |
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
488 if (cnv == NULL) |
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
489 cnv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12281
diff
changeset
|
490 |
8882 | 491 /* Make sure URLs are clickable */ |
492 buffy = gaim_markup_linkify(message); | |
493 g_free(message); | |
494 message = buffy; | |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
495 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
496 /* |
12216 | 497 * XXX: Should we be setting this here, or relying on prpls to set it? |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
498 */ |
12216 | 499 flags |= GAIM_MESSAGE_RECV; |
1 | 500 |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
501 if (cnv == NULL) |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
502 cnv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, name); |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
503 |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
504 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, message, flags, mtime); |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
505 g_free(message); |
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12114
diff
changeset
|
506 |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
507 /* |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
508 * Don't autorespond if: |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
509 * |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
510 * - it's not supported on this connection |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
511 * - we are available |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
512 * - or it's disabled |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
513 * - or we're not idle and the 'only auto respond if idle' pref |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
514 * is set |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
515 */ |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
516 if (gc->flags & GAIM_CONNECTION_AUTO_RESP) |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
517 { |
12981 | 518 GaimPresence *presence; |
519 GaimStatus *status; | |
520 GaimStatusType *status_type; | |
521 GaimStatusPrimitive primitive; | |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
522 const gchar *auto_reply_pref; |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
523 const char *away_msg = NULL; |
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
524 |
9594 | 525 auto_reply_pref = gaim_prefs_get_string("/core/away/auto_reply"); |
10052 | 526 |
12981 | 527 presence = gaim_account_get_presence(account); |
12980 | 528 status = gaim_presence_get_active_status(presence); |
12981 | 529 status_type = gaim_status_get_type(status); |
530 primitive = gaim_status_type_get_primitive(status_type); | |
531 if ((primitive == GAIM_STATUS_AVAILABLE) || | |
532 (primitive == GAIM_STATUS_INVISIBLE) || | |
533 (primitive == GAIM_STATUS_MOBILE) || | |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
534 !strcmp(auto_reply_pref, "never") || |
12981 | 535 (!gaim_presence_is_idle(presence) && !strcmp(auto_reply_pref, "awayidle"))) |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
536 { |
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
537 g_free(name); |
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
538 return; |
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
539 } |
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
540 |
12980 | 541 away_msg = gaim_value_get_string( |
542 gaim_status_get_attr_value(status, "message")); | |
1775
9ca22174da76
[gaim-migrate @ 1785]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1774
diff
changeset
|
543 |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
544 if ((away_msg != NULL) && (*away_msg != '\0')) { |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
545 struct last_auto_response *lar; |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
546 time_t now = time(NULL); |
10052 | 547 |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
548 /* |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
549 * This used to be based on the conversation window. But um, if |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
550 * you went away, and someone sent you a message and got your |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
551 * auto-response, and then you closed the window, and then they |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
552 * sent you another one, they'd get the auto-response back too |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
553 * soon. Besides that, we need to keep track of this even if we've |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
554 * got a queue. So the rest of this block is just the auto-response, |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
555 * if necessary. |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
556 */ |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
557 lar = get_last_auto_response(gc, name); |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
558 if ((now - lar->sent) >= SECS_BEFORE_RESENDING_AUTORESPONSE) |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
559 { |
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
560 /* |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
561 * We don't want to send an autoresponse in response to the other user's |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
562 * autoresponse. We do, however, not want to then send one in response to the |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
563 * _next_ message, so we still set lar->sent to now. |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
564 */ |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
565 lar->sent = now; |
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
566 |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
567 if (!(flags & GAIM_MESSAGE_AUTO_RESP)) |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
568 { |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
569 serv_send_im(gc, name, away_msg, GAIM_MESSAGE_AUTO_RESP); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
570 |
13933
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
571 gaim_conv_im_write(GAIM_CONV_IM(cnv), NULL, away_msg, |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
572 GAIM_MESSAGE_SEND | GAIM_MESSAGE_AUTO_RESP, |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
573 mtime); |
ad171112d52c
[gaim-migrate @ 16461]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13923
diff
changeset
|
574 } |
12949
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
575 } |
9a5b9680aaeb
[gaim-migrate @ 15302]
Richard Laager <rlaager@wiktel.com>
parents:
12894
diff
changeset
|
576 } |
1 | 577 } |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
578 |
2104
0b81421021fd
[gaim-migrate @ 2114]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
579 g_free(name); |
1 | 580 } |
581 | |
5630 | 582 void serv_got_typing(GaimConnection *gc, const char *name, int timeout, |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5842
diff
changeset
|
583 GaimTypingState state) { |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
584 GaimConversation *conv; |
11709
cae2fb7e8594
[gaim-migrate @ 14000]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11706
diff
changeset
|
585 GaimConvIm *im = NULL; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
586 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
587 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
588 if (conv != NULL) { |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
589 im = GAIM_CONV_IM(conv); |
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
5024
diff
changeset
|
590 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
591 gaim_conv_im_set_typing_state(im, state); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
592 gaim_conv_im_update_typing(im); |
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
593 } else { |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
594 if (state == GAIM_TYPING) |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
595 { |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
596 gaim_signal_emit(gaim_conversations_get_handle(), |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
597 "buddy-typing", gc->account, name); |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
598 } |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
599 else |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
600 { |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
601 gaim_signal_emit(gaim_conversations_get_handle(), |
13842 | 602 "buddy-typed", gc->account, name); |
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
603 } |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
604 } |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
605 |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
606 if (conv != NULL && timeout > 0) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
607 gaim_conv_im_start_typing_timeout(im, timeout); |
2993 | 608 } |
1 | 609 |
5630 | 610 void serv_got_typing_stopped(GaimConnection *gc, const char *name) { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
611 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
612 GaimConversation *conv; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
613 GaimConvIm *im; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
614 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
615 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, gc->account); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
616 if (conv != NULL) |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
617 { |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
618 im = GAIM_CONV_IM(conv); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
619 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
620 if (im->typing_state == GAIM_NOT_TYPING) |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
621 return; |
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
5024
diff
changeset
|
622 |
11706
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
623 gaim_conv_im_stop_typing_timeout(im); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
624 gaim_conv_im_set_typing_state(im, GAIM_NOT_TYPING); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
625 gaim_conv_im_update_typing(im); |
bcc49c25ef90
[gaim-migrate @ 13997]
Richard Laager <rlaager@wiktel.com>
parents:
11643
diff
changeset
|
626 } |
13842 | 627 else |
628 { | |
629 gaim_signal_emit(gaim_conversations_get_handle(), | |
630 "buddy-typing-stopped", gc->account, name); | |
631 } | |
2993 | 632 } |
1 | 633 |
4487 | 634 struct chat_invite_data { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
635 GaimConnection *gc; |
5234 | 636 GHashTable *components; |
4487 | 637 }; |
1723
76e601b77099
[gaim-migrate @ 1733]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1722
diff
changeset
|
638 |
4487 | 639 static void chat_invite_data_free(struct chat_invite_data *cid) |
1 | 640 { |
5234 | 641 if (cid->components) |
642 g_hash_table_destroy(cid->components); | |
4487 | 643 g_free(cid); |
644 } | |
1723
76e601b77099
[gaim-migrate @ 1733]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1722
diff
changeset
|
645 |
8562 | 646 |
647 static void chat_invite_reject(struct chat_invite_data *cid) | |
648 { | |
649 serv_reject_chat(cid->gc, cid->components); | |
650 chat_invite_data_free(cid); | |
651 } | |
652 | |
653 | |
4487 | 654 static void chat_invite_accept(struct chat_invite_data *cid) |
655 { | |
5234 | 656 serv_join_chat(cid->gc, cid->components); |
4487 | 657 chat_invite_data_free(cid); |
1 | 658 } |
659 | |
660 | |
661 | |
5630 | 662 void serv_got_chat_invite(GaimConnection *gc, const char *name, |
663 const char *who, const char *message, GHashTable *data) | |
1 | 664 { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
665 GaimAccount *account; |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
666 char buf2[BUF_LONG]; |
4487 | 667 struct chat_invite_data *cid = g_new0(struct chat_invite_data, 1); |
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
668 int plugin_return; |
1 | 669 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
670 account = gaim_connection_get_account(gc); |
12849
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
671 if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->set_permit_deny == NULL) { |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
672 /* protocol does not support privacy, handle it ourselves */ |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
673 if (!gaim_privacy_check(account, who)) |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
674 return; |
c0fbdea8828b
[gaim-migrate @ 15199]
Richard Laager <rlaager@wiktel.com>
parents:
12797
diff
changeset
|
675 } |
1 | 676 |
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
677 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1( |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
678 gaim_conversations_get_handle(), |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
679 "chat-invited", account, who, name, message, data)); |
1 | 680 |
4487 | 681 cid->gc = gc; |
5234 | 682 cid->components = data; |
1 | 683 |
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
684 if (plugin_return == 0) |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
685 { |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
686 if (message != NULL) |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
687 { |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
688 g_snprintf(buf2, sizeof(buf2), |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
689 _("%s has invited %s to the chat room %s:\n%s"), |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
690 who, gaim_account_get_username(account), name, message); |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
691 } |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
692 else |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
693 g_snprintf(buf2, sizeof(buf2), |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
694 _("%s has invited %s to the chat room %s\n"), |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
695 who, gaim_account_get_username(account), name); |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
696 |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
697 |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
698 gaim_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2, |
9976 | 699 GAIM_DEFAULT_ACTION_NONE, cid, |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5461
diff
changeset
|
700 G_CALLBACK(chat_invite_accept), |
8562 | 701 G_CALLBACK(chat_invite_reject)); |
11064
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
702 } |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
703 else if (plugin_return > 0) |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
704 chat_invite_accept(cid); |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
705 else |
e4459e8ccfb5
[gaim-migrate @ 13035]
Richard Laager <rlaager@wiktel.com>
parents:
11003
diff
changeset
|
706 chat_invite_reject(cid); |
1 | 707 } |
708 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
709 GaimConversation *serv_got_joined_chat(GaimConnection *gc, |
5630 | 710 int id, const char *name) |
1 | 711 { |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
712 GaimConversation *conv; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
713 GaimConvChat *chat; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
714 GaimAccount *account; |
1 | 715 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
716 account = gaim_connection_get_account(gc); |
1 | 717 |
11338 | 718 conv = gaim_conversation_new(GAIM_CONV_TYPE_CHAT, account, name); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
719 chat = GAIM_CONV_CHAT(conv); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
720 |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
721 if (!g_slist_find(gc->buddy_chats, conv)) |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
722 gc->buddy_chats = g_slist_append(gc->buddy_chats, conv); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
723 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
724 gaim_conv_chat_set_id(chat, id); |
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4440
diff
changeset
|
725 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
726 gaim_signal_emit(gaim_conversations_get_handle(), "chat-joined", conv); |
3710 | 727 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
728 return conv; |
1 | 729 } |
730 | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
731 void serv_got_chat_left(GaimConnection *g, int id) |
1 | 732 { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
733 GSList *bcs; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
734 GaimConversation *conv = NULL; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
735 GaimConvChat *chat = NULL; |
1 | 736 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
737 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
738 conv = (GaimConversation *)bcs->data; |
1 | 739 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
740 chat = GAIM_CONV_CHAT(conv); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
741 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
742 if (gaim_conv_chat_get_id(chat) == id) |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
743 break; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
744 |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
745 conv = NULL; |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
746 } |
1 | 747 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
748 if (!conv) |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
749 return; |
1 | 750 |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
751 gaim_debug(GAIM_DEBUG_INFO, "server", "Leaving room: %s\n", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
752 gaim_conversation_get_name(conv)); |
1 | 753 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
754 g->buddy_chats = g_slist_remove(g->buddy_chats, conv); |
1 | 755 |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8137
diff
changeset
|
756 gaim_conv_chat_left(GAIM_CONV_CHAT(conv)); |
12797
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
757 |
eda1572c788b
[gaim-migrate @ 15144]
Richard Laager <rlaager@wiktel.com>
parents:
12677
diff
changeset
|
758 gaim_signal_emit(gaim_conversations_get_handle(), "chat-left", conv); |
1 | 759 } |
760 | |
6059 | 761 void serv_got_chat_in(GaimConnection *g, int id, const char *who, |
12216 | 762 GaimMessageFlags flags, const char *message, time_t mtime) |
1 | 763 { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
764 GSList *bcs; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
765 GaimConversation *conv = NULL; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
766 GaimConvChat *chat = NULL; |
2296
878503b60006
[gaim-migrate @ 2306]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
767 char *buf; |
3163 | 768 char *buffy, *angel; |
769 int plugin_return; | |
1 | 770 |
12894
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
771 g_return_if_fail(who != NULL); |
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
772 g_return_if_fail(message != NULL); |
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
773 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
774 for (bcs = g->buddy_chats; bcs != NULL; bcs = bcs->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5630
diff
changeset
|
775 conv = (GaimConversation *)bcs->data; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
776 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
777 chat = GAIM_CONV_CHAT(conv); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
778 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
779 if (gaim_conv_chat_get_id(chat) == id) |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
780 break; |
1 | 781 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
782 conv = NULL; |
1252
46c09828e929
[gaim-migrate @ 1262]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1250
diff
changeset
|
783 } |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
784 |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
785 if (!conv) |
1100
f168625b63fe
[gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
786 return; |
391
be408b41c172
[gaim-migrate @ 401]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
368
diff
changeset
|
787 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
788 /* |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
789 * Plugin stuff. We pass a char ** but we don't want to pass what's |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
790 * been given us by the prpls. so we create temp holders and pass those |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
791 * instead. It's basically just to avoid segfaults. Of course, if the |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
792 * data is binary, plugins don't see it. Bitch all you want; i really |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
793 * don't want you to be dealing with it. |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
794 */ |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
795 |
3163 | 796 buffy = g_malloc(MAX(strlen(message) + 1, BUF_LONG)); |
797 strcpy(buffy, message); | |
798 angel = g_strdup(who); | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
799 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
800 plugin_return = GPOINTER_TO_INT( |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6479
diff
changeset
|
801 gaim_signal_emit_return_1(gaim_conversations_get_handle(), |
8999 | 802 "receiving-chat-msg", g->account, |
12216 | 803 &angel, &buffy, conv, &flags)); |
3163 | 804 |
805 if (!buffy || !angel || plugin_return) { | |
12894
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
806 g_free(buffy); |
7dc00a9dfba5
[gaim-migrate @ 15247]
Christopher O'Brien <siege@pidgin.im>
parents:
12849
diff
changeset
|
807 g_free(angel); |
2372
2927c2c26fe6
[gaim-migrate @ 2385]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2359
diff
changeset
|
808 return; |
3163 | 809 } |
810 who = angel; | |
811 message = buffy; | |
1 | 812 |
8999 | 813 gaim_signal_emit(gaim_conversations_get_handle(), "received-chat-msg", g->account, |
12216 | 814 who, message, conv, flags); |
8999 | 815 |
8882 | 816 /* Make sure URLs are clickable */ |
817 buf = gaim_markup_linkify(message); | |
1643
d7e380618fd5
[gaim-migrate @ 1653]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1587
diff
changeset
|
818 |
12216 | 819 gaim_conv_chat_write(chat, who, buf, flags, mtime); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
820 |
6350 | 821 g_free(angel); |
2296
878503b60006
[gaim-migrate @ 2306]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
822 g_free(buf); |
6062 | 823 g_free(buffy); |
1 | 824 } |
9466 | 825 |
826 void serv_send_file(GaimConnection *gc, const char *who, const char *file) | |
827 { | |
828 GaimPluginProtocolInfo *prpl_info = NULL; | |
10751 | 829 |
9466 | 830 if (gc != NULL && gc->prpl != NULL) |
831 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
832 | |
9647 | 833 if (prpl_info && prpl_info->send_file) { |
834 if (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who)) { | |
835 prpl_info->send_file(gc, who, file); | |
836 } | |
837 } | |
9466 | 838 } |