diff --git a/src/otr/otrlibv3.c b/src/otr/otrlibv3.c index 92ca3602..619e35cd 100644 --- a/src/otr/otrlibv3.c +++ b/src/otr/otrlibv3.c @@ -162,11 +162,15 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if ((context->active_fingerprint->trust != NULL) && (context->active_fingerprint->trust[0] != '\0')) { ui_smp_successful(context->username); ui_trust(context->username); - otr_trust(context->username); } else { ui_smp_unsuccessful_sender(context->username); ui_untrust(context->username); - otr_untrust(context->username); + } + } else { + if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) { + ui_smp_answer_success(context->username); + } else { + ui_smp_answer_failure(context->username); } } } @@ -180,11 +184,9 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if ((context->active_fingerprint->trust != NULL) && (context->active_fingerprint->trust[0] != '\0')) { ui_smp_successful(context->username); ui_trust(context->username); - otr_trust(context->username); } else { ui_smp_unsuccessful_receiver(context->username); ui_untrust(context->username); - otr_untrust(context->username); } } } diff --git a/src/ui/core.c b/src/ui/core.c index bc4a9587..4bccf5d5 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -877,6 +877,36 @@ _ui_smp_successful(const char * const recipient) } } +static void +_ui_smp_answer_success(const char * const recipient) +{ + ProfWin *window = wins_get_by_recipient(recipient); + if (window == NULL) { + return; + } else { + win_vprint_line(window, '!', 0, "%s successfully authenticated you.", recipient); + win_update_virtual(window); + if (wins_is_current(window)) { + ui_current_page_off(); + } + } +} + +static void +_ui_smp_answer_failure(const char * const recipient) +{ + ProfWin *window = wins_get_by_recipient(recipient); + if (window == NULL) { + return; + } else { + win_vprint_line(window, '!', 0, "%s failed to authenticated you.", recipient); + win_update_virtual(window); + if (wins_is_current(window)) { + ui_current_page_off(); + } + } +} + static void _ui_gone_insecure(const char * const recipient) { @@ -2112,6 +2142,8 @@ ui_init_module(void) ui_smp_unsuccessful_sender = _ui_smp_unsuccessful_sender; ui_smp_unsuccessful_receiver = _ui_smp_unsuccessful_receiver; ui_smp_aborted = _ui_smp_aborted; + ui_smp_answer_success = _ui_smp_answer_success; + ui_smp_answer_failure = _ui_smp_answer_failure; ui_chat_win_contact_online = _ui_chat_win_contact_online; ui_chat_win_contact_offline = _ui_chat_win_contact_offline; ui_handle_recipient_not_found = _ui_handle_recipient_not_found; diff --git a/src/ui/ui.h b/src/ui/ui.h index 5e850c6c..c4d42939 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -71,6 +71,9 @@ void (*ui_smp_unsuccessful_sender)(const char * const recipient); void (*ui_smp_unsuccessful_receiver)(const char * const recipient); void (*ui_smp_aborted)(const char * const recipient); +void (*ui_smp_answer_success)(const char * const recipient); +void (*ui_smp_answer_failure)(const char * const recipient); + unsigned long (*ui_get_idle_time)(void); void (*ui_reset_idle_time)(void); void (*ui_new_chat_win)(const char * const to);