diff options
author | James Booth <boothj5@gmail.com> | 2015-03-24 23:34:24 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-03-24 23:34:24 +0000 |
commit | eb5cb7b2f8a07c43a5cbd62e60b982493d17882b (patch) | |
tree | c46aa91ace912f8c4910b0cd57b930dbf0382db6 /src/xmpp | |
parent | 551f7df1f765e6a495b9d73603f76805f6609130 (diff) | |
download | profani-tty-eb5cb7b2f8a07c43a5cbd62e60b982493d17882b.tar.gz |
Send encrypted messages
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/message.c | 30 | ||||
-rw-r--r-- | src/xmpp/presence.c | 2 | ||||
-rw-r--r-- | src/xmpp/stanza.h | 1 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c index e6927f76..57e434c5 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -49,6 +49,7 @@ #include "roster_list.h" #include "xmpp/stanza.h" #include "xmpp/xmpp.h" +#include "pgp/gpg.h" #define HANDLE(ns, type, func) xmpp_handler_add(conn, func, ns, STANZA_NAME_MESSAGE, type, ctx) @@ -104,7 +105,34 @@ message_send_chat(const char * const barejid, const char * const msg) } char *id = create_unique_id("msg"); - xmpp_stanza_t *message = stanza_create_message(ctx, id, jid, STANZA_TYPE_CHAT, msg); + xmpp_stanza_t *message = NULL; + +#ifdef HAVE_LIBGPGME + char *account_name = jabber_get_account_name(); + ProfAccount *account = accounts_get_account(account_name); + if (account->pgp_keyid) { + Jid *jidp = jid_create(jid); + char *encrypted = p_gpg_encrypt(jidp->barejid, msg); + if (encrypted) { + message = stanza_create_message(ctx, id, jid, STANZA_TYPE_CHAT, "This message is encrypted."); + xmpp_stanza_t *x = xmpp_stanza_new(ctx); + xmpp_stanza_set_name(x, STANZA_NAME_X); + xmpp_stanza_set_ns(x, STANZA_NS_ENCRYPTED); + xmpp_stanza_t *enc_st = xmpp_stanza_new(ctx); + xmpp_stanza_set_text(enc_st, encrypted); + xmpp_stanza_add_child(x, enc_st); + xmpp_stanza_release(enc_st); + xmpp_stanza_add_child(message, x); + xmpp_stanza_release(x); + free(encrypted); + } else { + message = stanza_create_message(ctx, id, jid, STANZA_TYPE_CHAT, msg); + } + } +#else + message = stanza_create_message(ctx, id, jid, STANZA_TYPE_CHAT, msg); +#endif + free(jid); if (state) { diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 241932e6..07ac05dd 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -232,7 +232,7 @@ presence_update(const resource_presence_t presence_type, const char * const msg, char *account_name = jabber_get_account_name(); ProfAccount *account = accounts_get_account(account_name); if (account->pgp_keyid) { - char *signed_status = p_gpg_sign_str(msg, account->pgp_keyid); + char *signed_status = p_gpg_sign(msg, account->pgp_keyid); if (signed_status) { xmpp_stanza_t *x = xmpp_stanza_new(ctx); diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h index 1460642d..6bd01ab4 100644 --- a/src/xmpp/stanza.h +++ b/src/xmpp/stanza.h @@ -160,6 +160,7 @@ #define STANZA_NS_FORWARD "urn:xmpp:forward:0" #define STANZA_NS_RECEIPTS "urn:xmpp:receipts" #define STANZA_NS_SIGNED "jabber:x:signed" +#define STANZA_NS_ENCRYPTED "jabber:x:encrypted" #define STANZA_DATAFORM_SOFTWARE "urn:xmpp:dataforms:softwareinfo" |