]> jfr.im git - irc/quakenet/newserv.git/blame - miscreply/rpong.c
CHANSERV: better batcher error handling for expired accounts/accounts with no email.
[irc/quakenet/newserv.git] / miscreply / rpong.c
CommitLineData
7bec4aeb 1/* rpong.c */
2
3#include "miscreply.h"
7bec4aeb 4#include "../irc/irc.h"
5#include "../core/error.h"
7bec4aeb 6#include "../server/server.h"
7
8#include <stdio.h>
7bec4aeb 9#include <sys/time.h>
10
11
12
13/* handle remote rpong request
14 *
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>
17 *
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
22 * cargv[4] = comment
23 *
24 *
25 * RPONG from start server to requesting user:
26 * <start server numeric> RPONG/RO <requesting user numeric> <destination server name> <ping time> :<comment>
27 *
28 * cargv[0] = requesting user numeric
29 * cargv[1] = destination server name (the pinged server, not numeric!)
30 * cargv[2] = ping time in milliseconds
31 * cargv[3] = comment
32 *
33 */
34int handlerpongmsg(void *source, int cargc, char **cargv) {
35
a7697869 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 */
7bec4aeb 46
47 /* check parameters */
48 if (cargc < 4) {
49 miscreply_needmoreparams(sourcenum, "RPONG");
50 return CMD_OK;
51 }
52
53 /* from pinged server to source server */
54 if (cargc > 4) {
55
a7697869 56 /* get the parameters */
7bec4aeb 57 sourceoper = cargv[1];
58 time_s = cargv[2];
59 time_us = cargv[3];
60 comment = cargv[4];
61
62 /* find source server */
a7697869 63 if ((i = miscreply_findserver(sourcenum, "RPING")) == -1)
7bec4aeb 64 return CMD_OK;
a7697869 65 servername = serverlist[i].name->content;
7bec4aeb 66
67 /* find requesting oper */
68 if (!(snick = miscreply_finduser(sourceoper, "RPONG")))
69 return CMD_OK;
70
7bec4aeb 71 /* get time */
72 gettimeofday(&tv, NULL);
73
74 /* calc ping */
75 sprintf(ping, "%ld", (tv.tv_sec - atoi(time_s)) * 1000 + (tv.tv_usec - atoi(time_us)) / 1000);
76
77 /* send */
a7697869 78 irc_send("%s RO %s %s %s :%s", getmynumeric(), sourceoper,
7bec4aeb 79 servername, ping, comment);
80 }
81
7bec4aeb 82 return CMD_OK;
83}