diff options
author | Michael Vetter <jubalh@iodoru.org> | 2020-02-10 13:19:54 +0100 |
---|---|---|
committer | Michael Vetter <jubalh@iodoru.org> | 2020-02-10 13:19:54 +0100 |
commit | f16d56a15eb521e14d03779c19edfe96dc2e55ac (patch) | |
tree | 74f852bc8d1879d752a5021250471bc796520e82 /src/xmpp | |
parent | 968006e1ddf97b5d9e8245c9dabbb0cfcfca2c3a (diff) | |
download | profani-tty-f16d56a15eb521e14d03779c19edfe96dc2e55ac.tar.gz |
xep-0308: Initial support for incoming LMC
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/capabilities.c | 2 | ||||
-rw-r--r-- | src/xmpp/message.c | 19 | ||||
-rw-r--r-- | src/xmpp/stanza.h | 1 | ||||
-rw-r--r-- | src/xmpp/xmpp.h | 3 |
4 files changed, 25 insertions, 0 deletions
diff --git a/src/xmpp/capabilities.c b/src/xmpp/capabilities.c index e1587ef8..ebccec24 100644 --- a/src/xmpp/capabilities.c +++ b/src/xmpp/capabilities.c @@ -110,6 +110,8 @@ caps_init(void) if (prefs_get_boolean(PREF_LASTACTIVITY)) { g_hash_table_add(prof_features, strdup(STANZA_NS_LASTACTIVITY)); } + //TODO: depend on setting + g_hash_table_add(prof_features, strdup(STANZA_NS_LAST_MESSAGE_CORRECTION)); my_sha1 = NULL; } diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 1a97d9f1..f6100fa8 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -188,6 +188,7 @@ message_init(void) message->jid = NULL; message->id = NULL; message->originid = NULL; + message->replace_id = NULL; message->body = NULL; message->encrypted = NULL; message->plain = NULL; @@ -215,6 +216,10 @@ message_free(ProfMessage *message) xmpp_free(ctx, message->originid); } + if (message->replace_id) { + xmpp_free(ctx, message->replace_id); + } + if (message->body) { xmpp_free(ctx, message->body); } @@ -1113,6 +1118,20 @@ _handle_chat(xmpp_stanza_t *const stanza) ProfMessage *message = message_init(); message->jid = jid; + // message stanza id + const char *id = xmpp_stanza_get_id(stanza); + if (id) { + message->id = strdup(id); + } + + xmpp_stanza_t *replace_id_stanza = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_LAST_MESSAGE_CORRECTION); + if (replace_id_stanza) { + const char *replace_id = xmpp_stanza_get_id(replace_id_stanza); + if (replace_id) { + message->replace_id = strdup(replace_id); + } + } + if (mucuser) { message->mucuser = TRUE; } diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index 7b5cbe35..dc8c4e34 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -201,6 +201,7 @@ #define STANZA_NS_STABLE_ID "urn:xmpp:sid:0" #define STANZA_NS_USER_AVATAR_DATA "urn:xmpp:avatar:data" #define STANZA_NS_USER_AVATAR_METADATA "urn:xmpp:avatar:metadata" +#define STANZA_NS_LAST_MESSAGE_CORRECTION "urn:xmpp:message-correct:0" #define STANZA_DATAFORM_SOFTWARE "urn:xmpp:dataforms:softwareinfo" diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index f5b4ce70..dc1cdf27 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -68,6 +68,7 @@ #define XMPP_FEATURE_PUBSUB "http://jabber.org/protocol/pubsub" #define XMPP_FEATURE_PUBSUB_PUBLISH_OPTIONS "http://jabber.org/protocol/pubsub#publish-options" #define XMPP_FEATURE_USER_AVATAR_METADATA_NOTIFY "urn:xmpp:avatar:metadata+notify" +#define XMPP_FEATURE_LAST_MESSAGE_CORRECTION "urn:xmpp:message-correct:0" typedef enum { JABBER_CONNECTING, @@ -130,6 +131,8 @@ typedef struct prof_message_t { char *id; /* </origin-id> XEP-0359 */ char *originid; + /* <replace id> XEP-0308 LMC */ + char *replace_id; /* The raw body from xmpp message, either plaintext or OTR encrypted text */ char *body; /* The encrypted message as for PGP */ |