static void _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, char *pgp_message, GDateTime *timestamp) { char *decrypted = p_gpg_decrypt(pgp_message); if (decrypted) { chatwin_incoming_msg(chatwin, resource, decrypted, timestamp, new_win, PROF_MSG_PGP); chat_log_pgp_msg_in(barejid, decrypted, timestamp); chatwin->pgp_recv = TRUE; p_gpg_free_decrypted(decrypted); } else { chatwin_incoming_msg(chatwin, resource, message, timestamp, new_win, PROF_MSG_PLAIN); chat_log_msg_in(barejid, message, timestamp); chatwin->pgp_recv = FALSE; } }
void sv_ev_incoming_message(char *barejid, char *resource, char *message, char *enc_message) { gboolean new_win = FALSE; ProfChatWin *chatwin = wins_get_chat(barejid); if (!chatwin) { ProfWin *window = wins_new_chat(barejid); chatwin = (ProfChatWin*)window; new_win = TRUE; } // OTR suported, PGP supported #ifdef HAVE_LIBOTR #ifdef HAVE_LIBGPGME prof_enc_t enc_mode = chatwin->enc_mode; if (enc_message) { if (enc_mode == PROF_ENC_OTR) { win_println((ProfWin*)chatwin, "PGP encrypted message received whilst in OTR session."); } else { // PROF_ENC_NONE, PROF_ENC_PGP char *decrypted = p_gpg_decrypt(barejid, enc_message); if (decrypted) { if (enc_mode == PROF_ENC_NONE) { win_println((ProfWin*)chatwin, "PGP encryption enabled."); } ui_incoming_msg(chatwin, resource, decrypted, NULL, new_win); chat_log_pgp_msg_in(barejid, decrypted); chatwin->enc_mode = PROF_ENC_PGP; } else { ui_incoming_msg(chatwin, resource, message, NULL, new_win); chat_log_msg_in(barejid, message); chatwin->enc_mode = PROF_ENC_NONE; } } } else { if (enc_mode == PROF_ENC_PGP) { win_println((ProfWin*)chatwin, "PGP encryption disabled."); ui_incoming_msg(chatwin, resource, message, NULL, new_win); chat_log_msg_in(barejid, message); chatwin->enc_mode = PROF_ENC_NONE; } else { gboolean decrypted = FALSE; char *otr_res = otr_on_message_recv(barejid, resource, message, &decrypted); if (otr_res) { ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win); chat_log_otr_msg_in(barejid, otr_res, decrypted); otr_free_message(otr_res); } } } return; #endif #endif // OTR supported, PGP unsupported #ifdef HAVE_LIBOTR #ifndef HAVE_LIBGPGME gboolean decrypted = FALSE; char *otr_res = otr_on_message_recv(barejid, resource, message, &decrypted); if (otr_res) { ui_incoming_msg(chatwin, resource, otr_res, NULL, new_win); chat_log_otr_msg_in(barejid, otr_res, decrypted); otr_free_message(otr_res); } return; #endif #endif // OTR unsupported, PGP supported #ifndef HAVE_LIBOTR #ifdef HAVE_LIBGPGME if (enc_message) { char *decrypted = p_gpg_decrypt(barejid, enc_message); if (decrypted) { ui_incoming_msg(chatwin, resource, decrypted, NULL, new_win); chat_log_pgp_msg_in(barejid, decrypted); chatwin->enc_mode = PROF_ENC_PGP; } else { ui_incoming_msg(chatwin, resource, message, NULL, new_win); chat_log_msg_in(barejid, message); chatwin->enc_mode = PROF_ENC_NONE; } } else { ui_incoming_msg(chatwin, resource, message, NULL, new_win); chat_log_msg_in(barejid, message); chatwin->enc_mode = PROF_ENC_NONE; } return; #endif #endif // OTR unsupported, PGP unsupported #ifndef HAVE_LIBOTR #ifndef HAVE_LIBGPGME ui_incoming_msg(chatwin, resource, message, NULL, new_win); chat_log_msg_in(barejid, message); chatwin->enc_mode = PROF_ENC_NONE; return; #endif #endif }