diff options
author | Timo Sirainen <cras@irssi.org> | 2001-11-11 18:59:19 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-11-11 18:59:19 +0000 |
commit | 850cf993eb8d5e20b9b845e42e4bdae1a6cae81f (patch) | |
tree | 76ac7694abd05394ae84e10763b406be88ad86aa /src/irc/core/irc.c | |
parent | 712f3b383da947f5c565fba3695dbcd02136ce4b (diff) | |
download | irssi-850cf993eb8d5e20b9b845e42e4bdae1a6cae81f.zip |
Moved rewritten server redirection code from core to irc. This new code
should be able to do the redirecting a lot more error-proof. Changed
lag-checking to use PINGs instead of NOTIFYs. This breaks scripts using
redirection. Hopefully this doesn't break too much things in irssi :)
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1980 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc/core/irc.c')
-rw-r--r-- | src/irc/core/irc.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index a7e58bb6..8b967d4e 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -62,8 +62,10 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, cmd = str; } - if (send_now) + if (send_now) { rawlog_output(server->rawlog, cmd); + server_redirect_command(server, cmd); + } if (!raw) { /* Add CR+LF to command */ @@ -253,39 +255,34 @@ char *event_get_params(const char *data, int count, ...) return duprec; } -static void irc_server_event(IRC_SERVER_REC *server, const char *line, const char *nick, const char *address) +static void irc_server_event(IRC_SERVER_REC *server, const char *line, + const char *nick, const char *address) { - char *event, *args, *callcmd; - GSList *list; + const char *signal; + char *event, *args; g_return_if_fail(line != NULL); - /* get command.. */ + /* split event / args */ event = g_strconcat("event ", line, NULL); args = strchr(event+6, ' '); if (args != NULL) *args++ = '\0'; else args = ""; while (*args == ' ') args++; + g_strdown(event); - list = server_redirect_getqueue((SERVER_REC *) server, event, args); - if (list == NULL) - callcmd = g_strdup(event); - else { - /* event is redirected somewhere else.. */ - REDIRECT_REC *rec; - - rec = list->data; - callcmd = g_strdup(rec->name); - rawlog_redirect(server->rawlog, callcmd); - server_redirect_remove_next((SERVER_REC *) server, event, list); - } + /* check if event needs to be redirected */ + signal = server_redirect_get_signal(server, event, args); + if (signal == NULL) + signal = event; + else + rawlog_redirect(server->rawlog, signal); + /* emit it */ current_server_event = event+6; - g_strdown(callcmd); - if (!signal_emit(callcmd, 4, server, args, nick, address)) + if (!signal_emit(signal, 4, server, args, nick, address)) signal_emit_id(signal_default_event, 4, server, line, nick, address); current_server_event = NULL; - g_free(callcmd); g_free(event); } |