/src/mod/server.mod/cmdsserv.c
C | 168 lines | 136 code | 8 blank | 24 comment | 34 complexity | 304eea4eb082203d10ea5b0d49c4d13a MD5 | raw file
Possible License(s): GPL-2.0
- /*
- * cmdsserv.c -- part of server.mod
- * handles commands from a user via dcc that cause server interaction
- *
- * $Id: cmdsserv.c,v 1.3 2010/11/01 22:38:34 pseudo Exp $
- */
- /*
- * Copyright (C) 1997 Robey Pointer
- * Copyright (C) 1999 - 2010 Eggheads Development Team
- *
- * 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.
- */
- static void cmd_servers(struct userrec *u, int idx, char *par)
- {
- struct server_list *x = serverlist;
- int i;
- char s[1024];
- putlog(LOG_CMDS, "*", "#%s# servers", dcc[idx].nick);
- if (!x) {
- dprintf(idx, "There are no servers in the server list.\n");
- } else {
- dprintf(idx, "Server list:\n");
- i = 0;
- for (; x; x = x->next) {
- if ((i == curserv) && realservername)
- #ifdef TLS
- egg_snprintf(s, sizeof s, " [%s]:%s%d (%s) <- I am here", x->name,
- x->ssl ? "+" : "", x->port ? x->port : default_port,
- realservername);
- else
- egg_snprintf(s, sizeof s, " [%s]:%s%d %s", x->name, x->ssl ? "+" : "",
- x->port ? x->port : default_port,
- (i == curserv) ? "<- I am here" : "");
- #else
- egg_snprintf(s, sizeof s, " [%s]:%d (%s) <- I am here", x->name,
- x->port ? x->port : default_port, realservername);
- else
- egg_snprintf(s, sizeof s, " [%s]:%d %s", x->name,
- x->port ? x->port : default_port,
- (i == curserv) ? "<- I am here" : "");
- #endif
- dprintf(idx, "%s\n", s);
- i++;
- }
- dprintf(idx, "End of server list.\n");
- }
- }
- static void cmd_dump(struct userrec *u, int idx, char *par)
- {
- if (!(isowner(dcc[idx].nick)) && (must_be_owner == 2)) {
- dprintf(idx, MISC_NOSUCHCMD);
- return;
- }
- if (!par[0]) {
- dprintf(idx, "Usage: dump <server stuff>\n");
- return;
- }
- putlog(LOG_CMDS, "*", "#%s# dump %s", dcc[idx].nick, par);
- dprintf(DP_SERVER, "%s\n", par);
- }
- static void cmd_jump(struct userrec *u, int idx, char *par)
- {
- char *other;
- #ifdef TLS
- char *sport;
- #endif
- int port;
- if (par[0]) {
- other = newsplit(&par);
- #ifdef TLS
- sport = newsplit(&par);
- if (*sport == '+')
- use_ssl = 1;
- else
- use_ssl = 0;
- port = atoi(sport);
- if (!port) {
- port = default_port;
- use_ssl = 0;
- }
- putlog(LOG_CMDS, "*", "#%s# jump %s %s%d %s", dcc[idx].nick, other,
- use_ssl ? "+" : "", port, par);
- #else
- port = atoi(newsplit(&par));
- if (!port)
- port = default_port;
- putlog(LOG_CMDS, "*", "#%s# jump %s %d %s", dcc[idx].nick, other,
- port, par);
- #endif
- strncpyz(newserver, other, sizeof newserver);
- newserverport = port;
- strncpyz(newserverpass, par, sizeof newserverpass);
- } else
- putlog(LOG_CMDS, "*", "#%s# jump", dcc[idx].nick);
- dprintf(idx, "%s...\n", IRC_JUMP);
- cycle_time = 0;
- nuke_server("changing servers");
- }
- static void cmd_clearqueue(struct userrec *u, int idx, char *par)
- {
- int msgs;
- if (!par[0]) {
- dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
- return;
- }
- if (!egg_strcasecmp(par, "all")) {
- msgs = modeq.tot + mq.tot + hq.tot;
- msgq_clear(&modeq);
- msgq_clear(&mq);
- msgq_clear(&hq);
- double_warned = burst = 0;
- dprintf(idx, "Removed %d message%s from all queues.\n", msgs,
- (msgs != 1) ? "s" : "");
- } else if (!egg_strcasecmp(par, "mode")) {
- msgs = modeq.tot;
- msgq_clear(&modeq);
- if (mq.tot == 0)
- burst = 0;
- double_warned = 0;
- dprintf(idx, "Removed %d message%s from the mode queue.\n", msgs,
- (msgs != 1) ? "s" : "");
- } else if (!egg_strcasecmp(par, "help")) {
- msgs = hq.tot;
- msgq_clear(&hq);
- double_warned = 0;
- dprintf(idx, "Removed %d message%s from the help queue.\n", msgs,
- (msgs != 1) ? "s" : "");
- } else if (!egg_strcasecmp(par, "server")) {
- msgs = mq.tot;
- msgq_clear(&mq);
- if (modeq.tot == 0)
- burst = 0;
- double_warned = 0;
- dprintf(idx, "Removed %d message%s from the server queue.\n", msgs,
- (msgs != 1) ? "s" : "");
- } else {
- dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
- return;
- }
- putlog(LOG_CMDS, "*", "#%s# clearqueue %s", dcc[idx].nick, par);
- }
- static cmd_t C_dcc_serv[] = {
- {"dump", "m", (IntFunc) cmd_dump, NULL},
- {"jump", "m", (IntFunc) cmd_jump, NULL},
- {"servers", "o", (IntFunc) cmd_servers, NULL},
- {"clearqueue", "m", (IntFunc) cmd_clearqueue, NULL},
- {NULL, NULL, NULL, NULL}
- };