diff --git a/Makefile.am b/Makefile.am index c5449a2b..6566cdfa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,6 +14,7 @@ core_sources = \ src/xmpp/bookmark.c src/xmpp/bookmark.h \ src/xmpp/form.c src/xmpp/form.h \ src/event/server_events.c src/event/server_events.h \ + src/event/client_events.c src/event/client_events.h \ src/ui/ui.h src/ui/window.c src/ui/window.h src/ui/core.c \ src/ui/titlebar.c src/ui/statusbar.c src/ui/inputwin.c \ src/ui/titlebar.h src/ui/statusbar.h src/ui/inputwin.h \ @@ -61,6 +62,7 @@ tests_sources = \ src/ui/titlebar.c src/ui/statusbar.c src/ui/inputwin.c \ src/ui/titlebar.h src/ui/statusbar.h src/ui/inputwin.h \ src/event/server_events.c src/event/server_events.h \ + src/event/client_events.c src/event/client_events.h \ tests/xmpp/stub_xmpp.c \ tests/ui/stub_ui.c \ tests/log/stub_log.c \ diff --git a/src/command/commands.c b/src/command/commands.c index 29ae6614..1ee305e3 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -65,6 +65,7 @@ #include "xmpp/bookmark.h" #include "ui/ui.h" #include "ui/windows.h" +#include "event/client_events.h" static void _update_presence(const resource_presence_t presence, const char * const show, gchar **args); @@ -74,9 +75,6 @@ static void _cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filt static gint _compare_commands(Command *a, Command *b); static void _who_room(gchar **args, struct cmd_help_t help); static void _who_roster(gchar **args, struct cmd_help_t help); -static void _send_chat_message(const char * const barejid, const char * const message); -static void _send_otr_chat_message(const char * const barejid, const char * const message); -static void _send_otr_tagged_chat_message(const char * const barejid, const char * const message); extern GHashTable *commands; @@ -115,20 +113,7 @@ cmd_execute_default(const char * inp) ProfWin *current = wins_get_current(); ProfChatWin *chatwin = (ProfChatWin*)current; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); -#ifdef HAVE_LIBOTR - prof_otrpolicy_t policy = otr_get_policy(chatwin->barejid); - if (policy == PROF_OTRPOLICY_ALWAYS && !otr_is_secure(chatwin->barejid)) { - cons_show_error("Failed to send message. Please check OTR policy"); - return TRUE; - } - if (otr_is_secure(chatwin->barejid)) { - _send_otr_chat_message(chatwin->barejid, inp); - } else { - _send_chat_message(chatwin->barejid, inp); - } -#else - _send_chat_message(chatwin->barejid, inp); -#endif + client_msg_send(chatwin->barejid, inp); } break; @@ -1366,23 +1351,8 @@ cmd_msg(gchar **args, struct cmd_help_t help) } if (msg) { -#ifdef HAVE_LIBOTR - prof_otrpolicy_t policy = otr_get_policy(barejid); - if (otr_is_secure(barejid)) { - _send_otr_chat_message(barejid, msg); - } else if (policy == PROF_OTRPOLICY_ALWAYS) { - cons_show_error("Failed to send message. Please check OTR policy"); - } else if (policy == PROF_OTRPOLICY_OPPORTUNISTIC) { - _send_otr_tagged_chat_message(barejid, msg); - } else { - _send_chat_message(barejid, msg); - } + client_msg_send(barejid, msg); return TRUE; -#else - _send_chat_message(barejid, msg); - return TRUE; -#endif - } else { ui_new_chat_win(barejid); #ifdef HAVE_LIBOTR @@ -3189,15 +3159,7 @@ cmd_tiny(gchar **args, struct cmd_help_t help) case WIN_CHAT: { ProfChatWin *chatwin = wins_get_current_chat(); -#ifdef HAVE_LIBOTR - if (otr_is_secure(chatwin->barejid)) { - _send_otr_chat_message(chatwin->barejid, tiny); - } else { - _send_chat_message(chatwin->barejid, tiny); - } -#else - _send_chat_message(chatwin->barejid, tiny); -#endif + client_msg_send(chatwin->barejid, tiny); break; } case WIN_PRIVATE: @@ -4462,39 +4424,4 @@ gint _compare_commands(Command *a, Command *b) g_free(key_b); return result; -} - -static void -_send_chat_message(const char * const barejid, const char * const message) -{ - char *id = message_send_chat(barejid, message); - chat_log_msg_out(barejid, message); - ui_outgoing_chat_msg(barejid, message, id); - free(id); -} - -static void -_send_otr_chat_message(const char * const barejid, const char * const message) -{ - char *encrypted = otr_encrypt_message(barejid, message); - if (encrypted != NULL) { - char *id = message_send_chat_encrypted(barejid, encrypted); - chat_log_otr_msg_out(barejid, message); - ui_outgoing_chat_msg(barejid, message, id); - otr_free_message(encrypted); - free(id); - } else { - cons_show_error("Failed to encrypt and send message."); - } -} - -static void -_send_otr_tagged_chat_message(const char * const barejid, const char * const message) -{ - char *otr_tagged_msg = otr_tag_message(message); - char *id = message_send_chat_encrypted(barejid, otr_tagged_msg); - ui_outgoing_chat_msg(barejid, message, id); - chat_log_msg_out(barejid, message); - free(id); - free(otr_tagged_msg); } \ No newline at end of file diff --git a/src/event/client_events.c b/src/event/client_events.c new file mode 100644 index 00000000..48225078 --- /dev/null +++ b/src/event/client_events.c @@ -0,0 +1,86 @@ +/* + * client_events.c + * + * Copyright (C) 2012 - 2015 James Booth + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#include + +#include "config.h" +#include "log.h" +#include "ui/ui.h" +#include "xmpp/xmpp.h" +#ifdef HAVE_LIBOTR +#include "otr/otr.h" +#endif + +void +client_msg_send(const char * const barejid, const char * const msg) +{ + char *id = NULL; + +#ifdef HAVE_LIBOTR + prof_otrpolicy_t policy = otr_get_policy(barejid); + + if (otr_is_secure(barejid)) { + char *encrypted = otr_encrypt_message(barejid, msg); + if (encrypted != NULL) { + id = message_send_chat_encrypted(barejid, encrypted); + chat_log_otr_msg_out(barejid, msg); + ui_outgoing_chat_msg(barejid, msg, id); + otr_free_message(encrypted); + } else { + cons_show_error("Failed to encrypt and send message."); + } + + } else if (policy == PROF_OTRPOLICY_ALWAYS) { + cons_show_error("Failed to send message. Please check OTR policy"); + + } else if (policy == PROF_OTRPOLICY_OPPORTUNISTIC) { + char *otr_tagged_msg = otr_tag_message(msg); + id = message_send_chat_encrypted(barejid, otr_tagged_msg); + ui_outgoing_chat_msg(barejid, msg, id); + chat_log_msg_out(barejid, msg); + free(otr_tagged_msg); + + } else { + id = message_send_chat(barejid, msg); + ui_outgoing_chat_msg(barejid, msg, id); + chat_log_msg_out(barejid, msg); + } +#else + id = message_send_chat(barejid, msg); + chat_log_msg_out(barejid, msg); + ui_outgoing_chat_msg(barejid, msg, id); +#endif + + free(id); +} \ No newline at end of file diff --git a/src/event/client_events.h b/src/event/client_events.h new file mode 100644 index 00000000..922b89d1 --- /dev/null +++ b/src/event/client_events.h @@ -0,0 +1,40 @@ +/* + * client_events.h + * + * Copyright (C) 2012 - 2015 James Booth + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#ifndef CLIENT_EVENTS_H +#define CLIENT_EVENTS_H + +void client_msg_send(const char * const barejid, const char * const msg); + +#endif \ No newline at end of file