diff options
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/iq.c | 11 | ||||
-rw-r--r-- | src/xmpp/stanza.c | 27 | ||||
-rw-r--r-- | src/xmpp/stanza.h | 3 | ||||
-rw-r--r-- | src/xmpp/xmpp.h | 1 |
4 files changed, 42 insertions, 0 deletions
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index d03e635c..bcadbdce 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -168,6 +168,16 @@ _iq_create_instant_room(const char * const room_jid) xmpp_stanza_release(iq); } +static void +_iq_destroy_instant_room(const char * const room_jid) +{ + xmpp_conn_t * const conn = connection_get_conn(); + xmpp_ctx_t * const ctx = connection_get_ctx(); + xmpp_stanza_t *iq = stanza_create_instant_room_destroy_iq(ctx, room_jid); + xmpp_send(conn, iq); + xmpp_stanza_release(iq); +} + static int _error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) @@ -678,4 +688,5 @@ iq_init_module(void) iq_send_software_version = _iq_send_software_version; iq_set_autoping = _iq_set_autoping; iq_create_instant_room = _iq_create_instant_room; + iq_destroy_instant_room = _iq_destroy_instant_room; } diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index ac8f0dc1..51e63ccc 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -453,6 +453,33 @@ stanza_create_instant_room_request_iq(xmpp_ctx_t *ctx, const char * const room_j } xmpp_stanza_t * +stanza_create_instant_room_destroy_iq(xmpp_ctx_t *ctx, const char * const room_jid) +{ + xmpp_stanza_t *iq = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(iq, STANZA_NAME_IQ); + xmpp_stanza_set_type(iq, STANZA_TYPE_SET); + xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room_jid); + char *id = create_unique_id("leave"); + xmpp_stanza_set_id(iq, id); + free(id); + + xmpp_stanza_t *query = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(query, STANZA_NAME_QUERY); + xmpp_stanza_set_ns(query, STANZA_NS_MUC_OWNER); + + xmpp_stanza_t *destroy = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(destroy, STANZA_NAME_DESTROY); + + xmpp_stanza_add_child(query, destroy); + xmpp_stanza_release(destroy); + + xmpp_stanza_add_child(iq, query); + xmpp_stanza_release(query); + + return iq; +} + +xmpp_stanza_t * stanza_create_presence(xmpp_ctx_t * const ctx) { xmpp_stanza_t *presence = xmpp_stanza_new(ctx); diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index 7afea8e5..eb309e19 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -74,6 +74,7 @@ #define STANZA_NAME_PASSWORD "password" #define STANZA_NAME_CONFERENCE "conference" #define STANZA_NAME_VALUE "value" +#define STANZA_NAME_DESTROY "destroy" // error conditions #define STANZA_NAME_BAD_REQUEST "bad-request" @@ -204,6 +205,8 @@ gboolean stanza_muc_requires_config(xmpp_stanza_t * const stanza); char * stanza_get_new_nick(xmpp_stanza_t * const stanza); xmpp_stanza_t* stanza_create_instant_room_request_iq(xmpp_ctx_t *ctx, const char * const room_jid); +xmpp_stanza_t* stanza_create_instant_room_destroy_iq(xmpp_ctx_t *ctx, + const char * const room_jid); int stanza_get_idle_time(xmpp_stanza_t * const stanza); char * stanza_get_caps_str(xmpp_stanza_t * const stanza); diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index cd28ddd2..cc587872 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -140,6 +140,7 @@ void (*iq_disco_info_request)(gchar *jid); void (*iq_disco_items_request)(gchar *jid); void (*iq_set_autoping)(int seconds); void (*iq_create_instant_room)(const char * const room_jid); +void (*iq_destroy_instant_room)(const char * const room_jid); // caps functions Capabilities* (*caps_get)(const char * const caps_str); |