[wip] tieing up

This commit is contained in:
ailin-nemui 2018-11-15 10:53:02 +01:00
parent 0aed9a9168
commit eda1cc1f90
29 changed files with 401 additions and 251 deletions

View File

@ -20,6 +20,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "fe-common/core/signal-registry.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "lib-config/iconfig.h" #include "lib-config/iconfig.h"
#include "settings.h" #include "settings.h"
@ -215,7 +216,7 @@ void channels_setup_init(void)
setupchannels = NULL; setupchannels = NULL;
source_host_ok = FALSE; source_host_ok = FALSE;
signal_add__setup_reread(channels_read_config); signal_add__setup_reread((signal_func_setup_reread_t) channels_read_config);
signal_add__irssi_init_read_settings(channels_read_config); signal_add__irssi_init_read_settings(channels_read_config);
} }
@ -224,6 +225,6 @@ void channels_setup_deinit(void)
while (setupchannels != NULL) while (setupchannels != NULL)
channel_setup_destroy(setupchannels->data); channel_setup_destroy(setupchannels->data);
signal_remove__setup_reread(channels_read_config); signal_remove__setup_reread((signal_func_setup_reread_t) channels_read_config);
signal_remove__irssi_init_read_settings(channels_read_config); signal_remove__irssi_init_read_settings(channels_read_config);
} }

View File

@ -22,6 +22,8 @@
#include "network.h" #include "network.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "irc/core/signal-registry.h"
#include "special-vars.h" #include "special-vars.h"
#include "lib-config/iconfig.h" #include "lib-config/iconfig.h"
#include "settings.h" #include "settings.h"
@ -181,7 +183,7 @@ void chatnets_init(void)
chatnets = NULL; chatnets = NULL;
signal_add_first__event_connected(sig_connected); signal_add_first__event_connected(sig_connected);
signal_add__setup_reread(read_chatnets); signal_add__setup_reread((signal_func_setup_reread_t) read_chatnets);
signal_add_first__irssi_init_read_settings(read_chatnets); signal_add_first__irssi_init_read_settings(read_chatnets);
} }
@ -189,7 +191,7 @@ void chatnets_deinit(void)
{ {
module_uniq_destroy("CHATNET"); module_uniq_destroy("CHATNET");
signal_remove__event_("connected", sig_connected); signal_remove__event_connected(sig_connected);
signal_remove__setup_reread(read_chatnets); signal_remove__setup_reread((signal_func_setup_reread_t) read_chatnets);
signal_remove__irssi_init_read_settings(read_chatnets); signal_remove__irssi_init_read_settings(read_chatnets);
} }

View File

@ -917,7 +917,7 @@ static void parse_command(const char *command, int expand_aliases,
g_free(orig); g_free(orig);
} }
static void event_command(const char *line, SERVER_REC *server, void *item) static void event_command(const char *line, SERVER_REC *server, WI_ITEM_REC *item)
{ {
char *cmdchar; char *cmdchar;
int expand_aliases = TRUE; int expand_aliases = TRUE;

View File

@ -28,6 +28,7 @@
#include "net-disconnect.h" #include "net-disconnect.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "settings.h" #include "settings.h"
#include "session.h" #include "session.h"
#ifdef HAVE_CAPSICUM #ifdef HAVE_CAPSICUM

View File

@ -23,6 +23,7 @@
#include "modules.h" #include "modules.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "expandos.h" #include "expandos.h"
#include "settings.h" #include "settings.h"
#include "commands.h" #include "commands.h"
@ -523,7 +524,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
} }
static void sig_message_private(SERVER_REC *server, const char *msg, static void sig_message_private(SERVER_REC *server, const char *msg,
const char *nick, const char *address) const char *nick, const char *address, const char *target)
{ {
g_free_not_null(last_privmsg_from); g_free_not_null(last_privmsg_from);
last_privmsg_from = g_strdup(nick); last_privmsg_from = g_strdup(nick);

View File

@ -526,7 +526,7 @@ void ignore_init(void)
time_tag = g_timeout_add(1000, (GSourceFunc) unignore_timeout, NULL); time_tag = g_timeout_add(1000, (GSourceFunc) unignore_timeout, NULL);
read_ignores(); read_ignores();
signal_add__setup_reread(read_ignores); signal_add__setup_reread((signal_func_setup_reread_t) read_ignores);
} }
void ignore_deinit(void) void ignore_deinit(void)
@ -536,5 +536,5 @@ void ignore_deinit(void)
ignore_destroy(ignores->data, TRUE); ignore_destroy(ignores->data, TRUE);
nickmatch_deinit(nickmatch); nickmatch_deinit(nickmatch);
signal_remove__setup_reread(read_ignores); signal_remove__setup_reread((signal_func_setup_reread_t) read_ignores);
} }

View File

@ -21,6 +21,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "irc/core/signal-registry.h"
#include "levels.h" #include "levels.h"
#include "log.h" #include "log.h"
#include "servers.h" #include "servers.h"
@ -31,7 +32,7 @@ static LOG_REC *awaylog;
static int away_filepos; static int away_filepos;
static int away_msgs; static int away_msgs;
static void sig_log_written(LOG_REC *log) static void sig_log_written(LOG_REC *log, const char *u0)
{ {
if (log != awaylog) return; if (log != awaylog) return;

View File

@ -21,6 +21,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "commands.h" #include "commands.h"
#include "levels.h" #include "levels.h"
#include "misc.h" #include "misc.h"
@ -599,7 +600,7 @@ void log_init(void)
read_settings(); read_settings();
signal_add__setup_changed(read_settings); signal_add__setup_changed(read_settings);
signal_add__setup_reread(log_read_config); signal_add__setup_reread((signal_func_setup_reread_t) log_read_config);
signal_add__irssi_init_finished(log_read_config); signal_add__irssi_init_finished(log_read_config);
} }
@ -613,6 +614,6 @@ void log_deinit(void)
g_free_not_null(log_timestamp); g_free_not_null(log_timestamp);
signal_remove__setup_changed(read_settings); signal_remove__setup_changed(read_settings);
signal_remove__setup_reread(log_read_config); signal_remove__setup_reread((signal_func_setup_reread_t) log_read_config);
signal_remove__irssi_init_finished(log_read_config); signal_remove__irssi_init_finished(log_read_config);
} }

View File

@ -444,7 +444,7 @@ void nicklist_set_own(CHANNEL_REC *channel, NICK_REC *nick)
g_hash_table_insert(channel->nicks, nick->nick, nick); g_hash_table_insert(channel->nicks, nick->nick, nick);
} }
static void sig_channel_created(CHANNEL_REC *channel) static void sig_channel_created(CHANNEL_REC *channel, void *u0)
{ {
g_return_if_fail(IS_CHANNEL(channel)); g_return_if_fail(IS_CHANNEL(channel));

View File

@ -104,7 +104,7 @@ void nickmatch_cache_init(void)
{ {
lists = NULL; lists = NULL;
signal_add__nicklist_new(sig_nick_new); signal_add__nicklist_new(sig_nick_new);
signal_add__nicklist_changed(sig_nick_new); signal_add__nicklist_changed((signal_func_nicklist_changed_t) sig_nick_new);
signal_add__nicklist_host_changed(sig_nick_new); signal_add__nicklist_host_changed(sig_nick_new);
signal_add__nicklist_remove(sig_nick_remove); signal_add__nicklist_remove(sig_nick_remove);
} }
@ -115,7 +115,7 @@ void nickmatch_cache_deinit(void)
g_slist_free(lists); g_slist_free(lists);
signal_remove__nicklist_new(sig_nick_new); signal_remove__nicklist_new(sig_nick_new);
signal_remove__nicklist_changed(sig_nick_new); signal_remove__nicklist_changed((signal_func_nicklist_changed_t) sig_nick_new);
signal_remove__nicklist_host_changed(sig_nick_new); signal_remove__nicklist_host_changed(sig_nick_new);
signal_remove__nicklist_remove(sig_nick_remove); signal_remove__nicklist_remove(sig_nick_remove);
} }

View File

@ -23,6 +23,7 @@
#include "network.h" #include "network.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "irc/core/signal-registry.h"
#include "chat-protocols.h" #include "chat-protocols.h"
#include "servers.h" #include "servers.h"
@ -504,9 +505,9 @@ void servers_reconnect_init(void)
reconnect_timeout_tag = g_timeout_add(1000, (GSourceFunc) server_reconnect_timeout, NULL); reconnect_timeout_tag = g_timeout_add(1000, (GSourceFunc) server_reconnect_timeout, NULL);
read_settings(); read_settings();
signal_add__server_connect_failed(sig_reconnect); signal_add__server_connect_failed((signal_func_server_connect_failed_t) sig_reconnect);
signal_add__server_disconnected(sig_reconnect); signal_add__server_disconnected(sig_reconnect);
signal_add__event_("connected", sig_connected); signal_add__event_connected(sig_connected);
signal_add__chat_protocol_deinit(sig_chat_protocol_deinit); signal_add__chat_protocol_deinit(sig_chat_protocol_deinit);
signal_add__setup_changed(read_settings); signal_add__setup_changed(read_settings);
@ -519,9 +520,9 @@ void servers_reconnect_deinit(void)
{ {
g_source_remove(reconnect_timeout_tag); g_source_remove(reconnect_timeout_tag);
signal_remove__server_connect_failed(sig_reconnect); signal_remove__server_connect_failed((signal_func_server_connect_failed_t) sig_reconnect);
signal_remove__server_disconnected(sig_reconnect); signal_remove__server_disconnected(sig_reconnect);
signal_remove__event_("connected", sig_connected); signal_remove__event_connected(sig_connected);
signal_remove__chat_protocol_deinit(sig_chat_protocol_deinit); signal_remove__chat_protocol_deinit(sig_chat_protocol_deinit);
signal_remove__setup_changed(read_settings); signal_remove__setup_changed(read_settings);

View File

@ -21,6 +21,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "network.h" #include "network.h"
#include "lib-config/iconfig.h" #include "lib-config/iconfig.h"
#include "settings.h" #include "settings.h"
@ -659,7 +660,7 @@ void servers_setup_init(void)
read_settings(); read_settings();
signal_add__setup_changed(read_settings); signal_add__setup_changed(read_settings);
signal_add__setup_reread(read_servers); signal_add__setup_reread((signal_func_setup_reread_t) read_servers);
signal_add__irssi_init_read_settings(read_servers); signal_add__irssi_init_read_settings(read_servers);
} }
@ -673,7 +674,7 @@ void servers_setup_deinit(void)
server_setup_destroy(setupservers->data); server_setup_destroy(setupservers->data);
signal_remove__setup_changed(read_settings); signal_remove__setup_changed(read_settings);
signal_remove__setup_reread(read_servers); signal_remove__setup_reread((signal_func_setup_reread_t) read_servers);
signal_remove__irssi_init_read_settings(read_servers); signal_remove__irssi_init_read_settings(read_servers);
module_uniq_destroy("SERVER SETUP"); module_uniq_destroy("SERVER SETUP");

