Wed, 12 Jan 2011 14:31:52 +0000
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 | 1 | /** |
| 2 | * @file iq.h JabberID handlers | |
| 3 | * | |
| 15884 | 4 | * purple |
| 7014 | 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 | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 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 | 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 | 26 | |
| 27 | typedef enum { | |
| 28 | JABBER_IQ_SET, | |
| 29 | JABBER_IQ_GET, | |
| 30 | JABBER_IQ_RESULT, | |
| 31 | JABBER_IQ_ERROR, | |
| 32 | JABBER_IQ_NONE | |
| 33 | } JabberIqType; | |
| 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 | 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 | 81 | |
| 7014 | 82 | struct _JabberIq { |
| 83 | JabberIqType type; | |
| 84 | char *id; | |
| 85 | xmlnode *node; | |
| 86 | ||
| 7395 | 87 | JabberIqCallback *callback; |
| 88 | gpointer callback_data; | |
| 7014 | 89 | |
| 90 | JabberStream *js; | |
| 91 | }; | |
| 92 | ||
| 93 | JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type); | |
| 94 | JabberIq *jabber_iq_new_query(JabberStream *js, JabberIqType type, | |
| 95 | const char *xmlns); | |
| 96 | ||
| 97 | void jabber_iq_parse(JabberStream *js, xmlnode *packet); | |
| 98 | ||
| 13794 | 99 | void jabber_iq_remove_callback_by_id(JabberStream *js, const char *id); |
| 7395 | 100 | void jabber_iq_set_callback(JabberIq *iq, JabberIqCallback *cb, gpointer data); |
| 7170 | 101 | void jabber_iq_set_id(JabberIq *iq, const char *id); |
| 7014 | 102 | |
| 103 | void jabber_iq_send(JabberIq *iq); | |
| 104 | void jabber_iq_free(JabberIq *iq); | |
| 105 | ||
| 14356 | 106 | void jabber_iq_init(void); |
| 107 | void jabber_iq_uninit(void); | |
| 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 | 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_ */ |