File: 0.02.14a/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: ?>