mcabber/src/commands.c
changeset 1197 6f602d3270a4
parent 1192 7b8765c10abb
child 1202 ede6c7aa59b0
--- a/mcabber/src/commands.c	Sun Apr 22 15:01:20 2007 +0200
+++ b/mcabber/src/commands.c	Fri Apr 27 00:37:57 2007 +0200
@@ -247,6 +247,7 @@
   // PGP category
   compl_add_category_word(COMPL_PGP, "disable");
   compl_add_category_word(COMPL_PGP, "enable");
+  compl_add_category_word(COMPL_PGP, "force");
   compl_add_category_word(COMPL_PGP, "info");
   compl_add_category_word(COMPL_PGP, "setkey");
 }
@@ -322,7 +323,7 @@
 static void send_message(const char *msg, const char *subj)
 {
   const char *bjid;
-  guint crypted;
+  gint crypted;
 
   if (!jb_getonline()) {
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
@@ -344,6 +345,11 @@
   jb_send_msg(bjid, msg, buddy_gettype(BUDDATA(current_buddy)), subj, NULL,
               &crypted);
 
+  if (crypted == -1) {
+    scr_LogPrint(LPRINT_LOGNORM, "Encryption error.  Message was not sent.");
+    return;
+  }
+
   // Hook
   if (buddy_gettype(BUDDATA(current_buddy)) != ROSTER_TYPE_ROOM) {
     // local part (UI, logging, etc.)
@@ -954,7 +960,8 @@
 {
   char *bare_jid, *rp;
   char *hmsg;
-  guint crypted;
+  gint crypted;
+  gint retval = 0;
 
   if (!fjid || !*fjid) {
     scr_LogPrint(LPRINT_NORMAL, "You must specify a Jabber ID.");
@@ -994,12 +1001,19 @@
   // Network part
   jb_send_msg(fjid, msg, ROSTER_TYPE_USER, subj, NULL, &crypted);
 
+  if (crypted == -1) {
+    scr_LogPrint(LPRINT_LOGNORM, "Encryption error.  Message was not sent.");
+    retval = 1;
+    goto send_message_to_return;
+  }
+
   // Hook
   hk_message_out(bare_jid, rp, 0, hmsg, crypted);
+
+send_message_to_return:
   if (hmsg != msg) g_free(hmsg);
-
   if (rp) g_free(bare_jid);
-  return 0;
+  return retval;
 }
 
 static void do_say(char *arg)
@@ -2640,8 +2654,10 @@
     pgp_enable,
     pgp_disable,
     pgp_setkey,
+    pgp_force,
     pgp_info
   } op = 0;
+  int force = FALSE;
 
   paramlst = split_arg(arg, 3, 0); // subcmd, jid, [key]
   subcmd = *paramlst;
@@ -2660,6 +2676,12 @@
       op = pgp_disable;
     else if (!strcasecmp(subcmd, "setkey"))
       op = pgp_setkey;
+    else if ((!strcasecmp(subcmd, "force")) ||
+             (!strcasecmp(subcmd, "+force"))) {
+      op = pgp_force;
+      force = TRUE;
+    } else if (!strcasecmp(subcmd, "-force"))
+      op = pgp_force;
     else if (!strcasecmp(subcmd, "info"))
       op = pgp_info;
   }
@@ -2702,12 +2724,16 @@
   }
 
   if (fjid) { // fjid is actually a bare jid...
+    guint disabled;
     GString *sbuf;
     switch (op) {
       case pgp_enable:
       case pgp_disable:
           settings_pgp_setdisabled(fjid, (op == pgp_disable ? TRUE : FALSE));
           break;
+      case pgp_force:
+          settings_pgp_setforce(fjid, force);
+          break;
       case pgp_setkey:
           settings_pgp_setkeyid(fjid, keyid);
           break;
@@ -2718,10 +2744,15 @@
                             settings_pgp_getkeyid(fjid));
             scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO);
           }
+          disabled = settings_pgp_getdisabled(fjid);
           g_string_printf(sbuf, "PGP encryption is %s",
-                          (settings_pgp_getdisabled(fjid) ?  "disabled" :
-                           "enabled"));
+                          (disabled ?  "disabled" : "enabled"));
           scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO);
+          if (!disabled && settings_pgp_getforce(fjid)) {
+            scr_WriteIncomingMessage(fjid,
+                                     "Encryption enforced (no negotiation)",
+                                     0, HBB_PREFIX_INFO);
+          }
           g_string_free(sbuf, TRUE);
           break;
       default: