Fri, 09 Jul 2010 22:49:17 +0000
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
(The part at fault is <field var='os_version'><value/></field>)
|
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 | * |
|
28322
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28321
diff
changeset
|
4 | * Purple is the legal property of its developers, whose names are too numerous |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28321
diff
changeset
|
5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28321
diff
changeset
|
6 | * source distribution. |
|
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
|
7 | * |
|
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 | * 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
|
9 | * 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
|
10 | * 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
|
11 | * (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
|
12 | * |
|
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 | * 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
|
14 | * 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
|
15 | * 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
|
16 | * 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
|
17 | * |
|
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 | * 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
|
19 | * along with this program; if not, write to the Free Software |
|
28321
c8d617c408ab
Update various header copyrights thanks to licensecheck.
Paul Aurich <darkrain42@pidgin.im>
parents:
28316
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
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
|
21 | * |
|
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
|
22 | */ |
|
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
|
23 | |
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
24 | #include "internal.h" |
|
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
25 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
26 | #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
|
27 | #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
|
28 | #include "cipher.h" |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
29 | #include "iq.h" |
|
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
30 | #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
|
31 | #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
|
32 | |
|
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
|
33 | #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
|
34 | |
|
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
|
35 | 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
|
36 | 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
|
37 | 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
|
38 | } 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
|
39 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
40 | 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
|
41 | 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
|
42 | 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
|
43 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
44 | /* 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
|
45 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
46 | 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
|
47 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
48 | 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
|
49 | 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
|
50 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
51 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
52 | static JabberCapsNodeExts* |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
53 | 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
|
54 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
55 | 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
|
56 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
57 | ++exts->ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
58 | return exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
59 | } |
|
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 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
62 | 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
|
63 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
64 | if (exts == NULL) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
65 | return; |
|
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 | 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
|
68 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
69 | 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
|
70 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
71 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
72 | 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
|
73 | g_free(exts); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
74 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
75 | |
|
24879
823943d2f2b9
Rename a few variables
Paul Aurich <darkrain42@pidgin.im>
parents:
24878
diff
changeset
|
76 | 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
|
77 | const JabberCapsTuple *key = data; |
|
24879
823943d2f2b9
Rename a few variables
Paul Aurich <darkrain42@pidgin.im>
parents:
24878
diff
changeset
|
78 | 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
|
79 | 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
|
80 | /* |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
81 | * '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
|
82 | * 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
|
83 | * a Deku Shrub... |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
84 | */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
85 | 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
|
86 | 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
|
87 | } |
|
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
|
88 | |
|
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
|
89 | 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
|
90 | 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
|
91 | 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
|
92 | |
|
26905
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
93 | 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
|
94 | g_str_equal(name1->ver, name2->ver) && |
|
61eac5fd16fe
Use purple_strequal and g_str_equal
Paul Aurich <darkrain42@pidgin.im>
parents:
26708
diff
changeset
|
95 | 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
|
96 | } |
|
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
|
97 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
98 | static void |
|
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
99 | jabber_caps_client_info_destroy(JabberCapsClientInfo *info) |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
100 | { |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
101 | if (info == NULL) |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
102 | return; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
103 | |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
104 | while(info->identities) { |
|
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
105 | 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
|
106 | 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
|
107 | 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
|
108 | 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
|
109 | 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
|
110 | g_free(id); |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
111 | 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
|
112 | } |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
113 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
114 | 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
|
115 | |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
116 | while (info->forms) { |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
117 | xmlnode_free(info->forms->data); |
|
775b48f69568
Free the forms properly; they're xmlnodes, not strings.
Paul Aurich <darkrain42@pidgin.im>
parents:
27028
diff
changeset
|
118 | 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
|
119 | } |
|
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
|
120 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
121 | 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
|
122 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
123 | 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
|
124 | 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
|
125 | 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
|
126 | |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
127 | 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
|
128 | } |
|
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
|
129 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
130 | /* 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
|
131 | * keep it around. */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
132 | static JabberCapsNodeExts* |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
133 | 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
|
134 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
135 | JabberCapsNodeExts *exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
136 | 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
|
137 | 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
|
138 | 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
|
139 | (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
|
140 | 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
|
141 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
142 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
143 | 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
|
144 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
145 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
146 | 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
|
147 | 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
|
148 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
149 | 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
|
150 | 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
|
151 | 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
|
152 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
153 | 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
|
154 | 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
|
155 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
156 | 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
|
157 | 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
|
158 | 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
|
159 | } |
|
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
|
160 | } |
|
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
|
161 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
162 | 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
|
163 | 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
|
164 | 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
|
165 | 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
|
166 | 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
|
167 | 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
|
168 | |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
169 | 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
|
170 | 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
|
171 | 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
|
172 | 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
|
173 | 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
|
174 | 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
|
175 | 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
|
176 | 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
|
177 | 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
|
178 | 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
|
179 | 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
|
180 | 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
|
181 | 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
|
182 | } |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
183 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
184 | 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
|
185 | 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
|
186 | 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
|
187 | 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
|
188 | } |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
189 | |
|
24881
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->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
|
191 | /* 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
|
192 | 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
|
193 | 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
|
194 | } |
|
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 | /* 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
|
197 | 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
|
198 | 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
|
199 | } |
|
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
|
200 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
201 | 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
|
202 | 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
|
203 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
204 | 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
|
205 | 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
|
206 | 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
|
207 | 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
|
208 | 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
|
209 | 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
|
210 | 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
|
211 | 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
|
212 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
213 | 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
|
214 | 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
|
215 | } |
|
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
|
216 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
217 | 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
|
218 | 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
|
219 | { |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
220 | 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
|
221 | 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
|
222 | } |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
223 | |
|
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
224 | 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
|
225 | 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
|
226 | { |
|
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
|
227 | 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
|
228 | xmlnode *client; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
229 | |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
230 | 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
|
231 | return; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
232 | |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
233 | if (strcmp(capsdata->name, "capabilities") != 0) { |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
234 | xmlnode_free(capsdata); |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
235 | return; |
|
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
236 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
237 | |
|
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
|
238 | 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
|
239 | 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
|
240 | 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
|
241 | if(!strcmp(client->name, "client")) { |
|
24731
c0a5e4f2bed5
Rename some structs and the JabberCapsClientInfo destruction function
Paul Aurich <darkrain42@pidgin.im>
parents:
24730
diff
changeset
|
242 | 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
|
243 | 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
|
244 | xmlnode *child; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
245 | 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
|
246 | 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
|
247 | 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
|
248 | 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
|
249 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
250 | /* v1.3 capabilities */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
251 | 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
|
252 | 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
|
253 | |
|
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
|
254 | 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
|
255 | 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
|
256 | 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
|
257 | 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
|
258 | 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
|
259 | 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
|
260 | 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
|
261 | 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
|
262 | } 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
|
263 | 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
|
264 | 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
|
265 | 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
|
266 | 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
|
267 | 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
|
268 | |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
269 | if (!category || !type) |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
270 | continue; |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
271 | |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
272 | 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
|
273 | 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
|
274 | 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
|
275 | 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
|
276 | 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
|
277 | |
|
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
|
278 | 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
|
279 | } 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
|
280 | /* 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
|
281 | * 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
|
282 | * 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
|
283 | * 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
|
284 | 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
|
285 | } 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
|
286 | 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
|
287 | } 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
|
288 | /* 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
|
289 | 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
|
290 | xmlnode *node; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
291 | GList *features = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
292 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
293 | if (!identifier) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
294 | 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
|
295 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
296 | 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
|
297 | 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
|
298 | continue; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
299 | 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
|
300 | 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
|
301 | 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
|
302 | continue; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
303 | 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
|
304 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
305 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24029
diff
changeset
|
306 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
307 | if (features) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
308 | 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
|
309 | features); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
310 | } else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
311 | 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
|
312 | 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
|
313 | } |
|
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
|
314 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
315 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
316 | 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
|
317 | 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
|
318 | |
|
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 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
321 | 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
|
322 | } |
|
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 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
324 | 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
|
325 | { |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
326 | 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
|
327 | 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
|
328 | 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
|
329 | } |
|
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
|
330 | |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
331 | 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
|
332 | { |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
333 | 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
|
334 | 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
|
335 | 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
|
336 | 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
|
337 | } |
|
24881
7a3aa84f6e57
Remove the old if 0'd out caps code and reorder some functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
24880
diff
changeset
|
338 | 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
|
339 | g_hash_table_destroy(nodetable); |
|
27028
1a2ef7ddb463
Clean up jabber prpl memory allocations on uninit.
Nick Hebner <hebnern@gmail.com>
parents:
27015
diff
changeset
|
340 | 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
|
341 | } |
|
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
|
342 | |
|
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
|
343 | 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
|
344 | 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
|
345 | { |
|
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
|
346 | 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
|
347 | 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
|
348 | |
|
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 | 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
|
350 | 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
|
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 | 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
|
353 | /* 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
|
354 | * 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
|
355 | 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
|
356 | 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
|
357 | 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
|
358 | !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
|
359 | 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
|
360 | } |
|
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 | |
|
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 | 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
|
363 | } |
|
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 | |
|
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
|
365 | 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
|
366 | guint ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
367 | |
|
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
|
368 | 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
|
369 | 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
|
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 | 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
|
372 | 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
|
373 | char *ver; |
|
23591
ba1e3ed78d40
* pass hash type to the caps handling functions
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23590
diff
changeset
|
374 | char *hash; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
375 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
376 | JabberCapsClientInfo *info; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
377 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
378 | GList *exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
379 | guint extOutstanding; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
380 | 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
|
381 | } 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
|
382 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
383 | 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
|
384 | 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
|
385 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
386 | 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
|
387 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
388 | ++data->ref; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
389 | 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
|
390 | } |
|
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
|
391 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
392 | static void |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
393 | 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
|
394 | { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
395 | if (data == NULL) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
396 | 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
|
397 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
398 | g_return_if_fail(data->ref != 0); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
399 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
400 | 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
|
401 | return; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
402 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
403 | 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
|
404 | 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
|
405 | 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
|
406 | 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
|
407 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
408 | /* 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
|
409 | if (data->exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
410 | 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
|
411 | 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
|
412 | 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
|
413 | 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
|
414 | } |
|
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
|
415 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
416 | static void |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
417 | 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
|
418 | { |
|
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
|
419 | 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
|
420 | 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
|
421 | 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
|
422 | 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
|
423 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
424 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
425 | 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
|
426 | 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
|
427 | userdata->ref); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
428 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
429 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
430 | static void |
| 26708 | 431 | jabber_caps_client_iqcb(JabberStream *js, const char *from, JabberIqType type, |
| 432 | const char *id, xmlnode *packet, gpointer data) | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
433 | { |
|
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
|
434 | xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
435 | NS_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
|
436 | 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
|
437 | 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
|
438 | 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
|
439 | |
| 26708 | 440 | 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
|
441 | /* 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
|
442 | 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
|
443 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
444 | return; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
445 | } |
|
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
|
446 | |
|
24727
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
447 | /* check hash */ |
|
77092d0aaaf0
Whitespace cleanup (no functional changes, just unwrap the huge if block and
Paul Aurich <darkrain42@pidgin.im>
parents:
24726
diff
changeset
|
448 | 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
|
449 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
450 | /* 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
|
451 | if (userdata->hash) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
452 | gchar *hash = NULL; |
|
28192
c9cc6671505b
This is annoying, but am I actually missing anything?
Paul Aurich <darkrain42@pidgin.im>
parents:
27374
diff
changeset
|
453 | /* |
|
c9cc6671505b
This is annoying, but am I actually missing anything?
Paul Aurich <darkrain42@pidgin.im>
parents:
27374
diff
changeset
|
454 | * TODO: If you add *any* hash here, make sure the checksum buffer |
|
c9cc6671505b
This is annoying, but am I actually missing anything?
Paul Aurich <darkrain42@pidgin.im>
parents:
27374
diff
changeset
|
455 | * size in jabber_caps_calculate_hash is large enough. The cipher API |
|
c9cc6671505b
This is annoying, but am I actually missing anything?
Paul Aurich <darkrain42@pidgin.im>
parents:
27374
diff
changeset
|
456 | * doesn't seem to offer a "Get the hash size" function(?). |
|
c9cc6671505b
This is annoying, but am I actually missing anything?
Paul Aurich <darkrain42@pidgin.im>
parents:
27374
diff
changeset
|
457 | */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
458 | 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
|
459 | 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
|
460 | } 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
|
461 | 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
|
462 | } |
|
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
|
463 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
464 | if (!hash || strcmp(hash, userdata->ver)) { |
|
28316
39822449ee6a
jabber: Print out the expected/generated caps hashes.
Paul Aurich <darkrain42@pidgin.im>
parents:
28192
diff
changeset
|
465 | purple_debug_warning("jabber", "Could not validate caps info from " |
|
39822449ee6a
jabber: Print out the expected/generated caps hashes.
Paul Aurich <darkrain42@pidgin.im>
parents:
28192
diff
changeset
|
466 | "%s. Expected %s, got %s\n", |
|
39822449ee6a
jabber: Print out the expected/generated caps hashes.
Paul Aurich <darkrain42@pidgin.im>
parents:
28192
diff
changeset
|
467 | xmlnode_get_attrib(packet, "from"), |
|
39822449ee6a
jabber: Print out the expected/generated caps hashes.
Paul Aurich <darkrain42@pidgin.im>
parents:
28192
diff
changeset
|
468 | userdata->ver, hash ? hash : "(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
|
469 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
470 | userdata->cb(NULL, NULL, userdata->cb_data); |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
471 | 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
|
472 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
473 | g_free(hash); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
474 | 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
|
475 | } |
|
b6955f09ca0b
Don't look up caps exts when the initial caps discovery wasn't successful.
Daniel Atallah <datallah@pidgin.im>
parents:
21720
diff
changeset
|
476 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
477 | 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
|
478 | } |
|
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
|
479 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
480 | 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
|
481 | /* 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
|
482 | * 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
|
483 | 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
|
484 | 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
|
485 | } |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
486 | |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
487 | 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
|
488 | key.ver = userdata->ver; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
489 | 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
|
490 | |
|
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
|
491 | /* 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
|
492 | * a new one if we need to */ |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
493 | if ((value = g_hash_table_lookup(capstable, &key))) { |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
494 | jabber_caps_client_info_destroy(info); |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
495 | info = value; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
496 | } else { |
|
27067
fa8eb96a2544
Make the JabberCapsTuple (nee Key) available to the rest of the prpl
Paul Aurich <darkrain42@pidgin.im>
parents:
27040
diff
changeset
|
497 | JabberCapsTuple *n_key = (JabberCapsTuple *)&info->tuple; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
498 | 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
|
499 | n_key->ver = userdata->ver; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
500 | n_key->hash = userdata->hash; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
501 | userdata->node = userdata->ver = userdata->hash = NULL; |
|
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
502 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
503 | /* The capstable gets a reference */ |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
504 | 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
|
505 | 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
|
506 | } |
|
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
|
507 | |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
508 | userdata->info = info; |
|
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
509 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
510 | 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
|
511 | 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
|
512 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
513 | 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
|
514 | } |
|
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
|
515 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
516 | typedef struct { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
517 | const char *name; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
518 | 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
|
519 | } ext_iq_data; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
520 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
521 | static void |
| 26708 | 522 | jabber_caps_ext_iqcb(JabberStream *js, const char *from, JabberIqType type, |
| 523 | 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
|
524 | { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
525 | xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
526 | NS_DISCO_INFO); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
527 | xmlnode *child; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
528 | 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
|
529 | GList *features = NULL; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
530 | JabberCapsNodeExts *node_exts; |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
531 | |
| 26708 | 532 | 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
|
533 | 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
|
534 | g_free(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
535 | return; |
|
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 | |
|
27373
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
538 | node_exts = (userdata->data->info ? userdata->data->info->exts : |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
539 | userdata->data->node_exts); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
540 | |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
541 | /* TODO: I don't see how this can actually happen, but it crashed khc. */ |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
542 | if (!node_exts) { |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
543 | purple_debug_error("jabber", "Couldn't find JabberCapsNodeExts. If you " |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
544 | "see this, please tell darkrain42 and save your debug log.\n" |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
545 | "JabberCapsClientInfo = %p\n", userdata->data->info); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
546 | |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
547 | |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
548 | /* Try once more to find the exts and then fail */ |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
549 | node_exts = jabber_caps_find_exts_by_node(userdata->data->node); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
550 | if (node_exts) { |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
551 | purple_debug_info("jabber", "Found the exts on the second try.\n"); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
552 | if (userdata->data->info) |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
553 | userdata->data->info->exts = node_exts; |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
554 | else |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
555 | userdata->data->node_exts = node_exts; |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
556 | } else { |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
557 | cbplususerdata_unref(userdata->data); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
558 | g_free(userdata); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
559 | g_return_if_reached(); |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
560 | } |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
561 | } |
|
0a157a53beeb
Don't crash when the seemingly impossible occurs.
Paul Aurich <darkrain42@pidgin.im>
parents:
27372
diff
changeset
|
562 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
563 | /* 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
|
564 | * 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
|
565 | * 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
|
566 | */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
567 | --userdata->data->extOutstanding; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
568 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
569 | 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
|
570 | 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
|
571 | 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
|
572 | if (var) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
573 | 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
|
574 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
575 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
576 | 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
|
577 | schedule_caps_save(); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
578 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
579 | /* Are we done? */ |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
580 | 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
|
581 | 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
|
582 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
583 | cbplususerdata_unref(userdata->data); |
|
24728
4447de55fdf6
Clean up jabber_caps_client_iqcb
Paul Aurich <darkrain42@pidgin.im>
parents:
24727
diff
changeset
|
584 | 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
|
585 | } |
|
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
|
586 | |
| 24720 | 587 | 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
|
588 | 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
|
589 | jabber_caps_get_info_cb cb, gpointer user_data) |
| 24720 | 590 | { |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
591 | 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
|
592 | JabberCapsTuple key; |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
593 | 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
|
594 | |
|
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
|
595 | if (exts && hash) { |
|
28430
14e012d6df66
jabber: Reduce severity of "Ignoring exts..." message.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
596 | purple_debug_misc("jabber", "Ignoring exts in new-style caps from %s\n", |
|
14e012d6df66
jabber: Reduce severity of "Ignoring exts..." message.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
597 | 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
|
598 | 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
|
599 | 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
|
600 | } |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
601 | |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
602 | /* 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
|
603 | key.node = (char *)node; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
604 | key.ver = (char *)ver; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
605 | key.hash = (char *)hash; |
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
17836
diff
changeset
|
606 | |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
607 | 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
|
608 | if (info && hash) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
609 | /* 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
|
610 | 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
|
611 | 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
|
612 | return; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
613 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
614 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
615 | userdata = g_new0(jabber_caps_cbplususerdata, 1); |
|
27372
571757ab213e
Fix a lost reference when we only fetch an unknown ext.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
616 | /* We start out with 0 references. Every query takes one */ |
|
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
|
617 | 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
|
618 | 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
|
619 | 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
|
620 | 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
|
621 | 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
|
622 | userdata->hash = g_strdup(hash); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
623 | |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
624 | if (info) { |
|
24882
7e842d8123e8
Partial disapproval of 19969457944c4807924bcde3090063b23d35ba17
Paul Aurich <darkrain42@pidgin.im>
parents:
24881
diff
changeset
|
625 | userdata->info = info; |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
626 | } else { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
627 | /* 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
|
628 | * to fetch it. */ |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
629 | JabberIq *iq; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
630 | xmlnode *query; |
|
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
631 | char *nodever; |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
632 | |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
633 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO); |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
634 | query = xmlnode_get_child_with_namespace(iq->node, "query", |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
635 | NS_DISCO_INFO); |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
636 | 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
|
637 | 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
|
638 | 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
|
639 | xmlnode_set_attrib(iq->node, "to", who); |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
640 | |
|
27372
571757ab213e
Fix a lost reference when we only fetch an unknown ext.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
641 | cbplususerdata_ref(userdata); |
|
571757ab213e
Fix a lost reference when we only fetch an unknown ext.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
642 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
643 | 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
|
644 | 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
|
645 | } |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
646 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
647 | /* 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
|
648 | if (exts) { |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
649 | JabberCapsNodeExts *node_exts; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
650 | int i; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
651 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
652 | if (info) { |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
653 | if (info->exts) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
654 | 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
|
655 | else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
656 | 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
|
657 | } else |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
658 | /* 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
|
659 | 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
|
660 | |
|
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
|
661 | 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
|
662 | 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
|
663 | /* 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
|
664 | 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
|
665 | JabberIq *iq; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
666 | xmlnode *query; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
667 | char *nodeext; |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
668 | 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
|
669 | |
|
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
|
670 | 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
|
671 | 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
|
672 | |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
673 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO); |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
674 | query = xmlnode_get_child_with_namespace(iq->node, "query", |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28761
diff
changeset
|
675 | NS_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
|
676 | 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
|
677 | 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
|
678 | g_free(nodeext); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
679 | 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
|
680 | |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
681 | 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
|
682 | 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
|
683 | |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
684 | ++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
|
685 | } |
|
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
|
686 | 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
|
687 | } |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
688 | /* 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
|
689 | * 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
|
690 | 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
|
691 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
692 | |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
693 | if (userdata->info && userdata->extOutstanding == 0) { |
| 27374 | 694 | /* Start with 1 ref so the below functions are happy */ |
| 695 | userdata->ref = 1; | |
| 696 | ||
|
27372
571757ab213e
Fix a lost reference when we only fetch an unknown ext.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
697 | /* We have everything we need right now */ |
|
24880
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
698 | 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
|
699 | cbplususerdata_unref(userdata); |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
700 | } |
|
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 | } |
|
19930
95cb4da7241e
Various leakfixes and preventing unnecessary allocations.
Daniel Atallah <datallah@pidgin.im>
parents:
19929
diff
changeset
|
702 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
703 | 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
|
704 | 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
|
705 | { |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
706 | const JabberIdentity *ac; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
707 | const JabberIdentity *bc; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
708 | 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
|
709 | gint typ_cmp; |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
710 | |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
711 | ac = a; |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
712 | 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
|
713 | |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
714 | 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
|
715 | 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
|
716 | 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
|
717 | return 0; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
718 | } 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
|
719 | return 1; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
720 | } 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
|
721 | return -1; |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
722 | } else { |
|
c72ba845a930
Don't crash if the lang attribute of an identity is NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
24724
diff
changeset
|
723 | 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
|
724 | } |
|
23588
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
725 | } else { |
|
9b2741bcecf2
* jabber_caps_jabber_identity_compare() compares xml:lang too, now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23587
diff
changeset
|
726 | 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
|
727 | } |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
728 | } else { |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
729 | 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
|
730 | } |
|
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
|
731 | } |
|
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
|
732 | |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
733 | 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
|
734 | 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
|
735 | 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
|
736 | 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
|
737 | 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
|
738 | 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
|
739 | } |
|
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
|
740 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
741 | 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
|
742 | 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
|
743 | { |
|
23599
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
744 | const xmlnode *aformtypefield = a; |
|
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
745 | const xmlnode *bformtypefield = b; |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
746 | char *aformtype; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
747 | char *bformtype; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
748 | 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
|
749 | |
|
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
|
750 | 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
|
751 | bformtype = jabber_caps_get_formtype(bformtypefield); |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
752 | |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
753 | result = strcmp(aformtype, bformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
754 | g_free(aformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
755 | g_free(bformtype); |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
756 | return result; |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
757 | } |
|
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
758 | |
|
30507
10c522a4c93a
jabber: Start adding some caps tests
Paul Aurich <darkrain42@pidgin.im>
parents:
29884
diff
changeset
|
759 | JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query) |
|
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
|
760 | { |
|
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
|
761 | xmlnode *child; |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
762 | JabberCapsClientInfo *info; |
|
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
763 | |
|
30507
10c522a4c93a
jabber: Start adding some caps tests
Paul Aurich <darkrain42@pidgin.im>
parents:
29884
diff
changeset
|
764 | if (!query || !g_str_equal(query->name, "query") || |
|
10c522a4c93a
jabber: Start adding some caps tests
Paul Aurich <darkrain42@pidgin.im>
parents:
29884
diff
changeset
|
765 | !purple_strequal(query->xmlns, NS_DISCO_INFO)) |
|
10c522a4c93a
jabber: Start adding some caps tests
Paul Aurich <darkrain42@pidgin.im>
parents:
29884
diff
changeset
|
766 | return NULL; |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
767 | |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
768 | info = g_new0(JabberCapsClientInfo, 1); |
|
24878
19969457944c
Reference-count JabberCapsClientInfo and fix bug.
Paul Aurich <darkrain42@pidgin.im>
parents:
24877
diff
changeset
|
769 | |
|
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
|
770 | 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
|
771 | 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
|
772 | 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
|
773 | 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
|
774 | /* 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
|
775 | 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
|
776 | 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
|
777 | 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
|
778 | 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
|
779 | JabberIdentity *id; |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
780 | |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
781 | if (!category || !type) |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
782 | continue; |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
783 | |
|
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
784 | 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
|
785 | 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
|
786 | 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
|
787 | 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
|
788 | 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
|
789 | |
|
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
|
790 | 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
|
791 | } 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
|
792 | /* 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
|
793 | 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
|
794 | if (var) |
|
ae4e8598d0bf
Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents:
24879
diff
changeset
|
795 | 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
|
796 | } else if (!strcmp(child->name, "x")) { |
|
24726
6d087b9604e5
Error checking and use g_list_foreach
Paul Aurich <darkrain42@pidgin.im>
parents:
24725
diff
changeset
|
797 | 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
|
798 | /* 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
|
799 | 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
|
800 | 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
|
801 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
802 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
803 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
804 | 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
|
805 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
806 | |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
807 | 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
|
808 | { |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
809 | const JabberDataFormField *ac = a; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
810 | const JabberDataFormField *bc = b; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
811 | |
|
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
|
812 | 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
|
813 | } |
|
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
|
814 | |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
815 | static GList* jabber_caps_xdata_get_fields(const xmlnode *x) |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
816 | { |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
817 | 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
|
818 | xmlnode *field; |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
819 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
820 | if (!x) |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
821 | return NULL; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
822 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
823 | 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
|
824 | xmlnode *value; |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
825 | 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
|
826 | xdatafield->var = g_strdup(xmlnode_get_attrib(field, "var")); |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
827 | |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
828 | 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
|
829 | 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
|
830 | 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
|
831 | } |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
832 | |
|
24722
4896d0884130
Use strcmp instead of a wrapper
Paul Aurich <darkrain42@pidgin.im>
parents:
24720
diff
changeset
|
833 | 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
|
834 | fields = g_list_append(fields, xdatafield); |
|
24730
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
835 | } |
|
3037dfb744ef
Whitespace and formatting changes
Paul Aurich <darkrain42@pidgin.im>
parents:
24729
diff
changeset
|
836 | |
|
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
|
837 | 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
|
838 | 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
|
839 | } |
|
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
|
840 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
841 | static void |
|
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
842 | append_escaped_string(PurpleCipherContext *context, const gchar *str) |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
843 | { |
|
30508
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
844 | if (str && *str) { |
|
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
845 | char *tmp = g_markup_escape_text(str, -1); |
|
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
846 | purple_cipher_context_append(context, (const guchar *)tmp, strlen(tmp)); |
|
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
847 | g_free(tmp); |
|
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
848 | } |
|
80ecb950263a
jabber: Don't crash on caps that include an empty <value/> in the Software Information extended info. Fixes #12292
Paul Aurich <darkrain42@pidgin.im>
parents:
30507
diff
changeset
|
849 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
850 | purple_cipher_context_append(context, (const guchar *)"<", 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
|
851 | } |
|
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
|
852 | |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
853 | gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info, const char *hash) |
|
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
854 | { |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
855 | GList *node; |
|
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
|
856 | 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
|
857 | 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
|
858 | 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
|
859 | gboolean success; |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
860 | |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
861 | 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
|
862 | return NULL; |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
863 | |
|
23589
91775cc26843
* defined JabberCapsIdentity as struct _JabberIdentity
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23588
diff
changeset
|
864 | /* 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
|
865 | 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
|
866 | 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
|
867 | info->forms = g_list_sort(info->forms, jabber_xdata_compare); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
868 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
869 | /* Add identities to the hash data */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
870 | for (node = info->identities; node; node = node->next) { |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
871 | 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
|
872 | 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
|
873 | 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
|
874 | char *lang = NULL; |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
875 | char *name = NULL; |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
876 | char *tmp; |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
877 | |
|
27015
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
878 | if (id->lang) |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
879 | 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
|
880 | if (id->name) |
|
3d6982f39a5b
Avoid a g_markup_escape_text assertion failure
Paul Aurich <darkrain42@pidgin.im>
parents:
26996
diff
changeset
|
881 | name = g_markup_escape_text(id->name, -1); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
882 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
883 | tmp = g_strconcat(category, "/", type, "/", lang ? lang : "", |
|
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
884 | "/", name ? name : "", "<", NULL); |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
885 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
886 | purple_cipher_context_append(context, (const guchar *)tmp, strlen(tmp)); |
|
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
887 | |
|
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
888 | g_free(tmp); |
|
26995
ef76b70d0078
Escape all the values when appending them to the Entity Caps verification str.
Paul Aurich <darkrain42@pidgin.im>
parents:
26992
diff
changeset
|
889 | 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
|
890 | 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
|
891 | 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
|
892 | 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
|
893 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
894 | |
|
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
|
895 | /* concat features to the verification string */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
896 | for (node = info->features; node; node = node->next) { |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
897 | append_escaped_string(context, 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
|
898 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
899 | |
|
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
|
900 | /* concat x-data forms to the verification string */ |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
901 | for(node = info->forms; node; node = node->next) { |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
902 | xmlnode *data = (xmlnode *)node->data; |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
903 | gchar *formtype = jabber_caps_get_formtype(data); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
904 | GList *fields = jabber_caps_xdata_get_fields(data); |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
905 | |
|
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
|
906 | /* append FORM_TYPE's field value to the verification string */ |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
907 | append_escaped_string(context, formtype); |
|
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
|
908 | g_free(formtype); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
909 | |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
910 | 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
|
911 | GList *value; |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27072
diff
changeset
|
912 | JabberDataFormField *field = (JabberDataFormField*)fields->data; |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
913 | |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
914 | if (!g_str_equal(field->var, "FORM_TYPE")) { |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
915 | /* Append the "var" attribute */ |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
916 | append_escaped_string(context, 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
|
917 | /* Append <value/> elements' cdata */ |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
918 | for (value = field->values; value; value = value->next) { |
|
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
919 | append_escaped_string(context, value->data); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
920 | 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
|
921 | } |
|
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
|
922 | } |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
923 | |
|
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
|
924 | 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
|
925 | g_list_free(field->values); |
|
24729
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
926 | |
|
7ceae14935f8
Rework jabber_caps_calculate_hash
Paul Aurich <darkrain42@pidgin.im>
parents:
24728
diff
changeset
|
927 | 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
|
928 | } |
|
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
|
929 | } |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
930 | |
|
23593
149bce500f4e
* support for calculating both hashes, sha-1 and md5
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23591
diff
changeset
|
931 | /* generate hash */ |
|
29884
ff188aef0c49
jabber: Space efficiency.
Paul Aurich <darkrain42@pidgin.im>
parents:
28984
diff
changeset
|
932 | success = purple_cipher_context_digest(context, checksum_size, |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
933 | checksum, &checksum_size); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
934 | |
|
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
|
935 | purple_cipher_context_destroy(context); |
|
24723
e3ec27a26ea6
Whitespace, formatting, and // -> /* */
Paul Aurich <darkrain42@pidgin.im>
parents:
24722
diff
changeset
|
936 | |
|
24877
ee51a3be800d
Rename a few functions and clean up the exit cleanup of a function
Paul Aurich <darkrain42@pidgin.im>
parents:
24876
diff
changeset
|
937 | 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
|
938 | } |
|
1691c5361029
* changed name of jabber_caps_calculate_hash() to jabber_caps_calculate_own_hash()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23586
diff
changeset
|
939 | |
|
23595
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
940 | 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
|
941 | 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
|
942 | 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
|
943 | 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
|
944 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
945 | if (!jabber_identities && !jabber_features) { |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
946 | /* 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
|
947 | 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
|
948 | g_free(js->caps_hash); |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
949 | js->caps_hash = NULL; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
950 | return; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
951 | } |
|
23599
ac402ffdcbec
* removing several warnings
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23597
diff
changeset
|
952 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
953 | /* 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
|
954 | 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
|
955 | 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
|
956 | JabberFeature *feat = iter->data; |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
957 | 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
|
958 | 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
|
959 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
960 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
961 | } |
|
728a8a576f11
* correctly calculating own features and factor in is_enabled() of features
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23594
diff
changeset
|
962 | |
|
24734
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
963 | 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
|
964 | 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
|
965 | info.forms = NULL; |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
966 | |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
967 | g_free(js->caps_hash); |
|
780b8ad67c22
Sprinkle around more support for xml:lang on JabberIdentities
Paul Aurich <darkrain42@pidgin.im>
parents:
24732
diff
changeset
|
968 | 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
|
969 | g_list_free(info.identities); |
|
28761
e961b3237237
jabber: Plug another leak.
Paul Aurich <darkrain42@pidgin.im>
parents:
28430
diff
changeset
|
970 | g_list_free(info.features); |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
971 | } |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
972 | |
|
24716
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
973 | 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
|
974 | { |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
975 | if (!js->caps_hash) |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
976 | jabber_caps_calculate_own_hash(js); |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
977 | |
|
047f5075ca58
Entity Capabilities must be per-JabberStream
Paul Aurich <darkrain42@pidgin.im>
parents:
24715
diff
changeset
|
978 | 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
|
979 | } |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
21720
diff
changeset
|
980 | |
|
24717
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
981 | void jabber_caps_broadcast_change() |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
982 | { |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
983 | GList *node, *accounts = purple_accounts_get_all_active(); |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
984 | |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
985 | for (node = accounts; node; node = node->next) { |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
986 | PurpleAccount *account = node->data; |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
987 | 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
|
988 | 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
|
989 | PurpleConnection *gc = purple_account_get_connection(account); |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
990 | 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
|
991 | } |
|
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
992 | } |
|
24717
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
993 | |
|
13c7497f44f8
Clean up jabber_presence_send
Paul Aurich <darkrain42@pidgin.im>
parents:
24716
diff
changeset
|
994 | 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
|
995 | } |
|
f7e44345f4b9
* implemented jabber_caps_broadcast_change() and finished jabber_ipc_add_feature() IPC function
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23600
diff
changeset
|
996 |