]>
jfr.im git - irc/quakenet/newserv.git/blob - localuser/localuserstats.c
1 /* Functions for retrieving stats from the network to local users */
4 #include "../irc/numeric.h"
5 #include "../nick/nick.h"
6 #include "../irc/irc.h"
7 #include "../core/error.h"
14 int handleserverstats(void *source
, int cargc
, char **cargv
);
15 int handleserverstatsend(void *source
, int cargc
, char **cargv
);
17 const int numerics
[] = { RPL_STATSCLINE
, RPL_STATSCOMMANDS
, RPL_STATSCONN
, RPL_STATSDLINE
,
18 RPL_STATSENGINE
, RPL_STATSHLINE
, RPL_STATSILINE
, RPL_STATSKLINE
,
19 RPL_STATSLINKINFO
, RPL_STATSLLINE
, RPL_STATSOLINE
, RPL_STATSQLINE
,
20 RPL_STATSSLINE
, RPL_STATSULINE
, RPL_STATSUPTIME
, RPL_STATSVERBOSE
,
24 registernumerichandler(219,&handleserverstats
,4);
26 for(i
=&numerics
[0];*i
;i
++)
27 registernumerichandler(*i
,&handleserverstats
,4);
32 deregisternumerichandler(219,&handleserverstats
);
34 for(i
=&numerics
[0];*i
;i
++)
35 deregisternumerichandler(*i
,&handleserverstats
);
38 /* stats look something like:
42 int handleserverstats(void *source
, int cargc
, char **cargv
) {
45 static char outbuffer
[BUFSIZE
* 2 + 5];
46 int numeric
= (int)source
, i
;
52 if (!(target
=getnickbynumeric(numerictolong(cargv
[2],5)))) {
53 Error("localuserchannel",ERR_WARNING
,"Got stats for unknown local user %s.",cargv
[2]);
57 if (homeserver(target
->numeric
) != mylongnum
) {
58 Error("localuserchannel",ERR_WARNING
,"Got stats for non-local user %s.",target
->nick
);
64 /* bloody inefficient */
65 for(i
=3;i
<cargc
;i
++) {
67 strcat(outbuffer
, " ");
69 strcat(outbuffer
, ":");
71 strcat(outbuffer
, cargv
[i
]);
73 outbuffer
[sizeof(outbuffer
) - 1] = '\0';
76 nargs
[0]=(void *)cargv
[0];
77 nargs
[1]=(void *)numeric
;
78 nargs
[2]=(void *)outbuffer
;
80 if (umhandlers
[target
->numeric
&MAXLOCALUSER
]) {
81 (umhandlers
[target
->numeric
&MAXLOCALUSER
])(target
, LU_STATS
, nargs
);
84 if (umhandlers
[target
->numeric
&MAXLOCALUSER
]) {
85 (umhandlers
[target
->numeric
&MAXLOCALUSER
])(target
, LU_STATS_END
, (void *)outbuffer
);