summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/chat-commands.c12
-rw-r--r--src/core/commands.c48
-rw-r--r--src/core/commands.h16
-rw-r--r--src/core/rawlog.c47
-rw-r--r--src/fe-common/core/fe-channels.c5
-rw-r--r--src/fe-common/core/fe-core-commands.c42
-rw-r--r--src/fe-common/core/module-formats.c3
-rw-r--r--src/fe-common/core/module-formats.h3
-rw-r--r--src/fe-common/irc/Makefile.am1
-rw-r--r--src/fe-common/irc/dcc/module.h1
-rw-r--r--src/fe-common/irc/fe-ctcp.c1
-rw-r--r--src/fe-common/irc/fe-events-numeric.c5
-rw-r--r--src/fe-common/irc/fe-events.c7
-rw-r--r--src/fe-common/irc/fe-irc-channels.c15
-rw-r--r--src/fe-common/irc/fe-irc-commands.c89
-rw-r--r--src/fe-common/irc/fe-irc-messages.c2
-rw-r--r--src/fe-common/irc/fe-irc-queries.c2
-rw-r--r--src/fe-common/irc/fe-ircnet.c2
-rw-r--r--src/fe-common/irc/fe-modes.c1
-rw-r--r--src/fe-common/irc/fe-netjoin.c1
-rw-r--r--src/fe-common/irc/fe-netsplit.c8
-rw-r--r--src/fe-common/irc/module-formats.c2
-rw-r--r--src/fe-common/irc/module-formats.h2
-rw-r--r--src/fe-common/irc/module.h1
-rw-r--r--src/fe-common/irc/notifylist/module.h1
-rw-r--r--src/fe-text/Makefile.am2
-rw-r--r--src/fe-text/irssi.c4
-rw-r--r--src/irc/core/Makefile.am1
-rw-r--r--src/irc/core/bans.c17
-rw-r--r--src/irc/core/bans.h2
-rw-r--r--src/irc/core/channel-events.c2
-rw-r--r--src/irc/core/channel-rejoin.c8
-rw-r--r--src/irc/core/channels-query.c3
-rw-r--r--src/irc/core/ctcp.c1
-rw-r--r--src/irc/core/irc-channels.c2
-rw-r--r--src/irc/core/irc-channels.h5
-rw-r--r--src/irc/core/irc-chatnets.h4
-rw-r--r--src/irc/core/irc-commands.c224
-rw-r--r--src/irc/core/irc-commands.h26
-rw-r--r--src/irc/core/irc-core.c10
-rw-r--r--src/irc/core/irc-expandos.c1
-rw-r--r--src/irc/core/irc-masks.c1
-rw-r--r--src/irc/core/irc-nicklist.c2
-rw-r--r--src/irc/core/irc-nicklist.h1
-rw-r--r--src/irc/core/irc-queries.c2
-rw-r--r--src/irc/core/irc-queries.h1
-rw-r--r--src/irc/core/irc-rawlog.c79
-rw-r--r--src/irc/core/irc-servers-reconnect.c1
-rw-r--r--src/irc/core/irc-servers.c1
-rw-r--r--src/irc/core/irc-servers.h8
-rw-r--r--src/irc/core/irc.c1
-rw-r--r--src/irc/core/irc.h6
-rw-r--r--src/irc/core/lag.c1
-rw-r--r--src/irc/core/massjoin.c1
-rw-r--r--src/irc/core/mode-lists.c3
-rw-r--r--src/irc/core/mode-lists.h2
-rw-r--r--src/irc/core/modes.c31
-rw-r--r--src/irc/core/modes.h3
-rw-r--r--src/irc/core/module.h3
-rw-r--r--src/irc/core/server-idle.c1
-rw-r--r--src/irc/core/server-idle.h2
-rw-r--r--src/irc/dcc/dcc-autoget.c1
-rw-r--r--src/irc/dcc/dcc-chat.c26
-rw-r--r--src/irc/dcc/dcc-get.c2
-rw-r--r--src/irc/dcc/dcc-send.c5
-rw-r--r--src/irc/dcc/dcc.c2
-rw-r--r--src/irc/dcc/dcc.h1
-rw-r--r--src/irc/dcc/module.h1
-rw-r--r--src/irc/flood/module.h1
-rw-r--r--src/irc/notifylist/module.h1
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"