Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
1 | /* |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
2 | * purple - Jabber Protocol Plugin |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
3 | * |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
4 | * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com> |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
5 | * |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
6 | * This program is free software; you can redistribute it and/or modify |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
7 | * it under the terms of the GNU General Public License as published by |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
8 | * the Free Software Foundation; either version 2 of the License, or |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
9 | * (at your option) any later version. |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
10 | * |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
11 | * This program is distributed in the hope that it will be useful, |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
14 | * GNU General Public License for more details. |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
15 | * |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
16 | * You should have received a copy of the GNU General Public License |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
17 | * along with this program; if not, write to the Free Software |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
19 | * |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
20 | */ |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
21 | |
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
22 | #include "internal.h" |
|
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
23 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
24 | #include "debug.h" |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
25 | #include "caps.h" |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
26 | #include "cipher.h" |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
27 | #include "iq.h" |
|
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
28 | #include "presence.h" |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
29 | #include "util.h" |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
30 | |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
31 | #define JABBER_CAPS_FILENAME "xmpp-caps.xml" |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
32 | |
|
24732
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
33 | typedef struct _JabberDataFormField { |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
34 | gchar *var; |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
35 | GList *values; |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
36 | } JabberDataFormField; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
37 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
38 | static GHashTable *capstable = NULL; /* JabberCapsTuple -> JabberCapsClientInfo */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
39 | static GHashTable *nodetable = NULL; /* char *node -> JabberCapsNodeExts */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
40 | static guint save_timer = 0; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
41 | |
|
24732
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
42 | /** |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
43 | * Processes a query-node and returns a JabberCapsClientInfo object with all relevant info. |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
44 | * |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
45 | * @param query A query object. |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
46 | * @return A JabberCapsClientInfo object. |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
47 | */ |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
48 | static JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query); |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
49 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
50 | /* Free a GList of allocated char* */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
51 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
52 | free_string_glist(GList *list) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
53 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
54 | g_list_foreach(list, (GFunc)g_free, NULL); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
55 | g_list_free(list); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
56 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
57 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
58 | static JabberCapsNodeExts* |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
59 | jabber_caps_node_exts_ref(JabberCapsNodeExts *exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
60 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
61 | g_return_val_if_fail(exts != NULL, NULL); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
62 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
63 | ++exts->ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
64 | return exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
65 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
66 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
67 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
68 | jabber_caps_node_exts_unref(JabberCapsNodeExts *exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
69 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
70 | if (exts == NULL) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
71 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
72 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
73 | g_return_if_fail(exts->ref != 0); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
74 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
75 | if (--exts->ref != 0) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
76 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
77 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
78 | g_hash_table_destroy(exts->exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
79 | g_free(exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
80 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
81 | |
|
24879
823943d2f2b9
Rename a few variables
Paul Aurich <darkrain42@pidgin.im>
parents:
24878
diff
changeset
|
82 | static guint jabber_caps_hash(gconstpointer data) { |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
83 | const JabberCapsTuple *key = data; |
|
24879
823943d2f2b9
Rename a few variables
Paul Aurich <darkrain42@pidgin.im>
parents:
24878
diff
changeset
|
84 | guint nodehash = g_str_hash(key->node); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
85 | guint verhash = g_str_hash(key->ver); |
|
26905
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
86 | /* |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
87 | * 'hash' was optional in XEP-0115 v1.4 and g_str_hash crashes on NULL >:O. |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
88 | * Okay, maybe I've played too much Zelda, but that looks like |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
89 | * a Deku Shrub... |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
90 | */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
91 | guint hashhash = (key->hash ? g_str_hash(key->hash) : 0); |
|
23596
164fbee281c1
* fixing a bug in jabber_caps_compare()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23595
diff
changeset
|
92 | return nodehash ^ verhash ^ hashhash; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
93 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
94 | |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
95 | static gboolean jabber_caps_compare(gconstpointer v1, gconstpointer v2) { |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
96 | const JabberCapsTuple *name1 = v1; |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
97 | const JabberCapsTuple *name2 = v2; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
98 | |
|
26905
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
99 | return g_str_equal(name1->node, name2->node) && |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
100 | g_str_equal(name1->ver, name2->ver) && |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
101 | purple_strequal(name1->hash, name2->hash); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
102 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
103 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
104 | static void |
|
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
105 | jabber_caps_client_info_destroy(JabberCapsClientInfo *info) |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
106 | { |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
107 | if (info == NULL) |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
108 | return; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
109 | |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
110 | while(info->identities) { |
|
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
111 | JabberIdentity *id = info->identities->data; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
112 | g_free(id->category); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
113 | g_free(id->type); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
114 | g_free(id->name); |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
115 | g_free(id->lang); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
116 | g_free(id); |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
117 | info->identities = g_list_delete_link(info->identities, info->identities); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
118 | } |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
119 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
120 | free_string_glist(info->features); |
|
27040
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
121 | |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
122 | while (info->forms) { |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
123 | xmlnode_free(info->forms->data); |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
124 | info->forms = g_list_delete_link(info->forms, info->forms); |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
125 | } |
|
23594
f80bec337aa7
* changed storage format for cache to mirror all needed features for XEP-0115v1.5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23593
diff
changeset
|
126 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
127 | jabber_caps_node_exts_unref(info->exts); |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
128 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
129 | g_free((char *)info->tuple.node); |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
130 | g_free((char *)info->tuple.ver); |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
131 | g_free((char *)info->tuple.hash); |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
132 | |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
133 | g_free(info); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
134 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
135 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
136 | /* NOTE: Takes a reference to the exts, unref it if you don't really want to |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
137 | * keep it around. */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
138 | static JabberCapsNodeExts* |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
139 | jabber_caps_find_exts_by_node(const char *node) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
140 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
141 | JabberCapsNodeExts *exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
142 | if (NULL == (exts = g_hash_table_lookup(nodetable, node))) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
143 | exts = g_new0(JabberCapsNodeExts, 1); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
144 | exts->exts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
145 | (GDestroyNotify)free_string_glist); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
146 | g_hash_table_insert(nodetable, g_strdup(node), jabber_caps_node_exts_ref(exts)); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
147 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
148 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
149 | return jabber_caps_node_exts_ref(exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
150 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
151 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
152 | static void |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
153 | exts_to_xmlnode(gconstpointer key, gconstpointer value, gpointer user_data) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
154 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
155 | const char *identifier = key; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
156 | const GList *features = value, *node; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
157 | xmlnode *client = user_data, *ext, *feature; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
158 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
159 | ext = xmlnode_new_child(client, "ext"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
160 | xmlnode_set_attrib(ext, "identifier", identifier); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
161 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
162 | for (node = features; node; node = node->next) { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
163 | feature = xmlnode_new_child(ext, "feature"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
164 | xmlnode_set_attrib(feature, "var", (const gchar *)node->data); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
165 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
166 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
167 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
168 | static void jabber_caps_store_client(gpointer key, gpointer value, gpointer user_data) { |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
169 | const JabberCapsTuple *tuple = key; |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
170 | const JabberCapsClientInfo *props = value; |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
171 | xmlnode *root = user_data; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
172 | xmlnode *client = xmlnode_new_child(root, "client"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
173 | GList *iter; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
174 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
175 | xmlnode_set_attrib(client, "node", tuple->node); |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
176 | xmlnode_set_attrib(client, "ver", tuple->ver); |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
177 | if (tuple->hash) |
|
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
178 | xmlnode_set_attrib(client, "hash", tuple->hash); |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
179 | for(iter = props->identities; iter; iter = g_list_next(iter)) { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
180 | JabberIdentity *id = iter->data; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
181 | xmlnode *identity = xmlnode_new_child(client, "identity"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
182 | xmlnode_set_attrib(identity, "category", id->category); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
183 | xmlnode_set_attrib(identity, "type", id->type); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
184 | if (id->name) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
185 | xmlnode_set_attrib(identity, "name", id->name); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
186 | if (id->lang) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
187 | xmlnode_set_attrib(identity, "lang", id->lang); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
188 | } |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
189 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
190 | for(iter = props->features; iter; iter = g_list_next(iter)) { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
191 | const char *feat = iter->data; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
192 | xmlnode *feature = xmlnode_new_child(client, "feature"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
193 | xmlnode_set_attrib(feature, "var", feat); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
194 | } |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
195 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
196 | for(iter = props->forms; iter; iter = g_list_next(iter)) { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
197 | /* FIXME: See #7814 */ |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
198 | xmlnode *xdata = iter->data; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
199 | xmlnode_insert_child(client, xmlnode_copy(xdata)); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
200 | } |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
201 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
202 | /* TODO: Ideally, only save this once-per-node... */ |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
203 | if (props->exts) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
204 | g_hash_table_foreach(props->exts->exts, (GHFunc)exts_to_xmlnode, client); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
205 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
206 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
207 | static gboolean |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
208 | do_jabber_caps_store(gpointer data) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
209 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
210 | char *str; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
211 | int length = 0; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
212 | xmlnode *root = xmlnode_new("capabilities"); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
213 | g_hash_table_foreach(capstable, jabber_caps_store_client, root); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
214 | str = xmlnode_to_formatted_str(root, &length); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
215 | xmlnode_free(root); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
216 | purple_util_write_data_to_file(JABBER_CAPS_FILENAME, str, length); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
217 | g_free(str); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
218 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
219 | save_timer = 0; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
220 | return FALSE; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
221 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
222 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
223 | static void |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
224 | schedule_caps_save(void) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
225 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
226 | if (save_timer == 0) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
227 | save_timer = purple_timeout_add_seconds(5, do_jabber_caps_store, NULL); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
228 | } |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
229 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
230 | static void |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
231 | jabber_caps_load(void) |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
232 | { |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
233 | xmlnode *capsdata = purple_util_read_xml_from_file(JABBER_CAPS_FILENAME, "XMPP capabilities cache"); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
234 | xmlnode *client; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
235 | |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
236 | if(!capsdata) |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
237 | return; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
238 | |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
239 | if (strcmp(capsdata->name, "capabilities") != 0) { |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
240 | xmlnode_free(capsdata); |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
241 | return; |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
242 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
243 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
244 | for(client = capsdata->child; client; client = client->next) { |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
245 | if(client->type != XMLNODE_TYPE_TAG) |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
246 | continue; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
247 | if(!strcmp(client->name, "client")) { |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
248 | JabberCapsClientInfo *value = g_new0(JabberCapsClientInfo, 1); |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
249 | JabberCapsTuple *key = (JabberCapsTuple*)&value->tuple; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
250 | xmlnode *child; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
251 | JabberCapsNodeExts *exts = NULL; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
252 | key->node = g_strdup(xmlnode_get_attrib(client,"node")); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
253 | key->ver = g_strdup(xmlnode_get_attrib(client,"ver")); |
|
23594
f80bec337aa7
* changed storage format for cache to mirror all needed features for XEP-0115v1.5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23593
diff
changeset
|
254 | key->hash = g_strdup(xmlnode_get_attrib(client,"hash")); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
255 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
256 | /* v1.3 capabilities */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
257 | if (key->hash == NULL) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
258 | exts = jabber_caps_find_exts_by_node(key->node); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
259 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
260 | for(child = client->child; child; child = child->next) { |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
261 | if(child->type != XMLNODE_TYPE_TAG) |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
262 | continue; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
263 | if(!strcmp(child->name,"feature")) { |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
264 | const char *var = xmlnode_get_attrib(child, "var"); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
265 | if(!var) |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
266 | continue; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
267 | value->features = g_list_append(value->features,g_strdup(var)); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
268 | } else if(!strcmp(child->name,"identity")) { |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
269 | const char *category = xmlnode_get_attrib(child, "category"); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
270 | const char *type = xmlnode_get_attrib(child, "type"); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
271 | const char *name = xmlnode_get_attrib(child, "name"); |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
272 | const char *lang = xmlnode_get_attrib(child, "lang"); |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
273 | JabberIdentity *id; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
274 | |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
275 | if (!category || !type) |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
276 | continue; |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
277 | |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
278 | id = g_new0(JabberIdentity, 1); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
279 | id->category = g_strdup(category); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
280 | id->type = g_strdup(type); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
281 | id->name = g_strdup(name); |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
282 | id->lang = g_strdup(lang); |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
283 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
284 | value->identities = g_list_append(value->identities,id); |
|
23594
f80bec337aa7
* changed storage format for cache to mirror all needed features for XEP-0115v1.5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23593
diff
changeset
|
285 | } else if(!strcmp(child->name,"x")) { |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
286 | /* TODO: See #7814 -- this might cause problems if anyone |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
287 | * ever actually specifies forms. In fact, for this to |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
288 | * work properly, that bug needs to be fixed in |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
289 | * xmlnode_from_str, not the output version... */ |
|
23594
f80bec337aa7
* changed storage format for cache to mirror all needed features for XEP-0115v1.5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23593
diff
changeset
|
290 | value->forms = g_list_append(value->forms, xmlnode_copy(child)); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
291 | } else if (!strcmp(child->name, "ext") && key->hash != NULL) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
292 | purple_debug_warning("jabber", "Ignoring exts when reading new-style caps\n"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
293 | } else if (!strcmp(child->name, "ext")) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
294 | /* TODO: Do we care about reading in the identities listed here? */ |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
295 | const char *identifier = xmlnode_get_attrib(child, "identifier"); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
296 | xmlnode *node; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
297 | GList *features = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
298 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
299 | if (!identifier) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
300 | continue; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
301 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
302 | for (node = child->child; node; node = node->next) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
303 | if (node->type != XMLNODE_TYPE_TAG) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
304 | continue; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
305 | if (!strcmp(node->name, "feature")) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
306 | const char *var = xmlnode_get_attrib(node, "var"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
307 | if (!var) |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
308 | continue; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
309 | features = g_list_prepend(features, g_strdup(var)); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
310 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
311 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
312 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
313 | if (features) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
314 | g_hash_table_insert(exts->exts, g_strdup(identifier), |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
315 | features); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
316 | } else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
317 | purple_debug_warning("jabber", "Caps ext %s had no features.\n", |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
318 | identifier); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
319 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
320 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
321 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
322 | value->exts = exts; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
323 | g_hash_table_replace(capstable, key, value); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
324 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
325 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
326 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
327 | xmlnode_free(capsdata); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
328 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
329 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
330 | void jabber_caps_init(void) |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
331 | { |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
332 | nodetable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_caps_node_exts_unref); |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
333 | capstable = g_hash_table_new_full(jabber_caps_hash, jabber_caps_compare, NULL, (GDestroyNotify)jabber_caps_client_info_destroy); |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
334 | jabber_caps_load(); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
335 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
336 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
337 | void jabber_caps_uninit(void) |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
338 | { |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
339 | if (save_timer != 0) { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
340 | purple_timeout_remove(save_timer); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
341 | save_timer = 0; |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
342 | do_jabber_caps_store(NULL); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
343 | } |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
344 | g_hash_table_destroy(capstable); |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
345 | g_hash_table_destroy(nodetable); |
|
27028
1a2ef7ddb463
Clean up jabber prpl memory allocations on uninit.
Nick Hebner <hebnern@gmail.com>
parents:
27015
diff
changeset
|
346 | capstable = nodetable = NULL; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
347 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
348 | |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
349 | gboolean jabber_caps_exts_known(const JabberCapsClientInfo *info, |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
350 | char **exts) |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
351 | { |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
352 | int i; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
353 | g_return_val_if_fail(info != NULL, FALSE); |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
354 | |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
355 | if (!exts) |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
356 | return TRUE; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
357 | |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
358 | for (i = 0; exts[i]; ++i) { |
|
27072
1cefe8bcdc2a
I forgot to finish this comment before coming back from dinner and committing.
Paul Aurich <darkrain42@pidgin.im>
parents:
27068
diff
changeset
|
359 | /* Hack since we advertise the ext along with v1.5 caps but don't |
|
1cefe8bcdc2a
I forgot to finish this comment before coming back from dinner and committing.
Paul Aurich <darkrain42@pidgin.im>
parents:
27068
diff
changeset
|
360 | * store any exts */ |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
361 | if (g_str_equal(exts[i], "voice-v1") && !info->exts) |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
362 | continue; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
363 | if (!info->exts || |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
364 | !g_hash_table_lookup(info->exts->exts, exts[i])) |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
365 | return FALSE; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
366 | } |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
367 | |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
368 | return TRUE; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
369 | } |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
370 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
371 | typedef struct _jabber_caps_cbplususerdata { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
372 | guint ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
373 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
374 | jabber_caps_get_info_cb cb; |
|
24876
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
375 | gpointer cb_data; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
376 | |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
377 | char *who; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
378 | char *node; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
379 | char *ver; |
|
23591
ba1e3ed78d40
* pass hash type to the caps handling functions
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23590
diff
changeset
|
380 | char *hash; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
381 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
382 | JabberCapsClientInfo *info; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
383 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
384 | GList *exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
385 | guint extOutstanding; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
386 | JabberCapsNodeExts *node_exts; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
387 | } jabber_caps_cbplususerdata; |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
388 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
389 | static jabber_caps_cbplususerdata* |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
390 | cbplususerdata_ref(jabber_caps_cbplususerdata *data) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
391 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
392 | g_return_val_if_fail(data != NULL, NULL); |
|
19922
6b9cf9463ea4
Some clients don't put the node in the 115 disco response, so send the node to the callback
Sean Egan <seanegan@pidgin.im>
parents:
19919
diff
changeset
|
393 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
394 | ++data->ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
395 | return data; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
396 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
397 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
398 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
399 | cbplususerdata_unref(jabber_caps_cbplususerdata *data) |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26042
diff
changeset
|
400 | { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
401 | if (data == NULL) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
402 | return; |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
403 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
404 | g_return_if_fail(data->ref != 0); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
405 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
406 | if (--data->ref > 0) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
407 | return; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
408 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
409 | g_free(data->who); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
410 | g_free(data->node); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
411 | g_free(data->ver); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
412 | g_free(data->hash); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
413 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
414 | /* If we have info here, it's already in the capstable, so don't free it */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
415 | if (data->exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
416 | free_string_glist(data->exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
417 | if (data->node_exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
418 | jabber_caps_node_exts_unref(data->node_exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
419 | g_free(data); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
420 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
421 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
422 | static void |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
423 | jabber_caps_get_info_complete(jabber_caps_cbplususerdata *userdata) |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26042
diff
changeset
|
424 | { |
|
26992
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
425 | if (userdata->cb) { |
|
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
426 | userdata->cb(userdata->info, userdata->exts, userdata->cb_data); |
|
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
427 | userdata->info = NULL; |
|
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
428 | userdata->exts = NULL; |
|
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
429 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
430 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
431 | if (userdata->ref != 1) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
432 | purple_debug_warning("jabber", "Lost a reference to caps cbdata: %d\n", |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
433 | userdata->ref); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
434 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
435 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
436 | static void |
| 26708 | 437 | jabber_caps_client_iqcb(JabberStream *js, const char *from, JabberIqType type, |
| 438 | const char *id, xmlnode *packet, gpointer data) | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
439 | { |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
440 | xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", |
|
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
441 | "http://jabber.org/protocol/disco#info"); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
442 | jabber_caps_cbplususerdata *userdata = data; |
|
24876
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
443 | JabberCapsClientInfo *info = NULL, *value; |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
444 | JabberCapsTuple key; |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
445 | |
| 26708 | 446 | if (!query || type == JABBER_IQ_ERROR) { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
447 | /* Any outstanding exts will be dealt with via ref-counting */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
448 | userdata->cb(NULL, NULL, userdata->cb_data); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
449 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
450 | return; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
451 | } |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
452 | |
|
24727
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
453 | /* check hash */ |
|
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
454 | info = jabber_caps_parse_client_info(query); |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
455 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
456 | /* Only validate if these are v1.5 capabilities */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
457 | if (userdata->hash) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
458 | gchar *hash = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
459 | if (!strcmp(userdata->hash, "sha-1")) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
460 | hash = jabber_caps_calculate_hash(info, "sha1"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
461 | } else if (!strcmp(userdata->hash, "md5")) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
462 | hash = jabber_caps_calculate_hash(info, "md5"); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
463 | } |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
464 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
465 | if (!hash || strcmp(hash, userdata->ver)) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
466 | purple_debug_warning("jabber", "Could not validate caps info from %s\n", |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
467 | xmlnode_get_attrib(packet, "from")); |
|
19922
6b9cf9463ea4
Some clients don't put the node in the 115 disco response, so send the node to the callback
Sean Egan <seanegan@pidgin.im>
parents:
19919
diff
changeset
|
468 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
469 | userdata->cb(NULL, NULL, userdata->cb_data); |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
470 | jabber_caps_client_info_destroy(info); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
471 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
472 | g_free(hash); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
473 | return; |
|
24029
b6955f09ca0b
Don't look up caps exts when the initial caps discovery wasn't successful.
Daniel Atallah <datallah@pidgin.im>
parents:
21720
diff
changeset
|
474 | } |
|
b6955f09ca0b
Don't look up caps exts when the initial caps discovery wasn't successful.
Daniel Atallah <datallah@pidgin.im>
parents:
21720
diff
changeset
|
475 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
476 | g_free(hash); |
|
24727
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
477 | } |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
478 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
479 | if (!userdata->hash && userdata->node_exts) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
480 | /* If the ClientInfo doesn't have information about the exts, give them |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
481 | * ours (along with our ref) */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
482 | info->exts = userdata->node_exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
483 | userdata->node_exts = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
484 | } |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
485 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
486 | key.node = userdata->node; |
|
24876
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
487 | key.ver = userdata->ver; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
488 | key.hash = userdata->hash; |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
489 | |
|
24876
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
490 | /* Use the copy of this data already in the table if it exists or insert |
|
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
491 | * a new one if we need to */ |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
492 | if ((value = g_hash_table_lookup(capstable, &key))) { |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
493 | jabber_caps_client_info_destroy(info); |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
494 | info = value; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
495 | } else { |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
496 | JabberCapsTuple *n_key = (JabberCapsTuple *)&info->tuple; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
497 | n_key->node = userdata->node; |
|
24876
5861f7210c6c
Rename user_data to cb_data (there were too many 'userdata'/'user_data's).
Paul Aurich <darkrain42@pidgin.im>
parents:
24742
diff
changeset
|
498 | n_key->ver = userdata->ver; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
499 | n_key->hash = userdata->hash; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
500 | userdata->node = userdata->ver = userdata->hash = NULL; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
501 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
502 | /* The capstable gets a reference */ |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
503 | g_hash_table_insert(capstable, n_key, info); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
504 | schedule_caps_save(); |
|
24727
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
505 | } |
|
21680
1b52846a0d97
Fix a discovery related crash. I think this still needs better error handling. Fixes #3995.
Daniel Atallah <datallah@pidgin.im>
parents:
21491
diff
changeset
|
506 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
507 | userdata->info = info; |
|
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
508 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
509 | if (userdata->extOutstanding == 0) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
510 | jabber_caps_get_info_complete(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
511 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
512 | cbplususerdata_unref(userdata); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
513 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
514 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
515 | typedef struct { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
516 | const char *name; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
517 | jabber_caps_cbplususerdata *data; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
518 | } ext_iq_data; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
519 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
520 | static void |
| 26708 | 521 | jabber_caps_ext_iqcb(JabberStream *js, const char *from, JabberIqType type, |
| 522 | const char *id, xmlnode *packet, gpointer data) | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
523 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
524 | xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
525 | "http://jabber.org/protocol/disco#info"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
526 | xmlnode *child; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
527 | ext_iq_data *userdata = data; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
528 | GList *features = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
529 | JabberCapsNodeExts *node_exts; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
530 | |
| 26708 | 531 | if (!query || type == JABBER_IQ_ERROR) { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
532 | cbplususerdata_unref(userdata->data); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
533 | g_free(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
534 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
535 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
536 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
537 | /* So, we decrement this after checking for an error, which means that |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
538 | * if there *is* an error, we'll never call the callback passed to |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
539 | * jabber_caps_get_info. We will still free all of our data, though. |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
540 | */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
541 | --userdata->data->extOutstanding; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
542 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
543 | for (child = xmlnode_get_child(query, "feature"); child; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
544 | child = xmlnode_get_next_twin(child)) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
545 | const char *var = xmlnode_get_attrib(child, "var"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
546 | if (var) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
547 | features = g_list_prepend(features, g_strdup(var)); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
548 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
549 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
550 | node_exts = (userdata->data->info ? userdata->data->info->exts : |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
551 | userdata->data->node_exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
552 | g_hash_table_insert(node_exts->exts, g_strdup(userdata->name), features); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
553 | schedule_caps_save(); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
554 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
555 | /* Are we done? */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
556 | if (userdata->data->info && userdata->data->extOutstanding == 0) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
557 | jabber_caps_get_info_complete(userdata->data); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
558 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
559 | cbplususerdata_unref(userdata->data); |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
560 | g_free(userdata); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
561 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
562 | |
| 24720 | 563 | void jabber_caps_get_info(JabberStream *js, const char *who, const char *node, |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
564 | const char *ver, const char *hash, char **exts, |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
565 | jabber_caps_get_info_cb cb, gpointer user_data) |
| 24720 | 566 | { |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
567 | JabberCapsClientInfo *info; |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
568 | JabberCapsTuple key; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
569 | jabber_caps_cbplususerdata *userdata; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
570 | |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
571 | if (exts && hash) { |
|
26668
ef06285f3b64
Fix allowing gmail user to initiate voice call by advertising a specific ext
Paul Aurich <darkrain42@pidgin.im>
parents:
26658
diff
changeset
|
572 | purple_debug_info("jabber", "Ignoring exts in new-style caps from %s\n", |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
573 | who); |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
574 | g_strfreev(exts); |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
575 | exts = NULL; |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
576 | } |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
577 | |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
578 | /* Using this in a read-only fashion, so the cast is OK */ |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
579 | key.node = (char *)node; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
580 | key.ver = (char *)ver; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
581 | key.hash = (char *)hash; |
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
582 | |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
583 | info = g_hash_table_lookup(capstable, &key); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
584 | if (info && hash) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
585 | /* v1.5 - We already have all the information we care about */ |
|
26992
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
586 | if (cb) |
|
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
587 | cb(info, NULL, user_data); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
588 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
589 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
590 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
591 | userdata = g_new0(jabber_caps_cbplususerdata, 1); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
592 | /* This ref is given to fetching the basic node#ver info if we need it |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
593 | * or unrefed at the bottom of this function */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
594 | cbplususerdata_ref(userdata); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
595 | userdata->cb = cb; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
596 | userdata->cb_data = user_data; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
597 | userdata->who = g_strdup(who); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
598 | userdata->node = g_strdup(node); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
599 | userdata->ver = g_strdup(ver); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
600 | userdata->hash = g_strdup(hash); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
601 | |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
602 | if (info) { |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
603 | userdata->info = info; |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
604 | } else { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
605 | /* If we don't have the basic information about the client, we need |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
606 | * to fetch it. */ |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
607 | JabberIq *iq; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
608 | xmlnode *query; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
609 | char *nodever; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
610 | |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
611 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
612 | "http://jabber.org/protocol/disco#info"); |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
613 | query = xmlnode_get_child_with_namespace(iq->node, "query", |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
614 | "http://jabber.org/protocol/disco#info"); |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
615 | nodever = g_strdup_printf("%s#%s", node, ver); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
616 | xmlnode_set_attrib(query, "node", nodever); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
617 | g_free(nodever); |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
618 | xmlnode_set_attrib(iq->node, "to", who); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
619 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
620 | jabber_iq_set_callback(iq, jabber_caps_client_iqcb, userdata); |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
621 | jabber_iq_send(iq); |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
622 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
623 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
624 | /* Are there any exts that we don't recognize? */ |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
625 | if (exts) { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
626 | JabberCapsNodeExts *node_exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
627 | int i; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
628 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
629 | if (info) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
630 | if (info->exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
631 | node_exts = info->exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
632 | else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
633 | node_exts = info->exts = jabber_caps_find_exts_by_node(node); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
634 | } else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
635 | /* We'll put it in later once we have the client info */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
636 | node_exts = userdata->node_exts = jabber_caps_find_exts_by_node(node); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
637 | |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
638 | for (i = 0; exts[i]; ++i) { |
|
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
639 | userdata->exts = g_list_prepend(userdata->exts, exts[i]); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
640 | /* Look it up if we don't already know what it means */ |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
641 | if (!g_hash_table_lookup(node_exts->exts, exts[i])) { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
642 | JabberIq *iq; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
643 | xmlnode *query; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
644 | char *nodeext; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
645 | ext_iq_data *cbdata = g_new(ext_iq_data, 1); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
646 | |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
647 | cbdata->name = exts[i]; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
648 | cbdata->data = cbplususerdata_ref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
649 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
650 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
651 | "http://jabber.org/protocol/disco#info"); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
652 | query = xmlnode_get_child_with_namespace(iq->node, "query", |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
653 | "http://jabber.org/protocol/disco#info"); |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
654 | nodeext = g_strdup_printf("%s#%s", node, exts[i]); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
655 | xmlnode_set_attrib(query, "node", nodeext); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
656 | g_free(nodeext); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
657 | xmlnode_set_attrib(iq->node, "to", who); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
658 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
659 | jabber_iq_set_callback(iq, jabber_caps_ext_iqcb, cbdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
660 | jabber_iq_send(iq); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
661 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
662 | ++userdata->extOutstanding; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
663 | } |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
664 | exts[i] = NULL; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
665 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
666 | /* All the strings are now part of the GList, so don't need |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
667 | * g_strfreev. */ |
|
27068
3353c0f46a1a
Only call jabber_caps_get_info if we don't have all the information we want.
Paul Aurich <darkrain42@pidgin.im>
parents:
27067
diff
changeset
|
668 | g_free(exts); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
669 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
670 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
671 | if (userdata->info && userdata->extOutstanding == 0) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
672 | jabber_caps_get_info_complete(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
673 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
674 | } |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
675 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
676 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
677 | static gint |
|
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
678 | jabber_identity_compare(gconstpointer a, gconstpointer b) |
|
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
679 | { |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
680 | const JabberIdentity *ac; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
681 | const JabberIdentity *bc; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
682 | gint cat_cmp; |
|
23588
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
683 | gint typ_cmp; |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
684 | |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
685 | ac = a; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
686 | bc = b; |
|
19922
6b9cf9463ea4
Some clients don't put the node in the 115 disco response, so send the node to the callback
Sean Egan <seanegan@pidgin.im>
parents:
19919
diff
changeset
|
687 | |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
688 | if ((cat_cmp = strcmp(ac->category, bc->category)) == 0) { |
|
23588
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
689 | if ((typ_cmp = strcmp(ac->type, bc->type)) == 0) { |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
690 | if (!ac->lang && !bc->lang) { |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
691 | return 0; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
692 | } else if (ac->lang && !bc->lang) { |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
693 | return 1; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
694 | } else if (!ac->lang && bc->lang) { |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
695 | return -1; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
696 | } else { |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
697 | return strcmp(ac->lang, bc->lang); |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
698 | } |
|
23588
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
699 | } else { |
|
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
700 | return typ_cmp; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
701 | } |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
702 | } else { |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
703 | return cat_cmp; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
704 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
705 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
706 | |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
707 | static gchar *jabber_caps_get_formtype(const xmlnode *x) { |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
708 | xmlnode *formtypefield; |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
709 | formtypefield = xmlnode_get_child(x, "field"); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
710 | while (formtypefield && strcmp(xmlnode_get_attrib(formtypefield, "var"), "FORM_TYPE")) formtypefield = xmlnode_get_next_twin(formtypefield); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
711 | formtypefield = xmlnode_get_child(formtypefield, "value"); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
712 | return xmlnode_get_data(formtypefield);; |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
713 | } |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
714 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
715 | static gint |
|
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
716 | jabber_xdata_compare(gconstpointer a, gconstpointer b) |
|
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
717 | { |
|
23599
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
718 | const xmlnode *aformtypefield = a; |
|
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
719 | const xmlnode *bformtypefield = b; |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
720 | char *aformtype; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
721 | char *bformtype; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
722 | int result; |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
723 | |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
724 | aformtype = jabber_caps_get_formtype(aformtypefield); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
725 | bformtype = jabber_caps_get_formtype(bformtypefield); |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
726 | |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
727 | result = strcmp(aformtype, bformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
728 | g_free(aformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
729 | g_free(bformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
730 | return result; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
731 | } |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
732 | |
|
24732
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
733 | static JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query) |
|
7d4f758b7b0a
Move structures and function definitions in to caps.c and stop any other code from killing JabberCapsClientInfo structures (owned by the hash table)
Paul Aurich <darkrain42@pidgin.im>
parents:
24731
diff
changeset
|
734 | { |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
735 | xmlnode *child; |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
736 | JabberCapsClientInfo *info; |
|
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
737 | |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
738 | if (!query || strcmp(query->xmlns, "http://jabber.org/protocol/disco#info")) |
|
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
739 | return 0; |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
740 | |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
741 | info = g_new0(JabberCapsClientInfo, 1); |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
742 | |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
743 | for(child = query->child; child; child = child->next) { |
|
26973
385c3e633e1c
Skip iterating non-node children; thanks to Marcus for crashing me.
Paul Aurich <darkrain42@pidgin.im>
parents:
26905
diff
changeset
|
744 | if (child->type != XMLNODE_TYPE_TAG) |
|
385c3e633e1c
Skip iterating non-node children; thanks to Marcus for crashing me.
Paul Aurich <darkrain42@pidgin.im>
parents:
26905
diff
changeset
|
745 | continue; |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
746 | if (!strcmp(child->name,"identity")) { |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
747 | /* parse identity */ |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
748 | const char *category = xmlnode_get_attrib(child, "category"); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
749 | const char *type = xmlnode_get_attrib(child, "type"); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
750 | const char *name = xmlnode_get_attrib(child, "name"); |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
751 | const char *lang = xmlnode_get_attrib(child, "lang"); |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
752 | JabberIdentity *id; |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
753 | |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
754 | if (!category || !type) |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
755 | continue; |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
756 | |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
757 | id = g_new0(JabberIdentity, 1); |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
758 | id->category = g_strdup(category); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
759 | id->type = g_strdup(type); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
760 | id->name = g_strdup(name); |
|
24725
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
761 | id->lang = g_strdup(lang); |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
762 | |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
763 | info->identities = g_list_append(info->identities, id); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
764 | } else if (!strcmp(child->name, "feature")) { |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
765 | /* parse feature */ |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
766 | const char *var = xmlnode_get_attrib(child, "var"); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
767 | if (var) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
768 | info->features = g_list_prepend(info->features, g_strdup(var)); |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
769 | } else if (!strcmp(child->name, "x")) { |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
770 | if (child->xmlns && !strcmp(child->xmlns, "jabber:x:data")) { |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
771 | /* x-data form */ |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
772 | xmlnode *dataform = xmlnode_copy(child); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
773 | info->forms = g_list_append(info->forms, dataform); |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
774 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
775 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
776 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
777 | return info; |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
778 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
779 | |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
780 | static gint jabber_caps_xdata_field_compare(gconstpointer a, gconstpointer b) |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
781 | { |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
782 | const JabberDataFormField *ac = a; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
783 | const JabberDataFormField *bc = b; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
784 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
785 | return strcmp(ac->var, bc->var); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
786 | } |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
787 | |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
788 | static GList* jabber_caps_xdata_get_fields(const xmlnode *x) |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
789 | { |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
790 | GList *fields = NULL; |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
791 | xmlnode *field; |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
792 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
793 | if (!x) |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
794 | return NULL; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
795 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
796 | for (field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
797 | xmlnode *value; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
798 | JabberDataFormField *xdatafield = g_new0(JabberDataFormField, 1); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
799 | xdatafield->var = g_strdup(xmlnode_get_attrib(field, "var")); |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
800 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
801 | for (value = xmlnode_get_child(field, "value"); value; value = xmlnode_get_next_twin(value)) { |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
802 | gchar *val = xmlnode_get_data(value); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
803 | xdatafield->values = g_list_append(xdatafield->values, val); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
804 | } |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
805 | |
|
24722
4896d0884130
Use strcmp instead of a wrapper
Paul Aurich <darkrain42@pidgin.im>
parents:
24720
diff
changeset
|
806 | xdatafield->values = g_list_sort(xdatafield->values, (GCompareFunc)strcmp); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
807 | fields = g_list_append(fields, xdatafield); |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
808 | } |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
809 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
810 | fields = g_list_sort(fields, jabber_caps_xdata_field_compare); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
811 | return fields; |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
812 | } |
|
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
diff
changeset
|
813 | |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
814 | static GString* |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
815 | jabber_caps_verification_append(GString *verification, const gchar *str) |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
816 | { |
|
26996
44abdee116bf
Sadrul pointed me at g_markup_escape_text, thanks!
Paul Aurich <darkrain42@pidgin.im>
parents:
26995
diff
changeset
|
817 | char *tmp = g_markup_escape_text(str, -1); |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
818 | verification = g_string_append(verification, tmp); |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
819 | g_free(tmp); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
820 | return g_string_append_c(verification, '<'); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
821 | } |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
822 | |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
823 | gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info, const char *hash) |
|
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
824 | { |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
825 | GList *node; |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
826 | GString *verification; |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
827 | PurpleCipherContext *context; |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
828 | guint8 checksum[20]; |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
829 | gsize checksum_size = 20; |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
830 | gboolean success; |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
831 | |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
832 | if (!info || !(context = purple_cipher_context_new_by_name(hash, NULL))) |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
833 | return NULL; |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
834 | |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
835 | /* sort identities, features and x-data forms */ |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
836 | info->identities = g_list_sort(info->identities, jabber_identity_compare); |
|
24722
4896d0884130
Use strcmp instead of a wrapper
Paul Aurich <darkrain42@pidgin.im>
parents:
24720
diff
changeset
|
837 | info->features = g_list_sort(info->features, (GCompareFunc)strcmp); |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
838 | info->forms = g_list_sort(info->forms, jabber_xdata_compare); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
839 | |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
840 | verification = g_string_new(""); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
841 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
842 | /* concat identities to the verification string */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
843 | for (node = info->identities; node; node = node->next) { |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
844 | JabberIdentity *id = (JabberIdentity*)node->data; |
|
26996
44abdee116bf
Sadrul pointed me at g_markup_escape_text, thanks!
Paul Aurich <darkrain42@pidgin.im>
parents:
26995
diff
changeset
|
845 | char *category = g_markup_escape_text(id->category, -1); |
|
44abdee116bf
Sadrul pointed me at g_markup_escape_text, thanks!
Paul Aurich <darkrain42@pidgin.im>
parents:
26995
diff
changeset
|
846 | char *type = g_markup_escape_text(id->type, -1); |
|
27015
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
847 | char *lang = NULL; |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
848 | char *name = NULL; |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
849 | |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
850 | if (id->lang) |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
851 | lang = g_markup_escape_text(id->lang, -1); |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
852 | if (id->name) |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
853 | name = g_markup_escape_text(id->name, -1); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
854 | |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
855 | g_string_append_printf(verification, "%s/%s/%s/%s<", category, |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
856 | type, lang ? lang : "", name ? name : ""); |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
857 | |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
858 | g_free(category); |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
859 | g_free(type); |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
860 | g_free(lang); |
|
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
861 | g_free(name); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
862 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
863 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
864 | /* concat features to the verification string */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
865 | for (node = info->features; node; node = node->next) { |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
866 | verification = jabber_caps_verification_append(verification, node->data); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
867 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
868 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
869 | /* concat x-data forms to the verification string */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
870 | for(node = info->forms; node; node = node->next) { |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
871 | xmlnode *data = (xmlnode *)node->data; |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
872 | gchar *formtype = jabber_caps_get_formtype(data); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
873 | GList *fields = jabber_caps_xdata_get_fields(data); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
874 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
875 | /* append FORM_TYPE's field value to the verification string */ |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
876 | verification = jabber_caps_verification_append(verification, formtype); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
877 | g_free(formtype); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
878 | |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
879 | while (fields) { |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
880 | GList *value; |
|
23591
ba1e3ed78d40
* pass hash type to the caps handling functions
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23590
diff
changeset
|
881 | JabberDataFormField *field = (JabberDataFormField*)fields->data; |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
882 | |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
883 | if (strcmp(field->var, "FORM_TYPE")) { |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
884 | /* Append the "var" attribute */ |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
885 | verification = jabber_caps_verification_append(verification, field->var); |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
886 | /* Append <value/> elements' cdata */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
887 | for(value = field->values; value; value = value->next) { |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
888 | verification = jabber_caps_verification_append(verification, value->data); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
889 | g_free(value->data); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
890 | } |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
891 | } |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
892 | |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
893 | g_free(field->var); |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
894 | g_list_free(field->values); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
895 | |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
896 | fields = g_list_delete_link(fields, fields); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
897 | } |
|
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
898 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
899 | |
|
23593
149bce500f4e
* support for calculating both hashes, sha-1 and md5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23591
diff
changeset
|
900 | /* generate hash */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
901 | purple_cipher_context_append(context, (guchar*)verification->str, verification->len); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
902 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
903 | success = purple_cipher_context_digest(context, verification->len, |
|
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
904 | checksum, &checksum_size); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
905 | |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
906 | g_string_free(verification, TRUE); |
|
23590
2ccc80ff0134
* implemented jabber_caps_calcualte_hash() which calculates the SHA-1 hash for someones disco response according to XEP-0115
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23589
diff
changeset
|
907 | purple_cipher_context_destroy(context); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
908 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
909 | return (success ? purple_base64_encode(checksum, checksum_size) : NULL); |
|
23587
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
910 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
911 | |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
912 | void jabber_caps_calculate_own_hash(JabberStream *js) { |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
913 | JabberCapsClientInfo info; |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
914 | GList *iter = 0; |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
915 | GList *features = 0; |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
916 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
917 | if (!jabber_identities && !jabber_features) { |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
918 | /* This really shouldn't ever happen */ |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
919 | purple_debug_warning("jabber", "No features or identities, cannot calculate own caps hash.\n"); |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
920 | g_free(js->caps_hash); |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
921 | js->caps_hash = NULL; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
922 | return; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
923 | } |
|
23599
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
924 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
925 | /* build the currently-supported list of features */ |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
926 | if (jabber_features) { |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
927 | for (iter = jabber_features; iter; iter = iter->next) { |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
928 | JabberFeature *feat = iter->data; |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
929 | if(!feat->is_enabled || feat->is_enabled(js, feat->namespace)) { |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
930 | features = g_list_append(features, feat->namespace); |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
931 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
932 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
933 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
934 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
935 | info.features = features; |
|
26992
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
936 | info.identities = g_list_copy(jabber_identities); |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
937 | info.forms = NULL; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
938 | |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
939 | g_free(js->caps_hash); |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
940 | js->caps_hash = jabber_caps_calculate_hash(&info, "sha1"); |
|
26992
3a3f6cc07b02
Don't crash when the caps cb is NULL and don't corrupt jabber_identities
Paul Aurich <darkrain42@pidgin.im>
parents:
26973
diff
changeset
|
941 | g_list_free(info.identities); |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
942 | g_list_free(features); |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
943 | } |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
944 | |
|
24716
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
945 | const gchar* jabber_caps_get_own_hash(JabberStream *js) |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
946 | { |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
947 | if (!js->caps_hash) |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
948 | jabber_caps_calculate_own_hash(js); |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
949 | |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
950 | return js->caps_hash; |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
951 | } |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
952 | |
|
24717
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
953 | void jabber_caps_broadcast_change() |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
954 | { |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
955 | GList *node, *accounts = purple_accounts_get_all_active(); |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
956 | |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
957 | for (node = accounts; node; node = node->next) { |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
958 | PurpleAccount *account = node->data; |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
959 | const char *prpl_id = purple_account_get_protocol_id(account); |
|
24718
8507ef880d6d
Fix a null dereference on non-connected accounts
Paul Aurich <darkrain42@pidgin.im>
parents:
24717
diff
changeset
|
960 | if (!strcmp("prpl-jabber", prpl_id) && purple_account_is_connected(account)) { |
|
24717
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
961 | PurpleConnection *gc = purple_account_get_connection(account); |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
962 | jabber_presence_send(gc->proto_data, TRUE); |
|
23601
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
963 | } |
|
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
964 | } |
|
24717
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
965 | |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
966 | g_list_free(accounts); |
|
23601
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
967 | } |
|
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
968 |