File:
0.01.2a/base/tests.inc.php (
View as Code)
1: 2: function icmpChecksum($data)
3: {
4: if (strlen($data)%2)
5: $data .= "\x00";
6:
7: $bit = unpack('n*', $data);
8: $sum = array_sum($bit);
9:
10: while ($sum >> 16)
11: $sum = ($sum >> 16) + ($sum & 0xffff);
12:
13: return pack('n*', ~$sum);
14: }
15: function PingTest($host)
16: {
17: // Checksum calculation function
18:
19: // Making the package
20: $type= "\x08";
21: $code= "\x00";
22: $checksum= "\x00\x00";
23: $identifier = "\x00\x00";
24: $seqNumber = "\x00\x00";
25: $data= "FreeNATS";
26: $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
27: $checksum = icmpChecksum($package); // Calculate the checksum
28: $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
29: // And off to the sockets
30: $socket = @socket_create(AF_INET, SOCK_RAW, 1);
31: if (!$socket) return 0;
32: //or die(socket_strerror(socket_last_error()));
33: $sconn=@socket_connect($socket, $host, null);
34: if (!$sconn) return 0;
35: // If you're using below PHP 5, see the manual for the microtime_float
36: // function. Instead of just using the m
37: // icrotime() function.
38: $startTime = microtime(true);
39: @socket_send($socket, $package, strLen($package), 0);
40: if (socket_read($socket, 255))
41: {
42: @socket_close($socket);
43: return round(microtime(true) - $startTime, 4);
44: }
45: socket_close($socket);
46: return 0;
47: }
48:
49: function WebTest($url)
50: {
51: $fp=@fopen($url,"r");
52: if ($fp<=0) return 0;
53: $ctr=0;
54: while ($body=@fgets($fp,1024)) $ctr+=sizeof($body);
55: @fclose($fp);
56: return $ctr;
57: }
58:
59: function DoTest($test,$param,$hostname="")
60: {
61: switch ($test)
62: {
63: case "web":
64: return WebTest($param);
65: break;
66: case "tcp":
67: $fp=@fsockopen($hostname,$param);
68: if ($fp<=0) return 0;
69: @fclose($fp);
70: return 1;
71: break;
72: case "wtime":
73: $startTime=microtime(true);
74: $r=WebTest($param);
75: $elapsedTime=round(microtime(true)-$startTime,4);
76: if ($r<=0) return -1;
77: return $elapsedTime;
78: break;
79: case "testloop":
80: return $param;
81: break;
82: }
83: return -1;
84: }
85:
86: function SimpleEval($test,$result)
87: {
88: switch($test)
89: {
90: case "ping":
91: if ($result<=0) return 2;
92: return 0;
93: case "web":
94: if ($result<=0) return 2;
95: return 0;
96: case "tcp":
97: if ($result==1) return 0;
98: return 2;
99: case "wtime":
100: if ($result<0) return 2;
101: return 0;
102: }
103: return -1;
104: }
105:
106: function aText($al)
107: {
108: switch($al)
109: {
110: case -1: return "Untested";
111: case 0: return "Passed";
112: case 1: return "Warning";
113: case 2: return "Failed";
114: default: return "Unknown";
115: }
116: }
117: ?>