+2005-04-01 Michael Poole <mdpoole@troilus.org>
+
+ * include/s_conf.h (SMAP_FAST): Define.
+ (s_map): Add 'flags' field.
+
+ * ircd/ircd_lexer.l: Recognize 'FAST' token.
+
+ * ircd/ircd_parser.y (FAST): New token.
+ (pseudoitem): Add pseudoflags alternative.
+ (pseudoflags): New production, recognizing FAST token.
+
+ * ircd/parse.c (register_mapping): Set MFLG_SLOW conditionally.
+ Remove outdated comment.
+
2005-04-01 Michael Poole <mdpoole@troilus.org>
* include/handlers.h (ms_privs): Declare.
char nick[1]; /**< start of nick\@server string */
};
+#define SMAP_FAST 1 /**< Command does not have MFLG_SLOW. */
+
/** Target set for a service pseudo-command. */
struct s_map {
struct s_map *next; /**< Next element in #GlobalServiceMapList. */
char *name; /**< Text name of the mapping. */
char *command; /**< Command name to use. */
char *prepend; /**< Extra text to prepend to user's text. */
+ unsigned int flags; /**< Bitwise map of SMAP_* flags. */
struct nick_host *services; /**< Linked list of possible targets. */
};
TOKEN(PSEUDO),
TOKEN(PREPEND),
TOKEN(USERMODE),
+ TOKEN(FAST),
#undef TOKEN
{ "administrator", ADMIN },
{ "apass_opmode", TPRIV_APASS_OPMODE },
%token USERMODE
%token IAUTH
%token TIMEOUT
+%token FAST
/* and now a lot of privileges... */
%token TPRIV_CHAN_LIMIT TPRIV_MODE_LCHAN TPRIV_DEOP_LCHAN TPRIV_WALK_LCHAN
%token TPRIV_LOCAL_KILL TPRIV_REHASH TPRIV_RESTART TPRIV_DIE
};
pseudoitems: pseudoitem pseudoitems | pseudoitem;
-pseudoitem: pseudoname | pseudoprepend | pseudonick | error;
+pseudoitem: pseudoname | pseudoprepend | pseudonick | pseudoflags | error;
pseudoname: NAME '=' QSTRING ';'
{
DupString(smap->name, $3);
smap->services = nh;
}
};
+pseudoflags: FAST ';'
+{
+ smap->flags |= SMAP_FAST;
+};
iauthblock: IAUTH '{'
{
msg->tok = map->command;
msg->count = 0;
msg->parameters = 2;
- msg->flags = MFLG_SLOW | MFLG_EXTRA;
+ msg->flags = MFLG_EXTRA;
+ if (!(map->flags & SMAP_FAST))
+ msg->flags |= MFLG_SLOW;
msg->bytes = 0;
msg->extra = map;
msg->handlers[UNREGISTERED_HANDLER] = m_ignore;
msg->handlers[CLIENT_HANDLER] = m_pseudo;
msg->handlers[SERVER_HANDLER] = m_ignore;
- msg->handlers[OPER_HANDLER] = m_pseudo;
+ msg->handlers[OPER_HANDLER] = m_pseudo;
msg->handlers[SERVICE_HANDLER] = m_ignore;
- /* Service mappings are only applicable to clients; insert the
- pseudocommand into the command tree only. */
add_msg_element(&msg_tree, msg, msg->cmd);
map->msg = msg;
paramcount = mptr->parameters;
i = bufend - ((s) ? s : ch);
mptr->bytes += i;
- if ((mptr->flags & MFLG_SLOW))
+ if ((mptr->flags & MFLG_SLOW) || !IsAnOper(cptr))
cli_since(cptr) += (2 + i / 120);
/*
* Allow only 1 msg per 2 seconds