File:
0.02.13a/server/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: // Make Package
18: $type= "\x08";
19: $code= "\x00";
20: $checksum= "\x00\x00";
21: $identifier = "\x00\x00";
22: $seqNumber = "\x00\x00";
23: $data= "FreeNATS";
24: $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
25: $checksum = icmpChecksum($package); // Calculate the checksum
26: $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
27:
28: // Create Socket
29: $socket = @socket_create(AF_INET, SOCK_RAW, 1);
30: //or die(socket_strerror(socket_last_error()));
31: if (!$socket) return 0;
32:
33: // Set Non-Blocking
34: @socket_set_nonblock($socket);
35:
36: // Connect Socket
37: $sconn=@socket_connect($socket, $host, null);
38: if (!$sconn) return 0;
39:
40: // Start Timer
41: $startTime = microtime(true);
42:
43: // Send Data
44: @socket_send($socket, $package, strLen($package), 0);
45:
46: // Read Data
47: $keepon=true;
48: if (isset($NATS)) $timeout=$NATS->Cfg->Get("test.icmp.timeout",10);
49: else $timeout=10;
50: while( (!(@socket_read($socket, 255))) && $keepon)
51: { // basically just kill time
52: // consider putting some sort of sleepy thing here to lower load but would f* with figures!
53:
54: if ( (microtime(true) - $startTime) > $timeout )
55: $keepon=false;
56: }
57:
58: if ($keepon) // didn't time out - read data
59: {
60: @socket_close($socket);
61: return round(microtime(true) - $startTime, 4);
62: }
63:
64: // Socket timed out
65: socket_close($socket);
66: return 0;
67: }
68:
69: function WebTest($url)
70: {
71: $fp=@fopen($url,"r");
72: if ($fp<=0) return 0;
73: $ctr=0;
74: while ($body=@fgets($fp,1024)) $ctr+=sizeof($body);
75: @fclose($fp);
76: return $ctr;
77: }
78:
79: function DoTest($test,$param,$hostname="")
80: {
81: switch ($test)
82: {
83: case "web":
84: return WebTest($param);
85: break;
86: case "tcp":
87: $fp=@fsockopen($hostname,$param);
88: if ($fp<=0) return 0;
89: @fclose($fp);
90: return 1;
91: break;
92: case "wtime":
93: $startTime=microtime(true);
94: $r=WebTest($param);
95: $elapsedTime=round(microtime(true)-$startTime,4);
96: if ($r<=0) return -1;
97: return $elapsedTime;
98: break;
99: case "testloop":
100: return $param;
101: break;
102: }
103: return -1;
104: }
105:
106: function SimpleEval($test,$result)
107: {
108: switch($test)
109: {
110: case "ping":
111: if ($result<=0) return 2;
112: return 0;
113: case "web":
114: if ($result<=0) return 2;
115: return 0;
116: case "tcp":
117: if ($result==1) return 0;
118: return 2;
119: case "wtime":
120: if ($result<0) return 2;
121: return 0;
122: }
123: return -1;
124: }
125:
126: function aText($al)
127: {
128: switch($al)
129: {
130: case -1: return "Untested";
131: case 0: return "Passed";
132: case 1: return "Warning";
133: case 2: return "Failed";
134: default: return "Unknown";
135: }
136: }
137: ?>