]>
jfr.im git - irc/quakenet/newserv.git/blob - miscreply/rpong.c
4 #include "../irc/irc.h"
5 #include "../core/error.h"
6 #include "../server/server.h"
13 /* handle remote rpong request
15 * RPONG from destination server to start server:
16 * <destination server numeric> RPONG/RO <start server name> <requesting user numeric> <start seconds> <start milliseconds> :<comment>
18 * cargv[0] = start server name (not numeric!)
19 * cargv[1] = request user numeric
20 * cargv[2] = start time in seconds
21 * cargv[3] = start time in milliseconds
25 * RPONG from start server to requesting user:
26 * <start server numeric> RPONG/RO <requesting user numeric> <destination server name> <ping time> :<comment>
28 * cargv[0] = requesting user numeric
29 * cargv[1] = destination server name (the pinged server, not numeric!)
30 * cargv[2] = ping time in milliseconds
34 int handlerpongmsg(void *source
, int cargc
, char **cargv
) {
36 nick
*snick
; /* struct nick for source oper nick */
37 long i
; /* index for serverlist[] */
38 char *sourcenum
= (char *)source
; /* source numeric */
39 char *sourceoper
; /* requesting operator numeric */
40 char *time_s
; /* time in seconds */
41 char *time_us
; /* time in milliseconds */
42 char *comment
; /* comment by client */
43 char *servername
; /* name of source server */
44 struct timeval tv
; /* get time */
45 static char ping
[18]; /* elapsed time */
47 /* check parameters */
49 miscreply_needmoreparams(sourcenum
, "RPONG");
53 /* from pinged server to source server */
56 /* get the parameters */
57 sourceoper
= cargv
[1];
62 /* find source server */
63 if ((i
= miscreply_findserver(sourcenum
, "RPING")) == -1)
65 servername
= serverlist
[i
].name
->content
;
67 /* find requesting oper */
68 if (!(snick
= miscreply_finduser(sourceoper
, "RPONG")))
72 gettimeofday(&tv
, NULL
);
75 sprintf(ping
, "%ld", (tv
.tv_sec
- atoi(time_s
)) * 1000 + (tv
.tv_usec
- atoi(time_us
)) / 1000);
78 irc_send("%s RO %s %s %s :%s", getmynumeric(), sourceoper
,
79 servername
, ping
, comment
);