4
#include "copyright2.h"
8
#include INC_NETINET_IN
19
#include "pingstats.h"
24
/* These are used only in pingstats.c */
26
int ping_iloss_sc = 0; /* inc % loss 0--100, server
30
int ping_iloss_cs = 0; /* inc % loss 0--100, client
34
int ping_tloss_sc = 0; /* total % loss 0--100, *
37
* * server to client */
38
int ping_tloss_cs = 0; /* total % loss 0--100, *
41
* * client to server */
42
int ping_lag = 0; /* delay in ms of last ping */
43
int ping_av = 0; /* rt time */
44
int ping_sd = 0; /* std deviation */
50
static void sendServerPingResponse(int number);
51
static void calc_lag(void);
53
void handlePing(struct ping_spacket *packet) /* SP_PING */
55
ping = 1; /* we got a ping */
57
/* printf("ping received at %d (lag: %d)\n", msetime(), (int)packet->lag); */
58
sendServerPingResponse((int) packet->number);
59
ping_lag = ntohs(packet->lag);
60
ping_iloss_sc = (int) packet->iloss_sc;
61
ping_iloss_cs = (int) packet->iloss_cs;
62
ping_tloss_sc = (int) packet->tloss_sc;
63
ping_tloss_cs = (int) packet->tloss_cs;
67
if (W_IsMapped(pStats)) /* pstat window */
74
struct ping_cpacket packet;
75
extern int serverDead;
77
packet.type = CP_PING_RESPONSE;
80
if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) !=
81
sizeof (struct ping_cpacket))
83
printf("gwrite failed.\n");
91
struct ping_cpacket packet;
92
extern int serverDead;
94
packet.type = CP_PING_RESPONSE;
97
if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) !=
98
sizeof (struct ping_cpacket))
100
printf("gwrite failed.\n");
106
static void sendServerPingResponse(int number) /* CP_PING_RESPONSE */
108
struct ping_cpacket packet;
110
extern int serverDead;
120
bzero(&packet, sizeof(packet));
121
packet.type = CP_PING_RESPONSE;
122
packet.pingme = (char) ping;
123
packet.number = (unsigned char) number;
125
packet.cp_sent = htonl(packets_sent);
126
packet.cp_recv = htonl(packets_received);
128
/* printf("ping response sent at %d\n", msetime()); */
130
if (gwrite(s, (char *) &packet, sizeof(struct ping_cpacket)) !=
131
sizeof (struct ping_cpacket))
135
if (gwrite(s, (char *) &packet, sizeof(struct ping_cpacket)) !=
136
sizeof (struct ping_cpacket))
139
printf("gwrite failed again.\n");
145
static void calc_lag(void)
149
/* probably ghostbusted */
150
if (ping_lag > 2000 || ping_lag == 0)
156
s2 += (ping_lag * ping_lag);
161
var = (s2 - M * sum) / (n - 1);
164
ping_sd = (int) sqrt((double) var);