annotate libpurple/protocols/jabber/ping.c @ 25639:b5052c66701c

Jabber IQ handlers should handle non-query child nodes Historically, all IQ stanzas had a query child; this is no longer the case (XMPP Ping, Entity Time, etc). Instead, have the handlers use the first child of the IQ stanza. Also reduce some of the duplication in XMPP ping code (just use the one in ping.c)
author Paul Aurich <paul@darkrain42.org>
date Tue, 03 Feb 2009 17:10:05 +0000
parents 413103ddeaac
children 42dd7e591031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
1 /*
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
3 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
5 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
9 * (at your option) any later version.
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
10 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
14 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
15 * GNU General Public License for more details.
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
16 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
20 *
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
21 */
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
22
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
23 #include "internal.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
24
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
25 #include "debug.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
26 #include "xmlnode.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
27
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
28 #include "jabber.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
29 #include "ping.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
30 #include "iq.h"
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
31
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
32 void
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
33 jabber_ping_parse(JabberStream *js, xmlnode *packet)
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
34 {
25639
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
35 const char *type, *id, *from;
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
36
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
37 type = xmlnode_get_attrib(packet, "type");
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
38 from = xmlnode_get_attrib(packet, "from");
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
39 id = xmlnode_get_attrib(packet, "id");
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
40
25639
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
41 if (!type) {
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
42 purple_debug_warning("jabber", "jabber_ping with no type\n");
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
43 return;
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
44 }
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
45
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
46 purple_debug_info("jabber", "jabber_ping_parse\n");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
47
25639
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
48 if (!strcmp(type, "get")) {
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
49 JabberIq *iq = jabber_iq_new(js, JABBER_IQ_RESULT);
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
50
25639
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
51 xmlnode_set_attrib(iq->node, "to", from);
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
52 xmlnode_set_attrib(iq->node, "id", id);
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
53
25639
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
54 jabber_iq_send(iq);
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
55 } else if (!strcmp(type, "set")) {
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
56 /* XXX: error */
b5052c66701c Jabber IQ handlers should handle non-query child nodes
Paul Aurich <paul@darkrain42.org>
parents: 18702
diff changeset
57 }
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
58 }
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
59
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
60 static void jabber_ping_result_cb(JabberStream *js, xmlnode *packet,
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
61 gpointer data)
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
62 {
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
63 const char *type = xmlnode_get_attrib(packet, "type");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
64
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
65 purple_debug_info("jabber", "jabber_ping_result_cb\n");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
66 if(type && !strcmp(type, "result")) {
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
67 purple_debug_info("jabber", "PONG!\n");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
68 } else {
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
69 purple_debug_info("jabber", "(not supported)\n");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
70 }
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
71 }
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
72
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
73 gboolean jabber_ping_jid(PurpleConversation *conv, const char *jid)
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
74 {
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
75 JabberIq *iq;
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
76 xmlnode *ping;
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
77
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
78 purple_debug_info("jabber", "jabber_ping_jid\n");
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
79
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
80 iq = jabber_iq_new(conv->account->gc->proto_data, JABBER_IQ_GET);
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
81 xmlnode_set_attrib(iq->node, "to", jid);
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
82
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
83 ping = xmlnode_new_child(iq->node, "ping");
18702
413103ddeaac Updated the XEP-0199 namespace according to the XEP.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17835
diff changeset
84 xmlnode_set_namespace(ping, "urn:xmpp:ping");
17835
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
85
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
86 jabber_iq_set_callback(iq, jabber_ping_result_cb, NULL);
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
87 jabber_iq_send(iq);
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
88
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
89
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
90
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
91 return TRUE;
6ab1089e2101 applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
92 }