about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorlightb <lightb@bigfoot>2014-04-21 18:03:07 -0400
committerlightb <lightb@bigfoot>2014-04-21 18:03:07 -0400
commitda89e241720a65ecbf4c8f667f8245ceeb4a7d48 (patch)
tree64261627e6491ba3a96eec3960c7748f61b5c8ab
parent1ceca892965189b6f8751f40bd5e58e83d0f7baa (diff)
downloadprofani-tty-da89e241720a65ecbf4c8f667f8245ceeb4a7d48.tar.gz
Added opportunistic send functionality to cmd_msg
If policy is set to 'opportunistic' then when the user executes cmd_msg it will append the otr whitespace tag to the message

The other client should start AKE once it receives the message.

TODO: Analyze incoming messages for whitespace tag
-rw-r--r--src/command/commands.c23
-rw-r--r--src/otr/otr.h2
-rw-r--r--src/otr/otrlibv4.c2
3 files changed, 23 insertions, 4 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index 8d5893c7..54310c76 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <glib.h>
+#include <libotr/proto.h>
 
 #include "chat_session.h"
 #include "command/commands.h"
@@ -946,10 +947,6 @@ cmd_msg(gchar **args, struct cmd_help_t help)
         }
         if (msg != NULL) {
 #ifdef HAVE_LIBOTR
-        if ((strcmp(prefs_get_string(PREF_OTR_POLICY), "always") == 0) && !otr_is_secure(usr_jid)) {
-                cons_show_error("Failed to send message. Please check OTR policy");
-                return TRUE;
-                }
             if (otr_is_secure(usr_jid)) {
                 char *encrypted = otr_encrypt_message(usr_jid, msg);
                 if (encrypted != NULL) {
@@ -971,7 +968,25 @@ cmd_msg(gchar **args, struct cmd_help_t help)
                     cons_show_error("Failed to encrypt and send message,");
                 }
             } else {
+		char *policy = prefs_get_string(PREF_OTR_POLICY);
+
+		if (strcmp(policy, "always") == 0)
+			{
+			cons_show_error("Failed to send message. Please check OTR policy");
+			return TRUE;
+		} else if (strcmp(policy, "opportunistic") == 0) {
+			char	*otr_base_tag = OTRL_MESSAGE_TAG_BASE;
+			char	*otr_v2_tag = OTRL_MESSAGE_TAG_V2;
+			int 	N = strlen(otr_base_tag) + strlen(otr_v2_tag) + strlen(msg) + 1;
+			char	*temp = (char *) malloc( (unsigned) N*sizeof(char *) );
+			strcpy( temp , msg );
+  			strcat( temp , otr_base_tag);
+			strcat( temp, otr_v2_tag);
+			message_send(temp, usr_jid);
+			free(temp);
+		} else {
                 message_send(msg, usr_jid);
+		}
                 ui_outgoing_msg("me", usr_jid, msg);
 
                 if (((win_type == WIN_CHAT) || (win_type == WIN_CONSOLE)) && prefs_get_boolean(PREF_CHLOG)) {
diff --git a/src/otr/otr.h b/src/otr/otr.h
index 5239c033..21a15e4b 100644
--- a/src/otr/otr.h
+++ b/src/otr/otr.h
@@ -23,6 +23,8 @@
 #ifndef OTR_H
 #define OTR_H
 
+#define OTRL_TAG " \t  \t\t\t\t \t \t \t  "
+
 #include "config/accounts.h"
 
 void otr_init_module(void);
diff --git a/src/otr/otrlibv4.c b/src/otr/otrlibv4.c
index 01afa868..9187473a 100644
--- a/src/otr/otrlibv4.c
+++ b/src/otr/otrlibv4.c
@@ -108,6 +108,8 @@ otrlib_encrypt_message(OtrlUserState user_state, OtrlMessageAppOps *ops, char *j
 {
     gcry_error_t err;
 
+    ops.policy = OTRL_POLICY_SEND_WHITESPACE_TAG;
+
     err = otrl_message_sending(
         user_state,
         ops,