diff options
70 files changed, 381 insertions, 438 deletions
diff --git a/src/core/chat-commands.c b/src/core/chat-commands.c index 4a7b41ce..72ac41e4 100644 --- a/src/core/chat-commands.c +++ b/src/core/chat-commands.c @@ -262,25 +262,25 @@ static void cmd_join(const char *data, SERVER_REC *server) void *free_arg; g_return_if_fail(data != NULL); - if (!IS_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_GETREST, "join", &optlist, &channels)) return; + /* -<server tag> */ + server = cmd_options_get_server("join", optlist, server); + if (server == NULL || !server->connected) + cmd_param_error(CMDERR_NOT_CONNECTED); + if (g_hash_table_lookup(optlist, "invite")) channels = server->last_invite; else { if (*channels == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - - /* -<server tag> */ - server = cmd_options_get_server("join", optlist, server); } - if (server != NULL && channels != NULL) + if (channels != NULL) server->channels_join(server, channels, FALSE); cmd_params_free(free_arg); } diff --git a/src/core/commands.c b/src/core/commands.c index 46d0c666..1dedc543 100644 --- a/src/core/commands.c +++ b/src/core/commands.c @@ -111,8 +111,8 @@ int command_have_sub(const char *command) return FALSE; } -static COMMAND_MODULE_REC *command_module_get(COMMAND_REC *rec, - const char *module) +static COMMAND_MODULE_REC * +command_module_get(COMMAND_REC *rec, const char *module, int protocol) { COMMAND_MODULE_REC *modrec; @@ -122,14 +122,18 @@ static COMMAND_MODULE_REC *command_module_get(COMMAND_REC *rec, if (modrec == NULL) { modrec = g_new0(COMMAND_MODULE_REC, 1); modrec->name = g_strdup(module); + modrec->protocol = -1; rec->modules = g_slist_append(rec->modules, modrec); } + if (protocol != -1) + modrec->protocol = protocol; + return modrec; } void command_bind_to(const char *module, int pos, const char *cmd, - const char *category, SIGNAL_FUNC func) + int protocol, const char *category, SIGNAL_FUNC func) { COMMAND_REC *rec; COMMAND_MODULE_REC *modrec; @@ -145,7 +149,7 @@ void command_bind_to(const char *module, int pos, const char *cmd, rec->category = category == NULL ? NULL : g_strdup(category); commands = g_slist_append(commands, rec); } - modrec = command_module_get(rec, module); + modrec = command_module_get(rec, module, protocol); modrec->signals = g_slist_append(modrec->signals, func); @@ -433,7 +437,7 @@ void command_set_options_module(const char *module, rec = command_find(cmd); g_return_if_fail(rec != NULL); - modrec = command_module_get(rec, module); + modrec = command_module_get(rec, module, -1); reload = modrec->options != NULL; if (reload) { @@ -769,6 +773,28 @@ void commands_remove_module(const char *module) } } +static int cmd_protocol_match(COMMAND_REC *cmd, SERVER_REC *server) +{ + GSList *tmp; + + for (tmp = cmd->modules; tmp != NULL; tmp = tmp->next) { + COMMAND_MODULE_REC *rec = tmp->data; + + if (rec->protocol == -1) { + /* at least one module accepts the command + without specific protocol */ + return 1; + } + + if (server != NULL && rec->protocol == server->chat_type) { + /* matching protocol found */ + return 1; + } + } + + return 0; +} + #define alias_runstack_push(alias) \ alias_runstack = g_slist_append(alias_runstack, alias) @@ -781,6 +807,7 @@ void commands_remove_module(const char *module) static void parse_command(const char *command, int expand_aliases, SERVER_REC *server, void *item) { + COMMAND_REC *rec; const char *alias, *newcmd; char *cmd, *orig, *args, *oldcmd; @@ -810,6 +837,17 @@ static void parse_command(const char *command, int expand_aliases, return; } + rec = command_find(newcmd); + if (rec != NULL && !cmd_protocol_match(rec, server)) { + g_free(orig); + + signal_emit("error command", 2, + GINT_TO_POINTER(server == NULL ? + CMDERR_NOT_CONNECTED : + CMDERR_ILLEGAL_PROTO)); + return; + } + cmd = g_strconcat("command ", newcmd, NULL); if (server != NULL) server_redirect_default(SERVER(server), cmd); diff --git a/src/core/commands.h b/src/core/commands.h index 9dee2e80..86446cd8 100644 --- a/src/core/commands.h +++ b/src/core/commands.h @@ -6,6 +6,7 @@ typedef struct { char *name; char *options; + int protocol; /* chat protocol required for this command */ GSList *signals; } COMMAND_MODULE_REC; @@ -26,10 +27,11 @@ enum { CMDERR_ERRNO, /* get the error from errno */ CMDERR_NOT_ENOUGH_PARAMS, /* not enough parameters given */ - CMDERR_NOT_CONNECTED, /* not connected to IRC server */ + CMDERR_NOT_CONNECTED, /* not connected to server */ CMDERR_NOT_JOINED, /* not joined to any channels in this window */ CMDERR_CHAN_NOT_FOUND, /* channel not found */ CMDERR_CHAN_NOT_SYNCED, /* channel not fully synchronized yet */ + CMDERR_ILLEGAL_PROTO, /* requires different chat protocol than the active server */ CMDERR_NOT_GOOD_IDEA /* not good idea to do, -yes overrides this */ }; @@ -56,10 +58,14 @@ extern char *current_command; /* the command we're right now. */ /* Bind command to specified function. */ void command_bind_to(const char *module, int pos, const char *cmd, - const char *category, SIGNAL_FUNC func); -#define command_bind(a, b, c) command_bind_to(MODULE_NAME, 1, a, b, c) -#define command_bind_first(a, b, c) command_bind_to(MODULE_NAME, 0, a, b, c) -#define command_bind_last(a, b, c) command_bind_to(MODULE_NAME, 2, a, b, c) + int protocol, const char *category, SIGNAL_FUNC func); +#define command_bind(a, b, c) command_bind_to(MODULE_NAME, 1, a, -1, b, c) +#define command_bind_first(a, b, c) command_bind_to(MODULE_NAME, 0, a, -1, b, c) +#define command_bind_last(a, b, c) command_bind_to(MODULE_NAME, 2, a, -1, b, c) + +#define command_bind_proto(a, b, c, d) command_bind_to(MODULE_NAME, 1, a, b, c, d) +#define command_bind_proto_first(a, b, c, d) command_bind_to(MODULE_NAME, 0, a, b, c, d) +#define command_bind_proto_last(a, b, c, d) command_bind_to(MODULE_NAME, 2, a, b, c, d) void command_unbind(const char *cmd, SIGNAL_FUNC func); diff --git a/src/core/rawlog.c b/src/core/rawlog.c index 4e47040c..138875ea 100644 --- a/src/core/rawlog.c +++ b/src/core/rawlog.c @@ -22,10 +22,13 @@ #include "rawlog.h" #include "modules.h" #include "signals.h" +#include "commands.h" #include "misc.h" #include "write-buffer.h" #include "settings.h" +#include "servers.h" + static int rawlog_lines; static int signal_rawlog; static int log_file_create_mode; @@ -158,6 +161,40 @@ static void read_settings(void) log_file_create_mode = octal2dec(settings_get_int("log_create_mode")); } +static void cmd_rawlog(const char *data, SERVER_REC *server, void *item) +{ + command_runsub("rawlog", data, server, item); +} + +/* SYNTAX: RAWLOG SAVE <file> */ +static void cmd_rawlog_save(const char *data, SERVER_REC *server) +{ + g_return_if_fail(data != NULL); + if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); + + if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); + rawlog_save(server->rawlog, data); +} + +/* SYNTAX: RAWLOG OPEN <file> */ +static void cmd_rawlog_open(const char *data, SERVER_REC *server) +{ + g_return_if_fail(data != NULL); + if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); + + if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); + rawlog_open(server->rawlog, data); +} + +/* SYNTAX: RAWLOG CLOSE */ +static void cmd_rawlog_close(const char *data, SERVER_REC *server) +{ + g_return_if_fail(data != NULL); + if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); + + rawlog_close(server->rawlog); +} + void rawlog_init(void) { signal_rawlog = signal_get_uniq_id("rawlog"); @@ -166,9 +203,19 @@ void rawlog_init(void) read_settings(); signal_add("setup changed", (SIGNAL_FUNC) read_settings); + + command_bind("rawlog", NULL, (SIGNAL_FUNC) cmd_rawlog); + command_bind("rawlog save", NULL, (SIGNAL_FUNC) cmd_rawlog_save); + command_bind("rawlog open", NULL, (SIGNAL_FUNC) cmd_rawlog_open); + command_bind("rawlog close", NULL, (SIGNAL_FUNC) cmd_rawlog_close); } void rawlog_deinit(void) { signal_remove("setup changed", (SIGNAL_FUNC) read_settings); + + command_unbind("rawlog", (SIGNAL_FUNC) cmd_rawlog); + command_unbind("rawlog save", (SIGNAL_FUNC) cmd_rawlog_save); + command_unbind("rawlog open", (SIGNAL_FUNC) cmd_rawlog_open); + command_unbind("rawlog close", (SIGNAL_FUNC) cmd_rawlog_close); } diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index 8e6ec57b..27363e53 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -236,8 +236,11 @@ static void cmd_channel(const char *data, SERVER_REC *server, WI_ITEM_REC *item) { if (*data == '\0') cmd_channel_list_joined(); - else + else if (server_ischannel(server, data)) { + signal_emit("command join", 3, data, server, item); + } else { command_runsub("channel", data, server, item); + } } /* SYNTAX: CHANNEL ADD [-auto | -noauto] [-bots <masks>] [-botcmd <command>] diff --git a/src/fe-common/core/fe-core-commands.c b/src/fe-common/core/fe-core-commands.c index 87515f4d..dc1f121c 100644 --- a/src/fe-common/core/fe-core-commands.c +++ b/src/fe-common/core/fe-core-commands.c @@ -45,6 +45,7 @@ static int ret_texts[] = { TXT_NOT_JOINED, TXT_CHAN_NOT_FOUND, TXT_CHAN_NOT_SYNCED, + TXT_ILLEGAL_PROTO, TXT_NOT_GOOD_IDEA }; @@ -145,6 +146,43 @@ static void cmd_beep(void) signal_emit("beep", 0); } +static void cmd_nick(const char *data, SERVER_REC *server) +{ + g_return_if_fail(data != NULL); + + if (*data != '\0') return; + if (server == NULL || !server->connected) + cmd_return_error(CMDERR_NOT_CONNECTED); + + /* display current nick */ + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_YOUR_NICK, server->nick); + signal_stop(); +} + +static void cmd_join(const char *data, SERVER_REC *server) +{ + GHashTable *optlist; + char *channels; + void *free_arg; + + g_return_if_fail(data != NULL); + + if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | + PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_GETREST, + "join", &optlist, &channels)) + return; + + server = cmd_options_get_server("join", optlist, server); + if (g_hash_table_lookup(optlist, "invite") && + server != NULL && server->last_invite == NULL) { + /* ..all this trouble just to print this error message */ + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_NOT_INVITED); + signal_stop(); + } + + cmd_params_free(free_arg); +} + static void sig_stop(void) { signal_stop(); @@ -277,6 +315,8 @@ void fe_core_commands_init(void) command_bind("version", NULL, (SIGNAL_FUNC) cmd_version); command_bind("cat", NULL, (SIGNAL_FUNC) cmd_cat); command_bind("beep", NULL, (SIGNAL_FUNC) cmd_beep); + command_bind_first("nick", NULL, (SIGNAL_FUNC) cmd_nick); + command_bind_first("join", NULL, (SIGNAL_FUNC) cmd_join); signal_add("send command", (SIGNAL_FUNC) event_command); signal_add_last("send command", (SIGNAL_FUNC) event_command_last); @@ -293,6 +333,8 @@ void fe_core_commands_deinit(void) command_unbind("version", (SIGNAL_FUNC) cmd_version); command_unbind("cat", (SIGNAL_FUNC) cmd_cat); command_unbind("beep", (SIGNAL_FUNC) cmd_beep); + command_unbind("nick", (SIGNAL_FUNC) cmd_nick); + command_unbind("join", (SIGNAL_FUNC) cmd_join); signal_remove("send command", (SIGNAL_FUNC) event_command); signal_remove("send command", (SIGNAL_FUNC) event_command_last); diff --git a/src/fe-common/core/module-formats.c b/src/fe-common/core/module-formats.c index 9ddd9fbe..ee34e495 100644 --- a/src/fe-common/core/module-formats.c +++ b/src/fe-common/core/module-formats.c @@ -82,6 +82,7 @@ FORMAT_REC fecommon_core_formats[] = { { "setupserver_added", "Server {server $0} saved", 2, { 0, 1 } }, { "setupserver_removed", "Server {server $0} removed", 2, { 0, 1 } }, { "setupserver_not_found", "Server {server $0} not found", 2, { 0, 1 } }, + { "your_nick", "Your nickname is {nick $0}", 1, { 0 } }, /* ---- */ { NULL, "Channels", 0 }, @@ -92,6 +93,7 @@ FORMAT_REC fecommon_core_formats[] = { { "quit", "{channick $0} {chanhost $1} has quit {reason $2}", 4, { 0, 0, 0, 0 } }, { "quit_once", "{channel $3} {channick $0} {chanhost $1} has quit {reason $2}", 4, { 0, 0, 0, 0 } }, { "invite", "{nick $0} invites you to {channel $1}", 2, { 0, 0 } }, + { "not_invited", "You have not been invited to a channel!", 0 }, { "new_topic", "{nick $0} changed the topic of {channel $1} to: $2", 3, { 0, 0, 0 } }, { "topic_unset", "Topic unset by {nick $0} on {channel $1}", 2, { 0, 0 } }, { "your_nick_changed", "You're now known as {nick $1}", 3, { 0, 0, 0 } }, @@ -202,6 +204,7 @@ FORMAT_REC fecommon_core_formats[] = { { "not_joined", "Not joined to any channel", 0 }, { "chan_not_found", "Not joined to such channel", 0 }, { "chan_not_synced", "Channel not fully synchronized yet, try again after a while", 0 }, + { "illegal_proto", "Command isn't designed for the chat protocol of the active server", 0 }, { "not_good_idea", "Doing this is not a good idea. Add -YES if you really mean it", 0 }, /* ---- */ diff --git a/src/fe-common/core/module-formats.h b/src/fe-common/core/module-formats.h index 40ff4ef4..a6156069 100644 --- a/src/fe-common/core/module-formats.h +++ b/src/fe-common/core/module-formats.h @@ -59,6 +59,7 @@ enum { TXT_SETUPSERVER_ADDED, TXT_SETUPSERVER_REMOVED, TXT_SETUPSERVER_NOT_FOUND, + TXT_YOUR_NICK, TXT_FILL_3, @@ -68,6 +69,7 @@ enum { TXT_QUIT, TXT_QUIT_ONCE, TXT_INVITE, + TXT_NOT_INVITED, TXT_NEW_TOPIC, TXT_TOPIC_UNSET, TXT_YOUR_NICK_CHANGED, @@ -171,6 +173,7 @@ enum { TXT_NOT_JOINED, TXT_CHAN_NOT_FOUND, TXT_CHAN_NOT_SYNCED, + TXT_ILLEGAL_PROTO, TXT_NOT_GOOD_IDEA, TXT_FILL_11, diff --git a/src/fe-common/irc/Makefile.am b/src/fe-common/irc/Makefile.am index c3e5ce04..08d56540 100644 --- a/src/fe-common/irc/Makefile.am +++ b/src/fe-common/irc/Makefile.am @@ -29,6 +29,5 @@ libfe_common_irc_a_SOURCES = \ module-formats.c noinst_HEADERS = \ - fe-common-irc.h \ module.h \ module-formats.h diff --git a/src/fe-common/irc/dcc/module.h b/src/fe-common/irc/dcc/module.h index 966a37cb..58e65b25 100644 --- a/src/fe-common/irc/dcc/module.h +++ b/src/fe-common/irc/dcc/module.h @@ -1,3 +1,4 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "fe-common/irc/dcc" diff --git a/src/fe-common/irc/fe-ctcp.c b/src/fe-common/irc/fe-ctcp.c index 0af453b6..f8f9c554 100644 --- a/src/fe-common/irc/fe-ctcp.c +++ b/src/fe-common/irc/fe-ctcp.c @@ -23,7 +23,6 @@ #include "misc.h" #include "settings.h" -#include "irc.h" #include "levels.h" #include "servers.h" #include "channels.h" diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index a39ff18d..8f0c5da8 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -23,10 +23,9 @@ #include "signals.h" #include "misc.h" #include "settings.h" - -#include "irc.h" #include "levels.h" -#include "servers.h" + +#include "irc-servers.h" #include "irc-channels.h" #include "nicklist.h" diff --git a/src/fe-common/irc/fe-events.c b/src/fe-common/irc/fe-events.c index ccf5b0bc..97b505fb 100644 --- a/src/fe-common/irc/fe-events.c +++ b/src/fe-common/irc/fe-events.c @@ -24,7 +24,6 @@ #include "misc.h" #include "settings.h" -#include "irc.h" #include "levels.h" #include "servers.h" #include "servers-redirect.h" @@ -32,12 +31,14 @@ #include "queries.h" #include "ignore.h" -#include "fe-queries.h" +#include "irc-servers.h" #include "irc-channels.h" #include "irc-nicklist.h" #include "irc-masks.h" -#include "fe-windows.h" + #include "printtext.h" +#include "fe-queries.h" +#include "fe-windows.h" #include "completion.h" diff --git a/src/fe-common/irc/fe-irc-channels.c b/src/fe-common/irc/fe-irc-channels.c index ef9a79b8..853fe587 100644 --- a/src/fe-common/irc/fe-irc-channels.c +++ b/src/fe-common/irc/fe-irc-channels.c @@ -21,16 +21,13 @@ #include "module.h" #include "module-formats.h" #include "signals.h" -#include "commands.h" #include "levels.h" -#include "servers.h" -#include "irc.h" #include "channel-rejoin.h" #include "printtext.h" -static void sig_channel_rejoin(IRC_SERVER_REC *server, REJOIN_REC *rec) +static void sig_channel_rejoin(SERVER_REC *server, REJOIN_REC *rec) { g_return_if_fail(rec != NULL); @@ -38,22 +35,12 @@ static void sig_channel_rejoin(IRC_SERVER_REC *server, REJOIN_REC *rec) IRCTXT_CHANNEL_REJOIN, rec->channel); } -static void cmd_channel(const char *data, SERVER_REC *server) -{ - if (ischannel(*data)) { - signal_emit("command join", 2, data, server); - signal_stop(); - } -} - void fe_irc_channels_init(void) { signal_add("channel rejoin new", (SIGNAL_FUNC) sig_channel_rejoin); - command_bind("channel", NULL, (SIGNAL_FUNC) cmd_channel); } void fe_irc_channels_deinit(void) { signal_remove("channel rejoin new", (SIGNAL_FUNC) sig_channel_rejoin); - command_unbind("channel", (SIGNAL_FUNC) cmd_channel); } diff --git a/src/fe-common/irc/fe-irc-commands.c b/src/fe-common/irc/fe-irc-commands.c index f69e0500..dd100e39 100644 --- a/src/fe-common/irc/fe-irc-commands.c +++ b/src/fe-common/irc/fe-irc-commands.c @@ -21,16 +21,16 @@ #include "module.h" #include "module-formats.h" #include "signals.h" -#include "commands.h" #include "misc.h" #include "special-vars.h" #include "settings.h" #include "levels.h" -#include "irc.h" #include "servers.h" #include "mode-lists.h" #include "nicklist.h" +#include "irc-commands.h" +#include "irc-servers.h" #include "irc-channels.h" #include "irc-queries.h" @@ -56,8 +56,7 @@ static char *skip_target(char *target) /* SYNTAX: ME <message> */ static void cmd_me(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) { - g_return_if_fail(data != NULL); - + CMD_IRC_SERVER(server); if (!IS_IRC_ITEM(item)) return; @@ -76,9 +75,7 @@ static void cmd_action(const char *data, IRC_SERVER_REC *server) char *target, *text; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &text)) @@ -98,9 +95,7 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server) char *target, *msg; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &msg)) @@ -118,9 +113,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) char *target, *ctcpcmd, *ctcpdata; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata)) @@ -148,9 +141,7 @@ static void cmd_nctcp(const char *data, IRC_SERVER_REC *server) char *target, *text; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &text)) @@ -170,9 +161,7 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server, char *channame, *msg; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected || !IS_IRC_SERVER(server)) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &msg)) @@ -249,9 +238,7 @@ static void cmd_ban(const char *data, IRC_SERVER_REC *server, char *channel, *nicks; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, @@ -290,8 +277,7 @@ static void cmd_invitelist(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC IRC_CHANNEL_REC *channel, *cur_channel; GSList *tmp; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); cur_channel = IRC_CHANNEL(item); if (cur_channel == NULL) cmd_return_error(CMDERR_NOT_JOINED); @@ -317,28 +303,6 @@ static void cmd_invitelist(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC } } -static void cmd_join(const char *data, IRC_SERVER_REC *server) -{ - if ((*data == '\0' || g_strncasecmp(data, "-invite", 7) == 0) && - server != NULL && server->last_invite == NULL) { - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_NOT_INVITED); - signal_stop(); - } -} - -static void cmd_nick(const char *data, IRC_SERVER_REC *server) -{ - g_return_if_fail(data != NULL); - - if (*data != '\0') return; - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); - - /* display current nick */ - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_YOUR_NICK, server->nick); - signal_stop(); -} - /* SYNTAX: VER [<target>] */ static void cmd_ver(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) { @@ -346,8 +310,7 @@ static void cmd_ver(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (*data == '\0' && !IS_IRC_ITEM(item)) cmd_return_error(CMDERR_NOT_JOINED); @@ -465,21 +428,19 @@ static void cmd_sethost(const char *data, IRC_SERVER_REC *server) void fe_irc_commands_init(void) { - command_bind_last("me", NULL, (SIGNAL_FUNC) cmd_me); - command_bind_last("action", NULL, (SIGNAL_FUNC) cmd_action); - command_bind("notice", NULL, (SIGNAL_FUNC) cmd_notice); - command_bind("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp); - command_bind("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp); - command_bind("wall", NULL, (SIGNAL_FUNC) cmd_wall); - command_bind("ban", NULL, (SIGNAL_FUNC) cmd_ban); - command_bind("invitelist", NULL, (SIGNAL_FUNC) cmd_invitelist); - command_bind("join", NULL, (SIGNAL_FUNC) cmd_join); - command_bind("nick", NULL, (SIGNAL_FUNC) cmd_nick); - command_bind("ver", NULL, (SIGNAL_FUNC) cmd_ver); - command_bind("topic", NULL, (SIGNAL_FUNC) cmd_topic); - command_bind("ts", NULL, (SIGNAL_FUNC) cmd_ts); - command_bind("oper", NULL, (SIGNAL_FUNC) cmd_oper); - command_bind("sethost", NULL, (SIGNAL_FUNC) cmd_sethost); + command_bind_irc_last("me", NULL, (SIGNAL_FUNC) cmd_me); + command_bind_irc_last("action", NULL, (SIGNAL_FUNC) cmd_action); + command_bind_irc("notice", NULL, (SIGNAL_FUNC) cmd_notice); + command_bind_irc("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp); + command_bind_irc("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp); + command_bind_irc("wall", NULL, (SIGNAL_FUNC) cmd_wall); + command_bind_irc("ban", NULL, (SIGNAL_FUNC) cmd_ban); + command_bind_irc("invitelist", NULL, (SIGNAL_FUNC) cmd_invitelist); + command_bind_irc("ver", NULL, (SIGNAL_FUNC) cmd_ver); + command_bind_irc("topic", NULL, (SIGNAL_FUNC) cmd_topic); + command_bind_irc("ts", NULL, (SIGNAL_FUNC) cmd_ts); + command_bind_irc("oper", NULL, (SIGNAL_FUNC) cmd_oper); + command_bind_irc("sethost", NULL, (SIGNAL_FUNC) cmd_sethost); } void fe_irc_commands_deinit(void) @@ -492,8 +453,6 @@ void fe_irc_commands_deinit(void) command_unbind("wall", (SIGNAL_FUNC) cmd_wall); command_unbind("ban", (SIGNAL_FUNC) cmd_ban); command_unbind("invitelist", (SIGNAL_FUNC) cmd_invitelist); - command_unbind("join", (SIGNAL_FUNC) cmd_join); - command_unbind("nick", (SIGNAL_FUNC) cmd_nick); command_unbind("ver", (SIGNAL_FUNC) cmd_ver); command_unbind("topic", (SIGNAL_FUNC) cmd_topic); command_unbind("ts", (SIGNAL_FUNC) cmd_ts); diff --git a/src/fe-common/irc/fe-irc-messages.c b/src/fe-common/irc/fe-irc-messages.c index 8bd49bcb..4ee37ec7 100644 --- a/src/fe-common/irc/fe-irc-messages.c +++ b/src/fe-common/irc/fe-irc-messages.c @@ -25,7 +25,7 @@ #include "ignore.h" #include "settings.h" -#include "irc.h" +#include "irc-servers.h" #include "irc-channels.h" #include "irc-queries.h" diff --git a/src/fe-common/irc/fe-irc-queries.c b/src/fe-common/irc/fe-irc-queries.c index 58cc9a48..d2e4a5c5 100644 --- a/src/fe-common/irc/fe-irc-queries.c +++ b/src/fe-common/irc/fe-irc-queries.c @@ -24,8 +24,6 @@ #include "queries.h" #include "nicklist.h" -#include "irc.h" - static QUERY_REC *query_find_address(SERVER_REC *server, const char *address) { GSList *tmp; diff --git a/src/fe-common/irc/fe-ircnet.c b/src/fe-common/irc/fe-ircnet.c index 54a1b6da..3f84e98e 100644 --- a/src/fe-common/irc/fe-ircnet.c +++ b/src/fe-common/irc/fe-ircnet.c @@ -165,7 +165,7 @@ static void cmd_ircnet_remove(const char *data) } } -static void cmd_ircnet(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) +static void cmd_ircnet(const char *data, SERVER_REC *server, WI_ITEM_REC *item) { if (*data == '\0') cmd_ircnet_list(); diff --git a/src/fe-common/irc/fe-modes.c b/src/fe-common/irc/fe-modes.c index fbebe3a3..722db2e0 100644 --- a/src/fe-common/irc/fe-modes.c +++ b/src/fe-common/irc/fe-modes.c @@ -25,7 +25,6 @@ #include "misc.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" #include "irc-channels.h" #include "modes.h" diff --git a/src/fe-common/irc/fe-netjoin.c b/src/fe-common/irc/fe-netjoin.c index f0e8d93c..ef10c72a 100644 --- a/src/fe-common/irc/fe-netjoin.c +++ b/src/fe-common/irc/fe-netjoin.c @@ -25,7 +25,6 @@ #include "misc.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" #include "modes.h" #include "ignore.h" diff --git a/src/fe-common/irc/fe-netsplit.c b/src/fe-common/irc/fe-netsplit.c index 11c586ee..300d3e43 100644 --- a/src/fe-common/irc/fe-netsplit.c +++ b/src/fe-common/irc/fe-netsplit.c @@ -21,12 +21,11 @@ #include "module.h" #include "module-formats.h" #include "signals.h" -#include "commands.h" #include "levels.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" +#include "irc-commands.h" #include "ignore.h" #include "netsplit.h" @@ -322,8 +321,7 @@ static void cmd_netsplit(const char *data, IRC_SERVER_REC *server) { GSList *list; - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (server->split_servers == NULL) { printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, @@ -360,7 +358,7 @@ void fe_netsplit_init(void) read_settings(); signal_add("netsplit new", (SIGNAL_FUNC) sig_netsplit_servers); signal_add("setup changed", (SIGNAL_FUNC) read_settings); - command_bind("netsplit", NULL, (SIGNAL_FUNC) cmd_netsplit); + command_bind_irc("netsplit", NULL, (SIGNAL_FUNC) cmd_netsplit); } void fe_netsplit_deinit(void) diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index d3f39b72..d96838da 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -58,7 +58,6 @@ FORMAT_REC fecommon_irc_formats[] = { { "joinerror_duplicate", "Channel {channel $0} already exists - cannot create it", 1, { 0 } }, { "channel_rejoin", "Channel {channel $0} is temporarily unavailable, this is normally because of netsplits. Irssi will now automatically try to rejoin back to this channel until the join is successful. Use /RMREJOINS command if you wish to abort this.", 1, { 0 } }, { "inviting", "Inviting {nick $0} to {channel $1}", 2, { 0, 0 } }, - { "not_invited", "You have not been invited to a channel!", 0 }, { "channel_created", "Channel {channelhilight $0} created $1", 2, { 0, 0 } }, { "url", "Home page for {channelhilight $0}: $1", 2, { 0, 0 } }, { "topic", "Topic for {channelhilight $0}: $1", 2, { 0, 0 } }, @@ -87,7 +86,6 @@ FORMAT_REC fecommon_irc_formats[] = { { "unaway", "You are no longer marked as being away", 0 }, { "nick_away", "{nick $0} is away: $1", 2, { 0, 0 } }, { "no_such_nick", "{nick $0}: No such nick/channel", 1, { 0 } }, - { "your_nick", "Your nickname is {nick $0}", 1, { 0 } }, { "nick_in_use", "Nick {nick $0} is already in use", 1, { 0 } }, { "nick_unavailable", "Nick {nick $0} is temporarily unavailable", 1, { 0 } }, { "your_nick_owned", "Your nick is owned by {nick $3} {comment $1@$2}", 4, { 0, 0, 0, 0 } }, diff --git a/src/fe-common/irc/module-formats.h b/src/fe-common/irc/module-formats.h index 4cdba2d3..508efb51 100644 --- a/src/fe-common/irc/module-formats.h +++ b/src/fe-common/irc/module-formats.h @@ -35,7 +35,6 @@ enum { IRCTXT_JOINERROR_DUPLICATE, IRCTXT_CHANNEL_REJOIN, IRCTXT_INVITING, - IRCTXT_NOT_INVITED, IRCTXT_CHANNEL_CREATED, IRCTXT_CHANNEL_URL, IRCTXT_TOPIC, @@ -63,7 +62,6 @@ enum { IRCTXT_UNAWAY, IRCTXT_NICK_AWAY, IRCTXT_NO_SUCH_NICK, - IRCTXT_YOUR_NICK, IRCTXT_NICK_IN_USE, IRCTXT_NICK_UNAVAILABLE, IRCTXT_YOUR_NICK_OWNED, diff --git a/src/fe-common/irc/module.h b/src/fe-common/irc/module.h index e1cc2773..9583b81b 100644 --- a/src/fe-common/irc/module.h +++ b/src/fe-common/irc/module.h @@ -1,3 +1,4 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "fe-common/irc" diff --git a/src/fe-common/irc/notifylist/module.h b/src/fe-common/irc/notifylist/module.h index 00aa01e3..3c74a998 100644 --- a/src/fe-common/irc/notifylist/module.h +++ b/src/fe-common/irc/notifylist/module.h @@ -1,3 +1,4 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "fe-common/irc/notifylist" diff --git a/src/fe-text/Makefile.am b/src/fe-text/Makefile.am index 9c53498d..999b47bf 100644 --- a/src/fe-text/Makefile.am +++ b/src/fe-text/Makefile.am @@ -4,9 +4,7 @@ INCLUDES = \ $(GLIB_CFLAGS) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/src/core/ \ - -I$(top_srcdir)/src/irc/core/ \ -I$(top_srcdir)/src/fe-common/core/ \ - -I$(top_srcdir)/src/fe-common/irc/ \ $(CURSES_INCLUDEDIR) \ -DLOCALEDIR=\""$(datadir)/locale"\" diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index 311a2321..919802fc 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -29,7 +29,6 @@ #include "printtext.h" #include "fe-common-core.h" -#include "fe-common-irc.h" #include "themes.h" #include "term.h" @@ -54,6 +53,9 @@ void fe_perl_deinit(void); void irc_init(void); void irc_deinit(void); +void fe_common_irc_init(void); +void fe_common_irc_deinit(void); + void gui_expandos_init(void); void gui_expandos_deinit(void); diff --git a/src/irc/core/Makefile.am b/src/irc/core/Makefile.am index 40204183..149c317c 100644 --- a/src/irc/core/Makefile.am +++ b/src/irc/core/Makefile.am @@ -21,7 +21,6 @@ libirc_core_a_SOURCES = \ irc-masks.c \ irc-nicklist.c \ irc-queries.c \ - irc-rawlog.c \ irc-servers.c \ irc-servers-reconnect.c \ irc-servers-setup.c \ diff --git a/src/irc/core/bans.c b/src/irc/core/bans.c index 26768ca0..5583d63a 100644 --- a/src/irc/core/bans.c +++ b/src/irc/core/bans.c @@ -20,14 +20,15 @@ #include "module.h" #include "signals.h" -#include "commands.h" #include "misc.h" #include "settings.h" +#include "irc-servers.h" +#include "irc-channels.h" #include "irc-masks.h" +#include "irc-commands.h" #include "modes.h" #include "mode-lists.h" -#include "irc.h" #include "nicklist.h" #define BAN_TYPE_NORMAL (IRC_MASK_USER | IRC_MASK_DOMAIN) @@ -253,6 +254,8 @@ static void cmd_ban(const char *data, IRC_SERVER_REC *server, void *item) int ban_type; void *free_arg; + CMD_IRC_SERVER(server); + if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, "ban", &optlist, &ban)) @@ -285,12 +288,14 @@ static void cmd_unban(const char *data, IRC_SERVER_REC *server, void *item) GHashTable *optlist; char *ban; void *free_arg; - + + CMD_IRC_SERVER(server); + if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, "unban", &optlist, &ban)) return; - + ban = NULL; if (g_hash_table_lookup(optlist, "first") != NULL) ban = g_strdup(BAN_FIRST); @@ -326,8 +331,8 @@ void bans_init(void) default_ban_type_str = NULL; settings_add_str("misc", "ban_type", "normal"); - command_bind("ban", NULL, (SIGNAL_FUNC) cmd_ban); - command_bind("unban", NULL, (SIGNAL_FUNC) cmd_unban); + command_bind_irc("ban", NULL, (SIGNAL_FUNC) cmd_ban); + command_bind_irc("unban", NULL, (SIGNAL_FUNC) cmd_unban); command_set_options("ban", "normal user host domain +custom"); command_set_options("unban", "first last"); diff --git a/src/irc/core/bans.h b/src/irc/core/bans.h index 6f106f55..0b00f19d 100644 --- a/src/irc/core/bans.h +++ b/src/irc/core/bans.h @@ -1,8 +1,6 @@ #ifndef __BANS_H #define __BANS_H -#include "irc-channels.h" - void bans_init(void); void bans_deinit(void); diff --git a/src/irc/core/channel-events.c b/src/irc/core/channel-events.c index 92ea4d59..65fe3bf6 100644 --- a/src/irc/core/channel-events.c +++ b/src/irc/core/channel-events.c @@ -23,7 +23,7 @@ #include "misc.h" #include "channels-setup.h" -#include "irc.h" +#include "irc-servers.h" #include "irc-channels.h" static void event_cannot_join(IRC_SERVER_REC *server, const char *data) diff --git a/src/irc/core/channel-rejoin.c b/src/irc/core/channel-rejoin.c index e18da65e..174c1c4e 100644 --- a/src/irc/core/channel-rejoin.c +++ b/src/irc/core/channel-rejoin.c @@ -23,8 +23,9 @@ #include "signals.h" #include "misc.h" -#include "irc.h" +#include "irc-servers.h" #include "irc-channels.h" +#include "irc-commands.h" #include "channel-rejoin.h" #define REJOIN_TIMEOUT (1000*60*5) /* try to rejoin every 5 minutes */ @@ -241,8 +242,7 @@ static int sig_rejoin(void) static void cmd_rmrejoins(const char *data, IRC_SERVER_REC *server) { - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); while (server->rejoin_channels != NULL) rejoin_destroy(server, server->rejoin_channels->data); @@ -253,7 +253,7 @@ void channel_rejoin_init(void) rejoin_tag = g_timeout_add(REJOIN_TIMEOUT, (GSourceFunc) sig_rejoin, NULL); - command_bind("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins); + command_bind_irc("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins); signal_add_first("event 407", (SIGNAL_FUNC) event_duplicate_channel); signal_add_first("event 437", (SIGNAL_FUNC) event_target_unavailable); signal_add_first("channel joined", (SIGNAL_FUNC) sig_remove_rejoin); diff --git a/src/irc/core/channels-query.c b/src/irc/core/channels-query.c index 9dda5595..c8a29866 100644 --- a/src/irc/core/channels-query.c +++ b/src/irc/core/channels-query.c @@ -43,12 +43,11 @@ loop: #include "signals.h" #include "settings.h" -#include "channels.h" -#include "irc.h" #include "modes.h" #include "mode-lists.h" #include "nicklist.h" #include "irc-servers.h" +#include "irc-channels.h" #include "servers-redirect.h" enum { diff --git a/src/irc/core/ctcp.c b/src/irc/core/ctcp.c index 88261800..e062a735 100644 --- a/src/irc/core/ctcp.c +++ b/src/irc/core/ctcp.c @@ -25,7 +25,6 @@ #include "special-vars.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" #include "server-idle.h" #include "ignore.h" diff --git a/src/irc/core/irc-channels.c b/src/irc/core/irc-channels.c index f2109712..75741355 100644 --- a/src/irc/core/irc-channels.c +++ b/src/irc/core/irc-channels.c @@ -24,10 +24,10 @@ #include "levels.h" #include "channels-setup.h" -#include "irc.h" #include "bans.h" #include "modes.h" #include "mode-lists.h" +#include "irc-servers.h" #include "irc-channels.h" #include "irc-nicklist.h" #include "channel-rejoin.h" diff --git a/src/irc/core/irc-channels.h b/src/irc/core/irc-channels.h index 41826cb1..a00b0a49 100644 --- a/src/irc/core/irc-channels.h +++ b/src/irc/core/irc-channels.h @@ -3,7 +3,6 @@ #include "chat-protocols.h" #include "channels.h" -#include "irc-servers.h" /* Returns IRC_CHANNEL_REC if it's IRC channel, NULL if it isn't. */ #define IRC_CHANNEL(channel) \ @@ -13,7 +12,7 @@ (IRC_CHANNEL(channel) ? TRUE : FALSE) #define STRUCT_SERVER_REC IRC_SERVER_REC -typedef struct { +struct _IRC_CHANNEL_REC { #include "channel-rec.h" GSList *banlist; /* list of bans */ @@ -23,7 +22,7 @@ typedef struct { time_t massjoin_start; /* Massjoin start time */ int massjoins; /* Number of nicks waiting for massjoin signal.. */ int last_massjoins; /* Massjoins when last checked in timeout function */ -} IRC_CHANNEL_REC; +}; void irc_channels_init(void); void irc_channels_deinit(void); diff --git a/src/irc/core/irc-chatnets.h b/src/irc/core/irc-chatnets.h index 5404c0d2..b8d6fb9f 100644 --- a/src/irc/core/irc-chatnets.h +++ b/src/irc/core/irc-chatnets.h @@ -14,7 +14,7 @@ #define IS_IRCNET(ircnet) IS_IRC_CHATNET(ircnet) #define IRCNET(ircnet) IRC_CHATNET(ircnet) -typedef struct { +struct _IRC_CHATNET_REC { #include "chatnet-rec.h" int max_cmds_at_once; int cmd_queue_speed; @@ -23,7 +23,7 @@ typedef struct { /* max. number of kicks/msgs/mode/whois per command */ int max_kicks, max_msgs, max_modes, max_whois; -} IRC_CHATNET_REC; +}; void ircnet_create(IRC_CHATNET_REC *rec); diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index d3eefbbf..e8d3a043 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -19,7 +19,6 @@ */ #include "module.h" -#include "commands.h" #include "misc.h" #include "special-vars.h" #include "settings.h" @@ -31,7 +30,7 @@ #include "nicklist.h" #include "bans.h" -#include "irc.h" +#include "irc-commands.h" #include "irc-servers.h" #include "irc-channels.h" #include "irc-queries.h" @@ -65,9 +64,7 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server) char *target, *msg; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &msg)) return; @@ -85,9 +82,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) char *target, *ctcpcmd, *ctcpdata; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata)) return; @@ -109,9 +104,7 @@ static void cmd_nctcp(const char *data, IRC_SERVER_REC *server) char *target, *ctcpcmd, *ctcpdata; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata)) return; @@ -130,9 +123,7 @@ static void cmd_part(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item char *channame, *msg; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &msg)) return; @@ -155,9 +146,7 @@ static void cmd_kick(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item char *channame, *nicks, *reason; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &nicks, &reason)) @@ -179,9 +168,7 @@ static void cmd_topic(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *ite char *channame, *topic; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, @@ -201,9 +188,7 @@ static void cmd_invite(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *it char *nick, *channame; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2, &nick, &channame)) return; @@ -228,9 +213,7 @@ static void cmd_list(const char *data, IRC_SERVER_REC *server, char *str; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, "list", &optlist, &str)) @@ -255,9 +238,7 @@ static void cmd_who(const char *data, IRC_SERVER_REC *server, char *channel, *rest; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &channel, &rest)) return; @@ -288,9 +269,7 @@ static void cmd_names(const char *data, IRC_SERVER_REC *server, char *channel; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, "names", &optlist, &channel)) @@ -321,8 +300,7 @@ static void cmd_nick(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1, &nick)) return; @@ -392,9 +370,7 @@ static void cmd_whois(const char *data, IRC_SERVER_REC *server, void *free_arg; int free_nick; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS, "whois", &optlist, &qserver, &query)) @@ -480,9 +456,7 @@ static void cmd_whowas(const char *data, IRC_SERVER_REC *server) void *free_arg; int free_nick; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2, &nicks, &count)) return; @@ -506,9 +480,7 @@ static void cmd_ping(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item GTimeVal tv; char *str; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (*data == '\0' || strcmp(data, "*") == 0) { if (!IS_IRC_ITEM(item)) @@ -545,9 +517,7 @@ static void cmd_away(const char *data, IRC_SERVER_REC *server) char *reason; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, "away", &optlist, &reason)) return; @@ -560,23 +530,10 @@ static void cmd_away(const char *data, IRC_SERVER_REC *server) cmd_params_free(free_arg); } -/* SYNTAX: DEOP <nicks> */ -static void cmd_deop(const char *data, IRC_SERVER_REC *server) -{ - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); - - if (*data == '\0') - irc_send_cmdv(server, "MODE %s -o", server->nick); -} - /* SYNTAX: SCONNECT <new server> [[<port>] <existing server>] */ static void cmd_sconnect(const char *data, IRC_SERVER_REC *server) { - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); irc_send_cmdv(server, "CONNECT %s", data); @@ -585,9 +542,7 @@ static void cmd_sconnect(const char *data, IRC_SERVER_REC *server) /* SYNTAX: QUOTE <data> */ static void cmd_quote(const char *data, IRC_SERVER_REC *server) { - g_return_if_fail(data != NULL); - if (server == NULL || !IS_IRC_SERVER(server)) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); irc_send_cmd(server, data); } @@ -595,9 +550,7 @@ static void cmd_quote(const char *data, IRC_SERVER_REC *server) /* SYNTAX: RAWQUOTE <data> */ static void cmd_rawquote(const char *data, IRC_SERVER_REC *server) { - g_return_if_fail(data != NULL); - if (server == NULL || !IS_IRC_SERVER(server)) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); irc_send_cmd_full(server, data, FALSE, FALSE, TRUE); } @@ -615,9 +568,7 @@ static void cmd_wait(const char *data, IRC_SERVER_REC *server) void *free_arg; int n; - g_return_if_fail(data != NULL); - if (!IS_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_GETREST, @@ -652,9 +603,7 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item IRC_CHANNEL_REC *chanrec; GSList *tmp, *nicks; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &msg)) @@ -694,9 +643,7 @@ static void cmd_kickban(const char *data, IRC_SERVER_REC *server, char **nicklist, *spacenicks; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channel, &nicks, &reason)) @@ -784,7 +731,8 @@ static void cmd_knockout(const char *data, IRC_SERVER_REC *server, void *free_arg; int timeleft; - g_return_if_fail(data != NULL); + CMD_IRC_SERVER(server); + if (!IS_IRC_CHANNEL(channel)) cmd_return_error(CMDERR_NOT_JOINED); if (!channel->wholist) @@ -850,9 +798,7 @@ static void cmd_server_purge(const char *data, IRC_SERVER_REC *server) char *target; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 1, &target)) return; @@ -897,9 +843,7 @@ static void cmd_oper(const char *data, IRC_SERVER_REC *server) char *nick, *password; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); /* asking for password is handled by fe-common */ if (!cmd_get_params(data, &free_arg, 2, &nick, &password)) @@ -913,9 +857,7 @@ static void cmd_oper(const char *data, IRC_SERVER_REC *server) /* SYNTAX: UNSILENCE <nick!user@host> */ static void cmd_unsilence(const char *data, IRC_SERVER_REC *server) { - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); @@ -925,9 +867,7 @@ static void cmd_unsilence(const char *data, IRC_SERVER_REC *server) static void command_self(const char *data, IRC_SERVER_REC *server) { - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); irc_send_cmdv(server, *data == '\0' ? "%s" : "%s %s", current_command, data); } @@ -947,9 +887,7 @@ static void command_2self(const char *data, IRC_SERVER_REC *server) char *target, *text; void *free_arg; - g_return_if_fail(data != NULL); - if (!IS_IRC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &text)) return; @@ -1011,85 +949,84 @@ void irc_commands_init(void) knockout_tag = g_timeout_add(KNOCKOUT_TIMECHECK, (GSourceFunc) knockout_timeout, NULL); - command_bind("notice", NULL, (SIGNAL_FUNC) cmd_notice); - command_bind("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp); - command_bind("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp); - command_bind("part", NULL, (SIGNAL_FUNC) cmd_part); - command_bind("kick", NULL, (SIGNAL_FUNC) cmd_kick); - command_bind("topic", NULL, (SIGNAL_FUNC) cmd_topic); - command_bind("invite", NULL, (SIGNAL_FUNC) cmd_invite); - command_bind("list", NULL, (SIGNAL_FUNC) cmd_list); - command_bind("who", NULL, (SIGNAL_FUNC) cmd_who); - command_bind("names", NULL, (SIGNAL_FUNC) cmd_names); - command_bind("nick", NULL, (SIGNAL_FUNC) cmd_nick); + command_bind_irc("notice", NULL, (SIGNAL_FUNC) cmd_notice); + command_bind_irc("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp); + command_bind_irc("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp); + command_bind_irc("part", NULL, (SIGNAL_FUNC) cmd_part); + command_bind_irc("kick", NULL, (SIGNAL_FUNC) cmd_kick); + command_bind_irc("topic", NULL, (SIGNAL_FUNC) cmd_topic); + command_bind_irc("invite", NULL, (SIGNAL_FUNC) cmd_invite); + command_bind_irc("list", NULL, (SIGNAL_FUNC) cmd_list); + command_bind_irc("who", NULL, (SIGNAL_FUNC) cmd_who); + command_bind_irc("names", NULL, (SIGNAL_FUNC) cmd_names); + command_bind_irc("nick", NULL, (SIGNAL_FUNC) cmd_nick); /* SYNTAX: NOTE <command> [&<password>] [+|-<flags>] [<arguments>] */ - command_bind("note", NULL, (SIGNAL_FUNC) command_self); - command_bind("whois", NULL, (SIGNAL_FUNC) cmd_whois); - command_bind("whowas", NULL, (SIGNAL_FUNC) cmd_whowas); - command_bind("ping", NULL, (SIGNAL_FUNC) cmd_ping); + command_bind_irc("note", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("whois", NULL, (SIGNAL_FUNC) cmd_whois); + command_bind_irc("whowas", NULL, (SIGNAL_FUNC) cmd_whowas); + command_bind_irc("ping", NULL, (SIGNAL_FUNC) cmd_ping); /* SYNTAX: KILL <nick> <reason> */ - command_bind("kill", NULL, (SIGNAL_FUNC) command_2self); - command_bind("away", NULL, (SIGNAL_FUNC) cmd_away); + command_bind_irc("kill", NULL, (SIGNAL_FUNC) command_2self); + command_bind_irc("away", NULL, (SIGNAL_FUNC) cmd_away); /* SYNTAX: ISON <nicks> */ - command_bind("ison", NULL, (SIGNAL_FUNC) command_1self); + command_bind_irc("ison", NULL, (SIGNAL_FUNC) command_1self); /* SYNTAX: ADMIN [<server>|<nickname>] */ - command_bind("admin", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("admin", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: INFO [<server>] */ - command_bind("info", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("info", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: LINKS [[<server>] <mask>] */ - command_bind("links", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("links", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: LUSERS [<server mask> [<remote server>]] */ - command_bind("lusers", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("lusers", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: MAP */ - command_bind("map", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("map", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: MOTD [<server>|<nick>] */ - command_bind("motd", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("motd", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: REHASH */ - command_bind("rehash", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("rehash", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: STATS <type> [<server>] */ - command_bind("stats", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("stats", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: TIME [<server>|<nick>] */ - command_bind("time", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("time", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: TRACE [<server>|<nick>] */ - command_bind("trace", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("trace", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: VERSION [<server>|<nick>] */ - command_bind("version", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("version", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: SERVLIST [<server mask>] */ - command_bind("servlist", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("servlist", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: SILENCE [[+|-]<nick!user@host>] SILENCE [<nick>] */ - command_bind("silence", NULL, (SIGNAL_FUNC) command_self); - command_bind("unsilence", NULL, (SIGNAL_FUNC) cmd_unsilence); - command_bind("sconnect", NULL, (SIGNAL_FUNC) cmd_sconnect); + command_bind_irc("silence", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("unsilence", NULL, (SIGNAL_FUNC) cmd_unsilence); + command_bind_irc("sconnect", NULL, (SIGNAL_FUNC) cmd_sconnect); /* SYNTAX: SQUERY <service> [<commands>] */ - command_bind("squery", NULL, (SIGNAL_FUNC) command_2self); - command_bind("deop", NULL, (SIGNAL_FUNC) cmd_deop); + command_bind_irc("squery", NULL, (SIGNAL_FUNC) command_2self); /* SYNTAX: DIE */ - command_bind("die", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("die", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: HASH */ - command_bind("hash", NULL, (SIGNAL_FUNC) command_self); - command_bind("oper", NULL, (SIGNAL_FUNC) cmd_oper); + command_bind_irc("hash", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("oper", NULL, (SIGNAL_FUNC) cmd_oper); /* SYNTAX: RESTART */ - command_bind("restart", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("restart", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: RPING <server> */ - command_bind("rping", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("rping", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: SQUIT <server>|<mask> <reason> */ - command_bind("squit", NULL, (SIGNAL_FUNC) command_2self); + command_bind_irc("squit", NULL, (SIGNAL_FUNC) command_2self); /* SYNTAX: UPING <server> */ - command_bind("uping", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("uping", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: USERHOST <nicks> */ - command_bind("userhost", NULL, (SIGNAL_FUNC) command_self); - command_bind("quote", NULL, (SIGNAL_FUNC) cmd_quote); - command_bind("rawquote", NULL, (SIGNAL_FUNC) cmd_rawquote); - command_bind("wall", NULL, (SIGNAL_FUNC) cmd_wall); - command_bind("wait", NULL, (SIGNAL_FUNC) cmd_wait); + command_bind_irc("userhost", NULL, (SIGNAL_FUNC) command_self); + command_bind_irc("quote", NULL, (SIGNAL_FUNC) cmd_quote); + command_bind_irc("rawquote", NULL, (SIGNAL_FUNC) cmd_rawquote); + command_bind_irc("wall", NULL, (SIGNAL_FUNC) cmd_wall); + command_bind_irc("wait", NULL, (SIGNAL_FUNC) cmd_wait); /* SYNTAX: WALLOPS <message> */ - command_bind("wallops", NULL, (SIGNAL_FUNC) command_1self); + command_bind_irc("wallops", NULL, (SIGNAL_FUNC) command_1self); /* SYNTAX: WALLCHOPS <channel> <message> */ - command_bind("wallchops", NULL, (SIGNAL_FUNC) command_2self); - command_bind("kickban", NULL, (SIGNAL_FUNC) cmd_kickban); - command_bind("knockout", NULL, (SIGNAL_FUNC) cmd_knockout); - command_bind("server purge", NULL, (SIGNAL_FUNC) cmd_server_purge); + command_bind_irc("wallchops", NULL, (SIGNAL_FUNC) command_2self); + command_bind_irc("kickban", NULL, (SIGNAL_FUNC) cmd_kickban); + command_bind_irc("knockout", NULL, (SIGNAL_FUNC) cmd_knockout); + command_bind_irc("server purge", NULL, (SIGNAL_FUNC) cmd_server_purge); signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed); signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected); @@ -1144,7 +1081,6 @@ void irc_commands_deinit(void) command_unbind("unsilence", (SIGNAL_FUNC) cmd_unsilence); command_unbind("sconnect", (SIGNAL_FUNC) cmd_sconnect); command_unbind("squery", (SIGNAL_FUNC) command_2self); - command_unbind("deop", (SIGNAL_FUNC) cmd_deop); command_unbind("die", (SIGNAL_FUNC) command_self); command_unbind("hash", (SIGNAL_FUNC) command_self); command_unbind("oper", (SIGNAL_FUNC) cmd_oper); diff --git a/src/irc/core/irc-commands.h b/src/irc/core/irc-commands.h new file mode 100644 index 00000000..739bd443 --- /dev/null +++ b/src/irc/core/irc-commands.h @@ -0,0 +1,26 @@ +#ifndef __IRC_COMMANDS_H +#define __IRC_COMMANDS_H + +#include "commands.h" + +#define command_bind_irc(cmd, section, signal) \ + command_bind_proto(cmd, IRC_PROTOCOL, section, signal) +#define command_bind_irc_first(cmd, section, signal) \ + command_bind_proto_first(cmd, IRC_PROTOCOL, section, signal) +#define command_bind_irc_last(cmd, section, signal) \ + command_bind_proto_last(cmd, IRC_PROTOCOL, section, signal) + +/* Simply returns if server isn't for IRC protocol. Prints ERR_NOT_CONNECTED + error if there's no server or server isn't connected yet */ +#define CMD_IRC_SERVER(server) \ + G_STMT_START { \ + if (server != NULL && !IS_IRC_SERVER(server)) \ + return; \ + if (server == NULL || !(server)->connected) \ + cmd_return_error(CMDERR_NOT_CONNECTED); \ + } G_STMT_END + +void irc_commands_init(void); +void irc_commands_deinit(void); + +#endif diff --git a/src/irc/core/irc-core.c b/src/irc/core/irc-core.c index 607f36d7..8906efbe 100644 --- a/src/irc/core/irc-core.c +++ b/src/irc/core/irc-core.c @@ -30,15 +30,9 @@ #include "channels-setup.h" #include "ctcp.h" -#include "irc.h" +#include "irc-commands.h" #include "netsplit.h" -void irc_commands_init(void); -void irc_commands_deinit(void); - -void irc_rawlog_init(void); -void irc_rawlog_deinit(void); - void irc_expandos_init(void); void irc_expandos_deinit(void); @@ -116,7 +110,6 @@ void irc_core_init(void) irc_irc_init(); lag_init(); netsplit_init(); - irc_rawlog_init(); irc_expandos_init(); module_register("core", "irc"); @@ -127,7 +120,6 @@ void irc_core_deinit(void) signal_emit("chat protocol deinit", 1, chat_protocol_find("IRC")); irc_expandos_deinit(); - irc_rawlog_deinit(); netsplit_deinit(); lag_deinit(); irc_commands_deinit(); diff --git a/src/irc/core/irc-expandos.c b/src/irc/core/irc-expandos.c index 2825dfc9..c8ce9d97 100644 --- a/src/irc/core/irc-expandos.c +++ b/src/irc/core/irc-expandos.c @@ -23,7 +23,6 @@ #include "expandos.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" #include "channels.h" #include "nicklist.h" diff --git a/src/irc/core/irc-masks.c b/src/irc/core/irc-masks.c index f07ae60d..345b1b77 100644 --- a/src/irc/core/irc-masks.c +++ b/src/irc/core/irc-masks.c @@ -21,7 +21,6 @@ #include "module.h" #include "network.h" -#include "irc.h" #include "irc-masks.h" static char *get_domain_mask(char *host) diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 42dac71d..31b072ba 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -22,7 +22,7 @@ #include "signals.h" #include "misc.h" -#include "irc.h" +#include "irc-servers.h" #include "irc-channels.h" #include "irc-masks.h" #include "irc-nicklist.h" diff --git a/src/irc/core/irc-nicklist.h b/src/irc/core/irc-nicklist.h index 611589d2..7d0ae2f4 100644 --- a/src/irc/core/irc-nicklist.h +++ b/src/irc/core/irc-nicklist.h @@ -2,7 +2,6 @@ #define __IRC_NICKLIST_H #include "nicklist.h" -#include "irc-channels.h" /* Add new nick to list */ NICK_REC *irc_nicklist_insert(IRC_CHANNEL_REC *channel, const char *nick, diff --git a/src/irc/core/irc-queries.c b/src/irc/core/irc-queries.c index 87aed832..380b12ef 100644 --- a/src/irc/core/irc-queries.c +++ b/src/irc/core/irc-queries.c @@ -22,7 +22,7 @@ #include "signals.h" #include "misc.h" -#include "irc.h" +#include "irc-servers.h" #include "irc-queries.h" QUERY_REC *irc_query_create(const char *server_tag, diff --git a/src/irc/core/irc-queries.h b/src/irc/core/irc-queries.h index 5e791b1f..e95602c1 100644 --- a/src/irc/core/irc-queries.h +++ b/src/irc/core/irc-queries.h @@ -3,7 +3,6 @@ #include "chat-protocols.h" #include "queries.h" -#include "irc-servers.h" /* Returns IRC_QUERY_REC if it's IRC query, NULL if it isn't. */ #define IRC_QUERY(query) \ diff --git a/src/irc/core/irc-rawlog.c b/src/irc/core/irc-rawlog.c deleted file mode 100644 index a76fcf45..00000000 --- a/src/irc/core/irc-rawlog.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - irc-rawlog.c : irssi - - Copyright (C) 1999-2000 Timo Sirainen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include "module.h" -#include "rawlog.h" -#include "signals.h" -#include "misc.h" - -#include "commands.h" -#include "servers.h" - -#include "settings.h" - -static void cmd_rawlog(const char *data, SERVER_REC *server, void *item) -{ - command_runsub("rawlog", data, server, item); -} - -/* SYNTAX: RAWLOG SAVE <file> */ -static void cmd_rawlog_save(const char *data, SERVER_REC *server) -{ - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); - - if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); - rawlog_save(server->rawlog, data); -} - -/* SYNTAX: RAWLOG OPEN <file> */ -static void cmd_rawlog_open(const char *data, SERVER_REC *server) -{ - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); - - if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS); - rawlog_open(server->rawlog, data); -} - -/* SYNTAX: RAWLOG CLOSE */ -static void cmd_rawlog_close(const char *data, SERVER_REC *server) -{ - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); - - rawlog_close(server->rawlog); -} - -void irc_rawlog_init(void) -{ - command_bind("rawlog", NULL, (SIGNAL_FUNC) cmd_rawlog); - command_bind("rawlog save", NULL, (SIGNAL_FUNC) cmd_rawlog_save); - command_bind("rawlog open", NULL, (SIGNAL_FUNC) cmd_rawlog_open); - command_bind("rawlog close", NULL, (SIGNAL_FUNC) cmd_rawlog_close); -} - -void irc_rawlog_deinit(void) -{ - command_unbind("rawlog", (SIGNAL_FUNC) cmd_rawlog); - command_unbind("rawlog save", (SIGNAL_FUNC) cmd_rawlog_save); - command_unbind("rawlog open", (SIGNAL_FUNC) cmd_rawlog_open); - command_unbind("rawlog close", (SIGNAL_FUNC) cmd_rawlog_close); -} diff --git a/src/irc/core/irc-servers-reconnect.c b/src/irc/core/irc-servers-reconnect.c index 3dc9b414..26f40779 100644 --- a/src/irc/core/irc-servers-reconnect.c +++ b/src/irc/core/irc-servers-reconnect.c @@ -23,7 +23,6 @@ #include "network.h" #include "signals.h" -#include "irc.h" #include "modes.h" #include "irc-servers.h" diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 0dbb3468..5591e313 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -30,7 +30,6 @@ #include "channels.h" #include "queries.h" -#include "irc.h" #include "irc-servers-setup.h" #include "irc-servers.h" #include "channel-rejoin.h" diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index 9a4f0ea8..1add7cdd 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -20,7 +20,7 @@ /* all strings should be either NULL or dynamically allocated */ /* address and nick are mandatory, rest are optional */ -typedef struct { +struct _IRC_SERVER_CONNECT_REC { #include "server-connect-rec.h" char *usermode; @@ -31,10 +31,10 @@ typedef struct { int max_query_chans; int max_kicks, max_msgs, max_modes, max_whois; -} IRC_SERVER_CONNECT_REC; +}; #define STRUCT_SERVER_CONNECT_REC IRC_SERVER_CONNECT_REC -typedef struct { +struct _IRC_SERVER_REC { #include "server-rec.h" char *real_address; /* address the irc server gives */ @@ -87,7 +87,7 @@ typedef struct { channels go here if they're "temporarily unavailable" because of netsplits */ void *chanqueries; -} IRC_SERVER_REC; +}; IRC_SERVER_REC *irc_server_connect(IRC_SERVER_CONNECT_REC *conn); diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index bf41fbbc..a7e58bb6 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -26,7 +26,6 @@ #include "rawlog.h" #include "misc.h" -#include "irc.h" #include "irc-servers.h" #include "irc-channels.h" #include "servers-redirect.h" diff --git a/src/irc/core/irc.h b/src/irc/core/irc.h index 46051d9e..3ff3e249 100644 --- a/src/irc/core/irc.h +++ b/src/irc/core/irc.h @@ -1,7 +1,10 @@ #ifndef __IRC_H #define __IRC_H -#include "irc-servers.h" +typedef struct _IRC_CHATNET_REC IRC_CHATNET_REC; +typedef struct _IRC_SERVER_CONNECT_REC IRC_SERVER_CONNECT_REC; +typedef struct _IRC_SERVER_REC IRC_SERVER_REC; +typedef struct _IRC_CHANNEL_REC IRC_CHANNEL_REC; /* From ircd 2.9.5: none I line with ident @@ -26,6 +29,7 @@ (a) == '+') /* modeless */ #define IS_IRC_ITEM(rec) (IS_IRC_CHANNEL(rec) || IS_IRC_QUERY(rec)) +#define IRC_PROTOCOL (chat_protocol_lookup("IRC")) extern char *current_server_event; /* current server event being processed */ diff --git a/src/irc/core/lag.c b/src/irc/core/lag.c index 8b934dd7..d2c62813 100644 --- a/src/irc/core/lag.c +++ b/src/irc/core/lag.c @@ -23,7 +23,6 @@ #include "misc.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" typedef struct { diff --git a/src/irc/core/massjoin.c b/src/irc/core/massjoin.c index 13df8694..07ea8fbd 100644 --- a/src/irc/core/massjoin.c +++ b/src/irc/core/massjoin.c @@ -22,7 +22,6 @@ #include "signals.h" #include "settings.h" -#include "irc.h" #include "irc-servers.h" #include "irc-channels.h" #include "irc-nicklist.h" diff --git a/src/irc/core/mode-lists.c b/src/irc/core/mode-lists.c index 3f98b73b..71fba750 100644 --- a/src/irc/core/mode-lists.c +++ b/src/irc/core/mode-lists.c @@ -22,7 +22,8 @@ #include "misc.h" #include "signals.h" -#include "irc.h" +#include "irc-servers.h" +#include "irc-channels.h" #include "mode-lists.h" static void ban_free(GSList **list, BAN_REC *rec) diff --git a/src/irc/core/mode-lists.h b/src/irc/core/mode-lists.h index ef13ae3c..324b7752 100644 --- a/src/irc/core/mode-lists.h +++ b/src/irc/core/mode-lists.h @@ -1,8 +1,6 @@ #ifndef __MODE_LISTS_H #define __MODE_LISTS_H -#include "irc-channels.h" - typedef struct { char *ban; char *setby; diff --git a/src/irc/core/modes.c b/src/irc/core/modes.c index 8c102e9a..25b212c2 100644 --- a/src/irc/core/modes.c +++ b/src/irc/core/modes.c @@ -20,10 +20,11 @@ #include "module.h" #include "signals.h" -#include "commands.h" #include "settings.h" -#include "irc.h" +#include "irc-commands.h" +#include "irc-servers.h" +#include "irc-channels.h" #include "modes.h" #include "mode-lists.h" #include "nicklist.h" @@ -590,8 +591,7 @@ static void cmd_op(const char *data, IRC_SERVER_REC *server, { char *nicks; - if (!IS_IRC_CHANNEL(channel)) - return; + CMD_IRC_SERVER(server); nicks = get_nicks(channel, data, 0, -1); if (nicks != NULL && *nicks != '\0') @@ -605,8 +605,7 @@ static void cmd_deop(const char *data, IRC_SERVER_REC *server, { char *nicks; - if (!IS_IRC_CHANNEL(channel)) - return; + CMD_IRC_SERVER(server); nicks = get_nicks(channel, data, 1, -1); if (nicks != NULL && *nicks != '\0') @@ -620,8 +619,7 @@ static void cmd_voice(const char *data, IRC_SERVER_REC *server, { char *nicks; - if (!IS_IRC_CHANNEL(channel)) - return; + CMD_IRC_SERVER(server); nicks = get_nicks(channel, data, 0, 0); if (nicks != NULL && *nicks != '\0') @@ -635,8 +633,7 @@ static void cmd_devoice(const char *data, IRC_SERVER_REC *server, { char *nicks; - if (!IS_IRC_CHANNEL(channel)) - return; + CMD_IRC_SERVER(server); nicks = get_nicks(channel, data, -1, 1); if (nicks != NULL && *nicks != '\0') @@ -651,9 +648,7 @@ static void cmd_mode(const char *data, IRC_SERVER_REC *server, char *target, *mode; void *free_arg; - g_return_if_fail(data != NULL); - if (server == NULL || !server->connected || !IS_IRC_SERVER(server)) - cmd_return_error(CMDERR_NOT_CONNECTED); + CMD_IRC_SERVER(server); if (*data == '+' || *data == '-') { target = "*"; @@ -692,11 +687,11 @@ void modes_init(void) signal_add("event 381", (SIGNAL_FUNC) event_oper); signal_add("event mode", (SIGNAL_FUNC) event_mode); - command_bind("op", NULL, (SIGNAL_FUNC) cmd_op); - command_bind("deop", NULL, (SIGNAL_FUNC) cmd_deop); - command_bind("voice", NULL, (SIGNAL_FUNC) cmd_voice); - command_bind("devoice", NULL, (SIGNAL_FUNC) cmd_devoice); - command_bind("mode", NULL, (SIGNAL_FUNC) cmd_mode); + command_bind_irc("op", NULL, (SIGNAL_FUNC) cmd_op); + command_bind_irc("deop", NULL, (SIGNAL_FUNC) cmd_deop); + command_bind_irc("voice", NULL, (SIGNAL_FUNC) cmd_voice); + command_bind_irc("devoice", NULL, (SIGNAL_FUNC) cmd_devoice); + command_bind_irc("mode", NULL, (SIGNAL_FUNC) cmd_mode); } void modes_deinit(void) diff --git a/src/irc/core/modes.h b/src/irc/core/modes.h index 5db61fd3..7da90ab7 100644 --- a/src/irc/core/modes.h +++ b/src/irc/core/modes.h @@ -1,9 +1,6 @@ #ifndef __MODES_H #define __MODES_H -#include "irc-servers.h" -#include "irc-channels.h" - /* modes that have argument always */ #define HAS_MODE_ARG_ALWAYS(mode) \ ((mode) == 'b' || (mode) == 'e' || (mode) == 'I' || (mode) == 'k' || \ diff --git a/src/irc/core/module.h b/src/irc/core/module.h index a605302b..19c0b3cc 100644 --- a/src/irc/core/module.h +++ b/src/irc/core/module.h @@ -1,5 +1,4 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "irc/core" - -#define IRC_PROTOCOL (chat_protocol_lookup("IRC")) diff --git a/src/irc/core/server-idle.c b/src/irc/core/server-idle.c index dd85282b..9443fdf7 100644 --- a/src/irc/core/server-idle.c +++ b/src/irc/core/server-idle.c @@ -24,7 +24,6 @@ #include "irc-servers.h" #include "server-idle.h" #include "servers-redirect.h" -#include "irc.h" typedef struct { char *event; diff --git a/src/irc/core/server-idle.h b/src/irc/core/server-idle.h index 73761dae..8d89f8f5 100644 --- a/src/irc/core/server-idle.h +++ b/src/irc/core/server-idle.h @@ -1,8 +1,6 @@ #ifndef __SERVER_IDLE_H #define __SERVER_IDLE_H -#include "irc-servers.h" - /* Add new idle command to queue */ int server_idle_add(IRC_SERVER_REC *server, const char *cmd, const char *arg, int last, ...); diff --git a/src/irc/dcc/dcc-autoget.c b/src/irc/dcc/dcc-autoget.c index 4e1359a6..c80d86d2 100644 --- a/src/irc/dcc/dcc-autoget.c +++ b/src/irc/dcc/dcc-autoget.c @@ -22,6 +22,7 @@ #include "signals.h" #include "masks.h" #include "settings.h" +#include "servers.h" #include "dcc-get.h" diff --git a/src/irc/dcc/dcc-chat.c b/src/irc/dcc/dcc-chat.c index 9d921559..9451bb6e 100644 --- a/src/irc/dcc/dcc-chat.c +++ b/src/irc/dcc/dcc-chat.c @@ -28,10 +28,10 @@ #include "misc.h" #include "settings.h" -#include "masks.h" -#include "irc.h" -#include "servers-setup.h" +#include "irc-servers.h" #include "irc-queries.h" +#include "servers-setup.h" +#include "masks.h" #include "dcc-chat.h" @@ -199,7 +199,7 @@ static void cmd_msg(const char *data) signal_stop(); } -static void cmd_me(const char *data, IRC_SERVER_REC *server, QUERY_REC *item) +static void cmd_me(const char *data, SERVER_REC *server, QUERY_REC *item) { CHAT_DCC_REC *dcc; char *str; @@ -216,7 +216,7 @@ static void cmd_me(const char *data, IRC_SERVER_REC *server, QUERY_REC *item) signal_stop(); } -static void cmd_action(const char *data, IRC_SERVER_REC *server) +static void cmd_action(const char *data, SERVER_REC *server) { CHAT_DCC_REC *dcc; char *target, *text, *str; @@ -246,15 +246,13 @@ static void cmd_action(const char *data, IRC_SERVER_REC *server) signal_stop(); } -static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) +static void cmd_ctcp(const char *data, SERVER_REC *server) { CHAT_DCC_REC *dcc; char *target, *ctcpcmd, *ctcpdata, *str; void *free_arg; g_return_if_fail(data != NULL); - if (server == NULL || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata)) @@ -425,7 +423,7 @@ static void cmd_dcc_chat(const char *data, IRC_SERVER_REC *server) } /* start listening */ - if (server == NULL || !server->connected) + if (!IS_IRC_SERVER(server) || !server->connected) cmd_param_error(CMDERR_NOT_CONNECTED); handle = dcc_listen(net_sendbuffer_handle(server->handle), @@ -449,7 +447,7 @@ static void cmd_dcc_chat(const char *data, IRC_SERVER_REC *server) } /* SYNTAX: MIRCDCC ON|OFF */ -static void cmd_mircdcc(const char *data, IRC_SERVER_REC *server, +static void cmd_mircdcc(const char *data, SERVER_REC *server, QUERY_REC *item) { CHAT_DCC_REC *dcc; @@ -465,7 +463,7 @@ static void cmd_mircdcc(const char *data, IRC_SERVER_REC *server, /* DCC CLOSE CHAT <nick> - check only from chat_ids in open DCC chats, the default handler will check from DCC chat requests */ -static void cmd_dcc_close(char *data, IRC_SERVER_REC *server) +static void cmd_dcc_close(char *data, SERVER_REC *server) { GSList *tmp, *next; char *nick; @@ -488,8 +486,8 @@ static void cmd_dcc_close(char *data, IRC_SERVER_REC *server) if (IS_DCC_CHAT(dcc) && dcc->id != NULL && g_strcasecmp(dcc->id, nick) == 0) { found = TRUE; - if (!dcc_is_connected(dcc)) - dcc_reject(DCC(dcc), server); + if (!dcc_is_connected(dcc) && IS_IRC_SERVER(server)) + dcc_reject(DCC(dcc), IRC_SERVER(server)); else { /* don't send DCC REJECT after DCC chat is already open */ @@ -503,7 +501,7 @@ static void cmd_dcc_close(char *data, IRC_SERVER_REC *server) cmd_params_free(free_arg); } -static void cmd_whois(const char *data, IRC_SERVER_REC *server, +static void cmd_whois(const char *data, SERVER_REC *server, WI_ITEM_REC *item) { CHAT_DCC_REC *dcc; diff --git a/src/irc/dcc/dcc-get.c b/src/irc/dcc/dcc-get.c index 27f795dc..4afb59be 100644 --- a/src/irc/dcc/dcc-get.c +++ b/src/irc/dcc/dcc-get.c @@ -25,7 +25,9 @@ #include "misc.h" #include "settings.h" +#include "irc-servers.h" #include "servers-setup.h" + #include "dcc-get.h" static int dcc_file_create_mode; diff --git a/src/irc/dcc/dcc-send.c b/src/irc/dcc/dcc-send.c index 393ba935..4b5943ad 100644 --- a/src/irc/dcc/dcc-send.c +++ b/src/irc/dcc/dcc-send.c @@ -26,6 +26,8 @@ #include "misc.h" #include "settings.h" +#include "irc-servers.h" + #include "dcc-send.h" #include "dcc-chat.h" @@ -189,6 +191,9 @@ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, g_strcasecmp(target, chat->nick) != 0)) chat = NULL; + if (!IS_IRC_SERVER(server)) + server = NULL; + if ((server == NULL || !server->connected) && chat == NULL) cmd_param_error(CMDERR_NOT_CONNECTED); diff --git a/src/irc/dcc/dcc.c b/src/irc/dcc/dcc.c index d44c2d62..651e8678 100644 --- a/src/irc/dcc/dcc.c +++ b/src/irc/dcc/dcc.c @@ -26,7 +26,7 @@ #include "misc.h" #include "settings.h" -#include "irc.h" +#include "irc-servers.h" #include "dcc-chat.h" #include "dcc-get.h" diff --git a/src/irc/dcc/dcc.h b/src/irc/dcc/dcc.h index 31c945b1..57a0e2dc 100644 --- a/src/irc/dcc/dcc.h +++ b/src/irc/dcc/dcc.h @@ -3,7 +3,6 @@ #include "modules.h" #include "network.h" -#include "irc-servers.h" #define DCC(dcc) ((DCC_REC *) (dcc)) diff --git a/src/irc/dcc/module.h b/src/irc/dcc/module.h index 2557ed0f..8436945d 100644 --- a/src/irc/dcc/module.h +++ b/src/irc/dcc/module.h @@ -1,3 +1,4 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "irc/dcc" diff --git a/src/irc/flood/module.h b/src/irc/flood/module.h index 9abdbf41..fc7eceeb 100644 --- a/src/irc/flood/module.h +++ b/src/irc/flood/module.h @@ -1,4 +1,5 @@ #include "common.h" +#include "irc.h" typedef struct { /* Flood protection */ diff --git a/src/irc/notifylist/module.h b/src/irc/notifylist/module.h index ddffd9a1..546201f6 100644 --- a/src/irc/notifylist/module.h +++ b/src/irc/notifylist/module.h @@ -1,4 +1,5 @@ #include "common.h" +#include "irc.h" #define MODULE_NAME "irc/notifylist" |