m_stats: eliminate special casing of calling the stats L handler.
This commit is contained in:
parent
6f39a80ec6
commit
788e2d592c
1 changed files with 67 additions and 64 deletions
|
@ -55,7 +55,7 @@ static const char stats_desc[] =
|
||||||
static void m_stats (struct MsgBuf *, struct Client *, struct Client *, int, const char **);
|
static void m_stats (struct MsgBuf *, struct Client *, struct Client *, int, const char **);
|
||||||
|
|
||||||
struct Message stats_msgtab = {
|
struct Message stats_msgtab = {
|
||||||
"STATS", 0, 0, 0, 0,
|
"STATS", false, false, false, false,
|
||||||
{mg_unreg, {m_stats, 2}, {m_stats, 3}, mg_ignore, mg_ignore, {m_stats, 2}}
|
{mg_unreg, {m_stats, 2}, {m_stats, 3}, mg_ignore, mg_ignore, {m_stats, 2}}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,12 +81,19 @@ static void stats_l_client(struct Client *source_p, struct Client *target_p,
|
||||||
static int stats_spy(struct Client *, char, const char *);
|
static int stats_spy(struct Client *, char, const char *);
|
||||||
static void stats_p_spy(struct Client *);
|
static void stats_p_spy(struct Client *);
|
||||||
|
|
||||||
/* Heres our struct for the stats table */
|
typedef void (*handler_t)(struct Client *source_p);
|
||||||
|
typedef void (*handler_parv_t)(struct Client *source_p, int parc, const char *parv[]);
|
||||||
|
|
||||||
struct stats_cmd
|
struct stats_cmd
|
||||||
{
|
{
|
||||||
void (*handler) (struct Client *source_p);
|
union
|
||||||
int need_oper;
|
{
|
||||||
int need_admin;
|
handler_t handler;
|
||||||
|
handler_parv_t handler_parv;
|
||||||
|
};
|
||||||
|
bool need_parv;
|
||||||
|
bool need_oper;
|
||||||
|
bool need_admin;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stats_dns_servers(struct Client *);
|
static void stats_dns_servers(struct Client *);
|
||||||
|
@ -130,58 +137,58 @@ static void stats_capability(struct Client *);
|
||||||
* stats letter, function to call, operonly? adminonly? --fl_
|
* stats letter, function to call, operonly? adminonly? --fl_
|
||||||
*
|
*
|
||||||
* Previously in this table letters were a column. I fixed it to use modern
|
* Previously in this table letters were a column. I fixed it to use modern
|
||||||
* C initalisers so we don't have to iterate anymore.
|
* C initalisers so we don't have to iterate anymore
|
||||||
* --Elizafox
|
* --Elizafox
|
||||||
*/
|
*/
|
||||||
static struct stats_cmd stats_cmd_table[256] = {
|
static struct stats_cmd stats_cmd_table[256] = {
|
||||||
/* letter function need_oper need_admin */
|
/* letter handler/handler_parv parv oper admin */
|
||||||
['a'] = { stats_dns_servers, 1, 1, },
|
['a'] = { stats_dns_servers, false, true, true, },
|
||||||
['A'] = { stats_dns_servers, 1, 1, },
|
['A'] = { stats_dns_servers, false, true, true, },
|
||||||
['b'] = { stats_delay, 1, 1, },
|
['b'] = { stats_delay, false, true, true, },
|
||||||
['B'] = { stats_hash, 1, 1, },
|
['B'] = { stats_hash, false, true, true, },
|
||||||
['c'] = { stats_connect, 0, 0, },
|
['c'] = { stats_connect, false, false, false, },
|
||||||
['C'] = { stats_capability, 1, 0, },
|
['C'] = { stats_capability, false, true, false, },
|
||||||
['d'] = { stats_tdeny, 1, 0, },
|
['d'] = { stats_tdeny, false, true, false, },
|
||||||
['D'] = { stats_deny, 1, 0, },
|
['D'] = { stats_deny, false, true, false, },
|
||||||
['e'] = { stats_exempt, 1, 0, },
|
['e'] = { stats_exempt, false, true, false, },
|
||||||
['E'] = { stats_events, 1, 1, },
|
['E'] = { stats_events, false, true, true, },
|
||||||
['f'] = { stats_comm, 1, 1, },
|
['f'] = { stats_comm, false, true, true, },
|
||||||
['F'] = { stats_comm, 1, 1, },
|
['F'] = { stats_comm, false, true, true, },
|
||||||
['g'] = { stats_prop_klines, 1, 0, },
|
['g'] = { stats_prop_klines, false, true, false, },
|
||||||
['h'] = { stats_hubleaf, 0, 0, },
|
['h'] = { stats_hubleaf, false, false, false, },
|
||||||
['H'] = { stats_hubleaf, 0, 0, },
|
['H'] = { stats_hubleaf, false, false, false, },
|
||||||
['i'] = { stats_auth, 0, 0, },
|
['i'] = { stats_auth, false, false, false, },
|
||||||
['I'] = { stats_auth, 0, 0, },
|
['I'] = { stats_auth, false, false, false, },
|
||||||
['k'] = { stats_tklines, 0, 0, },
|
['k'] = { stats_tklines, false, false, false, },
|
||||||
['K'] = { stats_klines, 0, 0, },
|
['K'] = { stats_klines, false, false, false, },
|
||||||
['l'] = { NULL /* special */, 0, 0, },
|
['l'] = { .handler_parv = stats_ltrace, true, false, false, },
|
||||||
['L'] = { NULL /* special */, 0, 0, },
|
['L'] = { .handler_parv = stats_ltrace, true, false, false, },
|
||||||
['m'] = { stats_messages, 0, 0, },
|
['m'] = { stats_messages, false, false, false, },
|
||||||
['M'] = { stats_messages, 0, 0, },
|
['M'] = { stats_messages, false, false, false, },
|
||||||
['n'] = { stats_dnsbl, 0, 0, },
|
['n'] = { stats_dnsbl, false, false, false, },
|
||||||
['o'] = { stats_oper, 0, 0, },
|
['o'] = { stats_oper, false, false, false, },
|
||||||
['O'] = { stats_privset, 1, 0, },
|
['O'] = { stats_privset, false, true, false, },
|
||||||
['p'] = { stats_operedup, 0, 0, },
|
['p'] = { stats_operedup, false, false, false, },
|
||||||
['P'] = { stats_ports, 0, 0, },
|
['P'] = { stats_ports, false, false, false, },
|
||||||
['q'] = { stats_tresv, 1, 0, },
|
['q'] = { stats_tresv, false, true, false, },
|
||||||
['Q'] = { stats_resv, 1, 0, },
|
['Q'] = { stats_resv, false, true, false, },
|
||||||
['r'] = { stats_usage, 1, 0, },
|
['r'] = { stats_usage, false, true, false, },
|
||||||
['R'] = { stats_usage, 1, 0, },
|
['R'] = { stats_usage, false, true, false, },
|
||||||
['s'] = { stats_ssld, 1, 1, },
|
['s'] = { stats_ssld, false, true, true, },
|
||||||
['S'] = { stats_ssld, 1, 1, },
|
['S'] = { stats_ssld, false, true, true, },
|
||||||
['t'] = { stats_tstats, 1, 0, },
|
['t'] = { stats_tstats, false, true, false, },
|
||||||
['T'] = { stats_tstats, 1, 0, },
|
['T'] = { stats_tstats, false, true, false, },
|
||||||
['u'] = { stats_uptime, 0, 0, },
|
['u'] = { stats_uptime, false, false, false, },
|
||||||
['U'] = { stats_shared, 1, 0, },
|
['U'] = { stats_shared, false, true, false, },
|
||||||
['v'] = { stats_servers, 0, 0, },
|
['v'] = { stats_servers, false, false, false, },
|
||||||
['V'] = { stats_servers, 0, 0, },
|
['V'] = { stats_servers, false, false, false, },
|
||||||
['x'] = { stats_tgecos, 1, 0, },
|
['x'] = { stats_tgecos, false, true, false, },
|
||||||
['X'] = { stats_gecos, 1, 0, },
|
['X'] = { stats_gecos, false, true, false, },
|
||||||
['y'] = { stats_class, 0, 0, },
|
['y'] = { stats_class, false, false, false, },
|
||||||
['Y'] = { stats_class, 0, 0, },
|
['Y'] = { stats_class, false, false, false, },
|
||||||
['z'] = { stats_memory, 1, 0, },
|
['z'] = { stats_memory, false, true, false, },
|
||||||
['Z'] = { stats_ziplinks, 1, 0, },
|
['Z'] = { stats_ziplinks, false, true, false, },
|
||||||
['?'] = { stats_servlinks, 0, 0, },
|
['?'] = { stats_servlinks, false, false, false, },
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -223,16 +230,9 @@ m_stats(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
|
||||||
if(hunt_server (client_p, source_p, ":%s STATS %s :%s", 2, parc, parv) != HUNTED_ISME)
|
if(hunt_server (client_p, source_p, ":%s STATS %s :%s", 2, parc, parv) != HUNTED_ISME)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((statchar != 'L') && (statchar != 'l'))
|
if(tolower(statchar) != 'l')
|
||||||
{
|
/* FIXME */
|
||||||
did_stats = stats_spy(source_p, statchar, NULL);
|
did_stats = stats_spy(source_p, statchar, NULL);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Blah, stats L needs the parameters, none of the others do.. */
|
|
||||||
stats_ltrace (source_p, parc, parv);
|
|
||||||
goto stats_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if did_stats is true, a module grabbed this STATS request */
|
/* if did_stats is true, a module grabbed this STATS request */
|
||||||
if(did_stats)
|
if(did_stats)
|
||||||
|
@ -259,6 +259,9 @@ m_stats(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
|
||||||
goto stats_out;
|
goto stats_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cmd->need_parv)
|
||||||
|
cmd->handler_parv(source_p, parc, parv);
|
||||||
|
else
|
||||||
cmd->handler(source_p);
|
cmd->handler(source_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue