about summary refs log tree commit diff stats
path: root/src/xmpp/message.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp/message.c')
-rw-r--r--src/xmpp/message.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index 4f093bcf..e14ae07d 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -93,6 +93,7 @@ static void _send_message_stanza(xmpp_stanza_t* const stanza);
 static gboolean _handle_mam(xmpp_stanza_t* const stanza);
 static void _handle_pubsub(xmpp_stanza_t* const stanza, xmpp_stanza_t* const event);
 static gboolean _handle_form(xmpp_stanza_t* const stanza);
+static gboolean _handle_jingle_message(xmpp_stanza_t* const stanza);
 
 #ifdef HAVE_LIBGPGME
 static xmpp_stanza_t* _openpgp_signcrypt(xmpp_ctx_t* ctx, const char* const to, const char* const text);
@@ -167,9 +168,14 @@ _message_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* con
         _handle_groupchat(stanza);
     } else if (type && g_strcmp0(type, STANZA_TYPE_HEADLINE) == 0) {
         _handle_headline(stanza);
-    } else if (type == NULL || g_strcmp0(type, STANZA_TYPE_CHAT) != 0 || g_strcmp0(type, STANZA_TYPE_NORMAL) != 0) {
+    } else if (type == NULL || g_strcmp0(type, STANZA_TYPE_CHAT) == 0 || g_strcmp0(type, STANZA_TYPE_NORMAL) == 0) {
         // type: chat, normal (==NULL)
 
+        // XEP-0353: Jingle Message Initiation
+        if (_handle_jingle_message(stanza)) {
+            return 1;
+        }
+
         // XEP-0045: Multi-User Chat 8.6 Voice Requests
         if (_handle_form(stanza)) {
             return 1;
@@ -624,6 +630,7 @@ message_send_chat_omemo(const char* const jid, uint32_t sid, GList* keys,
     xmpp_stanza_t* header = xmpp_stanza_new(ctx);
     xmpp_stanza_set_name(header, "header");
     char* sid_text = g_strdup_printf("%d", sid);
+    log_debug("[OMEMO] Sending from device sid %s", sid_text);
     xmpp_stanza_set_attribute(header, "sid", sid_text);
     g_free(sid_text);
 
@@ -634,6 +641,7 @@ message_send_chat_omemo(const char* const jid, uint32_t sid, GList* keys,
         xmpp_stanza_t* key_stanza = xmpp_stanza_new(ctx);
         xmpp_stanza_set_name(key_stanza, "key");
         char* rid = g_strdup_printf("%d", key->device_id);
+        log_debug("[OMEMO] Sending to device rid %s", rid == NULL ? "NULL" : rid );
         xmpp_stanza_set_attribute(key_stanza, "rid", rid);
         g_free(rid);
         if (key->prekey) {
@@ -1084,7 +1092,7 @@ _handle_groupchat(xmpp_stanza_t* const stanza)
 #endif
 
     if (!message->plain && !message->body) {
-        log_error("Message received without body for room: %s", from_jid->str);
+        log_info("Message received without body for room: %s", from_jid->str);
         goto out;
     } else if (!message->plain) {
         message->plain = strdup(message->body);
@@ -1242,7 +1250,7 @@ _handle_muc_private_message(xmpp_stanza_t* const stanza)
     message->body = xmpp_message_get_body(stanza);
 
     if (!message->plain && !message->body) {
-        log_error("Message received without body from: %s", message->from_jid->str);
+        log_info("Message received without body from: %s", message->from_jid->str);
         goto out;
     } else if (!message->plain) {
         message->plain = strdup(message->body);
@@ -1662,3 +1670,20 @@ message_request_voice(const char* const roomjid)
     _send_message_stanza(stanza);
     xmpp_stanza_release(stanza);
 }
+
+static gboolean
+_handle_jingle_message(xmpp_stanza_t* const stanza)
+{
+    xmpp_stanza_t* propose = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_PROPOSE, STANZA_NS_JINGLE_MESSAGE);
+
+    if (propose) {
+        xmpp_stanza_t* description = xmpp_stanza_get_child_by_ns(propose, STANZA_NS_JINGLE_RTP);
+        if (description) {
+            const char* const from = xmpp_stanza_get_from(stanza);
+            cons_show("Ring ring: %s is trying to call you", from);
+            cons_alert(NULL);
+            return TRUE;
+        }
+    }
+    return FALSE;
+}