Top | ![]() |
![]() |
![]() |
![]() |
gchar * | bare-jid | Read |
WockyXmppConnection * | connection | Read / Write / Construct Only |
gchar * | full-jid | Read / Write / Construct Only |
gchar * | resource | Read |
void | closing | Run Last |
void | remote-closed | Run Last |
void | remote-error | Run Last |
void | sending | Run Last |
enum | WockyPorterError |
#define | WOCKY_PORTER_HANDLER_PRIORITY_MIN |
#define | WOCKY_PORTER_HANDLER_PRIORITY_MAX |
struct | WockyPorterInterface |
GQuark
wocky_porter_error_quark (void
);
Get the error quark used by the porter.
#define WOCKY_PORTER_ERROR (wocky_porter_error_quark ())
Get access to the error quark of the xmpp porter.
#define WOCKY_PORTER_HANDLER_PRIORITY_NORMAL (guint) (G_MAXUINT / 2)
gboolean (*WockyPorterHandlerFunc) (WockyPorter *porter
,WockyStanza *stanza
,gpointer user_data
);
Handler called when a matching stanza has been received by the WockyPorter.
If a handler returns TRUE
, this means that it has taken responsibility
for handling the stanza and (if applicable) sending a reply.
If a handler returns FALSE
, this indicates that it has declined to process
the stanza. The next handler (if any) is invoked.
A handler must not assume that stanza
will continue to exist after the
handler has returned, unless it has taken a reference to stanza
using
g_object_ref()
.
porter |
the WockyPorter dispatching the WockyStanza |
|
stanza |
the WockyStanza being dispatched |
|
user_data |
the data passed when the handler has been registered |
void
wocky_porter_start (WockyPorter *porter
);
Start a WockyPorter to make it read and dispatch incoming stanzas.
void wocky_porter_send_async (WockyPorter *porter
,WockyStanza *stanza
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
);
Request asynchronous sending of a WockyStanza.
When the stanza has been sent callback will be called.
You can then call wocky_porter_send_finish()
to get the result
of the operation.
porter |
||
stanza |
the WockyStanza to send |
|
cancellable |
optional GCancellable object, |
|
callback |
callback to call when the request is satisfied |
|
user_data |
the data to pass to callback function |
gboolean wocky_porter_send_finish (WockyPorter *porter
,GAsyncResult *result
,GError **error
);
Finishes sending a WockyStanza.
void wocky_porter_send (WockyPorter *porter
,WockyStanza *stanza
);
Send a WockyStanza. This is a convenient function to not have to
call wocky_porter_send_async()
with lot of NULL
arguments if you
don't care to know when the stanza has been actually sent.
guint wocky_porter_register_handler_from_va (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,const gchar *from
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,va_list ap
);
A va_list version of wocky_porter_register_handler_from()
; see
that function for more details.
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
from |
the JID whose messages this handler is intended for (may not be
|
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
ap |
a |
guint wocky_porter_register_handler_from_by_stanza (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,const gchar *from
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,WockyStanza *stanza
);
A WockyStanza version of wocky_porter_register_handler_from()
; see
that function for more details.
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
from |
the JID whose messages this handler is intended for (may not be
|
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
stanza |
a WockyStanza. The handler will match a stanza only if
the stanza received is a superset of the one passed to this
function, as per |
guint wocky_porter_register_handler_from (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,const gchar *from
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,...
);
Register a new stanza handler.
Stanza handlers are called when the Porter receives a new stanza matching
the rules of the handler. Matching handlers are sorted by priority and are
called until one claims to have handled the stanza (by returning TRUE
).
If from
is a bare JID, then the resource of the JID in the from attribute
will be ignored: In other words, a handler registered against a bare JID
will match all stanzas from a JID with the same node
and domain:
"foo@bar.org"
will match
"foo@bar.org"
,
"foo@bar.org/moose"
and so forth.
To register an IQ handler from Juliet for all the Jingle stanzas related to one Jingle session:
1 2 3 4 5 6 7 8 9 |
id = wocky_porter_register_handler_from (porter, WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_NONE, "juliet@example.com/Balcony", WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, jingle_cb, '(', "jingle", ':', "urn:xmpp:jingle:1", '@', "sid", "my_sid", ')', NULL); |
To match stanzas from any sender, see
wocky_porter_register_handler_from_anyone()
. If the porter is a
WockyC2SPorter, one can match stanzas sent by the server; see
wocky_c2s_porter_register_handler_from_server()
.
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
from |
the JID whose messages this handler is intended for (may not be
|
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
... |
a |
guint wocky_porter_register_handler_from_anyone_va (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,va_list ap
);
A va_list version of
wocky_porter_register_handler_from_anyone()
; see that function for more
details.
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
ap |
a |
guint wocky_porter_register_handler_from_anyone_by_stanza (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,WockyStanza *stanza
);
A WockyStanza version of
wocky_porter_register_handler_from_anyone()
; see that function for
more details.
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
stanza |
a WockyStanza. The handler will match a stanza only if
the stanza received is a superset of the one passed to this
function, as per |
guint wocky_porter_register_handler_from_anyone (WockyPorter *self
,WockyStanzaType type
,WockyStanzaSubType sub_type
,guint priority
,WockyPorterHandlerFunc callback
,gpointer user_data
,...
);
Registers a handler for incoming stanzas from anyone, including those where the from attribute is missing.
For example, to register a handler matching all message stanzas received from anyone, call:
1 2 3 4 |
id = wocky_porter_register_handler (porter, WOCKY_STANZA_TYPE_MESSAGE, WOCKY_STANZA_SUB_TYPE_NONE, NULL, WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, message_received_cb, NULL, NULL); |
As a more interesting example, the following matches incoming PEP notifications for contacts' geolocation information:
1 2 3 4 5 6 7 8 9 10 11 |
id = wocky_porter_register_handler_from_anyone (porter, WOCKY_STANZA_TYPE_MESSAGE, WOCKY_STANZA_SUB_TYPE_NONE, WOCKY_PORTER_HANDLER_PRIORITY_MAX, msg_event_cb, self, '(', "event", ':', WOCKY_XMPP_NS_PUBSUB_EVENT, '(', "items", '@', "node", "http://jabber.org/protocol/geoloc", ')', ')', NULL); |
self |
A WockyPorter instance (passed to |
|
type |
The type of stanza to be handled, or WOCKY_STANZA_TYPE_NONE to match any type of stanza. |
|
sub_type |
The subtype of stanza to be handled, or WOCKY_STANZA_SUB_TYPE_NONE to match any type of stanza. |
|
priority |
a priority between |
|
callback |
A WockyPorterHandlerFunc, which should return |
|
user_data |
Passed to |
|
... |
a |
void wocky_porter_unregister_handler (WockyPorter *porter
,guint id
);
Unregister a registered handler. This handler won't be called when receiving stanzas anymore.
void wocky_porter_close_async (WockyPorter *porter
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
);
Request asynchronous closing of a WockyPorter. This fires the
WockyPorter::closing signal, flushes the sending queue, closes the XMPP
stream and waits that the other side closes the XMPP stream as well.
When this is done, callback
is called.
You can then call wocky_porter_close_finish()
to get the result of
the operation.
porter |
||
cancellable |
optional GCancellable object, |
|
callback |
callback to call when the request is satisfied |
|
user_data |
the data to pass to callback function |
gboolean wocky_porter_close_finish (WockyPorter *porter
,GAsyncResult *result
,GError **error
);
Finishes a close operation.
void wocky_porter_send_iq_async (WockyPorter *porter
,WockyStanza *stanza
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
);
Request asynchronous sending of a WockyStanza of type
WOCKY_STANZA_TYPE_IQ
and sub-type WOCKY_STANZA_SUB_TYPE_GET
or
WOCKY_STANZA_SUB_TYPE_SET
.
When the reply to this IQ has been received callback will be called.
You can then call wocky_porter_send_iq_finish to get the reply stanza.
porter |
||
stanza |
the WockyStanza to send |
|
cancellable |
optional GCancellable object, |
|
callback |
callback to call when the request is satisfied |
|
user_data |
the data to pass to callback function |
WockyStanza * wocky_porter_send_iq_finish (WockyPorter *porter
,GAsyncResult *result
,GError **error
);
Get the reply of an IQ query.
void wocky_porter_acknowledge_iq (WockyPorter *porter
,WockyStanza *stanza
,...
);
Sends an acknowledgement for stanza
back to the sender, as a shorthand for
calling wocky_stanza_build_iq_result()
and wocky_porter_send()
.
porter |
||
stanza |
a stanza of type WOCKY_STANZA_TYPE_IQ and sub-type either WOCKY_STANZA_SUB_TYPE_SET or WOCKY_STANZA_SUB_TYPE_GET |
|
... |
a |
void wocky_porter_send_iq_error (WockyPorter *porter
,WockyStanza *stanza
,WockyXmppError error_code
,const gchar *message
);
Sends an error reply for stanza
back to its sender, with the given
error_code
and message
, and including the child element from the original
stanza.
To send error replies with more detailed error elements, see
wocky_porter_send_iq_gerror()
, or use wocky_stanza_build_iq_error()
and
wocky_porter_send()
directly, possibly using wocky_stanza_error_to_node()
to
construct the error element.
porter |
the porter whence |
|
stanza |
a stanza of type |
|
error_code |
an XMPP Core stanza error code |
|
message |
an optional error message to include with the reply. |
[allow-none] |
void wocky_porter_send_iq_gerror (WockyPorter *porter
,WockyStanza *stanza
,const GError *error
);
Sends an error reply for stanza
back to its sender, building the
<error/>
element from the given error
. To send error
replies with simple XMPP Core stanza errors in the WOCKY_XMPP_ERROR
domain,
wocky_porter_send_iq_error()
may be more convenient to use.
porter |
the porter whence |
|
stanza |
a stanza of type |
|
error |
an error whose domain is either |
void wocky_porter_force_close_async (WockyPorter *porter
,GCancellable *cancellable
,GAsyncReadyCallback callback
,gpointer user_data
);
Force the WockyPorter to close the TCP connection of the underlying
WockyXmppConnection.
If a close operation is pending, it will be completed with the
WOCKY_PORTER_ERROR_FORCIBLY_CLOSED
error.
When the connection has been closed, callback
will be called.
You can then call wocky_porter_force_close_finish()
to get the result of
the operation.
porter |
||
cancellable |
optional GCancellable object, |
|
callback |
callback to call when the request is satisfied |
|
user_data |
the data to pass to callback function |
gboolean wocky_porter_force_close_finish (WockyPorter *porter
,GAsyncResult *result
,GError **error
);
Finishes a force close operation.
The WockyPorter specific errors.
The WockyPorter has not been started yet |
||
The WockyPorter is closing |
||
The WockyPorter is closed |
||
The WockyStanza is not an IQ |
||
The WockyPorter has been forced to close |
struct WockyPorterInterface { GTypeInterface parent_iface; const gchar * (*get_full_jid) (WockyPorter *self); const gchar * (*get_bare_jid) (WockyPorter *self); const gchar * (*get_resource) (WockyPorter *self); void (*start) (WockyPorter *porter); void (*send_async) (WockyPorter *porter, WockyStanza *stanza, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean (*send_finish) (WockyPorter *porter, GAsyncResult *result, GError **error); guint (*register_handler_from_by_stanza) ( WockyPorter *self, WockyStanzaType type, WockyStanzaSubType sub_type, const gchar *from, guint priority, WockyPorterHandlerFunc callback, gpointer user_data, WockyStanza *stanza); guint (*register_handler_from_anyone_by_stanza) ( WockyPorter *self, WockyStanzaType type, WockyStanzaSubType sub_type, guint priority, WockyPorterHandlerFunc callback, gpointer user_data, WockyStanza *stanza); void (*unregister_handler) (WockyPorter *self, guint id); void (*close_async) (WockyPorter *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean (*close_finish) (WockyPorter *self, GAsyncResult *result, GError **error); void (*send_iq_async) (WockyPorter *porter, WockyStanza *stanza, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); WockyStanza * (*send_iq_finish) (WockyPorter *porter, GAsyncResult *result, GError **error); void (*force_close_async) (WockyPorter *porter, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean (*force_close_finish) (WockyPorter *porter, GAsyncResult *result, GError **error); };
The vtable for a porter implementation.
GTypeInterface |
Fields shared with GTypeInterface. |
|
Return the full JID of the user according to the
porter; see |
||
Return the bare JID of the user according to the
porter; see |
||
Return the resource of the user according to the
porter; see |
||
Start the porter; see |
||
Start an asynchronous stanza send operation; see
|
||
Finish an asynchronous stanza send operation; see
|
||
Register a stanza handler from a
specific contact; see
|
||
Register a stanza hander
from any contact; see
|
||
Unregister a stanza handler; see
|
||
Start an asynchronous porter close operation; see
|
||
Finish an asynchronous porter close operation; see
|
||
Start an asynchronous IQ stanza send operation; see
|
||
Finish an asynchronous IQ stanza send operation;
see |
||
Start an asynchronous porter force close
operation; see |
||
Finish an asynchronous porter force close
operation; see |
“bare-jid”
property“bare-jid” gchar *
The user's bare JID (node@domain).
Flags: Read
Default value: NULL
“connection”
property“connection” WockyXmppConnection *
The underlying WockyXmppConnection wrapped by the WockyPorter
Flags: Read / Write / Construct Only
“full-jid”
property“full-jid” gchar *
The user's full JID (node@domain/resource).
Flags: Read / Write / Construct Only
Default value: NULL
“closing”
signalvoid user_function (WockyPorter *porter, gpointer user_data)
The ::closing signal is emitted when the WockyPorter starts to close its XMPP connection. Once this signal has been emitted, the WockyPorter can't be used to send stanzas any more.
porter |
the object on which the signal is emitted |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“remote-closed”
signalvoid user_function (WockyPorter *porter, gpointer user_data)
The ::remote-closed signal is emitted when the other side closed the XMPP stream.
porter |
the object on which the signal is emitted |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“remote-error”
signalvoid user_function (WockyPorter *porter, guint domain, gint code, gchar *message, gpointer user_data)
The ::remote-error signal is emitted when an error has been detected on the XMPP stream.
porter |
the object on which the signal is emitted |
|
domain |
error domain (a GQuark) |
|
code |
error code |
|
message |
human-readable informative error message |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“sending”
signalvoid user_function (WockyPorter *porter, WockyStanza *stanza, gpointer user_data)
The ::sending signal is emitted whenever WockyPorter sends data on the XMPP connection.
porter |
the object on which the signal is emitted |
|
stanza |
the WockyStanza being sent, or |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last