Capture the bound jid.

I'd kind of like to be able to discover the JID with full resource for
some operations.
This commit is contained in:
Dustin Sallings
2009-05-26 12:07:53 -07:00
parent 43facaff45
commit d048124969
4 changed files with 31 additions and 1 deletions

View File

@@ -833,9 +833,17 @@ static int _handle_bind(xmpp_conn_t * const conn,
xmpp_error(conn->ctx, "xmpp", "Binding failed.");
xmpp_disconnect(conn);
} else if (type && strcmp(type, "result") == 0) {
/* TODO: extract resource if present */
xmpp_stanza_t *binding = xmpp_stanza_get_child_by_name(stanza, "bind");
xmpp_debug(conn->ctx, "xmpp", "Bind successful.");
if (binding) {
xmpp_stanza_t *jid_stanza = xmpp_stanza_get_child_by_name(binding,
"jid");
if (jid_stanza) {
conn->bound_jid = xmpp_stanza_get_text(jid_stanza);
}
}
/* establish a session if required */
if (conn->session_required) {
/* setup response handlers */

View File

@@ -178,6 +178,7 @@ struct _xmpp_conn_t {
char *connectport;
char *jid;
char *pass;
char *bound_jid;
char *stream_id;
/* send queue and parameters */

View File

@@ -105,6 +105,7 @@ xmpp_conn_t *xmpp_conn_new(xmpp_ctx_t * const ctx)
conn->jid = NULL;
conn->pass = NULL;
conn->stream_id = NULL;
conn->bound_jid = NULL;
conn->tls_support = 0;
conn->tls_failed = 0;
@@ -267,6 +268,7 @@ int xmpp_conn_release(xmpp_conn_t * const conn)
if (conn->domain) xmpp_free(ctx, conn->domain);
if (conn->jid) xmpp_free(ctx, conn->jid);
if (conn->bound_jid) xmpp_free(ctx, conn->bound_jid);
if (conn->pass) xmpp_free(ctx, conn->pass);
if (conn->stream_id) xmpp_free(ctx, conn->stream_id);
if (conn->lang) xmpp_free(ctx, conn->lang);
@@ -290,6 +292,24 @@ const char *xmpp_conn_get_jid(const xmpp_conn_t * const conn)
return conn->jid;
}
/**
* Get the JID discovered during binding time.
*
* This JID will contain the resource used by the current connection.
* This is useful in the case where a resource was not specified for
* binding.
*
* @param conn a Strophe connection object.
*
* @return a string containing the full JID or NULL if it's not been discovered
*
* @ingroup Connections
*/
const char *xmpp_conn_get_bound_jid(const xmpp_conn_t * const conn)
{
return conn->bound_jid;
}
/** Set the JID of the user that will be bound to the connection.
* If any JID was previously set, it will be discarded. This should not be
* be used after a connection is created. The function will make a copy of

View File

@@ -212,6 +212,7 @@ xmpp_conn_t * xmpp_conn_clone(xmpp_conn_t * const conn);
int xmpp_conn_release(xmpp_conn_t * const conn);
const char *xmpp_conn_get_jid(const xmpp_conn_t * const conn);
const char *xmpp_conn_get_bound_jid(const xmpp_conn_t * const conn);
void xmpp_conn_set_jid(xmpp_conn_t * const conn, const char * const jid);
const char *xmpp_conn_get_pass(const xmpp_conn_t * const conn);
void xmpp_conn_set_pass(xmpp_conn_t * const conn, const char * const pass);