]>
jfr.im git - irc/quakenet/newserv.git/blob - localuser/localuserstats.c
1 /* Functions for retrieving stats from the network to local users */
4 #include "../nick/nick.h"
5 #include "../irc/irc.h"
6 #include "../core/error.h"
13 int handleserverstats(void *source
, int cargc
, char **cargv
);
14 int handleserverstatsend(void *source
, int cargc
, char **cargv
);
16 #define RPL_STATSCLINE 213
17 #define RPL_STATSCOMMANDS 212
18 #define RPL_STATSCONN 250
19 #define RPL_STATSDLINE 275
20 #define RPL_STATSENGINE 237
21 #define RPL_STATSHLINE 244
22 #define RPL_STATSILINE 215
23 #define RPL_STATSKLINE 216
24 #define RPL_STATSLINKINFO 211
25 #define RPL_STATSLLINE 241
26 #define RPL_STATSOLINE 243
27 #define RPL_STATSQLINE 228
28 #define RPL_STATSSLINE 398
29 #define RPL_STATSULINE 248
30 #define RPL_STATSUPTIME 242
31 #define RPL_STATSVERBOSE 236
34 const int numerics
[] = { RPL_STATSCLINE
, RPL_STATSCOMMANDS
, RPL_STATSCONN
, RPL_STATSDLINE
,
35 RPL_STATSENGINE
, RPL_STATSHLINE
, RPL_STATSILINE
, RPL_STATSKLINE
,
36 RPL_STATSLINKINFO
, RPL_STATSLLINE
, RPL_STATSOLINE
, RPL_STATSQLINE
,
37 RPL_STATSSLINE
, RPL_STATSULINE
, RPL_STATSUPTIME
, RPL_STATSVERBOSE
,
41 registernumerichandler(219,&handleserverstats
,4);
43 for(i
=&numerics
[0];*i
;i
++)
44 registernumerichandler(*i
,&handleserverstats
,4);
49 deregisternumerichandler(219,&handleserverstats
);
51 for(i
=&numerics
[0];*i
;i
++)
52 deregisternumerichandler(*i
,&handleserverstats
);
55 /* stats look something like:
59 int handleserverstats(void *source
, int cargc
, char **cargv
) {
62 static char outbuffer
[BUFSIZE
* 2 + 5];
63 long numeric
= (long)source
, i
;
69 if (!(target
=getnickbynumeric(numerictolong(cargv
[2],5)))) {
70 Error("localuserchannel",ERR_WARNING
,"Got stats for unknown local user %s.",cargv
[2]);
74 if (homeserver(target
->numeric
) != mylongnum
) {
75 Error("localuserchannel",ERR_WARNING
,"Got stats for non-local user %s.",target
->nick
);
81 /* bloody inefficient */
82 for(i
=3;i
<cargc
;i
++) {
84 strcat(outbuffer
, " ");
86 strcat(outbuffer
, ":");
88 strcat(outbuffer
, cargv
[i
]);
90 outbuffer
[sizeof(outbuffer
) - 1] = '\0';
93 nargs
[0]=(void *)cargv
[0];
94 nargs
[1]=(void *)numeric
;
95 nargs
[2]=(void *)outbuffer
;
97 if (umhandlers
[target
->numeric
&MAXLOCALUSER
]) {
98 (umhandlers
[target
->numeric
&MAXLOCALUSER
])(target
, LU_STATS
, nargs
);
101 if (umhandlers
[target
->numeric
&MAXLOCALUSER
]) {
102 (umhandlers
[target
->numeric
&MAXLOCALUSER
])(target
, LU_STATS_END
, (void *)outbuffer
);