diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 14776136..813cb792 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -1090,16 +1090,12 @@ _handle_groupchat(xmpp_stanza_t* const stanza) message->id = strdup(id); } - // XEP-0359 §5: only accept whose 'by' matches the MUC room char* stanzaid = NULL; xmpp_stanza_t* stanzaidst = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_STANZA_ID, STANZA_NS_STABLE_ID); if (stanzaidst) { - const char* by = xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_BY); - if (by && g_strcmp0(by, from_jid->barejid) == 0) { - stanzaid = (char*)xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_ID); - if (stanzaid) { - message->stanzaid = strdup(stanzaid); - } + stanzaid = (char*)xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_ID); + if (stanzaid) { + message->stanzaid = strdup(stanzaid); } } @@ -1288,12 +1284,13 @@ _handle_muc_private_message(xmpp_stanza_t* const stanza) #endif // XEP-0203 §4: only trust from a server domain. - { - const char* my_domain = connection_get_domain(); - message->timestamp = stanza_get_delay_from(stanza, (gchar*)my_domain); - if (!message->timestamp && message->from_jid->domainpart) { - message->timestamp = stanza_get_delay_from(stanza, message->from_jid->domainpart); - } + const char* my_domain = connection_get_domain(); + message->timestamp = stanza_get_delay_from(stanza, my_domain); + if (!message->timestamp && message->from_jid->domainpart) { + message->timestamp = stanza_get_delay_from(stanza, message->from_jid->domainpart); + } + if (!message->timestamp) { + message->timestamp = g_date_time_new_now_local(); } message->body = xmpp_message_get_body(stanza); @@ -1418,17 +1415,13 @@ _handle_chat(xmpp_stanza_t* const stanza, gboolean is_mam, gboolean is_carbon, c log_warning("MAM received with no result id"); } } else { - // XEP-0359 §5: only accept whose 'by' matches our server + // live messages use XEP-0359 char* stanzaid = NULL; xmpp_stanza_t* stanzaidst = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_STANZA_ID, STANZA_NS_STABLE_ID); if (stanzaidst) { - const char* by = xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_BY); - const char* my_domain = connection_get_domain(); - if (by && my_domain && g_strcmp0(by, my_domain) == 0) { - stanzaid = (char*)xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_ID); - if (stanzaid) { - message->stanzaid = strdup(stanzaid); - } + stanzaid = (char*)xmpp_stanza_get_attribute(stanzaidst, STANZA_ATTR_ID); + if (stanzaid) { + message->stanzaid = strdup(stanzaid); } } } @@ -1449,7 +1442,7 @@ _handle_chat(xmpp_stanza_t* const stanza, gboolean is_mam, gboolean is_carbon, c // XEP-0203 §4: only trust from a server domain, not from // the remote client which could forge an arbitrary timestamp. const char* my_domain = connection_get_domain(); - message->timestamp = stanza_get_delay_from(stanza, (gchar*)my_domain); + message->timestamp = stanza_get_delay_from(stanza, my_domain); if (!message->timestamp && jid->domainpart) { message->timestamp = stanza_get_delay_from(stanza, jid->domainpart); } diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 8a07cc75..5df9d37c 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -1183,7 +1183,7 @@ _stanza_get_delay_timestamp_xep0091(xmpp_stanza_t* const x_stanza) } GDateTime* -stanza_get_delay_from(xmpp_stanza_t* const stanza, gchar* from) +stanza_get_delay_from(xmpp_stanza_t* const stanza, const char* const from) { xmpp_stanza_t* delay = NULL; diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index f20a7733..fc6c890c 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -196,7 +196,6 @@ #define STANZA_ATTR_FILENAME "filename" #define STANZA_ATTR_SIZE "size" #define STANZA_ATTR_CONTENTTYPE "content-type" -#define STANZA_ATTR_BY "by" #define STANZA_ATTR_LABEL "label" #define STANZA_TEXT_AWAY "away" @@ -330,7 +329,7 @@ xmpp_stanza_t* stanza_create_mediated_invite(xmpp_ctx_t* ctx, const char* const gboolean stanza_contains_chat_state(xmpp_stanza_t* stanza); GDateTime* stanza_get_delay(xmpp_stanza_t* const stanza); -GDateTime* stanza_get_delay_from(xmpp_stanza_t* const stanza, gchar* from); +GDateTime* stanza_get_delay_from(xmpp_stanza_t* const stanza, const char* const from); GDateTime* stanza_get_oldest_delay(xmpp_stanza_t* const stanza); GDateTime* stanza_get_oldest_delay_from(xmpp_stanza_t* const stanza, const char* const from);