libpurple/protocols/jabber/iq.h

Wed, 12 Jan 2011 14:31:52 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Wed, 12 Jan 2011 14:31:52 +0000
changeset 31360
4ddd59618002
parent 28322
ac8fec1d2234
child 34935
686fa55b0deb
child 35235
93d4bff19574
permissions
-rw-r--r--

jabber: Be friendlier to servers when we have nothing to say.

Don't try to reconnect immediately, but do so when we have something
to send. Untested (I'll test it later), but I'm hoping hsitas444 will
test it first. Refs #13008.

7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /**
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
2 * @file iq.h JabberID handlers
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * purple
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
5 *
28322
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 27103
diff changeset
6 * 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: 27103
diff changeset
7 * 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: 27103
diff changeset
8 * source distribution.
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * (at your option) any later version.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * GNU General Public License for more details.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 15884
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
23 */
26703
17f9a4bef2a3 Further standardize the sentinel style (did someone say leading _s are theoretically a reserved namespace?)
Paul Aurich <darkrain42@pidgin.im>
parents: 26700
diff changeset
24 #ifndef PURPLE_JABBER_IQ_H_
17f9a4bef2a3 Further standardize the sentinel style (did someone say leading _s are theoretically a reserved namespace?)
Paul Aurich <darkrain42@pidgin.im>
parents: 26700
diff changeset
25 #define PURPLE_JABBER_IQ_H_
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
26
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27 typedef enum {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 JABBER_IQ_SET,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
29 JABBER_IQ_GET,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
30 JABBER_IQ_RESULT,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
31 JABBER_IQ_ERROR,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
32 JABBER_IQ_NONE
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
33 } JabberIqType;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
34
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
35 #include "jabber.h"
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 26703
diff changeset
36 #include "connection.h"
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
37
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
38 typedef struct _JabberIq JabberIq;
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
39
26700
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
40 /**
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
41 * A JabberIqHandler is called to process an incoming IQ stanza.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
42 * Handlers typically process unsolicited incoming GETs or SETs for their
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
43 * registered namespace, but may be called to handle the results of a
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
44 * GET or SET that we generated if no JabberIqCallback was generated
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
45 * The handler may be called for the results of a GET or SET (RESULT or ERROR)
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
46 * that we generated
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
47 * if the generating function did not register a JabberIqCallback.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
48 *
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
49 * @param js The JabberStream object.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
50 * @param from The remote entity (the from attribute on the <iq/> stanza)
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
51 * @param type The IQ type.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
52 * @param id The IQ id (the id attribute on the <iq/> stanza)
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
53 * @param child The child element of the <iq/> stanza that matches the name
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
54 * and namespace registered with jabber_iq_register_handler.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
55 *
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
56 * @see jabber_iq_register_handler()
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
57 * @see JabberIqCallback
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
58 */
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
59 typedef void (JabberIqHandler)(JabberStream *js, const char *from,
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
60 JabberIqType type, const char *id,
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25815
diff changeset
61 xmlnode *child);
14356
7f4abf922cfa [gaim-migrate @ 16984]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
62
26700
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
63 /**
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
64 * A JabberIqCallback is called to process the results of a GET or SET that
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
65 * we send to a remote entity. The callback is matched based on the id
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
66 * of the incoming stanza (which matches the one on the initial stanza).
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
67 *
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
68 * @param js The JabberStream object.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
69 * @param from The remote entity (the from attribute on the <iq/> stanza)
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
70 * @param type The IQ type. The only possible values are JABBER_IQ_RESULT
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
71 * and JABBER_IQ_ERROR.
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
72 * @param id The IQ id (the id attribute on the <iq/> stanza)
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
73 * @param packet The <iq/> stanza
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
74 * @param data The callback data passed to jabber_iq_set_callback()
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
75 *
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
76 * @see jabber_iq_set_callback()
8bdeed3f9115 Large documentation blocks never hurt anyone.
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
77 */
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 25821
diff changeset
78 typedef void (JabberIqCallback)(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 25821
diff changeset
79 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 25821
diff changeset
80 xmlnode *packet, gpointer data);
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7170
diff changeset
81
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
82 struct _JabberIq {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
83 JabberIqType type;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
84 char *id;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
85 xmlnode *node;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
86
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7170
diff changeset
87 JabberIqCallback *callback;
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7170
diff changeset
88 gpointer callback_data;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
89
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
90 JabberStream *js;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
91 };
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
92
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
93 JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
94 JabberIq *jabber_iq_new_query(JabberStream *js, JabberIqType type,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
95 const char *xmlns);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
96
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
97 void jabber_iq_parse(JabberStream *js, xmlnode *packet);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
98
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 7395
diff changeset
99 void jabber_iq_remove_callback_by_id(JabberStream *js, const char *id);
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7170
diff changeset
100 void jabber_iq_set_callback(JabberIq *iq, JabberIqCallback *cb, gpointer data);
7170
93a12931a1fd [gaim-migrate @ 7737]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
101 void jabber_iq_set_id(JabberIq *iq, const char *id);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
102
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
103 void jabber_iq_send(JabberIq *iq);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
104 void jabber_iq_free(JabberIq *iq);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
105
14356
7f4abf922cfa [gaim-migrate @ 16984]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
106 void jabber_iq_init(void);
7f4abf922cfa [gaim-migrate @ 16984]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
107 void jabber_iq_uninit(void);
7f4abf922cfa [gaim-migrate @ 16984]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
108
25821
5107c4870027 merge of '4dbe0c6eaf6dc066dddfd3084db3140b730b47a6'
Paul Aurich <darkrain42@pidgin.im>
parents: 25819
diff changeset
109 void jabber_iq_register_handler(const char *node, const char *xmlns,
5107c4870027 merge of '4dbe0c6eaf6dc066dddfd3084db3140b730b47a6'
Paul Aurich <darkrain42@pidgin.im>
parents: 25819
diff changeset
110 JabberIqHandler *func);
14356
7f4abf922cfa [gaim-migrate @ 16984]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
111
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 26703
diff changeset
112 /* Connected to namespace-handler registration signals */
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 26703
diff changeset
113 void jabber_iq_signal_register(const gchar *node, const gchar *xmlns);
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 26703
diff changeset
114 void jabber_iq_signal_unregister(const gchar *node, const gchar *xmlns);
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 26703
diff changeset
115
26703
17f9a4bef2a3 Further standardize the sentinel style (did someone say leading _s are theoretically a reserved namespace?)
Paul Aurich <darkrain42@pidgin.im>
parents: 26700
diff changeset
116 #endif /* PURPLE_JABBER_IQ_H_ */

mercurial