Mercurial > hg
changeset 160:44c6410b4845
[/trunk] Changeset 172 by mikael
* External command for events.
* Add a config file option "events_command".
* TODO update.
author | mikael |
---|---|
date | Mon, 02 May 2005 12:07:46 +0000 |
parents | ba51d1737086 |
children | f306318e2491 |
files | mcabber/mcabberrc.example mcabber/src/TODO mcabber/src/hooks.c mcabber/src/hooks.h mcabber/src/main.c |
diffstat | 5 files changed, 63 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/mcabberrc.example Mon May 02 09:33:32 2005 +0000 +++ b/mcabber/mcabberrc.example Mon May 02 12:07:46 2005 +0000 @@ -27,7 +27,14 @@ # You can save the messages history: set logging = 1 # Default logging directory (logging_dir) is $HOME/.mcabber/ logging = 1 -# logging_dir = /home/mikael/.mcabber/ +#logging_dir = /home/mikael/.mcabber/ + +# External command for events +# You can specify a script or process to be launched when an event occurs. +# For now it is called the following way: +# $events_command MSG IN jabber@id +# ... when receiving a message. +#events_command = /home/mikael/.mcabber/eventcmd # Debug logging # If you want advanced debug, please specify a file here. @@ -46,3 +53,4 @@ color_jidofflineselected = red color_jidoffline = red color_text = white +
--- a/mcabber/src/TODO Mon May 02 09:33:32 2005 +0000 +++ b/mcabber/src/TODO Mon May 02 12:07:46 2005 +0000 @@ -2,9 +2,7 @@ BUGS: * Presence notification is always accepted. -* I have seen a segfault, but don't know how to reproduce it... - Seems to be due to a disconnection from the server. -* Check with strdup and efence (jabglue). J'me comprends... +* Empty roster when disconnecting from the server / going offline. * Check if it crashes when resized too small... * See if we can use wbkgndset() @@ -12,7 +10,6 @@ TODO: * Command line history (^P/^N) -* External commands for events * Read history * Display status * show (how?) we can scroll in roster if not all buddies are displayed
--- a/mcabber/src/hooks.c Mon May 02 09:33:32 2005 +0000 +++ b/mcabber/src/hooks.c Mon May 02 12:07:46 2005 +0000 @@ -19,6 +19,8 @@ * USA */ +#include <sys/types.h> +#include <unistd.h> #include <screen.h> #include "hooks.h" @@ -26,6 +28,7 @@ #include "histolog.h" #include "utf8.h" +static char *extcommand; inline void hk_message_in(const char *jid, time_t timestamp, const char *msg) { @@ -40,6 +43,7 @@ scr_WriteIncomingMessage(jid, buffer); hlog_write_message(jid, timestamp, FALSE, buffer); + hk_ext_cmd(jid, 'M', 'R', NULL); free(buffer); // We need to rebuild the list if the sender is unknown or // if the sender is offline/invisible and hide_offline_buddies is set @@ -79,3 +83,46 @@ //hlog_write_status(NULL, 0, status); } + +/* External commands */ + +// hk_ext_cmd_init() +// Initialize external command variable. +// Can be called with parameter NULL to reset and free memory. +void hk_ext_cmd_init(char *command) +{ + if (extcommand) { + g_free(extcommand); + extcommand = NULL; + } + if (command) + extcommand = g_strdup(command); +} + +// hk_ext_cmd() +// Launch an external command (process) for the given event. +// For now, data should be NULL. +void hk_ext_cmd(const char *jid, guchar type, guchar info, const char *data) +{ + pid_t pid; + + if (!extcommand) return; + + // For now we'll only handle incoming messages + if (type != 'M') return; + if (info != 'R') return; + + if ((pid=fork()) == -1) { + scr_LogPrint("Fork error, cannot launch external command."); + return; + } + + // I don't remember what I should do with the parent process... + if (pid == 0) { // child + if (execl(extcommand, extcommand, "MSG", "IN", jid, NULL) == -1) { + // ut_WriteLog("Cannot execute external command.\n"); + exit(1); + } + } +} +
--- a/mcabber/src/hooks.h Mon May 02 09:33:32 2005 +0000 +++ b/mcabber/src/hooks.h Mon May 02 12:07:46 2005 +0000 @@ -12,4 +12,7 @@ inline void hk_mystatuschange(time_t timestamp, enum imstatus old_status, enum imstatus new_status); +void hk_ext_cmd_init(char *command); +void hk_ext_cmd(const char *jid, guchar type, guchar info, const char *data); + #endif /* __HOOKS_H__ */
--- a/mcabber/src/main.c Mon May 02 09:33:32 2005 +0000 +++ b/mcabber/src/main.c Mon May 02 12:07:46 2005 +0000 @@ -157,6 +157,9 @@ if (optstring && (atoi(optstring) > 0)) hlog_enable(TRUE, cfg_read("logging_dir")); + if ((optstring = cfg_read("events_command")) != NULL) + hk_ext_cmd_init(optstring); + ssl = 0; optstring = cfg_read("ssl"); if (optstring && (atoi(optstring) > 0))