diff options
author | lightb <lightb@bigfoot> | 2014-04-21 18:03:07 -0400 |
---|---|---|
committer | lightb <lightb@bigfoot> | 2014-04-21 18:03:07 -0400 |
commit | da89e241720a65ecbf4c8f667f8245ceeb4a7d48 (patch) | |
tree | 64261627e6491ba3a96eec3960c7748f61b5c8ab | |
parent | 1ceca892965189b6f8751f40bd5e58e83d0f7baa (diff) | |
download | profani-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.c | 23 | ||||
-rw-r--r-- | src/otr/otr.h | 2 | ||||
-rw-r--r-- | src/otr/otrlibv4.c | 2 |
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, |