about summary refs log tree commit diff stats
path: root/src/event/server_events.c
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2019-10-18 10:40:24 +0200
committerMichael Vetter <jubalh@iodoru.org>2019-10-18 10:40:24 +0200
commit430b2eaa0d3f8638f3442b3dca26d6bf4a4891cb (patch)
tree058d9d4e1f7dd84e53d96d7367396ab65868522b /src/event/server_events.c
parent53640f6e970d9387f3da110b69cdff81b1eace88 (diff)
downloadprofani-tty-430b2eaa0d3f8638f3442b3dca26d6bf4a4891cb.tar.gz
Log incoming MUC messages if origin-id sais they dont come from us
Regards https://github.com/profanity-im/profanity/issues/1201
Diffstat (limited to 'src/event/server_events.c')
-rw-r--r--src/event/server_events.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/event/server_events.c b/src/event/server_events.c
index 0417f35d..b875c22e 100644
--- a/src/event/server_events.c
+++ b/src/event/server_events.c
@@ -49,6 +49,7 @@
 #include "event/common.h"
 #include "plugins/plugins.h"
 #include "ui/window_list.h"
+#include "xmpp/connection.h"
 #include "xmpp/muc.h"
 #include "xmpp/chat_session.h"
 #include "xmpp/roster_list.h"
@@ -294,8 +295,25 @@ sv_ev_room_message(ProfMessage *message)
 
     char *mynick = muc_nick(mucwin->roomjid);
 
-    // only log messages from others. we log our own via mucwin_outgoing_msg()
-    if (g_strcmp0(mynick, message->jid->resourcepart) != 0) {
+    // messages from ourselves
+    if (g_strcmp0(mynick, message->jid->resourcepart) == 0) {
+        // test if message was sent from this client
+        // we check the </origin-id> for this we calculate a hash into it so we can detect
+        // whether this client sent it. See connection_create_stanza_id()
+        gsize tmp_len;
+        char *tmp = (char*)g_base64_decode(message->id, &tmp_len);
+        if (tmp_len > 10) {
+            // log if not from this client
+            if (g_strcmp0(&tmp[10], connection_get_profanity_identifier()) != 0) {
+                if (message->enc == PROF_MSG_ENC_OMEMO) {
+                    groupchat_log_omemo_msg_in(message->jid->barejid, message->jid->resourcepart, (char*)tmp);
+                } else {
+                    groupchat_log_msg_in(message->jid->barejid, message->jid->resourcepart, message->plain);
+                }
+            }
+        }
+    // messages from others
+    } else {
         if (message->enc == PROF_MSG_ENC_OMEMO) {
             groupchat_log_omemo_msg_in(message->jid->barejid, message->jid->resourcepart, message->plain);
         } else {