about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-03-24 23:34:24 +0000
committerJames Booth <boothj5@gmail.com>2015-03-24 23:34:24 +0000
commiteb5cb7b2f8a07c43a5cbd62e60b982493d17882b (patch)
treec46aa91ace912f8c4910b0cd57b930dbf0382db6 /src/xmpp
parent551f7df1f765e6a495b9d73603f76805f6609130 (diff)
downloadprofani-tty-eb5cb7b2f8a07c43a5cbd62e60b982493d17882b.tar.gz
Send encrypted messages
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/message.c30
-rw-r--r--src/xmpp/presence.c2
-rw-r--r--src/xmpp/stanza.h1
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"