/************************************************************************
* IRC - Internet Relay Chat, server/s_lev.c
*
* Copyright (C) 2000-2003 TR-IRCD Development
*
* Copyright (C) 1990 Jarkko Oikarinen and
* University of Oulu, Co Center
*
* 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "channel.h"
#include "s_conf.h"
#include "h.h"
typedef struct {
char *lev_chname;
struct Channel *levptr;
char *topic;
} LChan;
static LChan lchans[NUM_LEV] = {
{N_NOTICE, NULL, T_NOTICE_LEV},
{N_CONNECT, NULL, T_CCONN_LEV},
{N_REJECT, NULL, T_REJ_LEV},
{N_KILL, NULL, T_SKILL_LEV},
{N_STAT, NULL, T_SPY_LEV},
{N_DEBUG, NULL, T_DEBUG_LEV},
{N_FLOOD, NULL, T_FLOOD_LEV},
{N_SPAMBOT, NULL, T_SPAM_LEV},
{N_DCCSEND, NULL, T_DCCSEND_LEV},
{N_SERVICE, NULL, T_SERVICE_LEV},
{N_SNOTICE, NULL, T_SNOTICE_LEV},
{N_PROXY, NULL, T_PROXY_LEV},
{N_KLINE, NULL, T_KLINE_LEV},
{N_QLINE, NULL, T_QLINE_LEV},
{N_ULINE, NULL, NULL},
{NULL, NULL, NULL}
};
#define MODE_SERVERCHANNEL \
((!ChannelConf.visschan) \
? \
(MODE_TOPICLIMIT|MODE_NOPRIVMSGS|MODE_ANONYMOUS|MODE_OPERONLY|MODE_SECRET|MODE_PRIVATE) \
: \
(MODE_TOPICLIMIT|MODE_NOPRIVMSGS|MODE_ANONYMOUS|MODE_OPERONLY) \
)
void init_levs(aClient *ghost)
{
int n;
int i;
LChan *alptr;
SetOper(ghost);
ghost->protoflags |= PFLAGS_ANONYMOUS;
i = 0;
/* NOTICES */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
alptr->levptr->mode.mode &= ~MODE_OPERONLY;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* CONNECTS */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* REJECTS */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* KILLS */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* STATS */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* DEBUG */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* FLOOD */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* SPAMBOT */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* DCCSEND */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* SERVICE */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* SNOTICE */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* PROXY */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* KLINES */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* QLINES */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
strcpy(alptr->levptr->topic, alptr->topic);
i++;
/* ULINE */
alptr = lchans + i;
alptr->levptr = create_channel(ghost, alptr->lev_chname, &n, 0);
add_user_to_channel(alptr->levptr, ghost, CHFL_CHANOP);
alptr->levptr->mode.mode |= MODE_SERVERCHANNEL;
}
void sendto_lev(int lev, char *pattern, ...)
{
aChannel *chptr = NULL;
LChan *alptr;
char nbuf[512];
va_list vl;
alptr = lchans + (lev);
if ((chptr = alptr->levptr)) {
va_start(vl, pattern);
ircvsnprintf(nbuf, 511, pattern, vl);
va_end(vl);
sendto_channel_butserv(chptr, &me, TOK1_NOTICE, 0, ":%s", nbuf);
}
return;
}
syntax highlighted by Code2HTML, v. 0.9.1