Example #1
0
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;
    }
}
Example #2
0
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
}