View File

@ -21,6 +21,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "commands.h" #include "commands.h"
#include "args.h" #include "args.h"
#include "network.h" #include "network.h"

View File

@ -21,6 +21,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "fe-common/core/signal-registry.h"
#include "commands.h" #include "commands.h"
#include "levels.h" #include "levels.h"
#include "misc.h" #include "misc.h"
@ -886,7 +887,7 @@ void settings_init(void)
(GSourceFunc) sig_autosave, NULL); (GSourceFunc) sig_autosave, NULL);
signal_add__irssi_init_finished(sig_init_finished); signal_add__irssi_init_finished(sig_init_finished);
signal_add__irssi_init_userinfo_changed(sig_init_userinfo_changed); signal_add__irssi_init_userinfo_changed(sig_init_userinfo_changed);
signal_add__gui_exit(sig_autosave); signal_add__gui_exit((signal_func_gui_exit_t) sig_autosave);
} }
static void settings_hash_free(const char *key, SETTINGS_REC *rec) static void settings_hash_free(const char *key, SETTINGS_REC *rec)
@ -899,7 +900,7 @@ void settings_deinit(void)
g_source_remove(timeout_tag); g_source_remove(timeout_tag);
signal_remove__irssi_init_finished(sig_init_finished); signal_remove__irssi_init_finished(sig_init_finished);
signal_remove__irssi_init_userinfo_changed(sig_init_userinfo_changed); signal_remove__irssi_init_userinfo_changed(sig_init_userinfo_changed);
signal_remove__gui_exit(sig_autosave); signal_remove__gui_exit((signal_func_gui_exit_t) sig_autosave);
g_slist_foreach(last_invalid_modules, (GFunc) g_free, NULL); g_slist_foreach(last_invalid_modules, (GFunc) g_free, NULL);
g_slist_free(last_invalid_modules); g_slist_free(last_invalid_modules);

View File

