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