1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Add devicelist subscription

This commit is contained in:
Paul Fariello 2019-02-21 06:44:47 +01:40
parent 2602cbf785
commit bce1981128
6 changed files with 52 additions and 1 deletions

View File

@ -171,7 +171,8 @@ otr4_sources = \
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
omemo_sources = \
src/omemo/omemo.h src/omemo/omemo.c src/omemo/crypto.h src/omemo/crypto.c
src/omemo/omemo.h src/omemo/omemo.c src/omemo/crypto.h src/omemo/crypto.c \
src/xmpp/omemo.h src/xmpp/omemo.c
if BUILD_PYTHON_API
core_sources += $(python_sources)

15
src/xmpp/omemo.c Normal file
View File

@ -0,0 +1,15 @@
#include "xmpp/connection.h"
#include "xmpp/iq.h"
#include "xmpp/stanza.h"
void
omemo_devicelist_publish(void)
{
xmpp_ctx_t * const ctx = connection_get_ctx();
char *barejid = xmpp_jid_bare(ctx, session_get_account_name());
xmpp_stanza_t *iq = stanza_create_omemo_devicelist_subscription(ctx, barejid);
iq_send_stanza(iq);
xmpp_stanza_release(iq);
free(barejid);
}

1
src/xmpp/omemo.h Normal file
View File

@ -0,0 +1 @@
void omemo_devicelist_publish(void);

View File

@ -60,6 +60,10 @@
#include "xmpp/chat_session.h"
#include "xmpp/jid.h"
#ifdef HAVE_OMEMO
#include "xmpp/omemo.h"
#endif
// for auto reconnect
static struct {
char *name;
@ -313,6 +317,9 @@ session_login_success(gboolean secured)
roster_request();
bookmark_request();
blocking_request();
#ifdef HAVE_OMEMO
omemo_devicelist_publish();
#endif
// items discovery
char *domain = connection_get_domain();

View File

@ -2092,6 +2092,31 @@ stanza_create_command_config_submit_iq(xmpp_ctx_t *ctx, const char *const room,
return iq;
}
xmpp_stanza_t*
stanza_create_omemo_devicelist_pubsub_subscription(xmpp_ctx_t *ctx, const char *const jid)
{
char *id = connection_create_stanza_id("omemo_devicelist_subscribe");
xmpp_stanza_t *iq = xmpp_iq_new(ctx, STANZA_TYPE_SET, id);
free(id);
xmpp_stanza_t *pubsub = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(pubsub, STANZA_NAME_PUBSUB);
xmpp_stanza_set_ns(pubsub, STANZA_NS_PUBSUB);
xmpp_stanza_t *subscribe = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(subscribe, "subscribe");
xmpp_stanza_set_attribute(subscribe, "node", "eu.siacs.conversations.axolotl.devicelist");
xmpp_stanza_set_attribute(subscribe, "jid", jid);
xmpp_stanza_add_child(pubsub, subscribe);
xmpp_stanza_add_child(iq, pubsub);
xmpp_stanza_release(subscribe);
xmpp_stanza_release(pubsub);
return iq;
}
static void
_stanza_add_unique_id(xmpp_stanza_t *stanza, char *prefix)
{

View File

@ -284,6 +284,8 @@ xmpp_stanza_t* stanza_create_room_kick_iq(xmpp_ctx_t *const ctx, const char *con
xmpp_stanza_t* stanza_create_command_exec_iq(xmpp_ctx_t *ctx, const char *const target, const char *const node);
xmpp_stanza_t* stanza_create_command_config_submit_iq(xmpp_ctx_t *ctx, const char *const room, const char *const node, const char *const sessionid, DataForm *form);
xmpp_stanza_t* stanza_create_omemo_devicelist_pubsub_subscription(xmpp_ctx_t *ctx, const char *const jid);
int stanza_get_idle_time(xmpp_stanza_t *const stanza);
void stanza_attach_priority(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence, const int pri);