]>
jfr.im git - irc/quakenet/newserv.git/blob - miscreply/rping.c
4 #include "../irc/irc.h"
5 #include "../core/error.h"
13 /* handle remote rping request
15 * RPING from requesting user to start server:
16 * <user numeric> RPING/RI <server> <target server numeric> :<comment>
19 * server(mask) as given by user
20 * a * indicates the request is for all servers (future snircd extension?)
21 * cargv[1] = target server numeric
25 * RPING from start server to destination server:
26 * <start server numeric> RPING/RI <target server numeric> <requesting user numeric> <start seconds> <start milliseconds> :<comment>
28 * cargv[0] = target server numeric
29 * can be a * in which case the request is for all servers (future snircd extension?)
30 * cargv[1] = requesting user numeric
31 * cargv[2] = start time in seconds
32 * cargv[3] = start time in milliseconds
36 int handlerpingmsg(void *source
, int cargc
, char **cargv
) {
38 nick
*snick
; /* struct nick for source nick */
39 long i
; /* index for serverlist[] */
40 char *sourcenum
= (char *)source
; /* source numeric */
41 char *destserver
; /* destination server mask */
42 char *destnum
; /* destination server numeric */
43 char *sourceoper
; /* requesting operator numeric */
44 char *time_s
; /* time in seconds */
45 char *time_us
; /* time in milliseconds */
46 char *comment
; /* comment by client */
47 struct timeval tv
; /* get start time in seconds and milliseconds */
50 if (strlen(sourcenum
) == 2) {
52 /* check parameters */
54 miscreply_needmoreparams(sourcenum
, "RPING");
58 /* get the parameters */
59 /*server = cargv[0];*/
60 sourceoper
= cargv
[1];
65 /* find source server */
66 if (miscreply_findserver(sourcenum
, "RPING") == -1)
69 /* find source user */
70 if (!(snick
= miscreply_finduser(sourceoper
, "RPING")))
73 /* send RPONG to operator */
74 irc_send("%s RO %s %s %s %s :%s", getmynumeric(), sourcenum
,
75 sourceoper
, time_s
, time_us
, comment
);
79 else if (strlen(sourcenum
) == 5) {
81 /* check parameters */
83 miscreply_needmoreparams(sourcenum
, "RPING");
87 /* get the parameters */
88 destserver
= cargv
[0];
89 /*server = cargv[1];*/
92 /* find source user */
93 if (!(snick
= miscreply_finduser(sourcenum
, "RPING")))
96 /* request is for * (all servers) */
97 if ((destserver
[0] == '*' && destserver
[1] == '\0'))
100 /* find destination server */
101 else if ((i
= miscreply_findservermatch(sourcenum
, destserver
)) == -1)
105 * do the same as ircu in this case, nothing
107 else if (i
== mylongnum
)
110 /* found valid destination server */
112 destnum
= longtonumeric(i
, 2);
115 gettimeofday(&tv
, NULL
);
117 /* send RPING to server */
118 irc_send("%s RI %s %s %lu %lu :%s", getmynumeric(), destnum
,
119 sourcenum
, tv
.tv_sec
, tv
.tv_usec
, comment
);