@ -6,7 +6,8 @@
" " -> "_" " " -> "_"
"_" -> "__" "_" -> "__"
*/ */
inline static void signal_register_fix_name(char *var) { inline static void signal_register_fix_name(char *var)
{
char *i, *o ; char *i, *o ;
for (i = o = var; *i; i++, o++) { for (i = o = var; *i; i++, o++) {
if (*i == '_') { if (*i == '_') {
@ -21,7 +22,7 @@ inline static void signal_register_fix_name(char *var) {
} }
} }
*o = '\0'; *o = '\0';
} }
#define SIGNAL_REGISTER(SIGNAL, NUM, PROTO, ...) \ #define SIGNAL_REGISTER(SIGNAL, NUM, PROTO, ...) \
inline static int signal_emit__ ## SIGNAL PROTO { \ inline static int signal_emit__ ## SIGNAL PROTO { \
@ -79,7 +80,7 @@ inline static void signal_register_fix_name(char *var) {
signal_remove_full__ ## SIGNAL (func, data); \ signal_remove_full__ ## SIGNAL (func, data); \
} \ } \
#define SIGNAL_REGISTER_F(SIGNAL, NUM, PROTO, ARG, ...) \ #define SIGNAL_REGISTER_(SIGNAL, NUM, PROTO, PROTO_, ARG, ...) \
inline static int signal_emit__ ## SIGNAL ## _ PROTO { \ inline static int signal_emit__ ## SIGNAL ## _ PROTO { \
int ret; \ int ret; \
char *signal_name, base_signal_name[] = #SIGNAL; \ char *signal_name, base_signal_name[] = #SIGNAL; \
@ -90,7 +91,7 @@ inline static void signal_register_fix_name(char *var) {
return ret; \ return ret; \
} \ } \
\ \
typedef void (*signal_func_ ## SIGNAL ## __t) PROTO ; \ typedef void (*signal_func_ ## SIGNAL ## __t) PROTO_ ; \
\ \
inline static void signal_add_full__ ## SIGNAL ## _ \ inline static void signal_add_full__ ## SIGNAL ## _ \
(const char *module, int priority, \ (const char *module, int priority, \

View File

@ -1,6 +1,6 @@
// core // core
SIGNAL_REGISTER(gui_exit, 0, (void)) SIGNAL_REGISTER(gui_exit, 0, (void))
SIGNAL_REGISTER(gui_dialog, 2, (char *type, const char *text), SIGNAL_REGISTER(gui_dialog, 2, (const char *type, const char *text),
type, text) type, text)
// chat-protocols.c: // chat-protocols.c:
@ -49,11 +49,12 @@ SIGNAL_REGISTER(list_subcommands, 1, (const char *command),
SIGNAL_REGISTER(error_command, 2, (int_in_ptr err, const char *cmd), SIGNAL_REGISTER(error_command, 2, (int_in_ptr err, const char *cmd),
err, cmd) err, cmd)
SIGNAL_REGISTER(send_command, 3, (char *args, SERVER_REC *server, WI_ITEM_REC *wi_item), SIGNAL_REGISTER(send_command, 3, (const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item),
args, server, wi_item) args, server, wi_item)
SIGNAL_REGISTER(send_text, 3, (const char *line, SERVER_REC *server, WI_ITEM_REC *wi_item), SIGNAL_REGISTER(send_text, 3, (const char *line, SERVER_REC *server, WI_ITEM_REC *wi_item),
line, server, wi_item) line, server, wi_item)
SIGNAL_REGISTER_F(command, 3, (const char *cmd, const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item), SIGNAL_REGISTER_(command, 3, (const char *cmd, const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item),
(const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item),
cmd, args, server, wi_item) cmd, args, server, wi_item)
SIGNAL_REGISTER(default_command, 3, (const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item), SIGNAL_REGISTER(default_command, 3, (const char *args, SERVER_REC *server, WI_ITEM_REC *wi_item),
args, server, wi_item) args, server, wi_item)
@ -61,9 +62,9 @@ SIGNAL_REGISTER(default_command, 3, (const char *args, SERVER_REC *server, WI_IT
// chat-commands.c: // chat-commands.c:
SIGNAL_REGISTER(chat_protocol_unknown, 1, (const char *protocol), SIGNAL_REGISTER(chat_protocol_unknown, 1, (const char *protocol),
protocol) protocol)
SIGNAL_REGISTER(message_own__public, 3, (SERVER_REC *server, char *msg, char *target), SIGNAL_REGISTER(message_own__public, 3, (SERVER_REC *server, const char *msg, const char *target),
server, msg, target) server, msg, target)
SIGNAL_REGISTER(message_own__private, 4, (SERVER_REC *server, char *msg, char *target, char *orig_target), SIGNAL_REGISTER(message_own__private, 4, (SERVER_REC *server, const char *msg, const char *target, const char *orig_target),
server, msg, target, orig_target) server, msg, target, orig_target)
// ignore.c: // ignore.c:
@ -163,7 +164,7 @@ SIGNAL_REGISTER(server_disconnected, 1, (SERVER_REC *server),
server) server)
SIGNAL_REGISTER(server_quit, 2, (SERVER_REC *server, char *msg), SIGNAL_REGISTER(server_quit, 2, (SERVER_REC *server, char *msg),
server, msg) server, msg)
SIGNAL_REGISTER(server_sendmsg, 4, (SERVER_REC *server, char *target, char *msg, int_in_ptr target_type), SIGNAL_REGISTER(server_sendmsg, 4, (SERVER_REC *server, const char *target, const char *msg, int_in_ptr target_type),
server, target, msg, target_type) server, target, msg, target_type)
SIGNAL_REGISTER(server_destroyed, 1, (SERVER_REC *server), SIGNAL_REGISTER(server_destroyed, 1, (SERVER_REC *server),
server) server)

View File

@ -1,6 +1,6 @@
// core // core
"gui exit" "gui exit"
"gui dialog", char *type, const char *text "gui dialog", const char *type, const char *text
// chat-protocols.c: // chat-protocols.c:
"chat protocol created", CHAT_PROTOCOL_REC "chat protocol created", CHAT_PROTOCOL_REC
@ -30,15 +30,15 @@
"list subcommands", const char *command "list subcommands", const char *command
"error command", int err, const char *cmd "error command", int err, const char *cmd
"send command", char *args, SERVER_REC, WI_ITEM_REC "send command", const char *args, SERVER_REC, WI_ITEM_REC
"send text", const char *line, SERVER_REC, WI_ITEM_REC "send text", const char *line, SERVER_REC, WI_ITEM_REC
"command "<cmd>, const char *args, SERVER_REC, WI_ITEM_REC "command "<cmd>, const char *args, SERVER_REC, WI_ITEM_REC
"default command", const char *args, SERVER_REC, WI_ITEM_REC "default command", const char *args, SERVER_REC, WI_ITEM_REC
// chat-commands.c: // chat-commands.c:
"chat protocol unknown", const char *protocol "chat protocol unknown", const char *protocol
"message own_public", SERVER_REC, char *msg, char *target "message own_public", SERVER_REC, const char *msg, const char *target
"message own_private", SERVER_REC, char *msg, char *target, char *orig_target "message own_private", SERVER_REC, const char *msg, const char *target, const char *orig_target
// ignore.c: // ignore.c:
"ignore created", IGNORE_REC "ignore created", IGNORE_REC
@ -98,7 +98,7 @@
"server connect failed", SERVER_REC, const char *msg "server connect failed", SERVER_REC, const char *msg
"server disconnected", SERVER_REC "server disconnected", SERVER_REC
"server quit", SERVER_REC, char *msg "server quit", SERVER_REC, char *msg
"server sendmsg", SERVER_REC, char *target, char *msg, int target_type "server sendmsg", SERVER_REC, const char *target, const char *msg, int target_type
"server destroyed", SERVER_REC "server destroyed", SERVER_REC
// servers-setup.c // servers-setup.c

View File

@ -8,13 +8,15 @@ SIGNAL_REGISTER(gui_print_text_finished, 1, (WINDOW_REC *window),
window) window)
// completion.c: // completion.c:
SIGNAL_REGISTER_F(complete_command, 5, (const char *cmd, GList **completions/*<char*>*/, WINDOW_REC *window, const char *word, char *linestart, int *want_space), SIGNAL_REGISTER_(complete_command, 5, (const char *cmd, GList **completions/*<char*>*/, WINDOW_REC *window, const char *word, char *linestart, int *want_space),
(GList **completions/*<char*>*/, WINDOW_REC *window, const char *word, char *linestart, int *want_space),
cmd, completions, window, word, linestart, want_space) cmd, completions, window, word, linestart, want_space)
SIGNAL_REGISTER(complete_word, 5, (GList **completions/*<char*>*/, WINDOW_REC *window, const char *word, char *linestart, int *want_space), SIGNAL_REGISTER(complete_word, 5, (GList **completions/*<char*>*/, WINDOW_REC *window, const char *word, char *linestart, int *want_space),
completions, window, word, linestart, want_space) completions, window, word, linestart, want_space)
SIGNAL_REGISTER(complete_erase, 3, (WINDOW_REC *window, const char *word, const char *linestart), SIGNAL_REGISTER(complete_erase, 3, (WINDOW_REC *window, const char *word, const char *linestart),
window, word, linestart) window, word, linestart)
SIGNAL_REGISTER_F(complete_erase_command, 3, (const char *cmd, WINDOW_REC *window, const char *word, const char *linestart), SIGNAL_REGISTER_(complete_erase_command, 3, (const char *cmd, WINDOW_REC *window, const char *word, const char *linestart),
(WINDOW_REC *window, const char *word, const char *linestart),
cmd, window, word, linestart) cmd, window, word, linestart)
SIGNAL_REGISTER(completion_removed, 1, (const char *word), SIGNAL_REGISTER(completion_removed, 1, (const char *word),
word) word)
@ -88,7 +90,8 @@ SIGNAL_REGISTER(key_created, 1, (KEY_REC *key),
key) key)
SIGNAL_REGISTER(key_destroyed, 1, (KEY_REC *key), SIGNAL_REGISTER(key_destroyed, 1, (KEY_REC *key),
key) key)
SIGNAL_REGISTER_F(key, 3, (const char *key, const char *data, void *gui_data, KEYINFO_REC *keyinfo), SIGNAL_REGISTER_(key, 3, (const char *key, const char *data, void *gui_data, KEYINFO_REC *keyinfo),
(const char *data, void *gui_data, KEYINFO_REC *keyinfo),
key, data, gui_data, keyinfo) key, data, gui_data, keyinfo)
SIGNAL_REGISTER(gui_entry_redirect, 4, (SIGNAL_FUNC func, const char *entry, int_in_ptr flags, void *data), SIGNAL_REGISTER(gui_entry_redirect, 4, (SIGNAL_FUNC func, const char *entry, int_in_ptr flags, void *data),
func, entry, flags, data) func, entry, flags, data)

View File

@ -53,27 +53,35 @@ static void check_join_failure(IRC_SERVER_REC *server, const char *channel)
} }
} }
static void irc_server_event(IRC_SERVER_REC *server, const char *line) static void irc_server_event(SERVER_REC *server, const char *line, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
char *params, *numeric, *channel; char *params, *numeric, *channel;
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
/* We'll be checking "4xx <your nick> <channel>" for channels /* We'll be checking "4xx <your nick> <channel>" for channels
which we haven't joined yet. 4xx are error codes and should which we haven't joined yet. 4xx are error codes and should
indicate that the join failed. */ indicate that the join failed. */
params = event_get_params(line, 3, &numeric, NULL, &channel); params = event_get_params(line, 3, &numeric, NULL, &channel);
if (numeric[0] == '4') if (numeric[0] == '4')
check_join_failure(server, channel); check_join_failure(irc_server, channel);
g_free(params); g_free(params);
} }
static void event_no_such_channel(IRC_SERVER_REC *server, const char *data) static void event_no_such_channel(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
CHANNEL_SETUP_REC *setup; CHANNEL_SETUP_REC *setup;
char *params, *channel; char *params, *channel;
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
chanrec = *channel == '!' && channel[1] != '\0' ? chanrec = *channel == '!' && channel[1] != '\0' ?
channel_find(SERVER(server), channel) : NULL; channel_find(SERVER(server), channel) : NULL;
@ -84,23 +92,27 @@ static void event_no_such_channel(IRC_SERVER_REC *server, const char *data)
chanrec->server->connrec->chatnet); chanrec->server->connrec->chatnet);
if (setup != NULL && setup->autojoin) { if (setup != NULL && setup->autojoin) {
/* it's autojoin channel though, so create it */ /* it's autojoin channel though, so create it */
irc_send_cmdv(server, "JOIN !%s", chanrec->name); irc_send_cmdv(irc_server, "JOIN !%s", chanrec->name);
g_free(params); g_free(params);
return; return;
} }
} }
check_join_failure(server, channel); check_join_failure(irc_server, channel);
g_free(params); g_free(params);
} }
static void event_duplicate_channel(IRC_SERVER_REC *server, const char *data) static void event_duplicate_channel(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
char *params, *channel, *p; char *params, *channel, *p;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
/* this new addition to ircd breaks completely with older /* this new addition to ircd breaks completely with older
"standards", "nick Duplicate ::!!channel ...." */ "standards", "nick Duplicate ::!!channel ...." */
params = event_get_params(data, 3, NULL, NULL, &channel); params = event_get_params(data, 3, NULL, NULL, &channel);
@ -151,44 +163,56 @@ static void channel_change_topic(IRC_SERVER_REC *server, const char *channel,
signal_emit__channel_topic_changed(chanrec); signal_emit__channel_topic_changed(chanrec);
} }
static void event_topic_get(IRC_SERVER_REC *server, const char *data) static void event_topic_get(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *topic; char *params, *channel, *topic;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 3, NULL, &channel, &topic); params = event_get_params(data, 3, NULL, &channel, &topic);
channel_change_topic(server, channel, topic, NULL, 0); channel_change_topic(irc_server, channel, topic, NULL, 0);
g_free(params); g_free(params);
} }
static void event_topic(IRC_SERVER_REC *server, const char *data, static void event_topic(SERVER_REC *server, const char *data,
const char *nick, const char *addr) const char *nick, const char *addr)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *topic, *mask; char *params, *channel, *topic, *mask;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, &channel, &topic); params = event_get_params(data, 2, &channel, &topic);
mask = addr == NULL ? g_strdup(nick) : mask = addr == NULL ? g_strdup(nick) :
g_strconcat(nick, "!", addr, NULL); g_strconcat(nick, "!", addr, NULL);
channel_change_topic(server, channel, topic, mask, time(NULL)); channel_change_topic(irc_server, channel, topic, mask, time(NULL));
g_free(mask); g_free(mask);
g_free(params); g_free(params);
} }
static void event_topic_info(IRC_SERVER_REC *server, const char *data) static void event_topic_info(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *topicby, *topictime; char *params, *channel, *topicby, *topictime;
time_t t; time_t t;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 4, NULL, &channel, params = event_get_params(data, 4, NULL, &channel,
&topicby, &topictime); &topicby, &topictime);
t = (time_t) atol(topictime); t = (time_t) atol(topictime);
channel_change_topic(server, channel, NULL, topicby, t); channel_change_topic(irc_server, channel, NULL, topicby, t);
g_free(params); g_free(params);
} }
@ -215,20 +239,24 @@ static IRC_CHANNEL_REC *channel_find_unjoined(IRC_SERVER_REC *server,
return NULL; return NULL;
} }
static void event_join(IRC_SERVER_REC *server, const char *data, const char *nick, const char *address) static void event_join(SERVER_REC *server, const char *data, const char *nick, const char *address)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *tmp, *shortchan; char *params, *channel, *tmp, *shortchan;
IRC_CHANNEL_REC *chanrec; IRC_CHANNEL_REC *chanrec;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if (g_ascii_strcasecmp(nick, server->nick) != 0) { if ((irc_server = IRC_SERVER(server)) == NULL)
return;
if (g_ascii_strcasecmp(nick, irc_server->nick) != 0) {
/* someone else joined channel, no need to do anything */ /* someone else joined channel, no need to do anything */
return; return;
} }
if (server->userhost == NULL) if (irc_server->userhost == NULL)
server->userhost = g_strdup(address); irc_server->userhost = g_strdup(address);
params = event_get_params(data, 1, &channel); params = event_get_params(data, 1, &channel);
tmp = strchr(channel, 7); /* ^G does something weird.. */ tmp = strchr(channel, 7); /* ^G does something weird.. */
@ -241,7 +269,7 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
it's name, it's not known when /join is called so rename it's name, it's not known when /join is called so rename
!channel here to !ABCDEchannel */ !channel here to !ABCDEchannel */
shortchan = g_strdup_printf("!%s", channel+6); shortchan = g_strdup_printf("!%s", channel+6);
chanrec = channel_find_unjoined(server, shortchan); chanrec = channel_find_unjoined(irc_server, shortchan);
if (chanrec != NULL) { if (chanrec != NULL) {
channel_change_name(CHANNEL(chanrec), channel); channel_change_name(CHANNEL(chanrec), channel);
g_free(chanrec->name); g_free(chanrec->name);
@ -249,16 +277,16 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
} else { } else {
/* well, did we join it with full name? if so, and if /* well, did we join it with full name? if so, and if
this was the first short one, change it's name. */ this was the first short one, change it's name. */
chanrec = channel_find_unjoined(server, channel); chanrec = channel_find_unjoined(irc_server, channel);
if (chanrec != NULL && if (chanrec != NULL &&
irc_channel_find(server, shortchan) == NULL) { irc_channel_find(irc_server, shortchan) == NULL) {
channel_change_visible_name(CHANNEL(chanrec), channel_change_visible_name(CHANNEL(chanrec),
shortchan); shortchan);
} }
} }
} }
chanrec = irc_channel_find(server, channel); chanrec = irc_channel_find(irc_server, channel);
if (chanrec != NULL && chanrec->joined) { if (chanrec != NULL && chanrec->joined) {
/* already joined this channel - probably a broken proxy that /* already joined this channel - probably a broken proxy that
forgot to send PART between */ forgot to send PART between */
@ -269,12 +297,12 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
if (chanrec == NULL) { if (chanrec == NULL) {
/* look again, because of the channel name cut issues. */ /* look again, because of the channel name cut issues. */
chanrec = channel_find_unjoined(server, channel); chanrec = channel_find_unjoined(irc_server, channel);
} }
if (chanrec == NULL) { if (chanrec == NULL) {
/* didn't get here with /join command.. */ /* didn't get here with /join command.. */
chanrec = irc_channel_create(server, channel, shortchan, TRUE); chanrec = irc_channel_create(irc_server, channel, shortchan, TRUE);
} }
chanrec->joined = TRUE; chanrec->joined = TRUE;
@ -287,14 +315,18 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
g_free(params); g_free(params);
} }
static void event_part(IRC_SERVER_REC *server, const char *data, const char *nick) static void event_part(SERVER_REC *server, const char *data, const char *nick, const char *u0)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *reason; char *params, *channel, *reason;
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if (g_ascii_strcasecmp(nick, server->nick) != 0) { if ((irc_server = IRC_SERVER(server)) == NULL)
return;
if (g_ascii_strcasecmp(nick, irc_server->nick) != 0) {
/* someone else part, no need to do anything here */ /* someone else part, no need to do anything here */
return; return;
} }
@ -310,16 +342,20 @@ static void event_part(IRC_SERVER_REC *server, const char *data, const char *nic
g_free(params); g_free(params);
} }
static void event_kick(IRC_SERVER_REC *server, const char *data) static void event_kick(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
char *params, *channel, *nick, *reason; char *params, *channel, *nick, *reason;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 3, &channel, &nick, &reason); params = event_get_params(data, 3, &channel, &nick, &reason);
if (g_ascii_strcasecmp(nick, server->nick) != 0) { if (g_ascii_strcasecmp(nick, irc_server->nick) != 0) {
/* someone else was kicked, no need to do anything */ /* someone else was kicked, no need to do anything */
g_free(params); g_free(params);
return; return;
@ -327,7 +363,7 @@ static void event_kick(IRC_SERVER_REC *server, const char *data)
chanrec = channel_find(SERVER(server), channel); chanrec = channel_find(SERVER(server), channel);
if (chanrec != NULL) { if (chanrec != NULL) {
irc_server_purge_output(server, channel); irc_server_purge_output(irc_server, channel);
chanrec->kicked = TRUE; chanrec->kicked = TRUE;
channel_destroy(chanrec); channel_destroy(chanrec);
} }
@ -335,32 +371,36 @@ static void event_kick(IRC_SERVER_REC *server, const char *data)
g_free(params); g_free(params);
} }
static void event_invite(IRC_SERVER_REC *server, const char *data) static void event_invite(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel, *shortchan; char *params, *channel, *shortchan;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
if (irc_channel_find(server, channel) == NULL) { if (irc_channel_find(irc_server, channel) == NULL) {
/* check if we're supposed to autojoin this channel */ /* check if we're supposed to autojoin this channel */
CHANNEL_SETUP_REC *setup; CHANNEL_SETUP_REC *setup;
setup = channel_setup_find(channel, server->connrec->chatnet); setup = channel_setup_find(channel, irc_server->connrec->chatnet);
if (setup == NULL && channel[0] == '!' && if (setup == NULL && channel[0] == '!' &&
strlen(channel) > 6) { strlen(channel) > 6) {
shortchan = g_strdup_printf("!%s", channel+6); shortchan = g_strdup_printf("!%s", channel+6);
setup = channel_setup_find(shortchan, setup = channel_setup_find(shortchan,
server->connrec->chatnet); irc_server->connrec->chatnet);
g_free(shortchan); g_free(shortchan);
} }
if (setup != NULL && setup->autojoin && settings_get_bool("join_auto_chans_on_invite")) if (setup != NULL && setup->autojoin && settings_get_bool("join_auto_chans_on_invite"))
server->channels_join(SERVER(server), channel, TRUE); irc_server->channels_join(SERVER(server), channel, TRUE);
} }
g_free_not_null(server->last_invite); g_free_not_null(irc_server->last_invite);
server->last_invite = g_strdup(channel); irc_server->last_invite = g_strdup(channel);
g_free(params); g_free(params);
} }
@ -369,11 +409,11 @@ void channel_events_init(void)
settings_add_bool("misc", "join_auto_chans_on_invite", TRUE); settings_add_bool("misc", "join_auto_chans_on_invite", TRUE);
signal_add_last__server_event(irc_server_event); signal_add_last__server_event(irc_server_event);
signal_add_first__event_403(event_no_such_channel); /* no such channel */ signal_add_first__event_("403", event_no_such_channel); /* no such channel */
signal_add_first__event_407(event_duplicate_channel); /* duplicate channel */ signal_add_first__event_("407", event_duplicate_channel); /* duplicate channel */
signal_add__event_("topic", event_topic); signal_add__event_("topic", event_topic);
signal_add_first__event_join(event_join); signal_add_first__event_("join", event_join);
signal_add__event_("part", event_part); signal_add__event_("part", event_part);
signal_add__event_("kick", event_kick); signal_add__event_("kick", event_kick);
signal_add__event_("invite", event_invite); signal_add__event_("invite", event_invite);

