From cf528383bd78306f41b4645eff0d286a017d2d71 Mon Sep 17 00:00:00 2001 From: Paul Fariello Date: Fri, 15 Mar 2019 19:32:28 +0140 Subject: Allow to start OMEMO in MUC --- src/command/cmd_funcs.c | 8 ++++++++ src/omemo/omemo.c | 13 +++++++++++++ src/omemo/omemo.h | 1 + 3 files changed, 22 insertions(+) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index f094be48..a882fa6d 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -7973,6 +7973,14 @@ cmd_omemo_start(ProfWin *window, const char *const command, gchar **args) omemo_start_session(chatwin->barejid); chatwin->is_omemo = TRUE; } else if (window->type == WIN_MUC) { + ProfMucWin *mucwin = (ProfMucWin*)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + + /* TODO: Check room is configured correctly, no anonymous and access to + * full jid */ + omemo_start_muc_sessions(mucwin->barejid); + + mucwin->is_omemo = TRUE; } else { win_println(window, THEME_DEFAULT, '-', "You must be in a regular chat window to start an OMEMO session."); return TRUE; diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index 62478e5d..29899cc1 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -294,6 +294,19 @@ omemo_start_session(const char *const barejid) } } +void +omemo_start_muc_sessions(const char *const barejid) +{ + GList *roster = muc_roster(barejid); + GList *iter; + for (iter = roster; iter != NULL; iter = iter->next) { + Occupant *occupant = (Occupant *)iter->data; + Jid *jid = jid_create(occupant->jid); + omemo_start_session(jid->barejid); + jid_destroy(jid); + } +} + gboolean omemo_loaded(void) { diff --git a/src/omemo/omemo.h b/src/omemo/omemo.h index 3cf8ea52..6686cee2 100644 --- a/src/omemo/omemo.h +++ b/src/omemo/omemo.h @@ -36,6 +36,7 @@ void omemo_trust(const char *const jid, const char *const fingerprint); void omemo_untrust(const char *const jid, const char *const fingerprint); void omemo_start_session(const char *const barejid); +void omemo_start_muc_sessions(const char *const barejid); void omemo_start_device_session(const char *const jid, uint32_t device_id, GList *prekeys, uint32_t signed_prekey_id, const unsigned char *const signed_prekey, size_t signed_prekey_len, const unsigned char *const signature, size_t signature_len, const unsigned char *const identity_key, size_t identity_key_len); gboolean omemo_loaded(void); -- cgit 1.4.1-2-gfad0