File: 0.00.0a/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: //or die(socket_strerror(socket_last_error())); 32: $sconn=@socket_connect($socket, $host, null); 33: if (!$sconn) return 0; 34: // If you're using below PHP 5, see the manual for the microtime_float 35: // function. Instead of just using the m 36: // icrotime() function. 37: $startTime = microtime(true); 38: @socket_send($socket, $package, strLen($package), 0); 39: if (socket_read($socket, 255)) 40: { 41: @socket_close($socket); 42: return round(microtime(true) - $startTime, 4); 43: } 44: socket_close($socket); 45: return 0; 46: } 47: 48: function WebTest($url) 49: { 50: $fp=@fopen($url,"r"); 51: if ($fp<=0) return 0; 52: $ctr=0; 53: while ($body=@fgets($fp,1024)) $ctr+=sizeof($body); 54: @fclose($fp); 55: return $ctr; 56: } 57: 58: function DoTest($test,$param,$hostname="") 59: { 60: switch ($test) 61: { 62: case "web": 63: return WebTest($param); 64: break; 65: case "tcp": 66: $fp=@fsockopen($hostname,$param); 67: if ($fp<=0) return 0; 68: @fclose($fp); 69: return 1; 70: break; 71: case "wtime": 72: $startTime=microtime(true); 73: $r=WebTest($param); 74: $elapsedTime=round(microtime(true)-$startTime,4); 75: if ($r<=0) return -1; 76: return $elapsedTime; 77: break; 78: case "testloop": 79: return $param; 80: break; 81: } 82: return -1; 83: } 84: 85: function SimpleEval($test,$result) 86: { 87: switch($test) 88: { 89: case "ping": 90: if ($result<=0) return 2; 91: return 0; 92: case "web": 93: if ($result<=0) return 2; 94: return 0; 95: case "tcp": 96: if ($result==1) return 0; 97: return 2; 98: case "wtime": 99: if ($result<0) return 2; 100: return 0; 101: } 102: return -1; 103: } 104: 105: function aText($al) 106: { 107: switch($al) 108: { 109: case -1: return "Untested"; 110: case 0: return "Passed"; 111: case 1: return "Warning"; 112: case 2: return "Failed"; 113: default: return "Unknown"; 114: } 115: } 116: ?>