mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-24 03:06:21 +00:00
Add to_jid field to ProfMessage struct
Is usefult in many cases if we want cleaner code. Hope this edit didn't break anything though ;-)
This commit is contained in:
@@ -200,7 +200,8 @@ message_init(void)
|
||||
{
|
||||
ProfMessage *message = malloc(sizeof(ProfMessage));
|
||||
|
||||
message->jid = NULL;
|
||||
message->from_jid = NULL;
|
||||
message->to_jid = NULL;
|
||||
message->id = NULL;
|
||||
message->originid = NULL;
|
||||
message->replace_id = NULL;
|
||||
@@ -219,8 +220,12 @@ void
|
||||
message_free(ProfMessage *message)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
if (message->jid) {
|
||||
jid_destroy(message->jid);
|
||||
if (message->from_jid) {
|
||||
jid_destroy(message->from_jid);
|
||||
}
|
||||
|
||||
if (message->to_jid) {
|
||||
jid_destroy(message->to_jid);
|
||||
}
|
||||
|
||||
if (message->id) {
|
||||
@@ -801,51 +806,51 @@ _handle_groupchat(xmpp_stanza_t *const stanza)
|
||||
}
|
||||
|
||||
const char *room_jid = xmpp_stanza_get_from(stanza);
|
||||
Jid *jid = jid_create(room_jid);
|
||||
Jid *from_jid = jid_create(room_jid);
|
||||
|
||||
// handle room subject
|
||||
xmpp_stanza_t *subject = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_SUBJECT);
|
||||
if (subject) {
|
||||
char *subject_text;
|
||||
subject_text = xmpp_stanza_get_text(subject);
|
||||
sv_ev_room_subject(jid->barejid, jid->resourcepart, subject_text);
|
||||
sv_ev_room_subject(from_jid->barejid, from_jid->resourcepart, subject_text);
|
||||
xmpp_free(ctx, subject_text);
|
||||
|
||||
jid_destroy(jid);
|
||||
jid_destroy(from_jid);
|
||||
return;
|
||||
}
|
||||
|
||||
// handle room broadcasts
|
||||
if (!jid->resourcepart) {
|
||||
if (!from_jid->resourcepart) {
|
||||
char *broadcast;
|
||||
broadcast = xmpp_message_get_body(stanza);
|
||||
if (!broadcast) {
|
||||
jid_destroy(jid);
|
||||
jid_destroy(from_jid);
|
||||
return;
|
||||
}
|
||||
|
||||
sv_ev_room_broadcast(room_jid, broadcast);
|
||||
xmpp_free(ctx, broadcast);
|
||||
|
||||
jid_destroy(jid);
|
||||
jid_destroy(from_jid);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!jid_is_valid_room_form(jid)) {
|
||||
log_error("Invalid room JID: %s", jid->str);
|
||||
jid_destroy(jid);
|
||||
if (!jid_is_valid_room_form(from_jid)) {
|
||||
log_error("Invalid room JID: %s", from_jid->str);
|
||||
jid_destroy(from_jid);
|
||||
return;
|
||||
}
|
||||
|
||||
// room not active in profanity
|
||||
if (!muc_active(jid->barejid)) {
|
||||
log_error("Message received for inactive chat room: %s", jid->str);
|
||||
jid_destroy(jid);
|
||||
if (!muc_active(from_jid->barejid)) {
|
||||
log_error("Message received for inactive chat room: %s", from_jid->str);
|
||||
jid_destroy(from_jid);
|
||||
return;
|
||||
}
|
||||
|
||||
ProfMessage *message = message_init();
|
||||
message->jid = jid;
|
||||
message->from_jid = from_jid;
|
||||
message->type = PROF_MSG_TYPE_MUC;
|
||||
|
||||
if (id) {
|
||||
@@ -875,17 +880,17 @@ _handle_groupchat(xmpp_stanza_t *const stanza)
|
||||
#endif
|
||||
|
||||
if (!message->plain && !message->body) {
|
||||
log_error("Message received without body for room: %s", jid->str);
|
||||
log_error("Message received without body for room: %s", from_jid->str);
|
||||
goto out;
|
||||
} else if (!message->plain) {
|
||||
message->plain = strdup(message->body);
|
||||
}
|
||||
|
||||
// determine if the notifications happened whilst offline (MUC history)
|
||||
message->timestamp = stanza_get_delay_from(stanza, jid->barejid);
|
||||
message->timestamp = stanza_get_delay_from(stanza, from_jid->barejid);
|
||||
if (message->timestamp == NULL) {
|
||||
// checking the domainpart is a workaround for some prosody versions (gh#1190)
|
||||
message->timestamp = stanza_get_delay_from(stanza, jid->domainpart);
|
||||
message->timestamp = stanza_get_delay_from(stanza, from_jid->domainpart);
|
||||
}
|
||||
|
||||
bool is_muc_history = FALSE;
|
||||
@@ -996,7 +1001,7 @@ _handle_muc_private_message(xmpp_stanza_t *const stanza)
|
||||
message->type = PROF_MSG_TYPE_MUCPM;
|
||||
|
||||
const gchar *from = xmpp_stanza_get_from(stanza);
|
||||
message->jid = jid_create(from);
|
||||
message->from_jid = jid_create(from);
|
||||
|
||||
// message stanza id
|
||||
const char *id = xmpp_stanza_get_id(stanza);
|
||||
@@ -1016,7 +1021,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->jid->str);
|
||||
log_error("Message received without body from: %s", message->from_jid->str);
|
||||
goto out;
|
||||
} else if (!message->plain) {
|
||||
message->plain = strdup(message->body);
|
||||
@@ -1133,17 +1138,18 @@ _handle_carbons(xmpp_stanza_t *const stanza)
|
||||
message->encrypted = xmpp_stanza_get_text(x);
|
||||
}
|
||||
|
||||
//TODO: now that profmessage has from_jid AND to_jid we should save both. and maybe also add is_carbon so we can decide later on.
|
||||
if (message->plain || message->encrypted || message->body) {
|
||||
// if we are the recipient, treat as standard incoming message
|
||||
if (g_strcmp0(my_jid->barejid, jid_to->barejid) == 0) {
|
||||
jid_destroy(jid_to);
|
||||
message->jid = jid_from;
|
||||
message->from_jid = jid_from;
|
||||
sv_ev_incoming_carbon(message);
|
||||
|
||||
// else treat as a sent message
|
||||
} else {
|
||||
jid_destroy(jid_from);
|
||||
message->jid = jid_to;
|
||||
message->from_jid = jid_to;
|
||||
sv_ev_outgoing_carbon(message);
|
||||
}
|
||||
}
|
||||
@@ -1200,7 +1206,9 @@ _handle_chat(xmpp_stanza_t *const stanza)
|
||||
|
||||
// standard chat message, use jid without resource
|
||||
ProfMessage *message = message_init();
|
||||
message->jid = jid;
|
||||
// TODO: safe to_jid too. also need to have the same check like in carbons. in case this is MAM.
|
||||
// or have a is_mam and handle later.
|
||||
message->from_jid = jid;
|
||||
message->type = PROF_MSG_TYPE_CHAT;
|
||||
|
||||
// message stanza id
|
||||
|
||||
@@ -137,7 +137,8 @@ typedef enum {
|
||||
} prof_msg_type_t;
|
||||
|
||||
typedef struct prof_message_t {
|
||||
Jid *jid;
|
||||
Jid *from_jid;
|
||||
Jid *to_jid;
|
||||
/* regular <message id=""> */
|
||||
char *id;
|
||||
/* </origin-id> XEP-0359 */
|
||||
|
||||
Reference in New Issue
Block a user