File: 0.00.0a/base/tests.inc.php (View as HTML)

  1: <?php // tests.inc.php
  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: ?>