Skip to content

Commit 5157960

Browse files
committed
Event handler for a new FAST token
1 parent 911774b commit 5157960

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

src/auth.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,18 @@ _handle_sasl_result(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
364364
(char *)userdata);
365365

366366
if (conn->sasl_support & SASL_MASK_SASL2) {
367+
if (conn->fast_token_handler) {
368+
xmpp_stanza_t *token = xmpp_stanza_get_child_by_name_and_ns(
369+
stanza, "token", XMPP_NS_FAST
370+
);
371+
if (token) {
372+
conn->fast_token_handler(
373+
conn,
374+
xmpp_stanza_get_attribute(token, "token"),
375+
conn->fast_token_handler_userdata
376+
);
377+
}
378+
}
367379
/* New features will come, but no restart */
368380
if (conn->compression.allowed) {
369381
_handle_open_compress(conn);

src/common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ struct _xmpp_conn_t {
328328
hash_t *id_handlers;
329329
xmpp_handlist_t *handlers;
330330
xmpp_sockopt_callback sockopt_cb;
331+
xmpp_fast_token_handler fast_token_handler;
332+
void *fast_token_handler_userdata;
331333
};
332334

333335
void conn_disconnect(xmpp_conn_t *conn);

src/conn.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,21 @@ void xmpp_conn_set_pass(xmpp_conn_t *conn, const char *pass)
623623
conn->pass = pass ? strophe_strdup(conn->ctx, pass) : NULL;
624624
}
625625

626+
/** Set the fast token handler to receive new tokens from the server
627+
*
628+
* @param conn a Strophe connection object
629+
* @param handler the handler
630+
* @param userdata data to pass to the handler
631+
*
632+
* @ingroup Connections
633+
*/
634+
635+
void xmpp_conn_set_fast_token_handler(xmpp_conn_t *conn, xmpp_fast_token_handler handler, void *userdata)
636+
{
637+
conn->fast_token_handler = handler;
638+
conn->fast_token_handler_userdata = userdata;
639+
}
640+
626641
/** Get the user-agent id used for authentication of a connection.
627642
*
628643
* @param conn a Strophe connection object

strophe.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ extern "C" {
5656
* Namespace definition for 'urn:xmpp:sasl:2'.
5757
*/
5858
#define XMPP_NS_SASL2 "urn:xmpp:sasl:2"
59+
/** @def XMPP_NS_FAST
60+
* Namespace definition for 'urn:xmpp:fast:0'.
61+
*/
62+
#define XMPP_NS_FAST "urn:xmpp:fast:0"
5963
/** @def XMPP_NS_BIND
6064
* Namespace definition for 'urn:ietf:params:xml:ns:xmpp-bind'.
6165
*/
@@ -402,6 +406,8 @@ unsigned int xmpp_conn_cert_xmppaddr_num(xmpp_conn_t *conn);
402406
char *xmpp_conn_cert_xmppaddr(xmpp_conn_t *conn, unsigned int n);
403407
const char *xmpp_conn_get_pass(const xmpp_conn_t *conn);
404408
void xmpp_conn_set_pass(xmpp_conn_t *conn, const char *pass);
409+
typedef void (*xmpp_fast_token_handler)(xmpp_conn_t *conn, const char *token, void *userdata);
410+
void xmpp_conn_set_fast_token_handler(xmpp_conn_t *conn, xmpp_fast_token_handler handler, void *userdata);
405411
const char *xmpp_conn_get_user_agent_id(const xmpp_conn_t *conn);
406412
void xmpp_conn_set_user_agent_id(xmpp_conn_t *conn, const char *user_agent_id);
407413
const char *xmpp_conn_get_user_agent_software(const xmpp_conn_t *conn);

0 commit comments

Comments
 (0)