# HG changeset patch # User Mikael Berthe # Date 1164557554 -3600 # Node ID 52cfe9bf98407986baa7887e645ccfa2946dfa41 # Parent ebbde723614b813d5afd20ae5f5f745005d8f090 Encryption support for outgoing messages diff -r ebbde723614b -r 52cfe9bf9840 mcabber/src/jabglue.c --- a/mcabber/src/jabglue.c Sun Nov 26 17:08:21 2006 +0100 +++ b/mcabber/src/jabglue.c Sun Nov 26 17:12:34 2006 +0100 @@ -509,13 +509,16 @@ { xmlnode x; gchar *strtype; +#if defined HAVE_GPGME || defined JEP0022 || defined JEP0085 + char *rname, *barejid; + GSList *sl_buddy; +#endif #if defined JEP0022 || defined JEP0085 xmlnode event; - char *rname, *barejid; - GSList *sl_buddy; guint use_jep85 = 0; struct jep0085 *jep85 = NULL; #endif + gchar *enc = NULL; if (!online) return; @@ -524,18 +527,7 @@ else strtype = TMSG_CHAT; - x = jutil_msgnew(strtype, (char*)jid, NULL, (char*)text); - if (subject) { - xmlnode y; - y = xmlnode_insert_tag(x, "subject"); - xmlnode_insert_cdata(y, subject, (unsigned) -1); - } - -#if defined JEP0022 || defined JEP0085 - // If typing notifications are disabled, we can skip all this stuff... - if (chatstates_disabled || type == ROSTER_TYPE_ROOM) - goto jb_send_msg_no_chatstates; - +#if defined HAVE_GPGME || defined JEP0022 || defined JEP0085 rname = strchr(jid, JID_RESOURCE_SEPARATOR); barejid = jidtodisp(jid); sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER); @@ -545,6 +537,37 @@ // which hopefully will give us the most likely resource. if (rname) rname++; +#endif + +#ifdef HAVE_GPGME + if (type == ROSTER_TYPE_USER && sl_buddy && gpg_enabled()) { + struct pgp_data *res_pgpdata; + res_pgpdata = buddy_resource_pgp(sl_buddy->data, rname); + if (res_pgpdata && res_pgpdata->sign_keyid) + enc = gpg_encrypt(text, res_pgpdata->sign_keyid); + } +#endif + + x = jutil_msgnew(strtype, (char*)jid, NULL, + (enc ? "This message is PGP-encrypted." : (char*)text)); + if (subject) { + xmlnode y; + y = xmlnode_insert_tag(x, "subject"); + xmlnode_insert_cdata(y, subject, (unsigned) -1); + } + if (enc) { + xmlnode y; + y = xmlnode_insert_tag(x, "x"); + xmlnode_put_attrib(y, "xmlns", NS_ENCRYPTED); + xmlnode_insert_cdata(y, enc, (unsigned) -1); + g_free(enc); + } + +#if defined JEP0022 || defined JEP0085 + // If typing notifications are disabled, we can skip all this stuff... + if (chatstates_disabled || type == ROSTER_TYPE_ROOM) + goto jb_send_msg_no_chatstates; + if (sl_buddy) jep85 = buddy_resource_jep85(sl_buddy->data, rname); #endif