annotate libpurple/protocols/jabber/presence.c @ 27505:1638786071af

Clarify a comment a little.
author Paul Aurich <paul@darkrain42.org>
date Sun, 12 Jul 2009 03:44:30 +0000
parents 3bb1085235d0
children ebd9630ffc77
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /*
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
2 * purple - Jabber Protocol Plugin
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19195
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 #include "internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22
15889
87ea711b9781 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents: 15822
diff changeset
23 #include "account.h"
87ea711b9781 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents: 15822
diff changeset
24 #include "conversation.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "request.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "server.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "status.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "util.h"
15889
87ea711b9781 Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents: 15822
diff changeset
31 #include "xmlnode.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include "buddy.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "chat.h"
20571
c97e3ab9ef11 Music support for Google Talk
Sean Egan <seanegan@gmail.com>
parents: 20570
diff changeset
35 #include "google.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "presence.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 #include "iq.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 #include "jutil.h"
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
39 #include "adhoccommands.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
41 #include "usertune.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
43
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44 static void chats_send_presence_foreach(gpointer key, gpointer val,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 gpointer user_data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47 JabberChat *chat = val;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
48 xmlnode *presence = user_data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
49 char *chat_full_jid;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50
23260
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
51 if(!chat->conv || chat->left)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 chat_full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 chat->handle);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 xmlnode_set_attrib(presence, "to", chat_full_jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 jabber_send(chat->js, presence);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 g_free(chat_full_jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
60 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
62 void jabber_presence_fake_to_self(JabberStream *js, PurpleStatus *status)
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
63 {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
64 PurpleAccount *account;
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
65 const char *username;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
67 g_return_if_fail(js->user != NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
69 account = purple_connection_get_account(js->gc);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
70 username = purple_account_get_username(account);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
71 if (status == NULL)
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
72 status = purple_account_get_active_status(account);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
73
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
74 if (purple_find_buddy(account, username)) {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
75 JabberBuddy *jb = jabber_buddy_find(js, username, TRUE);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76 JabberBuddyResource *jbr;
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
77 JabberBuddyState state;
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
78 char *msg;
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
79 int priority;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
81 g_return_if_fail(jb != NULL);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
82
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
83 purple_status_to_jabber(status, &state, &msg, &priority);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
85 if (state == JABBER_BUDDY_STATE_UNAVAILABLE ||
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
86 state == JABBER_BUDDY_STATE_UNKNOWN) {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
87 jabber_buddy_remove_resource(jb, js->user->resource);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
88 } else {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
89 jabber_buddy_track_resource(jb, js->user->resource, priority,
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
90 state, msg);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
91 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
93 if ((jbr = jabber_buddy_find_resource(jb, NULL))) {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
94 purple_prpl_got_user_status(js->gc->account, username, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL);
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
95 } else {
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
96 purple_prpl_got_user_status(js->gc->account, username, "offline", msg ? "message" : NULL, msg, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
97 }
27497
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27495
diff changeset
98 g_free(msg);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
100 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
101
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
102 void jabber_set_status(PurpleAccount *account, PurpleStatus *status)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103 {
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
104 PurpleConnection *gc;
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
105 JabberStream *js;
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
106
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
107 if (!purple_account_is_connected(account))
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
108 return;
26932
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26920
diff changeset
109
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
110 if (!purple_status_is_active(status))
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
111 return;
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
112
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
113 if (purple_status_is_exclusive(status) && !purple_status_is_active(status)) {
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
114 /* An exclusive status can't be deactivated. You should just
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
115 * activate some other exclusive status. */
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
116 return;
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
117 }
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
118
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
119 gc = purple_account_get_connection(account);
25985
c4fd9222dda1 propagate from branch 'im.pidgin.pidgin' (head 303af74a38e7b313d4fb0be4d4054a16cb13d819)
Paul Aurich <paul@darkrain42.org>
parents: 25952 25663
diff changeset
120 js = purple_connection_get_protocol_data(gc);
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
121 jabber_presence_send(js, FALSE);
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
122 }
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
123
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
124 void jabber_presence_send(JabberStream *js, gboolean force)
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
125 {
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
126 PurpleAccount *account;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 xmlnode *presence, *x, *photo;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128 char *stripped = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129 JabberBuddyState state;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130 int priority;
20570
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
131 const char *artist = NULL, *title = NULL, *source = NULL, *uri = NULL, *track = NULL;
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
132 int length = -1;
17890
935005186312 Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17882
diff changeset
133 gboolean allowBuzz;
21629
6636546aeacf We need to work with the exclusive status.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21602
diff changeset
134 PurplePresence *p;
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
135 PurpleStatus *status, *tune;
18123
ca965dfd3875 kill some code duplication when sending current presence
Nathan Walp <nwalp@pidgin.im>
parents: 17603
diff changeset
136
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
137 account = purple_connection_get_account(js->gc);
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
138 p = purple_account_get_presence(account);
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
139 status = purple_presence_get_active_status(p);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140
18154
08e639dbac99 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18123
diff changeset
141 /* we don't want to send presence before we've gotten our roster */
27495
c8390dc125c1 Use js->state to track whether the roster has been retrieved.
Paul Aurich <paul@darkrain42.org>
parents: 26997
diff changeset
142 if (js->state != JABBER_STREAM_CONNECTED) {
18154
08e639dbac99 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18123
diff changeset
143 purple_debug_info("jabber", "attempt to send presence before roster retrieved\n");
08e639dbac99 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18123
diff changeset
144 return;
08e639dbac99 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18123
diff changeset
145 }
08e639dbac99 really and truly enforce the no-presence-before-roster thing
Nathan Walp <nwalp@pidgin.im>
parents: 18123
diff changeset
146
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
147 purple_status_to_jabber(status, &state, &stripped, &priority);
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
148
17890
935005186312 Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17882
diff changeset
149 /* check for buzz support */
935005186312 Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17882
diff changeset
150 allowBuzz = purple_status_get_attr_boolean(status,"buzz");
935005186312 Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17882
diff changeset
151 /* changing the buzz state has to trigger a re-broadcasting of the presence for caps */
23429
146d16459cda make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@hxbc.us>
parents: 23260
diff changeset
152
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
153 tune = purple_presence_get_status(p, "tune");
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
154 if (js->googletalk && !stripped && purple_status_is_active(tune)) {
23429
146d16459cda make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@hxbc.us>
parents: 23260
diff changeset
155 stripped = jabber_google_presence_outgoing(tune);
146d16459cda make googletalk tune hack work, previously it's not doing anything unless
Ka-Hing Cheung <khc@hxbc.us>
parents: 23260
diff changeset
156 }
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
157
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
158 #define CHANGED(a,b) ((!a && b) || (a && a[0] == '\0' && b && b[0] != '\0') || \
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
159 (a && !b) || (a && a[0] != '\0' && b && b[0] == '\0') || (a && b && strcmp(a,b)))
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
160 /* check if there are any differences to the <presence> and send them in that case */
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
161 if (force || allowBuzz != js->allowBuzz || js->old_state != state ||
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
162 CHANGED(js->old_msg, stripped) || js->old_priority != priority ||
26735
3912f55a1633 propagate from branch 'im.pidgin.pidgin' (head fbb4fe5da444943eecc76bdcd6c8ba967790b6c8)
Paul Aurich <paul@darkrain42.org>
parents: 26487 26707
diff changeset
163 CHANGED(js->old_avatarhash, js->avatar_hash) || js->old_idle != js->idle) {
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
164 /* Need to update allowBuzz before creating the presence (with caps) */
17890
935005186312 Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17882
diff changeset
165 js->allowBuzz = allowBuzz;
20571
c97e3ab9ef11 Music support for Google Talk
Sean Egan <seanegan@gmail.com>
parents: 20570
diff changeset
166
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
167 presence = jabber_presence_create_js(js, state, stripped, priority);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168
25425
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
169 /* Per XEP-0153 4.1, we must always send the <x> */
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
170 x = xmlnode_new_child(presence, "x");
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
171 xmlnode_set_namespace(x, "vcard-temp:x:update");
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
172 /*
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
173 * FIXME: Per XEP-0153 4.3.2 bullet 2, we must not publish our
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
174 * image hash if another resource has logged in and updated the
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
175 * vcard avatar. Requires changes in jabber_presence_parse.
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
176 */
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
177 if (js->vcard_fetched) {
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
178 /* Always publish a <photo>; it's empty if we have no image. */
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
179 photo = xmlnode_new_child(x, "photo");
25425
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
180 if (js->avatar_hash)
0fa91206cf5a Always publish a <photo/> element, even if we have an empty buddy icon.
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
181 xmlnode_insert_data(photo, js->avatar_hash, -1);
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
182 }
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
183
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
184 jabber_send(js, presence);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
185
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
186 g_hash_table_foreach(js->chats, chats_send_presence_foreach, presence);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
187 xmlnode_free(presence);
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
188
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
189 /* update old values */
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
190
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
191 if(js->old_msg)
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
192 g_free(js->old_msg);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
193 if(js->old_avatarhash)
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
194 g_free(js->old_avatarhash);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
195 js->old_msg = g_strdup(stripped);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
196 js->old_avatarhash = g_strdup(js->avatar_hash);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
197 js->old_state = state;
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
198 js->old_priority = priority;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
199 js->old_idle = js->idle;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
200 }
23430
74960bf43dae let's not leak if nothing is changed
Ka-Hing Cheung <khc@hxbc.us>
parents: 23429
diff changeset
201 g_free(stripped);
74960bf43dae let's not leak if nothing is changed
Ka-Hing Cheung <khc@hxbc.us>
parents: 23429
diff changeset
202
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
203 /* next, check if there are any changes to the tune values */
25147
6d6e10476c52 Clean up jabber_presence_send
Paul Aurich <paul@darkrain42.org>
parents: 25146
diff changeset
204 if (purple_status_is_active(tune)) {
20570
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
205 artist = purple_status_get_attr_string(tune, PURPLE_TUNE_ARTIST);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
206 title = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
207 source = purple_status_get_attr_string(tune, PURPLE_TUNE_ALBUM);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
208 uri = purple_status_get_attr_string(tune, PURPLE_TUNE_URL);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
209 track = purple_status_get_attr_string(tune, PURPLE_TUNE_TRACK);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
210 length = (!purple_status_get_attr_value(tune, PURPLE_TUNE_TIME)) ? -1 :
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
211 purple_status_get_attr_int(tune, PURPLE_TUNE_TIME);
5913725cbcd6 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 20058
diff changeset
212 }
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
213
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
214 if(CHANGED(artist, js->old_artist) || CHANGED(title, js->old_title) || CHANGED(source, js->old_source) ||
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
215 CHANGED(uri, js->old_uri) || CHANGED(track, js->old_track) || (length != js->old_length)) {
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
216 PurpleJabberTuneInfo tuneinfo = {
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
217 (char*)artist,
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
218 (char*)title,
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
219 (char*)source,
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
220 (char*)track,
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
221 length,
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
222 (char*)uri
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
223 };
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
224 jabber_tune_set(js->gc, &tuneinfo);
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
225
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
226 /* update old values */
20058
5103485b4b26 Plug some memory leaks.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19699
diff changeset
227 g_free(js->old_artist);
5103485b4b26 Plug some memory leaks.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19699
diff changeset
228 g_free(js->old_title);
5103485b4b26 Plug some memory leaks.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19699
diff changeset
229 g_free(js->old_source);
5103485b4b26 Plug some memory leaks.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19699
diff changeset
230 g_free(js->old_uri);
5103485b4b26 Plug some memory leaks.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19699
diff changeset
231 g_free(js->old_track);
17866
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
232 js->old_artist = g_strdup(artist);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
233 js->old_title = g_strdup(title);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
234 js->old_source = g_strdup(source);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
235 js->old_uri = g_strdup(uri);
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
236 js->old_length = length;
759cd72bd2ff 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 <pidgin@monitzer.com>
parents: 17849
diff changeset
237 js->old_track = g_strdup(track);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239
19699
680a3aea5eb6 Various warning fixes for the xmpp prpl.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19697
diff changeset
240 #undef CHANGED
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
241
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242 jabber_presence_fake_to_self(js, status);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
243 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
244
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
245 xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
246 {
17836
95affacf6f82 Added the ability to define extensions to caps
Andreas Monitzer <pidgin@monitzer.com>
parents: 17363
diff changeset
247 return jabber_presence_create_js(NULL, state, msg, priority);
95affacf6f82 Added the ability to define extensions to caps
Andreas Monitzer <pidgin@monitzer.com>
parents: 17363
diff changeset
248 }
95affacf6f82 Added the ability to define extensions to caps
Andreas Monitzer <pidgin@monitzer.com>
parents: 17363
diff changeset
249
95affacf6f82 Added the ability to define extensions to caps
Andreas Monitzer <pidgin@monitzer.com>
parents: 17363
diff changeset
250 xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, const char *msg, int priority)
95affacf6f82 Added the ability to define extensions to caps
Andreas Monitzer <pidgin@monitzer.com>
parents: 17363
diff changeset
251 {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252 xmlnode *show, *status, *presence, *pri, *c;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
253 const char *show_string = NULL;
27088
5330ffe6ca86 Fix compile warning for non-VV.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26997
diff changeset
254 #ifdef USE_VV
26997
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
255 gboolean audio_enabled, video_enabled;
27088
5330ffe6ca86 Fix compile warning for non-VV.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26997
diff changeset
256 #endif
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
257
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
258 presence = xmlnode_new("presence");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
260 if(state == JABBER_BUDDY_STATE_UNAVAILABLE)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261 xmlnode_set_attrib(presence, "type", "unavailable");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262 else if(state != JABBER_BUDDY_STATE_ONLINE &&
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 state != JABBER_BUDDY_STATE_UNKNOWN &&
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 state != JABBER_BUDDY_STATE_ERROR)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265 show_string = jabber_buddy_state_get_show(state);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
266
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 if(show_string) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268 show = xmlnode_new_child(presence, "show");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 xmlnode_insert_data(show, show_string, -1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
270 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
271
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
272 if(msg) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
273 status = xmlnode_new_child(presence, "status");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
274 xmlnode_insert_data(status, msg, -1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
275 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
276
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
277 if(priority) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
278 char *pstr = g_strdup_printf("%d", priority);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
279 pri = xmlnode_new_child(presence, "priority");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
280 xmlnode_insert_data(pri, pstr, -1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
281 g_free(pstr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
282 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
283
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
284 /* if we are idle and not offline, include idle */
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
285 if (js->idle && state != JABBER_BUDDY_STATE_UNAVAILABLE) {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
286 xmlnode *query = xmlnode_new_child(presence, "query");
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
287 gchar seconds[10];
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
288 g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle));
26932
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26920
diff changeset
289
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
290 xmlnode_set_namespace(query, "jabber:iq:last");
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
291 xmlnode_set_attrib(query, "seconds", seconds);
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
292 }
26735
3912f55a1633 propagate from branch 'im.pidgin.pidgin' (head fbb4fe5da444943eecc76bdcd6c8ba967790b6c8)
Paul Aurich <paul@darkrain42.org>
parents: 26487 26707
diff changeset
293
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
294 /* JEP-0115 */
25026
e61603ab10c6 * correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents: 25022
diff changeset
295 /* calculate hash */
e61603ab10c6 * correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents: 25022
diff changeset
296 jabber_caps_calculate_own_hash(js);
e61603ab10c6 * correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents: 25022
diff changeset
297 /* create xml */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
298 c = xmlnode_new_child(presence, "c");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
299 xmlnode_set_namespace(c, "http://jabber.org/protocol/caps");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
300 xmlnode_set_attrib(c, "node", CAPS0115_NODE);
25017
26eabe8e739b Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23260
diff changeset
301 xmlnode_set_attrib(c, "hash", "sha-1");
25146
4040da08a733 Entity Capabilities must be per-JabberStream
Paul Aurich <paul@darkrain42.org>
parents: 25124
diff changeset
302 xmlnode_set_attrib(c, "ver", jabber_caps_get_own_hash(js));
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
303
26457
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
304 #ifdef USE_VV
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
305 /*
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
306 * MASSIVE HUGE DISGUSTING HACK
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
307 * This is a huge hack. As far as I can tell, Google Talk's gmail client
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
308 * doesn't bother to check the actual features we advertise; they
26463
b01e8e76c59d Make my comment parse correctly.
Paul Aurich <paul@darkrain42.org>
parents: 26457
diff changeset
309 * just assume that if we specify a 'voice-v1' ext (ignoring that
b01e8e76c59d Make my comment parse correctly.
Paul Aurich <paul@darkrain42.org>
parents: 26457
diff changeset
310 * these are to be assigned no semantic value), we support receiving voice
b01e8e76c59d Make my comment parse correctly.
Paul Aurich <paul@darkrain42.org>
parents: 26457
diff changeset
311 * calls.
26997
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
312 *
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
313 * Ditto for 'video-v1'.
26457
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
314 */
26997
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
315 audio_enabled = jabber_audio_enabled(js, NULL /* unused */);
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
316 video_enabled = jabber_video_enabled(js, NULL /* unused */);
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
317
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
318 if (audio_enabled && video_enabled)
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
319 xmlnode_set_attrib(c, "ext", "voice-v1 video-v1");
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
320 else if (audio_enabled)
26457
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
321 xmlnode_set_attrib(c, "ext", "voice-v1");
26997
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
322 else if (video_enabled)
72bcdcb0629f Add Gmail video support.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26932
diff changeset
323 xmlnode_set_attrib(c, "ext", "video-v1");
26457
20743d9bd62d Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <paul@darkrain42.org>
parents: 26446
diff changeset
324 #endif
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24721
diff changeset
325
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
326 return presence;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
327 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
328
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
329 struct _jabber_add_permit {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
330 PurpleConnection *gc;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
331 JabberStream *js;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332 char *who;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334
19195
1ca6c4b234ab Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18739
diff changeset
335 static void authorize_add_cb(gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
336 {
19195
1ca6c4b234ab Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18739
diff changeset
337 struct _jabber_add_permit *jap = data;
21602
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
338 if(PURPLE_CONNECTION_IS_VALID(jap->gc))
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
339 jabber_presence_subscription_set(jap->gc->proto_data,
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
340 jap->who, "subscribed");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
341 g_free(jap->who);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
342 g_free(jap);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344
19195
1ca6c4b234ab Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18739
diff changeset
345 static void deny_add_cb(gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346 {
19195
1ca6c4b234ab Warning fixes in the aftermath of resiak's authorize_cb and deny_cb type fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18739
diff changeset
347 struct _jabber_add_permit *jap = data;
21602
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
348 if(PURPLE_CONNECTION_IS_VALID(jap->gc))
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
349 jabber_presence_subscription_set(jap->gc->proto_data,
53fee49ce1c5 Prevent crashing when authorizing or denying after the account is disconnected.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21560
diff changeset
350 jap->who, "unsubscribed");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
351 g_free(jap->who);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
352 g_free(jap);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
353 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
354
26465
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25952
diff changeset
355 static void
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25952
diff changeset
356 jabber_vcard_parse_avatar(JabberStream *js, const char *from,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25952
diff changeset
357 JabberIqType type, const char *id,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25952
diff changeset
358 xmlnode *packet, gpointer blah)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
359 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
360 JabberBuddy *jb = NULL;
26780
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
361 xmlnode *vcard, *photo, *binval, *fn, *nick;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362 char *text;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
363
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
364 if(!from)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
365 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
366
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
367 jb = jabber_buddy_find(js, from, TRUE);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
368
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
369 js->pending_avatar_requests = g_slist_remove(js->pending_avatar_requests, jb);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
370
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
371 if((vcard = xmlnode_get_child(packet, "vCard")) ||
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
372 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
26780
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
373 /* The logic here regarding the nickname and full name is copied from
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
374 * buddy.c:jabber_vcard_parse. */
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
375 gchar *nickname = NULL;
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
376 if ((fn = xmlnode_get_child(vcard, "FN")))
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
377 nickname = xmlnode_get_data(fn);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
378
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
379 if ((nick = xmlnode_get_child(vcard, "NICKNAME"))) {
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
380 char *tmp = xmlnode_get_data(nick);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
381 char *bare_jid = jabber_get_bare_jid(from);
26920
c9ac5cc1e46c Fix a crash when <NICKNAME/> is present in a vcard, but has no data.
Paul Aurich <paul@darkrain42.org>
parents: 26870
diff changeset
382 if (tmp && strstr(bare_jid, tmp) == NULL) {
26780
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
383 g_free(nickname);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
384 nickname = tmp;
26920
c9ac5cc1e46c Fix a crash when <NICKNAME/> is present in a vcard, but has no data.
Paul Aurich <paul@darkrain42.org>
parents: 26870
diff changeset
385 } else if (tmp)
26780
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
386 g_free(tmp);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
387
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
388 g_free(bare_jid);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
389 }
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
390
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
391 if (nickname) {
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
392 serv_got_alias(js->gc, from, nickname);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
393 g_free(nickname);
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
394 }
5c4a4a0f5929 When we download a buddy's vCard to update an avatar, also try to update the nickname.
Paul Aurich <paul@darkrain42.org>
parents: 26774
diff changeset
395
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
396 if((photo = xmlnode_get_child(vcard, "PHOTO")) &&
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
397 (( (binval = xmlnode_get_child(photo, "BINVAL")) &&
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
398 (text = xmlnode_get_data(binval))) ||
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
399 (text = xmlnode_get_data(photo)))) {
26707
8953034dae88 Use jabber_calculate_data_sha1sum in one more place.
Paul Aurich <paul@darkrain42.org>
parents: 26705
diff changeset
400 guchar *data;
8953034dae88 Use jabber_calculate_data_sha1sum in one more place.
Paul Aurich <paul@darkrain42.org>
parents: 26705
diff changeset
401 gchar *hash;
8953034dae88 Use jabber_calculate_data_sha1sum in one more place.
Paul Aurich <paul@darkrain42.org>
parents: 26705
diff changeset
402 gsize size;
16386
e0c9a46b459f Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@wiktel.com>
parents: 15957
diff changeset
403
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
404 data = purple_base64_decode(text, &size);
24693
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24559
diff changeset
405 hash = jabber_calculate_data_sha1sum(data, size);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
406
16386
e0c9a46b459f Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@wiktel.com>
parents: 15957
diff changeset
407 purple_buddy_icons_set_for_user(js->gc->account, from, data, size, hash);
24693
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24559
diff changeset
408 g_free(hash);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
409 g_free(text);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
410 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
411 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
412 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
413
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
414 typedef struct _JabberPresenceCapabilities {
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
415 JabberStream *js;
22781
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
416 JabberBuddy *jb;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
417 char *from;
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
418 } JabberPresenceCapabilities;
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
419
25189
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
420 static void
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
421 jabber_presence_set_capabilities(JabberCapsClientInfo *info, GList *exts,
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
422 JabberPresenceCapabilities *userdata)
25149
416ff3d65c16 Rewrite jabber_presence_set_capabilities a little
Paul Aurich <paul@darkrain42.org>
parents: 25147
diff changeset
423 {
22781
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
424 JabberBuddyResource *jbr;
26842
33f98d662db8 Don't crash when resource is NULL. Thanks, Marcus!
Paul Aurich <paul@darkrain42.org>
parents: 26781
diff changeset
425 char *resource = g_utf8_strchr(userdata->from, -1, '/');
21688
6f4ffdc65230 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21629
diff changeset
426
26842
33f98d662db8 Don't crash when resource is NULL. Thanks, Marcus!
Paul Aurich <paul@darkrain42.org>
parents: 26781
diff changeset
427 if (resource)
33f98d662db8 Don't crash when resource is NULL. Thanks, Marcus!
Paul Aurich <paul@darkrain42.org>
parents: 26781
diff changeset
428 resource += 1;
22781
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
429
25149
416ff3d65c16 Rewrite jabber_presence_set_capabilities a little
Paul Aurich <paul@darkrain42.org>
parents: 25147
diff changeset
430 jbr = jabber_buddy_find_resource(userdata->jb, resource);
416ff3d65c16 Rewrite jabber_presence_set_capabilities a little
Paul Aurich <paul@darkrain42.org>
parents: 25147
diff changeset
431 if (!jbr) {
22781
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
432 g_free(userdata->from);
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
433 g_free(userdata);
25189
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
434 if (exts) {
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
435 g_list_foreach(exts, (GFunc)g_free, NULL);
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
436 g_list_free(exts);
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
437 }
22781
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
438 return;
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
439 }
2404b13940e9 Fix a crash in Jabber that I think happens someone someone signs off
Mark Doliner <mark@kingant.net>
parents: 22486
diff changeset
440
25191
5ad14a53e266 Partial disapproval of b8fdbd255c614e7305f835b843a3414675a86a19
Paul Aurich <paul@darkrain42.org>
parents: 25189
diff changeset
441 /* Any old jbr->caps.info is owned by the caps code */
25189
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
442 if (jbr->caps.exts) {
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
443 g_list_foreach(jbr->caps.exts, (GFunc)g_free, NULL);
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
444 g_list_free(jbr->caps.exts);
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
445 }
21688
6f4ffdc65230 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21629
diff changeset
446
25189
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
447 jbr->caps.info = info;
05693f6885a4 Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <paul@darkrain42.org>
parents: 25187
diff changeset
448 jbr->caps.exts = exts;
21688
6f4ffdc65230 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21629
diff changeset
449
26849
e7819fa37224 Only try to fetch adhoc commands from buddies once. Pushed updates (which we support now) are far superior.
Paul Aurich <paul@darkrain42.org>
parents: 26846
diff changeset
450 if (!jbr->commands_fetched && jabber_resource_has_capability(jbr, "http://jabber.org/protocol/commands")) {
25175
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
451 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
452 xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#items");
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
453 xmlnode_set_attrib(iq->node, "to", userdata->from);
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
454 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
455 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
b1b1b75a922e Sprinkle jabber_resource_has_capability in places
Paul Aurich <paul@darkrain42.org>
parents: 25168
diff changeset
456 jabber_iq_send(iq);
21688
6f4ffdc65230 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21629
diff changeset
457
26849
e7819fa37224 Only try to fetch adhoc commands from buddies once. Pushed updates (which we support now) are far superior.
Paul Aurich <paul@darkrain42.org>
parents: 26846
diff changeset
458 jbr->commands_fetched = TRUE;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
459 }
21688
6f4ffdc65230 Fix a crash when an error occurs discovering a the capabilities of a client. Fixes #4081.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21629
diff changeset
460
20318
bbfe52e817cf applied changes from d50ecf4dc52f25cbd219d6c19846436dec5a8853
Luke Schierer <lschiere@pidgin.im>
parents: 20058
diff changeset
461 g_free(userdata->from);
bbfe52e817cf applied changes from d50ecf4dc52f25cbd219d6c19846436dec5a8853
Luke Schierer <lschiere@pidgin.im>
parents: 20058
diff changeset
462 g_free(userdata);
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
463 }
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
464
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
465 void jabber_presence_parse(JabberStream *js, xmlnode *packet)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
466 {
26870
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
467 const char *from;
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
468 const char *type;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
469 char *status = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
470 int priority = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
471 JabberID *jid;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
472 JabberChat *chat;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
473 JabberBuddy *jb;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
474 JabberBuddyResource *jbr = NULL, *found_jbr = NULL;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
475 PurpleConvChatBuddyFlags flags = PURPLE_CBFLAGS_NONE;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
476 gboolean delayed = FALSE;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
477 const gchar *stamp = NULL; /* from <delayed/> element */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
478 PurpleBuddy *b = NULL;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
479 char *buddy_name;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
480 JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
481 xmlnode *y;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
482 char *avatar_hash = NULL;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
483 xmlnode *caps = NULL;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
484 int idle = 0;
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
485 gchar *nickname = NULL;
26870
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
486 gboolean signal_return;
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
487
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
488 from = xmlnode_get_attrib(packet, "from");
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
489 type = xmlnode_get_attrib(packet, "type");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
490
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
491 jb = jabber_buddy_find(js, from, TRUE);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
492 g_return_if_fail(jb != NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
493
26870
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
494 signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(jabber_plugin,
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
495 "jabber-receiving-presence", js->gc, type, from, packet));
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
496 if (signal_return)
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
497 return;
92565c8e1e3a Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <paul@darkrain42.org>
parents: 26849
diff changeset
498
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
499 jid = jabber_id_new(from);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
500 if (jid == NULL) {
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
501 purple_debug_error("jabber", "Ignoring presence with malformed 'from' "
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
502 "JID: %s\n", from);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
503 return;
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
504 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
505
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
506 if(jb->error_msg) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
507 g_free(jb->error_msg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
508 jb->error_msg = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
509 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
510
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
511 if (type == NULL) {
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
512 xmlnode *show;
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
513 char *show_data = NULL;
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
514
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
515 state = JABBER_BUDDY_STATE_ONLINE;
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
516
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
517 show = xmlnode_get_child(packet, "show");
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
518 if (show) {
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
519 show_data = xmlnode_get_data(show);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
520 if (show_data) {
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
521 state = jabber_buddy_show_get_state(show_data);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
522 g_free(show_data);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
523 } else
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
524 purple_debug_warning("jabber", "<show/> present on presence, "
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
525 "but no contents!\n");
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
526 }
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
527 } else if (g_str_equal(type, "error")) {
20814
bde477ec6a71 Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <will.thompson@collabora.co.uk>
parents: 20318
diff changeset
528 char *msg = jabber_parse_error(js, packet, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
529
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
530 state = JABBER_BUDDY_STATE_ERROR;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
531 jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence"));
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
532 } else if (g_str_equal(type, "subscribe")) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
533 struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
534 gboolean onlist = FALSE;
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
535 PurpleAccount *account;
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
536 PurpleBuddy *buddy;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
537 JabberBuddy *jb = NULL;
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
538 xmlnode *nick;
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
539
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
540 account = purple_connection_get_account(js->gc);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
541 buddy = purple_find_buddy(account, from);
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
542 nick = xmlnode_get_child_with_namespace(packet, "nick", "http://jabber.org/protocol/nick");
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
543 if (nick)
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
544 nickname = xmlnode_get_data(nick);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
545
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
546 if (buddy) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
547 jb = jabber_buddy_find(js, from, TRUE);
24482
39841a84c944 A fix from Paul Aurich for a long-standing XMPP issue with duplicate buddies. Fixes #479.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23430
diff changeset
548 if ((jb->subscription & (JABBER_SUB_TO | JABBER_SUB_PENDING)))
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
549 onlist = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
550 }
15957
84bf0f949b0b fix prompting to add a buddy after authorization if they're already on our list
Nathan Walp <nwalp@pidgin.im>
parents: 15889
diff changeset
551
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
552 jap->gc = js->gc;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
553 jap->who = g_strdup(from);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
554 jap->js = js;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
555
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
556 purple_account_request_authorization(account, from, NULL, nickname,
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
557 NULL, onlist, authorize_add_cb, deny_add_cb, jap);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
558
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
559 g_free(nickname);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
560 jabber_id_free(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
561 return;
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
562 } else if (g_str_equal(type, "subscribed")) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
563 /* we've been allowed to see their presence, but we don't care */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
564 jabber_id_free(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
565 return;
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
566 } else if (g_str_equal(type, "unsubscribe")) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
567 /* XXX I'm not sure this is the right way to handle this, it
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
568 * might be better to add "unsubscribe" to the presence status
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
569 * if lower down, but I'm not sure. */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
570 /* they are unsubscribing from our presence, we don't care */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
571 /* Well, maybe just a little, we might want/need to start
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
572 * acknowledging this (and the others) at some point. */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
573 jabber_id_free(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
574 return;
27366
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
575 } else if (g_str_equal(type, "probe")) {
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
576 purple_debug_warning("jabber", "Ignoring presence probe\n");
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
577 jabber_id_free(jid);
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
578 return;
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
579 } else if (g_str_equal(type, "unavailable")) {
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
580 state = JABBER_BUDDY_STATE_UNAVAILABLE;
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
581 } else if (g_str_equal(type, "unsubscribed")) {
b41b69e8b341 I missed a few presence types.
Paul Aurich <paul@darkrain42.org>
parents: 27365
diff changeset
582 state = JABBER_BUDDY_STATE_UNKNOWN;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
583 } else {
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
584 purple_debug_warning("jabber", "Ignoring presence with invalid type "
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
585 "'%s'\n", type);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
586 jabber_id_free(jid);
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
587 return;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
588 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
589
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
590
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
591 for(y = packet->child; y; y = y->next) {
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
592 const char *xmlns;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
593 if(y->type != XMLNODE_TYPE_TAG)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
594 continue;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
595 xmlns = xmlnode_get_namespace(y);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
596
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
597 if(!strcmp(y->name, "status")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
598 g_free(status);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
599 status = xmlnode_get_data(y);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
600 } else if(!strcmp(y->name, "priority")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
601 char *p = xmlnode_get_data(y);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
602 if(p) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
603 priority = atoi(p);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
604 g_free(p);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
605 }
24721
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
606 } else if(xmlns == NULL) {
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
607 /* The rest of the cases used to check xmlns individually. */
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
608 continue;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
609 } else if(!strcmp(y->name, "delay") && !strcmp(xmlns, "urn:xmpp:delay")) {
17878
3399dd1c258d Forgot to implement XEP-0203 for presence packets, too.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17867
diff changeset
610 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
3399dd1c258d Forgot to implement XEP-0203 for presence packets, too.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17867
diff changeset
611 delayed = TRUE;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
612 stamp = xmlnode_get_attrib(y, "stamp");
24721
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
613 } else if(!strcmp(y->name, "c") && !strcmp(xmlns, "http://jabber.org/protocol/caps")) {
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
614 caps = y; /* store for later, when creating buddy resource */
26773
e816444c1a01 Handle User Nick notifications via <presence/> stanzas (receive-only). Refs #864.
Paul Aurich <paul@darkrain42.org>
parents: 26753
diff changeset
615 } else if (g_str_equal(y->name, "nick") && g_str_equal(xmlns, "http://jabber.org/protocol/nick")) {
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
616 nickname = xmlnode_get_data(y);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
617 } else if(!strcmp(y->name, "x")) {
24721
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
618 if(!strcmp(xmlns, "jabber:x:delay")) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
619 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
620 delayed = TRUE;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
621 stamp = xmlnode_get_attrib(y, "stamp");
24721
bba38f03085d Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24693
diff changeset
622 } else if(!strcmp(xmlns, "vcard-temp:x:update")) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
623 xmlnode *photo = xmlnode_get_child(y, "photo");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
624 if(photo) {
17602
6e0961356343 Don't check for null before calling free. I can't help but get rid
Mark Doliner <mark@kingant.net>
parents: 17576
diff changeset
625 g_free(avatar_hash);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
626 avatar_hash = xmlnode_get_data(photo);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
627 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
628 }
26932
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26920
diff changeset
629 } else if (!strcmp(y->name, "query") &&
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
630 !strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
631 /* resource has specified idle */
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
632 const gchar *seconds = xmlnode_get_attrib(y, "seconds");
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
633 if (seconds) {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
634 /* we may need to take "delayed" into account here */
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
635 idle = atoi(seconds);
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
636 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
637 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
638 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
639
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
640 if (idle && delayed && stamp) {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
641 /* if we have a delayed presence, we need to add the delay to the idle
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
642 value */
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
643 time_t offset = time(NULL) - purple_str_to_time(stamp, TRUE, NULL, NULL,
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
644 NULL);
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
645 purple_debug_info("jabber", "got delay %s yielding %ld s offset\n",
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
646 stamp, offset);
26932
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26920
diff changeset
647 idle += offset;
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
648 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
649
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
650 if(jid->node && (chat = jabber_chat_find(js, jid->node, jid->domain))) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
651 static int i = 1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
652
16993
d5293baaed11 chat error fix from sadrul
Nathan Walp <nwalp@pidgin.im>
parents: 16475
diff changeset
653 if(state == JABBER_BUDDY_STATE_ERROR) {
20814
bde477ec6a71 Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <will.thompson@collabora.co.uk>
parents: 20318
diff changeset
654 char *title, *msg = jabber_parse_error(js, packet, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
655
23260
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
656 if (!chat->conv) {
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
657 title = g_strdup_printf(_("Error joining chat %s"), from);
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
658 purple_serv_got_join_chat_failed(js->gc, chat->components);
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
659 } else {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
660 title = g_strdup_printf(_("Error in chat %s"), from);
18739
f29794be0163 applied changes from bbcc1925d9e449bb9599d378da2764bf47da2a7a
Mark Doliner <mark@kingant.net>
parents: 18734
diff changeset
661 if (g_hash_table_size(chat->members) == 0)
f29794be0163 applied changes from bbcc1925d9e449bb9599d378da2764bf47da2a7a
Mark Doliner <mark@kingant.net>
parents: 18734
diff changeset
662 serv_got_chat_left(js->gc, chat->id);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
663 }
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
664 purple_notify_error(js->gc, title, title, msg);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
665 g_free(title);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
666 g_free(msg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
667
18739
f29794be0163 applied changes from bbcc1925d9e449bb9599d378da2764bf47da2a7a
Mark Doliner <mark@kingant.net>
parents: 18734
diff changeset
668 if (g_hash_table_size(chat->members) == 0)
f29794be0163 applied changes from bbcc1925d9e449bb9599d378da2764bf47da2a7a
Mark Doliner <mark@kingant.net>
parents: 18734
diff changeset
669 /* Only destroy the chat if the error happened while joining */
f29794be0163 applied changes from bbcc1925d9e449bb9599d378da2764bf47da2a7a
Mark Doliner <mark@kingant.net>
parents: 18734
diff changeset
670 jabber_chat_destroy(chat);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
671 jabber_id_free(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
672 g_free(status);
17602
6e0961356343 Don't check for null before calling free. I can't help but get rid
Mark Doliner <mark@kingant.net>
parents: 17576
diff changeset
673 g_free(avatar_hash);
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
674 g_free(nickname);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
675 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
676 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
677
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
678 if (type == NULL) {
27365
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
679 xmlnode *x;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
680 const char *real_jid = NULL;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
681 const char *affiliation = NULL;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
682 const char *role = NULL;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
683
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
684 /*
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
685 * XEP-0045 mandates the presence to include a resource (which is
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
686 * treated as the chat nick). Some non-compliant servers allow
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
687 * joining without a nick.
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
688 */
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
689 if (!jid->resource) {
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
690 jabber_id_free(jid);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
691 g_free(avatar_hash);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
692 g_free(nickname);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
693 g_free(status);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
694 return;
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
695 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
696
27365
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
697 x = xmlnode_get_child_with_namespace(packet, "x",
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
698 "http://jabber.org/protocol/muc#user");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
699 if (x) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
700 xmlnode *status_node;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
701 xmlnode *item_node;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
702
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
703 status_node = xmlnode_get_child(x, "status");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
704 if (status_node) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
705 const char *code = xmlnode_get_attrib(status_node, "code");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
706 if (purple_strequal(code, "201")) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
707 if ((chat = jabber_chat_find(js, jid->node, jid->domain))) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
708 chat->config_dialog_type = PURPLE_REQUEST_ACTION;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
709 chat->config_dialog_handle =
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
710 purple_request_action(js->gc,
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
711 _("Create New Room"),
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
712 _("Create New Room"),
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
713 _("You are creating a new room. Would"
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
714 " you like to configure it, or"
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
715 " accept the default settings?"),
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
716 /* Default Action */ 1,
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
717 purple_connection_get_account(js->gc), NULL, chat->conv,
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
718 chat, 2,
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
719 _("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
720 _("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
721 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
722 } else if (purple_strequal(code, "210")) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
723 /* server rewrote room-nick */
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
724 if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
725 g_free(chat->handle);
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
726 chat->handle = g_strdup(jid->resource);
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
727 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
728 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
729 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
730
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
731 item_node = xmlnode_get_child(x, "item");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
732 if (item_node) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
733 real_jid = xmlnode_get_attrib(item_node, "jid");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
734 affiliation = xmlnode_get_attrib(item_node, "affiliation");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
735 role = xmlnode_get_attrib(item_node, "role");
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
736
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
737 if (purple_strequal(affiliation, "owner"))
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
738 flags |= PURPLE_CBFLAGS_FOUNDER;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
739 if (role) {
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
740 if (g_str_equal(role, "moderator"))
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
741 flags |= PURPLE_CBFLAGS_OP;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
742 else if (g_str_equal(role, "participant"))
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
743 flags |= PURPLE_CBFLAGS_VOICE;
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
744 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
745 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
746 }
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
747
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
748 if(!chat->conv) {
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
749 char *room_jid = g_strdup_printf("%s@%s", jid->node, jid->domain);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
750 chat->id = i++;
27365
712289e2aa6d Rearrange all the MUC code to be together.
Paul Aurich <paul@darkrain42.org>
parents: 27364
diff changeset
751 chat->muc = (x != NULL);
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
752 chat->conv = serv_got_joined_chat(js->gc, chat->id, room_jid);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
753 purple_conv_chat_set_nick(PURPLE_CONV_CHAT(chat->conv), chat->handle);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
754
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
755 jabber_chat_disco_traffic(chat);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
756 g_free(room_jid);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
757 }
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
758
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
759 jabber_buddy_track_resource(jb, jid->resource, priority, state,
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
760 status);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
761
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
762 jabber_chat_track_handle(chat, jid->resource, real_jid, affiliation, role);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
763
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
764 if(!jabber_chat_find_buddy(chat->conv, jid->resource))
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
765 purple_conv_chat_add_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
766 real_jid, flags, !delayed);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
767 else
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
768 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(chat->conv), jid->resource,
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
769 flags);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
770 } else if (g_str_equal(type, "unavailable")) {
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
771 xmlnode *x;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
772 gboolean nick_change = FALSE;
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
773 gboolean kick = FALSE;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
774 gboolean is_our_resource = FALSE; /* Is the presence about us? */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
775
25597
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
776 /* If the chat nick is invalid, we haven't yet joined, or we've
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
777 * already left (it was probably us leaving after we closed the
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
778 * chat), we don't care.
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
779 */
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
780 if (!jid->resource || !chat->conv || chat->left) {
23260
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
781 if (chat->left &&
5793bcea224c Fix the chat-room rejoining bug where the list appears empty.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23103
diff changeset
782 jid->resource && chat->handle && !strcmp(jid->resource, chat->handle))
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
783 jabber_chat_destroy(chat);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
784 jabber_id_free(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
785 g_free(status);
17602
6e0961356343 Don't check for null before calling free. I can't help but get rid
Mark Doliner <mark@kingant.net>
parents: 17576
diff changeset
786 g_free(avatar_hash);
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
787 g_free(nickname);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
788 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
789 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
790
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
791 is_our_resource = (0 == g_utf8_collate(jid->resource, chat->handle));
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
792
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
793 jabber_buddy_remove_resource(jb, jid->resource);
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
794
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
795 x = xmlnode_get_child_with_namespace(packet, "x",
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
796 "http://jabber.org/protocol/muc#user");
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
797 if (chat->muc && x) {
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
798 const char *nick;
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
799 const char *code = NULL;
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
800 const char *item_jid = NULL;
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
801 xmlnode *stat;
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
802 xmlnode *item;
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
803
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
804 item = xmlnode_get_child(x, "item");
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
805 if (item)
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
806 item_jid = xmlnode_get_attrib(item, "jid");
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
807
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
808
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
809 stat = xmlnode_get_child(x, "status");
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
810
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
811 if (stat)
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
812 code = xmlnode_get_attrib(stat, "code");
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
813
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
814 if (code) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
815 if(!strcmp(code, "301")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
816 /* XXX: we got banned */
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
817 } else if(!strcmp(code, "303") && item &&
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
818 (nick = xmlnode_get_attrib(item, "nick"))) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
819 nick_change = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
820 if(!strcmp(jid->resource, chat->handle)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
821 g_free(chat->handle);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
822 chat->handle = g_strdup(nick);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
823 }
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
824 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
825 jabber_chat_remove_handle(chat, jid->resource);
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
826 /* TODO: Enable this when this is in a for-loop...
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
827 break; */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
828 } else if(!strcmp(code, "307")) {
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
829 /* Someone was kicked from the room */
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
830 xmlnode *reason = NULL, *actor = NULL;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
831 const char *actor_name = NULL;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
832 char *reason_text = NULL;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
833 char *tmp;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
834
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
835 kick = TRUE;
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
836
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
837 if (item) {
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
838 reason = xmlnode_get_child(item, "reason");
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
839 actor = xmlnode_get_child(item, "actor");
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
840
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
841 if (reason != NULL)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
842 reason_text = xmlnode_get_data(reason);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
843 if (actor != NULL)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
844 actor_name = xmlnode_get_attrib(actor, "jid");
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
845 }
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
846
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
847 if (reason_text == NULL)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
848 reason_text = g_strdup(_("No reason"));
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
849
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
850 if (is_our_resource) {
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
851 if (actor_name != NULL)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
852 tmp = g_strdup_printf(_("You have been kicked by %s: (%s)"),
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
853 actor_name, reason_text);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
854 else
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
855 tmp = g_strdup_printf(_("You have been kicked: (%s)"),
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
856 reason_text);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
857 } else {
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
858 if (actor_name != NULL)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
859 tmp = g_strdup_printf(_("Kicked by %s (%s)"),
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
860 actor_name, reason_text);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
861 else
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
862 tmp = g_strdup_printf(_("Kicked (%s)"),
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
863 reason_text);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
864 }
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
865
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
866 g_free(reason_text);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
867 g_free(status);
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
868 status = tmp;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
869 } else if(!strcmp(code, "321")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
870 /* XXX: removed due to an affiliation change */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
871 } else if(!strcmp(code, "322")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
872 /* XXX: removed because room is now members-only */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
873 } else if(!strcmp(code, "332")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
874 /* XXX: removed due to system shutdown */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
875 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
876 }
27439
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
877
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
878 /*
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
879 * Possibly another connected resource of our JID (see XEP-0045
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
880 * v1.24 section 7.1.10) being disconnected. Should be
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
881 * distinguished by the item_jid.
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
882 * Also possibly works around bits of an Openfire bug. See
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
883 * #8319.
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
884 */
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
885 if (is_our_resource && !purple_strequal(from, item_jid)) {
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
886 /* TODO: When the above is a loop, this needs to still act
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
887 * sanely for all cases (this code is a little fragile). */
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
888 if (!kick && !nick_change)
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
889 /* Presumably, kicks and nick changes also affect us. */
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
890 is_our_resource = FALSE;
e1090ed76286 Notice when the MUC item JID on unavailable presence references another resource. Refs #8319.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
891 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
892 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
893 if(!nick_change) {
27362
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
894 if (is_our_resource) {
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
895 if (kick)
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
896 purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), jid->resource,
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
897 status, PURPLE_MESSAGE_SYSTEM, time(NULL));
c4196cd47602 Add support for XEP-0045 code 307 (a.k.a. kicks).
Paul Aurich <paul@darkrain42.org>
parents: 27359
diff changeset
898
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
899 serv_got_chat_left(js->gc, chat->id);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
900 jabber_chat_destroy(chat);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
901 } else {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
902 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
903 status);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
904 jabber_chat_remove_handle(chat, jid->resource);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
905 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
906 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
907 } else {
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
908 /* A type that isn't available or unavailable */
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
909 purple_debug_error("jabber", "MUC presence with bad type: %s\n",
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
910 type);
25597
54dcfe059dd4 *** Plucked rev 3993504a (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents: 24721
diff changeset
911
27364
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
912 jabber_id_free(jid);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
913 g_free(avatar_hash);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
914 g_free(status);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
915 g_free(nickname);
735e58197140 Rearranging this section and adding a catch for stuff that can't happen
Paul Aurich <paul@darkrain42.org>
parents: 27363
diff changeset
916 g_return_if_reached();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
917 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
918 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
919 buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
18691
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
920 jid->node ? "@" : "", jid->domain);
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
921 if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) {
18691
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
922 if(!jid->node || strcmp(jid->node,js->user->node) || strcmp(jid->domain,js->user->domain)) {
22486
3225c99785b8 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <mark@kingant.net>
parents: 21688
diff changeset
923 purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n",
18691
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
924 buddy_name, purple_account_get_username(js->gc->account), js->gc->account);
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
925 jabber_id_free(jid);
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
926 g_free(avatar_hash);
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
927 g_free(buddy_name);
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
928 g_free(nickname);
18691
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
929 g_free(status);
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
930 return;
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
931 } else {
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
932 /* this is a different resource of our own account. Resume even when this account isn't on our blist */
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
933 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
934 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
935
18691
54a5fbeadd7c 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 <pidgin@monitzer.com>
parents: 18684
diff changeset
936 if(b && avatar_hash) {
16386
e0c9a46b459f Move the prpl icon checksum code into the core, so we can delete the
Richard Laager <rlaager@wiktel.com>
parents: 15957
diff changeset
937 const char *avatar_hash2 = purple_buddy_icons_get_checksum_for_user(b);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
938 if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
939 JabberIq *iq;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
940 xmlnode *vcard;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
941
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
942 /* XXX this is a crappy way of trying to prevent
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
943 * someone from spamming us with presence packets
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
944 * and causing us to DoS ourselves...what we really
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
945 * need is a queue system that can throttle itself,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
946 * but i'm too tired to write that right now */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
947 if(!g_slist_find(js->pending_avatar_requests, jb)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
948
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
949 js->pending_avatar_requests = g_slist_prepend(js->pending_avatar_requests, jb);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
950
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
951 iq = jabber_iq_new(js, JABBER_IQ_GET);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
952 xmlnode_set_attrib(iq->node, "to", buddy_name);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
953 vcard = xmlnode_new_child(iq->node, "vCard");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
954 xmlnode_set_namespace(vcard, "vcard-temp");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
955
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
956 jabber_iq_set_callback(iq, jabber_vcard_parse_avatar, NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
957 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
958 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
959 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
960 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
961
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
962 if(state == JABBER_BUDDY_STATE_ERROR ||
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
963 (type && (g_str_equal(type, "unavailable") ||
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
964 g_str_equal(type, "unsubscribed")))) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
965 PurpleConversation *conv;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
966
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
967 jabber_buddy_remove_resource(jb, jid->resource);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
968 if((conv = jabber_find_unnormalized_conv(from, js->gc->account)))
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
969 purple_conversation_set_name(conv, buddy_name);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
970
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
971 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
972 jbr = jabber_buddy_track_resource(jb, jid->resource, priority,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
973 state, status);
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
974 if (idle) {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
975 jbr->idle = time(NULL) - idle;
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
976 } else {
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
977 jbr->idle = 0;
17882
f88b3a093cba 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 <pidgin@monitzer.com>
parents: 17878
diff changeset
978 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
979 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
980
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
981 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) {
20571
c97e3ab9ef11 Music support for Google Talk
Sean Egan <seanegan@gmail.com>
parents: 20570
diff changeset
982 jabber_google_presence_incoming(js, buddy_name, found_jbr);
c97e3ab9ef11 Music support for Google Talk
Sean Egan <seanegan@gmail.com>
parents: 20570
diff changeset
983 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);
25228
6fed1bb3b02e Fix merge
Marcus Lundblad <ml@update.uu.se>
parents: 25227
diff changeset
984 purple_prpl_got_user_idle(js->gc->account, buddy_name, found_jbr->idle, found_jbr->idle);
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
985 if (nickname)
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
986 serv_got_alias(js->gc, buddy_name, nickname);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
987 } else {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
988 purple_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
989 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
990 g_free(buddy_name);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
991 }
26753
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
992
27363
eff7db4db632 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <paul@darkrain42.org>
parents: 27362
diff changeset
993 if (caps && !type) {
26753
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
994 /* handle Entity Capabilities (XEP-0115) */
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
995 const char *node = xmlnode_get_attrib(caps, "node");
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
996 const char *ver = xmlnode_get_attrib(caps, "ver");
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
997 const char *hash = xmlnode_get_attrib(caps, "hash");
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
998 const char *ext = xmlnode_get_attrib(caps, "ext");
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
999
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1000 /* v1.3 uses: node, ver, and optionally ext.
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1001 * v1.5 uses: node, ver, and hash. */
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1002 if (node && *node && ver && *ver) {
26846
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1003 gchar **exts = ext && *ext ? g_strsplit(ext, " ", -1) : NULL;
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1004 jbr = jabber_buddy_find_resource(jb, jid->resource);
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1005
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1006 /* Look it up if we don't already have all this information */
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1007 if (!jbr || !jbr->caps.info ||
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1008 !g_str_equal(node, jbr->caps.info->tuple.node) ||
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1009 !g_str_equal(ver, jbr->caps.info->tuple.ver) ||
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1010 !purple_strequal(hash, jbr->caps.info->tuple.hash) ||
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1011 !jabber_caps_exts_known(jbr->caps.info, (gchar **)exts)) {
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1012 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1);
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1013 userdata->js = js;
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1014 userdata->jb = jb;
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1015 userdata->from = g_strdup(from);
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1016 jabber_caps_get_info(js, from, node, ver, hash, exts,
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1017 (jabber_caps_get_info_cb)jabber_presence_set_capabilities,
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1018 userdata);
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1019 } else {
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1020 if (exts)
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1021 g_strfreev(exts);
d0a049ede31e Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <paul@darkrain42.org>
parents: 26842
diff changeset
1022 }
26753
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1023 }
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1024 }
09dc63a697e1 Fetch and track capabilities for MUC members. Add a further constraint for
Paul Aurich <paul@darkrain42.org>
parents: 26752
diff changeset
1025
26774
867e231bffbc A little bit better (free memory and support receiving the nick in subscriptions) and Changelog.
Paul Aurich <paul@darkrain42.org>
parents: 26773
diff changeset
1026 g_free(nickname);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1027 g_free(status);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1028 jabber_id_free(jid);
17602
6e0961356343 Don't check for null before calling free. I can't help but get rid
Mark Doliner <mark@kingant.net>
parents: 17576
diff changeset
1029 g_free(avatar_hash);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1030 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1031
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1032 void jabber_presence_subscription_set(JabberStream *js, const char *who, const char *type)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1033 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1034 xmlnode *presence = xmlnode_new("presence");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1035
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1036 xmlnode_set_attrib(presence, "to", who);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1037 xmlnode_set_attrib(presence, "type", type);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1038
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1039 jabber_send(js, presence);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1040 xmlnode_free(presence);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1041 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1042
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
1043 void purple_status_to_jabber(const PurpleStatus *status, JabberBuddyState *state, char **msg, int *priority)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1044 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1045 const char *status_id = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1046 const char *formatted_msg = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1047
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1048 if(state) *state = JABBER_BUDDY_STATE_UNKNOWN;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1049 if(msg) *msg = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1050 if(priority) *priority = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1051
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1052 if(!status) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1053 if(state) *state = JABBER_BUDDY_STATE_UNAVAILABLE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1054 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1055 if(state) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
1056 status_id = purple_status_get_id(status);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1057 *state = jabber_buddy_status_id_get_state(status_id);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1058 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1059
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1060 if(msg) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
1061 formatted_msg = purple_status_get_attr_string(status, "message");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1062
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1063 /* if the message is blank, then there really isn't a message */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1064 if(formatted_msg && !*formatted_msg)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1065 formatted_msg = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1066
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1067 if(formatted_msg)
17576
d495103dcf88 Two questions:
Mark Doliner <mark@kingant.net>
parents: 17363
diff changeset
1068 *msg = purple_markup_strip_html(formatted_msg);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1069 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1070
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1071 if(priority)
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15746
diff changeset
1072 *priority = purple_status_get_attr_int(status, "priority");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1073 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1074 }