mirror of
https://github.com/irssi/irssi.git
synced 2026-08-09 20:00:23 +02:00
Changed option handling in /commands. Irssi will now complain about
unknown options and missing option arguments. Renamed /SERVER -add, -remove and -list to /SERVER ADD, REMOVE and LIST. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@365 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
ca4226cca6
commit
a5d31a195d
34 changed files with 949 additions and 576 deletions
|
|
@ -31,7 +31,7 @@
|
|||
#include "windows.h"
|
||||
|
||||
static const char *ret_texts[] = {
|
||||
NULL,
|
||||
NULL,
|
||||
"Not enough parameters given",
|
||||
"Not connected to IRC server yet",
|
||||
"Not joined to any channels yet",
|
||||
|
|
@ -230,15 +230,18 @@ static void cmd_version(char *data)
|
|||
|
||||
static void cmd_cat(const char *data)
|
||||
{
|
||||
char *params, *fname, *fposstr;
|
||||
char tmpbuf[1024], *str;
|
||||
LINEBUF_REC *buffer = NULL;
|
||||
char *fname, *fposstr;
|
||||
char tmpbuf[1024], *str;
|
||||
void *free_arg;
|
||||
int f, ret, recvlen, fpos;
|
||||
|
||||
params = cmd_get_params(data, 2, &fname, &fposstr);
|
||||
if (!cmd_get_params(data, &free_arg, 2, &fname, &fposstr))
|
||||
return;
|
||||
|
||||
fname = convert_home(fname);
|
||||
fpos = atoi(fposstr);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
|
||||
f = open(fname, O_RDONLY);
|
||||
g_free(fname);
|
||||
|
|
@ -301,15 +304,24 @@ static void event_default_command(const char *data, void *server, WI_ITEM_REC *i
|
|||
cmd_unknown(data, server, item);
|
||||
}
|
||||
|
||||
static void event_cmderror(gpointer errorp)
|
||||
static void event_cmderror(gpointer errorp, const char *arg)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = GPOINTER_TO_INT(errorp);
|
||||
if (error == CMDERR_ERRNO)
|
||||
switch (error) {
|
||||
case CMDERR_ERRNO:
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, g_strerror(errno));
|
||||
else
|
||||
break;
|
||||
case CMDERR_OPTION_UNKNOWN:
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown argument: %s", arg);
|
||||
break;
|
||||
case CMDERR_OPTION_ARG_MISSING:
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Missing required argument for: %s", arg);
|
||||
break;
|
||||
default:
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, ret_texts[error]);
|
||||
}
|
||||
}
|
||||
|
||||
void fe_core_commands_init(void)
|
||||
|
|
|
|||
|
|
@ -45,18 +45,24 @@ static void cmd_log_open(const char *data)
|
|||
{
|
||||
/* /LOG OPEN [-noopen] [-autoopen] [-targets <targets>] [-window]
|
||||
[-rotate hour|day|week|month] <fname> [<levels>] */
|
||||
char *params, *args, *targetarg, *rotatearg, *fname, *levels;
|
||||
GHashTable *optlist;
|
||||
char *targetarg, *rotatearg, *fname, *levels;
|
||||
void *free_arg;
|
||||
char window[MAX_INT_STRLEN];
|
||||
LOG_REC *log;
|
||||
int level, rotate;
|
||||
|
||||
args = "targets rotate";
|
||||
params = cmd_get_params(data, 5 | PARAM_FLAG_MULTIARGS | PARAM_FLAG_GETREST,
|
||||
&args, &targetarg, &rotatearg, &fname, &levels);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST,
|
||||
"log open", &optlist, &fname, &levels))
|
||||
return;
|
||||
|
||||
targetarg = g_hash_table_lookup(optlist, "targets");
|
||||
rotatearg = g_hash_table_lookup(optlist, "rotate");
|
||||
|
||||
if (*fname == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
rotate = LOG_ROTATE_NEVER;
|
||||
if (stristr(args, "-rotate")) {
|
||||
if (rotatearg != NULL) {
|
||||
rotate = log_str2rotate(rotatearg);
|
||||
if (rotate < 0) rotate = LOG_ROTATE_NEVER;
|
||||
}
|
||||
|
|
@ -64,7 +70,7 @@ static void cmd_log_open(const char *data)
|
|||
level = level2bits(levels);
|
||||
if (level == 0) level = MSGLEVEL_ALL;
|
||||
|
||||
if (stristr(args, "-window")) {
|
||||
if (g_hash_table_lookup(optlist, "window")) {
|
||||
/* log by window ref# */
|
||||
ltoa(window, active_win->refnum);
|
||||
targetarg = window;
|
||||
|
|
@ -72,12 +78,12 @@ static void cmd_log_open(const char *data)
|
|||
|
||||
log = log_create_rec(fname, level, targetarg);
|
||||
if (log != NULL) {
|
||||
if (stristr(args, "-autoopen"))
|
||||
if (g_hash_table_lookup(optlist, "autoopen"))
|
||||
log->autoopen = TRUE;
|
||||
log->rotate = rotate;
|
||||
log_update(log);
|
||||
|
||||
if (log->handle == -1 && stristr(args, "-noopen") == NULL) {
|
||||
if (log->handle == -1 && g_hash_table_lookup(optlist, "noopen") == NULL) {
|
||||
/* start logging */
|
||||
if (log_start_logging(log)) {
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
|
||||
|
|
@ -88,7 +94,7 @@ static void cmd_log_open(const char *data)
|
|||
}
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static LOG_REC *log_find_from_data(const char *data)
|
||||
|
|
@ -191,10 +197,12 @@ static void cmd_window_log(const char *data)
|
|||
{
|
||||
/* /WINDOW LOG ON|OFF|TOGGLE [<filename>] */
|
||||
LOG_REC *log;
|
||||
char *params, *set, *fname, window[MAX_INT_STRLEN];
|
||||
char *set, *fname, window[MAX_INT_STRLEN];
|
||||
void *free_arg;
|
||||
int open_log, close_log;
|
||||
|
||||
params = cmd_get_params(data, 2, &set, &fname);
|
||||
if (!cmd_get_params(data, &free_arg, 2, &set, &fname))
|
||||
return;
|
||||
|
||||
ltoa(window, active_win->refnum);
|
||||
log = log_find_item(window);
|
||||
|
|
@ -209,7 +217,7 @@ static void cmd_window_log(const char *data)
|
|||
close_log = log != NULL;
|
||||
} else {
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_NOT_TOGGLE);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -232,7 +240,7 @@ static void cmd_window_log(const char *data)
|
|||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_LOG_CLOSED, log->fname);
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
/* Create log file entry to window, but don't start logging */
|
||||
|
|
@ -440,6 +448,8 @@ void fe_log_init(void)
|
|||
signal_add("log create failed", (SIGNAL_FUNC) sig_log_create_failed);
|
||||
signal_add("awaylog show", (SIGNAL_FUNC) sig_awaylog_show);
|
||||
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
|
||||
|
||||
command_set_options("log open", "noopen autoopen -targets window -rotate");
|
||||
}
|
||||
|
||||
void fe_log_deinit(void)
|
||||
|
|
|
|||
|
|
@ -66,10 +66,12 @@ static void set_boolean(const char *key, const char *value)
|
|||
static void cmd_set(char *data)
|
||||
{
|
||||
GSList *sets, *tmp;
|
||||
char *params, *key, *value, *last_section;
|
||||
char *key, *value, *last_section;
|
||||
void *free_arg;
|
||||
int found;
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &key, &value);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &key, &value))
|
||||
return;
|
||||
|
||||
last_section = ""; found = 0;
|
||||
sets = settings_get_sorted();
|
||||
|
|
@ -110,15 +112,17 @@ static void cmd_set(char *data)
|
|||
if (!found)
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown setting %s", key);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_toggle(const char *data)
|
||||
{
|
||||
char *params, *key, *value;
|
||||
char *key, *value;
|
||||
void *free_arg;
|
||||
int type;
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &key, &value);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &key, &value))
|
||||
return;
|
||||
|
||||
type = settings_get_type(key);
|
||||
if (type == -1)
|
||||
|
|
@ -130,7 +134,7 @@ static void cmd_toggle(const char *data)
|
|||
set_print(settings_get_record(key));
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void show_aliases(const char *alias)
|
||||
|
|
@ -173,11 +177,14 @@ static void alias_remove(const char *alias)
|
|||
|
||||
static void cmd_alias(const char *data)
|
||||
{
|
||||
char *params, *alias, *value;
|
||||
char *alias, *value;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &alias, &value);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &alias, &value))
|
||||
return;
|
||||
|
||||
if (*alias == '-') {
|
||||
if (alias[1] != '\0') alias_remove(alias+1);
|
||||
} else if (*alias == '\0' || *value == '\0')
|
||||
|
|
@ -186,7 +193,7 @@ static void cmd_alias(const char *data)
|
|||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_ALIAS_ADDED, alias);
|
||||
iconfig_set_str("aliases", alias, value);
|
||||
}
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_unalias(const char *data)
|
||||
|
|
|
|||
|
|
@ -268,9 +268,11 @@ static void cmd_hilight_show(void)
|
|||
static void cmd_hilight(const char *data)
|
||||
{
|
||||
/* /HILIGHT [-nick | -regexp | -word] [-color <color>] [-level <level>] [-channels <channels>] <text> */
|
||||
char *params, *args, *colorarg, *levelarg, *chanarg, *text;
|
||||
char **channels;
|
||||
GHashTable *optlist;
|
||||
HILIGHT_REC *rec;
|
||||
char *colorarg, *levelarg, *chanarg, *text;
|
||||
char **channels;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
|
|
@ -279,12 +281,17 @@ static void cmd_hilight(const char *data)
|
|||
return;
|
||||
}
|
||||
|
||||
args = "color level channels";
|
||||
params = cmd_get_params(data, 5 | PARAM_FLAG_MULTIARGS | PARAM_FLAG_GETREST,
|
||||
&args, &colorarg, &levelarg, &chanarg, &text);
|
||||
if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS |
|
||||
PARAM_FLAG_GETREST, "hilight", &optlist, &text))
|
||||
return;
|
||||
|
||||
chanarg = g_hash_table_lookup(optlist, "channels");
|
||||
levelarg = g_hash_table_lookup(optlist, "level");
|
||||
colorarg = g_hash_table_lookup(optlist, "color");
|
||||
|
||||
if (*text == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
channels = *chanarg == '\0' ? NULL :
|
||||
channels = (chanarg == NULL || *chanarg == '\0') ? NULL :
|
||||
g_strsplit(replace_chars(chanarg, ',', ' '), " ", -1);
|
||||
|
||||
rec = hilight_find(text, channels);
|
||||
|
|
@ -302,17 +309,19 @@ static void cmd_hilight(const char *data)
|
|||
}
|
||||
|
||||
hilights = g_slist_append(hilights, rec);
|
||||
rec->nickmask = stristr(args, "-nick") != NULL;
|
||||
rec->fullword = stristr(args, "-word") != NULL;
|
||||
rec->regexp = stristr(args, "-regexp") != NULL;
|
||||
rec->nickmask = g_hash_table_lookup(optlist, "nick") != NULL;
|
||||
rec->fullword = g_hash_table_lookup(optlist, "word") != NULL;
|
||||
rec->regexp = g_hash_table_lookup(optlist, "regexp") != NULL;
|
||||
|
||||
rec->level = level2bits(replace_chars(levelarg, ',', ' '));
|
||||
if (*colorarg != '\0') rec->color = g_strdup(colorarg);
|
||||
rec->level = (levelarg == NULL || *levelarg == '\0') ? 0 :
|
||||
level2bits(replace_chars(levelarg, ',', ' '));
|
||||
if (colorarg != NULL && *colorarg != '\0')
|
||||
rec->color = g_strdup(colorarg);
|
||||
|
||||
hilight_print(g_slist_index(hilights, rec)+1, rec);
|
||||
|
||||
hilight_add_config(rec);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_dehilight(const char *data)
|
||||
|
|
@ -349,6 +358,8 @@ void hilight_text_init(void)
|
|||
signal_add("setup reread", (SIGNAL_FUNC) read_hilight_config);
|
||||
command_bind("hilight", NULL, (SIGNAL_FUNC) cmd_hilight);
|
||||
command_bind("dehilight", NULL, (SIGNAL_FUNC) cmd_dehilight);
|
||||
|
||||
command_set_options("hilight", "-color -level -channels nick word regexp");
|
||||
}
|
||||
|
||||
void hilight_text_deinit(void)
|
||||
|
|
|
|||
|
|
@ -348,17 +348,21 @@ static void theme_show(THEME_SEARCH_REC *rec, const char *key, const char *value
|
|||
|
||||
static void cmd_format(const char *data)
|
||||
{
|
||||
char *params, *module, *key, *value;
|
||||
GSList *tmp, *modules;
|
||||
char *module, *key, *value;
|
||||
void *free_arg;
|
||||
|
||||
/* /FORMAT [<module>] [<key> [<value>]] */
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &module, &key, &value);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST,
|
||||
&module, &key, &value))
|
||||
return;
|
||||
|
||||
modules = get_sorted_modules();
|
||||
if (*module != '\0' && theme_search(modules, module) == NULL) {
|
||||
/* first argument isn't module.. */
|
||||
g_free(params);
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &key, &value);
|
||||
cmd_params_free(free_arg);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &key, &value))
|
||||
return;
|
||||
module = "";
|
||||
}
|
||||
|
||||
|
|
@ -374,7 +378,7 @@ static void cmd_format(const char *data)
|
|||
g_slist_foreach(modules, (GFunc) g_free, NULL);
|
||||
g_slist_free(modules);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void module_save(const char *module, MODULE_THEME_REC *rec, CONFIG_NODE *fnode)
|
||||
|
|
|
|||
|
|
@ -231,24 +231,28 @@ static void dcc_error_close_not_found(const char *type, const char *nick, const
|
|||
|
||||
static void dcc_unknown_ctcp(const char *data, const char *sender)
|
||||
{
|
||||
char *params, *type, *args;
|
||||
char *type, *args;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &type, &args);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &type, &args))
|
||||
return;
|
||||
printformat(NULL, NULL, MSGLEVEL_DCC, IRCTXT_DCC_UNKNOWN_CTCP, type, sender, args);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void dcc_unknown_reply(const char *data, const char *sender)
|
||||
{
|
||||
char *params, *type, *args;
|
||||
char *type, *args;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &type, &args);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &type, &args))
|
||||
return;
|
||||
printformat(NULL, NULL, MSGLEVEL_DCC, IRCTXT_DCC_UNKNOWN_REPLY, type, sender, args);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void sig_dcc_destroyed(DCC_REC *dcc)
|
||||
|
|
@ -288,7 +292,8 @@ static void sig_query_destroyed(QUERY_REC *query)
|
|||
static void cmd_msg(const char *data)
|
||||
{
|
||||
DCC_REC *dcc;
|
||||
char *params, *text, *target;
|
||||
char *text, *target;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
|
|
@ -297,7 +302,8 @@ static void cmd_msg(const char *data)
|
|||
return;
|
||||
}
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &text);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &text))
|
||||
return;
|
||||
|
||||
dcc = dcc_find_item(DCC_TYPE_CHAT, target+1, NULL);
|
||||
if (dcc == NULL) {
|
||||
|
|
@ -309,7 +315,7 @@ static void cmd_msg(const char *data)
|
|||
IRCTXT_OWN_DCC, dcc->mynick, text);
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_me(const char *data, SERVER_REC *server, WI_IRC_REC *item)
|
||||
|
|
@ -327,8 +333,9 @@ static void cmd_me(const char *data, SERVER_REC *server, WI_IRC_REC *item)
|
|||
|
||||
static void cmd_action(const char *data, SERVER_REC *server, WI_IRC_REC *item)
|
||||
{
|
||||
char *params, *target, *text;
|
||||
DCC_REC *dcc;
|
||||
char *target, *text;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
|
|
@ -337,7 +344,8 @@ static void cmd_action(const char *data, SERVER_REC *server, WI_IRC_REC *item)
|
|||
return;
|
||||
}
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &text);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &text))
|
||||
return;
|
||||
if (*target == '\0' || *text == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
dcc = dcc_find_item(DCC_TYPE_CHAT, target+1, NULL);
|
||||
|
|
@ -348,23 +356,25 @@ static void cmd_action(const char *data, SERVER_REC *server, WI_IRC_REC *item)
|
|||
printformat(NULL, target, MSGLEVEL_DCC,
|
||||
IRCTXT_OWN_DCC_ME, dcc->mynick, text);
|
||||
}
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_ctcp(const char *data, SERVER_REC *server)
|
||||
{
|
||||
char *params, *target, *ctcpcmd, *ctcpdata;
|
||||
DCC_REC *dcc;
|
||||
char *target, *ctcpcmd, *ctcpdata;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata))
|
||||
return;
|
||||
if (*target == '\0' || *ctcpcmd == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (*target != '=') {
|
||||
/* handle only DCC CTCPs */
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -378,7 +388,7 @@ static void cmd_ctcp(const char *data, SERVER_REC *server)
|
|||
target, ctcpcmd, ctcpdata);
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_dcc_list(const char *data)
|
||||
|
|
|
|||
|
|
@ -192,12 +192,17 @@ static void cmd_channel(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *i
|
|||
|
||||
static void cmd_channel_add(const char *data)
|
||||
{
|
||||
char *params, *args, *botarg, *botcmdarg, *ircnet, *channel, *password;
|
||||
GHashTable *optlist;
|
||||
SETUP_CHANNEL_REC *rec;
|
||||
char *botarg, *botcmdarg, *ircnet, *channel, *password;
|
||||
void *free_arg;
|
||||
|
||||
args = "bots botcmd";
|
||||
params = cmd_get_params(data, 6 | PARAM_FLAG_MULTIARGS, &args,
|
||||
&botarg, &botcmdarg, &channel, &ircnet, &password);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_OPTIONS,
|
||||
"channel add", &optlist, &channel, &ircnet, &password))
|
||||
return;
|
||||
|
||||
botarg = g_hash_table_lookup(optlist, "bots");
|
||||
botcmdarg = g_hash_table_lookup(optlist, "botcmd");
|
||||
|
||||
if (*ircnet == '\0' || *channel == '\0')
|
||||
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
|
@ -207,27 +212,29 @@ static void cmd_channel_add(const char *data)
|
|||
rec->name = g_strdup(channel);
|
||||
rec->ircnet = g_strdup(ircnet);
|
||||
} else {
|
||||
if (stristr(args, "-bots")) g_free_and_null(rec->botmasks);
|
||||
if (stristr(args, "-botcmd")) g_free_and_null(rec->autosendcmd);
|
||||
if (g_hash_table_lookup(optlist, "bots")) g_free_and_null(rec->botmasks);
|
||||
if (g_hash_table_lookup(optlist, "botcmd")) g_free_and_null(rec->autosendcmd);
|
||||
if (*password != '\0') g_free_and_null(rec->password);
|
||||
}
|
||||
if (stristr(args, "-auto")) rec->autojoin = TRUE;
|
||||
if (stristr(args, "-noauto")) rec->autojoin = FALSE;
|
||||
if (*botarg != '\0') rec->botmasks = g_strdup(botarg);
|
||||
if (*botcmdarg != '\0') rec->autosendcmd = g_strdup(botcmdarg);
|
||||
if (g_hash_table_lookup(optlist, "auto")) rec->autojoin = TRUE;
|
||||
if (g_hash_table_lookup(optlist, "noauto")) rec->autojoin = FALSE;
|
||||
if (botarg != NULL && *botarg != '\0') rec->botmasks = g_strdup(botarg);
|
||||
if (botcmdarg != NULL && *botcmdarg != '\0') rec->autosendcmd = g_strdup(botcmdarg);
|
||||
if (*password != '\0' && strcmp(password, "-") != 0) rec->password = g_strdup(password);
|
||||
channels_setup_create(rec);
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_CHANSETUP_ADDED, channel, ircnet);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_channel_remove(const char *data)
|
||||
{
|
||||
char *params, *ircnet, *channel;
|
||||
SETUP_CHANNEL_REC *rec;
|
||||
char *ircnet, *channel;
|
||||
void *free_arg;
|
||||
|
||||
params = cmd_get_params(data, 2, &channel, &ircnet);
|
||||
if (!cmd_get_params(data, &free_arg, 2, &channel, &ircnet))
|
||||
return;
|
||||
if (*ircnet == '\0' || *channel == '\0')
|
||||
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
|
|
@ -238,7 +245,7 @@ static void cmd_channel_remove(const char *data)
|
|||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_CHANSETUP_REMOVED, channel, ircnet);
|
||||
channels_setup_destroy(rec);
|
||||
}
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
void fe_channels_init(void)
|
||||
|
|
@ -257,6 +264,8 @@ void fe_channels_init(void)
|
|||
command_bind("channel add", NULL, (SIGNAL_FUNC) cmd_channel_add);
|
||||
command_bind("channel remove", NULL, (SIGNAL_FUNC) cmd_channel_remove);
|
||||
command_bind("channel list", NULL, (SIGNAL_FUNC) cmd_channel_list);
|
||||
|
||||
command_set_options("channel add", "auto noauto -bots -botcmd");
|
||||
}
|
||||
|
||||
void fe_channels_deinit(void)
|
||||
|
|
|
|||
|
|
@ -137,14 +137,16 @@ static void cmd_ignore_show(void)
|
|||
static void cmd_ignore(const char *data)
|
||||
{
|
||||
/* /IGNORE [-regexp | -word] [-pattern <pattern>] [-except]
|
||||
[-channels <channel>] <mask> <levels>
|
||||
[-replies] [-channels <channel>] <mask> <levels>
|
||||
OR
|
||||
|
||||
/IGNORE [-regexp | -word] [-pattern <pattern>] [-except]
|
||||
/IGNORE [-regexp | -word] [-pattern <pattern>] [-except] [-replies]
|
||||
<channels> <levels> */
|
||||
char *params, *args, *patternarg, *chanarg, *mask, *levels, *key;
|
||||
char **channels;
|
||||
GHashTable *optlist;
|
||||
IGNORE_REC *rec;
|
||||
char *patternarg, *chanarg, *mask, *levels, *key;
|
||||
char **channels;
|
||||
void *free_arg;
|
||||
int new_ignore;
|
||||
|
||||
if (*data == '\0') {
|
||||
|
|
@ -152,16 +154,20 @@ static void cmd_ignore(const char *data)
|
|||
return;
|
||||
}
|
||||
|
||||
args = "pattern channels";
|
||||
params = cmd_get_params(data, 5 | PARAM_FLAG_MULTIARGS | PARAM_FLAG_GETREST,
|
||||
&args, &patternarg, &chanarg, &mask, &levels);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST,
|
||||
"ignore", &optlist, &mask, &levels))
|
||||
return;
|
||||
|
||||
patternarg = g_hash_table_lookup(optlist, "pattern");
|
||||
chanarg = g_hash_table_lookup(optlist, "channels");
|
||||
|
||||
if (*levels == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (ischannel(*mask)) {
|
||||
chanarg = mask;
|
||||
mask = "";
|
||||
}
|
||||
channels = *chanarg == '\0' ? NULL :
|
||||
channels = (chanarg == NULL || *chanarg == '\0') ? NULL :
|
||||
g_strsplit(replace_chars(chanarg, ',', ' '), " ", -1);
|
||||
|
||||
rec = ignore_find(NULL, mask, channels);
|
||||
|
|
@ -177,16 +183,17 @@ static void cmd_ignore(const char *data)
|
|||
g_strfreev(channels);
|
||||
}
|
||||
|
||||
if (stristr(args, "-except") != NULL) {
|
||||
if (g_hash_table_lookup(optlist, "except") != NULL) {
|
||||
rec->except_level = combine_level(rec->except_level, levels);
|
||||
} else {
|
||||
ignore_split_levels(levels, &rec->level, &rec->except_level);
|
||||
}
|
||||
|
||||
rec->pattern = *patternarg == '\0' ? NULL : g_strdup(patternarg);
|
||||
rec->regexp = stristr(args, "-regexp") != NULL;
|
||||
rec->fullword = stristr(args, "-word") != NULL;
|
||||
rec->replies = stristr(args, "-replies") != NULL;
|
||||
rec->pattern = (patternarg == NULL || *patternarg == '\0') ?
|
||||
NULL : g_strdup(patternarg);
|
||||
rec->regexp = g_hash_table_lookup(optlist, "regexp") != NULL;
|
||||
rec->fullword = g_hash_table_lookup(optlist, "word") != NULL;
|
||||
rec->replies = g_hash_table_lookup(optlist, "replies") != NULL;
|
||||
|
||||
if (rec->level == 0 && rec->except_level == 0) {
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_UNIGNORED,
|
||||
|
|
@ -204,7 +211,7 @@ static void cmd_ignore(const char *data)
|
|||
else
|
||||
ignore_update_rec(rec);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_unignore(const char *data)
|
||||
|
|
@ -242,6 +249,8 @@ void fe_ignore_init(void)
|
|||
{
|
||||
command_bind("ignore", NULL, (SIGNAL_FUNC) cmd_ignore);
|
||||
command_bind("unignore", NULL, (SIGNAL_FUNC) cmd_unignore);
|
||||
|
||||
command_set_options("ignore", "regexp word except replies -pattern -channels");
|
||||
}
|
||||
|
||||
void fe_ignore_deinit(void)
|
||||
|
|
|
|||
|
|
@ -93,18 +93,20 @@ static void cmd_msg(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
|
|||
WINDOW_REC *window;
|
||||
CHANNEL_REC *channel;
|
||||
NICK_REC *nickrec;
|
||||
char *params, *target, *msg, *nickmode, *freestr, *newtarget;
|
||||
char *target, *msg, *nickmode, *freestr, *newtarget;
|
||||
void *free_arg;
|
||||
int free_ret;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &msg))
|
||||
return;
|
||||
if (*target == '\0' || *msg == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (*target == '=')
|
||||
{
|
||||
/* dcc msg - handled in fe-dcc.c */
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -119,7 +121,7 @@ static void cmd_msg(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
|
|||
if (newtarget == NULL) {
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, *target == ',' ?
|
||||
IRCTXT_NO_MSGS_GOT : IRCTXT_NO_MSGS_SENT);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
signal_stop();
|
||||
return;
|
||||
}
|
||||
|
|
@ -160,7 +162,7 @@ static void cmd_msg(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
|
|||
}
|
||||
g_free_not_null(freestr);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_me(gchar *data, IRC_SERVER_REC *server, WI_IRC_REC *item)
|
||||
|
|
@ -180,27 +182,31 @@ static void cmd_me(gchar *data, IRC_SERVER_REC *server, WI_IRC_REC *item)
|
|||
|
||||
static void cmd_action(const char *data, IRC_SERVER_REC *server)
|
||||
{
|
||||
char *params, *target, *text;
|
||||
char *target, *text;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &text);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &text))
|
||||
return;
|
||||
if (*target == '\0' || *text == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
printformat(server, target, MSGLEVEL_ACTIONS, IRCTXT_OWN_ME, server->nick, text);
|
||||
irc_send_cmdv(server, "PRIVMSG %s :\001ACTION %s\001", target, text);
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_notice(gchar *data, IRC_SERVER_REC *server)
|
||||
{
|
||||
char *params, *target, *msg;
|
||||
char *target, *msg;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &msg))
|
||||
return;
|
||||
if (*target == '\0' || *msg == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (*target == '@' && ischannel(target[1]))
|
||||
|
|
@ -209,17 +215,19 @@ static void cmd_notice(gchar *data, IRC_SERVER_REC *server)
|
|||
printformat(server, target, MSGLEVEL_NOTICES | MSGLEVEL_NOHILIGHT,
|
||||
IRCTXT_OWN_NOTICE, target, msg);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_ctcp(const char *data, IRC_SERVER_REC *server)
|
||||
{
|
||||
char *params, *target, *ctcpcmd, *ctcpdata;
|
||||
char *target, *ctcpcmd, *ctcpdata;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata))
|
||||
return;
|
||||
if (*target == '\0' || *ctcpcmd == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (*target == '@' && ischannel(target[1]))
|
||||
|
|
@ -228,17 +236,19 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server)
|
|||
g_strup(ctcpcmd);
|
||||
printformat(server, target, MSGLEVEL_CTCPS, IRCTXT_OWN_CTCP, target, ctcpcmd, ctcpdata);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_nctcp(const char *data, IRC_SERVER_REC *server)
|
||||
{
|
||||
gchar *params, *target, *ctcpcmd, *ctcpdata;
|
||||
char *target, *ctcpcmd, *ctcpdata;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata))
|
||||
return;
|
||||
if (*target == '\0' || *ctcpcmd == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
if (*target == '@' && ischannel(target[1]))
|
||||
|
|
@ -247,19 +257,21 @@ static void cmd_nctcp(const char *data, IRC_SERVER_REC *server)
|
|||
g_strup(ctcpcmd);
|
||||
printformat(server, target, MSGLEVEL_NOTICES, IRCTXT_OWN_NOTICE, target, ctcpcmd, ctcpdata);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_wall(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item)
|
||||
{
|
||||
char *params, *channame, *msg;
|
||||
CHANNEL_REC *chanrec;
|
||||
char *channame, *msg;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
if (server == NULL || !server->connected || !irc_server_check(server))
|
||||
cmd_return_error(CMDERR_NOT_CONNECTED);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &msg);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTCHAN | PARAM_FLAG_GETREST, item, &channame, &msg))
|
||||
return;
|
||||
if (*msg == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
chanrec = channel_find(server, channame);
|
||||
|
|
@ -267,7 +279,7 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item)
|
|||
|
||||
printformat(server, chanrec->name, MSGLEVEL_NOTICES, IRCTXT_OWN_WALL, chanrec->name, msg);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_ban(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item)
|
||||
|
|
|
|||
|
|
@ -78,17 +78,18 @@ static void print_reconnects(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void server_add(const char *data)
|
||||
static void cmd_server_add(const char *data)
|
||||
{
|
||||
GHashTable *optlist;
|
||||
SETUP_SERVER_REC *rec;
|
||||
char *params, *args, *ircnet, *host, *cmdspeed, *cmdmax, *portarg;
|
||||
char *addr, *portstr, *password;
|
||||
char *addr, *portstr, *password, *value;
|
||||
void *free_arg;
|
||||
int port;
|
||||
|
||||
args = "ircnet host cmdspeed cmdmax port";
|
||||
params = cmd_get_params(data, 9 | PARAM_FLAG_MULTIARGS,
|
||||
&args, &ircnet, &host, &cmdspeed, &cmdmax,
|
||||
&portarg, &addr, &portstr, &password);
|
||||
if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_OPTIONS,
|
||||
"server add", &optlist, &addr, &portstr, &password))
|
||||
return;
|
||||
|
||||
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
port = *portstr == '\0' ? 6667 : atoi(portstr);
|
||||
|
||||
|
|
@ -98,39 +99,48 @@ static void server_add(const char *data)
|
|||
rec->address = g_strdup(addr);
|
||||
rec->port = port;
|
||||
} else {
|
||||
if (*portarg != '\0') rec->port = atoi(portarg);
|
||||
if (stristr(args, "-ircnet")) g_free_and_null(rec->ircnet);
|
||||
value = g_hash_table_lookup(optlist, "port");
|
||||
if (value != NULL && *value != '\0') rec->port = atoi(value);
|
||||
|
||||
if (g_hash_table_lookup(optlist, "ircnet")) g_free_and_null(rec->ircnet);
|
||||
if (*password != '\0') g_free_and_null(rec->password);
|
||||
if (stristr(args, "-host")) {
|
||||
if (g_hash_table_lookup(optlist, "host")) {
|
||||
g_free_and_null(rec->own_host);
|
||||
rec->own_ip = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (stristr(args, "-auto")) rec->autoconnect = TRUE;
|
||||
if (stristr(args, "-noauto")) rec->autoconnect = FALSE;
|
||||
if (*ircnet != '\0') rec->ircnet = g_strdup(ircnet);
|
||||
if (g_hash_table_lookup(optlist, "auto")) rec->autoconnect = TRUE;
|
||||
if (g_hash_table_lookup(optlist, "noauto")) rec->autoconnect = FALSE;
|
||||
|
||||
if (*password != '\0' && strcmp(password, "-") != 0) rec->password = g_strdup(password);
|
||||
if (*host != '\0') {
|
||||
rec->own_host = g_strdup(host);
|
||||
value = g_hash_table_lookup(optlist, "ircnet");
|
||||
if (value != NULL && *value != '\0') rec->ircnet = g_strdup(value);
|
||||
value = g_hash_table_lookup(optlist, "host");
|
||||
if (value != NULL && *value != '\0') {
|
||||
rec->own_host = g_strdup(value);
|
||||
rec->own_ip = NULL;
|
||||
}
|
||||
if (*cmdspeed != '\0') rec->cmd_queue_speed = atoi(cmdspeed);
|
||||
if (*cmdmax != '\0') rec->max_cmds_at_once = atoi(cmdmax);
|
||||
value = g_hash_table_lookup(optlist, "cmdspeed");
|
||||
if (value != NULL && *value != '\0') rec->cmd_queue_speed = atoi(value);
|
||||
value = g_hash_table_lookup(optlist, "cmdmax");
|
||||
if (value != NULL && *value != '\0') rec->max_cmds_at_once = atoi(value);
|
||||
|
||||
server_setup_add(rec);
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_SETUPSERVER_ADDED, addr, port);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void server_remove(const char *data)
|
||||
static void cmd_server_remove(const char *data)
|
||||
{
|
||||
SETUP_SERVER_REC *rec;
|
||||
char *params, *args, *addr, *portstr;
|
||||
char *addr, *portstr;
|
||||
void *free_arg;
|
||||
int port;
|
||||
|
||||
params = cmd_get_params(data, 3 | PARAM_FLAG_OPTARGS, &args, &addr, &portstr);
|
||||
if (!cmd_get_params(data, &free_arg, 2, &addr, &portstr))
|
||||
return;
|
||||
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
port = *portstr == '\0' ? 6667 : atoi(portstr);
|
||||
|
||||
|
|
@ -142,10 +152,10 @@ static void server_remove(const char *data)
|
|||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_SETUPSERVER_REMOVED, addr, port);
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void server_list(const char *data)
|
||||
static void cmd_server_list(const char *data)
|
||||
{
|
||||
GString *str;
|
||||
GSList *tmp;
|
||||
|
|
@ -177,9 +187,11 @@ static void server_list(const char *data)
|
|||
g_string_free(str, TRUE);
|
||||
}
|
||||
|
||||
static void cmd_server(const char *data)
|
||||
static void cmd_server(const char *data, IRC_SERVER_REC *server, void *item)
|
||||
{
|
||||
char *params, *args, *ircnetarg, *hostarg, *addr;
|
||||
GHashTable *optlist;
|
||||
char *addr;
|
||||
void *free_arg;
|
||||
|
||||
if (*data == '\0') {
|
||||
print_servers();
|
||||
|
|
@ -190,36 +202,40 @@ static void cmd_server(const char *data)
|
|||
return;
|
||||
}
|
||||
|
||||
args = "ircnet host"; /* should be same as in connect_server() in src/irc/core/irc-commands.c */
|
||||
params = cmd_get_params(data, 4 | PARAM_FLAG_MULTIARGS,
|
||||
&args, &ircnetarg, &hostarg, &addr);
|
||||
|
||||
if (stristr(args, "-list") != NULL) {
|
||||
server_list(data);
|
||||
if (g_strncasecmp(data, "add ", 4) == 0 ||
|
||||
g_strncasecmp(data, "remove ", 7) == 0 ||
|
||||
g_strcasecmp(data, "list") == 0 ||
|
||||
g_strncasecmp(data, "list ", 5) == 0) {
|
||||
command_runsub("server", data, server, item);
|
||||
signal_stop();
|
||||
} else if (stristr(args, "-add") != NULL) {
|
||||
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
server_add(data);
|
||||
signal_stop();
|
||||
} else if (stristr(args, "-remove") != NULL) {
|
||||
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
server_remove(data);
|
||||
signal_stop();
|
||||
} else {
|
||||
if (*addr == '\0' || strcmp(addr, "+") == 0)
|
||||
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
if (*addr == '+') window_create(NULL, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
|
||||
"connect", &optlist, &addr))
|
||||
return;
|
||||
|
||||
if (*addr == '\0' || strcmp(addr, "+") == 0)
|
||||
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
if (*addr == '+') window_create(NULL, FALSE);
|
||||
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
void fe_irc_server_init(void)
|
||||
{
|
||||
command_bind("server", NULL, (SIGNAL_FUNC) cmd_server);
|
||||
command_bind("server add", NULL, (SIGNAL_FUNC) cmd_server_add);
|
||||
command_bind("server remove", NULL, (SIGNAL_FUNC) cmd_server_remove);
|
||||
command_bind("server list", NULL, (SIGNAL_FUNC) cmd_server_list);
|
||||
|
||||
command_set_options("server add", "auto noauto -ircnet -host -cmdspeed -cmdmax -port");
|
||||
}
|
||||
|
||||
void fe_irc_server_deinit(void)
|
||||
{
|
||||
command_unbind("server", (SIGNAL_FUNC) cmd_server);
|
||||
command_unbind("server add", (SIGNAL_FUNC) cmd_server_add);
|
||||
command_unbind("server remove", (SIGNAL_FUNC) cmd_server_remove);
|
||||
command_unbind("server list", (SIGNAL_FUNC) cmd_server_list);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,15 +79,14 @@ static void cmd_ircnet_list(void)
|
|||
|
||||
static void cmd_ircnet_add(const char *data)
|
||||
{
|
||||
char *params, *args, *kicks, *msgs, *modes, *whois;
|
||||
char *cmdspeed, *cmdmax, *nick, *user, *realname, *host, *autosendcmd, *name;
|
||||
GHashTable *optlist;
|
||||
char *name, *value;
|
||||
void *free_arg;
|
||||
IRCNET_REC *rec;
|
||||
|
||||
args = "kicks msgs modes whois cmdspeed cmdmax nick user realname host autosendcmd";
|
||||
params = cmd_get_params(data, 13 | PARAM_FLAG_MULTIARGS, &args,
|
||||
&kicks, &msgs, &modes, &whois, &cmdspeed,
|
||||
&cmdmax, &nick, &user, &realname, &host,
|
||||
&autosendcmd, &name);
|
||||
if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
|
||||
"ircnet add", &optlist, &name))
|
||||
return;
|
||||
if (*name == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
|
||||
rec = ircnet_find(name);
|
||||
|
|
@ -95,37 +94,50 @@ static void cmd_ircnet_add(const char *data)
|
|||
rec = g_new0(IRCNET_REC, 1);
|
||||
rec->name = g_strdup(name);
|
||||
} else {
|
||||
if (stristr(args, "-nick")) g_free_and_null(rec->nick);
|
||||
if (stristr(args, "-user")) g_free_and_null(rec->username);
|
||||
if (stristr(args, "-realname")) g_free_and_null(rec->realname);
|
||||
if (stristr(args, "-host")) {
|
||||
if (g_hash_table_lookup(optlist, "nick")) g_free_and_null(rec->nick);
|
||||
if (g_hash_table_lookup(optlist, "user")) g_free_and_null(rec->username);
|
||||
if (g_hash_table_lookup(optlist, "realname")) g_free_and_null(rec->realname);
|
||||
if (g_hash_table_lookup(optlist, "host")) {
|
||||
g_free_and_null(rec->own_host);
|
||||
rec->own_ip = NULL;
|
||||
}
|
||||
if (stristr(args, "-autosendcmd")) g_free_and_null(rec->autosendcmd);
|
||||
if (g_hash_table_lookup(optlist, "autosendcmd")) g_free_and_null(rec->autosendcmd);
|
||||
}
|
||||
|
||||
if (stristr(args, "-kicks")) rec->max_kicks = atoi(kicks);
|
||||
if (stristr(args, "-msgs")) rec->max_msgs = atoi(msgs);
|
||||
if (stristr(args, "-modes")) rec->max_modes = atoi(modes);
|
||||
if (stristr(args, "-whois")) rec->max_whois = atoi(whois);
|
||||
value = g_hash_table_lookup(optlist, "kicks");
|
||||
if (value != NULL) rec->max_kicks = atoi(value);
|
||||
value = g_hash_table_lookup(optlist, "msgs");
|
||||
if (value != NULL) rec->max_msgs = atoi(value);
|
||||
value = g_hash_table_lookup(optlist, "modes");
|
||||
if (value != NULL) rec->max_modes = atoi(value);
|
||||
value = g_hash_table_lookup(optlist, "whois");
|
||||
if (value != NULL) rec->max_whois = atoi(value);
|
||||
|
||||
if (stristr(args, "-cmdspeed")) rec->cmd_queue_speed = atoi(cmdspeed);
|
||||
if (stristr(args, "-cmdmax")) rec->max_cmds_at_once = atoi(cmdmax);
|
||||
value = g_hash_table_lookup(optlist, "cmdspeed");
|
||||
if (value != NULL) rec->cmd_queue_speed = atoi(value);
|
||||
value = g_hash_table_lookup(optlist, "cmdmax");
|
||||
if (value != NULL) rec->max_cmds_at_once = atoi(value);
|
||||
|
||||
if (*nick != '\0') rec->nick = g_strdup(nick);
|
||||
if (*user != '\0') rec->username = g_strdup(user);
|
||||
if (*realname != '\0') rec->realname = g_strdup(realname);
|
||||
if (*host != '\0') {
|
||||
rec->own_host = g_strdup(host);
|
||||
value = g_hash_table_lookup(optlist, "nick");
|
||||
if (value != NULL && *value != '\0') rec->nick = g_strdup(value);
|
||||
value = g_hash_table_lookup(optlist, "user");
|
||||
if (value != NULL && *value != '\0') rec->username = g_strdup(value);
|
||||
value = g_hash_table_lookup(optlist, "realname");
|
||||
if (value != NULL && *value != '\0') rec->realname = g_strdup(value);
|
||||
|
||||
value = g_hash_table_lookup(optlist, "host");
|
||||
if (value != NULL && *value != '\0') {
|
||||
rec->own_host = g_strdup(value);
|
||||
rec->own_ip = NULL;
|
||||
}
|
||||
if (*autosendcmd != '\0') rec->autosendcmd = g_strdup(autosendcmd);
|
||||
|
||||
value = g_hash_table_lookup(optlist, "autosendcmd");
|
||||
if (value != NULL && *value != '\0') rec->autosendcmd = g_strdup(value);
|
||||
|
||||
ircnet_create(rec);
|
||||
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_IRCNET_ADDED, name);
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void cmd_ircnet_remove(const char *data)
|
||||
|
|
@ -149,6 +161,8 @@ void fe_ircnet_init(void)
|
|||
command_bind("ircnet ", NULL, (SIGNAL_FUNC) cmd_ircnet_list);
|
||||
command_bind("ircnet add", NULL, (SIGNAL_FUNC) cmd_ircnet_add);
|
||||
command_bind("ircnet remove", NULL, (SIGNAL_FUNC) cmd_ircnet_remove);
|
||||
|
||||
command_set_options("ircnet add", "-kicks -msgs -modes -whois -cmdspeed -cmdmax -nick -user -realname -host -autosendcmd");
|
||||
}
|
||||
|
||||
void fe_ircnet_deinit(void)
|
||||
|
|
|
|||
|
|
@ -167,17 +167,19 @@ static void event_privmsg(const char *data, IRC_SERVER_REC *server, const char *
|
|||
|
||||
static void cmd_msg(const char *data, IRC_SERVER_REC *server)
|
||||
{
|
||||
char *params, *target, *msg;
|
||||
char *target, *msg;
|
||||
void *free_arg;
|
||||
|
||||
g_return_if_fail(data != NULL);
|
||||
|
||||
params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
|
||||
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &msg))
|
||||
return;
|
||||
if (*target != '\0' && *msg != '\0') {
|
||||
if (!ischannel(*target) && *target != '=' && server != NULL)
|
||||
add_private_msg(server, target);
|
||||
}
|
||||
|
||||
g_free(params);
|
||||
cmd_params_free(free_arg);
|
||||
}
|
||||
|
||||
static void sig_nick_removed(CHANNEL_REC *channel, NICK_REC *nick)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue