/************************************************************************
* IRC - Internet Relay Chat, include/msg.h
* Copyright (C) 1990 Jarkko Oikarinen and
* University of Oulu, Computing 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 1, 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.
*
* $Id: msg.h,v 1.4 2005/08/27 16:23:49 jpinto Exp $
*/
#ifndef INCLUDED_msg_h
#define INCLUDED_msg_h
#ifndef INCLUDED_config_h
#include "config.h"
#endif
struct Client;
/*
* Message table structure
*/
struct Message
{
char *cmd;
int (* func)();
unsigned int count; /* number of times command used */
int parameters;
char flags;
/* bit 0 set means that this command is allowed to be used
* only on the average of once per 2 seconds -SRB */
/* I could have defined other bit maps to above instead of the next two
flags that I added. so sue me. -Dianora */
char allow_unregistered_use; /* flag if this command can be
used if unregistered */
char reset_idle; /* flag if this command causes
idle time to be reset */
unsigned long bytes;
};
struct MessageTree
{
char* final;
struct Message* msg;
struct MessageTree* pointers[26];
};
typedef struct MessageTree MESSAGE_TREE;
#define MSG_PRIVATE "PRIVMSG" /* PRIV */
#define MSG_WHO "WHO" /* WHO -> WHOC */
#define MSG_WHOIS "WHOIS" /* WHOI */
#define MSG_WHOWAS "WHOWAS" /* WHOW */
#define MSG_USER "USER" /* USER */
#define MSG_NICK "NICK" /* NICK */
#define MSG_SNICK "SNICK" /* SNICK */
#define MSG_SERVER "SERVER" /* SERV */
#define MSG_LIST "LIST" /* LIST */
#define MSG_TOPIC "TOPIC" /* TOPI */
#define MSG_INVITE "INVITE" /* INVI */
#define MSG_VERSION "VERSION" /* VERS */
#define MSG_QUIT "QUIT" /* QUIT */
#define MSG_SQUIT "SQUIT" /* SQUI */
#define MSG_KILL "KILL" /* KILL */
#define MSG_FLOODEX "FLOODEX" /* wtf */
#define MSG_INFO "INFO" /* INFO */
#define MSG_LINKS "LINKS" /* LINK */
#define MSG_STATS "STATS" /* STAT */
#define MSG_USERS "USERS" /* USER -> USRS */
#define MSG_HELP "HELP" /* HELP */
#define MSG_HELPSYS "HELPSYS" /* HELP */
#define MSG_ERROR "ERROR" /* ERRO */
#define MSG_AWAY "AWAY" /* AWAY */
#define MSG_CONNECT "CONNECT" /* CONN */
#define MSG_PING "PING" /* PING */
#define MSG_PONG "PONG" /* PONG */
#define MSG_OPER "OPER" /* OPER */
#define MSG_PASS "PASS" /* PASS */
#define MSG_WALLOPS "WALLOPS" /* WALL */
#define MSG_POST "POST" /* POST */
#define MSG_GLOBOPS "GLOBOPS" /* -> WALLOPS */
#define MSG_TIME "TIME" /* TIME */
#define MSG_NAMES "NAMES" /* NAME */
#define MSG_ADMIN "ADMIN" /* ADMI */
#define MSG_TRACE "TRACE" /* TRAC */
#define MSG_LTRACE "LTRACE" /* LTRA */
#define MSG_NOTICE "NOTICE" /* NOTI */
#define MSG_JOIN "JOIN" /* JOIN */
#define MSG_PART "PART" /* PART */
#define MSG_LUSERS "LUSERS" /* LUSE */
#define MSG_MOTD "MOTD" /* MOTD */
#define MSG_MODE "MODE" /* MODE */
#define MSG_SAMODE "SAMODE" /* MODE */
#define MSG_KICK "KICK" /* KICK */
#define MSG_USERHOST "USERHOST" /* USER -> USRH */
#define MSG_ISON "ISON" /* ISON */
#define MSG_REHASH "REHASH" /* REHA */
#define MSG_RESTART "RESTART" /* REST */
#define MSG_CLOSE "CLOSE" /* CLOS */
#define MSG_SVINFO "SVINFO" /* SVINFO */
#define MSG_SJOIN "SJOIN" /* SJOIN */
#define MSG_NJOIN "NJOIN" /* NJOIN */
#define MSG_NNICK "NNICK" /* NNICK */
#define MSG_CAPAB "CAPAB" /* CAPAB */
#define MSG_DIE "DIE" /* DIE */
#define MSG_DNS "DNS" /* DNS -> DNSS */
#define MSG_KLINE "KLINE" /* KLINE */
#define MSG_UNDLINE "UNDLINE" /* UNDLINE */
#define MSG_UNKLINE "UNKLINE" /* UNKLINE */
#define MSG_DLINE "DLINE" /* DLINE */
#define MSG_HTM "HTM" /* HTM */
#define MSG_SET "SET" /* SET */
#define MSG_DCONF "DCONF" /* DCONF */
#define MSG_SANOTICE "SANOTICE" /* SANOTICE */
#define MSG_NEWMASK "NEWMASK" /* NEWMASK */
#define MSG_GLINE "GLINE" /* GLINE */
#define MSG_UNGLINE "UNGLINE" /* UNGLINE */
#define MSG_SXLINE "SXLINE" /* SXLINE */
#define MSG_UNSXLINE "UNSXLINE" /* UNSXLINE */
#define MSG_SVLINE "SVLINE" /* SVLINE */
#define MSG_UNSVLINE "UNSVLINE" /* UNSVLINE */
#define MSG_ZLINE "ZLINE" /* ZLINE */
#define MSG_UNZLINE "UNZLINE" /* UNZLINE */
#define MSG_SQLINE "SQLINE" /* SQLINE */
#define MSG_UNSQLINE "UNSQLINE" /* UNSQLINE */
#define MSG_LOCOPS "LOCOPS" /* LOCOPS */
#ifdef LWALLOPS
#define MSG_LWALLOPS "LWALLOPS" /* Same as LOCOPS */
#endif /* LWALLOPS */
#ifdef USE_KNOCK
#define MSG_KNOCK "KNOCK" /* KNOCK */
#endif
#define MSG_MAP "MAP" /* MAP */
#define MSG_NEWS "NEWS" /* NEWS */
#define MSG_ZOMBIE "ZOMBIE" /* ZOMBIE */
#define MSG_UNZOMBIE "UNZOMBIE" /* UNZOMBIE */
#define MSG_DCCDENY "DCCDENY"
#define MSG_DCCALLOW "DCCALLOW"
#define MSG_SVSINFO "SVSINFO" /* SVSINFO */
#define MSG_CMSG "CMSG" /* CMSG */
#define MSG_CPRIVMSG "CPRIVMSG" /* CPRIVMSG */
#define MSG_CNOTICE "CNOTICE" /* CNOT */
/* Services only messages */
#define MSG_SVSJOIN "SVSJOIN"
#define MSG_SVSPART "SVSPART"
#define MSG_SVSMODE "SVSMODE"
#define MSG_SVSNICK "SVSNICK"
#define MSG_SVSGUEST "SVSGUEST"
/* Services aliases */
#define MSG_NICKSERV "NICKSERV"
#define MSG_NS "NS"
#define MSG_CHANSERV "CHANSERV"
#define MSG_CS "CS"
#define MSG_MEMOSERV "MEMOSERV"
#define MSG_MS "MS"
#define MSG_NEWSSERV "NEWSSERV"
#define MSG_NWS "NWS"
#define MSG_OPERSERV "OPERSERV"
#define MSG_OS "OS"
#define MSG_STATSERV "STATSERV"
#define MSG_HELPSERV "HELPSERV"
#define MSG_HS "HS"
#define MSG_BOTSERV "BOTSERV"
#define MSG_BS "BS"
#define MSG_IDENTIFY "IDENTIFY"
#define MSG_SILENCE "SILENCE"
#define MSG_WATCH "WATCH"
#define MSG_IRCOPS "IRCOPS"
#define MSG_SVSADMIN "SVSADMIN"
#define MSG_REDIRECT "REDIRECT"
#define MSG_LNOTICE "LNOTICE"
#define MSG_RNOTICE "RNOTICE"
#define MSG_CODEPAGE "CODEPAGE"
#define MSG_VLINK "VLINK"
#define MSG_LOST "LOST"
#define MSG_IMODE "IMODE"
#define MSG_LOGIN "LOGIN"
#define MSG_HVC "HVC"
/* special lists */
#define MSG_BOTS "BOTS"
#define MSG_HELPERS "HELPERS"
#define MSG_DCCDENYS "DCCDENYS"
#define MSG_ZOMBIES "ZOMBIES"
/* setname */
#define MSG_SETNAME "SETNAME"
#define MSG_CHGHOST "CHGHOST"
#define MAXPARA 15
#ifdef MSGTAB
#ifndef INCLUDED_m_commands_h
#include "m_commands.h" /* m_xxx */
#endif
struct Message msgtab[] = {
#ifdef IDLE_FROM_MSG /* reset idle time only if privmsg used */
#ifdef IDLE_CHECK /* reset idle time only if valid target for privmsg
and target is not source */
/* |-- allow use even when unreg.
v yes/no */
{ MSG_PRIVATE, m_private, 0, MAXPARA, 1, 0, 0, 0L },
#else
{ MSG_PRIVATE, m_private, 0, MAXPARA, 1, 0, 1, 0L },
#endif
/* ^
|__ reset idle time when 1 */
#else /* IDLE_FROM_MSG */
#ifdef IDLE_CHECK /* reset idle time on anything but privmsg */
{ MSG_PRIVATE, m_private, 0, MAXPARA, 1, 0, 1, 0L },
#else
{ MSG_PRIVATE, m_private, 0, MAXPARA, 1, 0, 0, 0L },
/* ^
|__ reset idle time when 0 */
#endif /* IDLE_CHECK */
#endif /* IDLE_FROM_MSG */
{ MSG_NICK, m_nick, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_SNICK, m_nick, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_NNICK, m_nnick, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_NOTICE, m_notice, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_JOIN, m_join, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_MODE, m_mode, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SAMODE, m_samode, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_QUIT, m_quit, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_PART, m_part, 0, MAXPARA, 1, 0, 0, 0L },
#ifdef USE_KNOCK
{ MSG_KNOCK, m_knock, 0, MAXPARA, 1, 0, 0, 0L },
#endif
{ MSG_TOPIC, m_topic, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_INVITE, m_invite, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_KICK, m_kick, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_WALLOPS, m_wallops, 0, MAXPARA, 1, 0, 0, 0L },
#ifdef POST_REGISTER
{ MSG_POST, m_post, 0, MAXPARA, 1, 1, 0, 0L },
#endif /* POST_REGISTER */
{ MSG_GLOBOPS, m_globops, 0, 1, 1, 0, 0, 0L },
{ MSG_LOCOPS, m_locops, 0, 1, 1, 0, 0, 0L },
#ifdef LWALLOPS
{ MSG_LWALLOPS,m_locops, 0, 1, 1, 0, 0, 0L },
#endif /* LWALLOPS */
#ifdef IDLE_FROM_MSG
/* Only m_private has reset idle flag set */
{ MSG_PONG, m_pong, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_PING, m_ping, 0, MAXPARA, 1, 0, 0, 0L },
#else
/* else for IDLE_FROM_MSG */
/* reset idle flag sense is reversed, only reset idle time
* when its 0, for IDLE_FROM_MSG ping/pong do not reset idle time
*/
{ MSG_PONG, m_pong, 0, MAXPARA, 1, 0, 1, 0L },
{ MSG_PING, m_ping, 0, MAXPARA, 1, 0, 1, 0L },
#endif /* IDLE_FROM_MSG */
{ MSG_UNDLINE, m_undline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_ERROR, m_error, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_KILL, m_kill, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_FLOODEX, m_floodex, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_USER, m_user, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_AWAY, m_away, 0, MAXPARA, 1, 0, 0, 0L },
#ifdef IDLE_FROM_MSG
{ MSG_ISON, m_ison, 0, 1, 1, 0, 0, 0L },
#else
/* ISON should not reset idle time ever
* remember idle flag sense is reversed when IDLE_FROM_MSG is undefined
*/
{ MSG_ISON, m_ison, 0, 1, 1, 0, 1, 0L },
#endif /* !IDLE_FROM_MSG */
{ MSG_SERVER, m_server, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_SQUIT, m_squit, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_WHOIS, m_whois, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_WHO, m_who, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_WHOWAS, m_whowas, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_LIST, m_list, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_NAMES, m_names, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_USERHOST,m_userhost, 0, 1, 1, 0, 0, 0L },
{ MSG_TRACE, m_trace, 0, MAXPARA, 1, 0, 0, 0L },
#ifdef LTRACE
{ MSG_LTRACE, m_ltrace, 0, MAXPARA, 1, 0, 0, 0L },
#endif /* LTRACE */
{ MSG_PASS, m_pass, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_LUSERS, m_lusers, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_TIME, m_time, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_OPER, m_oper, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CONNECT, m_connect, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_VERSION, m_version, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_STATS, m_stats, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_LINKS, m_links, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_ADMIN, m_admin, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_USERS, m_users, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_HELP, m_helpsys, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_HELPSYS, m_helpsys, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_INFO, m_info, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_MOTD, m_motd, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVINFO, m_svinfo, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_SJOIN, m_sjoin, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_NJOIN, m_njoin, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CAPAB, m_capab, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_CLOSE, m_close, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_KLINE, m_kline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNKLINE, m_unkline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_DLINE, m_dline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_GLINE, m_gline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNGLINE, m_ungline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SXLINE, m_sxline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNSXLINE,m_unsxline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVLINE, m_svline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNSVLINE,m_unsvline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_ZLINE, m_zline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNZLINE, m_unzline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SQLINE, m_sqline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNSQLINE,m_unsqline, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SILENCE, m_silence, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_WATCH, m_watch, 0, 1, 1, 0, 0, 0L },
{ MSG_REHASH, m_rehash, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_RESTART, m_restart, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_DIE, m_die, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_HTM, m_htm, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SET, m_set, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSINFO, m_svsinfo, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSJOIN, m_svsjoin, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSPART, m_svspart, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSMODE, m_svsmode, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSNICK, m_svsnick, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSGUEST,m_svsguest, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_NICKSERV,m_nickserv, 0, 1, 1, 0, 0, 0L },
{ MSG_NS ,m_nickserv, 0, 1, 1, 0, 0, 0L },
{ MSG_CHANSERV,m_chanserv, 0, 1, 1, 0, 0, 0L },
{ MSG_CS ,m_chanserv, 0, 1, 1, 0, 0, 0L },
{ MSG_MEMOSERV,m_memoserv, 0, 1, 1, 0, 0, 0L },
{ MSG_MS ,m_memoserv, 0, 1, 1, 0, 0, 0L },
{ MSG_NEWSSERV,m_newsserv, 0, 1, 1, 0, 0, 0L },
{ MSG_NWS ,m_newsserv, 0, 1, 1, 0, 0, 0L },
{ MSG_OPERSERV,m_operserv, 0, 1, 1, 0, 0, 0L },
{ MSG_OS ,m_operserv, 0, 1, 1, 0, 0, 0L },
{ MSG_HELPSERV,m_helpserv, 0, 1, 1, 0, 0, 0L },
{ MSG_HS ,m_helpserv, 0, 1, 1, 0, 0, 0L },
{ MSG_STATSERV,m_statserv, 0, 1, 1, 0, 0, 0L },
{ MSG_BOTSERV ,m_botserv, 0, 1, 1, 0, 0, 0L },
{ MSG_BS ,m_botserv, 0, 1, 1, 0, 0, 0L},
{ MSG_IDENTIFY,m_identify, 0, 1, 1, 0, 0, 0L },
{ MSG_DCONF, m_dconf, 0, 4, 1, 0, 0, 0L },
{ MSG_SANOTICE,m_sanotice, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_NEWMASK, m_newmask, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_MAP, m_map, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_IRCOPS, m_ircops, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_NEWS, m_news, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_ZOMBIE, m_zombie, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_UNZOMBIE,m_unzombie, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_DCCDENY, m_dccdeny, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_DCCALLOW,m_dccallow, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SVSADMIN,m_svsadmin, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CMSG, m_cmsg, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CPRIVMSG,m_cmsg, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CNOTICE, m_cnotice, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_REDIRECT,m_redirect, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_LNOTICE, m_lnotice, 0, 1, 1, 0, 0, 0L },
{ MSG_RNOTICE, m_rnotice, 0, 3, 1, 0, 0, 0L },
{ MSG_CODEPAGE,m_codepage, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_VLINK, m_vlink, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_LOST, m_lost, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_IMODE, m_imode, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_BOTS, m_bots, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_ZOMBIES, m_zombies, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_DCCDENYS, m_dccdenys, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_HELPERS, m_helpers, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_SETNAME, m_setname, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_CHGHOST, m_chghost, 0, MAXPARA, 1, 0, 0, 0L },
{ MSG_LOGIN, m_login, 0, MAXPARA, 1, 1, 0, 0L },
{ MSG_HVC, m_hvc, 0, MAXPARA, 1, 0, 0, 0L },
{ (char *) 0, (int (*)()) 0 , 0, 0, 0, 0, 0, 0L }
};
struct MessageTree* msg_tree_root;
#else
extern struct Message msgtab[];
extern struct MessageTree* msg_tree_root;
#endif
#endif /* INCLUDED_msg_h */
syntax highlighted by Code2HTML, v. 0.9.1