Mercurial > ~darius > hgwebdir.cgi > paradise_client
comparison ping.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:fba0b6e6cdc7 | 3:5a977ccbc7a9 |
---|---|
1 /* $Id: ping.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ | |
2 | |
3 /* | |
4 * ping.c | |
5 * | |
6 */ | |
7 | |
8 #include "copyright2.h" | |
9 #include <stdio.h> | |
10 #include <sys/types.h> | |
11 #include <sys/time.h> | |
12 #include <netinet/in.h> | |
13 #include <math.h> | |
14 #include <errno.h> | |
15 #include "Wlib.h" | |
16 #include "defs.h" | |
17 #include "struct.h" | |
18 #include "data.h" | |
19 #include "packets.h" | |
20 #include "proto.h" | |
21 | |
22 /* These are used only in pingstats.c */ | |
23 | |
24 int ping_iloss_sc = 0; /* inc % loss 0--100, server to client */ | |
25 int ping_iloss_cs = 0; /* inc % loss 0--100, client to server */ | |
26 int ping_tloss_sc = 0; /* total % loss 0--100, server to client */ | |
27 int ping_tloss_cs = 0; /* total % loss 0--100, client to server */ | |
28 int ping_lag = 0; /* delay in ms of last ping */ | |
29 int ping_av = 0; /* rt time */ | |
30 int ping_sd = 0; /* std deviation */ | |
31 | |
32 static int sum, n; | |
33 static int M, var; | |
34 static double s2; | |
35 | |
36 void sendServerPingResponse P((int number)); | |
37 void calc_lag P((void)); | |
38 | |
39 void | |
40 handlePing(packet) /* SP_PING */ | |
41 struct ping_spacket *packet; | |
42 { | |
43 ping = 1; /* we got a ping */ | |
44 | |
45 /* | |
46 printf("ping received at %d (lag: %d)\n", msetime(), (int)packet->lag); | |
47 */ | |
48 sendServerPingResponse((int) packet->number); | |
49 ping_lag = ntohs(packet->lag); | |
50 ping_iloss_sc = (int) packet->iloss_sc; | |
51 ping_iloss_cs = (int) packet->iloss_cs; | |
52 ping_tloss_sc = (int) packet->tloss_sc; | |
53 ping_tloss_cs = (int) packet->tloss_cs; | |
54 | |
55 calc_lag(); | |
56 | |
57 if (W_IsMapped(pStats)) /* pstat window */ | |
58 updatePStats(); | |
59 } | |
60 | |
61 void | |
62 startPing() | |
63 { | |
64 static | |
65 struct ping_cpacket packet; | |
66 extern int serverDead; | |
67 | |
68 packet.type = CP_PING_RESPONSE; | |
69 packet.pingme = 1; | |
70 | |
71 if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) != | |
72 sizeof(struct ping_cpacket)) { | |
73 printf("gwrite failed.\n"); | |
74 serverDead = 1; | |
75 } | |
76 } | |
77 | |
78 void | |
79 stopPing() | |
80 { | |
81 static | |
82 struct ping_cpacket packet; | |
83 extern int serverDead; | |
84 | |
85 ping = 0; | |
86 packet.type = CP_PING_RESPONSE; | |
87 packet.pingme = 0; | |
88 | |
89 if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) != | |
90 sizeof(struct ping_cpacket)) { | |
91 printf("gwrite failed.\n"); | |
92 serverDead = 1; | |
93 } | |
94 } | |
95 | |
96 void | |
97 sendServerPingResponse(number) /* CP_PING_RESPONSE */ | |
98 int number; | |
99 { | |
100 struct ping_cpacket packet; | |
101 int s; | |
102 extern int serverDead; | |
103 | |
104 if (udpSock >= 0) { | |
105 s = udpSock; | |
106 packets_sent++; | |
107 } else | |
108 s = sock; | |
109 | |
110 packet.type = CP_PING_RESPONSE; | |
111 packet.pingme = (char) ping; | |
112 packet.number = (unsigned char) number; | |
113 /* count this one */ | |
114 packet.cp_sent = htonl(packets_sent); | |
115 packet.cp_recv = htonl(packets_received); | |
116 | |
117 /* | |
118 printf("ping response sent at %d\n", msetime()); | |
119 */ | |
120 | |
121 if (gwrite(s, (char *) &packet, sizeof(struct ping_cpacket)) != | |
122 sizeof(struct ping_cpacket)) { | |
123 printf("gwrite failed.\n"); | |
124 serverDead = 1; | |
125 } | |
126 } | |
127 | |
128 void | |
129 calc_lag() | |
130 { | |
131 /* probably ghostbusted */ | |
132 /* without this things can get really bad */ | |
133 if (ping_lag > 2000 || ping_lag == 0) | |
134 return; | |
135 | |
136 n++; | |
137 sum += ping_lag; | |
138 s2 += (ping_lag * ping_lag); | |
139 if (n == 1) | |
140 return; | |
141 | |
142 M = sum / n; | |
143 var = (s2 - M * sum) / (n - 1); | |
144 | |
145 ping_av = M; | |
146 ping_sd = (int) sqrt((double) var); | |
147 } |