From ec6f9df48605d63f058e766a9d10567a303cb390 Mon Sep 17 00:00:00 2001 From: Thorben Günther Date: Fri, 12 Mar 2021 12:55:19 +0100 Subject: MUC: Add voice request closes https://github.com/profanity-im/profanity/issues/1211 --- src/xmpp/message.c | 12 +++++++++++ src/xmpp/stanza.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/xmpp/stanza.h | 7 ++++++- src/xmpp/xmpp.h | 1 + 4 files changed, 77 insertions(+), 1 deletion(-) (limited to 'src/xmpp') diff --git a/src/xmpp/message.c b/src/xmpp/message.c index ab899407..064e7b29 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -1560,3 +1560,15 @@ _openpgp_signcrypt(xmpp_ctx_t* ctx, const char* const to, const char* const text return signcrypt; } #endif // HAVE_LIBGPGME + +void +message_request_voice(const char* const roomjid) +{ + xmpp_ctx_t* const ctx = connection_get_ctx(); + xmpp_stanza_t* stanza = stanza_request_voice(ctx, roomjid); + + log_debug("Requesting voice in %s", roomjid); + + _send_message_stanza(stanza); + xmpp_stanza_release(stanza); +} diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 86bd0d91..3ce2c88a 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -2755,3 +2755,61 @@ stanza_change_password(xmpp_ctx_t* ctx, const char* const user, const char* cons return iq; } + +xmpp_stanza_t* +stanza_request_voice(xmpp_ctx_t* ctx, const char* const room) +{ + char* id = connection_create_stanza_id(); + xmpp_stanza_t* message = xmpp_message_new(ctx, NULL, room, id); + free(id); + + xmpp_stanza_t* request_voice_st = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(request_voice_st, STANZA_NAME_X); + xmpp_stanza_set_type(request_voice_st, STANZA_TYPE_SUBMIT); + xmpp_stanza_set_ns(request_voice_st, STANZA_NS_DATA); + + xmpp_stanza_t* form_type = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(form_type, STANZA_NAME_FIELD); + xmpp_stanza_set_attribute(form_type, STANZA_ATTR_VAR, "FORM_TYPE"); + + xmpp_stanza_t* value_request = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(value_request, STANZA_NAME_VALUE); + + xmpp_stanza_t* request_text = xmpp_stanza_new(ctx); + xmpp_stanza_set_text(request_text, STANZA_NS_VOICEREQUEST); + + xmpp_stanza_add_child(value_request, request_text); + xmpp_stanza_release(request_text); + + xmpp_stanza_add_child(form_type, value_request); + xmpp_stanza_release(value_request); + + xmpp_stanza_add_child(request_voice_st, form_type); + xmpp_stanza_release(form_type); + + xmpp_stanza_t* request_role = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(request_role, STANZA_NAME_FIELD); + xmpp_stanza_set_attribute(request_role, STANZA_ATTR_VAR, "muc#role"); + xmpp_stanza_set_attribute(request_role, STANZA_ATTR_TYPE, "list-single"); + xmpp_stanza_set_attribute(request_role, STANZA_ATTR_LABEL, "Requested role"); + + xmpp_stanza_t* value_role = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(value_role, STANZA_NAME_VALUE); + + xmpp_stanza_t* role_text = xmpp_stanza_new(ctx); + xmpp_stanza_set_text(role_text, "participant"); + + xmpp_stanza_add_child(value_role, role_text); + xmpp_stanza_release(role_text); + + xmpp_stanza_add_child(request_role, value_role); + xmpp_stanza_release(value_role); + + xmpp_stanza_add_child(request_voice_st, request_role); + xmpp_stanza_release(request_role); + + xmpp_stanza_add_child(message, request_voice_st); + xmpp_stanza_release(request_voice_st); + + return message; +} diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index 35f38055..3600fb0b 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -158,6 +158,7 @@ #define STANZA_TYPE_SET "set" #define STANZA_TYPE_ERROR "error" #define STANZA_TYPE_RESULT "result" +#define STANZA_TYPE_SUBMIT "submit" #define STANZA_ATTR_TO "to" #define STANZA_ATTR_FROM "from" @@ -186,6 +187,7 @@ #define STANZA_ATTR_FILENAME "filename" #define STANZA_ATTR_SIZE "size" #define STANZA_ATTR_CONTENTTYPE "content-type" +#define STANZA_ATTR_LABEL "label" #define STANZA_TEXT_AWAY "away" #define STANZA_TEXT_DND "dnd" @@ -233,6 +235,7 @@ #define STANZA_NS_EXT_GAJIM_BOOKMARKS "xmpp:gajim.org/bookmarks" #define STANZA_NS_RSM "http://jabber.org/protocol/rsm" #define STANZA_NS_REGISTER "jabber:iq:register" +#define STANZA_NS_VOICEREQUEST "http://jabber.org/protocol/muc#request" #define STANZA_DATAFORM_SOFTWARE "urn:xmpp:dataforms:softwareinfo" @@ -338,7 +341,6 @@ xmpp_stanza_t* stanza_create_command_config_submit_iq(xmpp_ctx_t* ctx, const cha void stanza_attach_publish_options_va(xmpp_ctx_t* const ctx, xmpp_stanza_t* const iq, int count, ...); void stanza_attach_publish_options(xmpp_ctx_t* const ctx, xmpp_stanza_t* const iq, const char* const option, const char* const value); - xmpp_stanza_t* stanza_create_omemo_devicelist_request(xmpp_ctx_t* ctx, const char* const id, const char* const jid); xmpp_stanza_t* stanza_create_omemo_devicelist_subscribe(xmpp_ctx_t* ctx, const char* const jid); xmpp_stanza_t* stanza_create_omemo_devicelist_publish(xmpp_ctx_t* ctx, GList* const ids); @@ -396,4 +398,7 @@ xmpp_stanza_t* stanza_create_mam_iq(xmpp_ctx_t* ctx, const char* const jid, cons xmpp_stanza_t* stanza_change_password(xmpp_ctx_t* ctx, const char* const user, const char* const password); +xmpp_stanza_t* +stanza_request_voice(xmpp_ctx_t* ctx, const char* const room); + #endif diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index d4d32836..5f4efece 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -214,6 +214,7 @@ void message_send_composing(const char* const jid); void message_send_paused(const char* const jid); void message_send_gone(const char* const jid); void message_send_invite(const char* const room, const char* const contact, const char* const reason); +void message_request_voice(const char* const roomjid); bool message_is_sent_by_us(const ProfMessage* const message, bool checkOID); -- cgit 1.4.1-2-gfad0