libpurple/protocols/jabber/presence.c

Tue, 18 Nov 2008 20:24:59 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Tue, 18 Nov 2008 20:24:59 +0000
branch
cpw.malu.xmpp.idle
changeset 24682
129c4b3c6ad6
parent 24680
d1e37fa461f7
child 24887
c7331ba1f2bb
permissions
-rw-r--r--

Patch from darkrain42
Use idleness when finding buddy resources (most active)
Use resource found using jabber_buddy_find_resource to report idle time
(get rid of an extra function to rank on idle time)

7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
2 * purple - Jabber Protocol Plugin
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
5 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 * 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: 19335
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
20 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22
15952
c087855dc551 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
23 #include "account.h"
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10646
diff changeset
24 #include "cipher.h"
15952
c087855dc551 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
25 #include "conversation.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27 #include "notify.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "request.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
29 #include "server.h"
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
30 #include "status.h"
7095
17d2b54254f8 [gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents: 7015
diff changeset
31 #include "util.h"
15952
c087855dc551 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
32 #include "xmlnode.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
33
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
34 #include "buddy.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
35 #include "chat.h"
21195
fd63ef5027d7 Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents: 21193
diff changeset
36 #include "google.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
37 #include "presence.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
38 #include "iq.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
39 #include "jutil.h"
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
40 #include "adhoccommands.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
41
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
42 #include "usertune.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
43
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
44
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
45 static void chats_send_presence_foreach(gpointer key, gpointer val,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
46 gpointer user_data)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
47 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
48 JabberChat *chat = val;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
49 xmlnode *presence = user_data;
8577
64f25a17f8e4 [gaim-migrate @ 9326]
Nathan Walp <nwalp@pidgin.im>
parents: 8462
diff changeset
50 char *chat_full_jid;
64f25a17f8e4 [gaim-migrate @ 9326]
Nathan Walp <nwalp@pidgin.im>
parents: 8462
diff changeset
51
23403
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
52 if(!chat->conv || chat->left)
8577
64f25a17f8e4 [gaim-migrate @ 9326]
Nathan Walp <nwalp@pidgin.im>
parents: 8462
diff changeset
53 return;
64f25a17f8e4 [gaim-migrate @ 9326]
Nathan Walp <nwalp@pidgin.im>
parents: 8462
diff changeset
54
64f25a17f8e4 [gaim-migrate @ 9326]
Nathan Walp <nwalp@pidgin.im>
parents: 8462
diff changeset
55 chat_full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server,
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
56 chat->handle);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
57
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
58 xmlnode_set_attrib(presence, "to", chat_full_jid);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
59 jabber_send(chat->js, presence);
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
60 g_free(chat_full_jid);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
61 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
62
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
63 void jabber_presence_fake_to_self(JabberStream *js, const PurpleStatus *gstatus) {
10286
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
64 char *my_base_jid;
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
65
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
66 if(!js->user)
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
67 return;
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
68
04732ee468cc [gaim-migrate @ 11460]
Nathan Walp <nwalp@pidgin.im>
parents: 10216
diff changeset
69 my_base_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
70 if(purple_find_buddy(js->gc->account, my_base_jid)) {
8185
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
71 JabberBuddy *jb;
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
72 JabberBuddyResource *jbr;
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
73 if((jb = jabber_buddy_find(js, my_base_jid, TRUE))) {
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
74 JabberBuddyState state;
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
75 char *msg;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
76 int priority;
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
77
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
78 purple_status_to_jabber(gstatus, &state, &msg, &priority);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
79
10490
72932e32f29d [gaim-migrate @ 11780]
Nathan Walp <nwalp@pidgin.im>
parents: 10486
diff changeset
80 if (state == JABBER_BUDDY_STATE_UNAVAILABLE || state == JABBER_BUDDY_STATE_UNKNOWN) {
9744
c2b450de1fc0 [gaim-migrate @ 10609]
Daniel Atallah <datallah@pidgin.im>
parents: 9743
diff changeset
81 jabber_buddy_remove_resource(jb, js->user->resource);
c2b450de1fc0 [gaim-migrate @ 10609]
Daniel Atallah <datallah@pidgin.im>
parents: 9743
diff changeset
82 } else {
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
83 jabber_buddy_track_resource(jb, js->user->resource, priority, state, msg);
9744
c2b450de1fc0 [gaim-migrate @ 10609]
Daniel Atallah <datallah@pidgin.im>
parents: 9743
diff changeset
84 }
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
85 if((jbr = jabber_buddy_find_resource(jb, NULL))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
86 purple_prpl_got_user_status(js->gc->account, my_base_jid, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
87 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
88 purple_prpl_got_user_status(js->gc->account, my_base_jid, "offline", msg ? "message" : NULL, msg, NULL);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
89 }
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
90
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
91 g_free(msg);
8185
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
92 }
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
93 }
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
94 g_free(my_base_jid);
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
95 }
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
96
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
97
24679
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
98 void jabber_presence_send(PurpleAccount *account, PurpleStatus *status)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
99 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
100 PurpleConnection *gc = NULL;
10382
32e07712e224 [gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents: 10286
diff changeset
101 JabberStream *js = NULL;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
102 xmlnode *presence, *x, *photo;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
103 char *stripped = NULL;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
104 JabberBuddyState state;
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
105 int priority;
21193
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
106 const char *artist = NULL, *title = NULL, *source = NULL, *uri = NULL, *track = NULL;
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
107 int length = -1;
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
108 gboolean allowBuzz;
21758
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
109 PurplePresence *p;
21193
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
110 PurpleStatus *tune;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
111
21758
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
112 if (purple_account_is_disconnected(account))
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
113 return;
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
114
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
115 p = purple_account_get_presence(account);
21197
f109bdb267e0 presence is an xmlnode here.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21195
diff changeset
116 if (NULL == status) {
f109bdb267e0 presence is an xmlnode here.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21195
diff changeset
117 status = purple_presence_get_active_status(p);
18195
9cd0565f856e kill some code duplication when sending current presence
Nathan Walp <nwalp@pidgin.im>
parents: 17703
diff changeset
118 }
9cd0565f856e kill some code duplication when sending current presence
Nathan Walp <nwalp@pidgin.im>
parents: 17703
diff changeset
119
21758
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
120 if (purple_status_is_exclusive(status)) {
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
121 /* An exclusive status can't be deactivated. You should just
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
122 * activate some other exclusive status. */
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
123 if (!purple_status_is_active(status))
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
124 return;
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
125 } else {
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
126 /* Work with the exclusive status. */
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
127 status = purple_presence_get_active_status(p);
e70c407c994b We need to work with the exclusive status.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21687
diff changeset
128 }
17422
1c47da5c1589 don't do unneeded work
Nathan Walp <nwalp@pidgin.im>
parents: 17049
diff changeset
129
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
130 gc = purple_account_get_connection(account);
10755
a336a5d3102d [gaim-migrate @ 12358]
Mark Doliner <markdoliner@pidgin.im>
parents: 10738
diff changeset
131 js = gc->proto_data;
a336a5d3102d [gaim-migrate @ 12358]
Mark Doliner <markdoliner@pidgin.im>
parents: 10738
diff changeset
132
18226
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
133 /* we don't want to send presence before we've gotten our roster */
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
134 if(!js->roster_parsed) {
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
135 purple_debug_info("jabber", "attempt to send presence before roster retrieved\n");
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
136 return;
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
137 }
adf83935e838 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18195
diff changeset
138
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
139 purple_status_to_jabber(status, &state, &stripped, &priority);
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
140
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
141 /* check for buzz support */
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
142 allowBuzz = purple_status_get_attr_boolean(status,"buzz");
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
143 /* changing the buzz state has to trigger a re-broadcasting of the presence for caps */
23574
5c7073191c5a make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@pidgin.im>
parents: 23403
diff changeset
144
5c7073191c5a make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@pidgin.im>
parents: 23403
diff changeset
145 if (js->googletalk && stripped == NULL && purple_presence_is_status_primitive_active(p, PURPLE_STATUS_TUNE)) {
5c7073191c5a make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@pidgin.im>
parents: 23403
diff changeset
146 tune = purple_presence_get_status(p, "tune");
5c7073191c5a make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@pidgin.im>
parents: 23403
diff changeset
147 stripped = jabber_google_presence_outgoing(tune);
5c7073191c5a make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@pidgin.im>
parents: 23403
diff changeset
148 }
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
149
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
150 #define CHANGED(a,b) ((!a && b) || (a && a[0] == '\0' && b && b[0] != '\0') || \
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
151 (a && !b) || (a && a[0] != '\0' && b && b[0] == '\0') || (a && b && strcmp(a,b)))
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
152 /* check if there are any differences to the <presence> and send them in that case */
24679
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
153 if (allowBuzz != js->allowBuzz || js->old_state != state || CHANGED(js->old_msg, stripped) ||
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
154 js->old_priority != priority || CHANGED(js->old_avatarhash, js->avatar_hash) ||
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
155 js->old_idle != js->idle) {
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
156 js->allowBuzz = allowBuzz;
21195
fd63ef5027d7 Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents: 21193
diff changeset
157
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
158 presence = jabber_presence_create_js(js, state, stripped, priority);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
159
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
160 if(js->avatar_hash) {
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
161 x = xmlnode_new_child(presence, "x");
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
162 xmlnode_set_namespace(x, "vcard-temp:x:update");
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
163 photo = xmlnode_new_child(x, "photo");
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
164 xmlnode_insert_data(photo, js->avatar_hash, -1);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
165 }
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
166
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
167 jabber_send(js, presence);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
168
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
169 g_hash_table_foreach(js->chats, chats_send_presence_foreach, presence);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
170 xmlnode_free(presence);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
171
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
172 /* update old values */
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
173
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
174 if(js->old_msg)
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
175 g_free(js->old_msg);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
176 if(js->old_avatarhash)
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
177 g_free(js->old_avatarhash);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
178 js->old_msg = g_strdup(stripped);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
179 js->old_avatarhash = g_strdup(js->avatar_hash);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
180 js->old_state = state;
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
181 js->old_priority = priority;
24679
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
182 js->old_idle = js->idle;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
183 }
23575
7a22a015d694 let's not leak if nothing is changed
Ka-Hing Cheung <khc@pidgin.im>
parents: 23574
diff changeset
184 g_free(stripped);
7a22a015d694 let's not leak if nothing is changed
Ka-Hing Cheung <khc@pidgin.im>
parents: 23574
diff changeset
185
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
186 /* next, check if there are any changes to the tune values */
21197
f109bdb267e0 presence is an xmlnode here.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21195
diff changeset
187 tune = purple_presence_get_status(p, "tune");
21193
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
188 if (tune && purple_status_is_active(tune)) {
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
189 artist = purple_status_get_attr_string(tune, PURPLE_TUNE_ARTIST);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
190 title = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
191 source = purple_status_get_attr_string(tune, PURPLE_TUNE_ALBUM);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
192 uri = purple_status_get_attr_string(tune, PURPLE_TUNE_URL);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
193 track = purple_status_get_attr_string(tune, PURPLE_TUNE_TRACK);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
194 length = (!purple_status_get_attr_value(tune, PURPLE_TUNE_TIME)) ? -1 :
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
195 purple_status_get_attr_int(tune, PURPLE_TUNE_TIME);
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20169
diff changeset
196 }
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
197
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
198 if(CHANGED(artist, js->old_artist) || CHANGED(title, js->old_title) || CHANGED(source, js->old_source) ||
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
199 CHANGED(uri, js->old_uri) || CHANGED(track, js->old_track) || (length != js->old_length)) {
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
200 PurpleJabberTuneInfo tuneinfo = {
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
201 (char*)artist,
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
202 (char*)title,
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
203 (char*)source,
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
204 (char*)track,
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
205 length,
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
206 (char*)uri
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
207 };
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
208 jabber_tune_set(js->gc, &tuneinfo);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
209
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
210 /* update old values */
20169
497e1cd1e059 Merged xmpp leak fixes
Evan Schoenberg <evands@pidgin.im>
parents: 19899
diff changeset
211 g_free(js->old_artist);
497e1cd1e059 Merged xmpp leak fixes
Evan Schoenberg <evands@pidgin.im>
parents: 19899
diff changeset
212 g_free(js->old_title);
497e1cd1e059 Merged xmpp leak fixes
Evan Schoenberg <evands@pidgin.im>
parents: 19899
diff changeset
213 g_free(js->old_source);
497e1cd1e059 Merged xmpp leak fixes
Evan Schoenberg <evands@pidgin.im>
parents: 19899
diff changeset
214 g_free(js->old_uri);
497e1cd1e059 Merged xmpp leak fixes
Evan Schoenberg <evands@pidgin.im>
parents: 19899
diff changeset
215 g_free(js->old_track);
17800
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
216 js->old_artist = g_strdup(artist);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
217 js->old_title = g_strdup(title);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
218 js->old_source = g_strdup(source);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
219 js->old_uri = g_strdup(uri);
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
220 js->old_length = length;
39a0f9ed0e26 Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents: 17783
diff changeset
221 js->old_track = g_strdup(track);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
222 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
223
19899
483c4f495a6c Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents: 19897
diff changeset
224 #undef CHANGED
8185
3a1d79a4e55a [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8182
diff changeset
225
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
226 jabber_presence_fake_to_self(js, status);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
227 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
228
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
229 xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
230 {
17770
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17422
diff changeset
231 return jabber_presence_create_js(NULL, state, msg, priority);
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17422
diff changeset
232 }
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17422
diff changeset
233
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17422
diff changeset
234 xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, const char *msg, int priority)
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17422
diff changeset
235 {
13385
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13214
diff changeset
236 xmlnode *show, *status, *presence, *pri, *c;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
237 const char *show_string = NULL;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
238
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
239 presence = xmlnode_new("presence");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
240
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
241 if(state == JABBER_BUDDY_STATE_UNAVAILABLE)
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
242 xmlnode_set_attrib(presence, "type", "unavailable");
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
243 else if(state != JABBER_BUDDY_STATE_ONLINE &&
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
244 state != JABBER_BUDDY_STATE_UNKNOWN &&
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
245 state != JABBER_BUDDY_STATE_ERROR)
12683
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12603
diff changeset
246 show_string = jabber_buddy_state_get_show(state);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
247
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
248 if(show_string) {
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
249 show = xmlnode_new_child(presence, "show");
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
250 xmlnode_insert_data(show, show_string, -1);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
251 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
252
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
253 if(msg) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
254 status = xmlnode_new_child(presence, "status");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
255 xmlnode_insert_data(status, msg, -1);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
256 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
257
11568
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
258 if(priority) {
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
259 char *pstr = g_strdup_printf("%d", priority);
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
260 pri = xmlnode_new_child(presence, "priority");
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
261 xmlnode_insert_data(pri, pstr, -1);
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
262 g_free(pstr);
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
263 }
ea479b2a8808 [gaim-migrate @ 13835]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
264
24676
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
265 /* if we are idle and not offline, include idle */
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
266 if (js->idle && state != JABBER_BUDDY_STATE_UNAVAILABLE) {
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
267 xmlnode *query = xmlnode_new_child(presence, "query");
24677
ea66b41ccbb8 Oops, unleak...
Marcus Lundblad <malu@pidgin.im>
parents: 24676
diff changeset
268 gchar seconds[10];
24679
1b6b57d5b4e1 Change jabber_presence_send to not take an extra argument to force idle updating
Marcus Lundblad <malu@pidgin.im>
parents: 24678
diff changeset
269 g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle));
24676
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
270
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
271 xmlnode_set_namespace(query, "jabber:iq:last");
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
272 xmlnode_set_attrib(query, "seconds", seconds);
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
273 }
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
274
13385
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13214
diff changeset
275 /* JEP-0115 */
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13214
diff changeset
276 c = xmlnode_new_child(presence, "c");
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 13497
diff changeset
277 xmlnode_set_namespace(c, "http://jabber.org/protocol/caps");
13385
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13214
diff changeset
278 xmlnode_set_attrib(c, "node", CAPS0115_NODE);
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13214
diff changeset
279 xmlnode_set_attrib(c, "ver", VERSION);
19894
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
280
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
281 if(js != NULL) {
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
282 /* add the extensions */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
283 char extlist[1024];
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
284 unsigned remaining = 1023; /* one less for the \0 */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
285 GList *feature;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
286
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
287 extlist[0] = '\0';
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
288 for(feature = jabber_features; feature && remaining > 0; feature = feature->next) {
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
289 JabberFeature *feat = (JabberFeature*)feature->data;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
290 unsigned featlen;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
291
17783
2687df1ca202 PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents: 17773
diff changeset
292 if(feat->is_enabled != NULL && feat->is_enabled(js, feat->shortname, feat->namespace) == FALSE)
2687df1ca202 PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents: 17773
diff changeset
293 continue; /* skip this feature */
2687df1ca202 PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents: 17773
diff changeset
294
2687df1ca202 PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents: 17773
diff changeset
295 featlen = strlen(feat->shortname);
19894
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
296
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
297 /* cut off when we don't have any more space left in our buffer (too bad) */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
298 if(featlen > remaining)
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
299 break;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
300
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
301 strncat(extlist,feat->shortname,remaining);
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
302 remaining -= featlen;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
303 if(feature->next) { /* no space at the end */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
304 strncat(extlist," ",remaining);
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
305 --remaining;
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
306 }
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
307 }
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
308 /* did we add anything? */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
309 if(remaining < 1023)
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
310 xmlnode_set_attrib(c, "ext", extlist);
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
311 }
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 19389
diff changeset
312
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
313 return presence;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
314 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
315
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
316 struct _jabber_add_permit {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
317 PurpleConnection *gc;
12285
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
318 JabberStream *js;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
319 char *who;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
320 };
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
321
19335
4613b53d5741 Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <datallah@pidgin.im>
parents: 18991
diff changeset
322 static void authorize_add_cb(gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
323 {
19335
4613b53d5741 Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <datallah@pidgin.im>
parents: 18991
diff changeset
324 struct _jabber_add_permit *jap = data;
21687
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
325 if(PURPLE_CONNECTION_IS_VALID(jap->gc))
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
326 jabber_presence_subscription_set(jap->gc->proto_data,
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
327 jap->who, "subscribed");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
328 g_free(jap->who);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
329 g_free(jap);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
330 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
331
19335
4613b53d5741 Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <datallah@pidgin.im>
parents: 18991
diff changeset
332 static void deny_add_cb(gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
333 {
19335
4613b53d5741 Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <datallah@pidgin.im>
parents: 18991
diff changeset
334 struct _jabber_add_permit *jap = data;
21687
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
335 if(PURPLE_CONNECTION_IS_VALID(jap->gc))
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
336 jabber_presence_subscription_set(jap->gc->proto_data,
a191b234bf75 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <datallah@pidgin.im>
parents: 21630
diff changeset
337 jap->who, "unsubscribed");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
338 g_free(jap->who);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
339 g_free(jap);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
340 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
341
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
342 static void jabber_vcard_parse_avatar(JabberStream *js, xmlnode *packet, gpointer blah)
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
343 {
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
344 JabberBuddy *jb = NULL;
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
345 xmlnode *vcard, *photo, *binval;
11127
5e539d9d26a4 [gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents: 11013
diff changeset
346 char *text;
11137
cf40226ddff7 [gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents: 11127
diff changeset
347 guchar *data;
11127
5e539d9d26a4 [gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents: 11013
diff changeset
348 gsize size;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
349 const char *from = xmlnode_get_attrib(packet, "from");
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
350
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
351 if(!from)
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
352 return;
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
353
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
354 jb = jabber_buddy_find(js, from, TRUE);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
355
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
356 js->pending_avatar_requests = g_slist_remove(js->pending_avatar_requests, jb);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
357
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
358 if((vcard = xmlnode_get_child(packet, "vCard")) ||
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
359 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
360 if((photo = xmlnode_get_child(vcard, "PHOTO")) &&
11361
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11251
diff changeset
361 (( (binval = xmlnode_get_child(photo, "BINVAL")) &&
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11251
diff changeset
362 (text = xmlnode_get_data(binval))) ||
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11251
diff changeset
363 (text = xmlnode_get_data(photo)))) {
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
364 unsigned char hashval[20];
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
365 char hash[41], *p;
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
366 int i;
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
367
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
368 data = purple_base64_decode(text, &size);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
369
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
370 purple_cipher_digest_region("sha1", data, size,
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
371 sizeof(hashval), hashval, NULL);
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
372 p = hash;
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
373 for(i=0; i<20; i++, p+=2)
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
374 snprintf(p, 3, "%02x", hashval[i]);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
375
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
376 purple_buddy_icons_set_for_user(js->gc->account, from, data, size, hash);
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
377 g_free(text);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
378 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
379 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
380 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
381
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
382 typedef struct _JabberPresenceCapabilities {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
383 JabberStream *js;
22929
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
384 JabberBuddy *jb;
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
385 char *from;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
386 } JabberPresenceCapabilities;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
387
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
388 static void jabber_presence_set_capabilities(JabberCapsClientInfo *info, gpointer user_data) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
389 JabberPresenceCapabilities *userdata = user_data;
22929
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
390 JabberID *jid;
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
391 JabberBuddyResource *jbr;
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
392 GList *iter;
21801
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
393
22929
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
394 jid = jabber_id_new(userdata->from);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
395 jbr = jabber_buddy_find_resource(userdata->jb, jid->resource);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
396 jabber_id_free(jid);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
397
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
398 if(!jbr) {
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
399 g_free(userdata->from);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
400 g_free(userdata);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
401 return;
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
402 }
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
403
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
404 if(jbr->caps)
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
405 jabber_caps_free_clientinfo(jbr->caps);
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
406 jbr->caps = info;
21801
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
407
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
408 if (info) {
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
409 for(iter = info->features; iter; iter = g_list_next(iter)) {
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
410 if(!strcmp((const char*)iter->data, "http://jabber.org/protocol/commands")) {
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
411 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
412 xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items");
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
413 xmlnode_set_attrib(iq->node, "to", userdata->from);
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
414 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
415
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
416 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
417 jabber_iq_send(iq);
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
418 break;
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
419 }
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
420 }
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
421 }
21801
6d92632a6424 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <datallah@pidgin.im>
parents: 21758
diff changeset
422
20210
d3336754b1a9 applied changes from d50ecf4dc52f25cbd219d6c19846436dec5a8853
Luke Schierer <lschiere@pidgin.im>
parents: 20169
diff changeset
423 g_free(userdata->from);
d3336754b1a9 applied changes from d50ecf4dc52f25cbd219d6c19846436dec5a8853
Luke Schierer <lschiere@pidgin.im>
parents: 20169
diff changeset
424 g_free(userdata);
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
425 }
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
426
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
427 void jabber_presence_parse(JabberStream *js, xmlnode *packet)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
428 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
429 const char *from = xmlnode_get_attrib(packet, "from");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
430 const char *type = xmlnode_get_attrib(packet, "type");
7944
619ec16df2c8 [gaim-migrate @ 8615]
Nathan Walp <nwalp@pidgin.im>
parents: 7923
diff changeset
431 const char *real_jid = NULL;
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
432 const char *affiliation = NULL;
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
433 const char *role = NULL;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
434 char *status = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
435 int priority = 0;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
436 JabberID *jid;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
437 JabberChat *chat;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
438 JabberBuddy *jb;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
439 JabberBuddyResource *jbr = NULL, *found_jbr = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
440 PurpleConvChatBuddyFlags flags = PURPLE_CBFLAGS_NONE;
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9745
diff changeset
441 gboolean delayed = FALSE;
24680
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
442 const gchar *stamp = NULL; /* from <delayed/> element */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
443 PurpleBuddy *b = NULL;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
444 char *buddy_name;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
445 JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
446 xmlnode *y;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
447 gboolean muc = FALSE;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
448 char *avatar_hash = NULL;
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
449 xmlnode *caps = NULL;
24676
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
450 int idle = 0;
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
451
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
452 if(!(jb = jabber_buddy_find(js, from, TRUE)))
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
453 return;
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
454
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
455 if(!(jid = jabber_id_new(from)))
7280
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7273
diff changeset
456 return;
f00e23f50698 [gaim-migrate @ 7859]
Nathan Walp <nwalp@pidgin.im>
parents: 7273
diff changeset
457
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
458 if(jb->error_msg) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
459 g_free(jb->error_msg);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
460 jb->error_msg = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
461 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
462
7813
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
463 if(type && !strcmp(type, "error")) {
21150
bedd1215fb5e Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents: 20210
diff changeset
464 char *msg = jabber_parse_error(js, packet, NULL);
7644
9c1af0d50941 [gaim-migrate @ 8287]
Nathan Walp <nwalp@pidgin.im>
parents: 7630
diff changeset
465
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
466 state = JABBER_BUDDY_STATE_ERROR;
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
467 jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence"));
7813
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
468 } else if(type && !strcmp(type, "subscribe")) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
469 struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1);
15197
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
470 gboolean onlist = FALSE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
471 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from);
15197
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
472 JabberBuddy *jb = NULL;
10949
b2949f5fc512 [gaim-migrate @ 12749]
Evan Schoenberg <evands@pidgin.im>
parents: 10941
diff changeset
473
15197
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
474 if (buddy) {
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
475 jb = jabber_buddy_find(js, from, TRUE);
16018
0cbbb5b642ce fix prompting to add a buddy after authorization if they're already on our list
Nathan Walp <nwalp@pidgin.im>
parents: 15952
diff changeset
476 if ((jb->subscription & JABBER_SUB_TO))
15197
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
477 onlist = TRUE;
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15119
diff changeset
478 }
16018
0cbbb5b642ce fix prompting to add a buddy after authorization if they're already on our list
Nathan Walp <nwalp@pidgin.im>
parents: 15952
diff changeset
479
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
480 jap->gc = js->gc;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
481 jap->who = g_strdup(from);
12285
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
482 jap->js = js;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
483
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
484 purple_account_request_authorization(purple_connection_get_account(js->gc), from, NULL, NULL, NULL, onlist,
19335
4613b53d5741 Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <datallah@pidgin.im>
parents: 18991
diff changeset
485 authorize_add_cb, deny_add_cb, jap);
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
486 jabber_id_free(jid);
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7124
diff changeset
487 return;
7813
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
488 } else if(type && !strcmp(type, "subscribed")) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
489 /* we've been allowed to see their presence, but we don't care */
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
490 jabber_id_free(jid);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
491 return;
12285
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
492 } else if(type && !strcmp(type, "unsubscribe")) {
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
493 /* XXX I'm not sure this is the right way to handle this, it
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
494 * might be better to add "unsubscribe" to the presence status
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
495 * if lower down, but I'm not sure. */
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
496 /* they are unsubscribing from our presence, we don't care */
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
497 /* Well, maybe just a little, we might want/need to start
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
498 * acknowledging this (and the others) at some point. */
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
499 jabber_id_free(jid);
5a0f4619b0c5 [gaim-migrate @ 14589]
Etan Reisner <deryni@pidgin.im>
parents: 12265
diff changeset
500 return;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
501 } else {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
502 if((y = xmlnode_get_child(packet, "show"))) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
503 char *show = xmlnode_get_data(y);
12683
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12603
diff changeset
504 state = jabber_buddy_show_get_state(show);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
505 g_free(show);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
506 } else {
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
507 state = JABBER_BUDDY_STATE_ONLINE;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
508 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
509 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
510
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7280
diff changeset
511
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
512 for(y = packet->child; y; y = y->next) {
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
513 const char *xmlns;
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8043
diff changeset
514 if(y->type != XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
515 continue;
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
516 xmlns = xmlnode_get_namespace(y);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
517
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
518 if(!strcmp(y->name, "status")) {
7615
6bf94a91db1c [gaim-migrate @ 8239]
Nathan Walp <nwalp@pidgin.im>
parents: 7425
diff changeset
519 g_free(status);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
520 status = xmlnode_get_data(y);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
521 } else if(!strcmp(y->name, "priority")) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
522 char *p = xmlnode_get_data(y);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
523 if(p) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
524 priority = atoi(p);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
525 g_free(p);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
526 }
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
527 } else if(!strcmp(y->name, "delay") && !strcmp(xmlns, "urn:xmpp:delay")) {
17812
be440f0a0acf Forgot to implement XEP-0203 for presence packets, too.
Andreas Monitzer <am@adiumx.com>
parents: 17801
diff changeset
528 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
be440f0a0acf Forgot to implement XEP-0203 for presence packets, too.
Andreas Monitzer <am@adiumx.com>
parents: 17801
diff changeset
529 delayed = TRUE;
24680
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
530 stamp = xmlnode_get_attrib(y, "stamp");
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
531 } else if(!strcmp(y->name, "c") && !strcmp(xmlns, "http://jabber.org/protocol/caps")) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
532 caps = y; /* store for later, when creating buddy resource */
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
533 } else if(!strcmp(y->name, "x")) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 13497
diff changeset
534 const char *xmlns = xmlnode_get_namespace(y);
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9745
diff changeset
535 if(xmlns && !strcmp(xmlns, "jabber:x:delay")) {
9847
afbca7f109fd [gaim-migrate @ 10725]
Nathan Walp <nwalp@pidgin.im>
parents: 9846
diff changeset
536 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9745
diff changeset
537 delayed = TRUE;
24680
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
538 stamp = xmlnode_get_attrib(y, "stamp");
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9745
diff changeset
539 } else if(xmlns && !strcmp(xmlns, "http://jabber.org/protocol/muc#user")) {
7629
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
540 xmlnode *z;
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
541
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
542 muc = TRUE;
7629
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
543 if((z = xmlnode_get_child(y, "status"))) {
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
544 const char *code = xmlnode_get_attrib(z, "code");
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
545 if(code && !strcmp(code, "201")) {
13445
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
546 if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
547 chat->config_dialog_type = PURPLE_REQUEST_ACTION;
13445
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
548 chat->config_dialog_handle =
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
549 purple_request_action(js->gc,
13445
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
550 _("Create New Room"),
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
551 _("Create New Room"),
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
552 _("You are creating a new room. Would"
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
553 " you like to configure it, or"
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
554 " accept the default settings?"),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16018
diff changeset
555 /* Default Action */ 1,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16018
diff changeset
556 purple_connection_get_account(js->gc), NULL, chat->conv,
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
557 chat, 2,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16018
diff changeset
558 _("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16018
diff changeset
559 _("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
13445
a67047ddc5c1 [gaim-migrate @ 15819]
Nathan Walp <nwalp@pidgin.im>
parents: 13443
diff changeset
560 }
18971
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
561 } else if(code && !strcmp(code, "210")) {
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
562 /* server rewrote room-nick */
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
563 if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
564 g_free(chat->handle);
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
565 chat->handle = g_strdup(jid->resource);
34b3eb14ea8f Commit a patch by bibliochat to handle an XMPP MUC status code that I pushed
Etan Reisner <deryni@pidgin.im>
parents: 18382
diff changeset
566 }
7629
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
567 }
c776e0ca8025 [gaim-migrate @ 8253]
Nathan Walp <nwalp@pidgin.im>
parents: 7615
diff changeset
568 }
7944
619ec16df2c8 [gaim-migrate @ 8615]
Nathan Walp <nwalp@pidgin.im>
parents: 7923
diff changeset
569 if((z = xmlnode_get_child(y, "item"))) {
619ec16df2c8 [gaim-migrate @ 8615]
Nathan Walp <nwalp@pidgin.im>
parents: 7923
diff changeset
570 real_jid = xmlnode_get_attrib(z, "jid");
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
571 affiliation = xmlnode_get_attrib(z, "affiliation");
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
572 role = xmlnode_get_attrib(z, "role");
9931
379686e1d709 [gaim-migrate @ 10823]
Nathan Walp <nwalp@pidgin.im>
parents: 9927
diff changeset
573 if(affiliation != NULL && !strcmp(affiliation, "owner"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
574 flags |= PURPLE_CBFLAGS_FOUNDER;
9743
839b2bce3853 [gaim-migrate @ 10608]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9559
diff changeset
575 if (role != NULL) {
839b2bce3853 [gaim-migrate @ 10608]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9559
diff changeset
576 if (!strcmp(role, "moderator"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
577 flags |= PURPLE_CBFLAGS_OP;
9743
839b2bce3853 [gaim-migrate @ 10608]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9559
diff changeset
578 else if (!strcmp(role, "participant"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
579 flags |= PURPLE_CBFLAGS_VOICE;
9743
839b2bce3853 [gaim-migrate @ 10608]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9559
diff changeset
580 }
7944
619ec16df2c8 [gaim-migrate @ 8615]
Nathan Walp <nwalp@pidgin.im>
parents: 7923
diff changeset
581 }
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
582 } else if(xmlns && !strcmp(xmlns, "vcard-temp:x:update")) {
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
583 xmlnode *photo = xmlnode_get_child(y, "photo");
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
584 if(photo) {
17702
15af85f94634 Don't check for null before calling free. I can't help but get rid
Mark Doliner <markdoliner@pidgin.im>
parents: 17683
diff changeset
585 g_free(avatar_hash);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
586 avatar_hash = xmlnode_get_data(photo);
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
587 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
588 }
24676
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
589 } else if (!strcmp(y->name, "query") &&
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
590 !strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) {
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
591 /* resource has specified idle */
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
592 const gchar *seconds = xmlnode_get_attrib(y, "seconds");
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
593 if (seconds) {
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
594 /* we may need to take "delayed" into account here */
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
595 idle = atoi(seconds);
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
596 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
597 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
598 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
599
24680
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
600 purple_debug_info("jabber", "got %d seconds idle from presence\n", idle);
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
601
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
602 if (idle && delayed && stamp) {
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
603 /* if we have a delayed presence, we need to add the delay to the idle
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
604 value */
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
605 time_t offset = time(NULL) - purple_str_to_time(stamp, TRUE, NULL, NULL,
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
606 NULL);
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
607 purple_debug_info("jabber", "got delay %s yielding %ld s offset\n",
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
608 stamp, offset);
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
609 idle += offset;
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
610 }
d1e37fa461f7 Support setting offset from <delayed/> element in <presence/> or "stamp"
Marcus Lundblad <malu@pidgin.im>
parents: 24679
diff changeset
611
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
612
7322
de15a9314c04 [gaim-migrate @ 7908]
Nathan Walp <nwalp@pidgin.im>
parents: 7321
diff changeset
613 if(jid->node && (chat = jabber_chat_find(js, jid->node, jid->domain))) {
8462
7afffaf5997b [gaim-migrate @ 9192]
Nathan Walp <nwalp@pidgin.im>
parents: 8401
diff changeset
614 static int i = 1;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
615 char *room_jid = g_strdup_printf("%s@%s", jid->node, jid->domain);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
616
17049
fe85f1b2d70b chat error fix from sadrul
Nathan Walp <nwalp@pidgin.im>
parents: 16545
diff changeset
617 if(state == JABBER_BUDDY_STATE_ERROR) {
21150
bedd1215fb5e Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents: 20210
diff changeset
618 char *title, *msg = jabber_parse_error(js, packet, NULL);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
619
23403
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
620 if (!chat->conv) {
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
621 title = g_strdup_printf(_("Error joining chat %s"), from);
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
622 purple_serv_got_join_chat_failed(js->gc, chat->components);
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
623 } else {
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
624 title = g_strdup_printf(_("Error in chat %s"), from);
18991
aa6a1feb874a applied changes from 5542a465de12fedee4ebe7c124a754f9992d0d62
Mark Doliner <markdoliner@pidgin.im>
parents: 18989
diff changeset
625 if (g_hash_table_size(chat->members) == 0)
aa6a1feb874a applied changes from 5542a465de12fedee4ebe7c124a754f9992d0d62
Mark Doliner <markdoliner@pidgin.im>
parents: 18989
diff changeset
626 serv_got_chat_left(js->gc, chat->id);
7321
432276dbb354 [gaim-migrate @ 7907]
Nathan Walp <nwalp@pidgin.im>
parents: 7320
diff changeset
627 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
628 purple_notify_error(js->gc, title, title, msg);
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
629 g_free(title);
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
630 g_free(msg);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
631
18991
aa6a1feb874a applied changes from 5542a465de12fedee4ebe7c124a754f9992d0d62
Mark Doliner <markdoliner@pidgin.im>
parents: 18989
diff changeset
632 if (g_hash_table_size(chat->members) == 0)
aa6a1feb874a applied changes from 5542a465de12fedee4ebe7c124a754f9992d0d62
Mark Doliner <markdoliner@pidgin.im>
parents: 18989
diff changeset
633 /* Only destroy the chat if the error happened while joining */
aa6a1feb874a applied changes from 5542a465de12fedee4ebe7c124a754f9992d0d62
Mark Doliner <markdoliner@pidgin.im>
parents: 18989
diff changeset
634 jabber_chat_destroy(chat);
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7280
diff changeset
635 jabber_id_free(jid);
7615
6bf94a91db1c [gaim-migrate @ 8239]
Nathan Walp <nwalp@pidgin.im>
parents: 7425
diff changeset
636 g_free(status);
8182
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
637 g_free(room_jid);
17702
15af85f94634 Don't check for null before calling free. I can't help but get rid
Mark Doliner <markdoliner@pidgin.im>
parents: 17683
diff changeset
638 g_free(avatar_hash);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
639 return;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
640 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
641
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
642
7813
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
643 if(type && !strcmp(type, "unavailable")) {
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
644 gboolean nick_change = FALSE;
7973
f1d1001702be [gaim-migrate @ 8650]
Nathan Walp <nwalp@pidgin.im>
parents: 7972
diff changeset
645
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
646 /* If we haven't joined the chat yet, we don't care that someone
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
647 * left, or it was us leaving after we closed the chat */
23403
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
648 if (!chat->conv || chat->left) {
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
649 if (chat->left &&
a8704d47889f Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23270
diff changeset
650 jid->resource && chat->handle && !strcmp(jid->resource, chat->handle))
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
651 jabber_chat_destroy(chat);
8182
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
652 jabber_id_free(jid);
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
653 g_free(status);
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
654 g_free(room_jid);
17702
15af85f94634 Don't check for null before calling free. I can't help but get rid
Mark Doliner <markdoliner@pidgin.im>
parents: 17683
diff changeset
655 g_free(avatar_hash);
8182
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
656 return;
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
657 }
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
658
7973
f1d1001702be [gaim-migrate @ 8650]
Nathan Walp <nwalp@pidgin.im>
parents: 7972
diff changeset
659 jabber_buddy_remove_resource(jb, jid->resource);
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
660 if(chat->muc) {
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
661 xmlnode *x;
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8043
diff changeset
662 for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) {
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
663 const char *xmlns, *nick, *code;
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
664 xmlnode *stat, *item;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 13497
diff changeset
665 if(!(xmlns = xmlnode_get_namespace(x)) ||
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
666 strcmp(xmlns, "http://jabber.org/protocol/muc#user"))
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
667 continue;
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
668 if(!(stat = xmlnode_get_child(x, "status")))
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
669 continue;
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
670 if(!(code = xmlnode_get_attrib(stat, "code")))
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
671 continue;
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
672 if(!strcmp(code, "301")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
673 /* XXX: we got banned */
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
674 } else if(!strcmp(code, "303")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
675 if(!(item = xmlnode_get_child(x, "item")))
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
676 continue;
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
677 if(!(nick = xmlnode_get_attrib(item, "nick")))
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
678 continue;
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
679 nick_change = TRUE;
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
680 if(!strcmp(jid->resource, chat->handle)) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
681 g_free(chat->handle);
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
682 chat->handle = g_strdup(nick);
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
683 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
684 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick);
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
685 jabber_chat_remove_handle(chat, jid->resource);
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
686 break;
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
687 } else if(!strcmp(code, "307")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
688 /* XXX: we got kicked */
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
689 } else if(!strcmp(code, "321")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
690 /* XXX: removed due to an affiliation change */
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
691 } else if(!strcmp(code, "322")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
692 /* XXX: removed because room is now members-only */
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
693 } else if(!strcmp(code, "332")) {
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
694 /* XXX: removed due to system shutdown */
8401
9fe6cadf2581 [gaim-migrate @ 9130]
Nathan Walp <nwalp@pidgin.im>
parents: 8396
diff changeset
695 }
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
696 }
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
697 }
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
698 if(!nick_change) {
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
699 if(!g_utf8_collate(jid->resource, chat->handle)) {
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
700 serv_got_chat_left(js->gc, chat->id);
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
701 jabber_chat_destroy(chat);
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
702 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
703 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
7974
08ec901d48fb [gaim-migrate @ 8651]
Nathan Walp <nwalp@pidgin.im>
parents: 7973
diff changeset
704 status);
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
705 jabber_chat_remove_handle(chat, jid->resource);
7972
f8538961a159 [gaim-migrate @ 8649]
Nathan Walp <nwalp@pidgin.im>
parents: 7965
diff changeset
706 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
707 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
708 } else {
8182
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
709 if(!chat->conv) {
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
710 chat->id = i++;
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
711 chat->muc = muc;
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
712 chat->conv = serv_got_joined_chat(js->gc, chat->id, room_jid);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
713 purple_conv_chat_set_nick(PURPLE_CONV_CHAT(chat->conv), chat->handle);
10486
840c61a6437f [gaim-migrate @ 11776]
Nathan Walp <nwalp@pidgin.im>
parents: 10382
diff changeset
714
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
715 jabber_chat_disco_traffic(chat);
8182
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
716 }
a024bf275ba2 [gaim-migrate @ 8901]
Nathan Walp <nwalp@pidgin.im>
parents: 8158
diff changeset
717
7973
f1d1001702be [gaim-migrate @ 8650]
Nathan Walp <nwalp@pidgin.im>
parents: 7972
diff changeset
718 jabber_buddy_track_resource(jb, jid->resource, priority, state,
f1d1001702be [gaim-migrate @ 8650]
Nathan Walp <nwalp@pidgin.im>
parents: 7972
diff changeset
719 status);
f1d1001702be [gaim-migrate @ 8650]
Nathan Walp <nwalp@pidgin.im>
parents: 7972
diff changeset
720
9152
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
721 jabber_chat_track_handle(chat, jid->resource, real_jid, affiliation, role);
ff7aaa305cbd [gaim-migrate @ 9936]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
722
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
723 if(!jabber_chat_find_buddy(chat->conv, jid->resource))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
724 purple_conv_chat_add_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9745
diff changeset
725 real_jid, flags, !delayed);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9320
diff changeset
726 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
727 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(chat->conv), jid->resource,
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9320
diff changeset
728 flags);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
729 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
730 g_free(room_jid);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
731 } else {
7322
de15a9314c04 [gaim-migrate @ 7908]
Nathan Walp <nwalp@pidgin.im>
parents: 7321
diff changeset
732 buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
18725
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
733 jid->node ? "@" : "", jid->domain);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
734 if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) {
18725
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
735 if(!jid->node || strcmp(jid->node,js->user->node) || strcmp(jid->domain,js->user->domain)) {
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 21801
diff changeset
736 purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n",
18725
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
737 buddy_name, purple_account_get_username(js->gc->account), js->gc->account);
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
738 jabber_id_free(jid);
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
739 g_free(avatar_hash);
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
740 g_free(buddy_name);
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
741 g_free(status);
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
742 return;
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
743 } else {
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
744 /* this is a different resource of our own account. Resume even when this account isn't on our blist */
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
745 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
746 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
747
18725
a3ab5c711de7 Now showing ad-hoc commands of other clients connected to the same account in the account menu (per XEP-0146). Since it is becoming messy in that menu, I also prefixed all ad-hoc commands with the node this command belongs to in [], which is the resource name for clients and the domain name for the server. Examples: "[home] Set status" for clients and "[jabber.org] Send message to all connected users" for servers.
Andreas Monitzer <am@adiumx.com>
parents: 18718
diff changeset
748 if(b && avatar_hash) {
16534
2ab9e23f99d9 Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@pidgin.im>
parents: 16018
diff changeset
749 const char *avatar_hash2 = purple_buddy_icons_get_checksum_for_user(b);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
750 if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) {
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
751 JabberIq *iq;
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
752 xmlnode *vcard;
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
753
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
754 /* XXX this is a crappy way of trying to prevent
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
755 * someone from spamming us with presence packets
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
756 * and causing us to DoS ourselves...what we really
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
757 * need is a queue system that can throttle itself,
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
758 * but i'm too tired to write that right now */
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
759 if(!g_slist_find(js->pending_avatar_requests, jb)) {
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
760
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
761 js->pending_avatar_requests = g_slist_prepend(js->pending_avatar_requests, jb);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
762
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
763 iq = jabber_iq_new(js, JABBER_IQ_GET);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
764 xmlnode_set_attrib(iq->node, "to", buddy_name);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
765 vcard = xmlnode_new_child(iq->node, "vCard");
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 13497
diff changeset
766 xmlnode_set_namespace(vcard, "vcard-temp");
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
767
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
768 jabber_iq_set_callback(iq, jabber_vcard_parse_avatar, NULL);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
769 jabber_iq_send(iq);
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10755
diff changeset
770 }
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
771 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
772 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 10116
diff changeset
773
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
774 if(state == JABBER_BUDDY_STATE_ERROR ||
7813
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
775 (type && (!strcmp(type, "unavailable") ||
b25628709267 [gaim-migrate @ 8460]
Nathan Walp <nwalp@pidgin.im>
parents: 7644
diff changeset
776 !strcmp(type, "unsubscribed")))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
777 PurpleConversation *conv;
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
778
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
779 jabber_buddy_remove_resource(jb, jid->resource);
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
780 if((conv = jabber_find_unnormalized_conv(from, js->gc->account)))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
781 purple_conversation_set_name(conv, buddy_name);
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8010
diff changeset
782
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7322
diff changeset
783 } else {
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
784 jbr = jabber_buddy_track_resource(jb, jid->resource, priority,
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
785 state, status);
24676
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
786 if (idle) {
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
787 jbr->idle = time(NULL) - idle;
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
788 } else {
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
789 jbr->idle = 0;
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
790 }
27ea4d447838 A first stab at supporting the upcoming new use-case in XMPP XEP-0012
Marcus Lundblad <malu@pidgin.im>
parents: 23575
diff changeset
791
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
792 if(caps) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
793 const char *node = xmlnode_get_attrib(caps,"node");
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
794 const char *ver = xmlnode_get_attrib(caps,"ver");
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
795 const char *ext = xmlnode_get_attrib(caps,"ext");
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
796
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
797 if(node && ver) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
798 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
799 userdata->js = js;
22929
f1860f6e1344 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
800 userdata->jb = jb;
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
801 userdata->from = g_strdup(from);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
802 jabber_caps_get_info(js, from, node, ver, ext, jabber_presence_set_capabilities, userdata);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
803 }
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17812
diff changeset
804 }
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7322
diff changeset
805 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
806
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
807 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) {
21195
fd63ef5027d7 Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents: 21193
diff changeset
808 jabber_google_presence_incoming(js, buddy_name, found_jbr);
fd63ef5027d7 Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents: 21193
diff changeset
809 purple_prpl_got_user_status(js->gc->account, buddy_name, jabber_buddy_state_get_status_id(found_jbr->state), "priority", found_jbr->priority, "message", found_jbr->status, NULL);
24682
129c4b3c6ad6 Patch from darkrain42
Marcus Lundblad <malu@pidgin.im>
parents: 24680
diff changeset
810 purple_prpl_got_user_idle(js->gc->account, buddy_name, found_jbr->idle, found_jbr->idle);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
811 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
812 purple_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status, NULL);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
813 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
814 g_free(buddy_name);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
815 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
816 g_free(status);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
817 jabber_id_free(jid);
17702
15af85f94634 Don't check for null before calling free. I can't help but get rid
Mark Doliner <markdoliner@pidgin.im>
parents: 17683
diff changeset
818 g_free(avatar_hash);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
819 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
820
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
821 void jabber_presence_subscription_set(JabberStream *js, const char *who, const char *type)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
822 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
823 xmlnode *presence = xmlnode_new("presence");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
824
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
825 xmlnode_set_attrib(presence, "to", who);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
826 xmlnode_set_attrib(presence, "type", type);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
827
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
828 jabber_send(js, presence);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
829 xmlnode_free(presence);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
830 }
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
831
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
832 void purple_status_to_jabber(const PurpleStatus *status, JabberBuddyState *state, char **msg, int *priority)
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
833 {
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
834 const char *status_id = NULL;
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
835 const char *formatted_msg = NULL;
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
836
13443
e27e92c22036 [gaim-migrate @ 15817]
Nathan Walp <nwalp@pidgin.im>
parents: 13385
diff changeset
837 if(state) *state = JABBER_BUDDY_STATE_UNKNOWN;
e27e92c22036 [gaim-migrate @ 15817]
Nathan Walp <nwalp@pidgin.im>
parents: 13385
diff changeset
838 if(msg) *msg = NULL;
e27e92c22036 [gaim-migrate @ 15817]
Nathan Walp <nwalp@pidgin.im>
parents: 13385
diff changeset
839 if(priority) *priority = 0;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
840
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
841 if(!status) {
13443
e27e92c22036 [gaim-migrate @ 15817]
Nathan Walp <nwalp@pidgin.im>
parents: 13385
diff changeset
842 if(state) *state = JABBER_BUDDY_STATE_UNAVAILABLE;
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
843 } else {
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
844 if(state) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
845 status_id = purple_status_get_id(status);
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
846 *state = jabber_buddy_status_id_get_state(status_id);
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
847 }
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
848
13497
07fc0a9826b8 [gaim-migrate @ 15872]
Richard Laager <rlaager@pidgin.im>
parents: 13445
diff changeset
849 if(msg) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
850 formatted_msg = purple_status_get_attr_string(status, "message");
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
851
13497
07fc0a9826b8 [gaim-migrate @ 15872]
Richard Laager <rlaager@pidgin.im>
parents: 13445
diff changeset
852 /* if the message is blank, then there really isn't a message */
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
853 if(formatted_msg && !*formatted_msg)
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
854 formatted_msg = NULL;
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
855
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
856 if(formatted_msg)
17683
cc7e7a1d5d8c Two questions:
Mark Doliner <markdoliner@pidgin.im>
parents: 17422
diff changeset
857 *msg = purple_markup_strip_html(formatted_msg);
13497
07fc0a9826b8 [gaim-migrate @ 15872]
Richard Laager <rlaager@pidgin.im>
parents: 13445
diff changeset
858 }
11872
05cdcbf6f145 [gaim-migrate @ 14163]
Nathan Walp <nwalp@pidgin.im>
parents: 11718
diff changeset
859
10216
37091349650c [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10189
diff changeset
860 if(priority)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15810
diff changeset
861 *priority = purple_status_get_attr_int(status, "priority");
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
862 }
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9931
diff changeset
863 }

mercurial