From b4722632b6fa447386b7d786efc8dafd22a3671c Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 30 Aug 2015 01:32:13 +0100 Subject: [PATCH] Split PGP incoming and outgoing message handling --- src/command/commands.c | 32 +++++----- src/common.c | 6 ++ src/event/client_events.c | 34 +++++------ src/event/server_events.c | 36 +++++------- src/otr/otr.c | 4 +- src/ui/core.c | 18 +++--- src/ui/titlebar.c | 103 +++++++++++++++++---------------- src/ui/ui.h | 6 ++ src/ui/win_types.h | 10 +--- src/ui/window.c | 8 ++- tests/unittests/test_cmd_otr.c | 14 +++-- 11 files changed, 142 insertions(+), 129 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index 7d829e2f..06c6d9b8 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -4355,12 +4355,12 @@ cmd_pgp(ProfWin *window, const char * const command, gchar **args) assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); } - if (chatwin->enc_mode == PROF_ENC_OTR) { + if (chatwin->is_otr) { ui_current_print_formatted_line('!', 0, "You must end the OTR session to start PGP encryption."); return TRUE; } - if (chatwin->enc_mode == PROF_ENC_PGP) { + if (chatwin->pgp_send) { ui_current_print_formatted_line('!', 0, "You have already started PGP encryption."); return TRUE; } @@ -4378,7 +4378,7 @@ cmd_pgp(ProfWin *window, const char * const command, gchar **args) return TRUE; } - chatwin->enc_mode = PROF_ENC_PGP; + chatwin->pgp_send = TRUE; ui_current_print_formatted_line('!', 0, "PGP encyption enabled."); return TRUE; } @@ -4396,12 +4396,12 @@ cmd_pgp(ProfWin *window, const char * const command, gchar **args) } ProfChatWin *chatwin = (ProfChatWin*)window; - if (chatwin->enc_mode != PROF_ENC_PGP) { + if (chatwin->pgp_send == FALSE) { ui_current_print_formatted_line('!', 0, "PGP encryption is not currently enabled."); return TRUE; } - chatwin->enc_mode = PROF_ENC_NONE; + chatwin->pgp_send = FALSE; ui_current_print_formatted_line('!', 0, "PGP encyption disabled."); return TRUE; } @@ -4527,7 +4527,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4552,12 +4552,12 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) } ui_ev_focus_win((ProfWin*)chatwin); - if (chatwin->enc_mode == PROF_ENC_PGP) { + if (chatwin->pgp_send) { ui_current_print_formatted_line('!', 0, "You must disable PGP encryption before starting an OTR session."); return TRUE; } - if (chatwin->enc_mode == PROF_ENC_OTR) { + if (chatwin->is_otr) { ui_current_print_formatted_line('!', 0, "You are already in an OTR session."); return TRUE; } @@ -4586,12 +4586,12 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode == PROF_ENC_PGP) { + if (chatwin->pgp_send) { ui_current_print_formatted_line('!', 0, "You must disable PGP encryption before starting an OTR session."); return TRUE; } - if (chatwin->enc_mode == PROF_ENC_OTR) { + if (chatwin->is_otr) { ui_current_print_formatted_line('!', 0, "You are already in an OTR session."); return TRUE; } @@ -4615,7 +4615,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4632,7 +4632,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4649,7 +4649,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4666,7 +4666,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4695,7 +4695,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } @@ -4711,7 +4711,7 @@ cmd_otr(ProfWin *window, const char * const command, gchar **args) ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if (chatwin->enc_mode != PROF_ENC_OTR) { + if (chatwin->is_otr == FALSE) { ui_current_print_formatted_line('!', 0, "You are not currently in an OTR session."); return TRUE; } diff --git a/src/common.c b/src/common.c index fc701b8b..0a314c91 100644 --- a/src/common.c +++ b/src/common.c @@ -195,6 +195,12 @@ str_replace(const char *string, const char *substr, gboolean str_contains_str(const char * const searchstr, const char * const substr) { + if (!searchstr) { + return FALSE; + } + if (!substr) { + return FALSE; + } return g_strrstr(searchstr, substr) != NULL; } diff --git a/src/event/client_events.c b/src/event/client_events.c index 56723f40..761452df 100644 --- a/src/event/client_events.c +++ b/src/event/client_events.c @@ -91,20 +91,19 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char * const msg) // OTR suported, PGP supported #ifdef HAVE_LIBOTR #ifdef HAVE_LIBGPGME - prof_enc_t enc_mode = chatwin->enc_mode; - if (enc_mode == PROF_ENC_NONE || enc_mode == PROF_ENC_OTR) { + if (chatwin->pgp_send) { + char *id = message_send_chat_pgp(chatwin->barejid, msg); + chat_log_pgp_msg_out(chatwin->barejid, msg); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PGP); + free(id); + } else { gboolean handled = otr_on_message_send(chatwin, msg); if (!handled) { char *id = message_send_chat(chatwin->barejid, msg); chat_log_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_NONE); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PLAIN); free(id); } - } else { // enc_mode = PROF_ENC_PGP - char *id = message_send_chat_pgp(chatwin->barejid, msg); - chat_log_pgp_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_PGP); - free(id); } return; #endif @@ -117,7 +116,7 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char * const msg) if (!handled) { char *id = message_send_chat(chatwin->barejid, msg); chat_log_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_NONE); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PLAIN); free(id); } return; @@ -127,16 +126,15 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char * const msg) // OTR unsupported, PGP supported #ifndef HAVE_LIBOTR #ifdef HAVE_LIBGPGME - prof_enc_t enc_mode = chatwin->enc_mode; - if (enc_mode == PROF_ENC_NONE) { - char *id = message_send_chat(chatwin->barejid, msg); - chat_log_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_NONE); - free(id); - } else if (enc_mode == PROF_ENC_PGP) { + if (chatwin->pgp_send) { char *id = message_send_chat_pgp(chatwin->barejid, msg); chat_log_pgp_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_PGP); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PGP); + free(id); + } else { + char *id = message_send_chat(chatwin->barejid, msg); + chat_log_msg_out(chatwin->barejid, msg); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PLAIN); free(id); } return; @@ -148,7 +146,7 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char * const msg) #ifndef HAVE_LIBGPGME char *id = message_send_chat(chatwin->barejid, msg); chat_log_msg_out(chatwin->barejid, msg); - ui_outgoing_chat_msg(chatwin, msg, id, PROF_ENC_NONE); + ui_outgoing_chat_msg(chatwin, msg, id, PROF_MSG_PLAIN); free(id); return; #endif diff --git a/src/event/server_events.c b/src/event/server_events.c index ae85d32a..74aa4d74 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -187,7 +187,7 @@ sv_ev_incoming_carbon(char *barejid, char *resource, char *message) new_win = TRUE; } - ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_ENC_NONE); + ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_MSG_PLAIN); chat_log_msg_in(barejid, message); } @@ -197,17 +197,14 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, char *barejid, char { char *decrypted = p_gpg_decrypt(pgp_message); if (decrypted) { - if (chatwin->enc_mode == PROF_ENC_NONE) { - win_println((ProfWin*)chatwin, 0, "PGP encryption enabled."); - } - ui_incoming_msg(chatwin, resource, decrypted, NULL, new_win, PROF_ENC_PGP); + ui_incoming_msg(chatwin, resource, decrypted, NULL, new_win, PROF_MSG_PGP); chat_log_pgp_msg_in(barejid, decrypted); - chatwin->enc_mode = PROF_ENC_PGP; + chatwin->pgp_recv = TRUE; p_gpg_free_decrypted(decrypted); } else { - ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_ENC_NONE); + ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_MSG_PLAIN); chat_log_msg_in(barejid, message); - chatwin->enc_mode = PROF_ENC_NONE; + chatwin->pgp_recv = FALSE; } } #endif @@ -220,23 +217,27 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, char *barejid, char char *otr_res = otr_on_message_recv(barejid, resource, message, &decrypted); if (otr_res) { if (decrypted) { - ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win, PROF_ENC_OTR); + ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win, PROF_MSG_OTR); + chatwin->pgp_send = FALSE; } else { - ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win, PROF_ENC_NONE); + ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win, PROF_MSG_PLAIN); } chat_log_otr_msg_in(barejid, otr_res, decrypted); otr_free_message(otr_res); + chatwin->pgp_recv = FALSE; } } #endif +#ifndef HAVE_LIBOTR static void _sv_ev_incoming_plain(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message) { - ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_ENC_NONE); + ui_incoming_msg(chatwin, resource, message, NULL, new_win, PROF_MSG_PLAIN); chat_log_msg_in(barejid, message); - chatwin->enc_mode = PROF_ENC_NONE; + chatwin->pgp_recv = FALSE; } +#endif void sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_message) @@ -253,18 +254,13 @@ sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_m #ifdef HAVE_LIBOTR #ifdef HAVE_LIBGPGME if (pgp_message) { - if (chatwin->enc_mode == PROF_ENC_OTR) { + if (chatwin->is_otr) { win_println((ProfWin*)chatwin, 0, "PGP encrypted message received whilst in OTR session."); } else { // PROF_ENC_NONE, PROF_ENC_PGP _sv_ev_incoming_pgp(chatwin, new_win, barejid, resource, message, pgp_message); } } else { - if (chatwin->enc_mode == PROF_ENC_PGP) { - win_println((ProfWin*)chatwin, 0, "PGP encryption disabled."); - _sv_ev_incoming_plain(chatwin, new_win, barejid, resource, message); - } else { - _sv_ev_incoming_otr(chatwin, new_win, barejid, resource, message); - } + _sv_ev_incoming_otr(chatwin, new_win, barejid, resource, message); } return; #endif @@ -316,7 +312,7 @@ sv_ev_delayed_message(char *barejid, char *message, GDateTime *timestamp) new_win = TRUE; } - ui_incoming_msg(chatwin, NULL, message, timestamp, new_win, PROF_ENC_NONE); + ui_incoming_msg(chatwin, NULL, message, timestamp, new_win, PROF_MSG_PLAIN); chat_log_msg_in_delayed(barejid, message, timestamp); } diff --git a/src/otr/otr.c b/src/otr/otr.c index 7e68ecb3..511d6843 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -325,7 +325,7 @@ otr_on_message_send(ProfChatWin *chatwin, const char * const message) if (encrypted) { id = message_send_chat_otr(chatwin->barejid, encrypted); chat_log_otr_msg_out(chatwin->barejid, message); - ui_outgoing_chat_msg(chatwin, message, id, PROF_ENC_OTR); + ui_outgoing_chat_msg(chatwin, message, id, PROF_MSG_OTR); otr_free_message(encrypted); free(id); return TRUE; @@ -345,7 +345,7 @@ otr_on_message_send(ProfChatWin *chatwin, const char * const message) if (policy == PROF_OTRPOLICY_OPPORTUNISTIC) { char *otr_tagged_msg = otr_tag_message(message); id = message_send_chat_otr(chatwin->barejid, otr_tagged_msg); - ui_outgoing_chat_msg(chatwin, message, id, PROF_ENC_NONE); + ui_outgoing_chat_msg(chatwin, message, id, PROF_MSG_PLAIN); chat_log_msg_out(chatwin->barejid, message); free(otr_tagged_msg); free(id); diff --git a/src/ui/core.c b/src/ui/core.c index d66806d4..9ee8b9a5 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -478,7 +478,7 @@ ui_incoming_private_msg(const char * const fulljid, const char * const message, // currently viewing chat window with sender if (wins_is_current(window)) { - win_print_incoming_message(window, timestamp, display_from, message, PROF_ENC_NONE); + win_print_incoming_message(window, timestamp, display_from, message, PROF_MSG_PLAIN); title_bar_set_typing(FALSE); status_bar_active(num); @@ -487,7 +487,7 @@ ui_incoming_private_msg(const char * const fulljid, const char * const message, privatewin->unread++; status_bar_new(num); cons_show_incoming_message(display_from, num); - win_print_incoming_message(window, timestamp, display_from, message, PROF_ENC_NONE); + win_print_incoming_message(window, timestamp, display_from, message, PROF_MSG_PLAIN); if (prefs_get_boolean(PREF_FLASH)) { flash(); @@ -713,7 +713,7 @@ ui_close_connected_win(int index) ProfChatWin *chatwin = (ProfChatWin*) window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); #ifdef HAVE_LIBOTR - if (chatwin->enc_mode == PROF_ENC_OTR) { + if (chatwin->is_otr) { otr_end_session(chatwin->barejid); } #endif @@ -895,7 +895,7 @@ ui_gone_secure(const char * const barejid, gboolean trusted) chatwin = (ProfChatWin*)window; } - chatwin->enc_mode = PROF_ENC_OTR; + chatwin->is_otr = TRUE; chatwin->otr_is_trusted = trusted; if (trusted) { win_print(window, '!', 0, NULL, 0, THEME_OTR_STARTED_TRUSTED, "", "OTR session started (trusted)."); @@ -923,7 +923,7 @@ ui_gone_insecure(const char * const barejid) { ProfChatWin *chatwin = wins_get_chat(barejid); if (chatwin) { - chatwin->enc_mode = PROF_ENC_NONE; + chatwin->is_otr = FALSE; chatwin->otr_is_trusted = FALSE; ProfWin *window = (ProfWin*)chatwin; @@ -1042,7 +1042,7 @@ ui_trust(const char * const barejid) { ProfChatWin *chatwin = wins_get_chat(barejid); if (chatwin) { - chatwin->enc_mode = PROF_ENC_OTR; + chatwin->is_otr = TRUE; chatwin->otr_is_trusted = TRUE; ProfWin *window = (ProfWin*)chatwin; @@ -1058,7 +1058,7 @@ ui_untrust(const char * const barejid) { ProfChatWin *chatwin = wins_get_chat(barejid); if (chatwin) { - chatwin->enc_mode = PROF_ENC_OTR; + chatwin->is_otr = TRUE; chatwin->otr_is_trusted = FALSE; ProfWin *window = (ProfWin*)chatwin; @@ -1290,9 +1290,9 @@ void ui_outgoing_chat_msg(ProfChatWin *chatwin, const char * const message, char *id, prof_enc_t enc_mode) { char enc_char = '-'; - if (enc_mode == PROF_ENC_OTR) { + if (enc_mode == PROF_MSG_OTR) { enc_char = prefs_get_otr_char(); - } else if (enc_mode == PROF_ENC_PGP) { + } else if (enc_mode == PROF_MSG_PGP) { enc_char = prefs_get_pgp_char(); } diff --git a/src/ui/titlebar.c b/src/ui/titlebar.c index 16a9eaff..3bf8ab22 100644 --- a/src/ui/titlebar.c +++ b/src/ui/titlebar.c @@ -250,70 +250,73 @@ _show_privacy(ProfChatWin *chatwin) int trusted_attrs = theme_attrs(THEME_TITLE_TRUSTED); int untrusted_attrs = theme_attrs(THEME_TITLE_UNTRUSTED); - switch (chatwin->enc_mode) { - case PROF_ENC_NONE: - if (prefs_get_boolean(PREF_ENC_WARN)) { - wprintw(win, " "); - wattron(win, bracket_attrs); - wprintw(win, "["); - wattroff(win, bracket_attrs); - wattron(win, unencrypted_attrs); - wprintw(win, "unencrypted"); - wattroff(win, unencrypted_attrs); - wattron(win, bracket_attrs); - wprintw(win, "]"); - wattroff(win, bracket_attrs); - } - break; - - case PROF_ENC_OTR: + if (chatwin->is_otr) { + wprintw(win, " "); + wattron(win, bracket_attrs); + wprintw(win, "["); + wattroff(win, bracket_attrs); + wattron(win, encrypted_attrs); + wprintw(win, "OTR"); + wattroff(win, encrypted_attrs); + wattron(win, bracket_attrs); + wprintw(win, "]"); + wattroff(win, bracket_attrs); + if (chatwin->otr_is_trusted) { wprintw(win, " "); wattron(win, bracket_attrs); wprintw(win, "["); wattroff(win, bracket_attrs); - wattron(win, encrypted_attrs); - wprintw(win, "OTR"); - wattroff(win, encrypted_attrs); + wattron(win, trusted_attrs); + wprintw(win, "trusted"); + wattroff(win, trusted_attrs); wattron(win, bracket_attrs); wprintw(win, "]"); wattroff(win, bracket_attrs); - if (chatwin->otr_is_trusted) { - wprintw(win, " "); - wattron(win, bracket_attrs); - wprintw(win, "["); - wattroff(win, bracket_attrs); - wattron(win, trusted_attrs); - wprintw(win, "trusted"); - wattroff(win, trusted_attrs); - wattron(win, bracket_attrs); - wprintw(win, "]"); - wattroff(win, bracket_attrs); - } else { - wprintw(win, " "); - wattron(win, bracket_attrs); - wprintw(win, "["); - wattroff(win, bracket_attrs); - wattron(win, untrusted_attrs); - wprintw(win, "untrusted"); - wattroff(win, untrusted_attrs); - wattron(win, bracket_attrs); - wprintw(win, "]"); - wattroff(win, bracket_attrs); - } - break; - - case PROF_ENC_PGP: + } else { wprintw(win, " "); wattron(win, bracket_attrs); wprintw(win, "["); wattroff(win, bracket_attrs); - wattron(win, encrypted_attrs); - wprintw(win, "PGP"); - wattroff(win, encrypted_attrs); + wattron(win, untrusted_attrs); + wprintw(win, "untrusted"); + wattroff(win, untrusted_attrs); wattron(win, bracket_attrs); wprintw(win, "]"); wattroff(win, bracket_attrs); - break; + } + } else if (chatwin->pgp_send || chatwin->pgp_recv) { + GString *pgpmsg = g_string_new("PGP "); + if (chatwin->pgp_send && !chatwin->pgp_recv) { + g_string_append(pgpmsg, "send"); + } else if (!chatwin->pgp_send && chatwin->pgp_recv) { + g_string_append(pgpmsg, "recv"); + } else { + g_string_append(pgpmsg, "send/recv"); + } + wprintw(win, " "); + wattron(win, bracket_attrs); + wprintw(win, "["); + wattroff(win, bracket_attrs); + wattron(win, encrypted_attrs); + wprintw(win, pgpmsg->str); + wattroff(win, encrypted_attrs); + wattron(win, bracket_attrs); + wprintw(win, "]"); + wattroff(win, bracket_attrs); + g_string_free(pgpmsg, TRUE); + } else { + if (prefs_get_boolean(PREF_ENC_WARN)) { + wprintw(win, " "); + wattron(win, bracket_attrs); + wprintw(win, "["); + wattroff(win, bracket_attrs); + wattron(win, unencrypted_attrs); + wprintw(win, "unencrypted"); + wattroff(win, unencrypted_attrs); + wattron(win, bracket_attrs); + wprintw(win, "]"); + wattroff(win, bracket_attrs); + } } } diff --git a/src/ui/ui.h b/src/ui/ui.h index bd38cbe8..e47cbddd 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -45,6 +45,12 @@ #define NO_COLOUR_FROM 8 #define NO_COLOUR_DATE 16 +typedef enum { + PROF_MSG_PLAIN, + PROF_MSG_OTR, + PROF_MSG_PGP +} prof_enc_t; + // ui startup and control void ui_init(void); void ui_load_colours(void); diff --git a/src/ui/win_types.h b/src/ui/win_types.h index 3214fa94..bace4537 100644 --- a/src/ui/win_types.h +++ b/src/ui/win_types.h @@ -89,12 +89,6 @@ typedef enum { WIN_XML } win_type_t; -typedef enum { - PROF_ENC_NONE, - PROF_ENC_OTR, - PROF_ENC_PGP -} prof_enc_t; - typedef struct prof_win_t { win_type_t type; ProfLayout *layout; @@ -109,8 +103,10 @@ typedef struct prof_chat_win_t { char *barejid; int unread; ChatState *state; - prof_enc_t enc_mode; + gboolean is_otr; gboolean otr_is_trusted; + gboolean pgp_send; + gboolean pgp_recv; char *resource_override; gboolean history_shown; unsigned long memcheck; diff --git a/src/ui/window.c b/src/ui/window.c index f6ad7cee..a78b0e15 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -135,8 +135,10 @@ win_create_chat(const char * const barejid) new_win->barejid = strdup(barejid); new_win->resource_override = NULL; - new_win->enc_mode = PROF_ENC_NONE; + new_win->is_otr = FALSE; new_win->otr_is_trusted = FALSE; + new_win->pgp_recv = FALSE; + new_win->pgp_send = FALSE; new_win->history_shown = FALSE; new_win->unread = 0; new_win->state = chat_state_new(); @@ -884,9 +886,9 @@ win_print_incoming_message(ProfWin *window, GDateTime *timestamp, switch (window->type) { case WIN_CHAT: - if (enc_mode == PROF_ENC_OTR) { + if (enc_mode == PROF_MSG_OTR) { enc_char = prefs_get_otr_char(); - } else if (enc_mode == PROF_ENC_PGP) { + } else if (enc_mode == PROF_MSG_PGP) { enc_char = prefs_get_pgp_char(); } win_print(window, enc_char, 0, timestamp, NO_ME, THEME_TEXT_THEM, from, message); diff --git a/tests/unittests/test_cmd_otr.c b/tests/unittests/test_cmd_otr.c index 90ee7ae4..d6d588b0 100644 --- a/tests/unittests/test_cmd_otr.c +++ b/tests/unittests/test_cmd_otr.c @@ -321,6 +321,8 @@ void cmd_otr_theirfp_shows_message_when_non_otr_chat_window(void **state) ProfChatWin chatwin; chatwin.window = window; chatwin.memcheck = PROFCHATWIN_MEMCHECK; + chatwin.pgp_send = FALSE; + chatwin.is_otr = FALSE; will_return(jabber_get_connection_status, JABBER_CONNECTED); @@ -346,7 +348,8 @@ void cmd_otr_theirfp_shows_fingerprint(void **state) chatwin.window = window; chatwin.barejid = recipient; chatwin.memcheck = PROFCHATWIN_MEMCHECK; - chatwin.enc_mode = PROF_ENC_OTR; + chatwin.pgp_send = FALSE; + chatwin.is_otr = TRUE; will_return(jabber_get_connection_status, JABBER_CONNECTED); @@ -404,7 +407,8 @@ void cmd_otr_start_shows_message_when_already_started(void **state) chatwin.window = window; chatwin.barejid = recipient; chatwin.memcheck = PROFCHATWIN_MEMCHECK; - chatwin.enc_mode = PROF_ENC_OTR; + chatwin.pgp_send = FALSE; + chatwin.is_otr = TRUE; expect_ui_current_print_formatted_line('!', 0, "You are already in an OTR session."); @@ -426,7 +430,8 @@ void cmd_otr_start_shows_message_when_no_key(void **state) chatwin.window = window; chatwin.barejid = recipient; chatwin.memcheck = PROFCHATWIN_MEMCHECK; - chatwin.enc_mode = PROF_ENC_NONE; + chatwin.pgp_send = FALSE; + chatwin.is_otr = FALSE; expect_ui_current_print_formatted_line('!', 0, "You have not generated or loaded a private key, use '/otr gen'"); @@ -447,7 +452,8 @@ cmd_otr_start_sends_otr_query_message_to_current_recipeint(void **state) chatwin.window = window; chatwin.barejid = recipient; chatwin.memcheck = PROFCHATWIN_MEMCHECK; - chatwin.enc_mode = PROF_ENC_NONE; + chatwin.pgp_send = FALSE; + chatwin.is_otr = FALSE; will_return(jabber_get_connection_status, JABBER_CONNECTED); will_return(otr_key_loaded, TRUE);