aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--protocols/jabber/jabber.c21
-rw-r--r--protocols/jabber/jabber.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index 0da65c84..6e7b89af 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -433,6 +433,27 @@ static int jabber_buddy_msg(struct im_connection *ic, char *who, char *message,
bud->flags |= JBFLAG_PROBED_XEP85;
}
+ /* XEP-0364 suggests we add message processing hints (XEP-0334) to OTR messages,
+ mostly to avoid carbons (XEP-0280) and server-side message archiving.
+ OTR messages are roughly like this: /^\?OTR(.*\?| Error:|:)/
+ But I'm going to simplify it to messages starting with "?OTR". */
+ if (g_str_has_prefix(message, "?OTR")) {
+ int i;
+ char *hints[] = {
+ "no-copy", XMLNS_HINTS,
+ "no-permanent-store", XMLNS_HINTS,
+ "private", XMLNS_CARBONS,
+ NULL
+ };
+
+ for (i = 0; hints[i]; i += 2) {
+ struct xt_node *hint;
+ hint = xt_new_node(hints[i], NULL, NULL);
+ xt_add_attr(hint, "xmlns", hints[i + 1]);
+ xt_add_child(node, hint);
+ }
+ }
+
st = jabber_write_packet(ic, node);
xt_free_node(node);
diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h
index 8796b8fc..a52280af 100644
--- a/protocols/jabber/jabber.h
+++ b/protocols/jabber/jabber.h
@@ -229,6 +229,7 @@ struct jabber_transfer {
#define XMLNS_GMAILNOTIFY "google:mail:notify" /* Not a XEP */
#define XMLNS_CARBONS "urn:xmpp:carbons:2" /* XEP-0280 */
#define XMLNS_FORWARDING "urn:xmpp:forward:0" /* XEP-0297 */
+#define XMLNS_HINTS "urn:xmpp:hints" /* XEP-0334 */
#define XMLNS_CHATSTATES "http://jabber.org/protocol/chatstates" /* XEP-0085 */
#define XMLNS_DISCO_INFO "http://jabber.org/protocol/disco#info" /* XEP-0030 */
#define XMLNS_DISCO_ITEMS "http://jabber.org/protocol/disco#items" /* XEP-0030 */