View File

@ -113,13 +113,17 @@ static int channel_rejoin(IRC_SERVER_REC *server, const char *channel)
return 1; return 1;
} }
static void event_duplicate_channel(IRC_SERVER_REC *server, const char *data) static void event_duplicate_channel(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
char *params, *channel, *p; char *params, *channel, *p;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 3, NULL, NULL, &channel); params = event_get_params(data, 3, NULL, NULL, &channel);
p = strchr(channel, ' '); p = strchr(channel, ' ');
if (p != NULL) *p = '\0'; if (p != NULL) *p = '\0';
@ -134,7 +138,7 @@ static void event_duplicate_channel(IRC_SERVER_REC *server, const char *data)
note that this same 407 is sent when trying to note that this same 407 is sent when trying to
create !!channel that already exists so we don't create !!channel that already exists so we don't
want to try rejoining then. */ want to try rejoining then. */
if (channel_rejoin(server, channel)) { if (channel_rejoin(irc_server, channel)) {
signal_stop(); signal_stop();
} }
} }
@ -143,23 +147,27 @@ static void event_duplicate_channel(IRC_SERVER_REC *server, const char *data)
g_free(params); g_free(params);
} }
static void event_target_unavailable(IRC_SERVER_REC *server, const char *data) static void event_target_unavailable(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
char *params, *channel; char *params, *channel;
IRC_CHANNEL_REC *chanrec; IRC_CHANNEL_REC *chanrec;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
if (server_ischannel(SERVER(server), channel)) { if (server_ischannel(SERVER(server), channel)) {
chanrec = irc_channel_find(server, channel); chanrec = irc_channel_find(irc_server, channel);
if (chanrec != NULL && chanrec->joined) { if (chanrec != NULL && chanrec->joined) {
/* dalnet event - can't change nick while /* dalnet event - can't change nick while
banned in channel */ banned in channel */
} else { } else {
/* channel is unavailable - try to join again /* channel is unavailable - try to join again
a bit later */ a bit later */
if (channel_rejoin(server, channel)) { if (channel_rejoin(irc_server, channel)) {
signal_stop(); signal_stop();
} }
} }
@ -170,27 +178,29 @@ static void event_target_unavailable(IRC_SERVER_REC *server, const char *data)
/* join ok/failed - remove from rejoins list. this happens always after join /* join ok/failed - remove from rejoins list. this happens always after join
except if the "target unavailable" error happens again */ except if the "target unavailable" error happens again */
static void sig_remove_rejoin(IRC_CHANNEL_REC *channel) static void sig_remove_rejoin(CHANNEL_REC *channel)
{ {
IRC_CHANNEL_REC *irc_channel;
REJOIN_REC *rec; REJOIN_REC *rec;
if (!IS_IRC_CHANNEL(channel)) if ((irc_channel = IRC_CHANNEL(channel)) == NULL)
return; return;
rec = rejoin_find(channel->server, channel->name); rec = rejoin_find(irc_channel->server, irc_channel->name);
if (rec != NULL && rec->joining) { if (rec != NULL && rec->joining) {
/* join failed, remove the rejoin */ /* join failed, remove the rejoin */
rejoin_destroy(channel->server, rec); rejoin_destroy(irc_channel->server, rec);
} }
} }
static void sig_disconnected(IRC_SERVER_REC *server) static void sig_disconnected(SERVER_REC *server)
{ {
if (!IS_IRC_SERVER(server)) IRC_SERVER_REC *irc_server;
if ((irc_server = IRC_SERVER(server)) == NULL)
return; return;
while (server->rejoin_channels != NULL) while (irc_server->rejoin_channels != NULL)
rejoin_destroy(server, server->rejoin_channels->data); rejoin_destroy(irc_server, irc_server->rejoin_channels->data);
} }
static void server_rejoin_channels(IRC_SERVER_REC *server) static void server_rejoin_channels(IRC_SERVER_REC *server)
@ -268,8 +278,8 @@ void channel_rejoin_init(void)
(GSourceFunc) sig_rejoin, NULL); (GSourceFunc) sig_rejoin, NULL);
command_bind_irc("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins); command_bind_irc("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins);
signal_add_first__event_407(event_duplicate_channel); signal_add_first__event_("407", event_duplicate_channel);
signal_add_first__event_437(event_target_unavailable); signal_add_first__event_("437", event_target_unavailable);
signal_add_first__channel_joined(sig_remove_rejoin); signal_add_first__channel_joined(sig_remove_rejoin);
signal_add_first__channel_destroyed(sig_remove_rejoin); signal_add_first__channel_destroyed(sig_remove_rejoin);
signal_add__server_disconnected(sig_disconnected); signal_add__server_disconnected(sig_disconnected);

View File

@ -41,6 +41,7 @@ loop:
#include "module.h" #include "module.h"
#include "misc.h" #include "misc.h"
#include "signals.h" #include "signals.h"
#include "core/signal-registry.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "settings.h" #include "settings.h"
@ -68,28 +69,31 @@ typedef struct {
GSList *queries[CHANNEL_QUERIES]; /* All queries that need to be asked from server */ GSList *queries[CHANNEL_QUERIES]; /* All queries that need to be asked from server */
} SERVER_QUERY_REC; } SERVER_QUERY_REC;
static void sig_connected(IRC_SERVER_REC *server) static void sig_connected(SERVER_REC *server)
{ {
IRC_SERVER_REC *irc_server;
SERVER_QUERY_REC *rec; SERVER_QUERY_REC *rec;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
if (!IS_IRC_SERVER(server)) if ((irc_server = IRC_SERVER(server)) == NULL)
return; return;
rec = g_new0(SERVER_QUERY_REC, 1); rec = g_new0(SERVER_QUERY_REC, 1);
server->chanqueries = rec; irc_server->chanqueries = rec;
} }
static void sig_disconnected(IRC_SERVER_REC *server) static void sig_disconnected(SERVER_REC *server)
{ {
IRC_SERVER_REC *irc_server;
SERVER_QUERY_REC *rec; SERVER_QUERY_REC *rec;
int n; int n;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
if (!IS_IRC_SERVER(server)) irc_server = IRC_SERVER(server);
if (irc_server == NULL)
return; return;
rec = server->chanqueries; rec = irc_server->chanqueries;
g_return_if_fail(rec != NULL); g_return_if_fail(rec != NULL);
for (n = 0; n < CHANNEL_QUERIES; n++) for (n = 0; n < CHANNEL_QUERIES; n++)
@ -97,7 +101,7 @@ static void sig_disconnected(IRC_SERVER_REC *server)
g_slist_free(rec->current_queries); g_slist_free(rec->current_queries);
g_free(rec); g_free(rec);
server->chanqueries = NULL; irc_server->chanqueries = NULL;
} }
/* Add channel to query list */ /* Add channel to query list */
@ -131,12 +135,13 @@ static void query_remove_all(IRC_CHANNEL_REC *channel)
query_check(channel->server); query_check(channel->server);
} }
static void sig_channel_destroyed(IRC_CHANNEL_REC *channel) static void sig_channel_destroyed(CHANNEL_REC *channel)
{ {
IRC_CHANNEL_REC *irc_channel;
g_return_if_fail(channel != NULL); g_return_if_fail(channel != NULL);
irc_channel = IRC_CHANNEL(channel);
if (IS_IRC_CHANNEL(channel)) if (irc_channel != NULL)
query_remove_all(channel); query_remove_all(irc_channel);
} }
static int channels_have_all_names(IRC_SERVER_REC *server) static int channels_have_all_names(IRC_SERVER_REC *server)
@ -314,13 +319,17 @@ static void channel_checksync(IRC_CHANNEL_REC *channel)
} }
/* Error occurred when trying to execute query - abort and try again. */ /* Error occurred when trying to execute query - abort and try again. */
static void query_current_error(IRC_SERVER_REC *server) static void query_current_error(SERVER_REC *server, const char *u0, const char *u1, const char *u2)
{ {
IRC_SERVER_REC *irc_server;
SERVER_QUERY_REC *rec; SERVER_QUERY_REC *rec;
GSList *tmp; GSList *tmp;
int query, abort_query; int query, abort_query;
rec = server->chanqueries; if ((irc_server = IRC_SERVER(server)) == NULL)
return;
rec = irc_server->chanqueries;
/* fix the thing that went wrong - or if it was already fixed, /* fix the thing that went wrong - or if it was already fixed,
then all we can do is abort. */ then all we can do is abort. */
@ -328,15 +337,15 @@ static void query_current_error(IRC_SERVER_REC *server)
query = rec->current_query_type; query = rec->current_query_type;
if (query == CHANNEL_QUERY_WHO) { if (query == CHANNEL_QUERY_WHO) {
if (server->no_multi_who) if (irc_server->no_multi_who)
abort_query = TRUE; abort_query = TRUE;
else else
server->no_multi_who = TRUE; irc_server->no_multi_who = TRUE;
} else { } else {
if (server->no_multi_mode) if (irc_server->no_multi_mode)
abort_query = TRUE; abort_query = TRUE;
else else
server->no_multi_mode = TRUE; irc_server->no_multi_mode = TRUE;
} }
if (!abort_query) { if (!abort_query) {
@ -354,27 +363,29 @@ static void query_current_error(IRC_SERVER_REC *server)
g_slist_free(rec->current_queries); g_slist_free(rec->current_queries);
rec->current_queries = NULL; rec->current_queries = NULL;
query_check(server); query_check(irc_server);
} }
static void sig_channel_joined(IRC_CHANNEL_REC *channel) static void sig_channel_joined(CHANNEL_REC *channel)
{ {
if (!IS_IRC_CHANNEL(channel)) IRC_CHANNEL_REC *irc_channel;
if ((irc_channel = IRC_CHANNEL(channel)) == NULL)
return; return;
if (!settings_get_bool("channel_sync")) if (!settings_get_bool("channel_sync"))
return; return;
/* Add channel to query lists */ /* Add channel to query lists */
if (!channel->no_modes) if (!irc_channel->no_modes)
query_add_channel(channel, CHANNEL_QUERY_MODE); query_add_channel(irc_channel, CHANNEL_QUERY_MODE);
if (g_hash_table_size(channel->nicks) < if (g_hash_table_size(irc_channel->nicks) <
settings_get_int("channel_max_who_sync")) settings_get_int("channel_max_who_sync"))
query_add_channel(channel, CHANNEL_QUERY_WHO); query_add_channel(irc_channel, CHANNEL_QUERY_WHO);
if (!channel->no_modes) if (!irc_channel->no_modes)
query_add_channel(channel, CHANNEL_QUERY_BMODE); query_add_channel(irc_channel, CHANNEL_QUERY_BMODE);
query_check(channel->server); query_check(irc_channel->server);
} }
static void channel_got_query(IRC_CHANNEL_REC *chanrec, int query_type) static void channel_got_query(IRC_CHANNEL_REC *chanrec, int query_type)
@ -396,17 +407,21 @@ static void channel_got_query(IRC_CHANNEL_REC *chanrec, int query_type)
query_check(chanrec->server); query_check(chanrec->server);
} }
static void event_channel_mode(IRC_SERVER_REC *server, const char *data, static void event_channel_mode(SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0)
{ {
IRC_SERVER_REC *irc_server;
IRC_CHANNEL_REC *chanrec; IRC_CHANNEL_REC *chanrec;
char *params, *channel, *mode; char *params, *channel, *mode;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 3 | PARAM_FLAG_GETREST, params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
NULL, &channel, &mode); NULL, &channel, &mode);
chanrec = irc_channel_find(server, channel); chanrec = irc_channel_find(irc_server, channel);
if (chanrec != NULL) { if (chanrec != NULL) {
if (chanrec->key != NULL && strchr(mode, 'k') == NULL) { if (chanrec->key != NULL && strchr(mode, 'k') == NULL) {
/* we joined the channel with a key, /* we joined the channel with a key,
@ -420,8 +435,9 @@ static void event_channel_mode(IRC_SERVER_REC *server, const char *data,
g_free(params); g_free(params);
} }
static void event_end_of_who(IRC_SERVER_REC *server, const char *data) static void event_end_of_who(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
SERVER_QUERY_REC *rec; SERVER_QUERY_REC *rec;
GSList *tmp, *next; GSList *tmp, *next;
char *params, *channel, **channels; char *params, *channel, **channels;
@ -429,12 +445,15 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
multiple = strchr(channel, ',') != NULL; multiple = strchr(channel, ',') != NULL;
channels = g_strsplit(channel, ",", -1); channels = g_strsplit(channel, ",", -1);
failed = FALSE; failed = FALSE;
rec = server->chanqueries; rec = irc_server->chanqueries;
for (tmp = rec->current_queries; tmp != NULL; tmp = next) { for (tmp = rec->current_queries; tmp != NULL; tmp = next) {
IRC_CHANNEL_REC *chanrec = tmp->data; IRC_CHANNEL_REC *chanrec = tmp->data;
@ -443,7 +462,7 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
continue; continue;
if (chanrec->ownnick->host == NULL && multiple && if (chanrec->ownnick->host == NULL && multiple &&
!server->one_endofwho) { !irc_server->one_endofwho) {
/* we should receive our own host for each channel. /* we should receive our own host for each channel.
However, some servers really are stupid enough However, some servers really are stupid enough
not to reply anything to /WHO requests.. */ not to reply anything to /WHO requests.. */
@ -457,26 +476,30 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
g_strfreev(channels); g_strfreev(channels);
if (multiple) if (multiple)
server->one_endofwho = TRUE; irc_server->one_endofwho = TRUE;
if (failed) { if (failed) {
/* server didn't understand multiple WHO replies, /* server didn't understand multiple WHO replies,
send them again separately */ send them again separately */
query_current_error(server); query_current_error((SERVER_REC *) irc_server, NULL, NULL, NULL);
} }
g_free(params); g_free(params);
} }
static void event_end_of_banlist(IRC_SERVER_REC *server, const char *data) static void event_end_of_banlist(SERVER_REC *server, const char *data, const char *u0, const char *u1)
{ {
IRC_SERVER_REC *irc_server;
IRC_CHANNEL_REC *chanrec; IRC_CHANNEL_REC *chanrec;
char *params, *channel; char *params, *channel;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
chanrec = irc_channel_find(server, channel); chanrec = irc_channel_find(irc_server, channel);
if (chanrec != NULL) if (chanrec != NULL)
channel_got_query(chanrec, CHANNEL_QUERY_BMODE); channel_got_query(chanrec, CHANNEL_QUERY_BMODE);

View File

@ -118,7 +118,7 @@ void ctcp_send_reply(IRC_SERVER_REC *server, const char *data)
/* CTCP ping */ /* CTCP ping */
static void ctcp_ping(IRC_SERVER_REC *server, const char *data, static void ctcp_ping(IRC_SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0, const char *u1)
{ {
char *str; char *str;
@ -166,7 +166,7 @@ static void ctcp_send_parsed_reply(IRC_SERVER_REC *server, const char *nick,
/* CTCP version */ /* CTCP version */
static void ctcp_version(IRC_SERVER_REC *server, const char *data, static void ctcp_version(IRC_SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0, const char *u1)
{ {
ctcp_send_parsed_reply(server, nick, "VERSION", ctcp_send_parsed_reply(server, nick, "VERSION",
settings_get_str("ctcp_version_reply")); settings_get_str("ctcp_version_reply"));
@ -174,7 +174,7 @@ static void ctcp_version(IRC_SERVER_REC *server, const char *data,
/* CTCP time */ /* CTCP time */
static void ctcp_time(IRC_SERVER_REC *server, const char *data, static void ctcp_time(IRC_SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0, const char *u1)
{ {
char *str, *reply; char *str, *reply;
@ -190,7 +190,7 @@ static void ctcp_time(IRC_SERVER_REC *server, const char *data,
/* CTCP userinfo */ /* CTCP userinfo */
static void ctcp_userinfo(IRC_SERVER_REC *server, const char *data, static void ctcp_userinfo(IRC_SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0, const char *u1)
{ {
ctcp_send_parsed_reply(server, nick, "USERINFO", ctcp_send_parsed_reply(server, nick, "USERINFO",
settings_get_str("ctcp_userinfo_reply")); settings_get_str("ctcp_userinfo_reply"));
@ -198,7 +198,7 @@ static void ctcp_userinfo(IRC_SERVER_REC *server, const char *data,
/* CTCP clientinfo */ /* CTCP clientinfo */
static void ctcp_clientinfo(IRC_SERVER_REC *server, const char *data, static void ctcp_clientinfo(IRC_SERVER_REC *server, const char *data,
const char *nick) const char *nick, const char *u0, const char *u1)
{ {
GString *str; GString *str;
GSList *tmp; GSList *tmp;
@ -265,7 +265,7 @@ static void ctcp_reply(IRC_SERVER_REC *server, const char *data,
g_free(str); g_free(str);
} }
static void event_privmsg(IRC_SERVER_REC *server, const char *data, static void event_privmsg(SERVER_REC *server, const char *data,
const char *nick, const char *addr) const char *nick, const char *addr)
{ {
char *params, *target, *msg; char *params, *target, *msg;
@ -273,6 +273,9 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if (!IS_IRC_SERVER(server))
return;
params = event_get_params(data, 2, &target, &msg); params = event_get_params(data, 2, &target, &msg);
/* handle only ctcp messages.. */ /* handle only ctcp messages.. */
@ -283,20 +286,23 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
if (msg[len-1] == '\001') if (msg[len-1] == '\001')
msg[len-1] = '\0'; msg[len-1] = '\0';
signal_emit__ctcp_msg(server, msg, nick, addr, target); signal_emit__ctcp_msg((IRC_SERVER_REC *) server, msg, nick, addr, target);
signal_stop(); signal_stop();
} }
g_free(params); g_free(params);
} }
static void event_notice(IRC_SERVER_REC *server, const char *data, static void event_notice(SERVER_REC *server, const char *data,
const char *nick, const char *addr) const char *nick, const char *addr)
{ {
char *params, *target, *ptr, *msg; char *params, *target, *ptr, *msg;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
if (!IS_IRC_SERVER(server))
return;
params = event_get_params(data, 2, &target, &msg); params = event_get_params(data, 2, &target, &msg);
/* handle only ctcp replies */ /* handle only ctcp replies */
@ -304,22 +310,24 @@ static void event_notice(IRC_SERVER_REC *server, const char *data,
ptr = strrchr(++msg, 1); ptr = strrchr(++msg, 1);
if (ptr != NULL) *ptr = '\0'; if (ptr != NULL) *ptr = '\0';
signal_emit__ctcp_reply(server, msg, nick, addr, target); signal_emit__ctcp_reply((IRC_SERVER_REC *) server, msg, nick, addr, target);
signal_stop(); signal_stop();
} }
g_free(params); g_free(params);
} }
static void sig_disconnected(IRC_SERVER_REC *server) static void sig_disconnected(SERVER_REC *server)
{ {
IRC_SERVER_REC *irc_server;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
if (!IS_IRC_SERVER(server)) irc_server = IRC_SERVER(server);
if (irc_server == NULL)
return; return;
g_slist_free(server->ctcpqueue); g_slist_free(irc_server->ctcpqueue);
server->ctcpqueue = NULL; irc_server->ctcpqueue = NULL;
} }
void ctcp_init(void) void ctcp_init(void)
@ -332,15 +340,15 @@ void ctcp_init(void)
settings_add_int("flood", "max_ctcp_queue", 5); settings_add_int("flood", "max_ctcp_queue", 5);
signal_add__server_disconnected(sig_disconnected); signal_add__server_disconnected(sig_disconnected);
signal_add_first__event_privmsg(event_privmsg); signal_add_first__event_("privmsg", event_privmsg);
signal_add_first__event_notice(event_notice); signal_add_first__event_("notice", event_notice);
signal_add__ctcp_msg(ctcp_msg); signal_add__ctcp_msg(ctcp_msg);
signal_add__ctcp_reply(ctcp_reply); signal_add__ctcp_reply(ctcp_reply);
signal_add__ctcp_msg_ping(ctcp_ping); signal_add__ctcp_msg_("ping", ctcp_ping);
signal_add__ctcp_msg_version(ctcp_version); signal_add__ctcp_msg_("version", ctcp_version);
signal_add__ctcp_msg_time(ctcp_time); signal_add__ctcp_msg_("time", ctcp_time);
signal_add__ctcp_msg_userinfo(ctcp_userinfo); signal_add__ctcp_msg_("userinfo", ctcp_userinfo);
signal_add__ctcp_msg_clientinfo(ctcp_clientinfo); signal_add__ctcp_msg_("clientinfo", ctcp_clientinfo);
ctcp_register("ping"); ctcp_register("ping");
ctcp_register("version"); ctcp_register("version");
@ -359,9 +367,9 @@ void ctcp_deinit(void)
signal_remove__event_("notice", event_notice); signal_remove__event_("notice", event_notice);
signal_remove__ctcp_msg(ctcp_msg); signal_remove__ctcp_msg(ctcp_msg);
signal_remove__ctcp_reply(ctcp_reply); signal_remove__ctcp_reply(ctcp_reply);
signal_remove__ctcp_msg_ping(ctcp_ping); signal_remove__ctcp_msg_("ping", ctcp_ping);
signal_remove__ctcp_msg_version(ctcp_version); signal_remove__ctcp_msg_("version", ctcp_version);
signal_remove__ctcp_msg_time(ctcp_time); signal_remove__ctcp_msg_("time", ctcp_time);
signal_remove__ctcp_msg_userinfo(ctcp_userinfo); signal_remove__ctcp_msg_("userinfo", ctcp_userinfo);
signal_remove__ctcp_msg_clientinfo(ctcp_clientinfo); signal_remove__ctcp_msg_("clientinfo", ctcp_clientinfo);
} }

View File

@ -20,6 +20,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "signal-registry.h"
#include "channels.h" #include "channels.h"
void irc_channels_setup_init(void) void irc_channels_setup_init(void)

View File

@ -224,18 +224,20 @@ static char *irc_get_join_data(CHANNEL_REC *channel)
g_strconcat(irc_channel->name, " ", irc_channel->key, NULL); g_strconcat(irc_channel->name, " ", irc_channel->key, NULL);
} }
static void sig_channel_created(IRC_CHANNEL_REC *channel) static void sig_channel_created(CHANNEL_REC *channel, void *u0)
{ {
if (IS_IRC_CHANNEL(channel)) IRC_CHANNEL_REC *irc_channel;
channel->get_join_data = irc_get_join_data; if ((irc_channel = IRC_CHANNEL(channel)) != NULL)
irc_channel->get_join_data = irc_get_join_data;
} }
static void sig_channel_destroyed(IRC_CHANNEL_REC *channel) static void sig_channel_destroyed(CHANNEL_REC *channel)
{ {
if (!IS_IRC_CHANNEL(channel)) IRC_CHANNEL_REC *irc_channel;
if ((irc_channel = IRC_CHANNEL(channel)) == NULL)
return; return;
if (!channel->server->disconnected && !channel->left && !channel->kicked) { if (!irc_channel->server->disconnected && !irc_channel->left && !irc_channel->kicked) {
/* destroying channel record without actually /* destroying channel record without actually
having left the channel yet */ having left the channel yet */
signal_emit__command_("part", "", (SERVER_REC *)channel->server, (WI_ITEM_REC *)channel); signal_emit__command_("part", "", (SERVER_REC *)channel->server, (WI_ITEM_REC *)channel);

View File

@ -20,6 +20,7 @@
#include "module.h" #include "module.h"
#include "signals.h" #include "signals.h"
#include "core/signal-registry.h"
#include "lib-config/iconfig.h" #include "lib-config/iconfig.h"
#include "settings.h" #include "settings.h"
@ -33,77 +34,81 @@ void ircnet_create(IRC_CHATNET_REC *rec)
chatnet_create((CHATNET_REC *) rec); chatnet_create((CHATNET_REC *) rec);
} }
static void sig_chatnet_read(IRC_CHATNET_REC *rec, CONFIG_NODE *node) static void sig_chatnet_read(CHATNET_REC *rec, CONFIG_NODE *node)
{ {
IRC_CHATNET_REC *irc_rec;
char *value; char *value;
if (!IS_IRC_CHATNET(rec)) if ((irc_rec = IRC_CHATNET(rec)) == NULL)
return; return;
value = config_node_get_str(node, "usermode", NULL); value = config_node_get_str(node, "usermode", NULL);
rec->usermode = (value != NULL && *value != '\0') ? g_strdup(value) : NULL; irc_rec->usermode = (value != NULL && *value != '\0') ? g_strdup(value) : NULL;
value = config_node_get_str(node, "alternate_nick", NULL); value = config_node_get_str(node, "alternate_nick", NULL);
rec->alternate_nick = (value != NULL && *value != '\0') ? g_strdup(value) : NULL; irc_rec->alternate_nick = (value != NULL && *value != '\0') ? g_strdup(value) : NULL;
rec->max_cmds_at_once = config_node_get_int(node, "cmdmax", 0); irc_rec->max_cmds_at_once = config_node_get_int(node, "cmdmax", 0);
rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 0); irc_rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 0);
rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0); irc_rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0);
rec->max_kicks = config_node_get_int(node, "max_kicks", 0); irc_rec->max_kicks = config_node_get_int(node, "max_kicks", 0);
rec->max_msgs = config_node_get_int(node, "max_msgs", 0); irc_rec->max_msgs = config_node_get_int(node, "max_msgs", 0);
rec->max_modes = config_node_get_int(node, "max_modes", 0); irc_rec->max_modes = config_node_get_int(node, "max_modes", 0);
rec->max_whois = config_node_get_int(node, "max_whois", 0); irc_rec->max_whois = config_node_get_int(node, "max_whois", 0);
rec->sasl_mechanism = g_strdup(config_node_get_str(node, "sasl_mechanism", NULL)); irc_rec->sasl_mechanism = g_strdup(config_node_get_str(node, "sasl_mechanism", NULL));
rec->sasl_username = g_strdup(config_node_get_str(node, "sasl_username", NULL)); irc_rec->sasl_username = g_strdup(config_node_get_str(node, "sasl_username", NULL));
rec->sasl_password = g_strdup(config_node_get_str(node, "sasl_password", NULL)); irc_rec->sasl_password = g_strdup(config_node_get_str(node, "sasl_password", NULL));
} }
static void sig_chatnet_saved(IRC_CHATNET_REC *rec, CONFIG_NODE *node) static void sig_chatnet_saved(CHATNET_REC *rec, CONFIG_NODE *node)
{ {
if (!IS_IRC_CHATNET(rec)) IRC_CHATNET_REC *irc_rec;
if ((irc_rec = IRC_CHATNET(rec)) == NULL)
return; return;
if (rec->usermode != NULL) if (irc_rec->usermode != NULL)
iconfig_node_set_str(node, "usermode", rec->usermode); iconfig_node_set_str(node, "usermode", irc_rec->usermode);
if (rec->alternate_nick != NULL) if (irc_rec->alternate_nick != NULL)
iconfig_node_set_str(node, "alternate_nick", rec->alternate_nick); iconfig_node_set_str(node, "alternate_nick", irc_rec->alternate_nick);
if (rec->max_cmds_at_once > 0) if (irc_rec->max_cmds_at_once > 0)
iconfig_node_set_int(node, "cmdmax", rec->max_cmds_at_once); iconfig_node_set_int(node, "cmdmax", irc_rec->max_cmds_at_once);
if (rec->cmd_queue_speed > 0) if (irc_rec->cmd_queue_speed > 0)
iconfig_node_set_int(node, "cmdspeed", rec->cmd_queue_speed); iconfig_node_set_int(node, "cmdspeed", irc_rec->cmd_queue_speed);
if (rec->max_query_chans > 0) if (irc_rec->max_query_chans > 0)
iconfig_node_set_int(node, "max_query_chans", rec->max_query_chans); iconfig_node_set_int(node, "max_query_chans", irc_rec->max_query_chans);
if (rec->max_kicks > 0) if (irc_rec->max_kicks > 0)
iconfig_node_set_int(node, "max_kicks", rec->max_kicks); iconfig_node_set_int(node, "max_kicks", irc_rec->max_kicks);
if (rec->max_msgs > 0) if (irc_rec->max_msgs > 0)
iconfig_node_set_int(node, "max_msgs", rec->max_msgs); iconfig_node_set_int(node, "max_msgs", irc_rec->max_msgs);
if (rec->max_modes > 0) if (irc_rec->max_modes > 0)
iconfig_node_set_int(node, "max_modes", rec->max_modes); iconfig_node_set_int(node, "max_modes", irc_rec->max_modes);
if (rec->max_whois > 0) if (irc_rec->max_whois > 0)
iconfig_node_set_int(node, "max_whois", rec->max_whois); iconfig_node_set_int(node, "max_whois", irc_rec->max_whois);
if (rec->sasl_mechanism != NULL) if (irc_rec->sasl_mechanism != NULL)
iconfig_node_set_str(node, "sasl_mechanism", rec->sasl_mechanism); iconfig_node_set_str(node, "sasl_mechanism", irc_rec->sasl_mechanism);
if (rec->sasl_username != NULL) if (irc_rec->sasl_username != NULL)
iconfig_node_set_str(node, "sasl_username", rec->sasl_username); iconfig_node_set_str(node, "sasl_username", irc_rec->sasl_username);
if (rec->sasl_password != NULL) if (irc_rec->sasl_password != NULL)
iconfig_node_set_str(node, "sasl_password", rec->sasl_password); iconfig_node_set_str(node, "sasl_password", irc_rec->sasl_password);
} }
static void sig_chatnet_destroyed(IRC_CHATNET_REC *rec) static void sig_chatnet_destroyed(CHATNET_REC *rec)
{ {
if (IS_IRC_CHATNET(rec)) { IRC_CHATNET_REC *irc_rec;
g_free(rec->usermode); if ((irc_rec = IRC_CHATNET(rec)) == NULL)
g_free(rec->alternate_nick); return;
g_free(rec->sasl_mechanism);
g_free(rec->sasl_username); g_free(irc_rec->usermode);
g_free(rec->sasl_password); g_free(irc_rec->alternate_nick);
} g_free(irc_rec->sasl_mechanism);
g_free(irc_rec->sasl_username);
g_free(irc_rec->sasl_password);
} }
void irc_chatnets_init(void) void irc_chatnets_init(void)

View File

@ -861,17 +861,18 @@ static void cmd_server_purge(const char *data, IRC_SERVER_REC *server)
} }
/* destroy all knockouts in server */ /* destroy all knockouts in server */
static void sig_server_disconnected(IRC_SERVER_REC *server) static void sig_server_disconnected(SERVER_REC *server)
{ {
IRC_SERVER_REC *irc_server;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
if (!IS_IRC_SERVER(server)) if ((irc_server = IRC_SERVER(server)) == NULL)
return; return;
g_free(server->last_nick); g_free(irc_server->last_nick);
while (server->knockoutlist != NULL) while (irc_server->knockoutlist != NULL)
knockout_destroy(server, server->knockoutlist->data); knockout_destroy(irc_server, irc_server->knockoutlist->data);
} }
/* destroy all knockouts in channel */ /* destroy all knockouts in channel */

View File

@ -24,6 +24,7 @@
#include "net-sendbuffer.h" #include "net-sendbuffer.h"
#include "rawlog.h" #include "rawlog.h"
#include "misc.h" #include "misc.h"
#include "core/signal-registry.h"
#include "signal-registry.h" #include "signal-registry.h"
#include "irc-servers.h" #include "irc-servers.h"
@ -312,15 +313,19 @@ static void strip_params_colon(char *const params)
} }
} }
static void irc_server_event(IRC_SERVER_REC *server, const char *line, static void irc_server_event(SERVER_REC *server, const char *line,
const char *nick, const char *address) const char *nick, const char *address)
{ {
IRC_SERVER_REC *irc_server;
int emitted; int emitted;
const char *signal; const char *signal;
char *event, *args; char *event, *args;
g_return_if_fail(line != NULL); g_return_if_fail(line != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
/* split event / args */ /* split event / args */
event = g_strconcat("event ", line, NULL); event = g_strconcat("event ", line, NULL);
args = strchr(event+6, ' '); args = strchr(event+6, ' ');
@ -329,17 +334,17 @@ static void irc_server_event(IRC_SERVER_REC *server, const char *line,
ascii_strdown(event); ascii_strdown(event);
/* check if event needs to be redirected */ /* check if event needs to be redirected */
signal = server_redirect_get_signal(server, nick, event, args); signal = server_redirect_get_signal(irc_server, nick, event, args);
if (signal != NULL) if (signal != NULL)
rawlog_redirect(server->rawlog, signal); rawlog_redirect(irc_server->rawlog, signal);
/* emit it */ /* emit it */
current_server_event = event+6; current_server_event = event+6;
emitted = signal == NULL ? emitted = signal == NULL ?
signal_emit__event_(line, (SERVER_REC *)server, args, nick, address) : signal_emit__event_(line, server, args, nick, address) :
signal_emit_raw(signal, 4, server, args, nick, address); signal_emit_raw(signal, 4, irc_server, args, nick, address);
if (!emitted) if (!emitted)
signal_emit__default_event((SERVER_REC *)server, line, nick, address); signal_emit__default_event(server, line, nick, address);
current_server_event = NULL; current_server_event = NULL;
g_free(event); g_free(event);
@ -383,16 +388,20 @@ static char *irc_parse_prefix(char *line, char **nick, char **address)
} }
/* Parse command line sent by server */ /* Parse command line sent by server */
static void irc_parse_incoming_line(IRC_SERVER_REC *server, char *line) static void irc_parse_incoming_line(SERVER_REC *server, char *line)
{ {
IRC_SERVER_REC *irc_server;
char *nick, *address; char *nick, *address;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
g_return_if_fail(line != NULL); g_return_if_fail(line != NULL);
if ((irc_server = IRC_SERVER(server)) == NULL)
return;
line = irc_parse_prefix(line, &nick, &address); line = irc_parse_prefix(line, &nick, &address);
if (*line != '\0') if (*line != '\0')
signal_emit__server_event((SERVER_REC *)server, line, nick, address); signal_emit__server_event(server, line, nick, address);
} }
/* input function: handle incoming server messages */ /* input function: handle incoming server messages */
@ -428,17 +437,18 @@ static void irc_parse_incoming(SERVER_REC *server)
server_unref(server); server_unref(server);
} }
static void irc_init_server(IRC_SERVER_REC *server) static void irc_init_server(SERVER_REC *server)
{ {
IRC_SERVER_REC *irc_server;
g_return_if_fail(server != NULL); g_return_if_fail(server != NULL);
if (!IS_IRC_SERVER(server)) if ((irc_server = IRC_SERVER(server)) == NULL)
return; return;
server->readtag = irc_server->readtag =
g_input_add(net_sendbuffer_handle(server->handle), g_input_add(net_sendbuffer_handle(irc_server->handle),
G_INPUT_READ, G_INPUT_READ,
(GInputFunction) irc_parse_incoming, server); (GInputFunction) irc_parse_incoming, irc_server);
} }
void irc_irc_init(void) void irc_irc_init(void)

View File

@ -20,17 +20,33 @@ SIGNAL_REGISTER(channel_rejoin_remove, 2, (SERVER_REC *server, REJOIN_REC *rejoi
SIGNAL_REGISTER(channel_rejoin_new, 2, (SERVER_REC *server, REJOIN_REC *rejoin), SIGNAL_REGISTER(channel_rejoin_new, 2, (SERVER_REC *server, REJOIN_REC *rejoin),
server, rejoin) server, rejoin)
// channels-query.c:
SIGNAL_REGISTER(chanquery_mode, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
SIGNAL_REGISTER(chanquery_who_end, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
SIGNAL_REGISTER(chanquery_abort, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
SIGNAL_REGISTER(silent_event_who, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
SIGNAL_REGISTER(chanquery_ban, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
SIGNAL_REGISTER(chanquery_ban_end, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
server, args, sender_nick, sender_address)
// ctcp.c: // ctcp.c:
SIGNAL_REGISTER(ctcp_msg, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER(ctcp_msg, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
irc_server, args, nick, addr, target) irc_server, args, nick, addr, target)
SIGNAL_REGISTER_F(ctcp_msg, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER_(ctcp_msg, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
(IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
cmd, irc_server, args, nick, addr, target) cmd, irc_server, args, nick, addr, target)
SIGNAL_REGISTER(default_ctcp_msg, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER(default_ctcp_msg, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
irc_server, args, nick, addr, target) irc_server, args, nick, addr, target)
SIGNAL_REGISTER(ctcp_reply, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER(ctcp_reply, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
irc_server, args, nick, addr, target) irc_server, args, nick, addr, target)
SIGNAL_REGISTER_F(ctcp_reply, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER_(ctcp_reply, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
(IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
cmd, irc_server, args, nick, addr, target) cmd, irc_server, args, nick, addr, target)
SIGNAL_REGISTER(default_ctcp_reply, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER(default_ctcp_reply, 5, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
irc_server, args, nick, addr, target) irc_server, args, nick, addr, target)
@ -42,13 +58,17 @@ SIGNAL_REGISTER(event_connected, 1, (SERVER_REC *server),
server) server)
// irc-cap.c // irc-cap.c
SIGNAL_REGISTER_F(server_cap_ack, 1, (const char *cmd, IRC_SERVER_REC *irc_server), SIGNAL_REGISTER_(server_cap_ack, 1, (const char *cmd, IRC_SERVER_REC *irc_server),
(IRC_SERVER_REC *irc_server),
cmd, irc_server) cmd, irc_server)
SIGNAL_REGISTER_F(server_cap_nak, 1, (const char *cmd, IRC_SERVER_REC *irc_server), SIGNAL_REGISTER_(server_cap_nak, 1, (const char *cmd, IRC_SERVER_REC *irc_server),
(IRC_SERVER_REC *irc_server),
cmd, irc_server) cmd, irc_server)
SIGNAL_REGISTER_F(server_cap_new, 1, (const char *cmd, IRC_SERVER_REC *irc_server), SIGNAL_REGISTER_(server_cap_new, 1, (const char *cmd, IRC_SERVER_REC *irc_server),
(IRC_SERVER_REC *irc_server),
cmd, irc_server) cmd, irc_server)
SIGNAL_REGISTER_F(server_cap_delete, 1, (const char *cmd, IRC_SERVER_REC *irc_server), SIGNAL_REGISTER_(server_cap_delete, 1, (const char *cmd, IRC_SERVER_REC *irc_server),
(IRC_SERVER_REC *irc_server),
cmd, irc_server) cmd, irc_server)
SIGNAL_REGISTER(server_cap_end, 1, (IRC_SERVER_REC *irc_server), SIGNAL_REGISTER(server_cap_end, 1, (IRC_SERVER_REC *irc_server),
irc_server) irc_server)
@ -63,9 +83,10 @@ SIGNAL_REGISTER(server_sasl_success, 1, (SERVER_REC *server),
// irc.c: // irc.c:
SIGNAL_REGISTER(server_event, 4, (SERVER_REC *server, char *data, char *sender_nick, char *sender_address), SIGNAL_REGISTER(server_event, 4, (SERVER_REC *server, const char *data, const char *sender_nick, const char *sender_address),
server, data, sender_nick, sender_address) server, data, sender_nick, sender_address)
SIGNAL_REGISTER_F(event, 4, (const char *cmd, SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), SIGNAL_REGISTER_(event, 4, (const char *cmd, SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
(SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address),
cmd, server, args, sender_nick, sender_address) cmd, server, args, sender_nick, sender_address)
SIGNAL_REGISTER(default_event, 4, (SERVER_REC *server, const char *data, const char *sender_nick, const char *sender_address), SIGNAL_REGISTER(default_event, 4, (SERVER_REC *server, const char *data, const char *sender_nick, const char *sender_address),
server, data, sender_nick, sender_address) server, data, sender_nick, sender_address)
@ -76,7 +97,8 @@ SIGNAL_REGISTER(server_incoming, 2, (SERVER_REC *server, char *data),
server, data) server, data)
// (for perl parser..)) // (for perl parser..))
SIGNAL_REGISTER_F(redir, 4, (const char *cmd, SERVER_REC *server, char *args, char *sender_nick, char *sender_address), SIGNAL_REGISTER_(redir, 4, (const char *cmd, SERVER_REC *server, char *args, char *sender_nick, char *sender_address),
(SERVER_REC *server, char *args, char *sender_nick, char *sender_address),
cmd, server, args, sender_nick, sender_address) cmd, server, args, sender_nick, sender_address)
// lag.c: // lag.c:
@ -117,14 +139,16 @@ SIGNAL_REGISTER(netsplit_remove, 1, (NETSPLIT_REC *netsplit),
// dcc*.c: // dcc*.c:
SIGNAL_REGISTER_F(dcc_ctcp, 2, (const char *cmd, CHAT_DCC_REC *chat_dcc, char *args), SIGNAL_REGISTER_(dcc_ctcp, 2, (const char *cmd, CHAT_DCC_REC *chat_dcc, char *args),
(CHAT_DCC_REC *chat_dcc, char *args),
cmd, chat_dcc, args) cmd, chat_dcc, args)
SIGNAL_REGISTER(default_dcc_ctcp, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *args), SIGNAL_REGISTER(default_dcc_ctcp, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *args),
chat_dcc, cmd, args) chat_dcc, cmd, args)
SIGNAL_REGISTER(dcc_unknown_ctcp, 3, (char *args, char *sender, char *sendaddr), SIGNAL_REGISTER(dcc_unknown_ctcp, 3, (char *args, char *sender, char *sendaddr),
args, sender, sendaddr) args, sender, sendaddr)
SIGNAL_REGISTER_F(dcc_reply, 2, (const char *cmd, CHAT_DCC_REC *chat_dcc, char *args), SIGNAL_REGISTER_(dcc_reply, 2, (const char *cmd, CHAT_DCC_REC *chat_dcc, char *args),
(CHAT_DCC_REC *chat_dcc, char *args),
cmd, chat_dcc, args) cmd, chat_dcc, args)
SIGNAL_REGISTER(default_dcc_reply, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *args), SIGNAL_REGISTER(default_dcc_reply, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *args),
chat_dcc, cmd, args) chat_dcc, cmd, args)
@ -184,11 +208,13 @@ SIGNAL_REGISTER(default_ctcp_reply_dcc, 5, (IRC_SERVER_REC *irc_server, const ch
irc_server, args, nick, addr, target) irc_server, args, nick, addr, target)
SIGNAL_REGISTER(ctcp_msg_dcc, 6, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc), SIGNAL_REGISTER(ctcp_msg_dcc, 6, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc),
irc_server, args, nick, addr, target, dcc) irc_server, args, nick, addr, target, dcc)
SIGNAL_REGISTER_F(ctcp_msg_dcc, 6, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc), SIGNAL_REGISTER_(ctcp_msg_dcc, 6, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc),
(IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc),
cmd, irc_server, args, nick, addr, target, dcc) cmd, irc_server, args, nick, addr, target, dcc)
SIGNAL_REGISTER(ctcp_reply_dcc, 6, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc), SIGNAL_REGISTER(ctcp_reply_dcc, 6, (IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target, DCC_REC *dcc),
irc_server, args, nick, addr, target, dcc) irc_server, args, nick, addr, target, dcc)
SIGNAL_REGISTER_F(ctcp_reply_dcc, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target), SIGNAL_REGISTER_(ctcp_reply_dcc, 5, (const char *cmd, IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
(IRC_SERVER_REC *irc_server, const char *args, const char *nick, const char *addr, const char *target),
cmd, irc_server, args, nick, addr, target) cmd, irc_server, args, nick, addr, target)
// autoignore.c: // autoignore.c:

View File

@ -13,6 +13,14 @@
"channel rejoin remove", SERVER_REC, REJOIN_REC "channel rejoin remove", SERVER_REC, REJOIN_REC
"channel rejoin new", SERVER_REC, REJOIN_REC "channel rejoin new", SERVER_REC, REJOIN_REC
// channels-query.c:
"chanquery mode", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"chanquery who end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"chanquery abort", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"silent event who", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"chanquery ban", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"chanquery ban end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
// ctcp.c: // ctcp.c:
"ctcp msg", IRC_SERVER_REC, const char *args, const char *nick, const char *addr, const char *target "ctcp msg", IRC_SERVER_REC, const char *args, const char *nick, const char *addr, const char *target
@ -40,7 +48,7 @@
// irc.c: // irc.c:
"server event", SERVER_REC, char *data, char *sender_nick, char *sender_address "server event", SERVER_REC, const char *data, const char *sender_nick, const char *sender_address
"event "<cmd>, SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "event "<cmd>, SERVER_REC, const char *args, const char *sender_nick, const char *sender_address
"default event", SERVER_REC, const char *data, const char *sender_nick, const char *sender_address "default event", SERVER_REC, const char *data, const char *sender_nick, const char *sender_address
"whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address "whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address