forked from PsychoticNinja/ailin-nemui-irssi
[wip] tieing up
This commit is contained in:
parent
0aed9a9168
commit
eda1cc1f90
@ -20,6 +20,7 @@
|
||||
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "signal-registry.h"
|
||||
#include "lib-config/iconfig.h"
|
||||
#include "settings.h"
|
||||
@ -215,7 +216,7 @@ void channels_setup_init(void)
|
||||
setupchannels = NULL;
|
||||
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);
|
||||
}
|
||||
|
||||
@ -224,6 +225,6 @@ void channels_setup_deinit(void)
|
||||
while (setupchannels != NULL)
|
||||
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);
|
||||
}
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "network.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "irc/core/signal-registry.h"
|
||||
#include "special-vars.h"
|
||||
#include "lib-config/iconfig.h"
|
||||
#include "settings.h"
|
||||
@ -181,7 +183,7 @@ void chatnets_init(void)
|
||||
chatnets = NULL;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -189,7 +191,7 @@ void chatnets_deinit(void)
|
||||
{
|
||||
module_uniq_destroy("CHATNET");
|
||||
|
||||
signal_remove__event_("connected", sig_connected);
|
||||
signal_remove__setup_reread(read_chatnets);
|
||||
signal_remove__event_connected(sig_connected);
|
||||
signal_remove__setup_reread((signal_func_setup_reread_t) read_chatnets);
|
||||
signal_remove__irssi_init_read_settings(read_chatnets);
|
||||
}
|
||||
|
@ -917,7 +917,7 @@ static void parse_command(const char *command, int expand_aliases,
|
||||
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;
|
||||
int expand_aliases = TRUE;
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "net-disconnect.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "settings.h"
|
||||
#include "session.h"
|
||||
#ifdef HAVE_CAPSICUM
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "modules.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "expandos.h"
|
||||
#include "settings.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,
|
||||
const char *nick, const char *address)
|
||||
const char *nick, const char *address, const char *target)
|
||||
{
|
||||
g_free_not_null(last_privmsg_from);
|
||||
last_privmsg_from = g_strdup(nick);
|
||||
|
@ -526,7 +526,7 @@ void ignore_init(void)
|
||||
time_tag = g_timeout_add(1000, (GSourceFunc) unignore_timeout, NULL);
|
||||
|
||||
read_ignores();
|
||||
signal_add__setup_reread(read_ignores);
|
||||
signal_add__setup_reread((signal_func_setup_reread_t) read_ignores);
|
||||
}
|
||||
|
||||
void ignore_deinit(void)
|
||||
@ -536,5 +536,5 @@ void ignore_deinit(void)
|
||||
ignore_destroy(ignores->data, TRUE);
|
||||
nickmatch_deinit(nickmatch);
|
||||
|
||||
signal_remove__setup_reread(read_ignores);
|
||||
signal_remove__setup_reread((signal_func_setup_reread_t) read_ignores);
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "irc/core/signal-registry.h"
|
||||
#include "levels.h"
|
||||
#include "log.h"
|
||||
#include "servers.h"
|
||||
@ -31,7 +32,7 @@ static LOG_REC *awaylog;
|
||||
static int away_filepos;
|
||||
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;
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "commands.h"
|
||||
#include "levels.h"
|
||||
#include "misc.h"
|
||||
@ -599,7 +600,7 @@ void log_init(void)
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -613,6 +614,6 @@ void log_deinit(void)
|
||||
g_free_not_null(log_timestamp);
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -444,7 +444,7 @@ void nicklist_set_own(CHANNEL_REC *channel, NICK_REC *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));
|
||||
|
||||
|
@ -104,7 +104,7 @@ void nickmatch_cache_init(void)
|
||||
{
|
||||
lists = NULL;
|
||||
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_remove(sig_nick_remove);
|
||||
}
|
||||
@ -115,7 +115,7 @@ void nickmatch_cache_deinit(void)
|
||||
g_slist_free(lists);
|
||||
|
||||
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_remove(sig_nick_remove);
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "network.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "irc/core/signal-registry.h"
|
||||
|
||||
#include "chat-protocols.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);
|
||||
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__event_("connected", sig_connected);
|
||||
signal_add__event_connected(sig_connected);
|
||||
signal_add__chat_protocol_deinit(sig_chat_protocol_deinit);
|
||||
signal_add__setup_changed(read_settings);
|
||||
|
||||
@ -519,9 +520,9 @@ void servers_reconnect_deinit(void)
|
||||
{
|
||||
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__event_("connected", sig_connected);
|
||||
signal_remove__event_connected(sig_connected);
|
||||
signal_remove__chat_protocol_deinit(sig_chat_protocol_deinit);
|
||||
signal_remove__setup_changed(read_settings);
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "network.h"
|
||||
#include "lib-config/iconfig.h"
|
||||
#include "settings.h"
|
||||
@ -659,7 +660,7 @@ void servers_setup_init(void)
|
||||
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);
|
||||
}
|
||||
|
||||
@ -673,7 +674,7 @@ void servers_setup_deinit(void)
|
||||
server_setup_destroy(setupservers->data);
|
||||
|
||||
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);
|
||||
|
||||
module_uniq_destroy("SERVER SETUP");
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "commands.h"
|
||||
#include "args.h"
|
||||
#include "network.h"
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "fe-common/core/signal-registry.h"
|
||||
#include "commands.h"
|
||||
#include "levels.h"
|
||||
#include "misc.h"
|
||||
@ -886,7 +887,7 @@ void settings_init(void)
|
||||
(GSourceFunc) sig_autosave, NULL);
|
||||
signal_add__irssi_init_finished(sig_init_finished);
|
||||
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)
|
||||
@ -899,7 +900,7 @@ void settings_deinit(void)
|
||||
g_source_remove(timeout_tag);
|
||||
signal_remove__irssi_init_finished(sig_init_finished);
|
||||
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_free(last_invalid_modules);
|
||||
|
@ -6,22 +6,23 @@
|
||||
" " -> "_"
|
||||
"_" -> "__"
|
||||
*/
|
||||
inline static void signal_register_fix_name(char *var) {
|
||||
char *i, *o ;
|
||||
for (i = o = var; *i; i++, o++) {
|
||||
if (*i == '_') {
|
||||
if (i[1] == '_') {
|
||||
i++;
|
||||
*o = '_';
|
||||
} else {
|
||||
*o = ' ';
|
||||
}
|
||||
inline static void signal_register_fix_name(char *var)
|
||||
{
|
||||
char *i, *o ;
|
||||
for (i = o = var; *i; i++, o++) {
|
||||
if (*i == '_') {
|
||||
if (i[1] == '_') {
|
||||
i++;
|
||||
*o = '_';
|
||||
} else {
|
||||
*o = *i;
|
||||
*o = ' ';
|
||||
}
|
||||
} else {
|
||||
*o = *i;
|
||||
}
|
||||
*o = '\0';
|
||||
}
|
||||
*o = '\0';
|
||||
}
|
||||
|
||||
#define SIGNAL_REGISTER(SIGNAL, NUM, 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); \
|
||||
} \
|
||||
|
||||
#define SIGNAL_REGISTER_F(SIGNAL, NUM, PROTO, ARG, ...) \
|
||||
#define SIGNAL_REGISTER_(SIGNAL, NUM, PROTO, PROTO_, ARG, ...) \
|
||||
inline static int signal_emit__ ## SIGNAL ## _ PROTO { \
|
||||
int ret; \
|
||||
char *signal_name, base_signal_name[] = #SIGNAL; \
|
||||
@ -90,7 +91,7 @@ inline static void signal_register_fix_name(char *var) {
|
||||
return ret; \
|
||||
} \
|
||||
\
|
||||
typedef void (*signal_func_ ## SIGNAL ## __t) PROTO ; \
|
||||
typedef void (*signal_func_ ## SIGNAL ## __t) PROTO_ ; \
|
||||
\
|
||||
inline static void signal_add_full__ ## SIGNAL ## _ \
|
||||
(const char *module, int priority, \
|
||||
|
@ -1,6 +1,6 @@
|
||||
// core
|
||||
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)
|
||||
|
||||
// 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),
|
||||
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)
|
||||
SIGNAL_REGISTER(send_text, 3, (const char *line, SERVER_REC *server, WI_ITEM_REC *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)
|
||||
SIGNAL_REGISTER(default_command, 3, (const char *args, SERVER_REC *server, WI_ITEM_REC *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:
|
||||
SIGNAL_REGISTER(chat_protocol_unknown, 1, (const char *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)
|
||||
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)
|
||||
|
||||
// ignore.c:
|
||||
@ -163,7 +164,7 @@ SIGNAL_REGISTER(server_disconnected, 1, (SERVER_REC *server),
|
||||
server)
|
||||
SIGNAL_REGISTER(server_quit, 2, (SERVER_REC *server, char *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)
|
||||
SIGNAL_REGISTER(server_destroyed, 1, (SERVER_REC *server),
|
||||
server)
|
||||
|
@ -1,6 +1,6 @@
|
||||
// core
|
||||
"gui exit"
|
||||
"gui dialog", char *type, const char *text
|
||||
"gui dialog", const char *type, const char *text
|
||||
|
||||
// chat-protocols.c:
|
||||
"chat protocol created", CHAT_PROTOCOL_REC
|
||||
@ -30,15 +30,15 @@
|
||||
"list subcommands", const char *command
|
||||
"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
|
||||
"command "<cmd>, const char *args, SERVER_REC, WI_ITEM_REC
|
||||
"default command", const char *args, SERVER_REC, WI_ITEM_REC
|
||||
|
||||
// chat-commands.c:
|
||||
"chat protocol unknown", const char *protocol
|
||||
"message own_public", SERVER_REC, char *msg, char *target
|
||||
"message own_private", SERVER_REC, char *msg, char *target, char *orig_target
|
||||
"message own_public", SERVER_REC, const char *msg, const char *target
|
||||
"message own_private", SERVER_REC, const char *msg, const char *target, const char *orig_target
|
||||
|
||||
// ignore.c:
|
||||
"ignore created", IGNORE_REC
|
||||
@ -98,7 +98,7 @@
|
||||
"server connect failed", SERVER_REC, const char *msg
|
||||
"server disconnected", SERVER_REC
|
||||
"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
|
||||
|
||||
// servers-setup.c
|
||||
|
@ -8,13 +8,15 @@ SIGNAL_REGISTER(gui_print_text_finished, 1, (WINDOW_REC *window),
|
||||
window)
|
||||
|
||||
// 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)
|
||||
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)
|
||||
SIGNAL_REGISTER(complete_erase, 3, (WINDOW_REC *window, const char *word, const char *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)
|
||||
SIGNAL_REGISTER(completion_removed, 1, (const char *word),
|
||||
word)
|
||||
@ -88,7 +90,8 @@ SIGNAL_REGISTER(key_created, 1, (KEY_REC *key),
|
||||
key)
|
||||
SIGNAL_REGISTER(key_destroyed, 1, (KEY_REC *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)
|
||||
SIGNAL_REGISTER(gui_entry_redirect, 4, (SIGNAL_FUNC func, const char *entry, int_in_ptr flags, void *data),
|
||||
func, entry, flags, data)
|
||||
|
@ -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;
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
/* We'll be checking "4xx <your nick> <channel>" for channels
|
||||
which we haven't joined yet. 4xx are error codes and should
|
||||
indicate that the join failed. */
|
||||
params = event_get_params(line, 3, &numeric, NULL, &channel);
|
||||
|
||||
if (numeric[0] == '4')
|
||||
check_join_failure(server, channel);
|
||||
check_join_failure(irc_server, channel);
|
||||
|
||||
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_SETUP_REC *setup;
|
||||
char *params, *channel;
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, NULL, &channel);
|
||||
chanrec = *channel == '!' && channel[1] != '\0' ?
|
||||
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);
|
||||
if (setup != NULL && setup->autojoin) {
|
||||
/* 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);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
check_join_failure(server, channel);
|
||||
check_join_failure(irc_server, channel);
|
||||
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;
|
||||
char *params, *channel, *p;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
/* this new addition to ircd breaks completely with older
|
||||
"standards", "nick Duplicate ::!!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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
IRC_SERVER_REC *irc_server;
|
||||
char *params, *channel, *topic, *mask;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, &channel, &topic);
|
||||
mask = addr == NULL ? g_strdup(nick) :
|
||||
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(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;
|
||||
time_t t;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 4, NULL, &channel,
|
||||
&topicby, &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);
|
||||
}
|
||||
|
||||
@ -215,20 +239,24 @@ static IRC_CHANNEL_REC *channel_find_unjoined(IRC_SERVER_REC *server,
|
||||
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;
|
||||
IRC_CHANNEL_REC *chanrec;
|
||||
|
||||
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 */
|
||||
return;
|
||||
}
|
||||
|
||||
if (server->userhost == NULL)
|
||||
server->userhost = g_strdup(address);
|
||||
if (irc_server->userhost == NULL)
|
||||
irc_server->userhost = g_strdup(address);
|
||||
|
||||
params = event_get_params(data, 1, &channel);
|
||||
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
|
||||
!channel here to !ABCDEchannel */
|
||||
shortchan = g_strdup_printf("!%s", channel+6);
|
||||
chanrec = channel_find_unjoined(server, shortchan);
|
||||
chanrec = channel_find_unjoined(irc_server, shortchan);
|
||||
if (chanrec != NULL) {
|
||||
channel_change_name(CHANNEL(chanrec), channel);
|
||||
g_free(chanrec->name);
|
||||
@ -249,16 +277,16 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
|
||||
} else {
|
||||
/* well, did we join it with full name? if so, and if
|
||||
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 &&
|
||||
irc_channel_find(server, shortchan) == NULL) {
|
||||
irc_channel_find(irc_server, shortchan) == NULL) {
|
||||
channel_change_visible_name(CHANNEL(chanrec),
|
||||
shortchan);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chanrec = irc_channel_find(server, channel);
|
||||
chanrec = irc_channel_find(irc_server, channel);
|
||||
if (chanrec != NULL && chanrec->joined) {
|
||||
/* already joined this channel - probably a broken proxy that
|
||||
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) {
|
||||
/* 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) {
|
||||
/* 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;
|
||||
@ -287,14 +315,18 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
|
||||
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;
|
||||
CHANNEL_REC *chanrec;
|
||||
|
||||
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 */
|
||||
return;
|
||||
}
|
||||
@ -310,16 +342,20 @@ static void event_part(IRC_SERVER_REC *server, const char *data, const char *nic
|
||||
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;
|
||||
char *params, *channel, *nick, *reason;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
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 */
|
||||
g_free(params);
|
||||
return;
|
||||
@ -327,7 +363,7 @@ static void event_kick(IRC_SERVER_REC *server, const char *data)
|
||||
|
||||
chanrec = channel_find(SERVER(server), channel);
|
||||
if (chanrec != NULL) {
|
||||
irc_server_purge_output(server, channel);
|
||||
irc_server_purge_output(irc_server, channel);
|
||||
chanrec->kicked = TRUE;
|
||||
channel_destroy(chanrec);
|
||||
}
|
||||
@ -335,32 +371,36 @@ static void event_kick(IRC_SERVER_REC *server, const char *data)
|
||||
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;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
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 */
|
||||
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] == '!' &&
|
||||
strlen(channel) > 6) {
|
||||
shortchan = g_strdup_printf("!%s", channel+6);
|
||||
setup = channel_setup_find(shortchan,
|
||||
server->connrec->chatnet);
|
||||
irc_server->connrec->chatnet);
|
||||
g_free(shortchan);
|
||||
}
|
||||
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);
|
||||
server->last_invite = g_strdup(channel);
|
||||
g_free_not_null(irc_server->last_invite);
|
||||
irc_server->last_invite = g_strdup(channel);
|
||||
g_free(params);
|
||||
}
|
||||
|
||||
@ -369,11 +409,11 @@ void channel_events_init(void)
|
||||
settings_add_bool("misc", "join_auto_chans_on_invite", TRUE);
|
||||
|
||||
signal_add_last__server_event(irc_server_event);
|
||||
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_("403", event_no_such_channel); /* no such channel */
|
||||
signal_add_first__event_("407", event_duplicate_channel); /* duplicate channel */
|
||||
|
||||
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_("kick", event_kick);
|
||||
signal_add__event_("invite", event_invite);
|
||||
|
@ -113,13 +113,17 @@ static int channel_rejoin(IRC_SERVER_REC *server, const char *channel)
|
||||
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;
|
||||
char *params, *channel, *p;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 3, NULL, NULL, &channel);
|
||||
p = strchr(channel, ' ');
|
||||
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
|
||||
create !!channel that already exists so we don't
|
||||
want to try rejoining then. */
|
||||
if (channel_rejoin(server, channel)) {
|
||||
if (channel_rejoin(irc_server, channel)) {
|
||||
signal_stop();
|
||||
}
|
||||
}
|
||||
@ -143,23 +147,27 @@ static void event_duplicate_channel(IRC_SERVER_REC *server, const char *data)
|
||||
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;
|
||||
IRC_CHANNEL_REC *chanrec;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, NULL, &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) {
|
||||
/* dalnet event - can't change nick while
|
||||
banned in channel */
|
||||
} else {
|
||||
/* channel is unavailable - try to join again
|
||||
a bit later */
|
||||
if (channel_rejoin(server, channel)) {
|
||||
if (channel_rejoin(irc_server, channel)) {
|
||||
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
|
||||
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;
|
||||
|
||||
if (!IS_IRC_CHANNEL(channel))
|
||||
if ((irc_channel = IRC_CHANNEL(channel)) == NULL)
|
||||
return;
|
||||
|
||||
rec = rejoin_find(channel->server, channel->name);
|
||||
rec = rejoin_find(irc_channel->server, irc_channel->name);
|
||||
if (rec != NULL && rec->joining) {
|
||||
/* 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;
|
||||
|
||||
while (server->rejoin_channels != NULL)
|
||||
rejoin_destroy(server, server->rejoin_channels->data);
|
||||
while (irc_server->rejoin_channels != NULL)
|
||||
rejoin_destroy(irc_server, irc_server->rejoin_channels->data);
|
||||
}
|
||||
|
||||
static void server_rejoin_channels(IRC_SERVER_REC *server)
|
||||
@ -268,8 +278,8 @@ void channel_rejoin_init(void)
|
||||
(GSourceFunc) sig_rejoin, NULL);
|
||||
|
||||
command_bind_irc("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins);
|
||||
signal_add_first__event_407(event_duplicate_channel);
|
||||
signal_add_first__event_437(event_target_unavailable);
|
||||
signal_add_first__event_("407", event_duplicate_channel);
|
||||
signal_add_first__event_("437", event_target_unavailable);
|
||||
signal_add_first__channel_joined(sig_remove_rejoin);
|
||||
signal_add_first__channel_destroyed(sig_remove_rejoin);
|
||||
signal_add__server_disconnected(sig_disconnected);
|
||||
|
@ -41,6 +41,7 @@ loop:
|
||||
#include "module.h"
|
||||
#include "misc.h"
|
||||
#include "signals.h"
|
||||
#include "core/signal-registry.h"
|
||||
#include "signal-registry.h"
|
||||
#include "settings.h"
|
||||
|
||||
@ -68,28 +69,31 @@ typedef struct {
|
||||
GSList *queries[CHANNEL_QUERIES]; /* All queries that need to be asked from server */
|
||||
} 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;
|
||||
|
||||
g_return_if_fail(server != NULL);
|
||||
if (!IS_IRC_SERVER(server))
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
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;
|
||||
int n;
|
||||
|
||||
g_return_if_fail(server != NULL);
|
||||
if (!IS_IRC_SERVER(server))
|
||||
irc_server = IRC_SERVER(server);
|
||||
if (irc_server == NULL)
|
||||
return;
|
||||
|
||||
rec = server->chanqueries;
|
||||
rec = irc_server->chanqueries;
|
||||
g_return_if_fail(rec != NULL);
|
||||
|
||||
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_free(rec);
|
||||
|
||||
server->chanqueries = NULL;
|
||||
irc_server->chanqueries = NULL;
|
||||
}
|
||||
|
||||
/* Add channel to query list */
|
||||
@ -131,12 +135,13 @@ static void query_remove_all(IRC_CHANNEL_REC *channel)
|
||||
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);
|
||||
|
||||
if (IS_IRC_CHANNEL(channel))
|
||||
query_remove_all(channel);
|
||||
irc_channel = IRC_CHANNEL(channel);
|
||||
if (irc_channel != NULL)
|
||||
query_remove_all(irc_channel);
|
||||
}
|
||||
|
||||
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. */
|
||||
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;
|
||||
GSList *tmp;
|
||||
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,
|
||||
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;
|
||||
if (query == CHANNEL_QUERY_WHO) {
|
||||
if (server->no_multi_who)
|
||||
if (irc_server->no_multi_who)
|
||||
abort_query = TRUE;
|
||||
else
|
||||
server->no_multi_who = TRUE;
|
||||
irc_server->no_multi_who = TRUE;
|
||||
} else {
|
||||
if (server->no_multi_mode)
|
||||
if (irc_server->no_multi_mode)
|
||||
abort_query = TRUE;
|
||||
else
|
||||
server->no_multi_mode = TRUE;
|
||||
irc_server->no_multi_mode = TRUE;
|
||||
}
|
||||
|
||||
if (!abort_query) {
|
||||
@ -354,27 +363,29 @@ static void query_current_error(IRC_SERVER_REC *server)
|
||||
g_slist_free(rec->current_queries);
|
||||
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;
|
||||
|
||||
if (!settings_get_bool("channel_sync"))
|
||||
return;
|
||||
|
||||
/* Add channel to query lists */
|
||||
if (!channel->no_modes)
|
||||
query_add_channel(channel, CHANNEL_QUERY_MODE);
|
||||
if (g_hash_table_size(channel->nicks) <
|
||||
if (!irc_channel->no_modes)
|
||||
query_add_channel(irc_channel, CHANNEL_QUERY_MODE);
|
||||
if (g_hash_table_size(irc_channel->nicks) <
|
||||
settings_get_int("channel_max_who_sync"))
|
||||
query_add_channel(channel, CHANNEL_QUERY_WHO);
|
||||
if (!channel->no_modes)
|
||||
query_add_channel(channel, CHANNEL_QUERY_BMODE);
|
||||
query_add_channel(irc_channel, CHANNEL_QUERY_WHO);
|
||||
if (!irc_channel->no_modes)
|
||||
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)
|
||||
@ -396,17 +407,21 @@ static void channel_got_query(IRC_CHANNEL_REC *chanrec, int query_type)
|
||||
query_check(chanrec->server);
|
||||
}
|
||||
|
||||
static void event_channel_mode(IRC_SERVER_REC *server, const char *data,
|
||||
const char *nick)
|
||||
static void event_channel_mode(SERVER_REC *server, const char *data,
|
||||
const char *nick, const char *u0)
|
||||
{
|
||||
IRC_SERVER_REC *irc_server;
|
||||
IRC_CHANNEL_REC *chanrec;
|
||||
char *params, *channel, *mode;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
|
||||
NULL, &channel, &mode);
|
||||
chanrec = irc_channel_find(server, channel);
|
||||
chanrec = irc_channel_find(irc_server, channel);
|
||||
if (chanrec != NULL) {
|
||||
if (chanrec->key != NULL && strchr(mode, 'k') == NULL) {
|
||||
/* 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);
|
||||
}
|
||||
|
||||
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;
|
||||
GSList *tmp, *next;
|
||||
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);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, NULL, &channel);
|
||||
multiple = strchr(channel, ',') != NULL;
|
||||
channels = g_strsplit(channel, ",", -1);
|
||||
|
||||
failed = FALSE;
|
||||
rec = server->chanqueries;
|
||||
rec = irc_server->chanqueries;
|
||||
for (tmp = rec->current_queries; tmp != NULL; tmp = next) {
|
||||
IRC_CHANNEL_REC *chanrec = tmp->data;
|
||||
|
||||
@ -443,7 +462,7 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
|
||||
continue;
|
||||
|
||||
if (chanrec->ownnick->host == NULL && multiple &&
|
||||
!server->one_endofwho) {
|
||||
!irc_server->one_endofwho) {
|
||||
/* we should receive our own host for each channel.
|
||||
However, some servers really are stupid enough
|
||||
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);
|
||||
if (multiple)
|
||||
server->one_endofwho = TRUE;
|
||||
irc_server->one_endofwho = TRUE;
|
||||
|
||||
if (failed) {
|
||||
/* server didn't understand multiple WHO replies,
|
||||
send them again separately */
|
||||
query_current_error(server);
|
||||
query_current_error((SERVER_REC *) irc_server, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
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;
|
||||
char *params, *channel;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, NULL, &channel);
|
||||
chanrec = irc_channel_find(server, channel);
|
||||
chanrec = irc_channel_find(irc_server, channel);
|
||||
|
||||
if (chanrec != NULL)
|
||||
channel_got_query(chanrec, CHANNEL_QUERY_BMODE);
|
||||
|
@ -118,7 +118,7 @@ void ctcp_send_reply(IRC_SERVER_REC *server, const char *data)
|
||||
|
||||
/* CTCP ping */
|
||||
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;
|
||||
|
||||
@ -166,7 +166,7 @@ static void ctcp_send_parsed_reply(IRC_SERVER_REC *server, const char *nick,
|
||||
|
||||
/* CTCP version */
|
||||
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",
|
||||
settings_get_str("ctcp_version_reply"));
|
||||
@ -174,7 +174,7 @@ static void ctcp_version(IRC_SERVER_REC *server, const char *data,
|
||||
|
||||
/* CTCP time */
|
||||
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;
|
||||
|
||||
@ -190,7 +190,7 @@ static void ctcp_time(IRC_SERVER_REC *server, const char *data,
|
||||
|
||||
/* CTCP userinfo */
|
||||
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",
|
||||
settings_get_str("ctcp_userinfo_reply"));
|
||||
@ -198,7 +198,7 @@ static void ctcp_userinfo(IRC_SERVER_REC *server, const char *data,
|
||||
|
||||
/* CTCP clientinfo */
|
||||
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;
|
||||
GSList *tmp;
|
||||
@ -265,7 +265,7 @@ static void ctcp_reply(IRC_SERVER_REC *server, const char *data,
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
if (!IS_IRC_SERVER(server))
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, &target, &msg);
|
||||
|
||||
/* handle only ctcp messages.. */
|
||||
@ -283,20 +286,23 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
|
||||
if (msg[len-1] == '\001')
|
||||
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();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
char *params, *target, *ptr, *msg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
if (!IS_IRC_SERVER(server))
|
||||
return;
|
||||
|
||||
params = event_get_params(data, 2, &target, &msg);
|
||||
|
||||
/* handle only ctcp replies */
|
||||
@ -304,22 +310,24 @@ static void event_notice(IRC_SERVER_REC *server, const char *data,
|
||||
ptr = strrchr(++msg, 1);
|
||||
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();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
if (!IS_IRC_SERVER(server))
|
||||
irc_server = IRC_SERVER(server);
|
||||
if (irc_server == NULL)
|
||||
return;
|
||||
|
||||
g_slist_free(server->ctcpqueue);
|
||||
server->ctcpqueue = NULL;
|
||||
g_slist_free(irc_server->ctcpqueue);
|
||||
irc_server->ctcpqueue = NULL;
|
||||
}
|
||||
|
||||
void ctcp_init(void)
|
||||
@ -332,15 +340,15 @@ void ctcp_init(void)
|
||||
settings_add_int("flood", "max_ctcp_queue", 5);
|
||||
|
||||
signal_add__server_disconnected(sig_disconnected);
|
||||
signal_add_first__event_privmsg(event_privmsg);
|
||||
signal_add_first__event_notice(event_notice);
|
||||
signal_add_first__event_("privmsg", event_privmsg);
|
||||
signal_add_first__event_("notice", event_notice);
|
||||
signal_add__ctcp_msg(ctcp_msg);
|
||||
signal_add__ctcp_reply(ctcp_reply);
|
||||
signal_add__ctcp_msg_ping(ctcp_ping);
|
||||
signal_add__ctcp_msg_version(ctcp_version);
|
||||
signal_add__ctcp_msg_time(ctcp_time);
|
||||
signal_add__ctcp_msg_userinfo(ctcp_userinfo);
|
||||
signal_add__ctcp_msg_clientinfo(ctcp_clientinfo);
|
||||
signal_add__ctcp_msg_("ping", ctcp_ping);
|
||||
signal_add__ctcp_msg_("version", ctcp_version);
|
||||
signal_add__ctcp_msg_("time", ctcp_time);
|
||||
signal_add__ctcp_msg_("userinfo", ctcp_userinfo);
|
||||
signal_add__ctcp_msg_("clientinfo", ctcp_clientinfo);
|
||||
|
||||
ctcp_register("ping");
|
||||
ctcp_register("version");
|
||||
@ -359,9 +367,9 @@ void ctcp_deinit(void)
|
||||
signal_remove__event_("notice", event_notice);
|
||||
signal_remove__ctcp_msg(ctcp_msg);
|
||||
signal_remove__ctcp_reply(ctcp_reply);
|
||||
signal_remove__ctcp_msg_ping(ctcp_ping);
|
||||
signal_remove__ctcp_msg_version(ctcp_version);
|
||||
signal_remove__ctcp_msg_time(ctcp_time);
|
||||
signal_remove__ctcp_msg_userinfo(ctcp_userinfo);
|
||||
signal_remove__ctcp_msg_clientinfo(ctcp_clientinfo);
|
||||
signal_remove__ctcp_msg_("ping", ctcp_ping);
|
||||
signal_remove__ctcp_msg_("version", ctcp_version);
|
||||
signal_remove__ctcp_msg_("time", ctcp_time);
|
||||
signal_remove__ctcp_msg_("userinfo", ctcp_userinfo);
|
||||
signal_remove__ctcp_msg_("clientinfo", ctcp_clientinfo);
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "signal-registry.h"
|
||||
#include "channels.h"
|
||||
|
||||
void irc_channels_setup_init(void)
|
||||
|
@ -224,18 +224,20 @@ static char *irc_get_join_data(CHANNEL_REC *channel)
|
||||
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))
|
||||
channel->get_join_data = irc_get_join_data;
|
||||
IRC_CHANNEL_REC *irc_channel;
|
||||
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;
|
||||
|
||||
if (!channel->server->disconnected && !channel->left && !channel->kicked) {
|
||||
if (!irc_channel->server->disconnected && !irc_channel->left && !irc_channel->kicked) {
|
||||
/* destroying channel record without actually
|
||||
having left the channel yet */
|
||||
signal_emit__command_("part", "", (SERVER_REC *)channel->server, (WI_ITEM_REC *)channel);
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "module.h"
|
||||
#include "signals.h"
|
||||
#include "core/signal-registry.h"
|
||||
#include "lib-config/iconfig.h"
|
||||
#include "settings.h"
|
||||
|
||||
@ -33,77 +34,81 @@ void ircnet_create(IRC_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;
|
||||
|
||||
if (!IS_IRC_CHATNET(rec))
|
||||
if ((irc_rec = IRC_CHATNET(rec)) == NULL)
|
||||
return;
|
||||
|
||||
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);
|
||||
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);
|
||||
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_cmds_at_once = config_node_get_int(node, "cmdmax", 0);
|
||||
irc_rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 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);
|
||||
rec->max_msgs = config_node_get_int(node, "max_msgs", 0);
|
||||
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_kicks = config_node_get_int(node, "max_kicks", 0);
|
||||
irc_rec->max_msgs = config_node_get_int(node, "max_msgs", 0);
|
||||
irc_rec->max_modes = config_node_get_int(node, "max_modes", 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));
|
||||
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_mechanism = g_strdup(config_node_get_str(node, "sasl_mechanism", NULL));
|
||||
irc_rec->sasl_username = g_strdup(config_node_get_str(node, "sasl_username", 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;
|
||||
|
||||
if (rec->usermode != NULL)
|
||||
iconfig_node_set_str(node, "usermode", rec->usermode);
|
||||
if (irc_rec->usermode != NULL)
|
||||
iconfig_node_set_str(node, "usermode", irc_rec->usermode);
|
||||
|
||||
if (rec->alternate_nick != NULL)
|
||||
iconfig_node_set_str(node, "alternate_nick", rec->alternate_nick);
|
||||
if (irc_rec->alternate_nick != NULL)
|
||||
iconfig_node_set_str(node, "alternate_nick", irc_rec->alternate_nick);
|
||||
|
||||
if (rec->max_cmds_at_once > 0)
|
||||
iconfig_node_set_int(node, "cmdmax", rec->max_cmds_at_once);
|
||||
if (rec->cmd_queue_speed > 0)
|
||||
iconfig_node_set_int(node, "cmdspeed", rec->cmd_queue_speed);
|
||||
if (rec->max_query_chans > 0)
|
||||
iconfig_node_set_int(node, "max_query_chans", rec->max_query_chans);
|
||||
if (irc_rec->max_cmds_at_once > 0)
|
||||
iconfig_node_set_int(node, "cmdmax", irc_rec->max_cmds_at_once);
|
||||
if (irc_rec->cmd_queue_speed > 0)
|
||||
iconfig_node_set_int(node, "cmdspeed", irc_rec->cmd_queue_speed);
|
||||
if (irc_rec->max_query_chans > 0)
|
||||
iconfig_node_set_int(node, "max_query_chans", irc_rec->max_query_chans);
|
||||
|
||||
if (rec->max_kicks > 0)
|
||||
iconfig_node_set_int(node, "max_kicks", rec->max_kicks);
|
||||
if (rec->max_msgs > 0)
|
||||
iconfig_node_set_int(node, "max_msgs", rec->max_msgs);
|
||||
if (rec->max_modes > 0)
|
||||
iconfig_node_set_int(node, "max_modes", rec->max_modes);
|
||||
if (rec->max_whois > 0)
|
||||
iconfig_node_set_int(node, "max_whois", rec->max_whois);
|
||||
if (irc_rec->max_kicks > 0)
|
||||
iconfig_node_set_int(node, "max_kicks", irc_rec->max_kicks);
|
||||
if (irc_rec->max_msgs > 0)
|
||||
iconfig_node_set_int(node, "max_msgs", irc_rec->max_msgs);
|
||||
if (irc_rec->max_modes > 0)
|
||||
iconfig_node_set_int(node, "max_modes", irc_rec->max_modes);
|
||||
if (irc_rec->max_whois > 0)
|
||||
iconfig_node_set_int(node, "max_whois", irc_rec->max_whois);
|
||||
|
||||
if (rec->sasl_mechanism != NULL)
|
||||
iconfig_node_set_str(node, "sasl_mechanism", rec->sasl_mechanism);
|
||||
if (rec->sasl_username != NULL)
|
||||
iconfig_node_set_str(node, "sasl_username", rec->sasl_username);
|
||||
if (rec->sasl_password != NULL)
|
||||
iconfig_node_set_str(node, "sasl_password", rec->sasl_password);
|
||||
if (irc_rec->sasl_mechanism != NULL)
|
||||
iconfig_node_set_str(node, "sasl_mechanism", irc_rec->sasl_mechanism);
|
||||
if (irc_rec->sasl_username != NULL)
|
||||
iconfig_node_set_str(node, "sasl_username", irc_rec->sasl_username);
|
||||
if (irc_rec->sasl_password != NULL)
|
||||
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)) {
|
||||
g_free(rec->usermode);
|
||||
g_free(rec->alternate_nick);
|
||||
g_free(rec->sasl_mechanism);
|
||||
g_free(rec->sasl_username);
|
||||
g_free(rec->sasl_password);
|
||||
}
|
||||
IRC_CHATNET_REC *irc_rec;
|
||||
if ((irc_rec = IRC_CHATNET(rec)) == NULL)
|
||||
return;
|
||||
|
||||
g_free(irc_rec->usermode);
|
||||
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)
|
||||
|
@ -861,17 +861,18 @@ static void cmd_server_purge(const char *data, IRC_SERVER_REC *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);
|
||||
|
||||
if (!IS_IRC_SERVER(server))
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
g_free(server->last_nick);
|
||||
g_free(irc_server->last_nick);
|
||||
|
||||
while (server->knockoutlist != NULL)
|
||||
knockout_destroy(server, server->knockoutlist->data);
|
||||
while (irc_server->knockoutlist != NULL)
|
||||
knockout_destroy(irc_server, irc_server->knockoutlist->data);
|
||||
}
|
||||
|
||||
/* destroy all knockouts in channel */
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "net-sendbuffer.h"
|
||||
#include "rawlog.h"
|
||||
#include "misc.h"
|
||||
#include "core/signal-registry.h"
|
||||
#include "signal-registry.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)
|
||||
{
|
||||
IRC_SERVER_REC *irc_server;
|
||||
int emitted;
|
||||
const char *signal;
|
||||
char *event, *args;
|
||||
|
||||
g_return_if_fail(line != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
/* split event / args */
|
||||
event = g_strconcat("event ", line, NULL);
|
||||
args = strchr(event+6, ' ');
|
||||
@ -329,17 +334,17 @@ static void irc_server_event(IRC_SERVER_REC *server, const char *line,
|
||||
ascii_strdown(event);
|
||||
|
||||
/* 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)
|
||||
rawlog_redirect(server->rawlog, signal);
|
||||
rawlog_redirect(irc_server->rawlog, signal);
|
||||
|
||||
/* emit it */
|
||||
current_server_event = event+6;
|
||||
emitted = signal == NULL ?
|
||||
signal_emit__event_(line, (SERVER_REC *)server, args, nick, address) :
|
||||
signal_emit_raw(signal, 4, server, args, nick, address);
|
||||
signal_emit__event_(line, server, args, nick, address) :
|
||||
signal_emit_raw(signal, 4, irc_server, args, nick, address);
|
||||
if (!emitted)
|
||||
signal_emit__default_event((SERVER_REC *)server, line, nick, address);
|
||||
signal_emit__default_event(server, line, nick, address);
|
||||
current_server_event = NULL;
|
||||
|
||||
g_free(event);
|
||||
@ -383,16 +388,20 @@ static char *irc_parse_prefix(char *line, char **nick, char **address)
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
||||
g_return_if_fail(server != NULL);
|
||||
g_return_if_fail(line != NULL);
|
||||
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
line = irc_parse_prefix(line, &nick, &address);
|
||||
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 */
|
||||
@ -428,17 +437,18 @@ static void irc_parse_incoming(SERVER_REC *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);
|
||||
|
||||
if (!IS_IRC_SERVER(server))
|
||||
if ((irc_server = IRC_SERVER(server)) == NULL)
|
||||
return;
|
||||
|
||||
server->readtag =
|
||||
g_input_add(net_sendbuffer_handle(server->handle),
|
||||
irc_server->readtag =
|
||||
g_input_add(net_sendbuffer_handle(irc_server->handle),
|
||||
G_INPUT_READ,
|
||||
(GInputFunction) irc_parse_incoming, server);
|
||||
(GInputFunction) irc_parse_incoming, irc_server);
|
||||
}
|
||||
|
||||
void irc_irc_init(void)
|
||||
|
@ -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),
|
||||
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:
|
||||
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
@ -42,13 +58,17 @@ SIGNAL_REGISTER(event_connected, 1, (SERVER_REC *server),
|
||||
server)
|
||||
|
||||
// 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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
SIGNAL_REGISTER(server_cap_end, 1, (IRC_SERVER_REC *irc_server),
|
||||
irc_server)
|
||||
@ -63,9 +83,10 @@ SIGNAL_REGISTER(server_sasl_success, 1, (SERVER_REC *server),
|
||||
|
||||
// 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)
|
||||
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)
|
||||
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)
|
||||
@ -76,7 +97,8 @@ SIGNAL_REGISTER(server_incoming, 2, (SERVER_REC *server, char *data),
|
||||
server, data)
|
||||
|
||||
// (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)
|
||||
|
||||
// lag.c:
|
||||
@ -117,14 +139,16 @@ SIGNAL_REGISTER(netsplit_remove, 1, (NETSPLIT_REC *netsplit),
|
||||
|
||||
// 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)
|
||||
SIGNAL_REGISTER(default_dcc_ctcp, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *args),
|
||||
chat_dcc, cmd, args)
|
||||
SIGNAL_REGISTER(dcc_unknown_ctcp, 3, (char *args, char *sender, char *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)
|
||||
SIGNAL_REGISTER(default_dcc_reply, 3, (CHAT_DCC_REC *chat_dcc, char *cmd, char *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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
|
||||
// autoignore.c:
|
||||
|
@ -13,6 +13,14 @@
|
||||
"channel rejoin remove", 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 msg", IRC_SERVER_REC, const char *args, const char *nick, const char *addr, const char *target
|
||||
@ -40,7 +48,7 @@
|
||||
|
||||
// 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
|
||||
"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
|
||||
|
Loading…
x
Reference in New Issue
Block a user