diff options
Diffstat (limited to 'src/xmpp/message.c')
-rw-r--r-- | src/xmpp/message.c | 31 |
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; +} |