diff --git a/src/event/server_events.c b/src/event/server_events.c index 270e7c98..5af19f7f 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -172,7 +172,13 @@ void sv_ev_incoming_message(char *barejid, char *resource, char *message) { #ifdef HAVE_LIBOTR - otr_on_message_recv(barejid, resource, message); + gboolean decrypted = FALSE; + char *otr_res = otr_on_message_recv(barejid, resource, message, &decrypted); + if (otr_res) { + ui_incoming_msg(barejid, resource, otr_res, NULL); + chat_log_otr_msg_in(barejid, otr_res, decrypted); + otr_free_message(otr_res); + } #else ui_incoming_msg(barejid, resource, message, NULL); chat_log_msg_in(barejid, message); diff --git a/src/otr/otr.c b/src/otr/otr.c index f2f5833f..e61a0e47 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -272,12 +272,9 @@ otr_on_connect(ProfAccount *account) return; } -void -otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message) +char* +otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message, gboolean *was_decrypted) { - gboolean was_decrypted = FALSE; - char *decrypted; - prof_otrpolicy_t policy = otr_get_policy(barejid); char *whitespace_base = strstr(message, OTRL_MESSAGE_TAG_BASE); @@ -298,22 +295,19 @@ otr_on_message_recv(const char * const barejid, const char * const resource, con } } } - decrypted = otr_decrypt_message(barejid, message, &was_decrypted); - // internal OTR message - if (decrypted == NULL) { - return; + char *decrypted = otr_decrypt_message(barejid, message, was_decrypted); + if (!decrypted) { // internal OTR message + return NULL; } - if (policy == PROF_OTRPOLICY_ALWAYS && !was_decrypted && !whitespace_base) { + if (policy == PROF_OTRPOLICY_ALWAYS && *was_decrypted == FALSE && !whitespace_base) { char *otr_query_message = otr_start_query(); cons_show("Attempting to start OTR session..."); message_send_chat_otr(barejid, otr_query_message); } - ui_incoming_msg(barejid, resource, decrypted, NULL); - chat_log_otr_msg_in(barejid, decrypted, was_decrypted); - otr_free_message(decrypted); + return decrypted; } gboolean diff --git a/src/otr/otr.h b/src/otr/otr.h index 6a358b52..45abdc20 100644 --- a/src/otr/otr.h +++ b/src/otr/otr.h @@ -58,7 +58,7 @@ char* otr_start_query(void); void otr_poll(void); void otr_on_connect(ProfAccount *account); -void otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message); +char* otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message, gboolean *was_decrypted); gboolean otr_on_message_send(ProfChatWin *chatwin, const char * const message); void otr_keygen(ProfAccount *account); diff --git a/tests/unittests/otr/stub_otr.c b/tests/unittests/otr/stub_otr.c index 05973828..098484d5 100644 --- a/tests/unittests/otr/stub_otr.c +++ b/tests/unittests/otr/stub_otr.c @@ -41,7 +41,10 @@ char* otr_start_query(void) void otr_poll(void) {} void otr_on_connect(ProfAccount *account) {} -void otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message) {} +char* otr_on_message_recv(const char * const barejid, const char * const resource, const char * const message, gboolean *was_decrypted) +{ + return NULL; +} gboolean otr_on_message_send(ProfChatWin *chatwin, const char * const message) { return FALSE;