Initial commit

This commit is contained in:
Wruczek
2016-06-28 23:18:59 +02:00
parent e321e10551
commit e49c2c27ad
390 changed files with 22561 additions and 0 deletions

View File

@ -0,0 +1,269 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Char.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Char
* @brief Helper class for char handling.
*/
class TeamSpeak3_Helper_Char
{
/**
* Stores the original character.
*
* @var string
*/
protected $char = null;
/**
* The TeamSpeak3_Helper_Char constructor.
*
* @param string $var
* @throws TeamSpeak3_Helper_Exception
* @return TeamSpeak3_Helper_Char
*/
public function __construct($char)
{
if(strlen($char) != 1)
{
throw new TeamSpeak3_Helper_Exception("char parameter may not contain more or less than one character");
}
$this->char = strval($char);
}
/**
* Returns true if the character is a letter.
*
* @return boolean
*/
public function isLetter()
{
return ctype_alpha($this->char);
}
/**
* Returns true if the character is a decimal digit.
*
* @return boolean
*/
public function isDigit()
{
return ctype_digit($this->char);
}
/**
* Returns true if the character is a space.
*
* @return boolean
*/
public function isSpace()
{
return ctype_space($this->char);
}
/**
* Returns true if the character is a mark.
*
* @return boolean
*/
public function isMark()
{
return ctype_punct($this->char);
}
/**
* Returns true if the character is a control character (i.e. "\t").
*
* @return boolean
*/
public function isControl()
{
return ctype_cntrl($this->char);
}
/**
* Returns true if the character is a printable character.
*
* @return boolean
*/
public function isPrintable()
{
return ctype_print($this->char);
}
/**
* Returns true if the character is the Unicode character 0x0000 ("\0").
*
* @return boolean
*/
public function isNull()
{
return ($this->char === "\0") ? TRUE : FALSE;
}
/**
* Returns true if the character is an uppercase letter.
*
* @return boolean
*/
public function isUpper()
{
return ($this->char === strtoupper($this->char)) ? TRUE : FALSE;
}
/**
* Returns true if the character is a lowercase letter.
*
* @return boolean
*/
public function isLower()
{
return ($this->char === strtolower($this->char)) ? TRUE : FALSE;
}
/**
* Returns the uppercase equivalent if the character is lowercase.
*
* @return TeamSpeak3_Helper_Char
*/
public function toUpper()
{
return ($this->isUpper()) ? $this : new self(strtoupper($this));
}
/**
* Returns the lowercase equivalent if the character is uppercase.
*
* @return TeamSpeak3_Helper_Char
*/
public function toLower()
{
return ($this->isLower()) ? $this : new self(strtolower($this));
}
/**
* Returns the ascii value of the character.
*
* @return integer
*/
public function toAscii()
{
return ord($this->char);
}
/**
* Returns the Unicode value of the character.
*
* @return integer
*/
public function toUnicode()
{
$h = ord($this->char{0});
if($h <= 0x7F)
{
return $h;
}
else if($h < 0xC2)
{
return FALSE;
}
else if($h <= 0xDF)
{
return ($h & 0x1F) << 6 | (ord($this->char{1}) & 0x3F);
}
else if($h <= 0xEF)
{
return ($h & 0x0F) << 12 | (ord($this->char{1}) & 0x3F) << 6 | (ord($this->char{2}) & 0x3F);
}
else if($h <= 0xF4)
{
return ($h & 0x0F) << 18 | (ord($this->char{1}) & 0x3F) << 12 | (ord($this->char{2}) & 0x3F) << 6 | (ord($this->char{3}) & 0x3F);
}
else
{
return FALSE;
}
}
/**
* Returns the hexadecimal value of the char.
*
* @return string
*/
public function toHex()
{
return strtoupper(dechex($this->toAscii()));
}
/**
* Returns the TeamSpeak3_Helper_Char based on a given hex value.
*
* @param string $hex
* @throws TeamSpeak3_Helper_Exception
* @return TeamSpeak3_Helper_Char
*/
public static function fromHex($hex)
{
if(strlen($hex) != 2)
{
throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number");
}
return new self(chr(hexdec($hex)));
}
/**
* Returns the character as a standard string.
*
* @return string
*/
public function toString()
{
return $this->char;
}
/**
* Returns the integer value of the character.
*
* @return integer
*/
public function toInt()
{
return intval($this->char);
}
/**
* Returns the character as a standard string.
*
* @return string
*/
public function __toString()
{
return $this->char;
}
}

View File

@ -0,0 +1,349 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Convert.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Convert
* @brief Helper class for data conversion.
*/
class TeamSpeak3_Helper_Convert
{
/**
* Converts bytes to a human readable value.
*
* @param integer $bytes
* @return string
*/
public static function bytes($bytes)
{
$kbytes = sprintf("%.02f", $bytes/1024);
$mbytes = sprintf("%.02f", $kbytes/1024);
$gbytes = sprintf("%.02f", $mbytes/1024);
$tbytes = sprintf("%.02f", $gbytes/1024);
if($tbytes >= 1)
return $tbytes . " TB";
if($gbytes >= 1)
return $gbytes . " GB";
if($mbytes >= 1)
return $mbytes . " MB";
if($kbytes >= 1)
return $kbytes . " KB";
return $bytes . " B";
}
/**
* Converts seconds/milliseconds to a human readable value.
*
* @param integer $seconds
* @param boolean $is_ms
* @param string $format
* @return string
*/
public static function seconds($seconds, $is_ms = FALSE, $format = "%dD %02d:%02d:%02d")
{
if($is_ms) $seconds = $seconds/1000;
return sprintf($format, $seconds/60/60/24, ($seconds/60/60)%24, ($seconds/60)%60, $seconds%60);
}
/**
* Converts a given codec ID to a human readable name.
*
* @param integer $codec
* @return string
*/
public static function codec($codec)
{
if($codec == TeamSpeak3::CODEC_SPEEX_NARROWBAND)
return "Speex Narrowband";
if($codec == TeamSpeak3::CODEC_SPEEX_WIDEBAND)
return "Speex Wideband";
if($codec == TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND)
return "Speex Ultra-Wideband";
if($codec == TeamSpeak3::CODEC_CELT_MONO)
return "CELT Mono";
if($codec == TeamSpeak3::CODEC_OPUS_VOICE)
return "Opus Voice";
if($codec == TeamSpeak3::CODEC_OPUS_MUSIC)
return "Opus Music";
return "Unknown";
}
/**
* Converts a given group type ID to a human readable name.
*
* @param integer $type
* @return string
*/
public static function groupType($type)
{
if($type == TeamSpeak3::GROUP_DBTYPE_TEMPLATE)
return "Template";
if($type == TeamSpeak3::GROUP_DBTYPE_REGULAR)
return "Regular";
if($type == TeamSpeak3::GROUP_DBTYPE_SERVERQUERY)
return "ServerQuery";
return "Unknown";
}
/**
* Converts a given permission type ID to a human readable name.
*
* @param integer $type
* @return string
*/
public static function permissionType($type)
{
if($type == TeamSpeak3::PERM_TYPE_SERVERGROUP)
return "Server Group";
if($type == TeamSpeak3::PERM_TYPE_CLIENT)
return "Client";
if($type == TeamSpeak3::PERM_TYPE_CHANNEL)
return "Channel";
if($type == TeamSpeak3::PERM_TYPE_CHANNELGROUP)
return "Channel Group";
if($type == TeamSpeak3::PERM_TYPE_CHANNELCLIENT)
return "Channel Client";
return "Unknown";
}
/**
* Converts a given permission category value to a human readable name.
*
* @param integer $pcat
* @return string
*/
public static function permissionCategory($pcat)
{
if($pcat == TeamSpeak3::PERM_CAT_GLOBAL)
return "Global";
if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_INFORMATION)
return "Global / Information";
if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SERVER_MGMT)
return "Global / Virtual Server Management";
if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_ADM_ACTIONS)
return "Global / Administration";
if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SETTINGS)
return "Global / Settings";
if($pcat == TeamSpeak3::PERM_CAT_SERVER)
return "Virtual Server";
if($pcat == TeamSpeak3::PERM_CAT_SERVER_INFORMATION)
return "Virtual Server / Information";
if($pcat == TeamSpeak3::PERM_CAT_SERVER_ADM_ACTIONS)
return "Virtual Server / Administration";
if($pcat == TeamSpeak3::PERM_CAT_SERVER_SETTINGS)
return "Virtual Server / Settings";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL)
return "Channel";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_INFORMATION)
return "Channel / Information";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_CREATE)
return "Channel / Create";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_MODIFY)
return "Channel / Modify";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_DELETE)
return "Channel / Delete";
if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_ACCESS)
return "Channel / Access";
if($pcat == TeamSpeak3::PERM_CAT_GROUP)
return "Group";
if($pcat == TeamSpeak3::PERM_CAT_GROUP_INFORMATION)
return "Group / Information";
if($pcat == TeamSpeak3::PERM_CAT_GROUP_CREATE)
return "Group / Create";
if($pcat == TeamSpeak3::PERM_CAT_GROUP_MODIFY)
return "Group / Modify";
if($pcat == TeamSpeak3::PERM_CAT_GROUP_DELETE)
return "Group / Delete";
if($pcat == TeamSpeak3::PERM_CAT_CLIENT)
return "Client";
if($pcat == TeamSpeak3::PERM_CAT_CLIENT_INFORMATION)
return "Client / Information";
if($pcat == TeamSpeak3::PERM_CAT_CLIENT_ADM_ACTIONS)
return "Client / Admin";
if($pcat == TeamSpeak3::PERM_CAT_CLIENT_BASICS)
return "Client / Basics";
if($pcat == TeamSpeak3::PERM_CAT_CLIENT_MODIFY)
return "Client / Modify";
if($pcat == TeamSpeak3::PERM_CAT_FILETRANSFER)
return "File Transfer";
if($pcat == TeamSpeak3::PERM_CAT_NEEDED_MODIFY_POWER)
return "Grant";
return "Unknown";
}
/**
* Converts a given log level ID to a human readable name and vice versa.
*
* @param mixed $level
* @return string
*/
public static function logLevel($level)
{
if(is_numeric($level))
{
if($level == TeamSpeak3::LOGLEVEL_CRITICAL)
return "CRITICAL";
if($level == TeamSpeak3::LOGLEVEL_ERROR)
return "ERROR";
if($level == TeamSpeak3::LOGLEVEL_DEBUG)
return "DEBUG";
if($level == TeamSpeak3::LOGLEVEL_WARNING)
return "WARNING";
if($level == TeamSpeak3::LOGLEVEL_INFO)
return "INFO";
return "DEVELOP";
}
else
{
if(strtoupper($level) == "CRITICAL")
return TeamSpeak3::LOGLEVEL_CRITICAL;
if(strtoupper($level) == "ERROR")
return TeamSpeak3::LOGLEVEL_ERROR;
if(strtoupper($level) == "DEBUG")
return TeamSpeak3::LOGLEVEL_DEBUG;
if(strtoupper($level) == "WARNING")
return TeamSpeak3::LOGLEVEL_WARNING;
if(strtoupper($level) == "INFO")
return TeamSpeak3::LOGLEVEL_INFO;
return TeamSpeak3::LOGLEVEL_DEVEL;
}
}
/**
* Converts a specified log entry string into an array containing the data.
*
* @param string $entry
* @return array
*/
public static function logEntry($entry)
{
$parts = explode("|", $entry, 5);
$array = array();
if(count($parts) != 5)
{
$array["timestamp"] = 0;
$array["level"] = TeamSpeak3::LOGLEVEL_ERROR;
$array["channel"] = "ParamParser";
$array["server_id"] = "";
$array["msg"] = TeamSpeak3_Helper_String::factory("convert error (" . trim($entry) . ")");
$array["msg_plain"] = $entry;
$array["malformed"] = TRUE;
}
else
{
$array["timestamp"] = strtotime(trim($parts[0]));
$array["level"] = self::logLevel(trim($parts[1]));
$array["channel"] = trim($parts[2]);
$array["server_id"] = trim($parts[3]);
$array["msg"] = TeamSpeak3_Helper_String::factory(trim($parts[4]));
$array["msg_plain"] = $entry;
$array["malformed"] = FALSE;
}
return $array;
}
/**
* Converts a given string to a ServerQuery password hash.
*
* @param string $plain
* @return string
*/
public static function password($plain)
{
return base64_encode(sha1($plain, TRUE));
}
/**
* Returns a client-like formatted version of the TeamSpeak 3 version string.
*
* @param string $version
* @param string $format
* @return string
*/
public static function version($version, $format = "Y-m-d h:i:s")
{
if(!$version instanceof TeamSpeak3_Helper_String)
{
$version = new TeamSpeak3_Helper_String($version);
}
$buildno = $version->section("[", 1)->filterDigits()->toInt();
return ($buildno <= 15001) ? $version : $version->section("[")->append("(" . date($format, $buildno) . ")");
}
/**
* Returns a client-like short-formatted version of the TeamSpeak 3 version string.
*
* @param string $version
* @return string
*/
public static function versionShort($version)
{
if(!$version instanceof TeamSpeak3_Helper_String)
{
$version = new TeamSpeak3_Helper_String($version);
}
return $version->section(" ", 0);
}
/**
* Tries to detect the type of an image by a given string and returns it.
*
* @param string $binary
* @return string
*/
public static function imageMimeType($binary)
{
if(!preg_match('/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/', $binary, $matches))
{
return "application/octet-stream";
}
$type = array(
1 => "image/jpeg",
2 => "image/gif",
3 => "image/png",
4 => "image/x-windows-bmp",
5 => "image/tiff",
6 => "image/x-ilbm",
);
return $type[count($matches)-1];
}
}

View File

@ -0,0 +1,482 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Crypt.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Crypt
* @brief Helper class for data encryption.
*/
class TeamSpeak3_Helper_Crypt
{
/**
* Stores the secret passphrase to encrypt or decrypt a given string.
*
* @var string
*/
protected $passphrase = null;
/**
* Stores an array containing 18 32-bit entries.
*
* @var array
*/
protected $p = array();
/**
* Stores an array containing 4 sub-arrays with 256 32-bit entries.
*
* @var array
*/
protected $s = array();
/**
* The TeamSpeak3_Helper_Crypt constructor.
*
* @param string $secret
* @return TeamSpeak3_Helper_Crypt
*/
public function __construct($secret)
{
$this->setDefaultKeys();
$this->setSecretKey($secret);
}
/**
* Encrypts a given string.
*
* @param string $string
* @return string
*/
public function encrypt($string)
{
$string = trim($string);
$encryp = "";
$length = strlen($string);
$string .= str_repeat(chr(0), (8-($length%8))%8);
for($i = 0; $i < $length; $i += 8)
{
list(,$xl,$xr) = unpack("N2", substr($string, $i, 8));
$this->encipher($xl, $xr);
$encryp .= pack("N2", $xl, $xr);
}
return base64_encode($encryp);
}
/**
* Decrypts a given string.
*
* @param string $string
* @return string
*/
public function decrypt($string)
{
$string = base64_decode($string);
$decryp = "";
$length = strlen($string);
$string .= str_repeat(chr(0), (8-($length%8))%8);
for($i = 0; $i < $length; $i += 8)
{
list(,$xl,$xr) = unpack("N2", substr($string, $i, 8));
$this->decipher($xl, $xr);
$decryp .= pack("N2", $xl, $xr);
}
return trim($decryp);
}
/**
* Enciphers a single 64-bit block.
*
* @param integer $xl
* @param integer $xr
*/
protected function encipher(&$xl, &$xr)
{
for($i = 0; $i < 16; $i++)
{
$temp = $xl ^ $this->p[$i];
$xl = ((($this->s[0][($temp>>24) & 255] + $this->s[1][($temp>>16) & 255]) ^ $this->s[2][($temp>>8) & 255]) + $this->s[3][$temp & 255]) ^ $xr;
$xr = $temp;
}
$xr = $xl ^ $this->p[16];
$xl = $temp ^ $this->p[17];
}
/**
* Deciphers a single 64-bit block
*
* @param integer $xl
* @param integer $xr
* @return void
*/
protected function decipher(&$xl, &$xr)
{
for($i = 17; $i > 1; $i--)
{
$temp = $xl ^ $this->p[$i];
$xl = ((($this->s[0][($temp>>24) & 255] + $this->s[1][($temp>>16) & 255]) ^ $this->s[2][($temp>>8) & 255]) + $this->s[3][$temp & 255]) ^ $xr;
$xr = $temp;
}
$xr = $xl ^ $this->p[1];
$xl = $temp ^ $this->p[0];
}
/**
* Sets the secret key using the specified pasphrase.
*
* @param string $passphrase
* @throws Habitat_Exception
* @return void
*/
protected function setSecretKey($passphrase)
{
$length = strlen($passphrase);
if(strlen($passphrase) < 1 || strlen($passphrase) > 56)
{
throw new TeamSpeak3_Helper_Exception("secret passphrase must contain at least one but less than 56 characters");
}
$k = 0;
$data = 0;
$datal = 0;
$datar = 0;
for($i = 0; $i < 18; $i++)
{
$data = 0;
for($j = 4; $j > 0; $j--)
{
$data = $data << 8 | ord($passphrase{$k});
$k = ($k+1) % $length;
}
$this->p[$i] ^= $data;
}
for($i = 0; $i <= 16; $i += 2)
{
$this->encipher($datal, $datar);
$this->p[$i] = $datal;
$this->p[$i+1] = $datar;
}
foreach($this->s as $key => $val)
{
for ($i = 0; $i < 256; $i += 2)
{
$this->encipher($datal, $datar);
$this->s[$key][$i] = $datal;
$this->s[$key][$i+1] = $datar;
}
}
}
/**
* Sets the defult p and s keys.
*
* @return void
*/
protected function setDefaultKeys()
{
$this->p = array(
0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,
0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B,
);
$this->s = array(
array(
0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A
),
array(
0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7
),
array(
0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0
),
array(
0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6
)
);
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Exception.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Exception
* @brief Enhanced exception class for TeamSpeak3_Helper_* objects.
*/
class TeamSpeak3_Helper_Exception extends TeamSpeak3_Exception {}

View File

@ -0,0 +1,101 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Profiler.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Profiler
* @brief Helper class for profiler handling.
*/
class TeamSpeak3_Helper_Profiler
{
/**
* Stores various timers for code profiling.
*
* @var array
*/
protected static $timers = array();
/**
* Inits a timer.
*
* @param string $name
* @return void
*/
public static function init($name = "default")
{
self::$timers[$name] = new TeamSpeak3_Helper_Profiler_Timer($name);
}
/**
* Starts a timer.
*
* @param string $name
* @return void
*/
public static function start($name = "default")
{
if(array_key_exists($name, self::$timers))
{
self::$timers[$name]->start();
}
else
{
self::$timers[$name] = new TeamSpeak3_Helper_Profiler_Timer($name);
}
}
/**
* Stops a timer.
*
* @param string $name
* @return void
*/
public static function stop($name = "default")
{
if(!array_key_exists($name, self::$timers))
{
self::init($name);
}
self::$timers[$name]->stop();
}
/**
* Returns a timer.
*
* @param string $name
* @return TeamSpeak3_Helper_Profiler_Timer
*/
public static function get($name = "default")
{
if(!array_key_exists($name, self::$timers))
{
self::init($name);
}
return self::$timers[$name];
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Exception.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Profiler_Exception
* @brief Enhanced exception class for TeamSpeak3_Helper_Profiler objects.
*/
class TeamSpeak3_Helper_Profiler_Exception extends TeamSpeak3_Helper_Exception {}

View File

@ -0,0 +1,154 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Timer.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Profiler_Timer
* @brief Helper class providing profiler timers.
*/
class TeamSpeak3_Helper_Profiler_Timer
{
/**
* Indicates wether the timer is running or not.
*
* @var boolean
*/
protected $running = FALSE;
/**
* Stores the timestamp when the timer was last started.
*
* @var integer
*/
protected $started = 0;
/**
* Stores the timer name.
*
* @var string
*/
protected $name = null;
/**
* Stores various information about the server environment.
*
* @var array
*/
protected $data = array();
/**
* The TeamSpeak3_Helper_Profiler_Timer constructor.
*
* @param string $name
* @return TeamSpeak3_Helper_Profiler_Timer
*/
public function __construct($name)
{
$this->name = (string) $name;
$this->data["runtime"] = 0;
$this->data["realmem"] = 0;
$this->data["emalloc"] = 0;
$this->start();
}
/**
* Starts the timer.
*
* @return void
*/
public function start()
{
if($this->isRunning()) return;
$this->data["realmem_start"] = memory_get_usage(TRUE);
$this->data["emalloc_start"] = memory_get_usage();
$this->started = microtime(TRUE);
$this->running = TRUE;
}
/**
* Stops the timer.
*
* @return void
*/
public function stop()
{
if(!$this->isRunning()) return;
$this->data["runtime"] += microtime(TRUE) - $this->started;
$this->data["realmem"] += memory_get_usage(TRUE) - $this->data["realmem_start"];
$this->data["emalloc"] += memory_get_usage() - $this->data["emalloc_start"];
$this->started = 0;
$this->running = FALSE;
}
/**
* Return the timer runtime.
*
* @return mixed
*/
public function getRuntime()
{
if($this->isRunning())
{
$this->stop();
$this->start();
}
return $this->data["runtime"];
}
/**
* Returns the amount of memory allocated to PHP in bytes.
*
* @param boolean $realmem
* @return integer
*/
public function getMemUsage($realmem = FALSE)
{
if($this->isRunning())
{
$this->stop();
$this->start();
}
return ($realmem !== FALSE) ? $this->data["realmem"] : $this->data["emalloc"];
}
/**
* Returns TRUE if the timer is running.
*
* @return boolean
*/
public function isRunning()
{
return $this->running;
}
}

View File

@ -0,0 +1,213 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Signal.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Signal
* @brief Helper class for signal slots.
*/
class TeamSpeak3_Helper_Signal
{
/**
* Stores the TeamSpeak3_Helper_Signal object.
*
* @var TeamSpeak3_Helper_Signal
*/
protected static $instance = null;
/**
* Stores subscribed signals and their slots.
*
* @var array
*/
protected $sigslots = array();
/**
* Emits a signal with a given set of parameters.
*
* @param string $signal
* @param mixed $params
* @return mixed
*/
public function emit($signal, $params = null)
{
if(!$this->hasHandlers($signal))
{
return;
}
if(!is_array($params))
{
$params = func_get_args();
$params = array_slice($params, 1);
}
foreach($this->sigslots[$signal] as $slot)
{
$return = $slot->call($params);
}
return $return;
}
/**
* Generates a MD5 hash based on a given callback.
*
* @param mixed $callback
* @param string
* @return void
*/
public function getCallbackHash($callback)
{
if(!is_callable($callback, TRUE, $callable_name))
{
throw new TeamSpeak3_Helper_Signal_Exception("invalid callback specified");
}
return md5($callable_name);
}
/**
* Subscribes to a signal and returns the signal handler.
*
* @param string $signal
* @param mixed $callback
* @return TeamSpeak3_Helper_Signal_Handler
*/
public function subscribe($signal, $callback)
{
if(empty($this->sigslots[$signal]))
{
$this->sigslots[$signal] = array();
}
$index = $this->getCallbackHash($callback);
if(!array_key_exists($index, $this->sigslots[$signal]))
{
$this->sigslots[$signal][$index] = new TeamSpeak3_Helper_Signal_Handler($signal, $callback);
}
return $this->sigslots[$signal][$index];
}
/**
* Unsubscribes from a signal.
*
* @param string $signal
* @param mixed $callback
* @return void
*/
public function unsubscribe($signal, $callback = null)
{
if(!$this->hasHandlers($signal))
{
return;
}
if($callback !== null)
{
$index = $this->getCallbackHash($callback);
if(!array_key_exists($index, $this->sigslots[$signal]))
{
return;
}
unset($this->sigslots[$signal][$index]);
}
else
{
unset($this->sigslots[$signal]);
}
}
/**
* Returns all registered signals.
*
* @return array
*/
public function getSignals()
{
return array_keys($this->sigslots);
}
/**
* Returns TRUE there are slots subscribed for a specified signal.
*
* @param string $signal
* @return boolean
*/
public function hasHandlers($signal)
{
return empty($this->sigslots[$signal]) ? FALSE : TRUE;
}
/**
* Returns all slots for a specified signal.
*
* @param string $signal
* @return array
*/
public function getHandlers($signal)
{
if(!$this->hasHandlers($signal))
{
return $this->sigslots[$signal];
}
return array();
}
/**
* Clears all slots for a specified signal.
*
* @param string $signal
* @return void
*/
public function clearHandlers($signal)
{
if(!$this->hasHandlers($signal))
{
unset($this->sigslots[$signal]);
}
}
/**
* Returns a singleton instance of TeamSpeak3_Helper_Signal.
*
* @return TeamSpeak3_Helper_Signal
*/
public static function getInstance()
{
if(self::$instance === null)
{
self::$instance = new self();
}
return self::$instance;
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Exception.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Signal_Exception
* @brief Enhanced exception class for TeamSpeak3_Helper_Signal objects.
*/
class TeamSpeak3_Helper_Signal_Exception extends TeamSpeak3_Helper_Exception {}

View File

@ -0,0 +1,78 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Handler.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Signal_Handler
* @brief Helper class providing handler functions for signals.
*/
class TeamSpeak3_Helper_Signal_Handler
{
/**
* Stores the name of the subscribed signal.
*
* @var string
*/
protected $signal = null;
/**
* Stores the callback function for the subscribed signal.
*
* @var mixed
*/
protected $callback = null;
/**
* The TeamSpeak3_Helper_Signal_Handler constructor.
*
* @param string $signal
* @param mixed $callback
* @throws TeamSpeak3_Helper_Signal_Exception
* @return TeamSpeak3_Helper_Signal_Handler
*/
public function __construct($signal, $callback)
{
$this->signal = (string) $signal;
if(!is_callable($callback))
{
throw new TeamSpeak3_Helper_Signal_Exception("invalid callback specified for signal '" . $signal . "'");
}
$this->callback = $callback;
}
/**
* Invoke the signal handler.
*
* @param array $args
* @return mixed
*/
public function call(array $args = array())
{
return call_user_func_array($this->callback, $args);
}
}

View File

@ -0,0 +1,353 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Interface.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Signal_Interface
* @brief Interface class describing the layout for TeamSpeak3_Helper_Signal callbacks.
*/
interface TeamSpeak3_Helper_Signal_Interface
{
/**
* Possible callback for '<adapter>Connected' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryConnected", array($object, "onConnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferConnected", array($object, "onConnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistConnected", array($object, "onConnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateConnected", array($object, "onConnect"));
*
* @param TeamSpeak3_Adapter_Abstract $adapter
* @return void
*/
public function onConnect(TeamSpeak3_Adapter_Abstract $adapter);
/**
* Possible callback for '<adapter>Disconnected' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDisconnected", array($object, "onDisconnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDisconnected", array($object, "onDisconnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDisconnected", array($object, "onDisconnect"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDisconnected", array($object, "onDisconnect"));
*
* @return void
*/
public function onDisconnect();
/**
* Possible callback for 'serverqueryCommandStarted' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryCommandStarted", array($object, "onCommandStarted"));
*
* @param string $cmd
* @return void
*/
public function onCommandStarted($cmd);
/**
* Possible callback for 'serverqueryCommandFinished' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryCommandFinished", array($object, "onCommandFinished"));
*
* @param string $cmd
* @param TeamSpeak3_Adapter_ServerQuery_Reply $reply
* @return void
*/
public function onCommandFinished($cmd, TeamSpeak3_Adapter_ServerQuery_Reply $reply);
/**
* Possible callback for 'notifyEvent' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent", array($object, "onEvent"));
*
* @param TeamSpeak3_Adapter_ServerQuery_Event $event
* @param TeamSpeak3_Node_Host $host
* @return void
*/
public function onEvent(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host);
/**
* Possible callback for 'notifyError' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyError", array($object, "onError"));
*
* @param TeamSpeak3_Adapter_ServerQuery_Reply $reply
* @return void
*/
public function onError(TeamSpeak3_Adapter_ServerQuery_Reply $reply);
/**
* Possible callback for 'notifyServerselected' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerselected", array($object, "onServerselected"));
*
* @param TeamSpeak3_Node_Host $host
* @return void
*/
public function onServerselected(TeamSpeak3_Node_Host $host);
/**
* Possible callback for 'notifyServercreated' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServercreated", array($object, "onServercreated"));
*
* @param TeamSpeak3_Node_Host $host
* @param integer $sid
* @return void
*/
public function onServercreated(TeamSpeak3_Node_Host $host, $sid);
/**
* Possible callback for 'notifyServerdeleted' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerdeleted", array($object, "onServerdeleted"));
*
* @param TeamSpeak3_Node_Host $host
* @param integer $sid
* @return void
*/
public function onServerdeleted(TeamSpeak3_Node_Host $host, $sid);
/**
* Possible callback for 'notifyServerstarted' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerstarted", array($object, "onServerstarted"));
*
* @param TeamSpeak3_Node_Host $host
* @param integer $sid
* @return void
*/
public function onServerstarted(TeamSpeak3_Node_Host $host, $sid);
/**
* Possible callback for 'notifyServerstopped' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerstopped", array($object, "onServerstopped"));
*
* @param TeamSpeak3_Node_Host $host
* @param integer $sid
* @return void
*/
public function onServerstopped(TeamSpeak3_Node_Host $host, $sid);
/**
* Possible callback for 'notifyServershutdown' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServershutdown", array($object, "onServershutdown"));
*
* @param TeamSpeak3_Node_Host $host
* @return void
*/
public function onServershutdown(TeamSpeak3_Node_Host $host);
/**
* Possible callback for 'notifyLogin' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyLogin", array($object, "onLogin"));
*
* @param TeamSpeak3_Node_Host $host
* @return void
*/
public function onLogin(TeamSpeak3_Node_Host $host);
/**
* Possible callback for 'notifyLogout' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyLogout", array($object, "onLogout"));
*
* @param TeamSpeak3_Node_Host $host
* @return void
*/
public function onLogout(TeamSpeak3_Node_Host $host);
/**
* Possible callback for 'notifyTokencreated' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyTokencreated", array($object, "onTokencreated"));
*
* @param TeamSpeak3_Node_Server $server
* @param string $token
* @return void
*/
public function onTokencreated(TeamSpeak3_Node_Server $server, $token);
/**
* Possible callback for 'filetransferHandshake' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferHandshake", array($object, "onFtHandshake"));
*
* @param TeamSpeak3_Adapter_FileTransfer $adapter
* @return void
*/
public function onFtHandshake(TeamSpeak3_Adapter_FileTransfer $adapter);
/**
* Possible callback for 'filetransferUploadStarted' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadStarted", array($object, "onFtUploadStarted"));
*
* @param string $ftkey
* @param integer $seek
* @param integer $size
* @return void
*/
public function onFtUploadStarted($ftkey, $seek, $size);
/**
* Possible callback for 'filetransferUploadProgress' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadProgress", array($object, "onFtUploadProgress"));
*
* @param string $ftkey
* @param integer $seek
* @param integer $size
* @return void
*/
public function onFtUploadProgress($ftkey, $seek, $size);
/**
* Possible callback for 'filetransferUploadFinished' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadFinished", array($object, "onFtUploadFinished"));
*
* @param string $ftkey
* @param integer $seek
* @param integer $size
* @return void
*/
public function onFtUploadFinished($ftkey, $seek, $size);
/**
* Possible callback for 'filetransferDownloadStarted' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadStarted", array($object, "onFtDownloadStarted"));
*
* @param string $ftkey
* @param integer $buff
* @param integer $size
* @return void
*/
public function onFtDownloadStarted($ftkey, $buff, $size);
/**
* Possible callback for 'filetransferDownloadProgress' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadProgress", array($object, "onFtDownloadProgress"));
*
* @param string $ftkey
* @param integer $buff
* @param integer $size
* @return void
*/
public function onFtDownloadProgress($ftkey, $buff, $size);
/**
* Possible callback for 'filetransferDownloadFinished' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadFinished", array($object, "onFtDownloadFinished"));
*
* @param string $ftkey
* @param integer $buff
* @param integer $size
* @return void
*/
public function onFtDownloadFinished($ftkey, $buff, $size);
/**
* Possible callback for '<adapter>DataRead' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDataRead", array($object, "onDebugDataRead"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDataRead", array($object, "onDebugDataRead"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDataRead", array($object, "onDebugDataRead"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDataRead", array($object, "onDebugDataRead"));
*
* @param string $data
* @return void
*/
public function onDebugDataRead($data);
/**
* Possible callback for '<adapter>DataSend' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDataSend", array($object, "onDebugDataSend"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDataSend", array($object, "onDebugDataSend"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDataSend", array($object, "onDebugDataSend"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDataSend", array($object, "onDebugDataSend"));
*
* @param string $data
* @return void
*/
public function onDebugDataSend($data);
/**
* Possible callback for '<adapter>WaitTimeout' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryWaitTimeout", array($object, "onWaitTimeout"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferWaitTimeout", array($object, "onWaitTimeout"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistWaitTimeout", array($object, "onWaitTimeout"));
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateWaitTimeout", array($object, "onWaitTimeout"));
*
* @param integer $time
* @param TeamSpeak3_Adapter_Abstract $adapter
* @return void
*/
public function onWaitTimeout($time, TeamSpeak3_Adapter_Abstract $adapter);
/**
* Possible callback for 'errorException' signals.
*
* === Examples ===
* - TeamSpeak3_Helper_Signal::getInstance()->subscribe("errorException", array($object, "onException"));
*
* @param TeamSpeak3_Exception $e
* @return void
*/
public function onException(TeamSpeak3_Exception $e);
}

View File

@ -0,0 +1,939 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: String.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_String
* @brief Helper class for string handling.
*/
class TeamSpeak3_Helper_String implements ArrayAccess, Iterator, Countable
{
/**
* Stores the original string.
*
* @var string
*/
protected $string;
/**
* @ignore
*/
protected $position = 0;
/**
* The TeamSpeak3_Helper_String constructor.
*
* @param string $string
* @return TeamSpeak3_Helper_String
*/
public function __construct($string)
{
$this->string = (string) $string;
}
/**
* Returns a TeamSpeak3_Helper_String object for thegiven string.
*
* @param string $string
* @return TeamSpeak3_Helper_String
*/
public static function factory($string)
{
return new self($string);
}
/**
* Replaces every occurrence of the string $search with the string $replace.
*
* @param string $search
* @param string $replace
* @param boolean $caseSensitivity
* @return TeamSpeak3_Helper_String
*/
public function replace($search, $replace, $caseSensitivity = TRUE)
{
if($caseSensitivity)
{
$this->string = str_replace($search, $replace, $this->string);
}
else
{
$this->string = str_ireplace($search, $replace, $this->string);
}
return $this;
}
/**
* This function replaces indexed or associative signs with given values.
*
* @param array $args
* @param string $char
* @return TeamSpeak3_Helper_String
*/
public function arg(array $args, $char = "%")
{
$args = array_reverse($args, TRUE);
foreach($args as $key => $val)
{
$args[$char . $key] = $val;
unset($args[$key]);
}
$this->string = strtr($this->string, $args);
return $this;
}
/**
* Returns true if the string starts with $pattern.
*
* @param string $pattern
* @return boolean
*/
public function startsWith($pattern)
{
return (substr($this->string, 0, strlen($pattern)) == $pattern) ? TRUE : FALSE;
}
/**
* Returns true if the string ends with $pattern.
*
* @param string $pattern
* @return boolean
*/
public function endsWith($pattern)
{
return (substr($this->string, strlen($pattern)*-1) == $pattern) ? TRUE : FALSE;
}
/**
* Returns the position of the first occurrence of a char in a string.
*
* @param string $needle
* @return integer
*/
public function findFirst($needle)
{
return strpos($this->string, $needle);
}
/**
* Returns the position of the last occurrence of a char in a string.
*
* @param string $needle
* @return integer
*/
public function findLast($needle)
{
return strrpos($this->string, $needle);
}
/**
* Returns the lowercased string.
*
* @return TeamSpeak3_Helper_String
*/
public function toLower()
{
return new self(strtolower($this->string));
}
/**
* Returns the uppercased string.
*
* @return TeamSpeak3_Helper_String
*/
public function toUpper()
{
return new self(strtoupper($this->string));
}
/**
* Returns true if the string contains $pattern.
*
* @param string $pattern
* @param boolean $regexp
* @return boolean
*/
public function contains($pattern, $regexp = FALSE)
{
if(empty($pattern))
{
return TRUE;
}
if($regexp)
{
return (preg_match("/" . $pattern . "/i", $this->string)) ? TRUE : FALSE;
}
else
{
return (stristr($this->string, $pattern) !== FALSE) ? TRUE : FALSE;
}
}
/**
* Returns part of a string.
*
* @param integer $start
* @param integer $length
* @return TeamSpeak3_Helper_String
*/
public function substr($start, $length = null)
{
$string = ($length !== null) ? substr($this->string, $start, $length) : substr($this->string, $start);
return new self($string);
}
/**
* Splits the string into substrings wherever $separator occurs.
*
* @param string $separator
* @param integer $limit
* @return array
*/
public function split($separator, $limit = 0)
{
$parts = explode($separator, $this->string, ($limit) ? intval($limit) : $this->count());
foreach($parts as $key => $val)
{
$parts[$key] = new self($val);
}
return $parts;
}
/**
* Appends $part to the string.
*
* @param string $part
* @return TeamSpeak3_Helper_String
*/
public function append($part)
{
$this->string = $this->string . strval($part);
return $this;
}
/**
* Prepends $part to the string.
*
* @param string $part
* @return TeamSpeak3_Helper_String
*/
public function prepend($part)
{
$this->string = strval($part) . $this->string;
return $this;
}
/**
* Returns a section of the string.
*
* @param string $separator
* @param integer $first
* @param integer $last
* @return TeamSpeak3_Helper_String
*/
public function section($separator, $first = 0, $last = 0)
{
$sections = explode($separator, $this->string);
$total = count($sections);
$first = intval($first);
$last = intval($last);
if($first > $total) return null;
if($first > $last) $last = $first;
for($i = 0; $i < $total; $i++)
{
if($i < $first || $i > $last)
{
unset($sections[$i]);
}
}
$string = implode($separator, $sections);
return new self($string);
}
/**
* Sets the size of the string to $size characters.
*
* @param integer $size
* @param string $char
* @return TeamSpeak3_Helper_String
*/
public function resize($size, $char = "\0")
{
$chars = ($size - $this->count());
if($chars < 0)
{
$this->string = substr($this->string, 0, $chars);
}
elseif($chars > 0)
{
$this->string = str_pad($this->string, $size, strval($char));
}
return $this;
}
/**
* Strips whitespaces (or other characters) from the beginning and end of the string.
*
* @return TeamSpeak3_Helper_String
*/
public function trim()
{
$this->string = trim($this->string);
return $this;
}
/**
* Escapes a string using the TeamSpeak 3 escape patterns.
*
* @return TeamSpeak3_Helper_String
*/
public function escape()
{
foreach(TeamSpeak3::getEscapePatterns() as $search => $replace)
{
$this->string = str_replace($search, $replace, $this->string);
}
return $this;
}
/**
* Unescapes a string using the TeamSpeak 3 escape patterns.
*
* @return TeamSpeak3_Helper_String
*/
public function unescape()
{
$this->string = strtr($this->string, array_flip(TeamSpeak3::getEscapePatterns()));
return $this;
}
/**
* Removes any non alphanumeric characters from the string.
*
* @return TeamSpeak3_Helper_String
*/
public function filterAlnum()
{
$this->string = preg_replace("/[^[:alnum:]]/", "", $this->string);
return $this;
}
/**
* Removes any non alphabetic characters from the string.
*
* @return TeamSpeak3_Helper_String
*/
public function filterAlpha()
{
$this->string = preg_replace("/[^[:alpha:]]/", "", $this->string);
return $this;
}
/**
* Removes any non numeric characters from the string.
*
* @return TeamSpeak3_Helper_String
*/
public function filterDigits()
{
$this->string = preg_replace("/[^[:digit:]]/", "", $this->string);
return $this;
}
/**
* Returns TRUE if the string is a numeric value.
*
* @return boolean
*/
public function isInt()
{
return (is_numeric($this->string) && !$this->contains(".")) ? TRUE : FALSE;
}
/**
* Returns the integer value of the string.
*
* @return float
* @return integer
*/
public function toInt()
{
if($this->string == pow(2, 63) || $this->string == pow(2, 64))
{
return -1;
}
return ($this->string > pow(2, 31)) ? floatval($this->string) : intval($this->string);
}
/**
* Calculates and returns the crc32 polynomial of the string.
*
* @return string
*/
public function toCrc32()
{
return crc32($this->string);
}
/**
* Calculates and returns the md5 checksum of the string.
*
* @return string
*/
public function toMd5()
{
return md5($this->string);
}
/**
* Calculates and returns the sha1 checksum of the string.
*
* @return string
*/
public function toSha1()
{
return sha1($this->string);
}
/**
* Returns TRUE if the string is UTF-8 encoded. This method searches for non-ascii multibyte
* sequences in the UTF-8 range.
*
* @return boolean
*/
public function isUtf8()
{
$pattern = array();
$pattern[] = "[\xC2-\xDF][\x80-\xBF]"; // non-overlong 2-byte
$pattern[] = "\xE0[\xA0-\xBF][\x80-\xBF]"; // excluding overlongs
$pattern[] = "[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}"; // straight 3-byte
$pattern[] = "\xED[\x80-\x9F][\x80-\xBF]"; // excluding surrogates
$pattern[] = "\xF0[\x90-\xBF][\x80-\xBF]{2}"; // planes 1-3
$pattern[] = "[\xF1-\xF3][\x80-\xBF]{3}"; // planes 4-15
$pattern[] = "\xF4[\x80-\x8F][\x80-\xBF]{2}"; // plane 16
return preg_match("%(?:" . implode("|", $pattern) . ")+%xs", $this->string);
}
/**
* Converts the string to UTF-8.
*
* @return TeamSpeak3_Helper_String
*/
public function toUtf8()
{
if(!$this->isUtf8())
{
$this->string = utf8_encode($this->string);
}
return $this;
}
/**
* Encodes the string with MIME base64 and returns the result.
*
* @return string
*/
public function toBase64()
{
return base64_encode($this->string);
}
/**
* Decodes the string with MIME base64 and returns the result as an TeamSpeak3_Helper_String
*
* @param string $base64
* @return TeamSpeak3_Helper_String
*/
public static function fromBase64($base64)
{
return new self(base64_decode($base64));
}
/**
* Returns the hexadecimal value of the string.
*
* @return string
*/
public function toHex()
{
$hex = "";
foreach($this as $char)
{
$hex .= $char->toHex();
}
return $hex;
}
/**
* Returns the TeamSpeak3_Helper_String based on a given hex value.
*
* @param string $hex
* @throws TeamSpeak3_Helper_Exception
* @return TeamSpeak3_Helper_String
*/
public static function fromHex($hex)
{
$string = "";
if(strlen($hex)%2 == 1)
{
throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number");
}
foreach(str_split($hex, 2) as $chunk)
{
$string .= chr(hexdec($chunk));
}
return new self($string);
}
/**
* Returns the string transliterated from UTF-8 to Latin.
*
* @return TeamSpeak3_Helper_String
*/
public function transliterate()
{
$utf8_accents = array(
"à" => "a",
"ô" => "o",
"ď" => "d",
"" => "f",
"ë" => "e",
"š" => "s",
"ơ" => "o",
"ß" => "ss",
"ă" => "a",
"ř" => "r",
"ț" => "t",
"ň" => "n",
"ā" => "a",
"ķ" => "k",
"ŝ" => "s",
"" => "y",
"ņ" => "n",
"ĺ" => "l",
"ħ" => "h",
"" => "p",
"ó" => "o",
"ú" => "u",
"ě" => "e",
"é" => "e",
"ç" => "c",
"" => "w",
"ċ" => "c",
"õ" => "o",
"" => "s",
"ø" => "o",
"ģ" => "g",
"ŧ" => "t",
"ș" => "s",
"ė" => "e",
"ĉ" => "c",
"ś" => "s",
"î" => "i",
"ű" => "u",
"ć" => "c",
"ę" => "e",
"ŵ" => "w",
"" => "t",
"ū" => "u",
"č" => "c",
"ö" => "oe",
"è" => "e",
"ŷ" => "y",
"ą" => "a",
"ł" => "l",
"ų" => "u",
"ů" => "u",
"ş" => "s",
"ğ" => "g",
"ļ" => "l",
"ƒ" => "f",
"ž" => "z",
"" => "w",
"" => "b",
"å" => "a",
"ì" => "i",
"ï" => "i",
"" => "d",
"ť" => "t",
"ŗ" => "r",
"ä" => "ae",
"í" => "i",
"ŕ" => "r",
"ê" => "e",
"ü" => "ue",
"ò" => "o",
"ē" => "e",
"ñ" => "n",
"ń" => "n",
"ĥ" => "h",
"ĝ" => "g",
"đ" => "d",
"ĵ" => "j",
"ÿ" => "y",
"ũ" => "u",
"ŭ" => "u",
"ư" => "u",
"ţ" => "t",
"ý" => "y",
"ő" => "o",
"â" => "a",
"ľ" => "l",
"" => "w",
"ż" => "z",
"ī" => "i",
"ã" => "a",
"ġ" => "g",
"" => "m",
"ō" => "o",
"ĩ" => "i",
"ù" => "u",
"į" => "i",
"ź" => "z",
"á" => "a",
"û" => "u",
"þ" => "th",
"ð" => "dh",
"æ" => "ae",
"µ" => "u",
"ĕ" => "e",
"œ" => "oe",
"À" => "A",
"Ô" => "O",
"Ď" => "D",
"" => "F",
"Ë" => "E",
"Š" => "S",
"Ơ" => "O",
"Ă" => "A",
"Ř" => "R",
"Ț" => "T",
"Ň" => "N",
"Ā" => "A",
"Ķ" => "K",
"Ŝ" => "S",
"" => "Y",
"Ņ" => "N",
"Ĺ" => "L",
"Ħ" => "H",
"" => "P",
"Ó" => "O",
"Ú" => "U",
"Ě" => "E",
"É" => "E",
"Ç" => "C",
"" => "W",
"Ċ" => "C",
"Õ" => "O",
"" => "S",
"Ø" => "O",
"Ģ" => "G",
"Ŧ" => "T",
"Ș" => "S",
"Ė" => "E",
"Ĉ" => "C",
"Ś" => "S",
"Î" => "I",
"Ű" => "U",
"Ć" => "C",
"Ę" => "E",
"Ŵ" => "W",
"" => "T",
"Ū" => "U",
"Č" => "C",
"Ö" => "Oe",
"È" => "E",
"Ŷ" => "Y",
"Ą" => "A",
"Ł" => "L",
"Ų" => "U",
"Ů" => "U",
"Ş" => "S",
"Ğ" => "G",
"Ļ" => "L",
"Ƒ" => "F",
"Ž" => "Z",
"" => "W",
"" => "B",
"Å" => "A",
"Ì" => "I",
"Ï" => "I",
"" => "D",
"Ť" => "T",
"Ŗ" => "R",
"Ä" => "Ae",
"Í" => "I",
"Ŕ" => "R",
"Ê" => "E",
"Ü" => "Ue",
"Ò" => "O",
"Ē" => "E",
"Ñ" => "N",
"Ń" => "N",
"Ĥ" => "H",
"Ĝ" => "G",
"Đ" => "D",
"Ĵ" => "J",
"Ÿ" => "Y",
"Ũ" => "U",
"Ŭ" => "U",
"Ư" => "U",
"Ţ" => "T",
"Ý" => "Y",
"Ő" => "O",
"Â" => "A",
"Ľ" => "L",
"" => "W",
"Ż" => "Z",
"Ī" => "I",
"Ã" => "A",
"Ġ" => "G",
"" => "M",
"Ō" => "O",
"Ĩ" => "I",
"Ù" => "U",
"Į" => "I",
"Ź" => "Z",
"Á" => "A",
"Û" => "U",
"Þ" => "Th",
"Ð" => "Dh",
"Æ" => "Ae",
"Ĕ" => "E",
"Œ" => "Oe",
);
return new self($this->toUtf8()->replace(array_keys($utf8_accents), array_values($utf8_accents)));
}
/**
* Processes the string and replaces all accented UTF-8 characters by unaccented ASCII-7 "equivalents",
* whitespaces are replaced by a pre-defined spacer and the string is lowercase.
*
* @param string $spacer
* @return TeamSpeak3_Helper_String
*/
public function uriSafe($spacer = "-")
{
$this->string = str_replace($spacer, " ", $this->string);
$this->string = $this->transliterate();
$this->string = preg_replace("/(\s|[^A-Za-z0-9\-])+/", $spacer, trim(strtolower($this->string)));
$this->string = trim($this->string, $spacer);
return new self($this->string);
}
/**
* Replaces space characters with percent encoded strings.
*
* @return string
*/
public function spaceToPercent()
{
return str_replace(" ", "%20", $this->string);
}
/**
* Returns the string as a standard string
*
* @return string
*/
public function toString()
{
return $this->string;
}
/**
* Magical function that allows you to call PHP's built-in string functions on the TeamSpeak3_Helper_String object.
*
* @param string $function
* @param array $args
* @throws TeamSpeak3_Helper_Exception
* @return TeamSpeak3_Helper_String
*/
public function __call($function, $args)
{
if(!function_exists($function))
{
throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' on this object");
}
if(count($args))
{
if(($key = array_search($this, $args, TRUE)) !== FALSE)
{
$args[$key] = $this->string;
}
else
{
throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' without the " . __CLASS__ . " object parameter");
}
$return = call_user_func_array($function, $args);
}
else
{
$return = call_user_func($function, $this->string);
}
if(is_string($return))
{
$this->string = $return;
}
else
{
return $return;
}
return $this;
}
/**
* Returns the character as a standard string.
*
* @return string
*/
public function __toString()
{
return (string) $this->string;
}
/**
* @ignore
*/
public function count()
{
return strlen($this->string);
}
/**
* @ignore
*/
public function rewind()
{
$this->position = 0;
}
/**
* @ignore
*/
public function valid()
{
return $this->position < $this->count();
}
/**
* @ignore
*/
public function key()
{
return $this->position;
}
/**
* @ignore
*/
public function current()
{
return new TeamSpeak3_Helper_Char($this->string{$this->position});
}
/**
* @ignore
*/
public function next()
{
$this->position++;
}
/**
* @ignore
*/
public function offsetExists($offset)
{
return ($offset < strlen($this->string)) ? TRUE : FALSE;
}
/**
* @ignore
*/
public function offsetGet($offset)
{
return ($this->offsetExists($offset)) ? new TeamSpeak3_Helper_Char($this->string{$offset}) : null;
}
/**
* @ignore
*/
public function offsetSet($offset, $value)
{
if(!$this->offsetExists($offset)) return;
$this->string{$offset} = strval($value);
}
/**
* @ignore
*/
public function offsetUnset($offset)
{
if(!$this->offsetExists($offset)) return;
$this->string = substr_replace($this->string, "", $offset, 1);
}
}

View File

@ -0,0 +1,717 @@
<?php
/**
* @file
* TeamSpeak 3 PHP Framework
*
* $Id: Uri.php 06/06/2016 22:27:13 scp@Svens-iMac $
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package TeamSpeak3
* @version 1.1.24
* @author Sven 'ScP' Paulsen
* @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
*/
/**
* @class TeamSpeak3_Helper_Uri
* @brief Helper class for URI handling.
*/
class TeamSpeak3_Helper_Uri
{
/**
* Stores the URI scheme.
*
* @var string
*/
protected $scheme = null;
/**
* Stores the URI username
*
* @var string
*/
protected $user = null;
/**
* Stores the URI password.
*
* @var string
*/
protected $pass = null;
/**
* Stores the URI host.
*
* @var string
*/
protected $host = null;
/**
* Stores the URI port.
*
* @var string
*/
protected $port = null;
/**
* Stores the URI path.
*
* @var string
*/
protected $path = null;
/**
* Stores the URI query string.
*
* @var string
*/
protected $query = null;
/**
* Stores the URI fragment string.
*
* @var string
*/
protected $fragment = null;
/**
* Stores grammar rules for validation via regex.
*
* @var array
*/
protected $regex = array();
/**
* The TeamSpeak3_Helper_Uri constructor.
*
* @param string $uri
* @throws TeamSpeak3_Helper_Exception
* @return TeamSpeak3_Helper_Uri
*/
public function __construct($uri)
{
$uri = explode(":", strval($uri), 2);
$this->scheme = strtolower($uri[0]);
$uriString = isset($uri[1]) ? $uri[1] : "";
if(!ctype_alnum($this->scheme))
{
throw new TeamSpeak3_Helper_Exception("invalid URI scheme '" . $this->scheme . "' supplied");
}
/* grammar rules for validation */
$this->regex["alphanum"] = "[^\W_]";
$this->regex["escaped"] = "(?:%[\da-fA-F]{2})";
$this->regex["mark"] = "[-_.!~*'()\[\]]";
$this->regex["reserved"] = "[;\/?:@&=+$,]";
$this->regex["unreserved"] = "(?:" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . ")";
$this->regex["segment"] = "(?:(?:" . $this->regex["unreserved"] . "|" . $this->regex["escaped"] . "|[:@&=+$,;])*)";
$this->regex["path"] = "(?:\/" . $this->regex["segment"] . "?)+";
$this->regex["uric"] = "(?:" . $this->regex["reserved"] . "|" . $this->regex["unreserved"] . "|" . $this->regex["escaped"] . ")";
if(strlen($uriString) > 0)
{
$this->parseUri($uriString);
}
if(!$this->isValid())
{
throw new TeamSpeak3_Helper_Exception("invalid URI supplied");
}
}
/**
* Parses the scheme-specific portion of the URI and place its parts into instance variables.
*
* @throws TeamSpeak3_Helper_Exception
* @return void
*/
protected function parseUri($uriString = '')
{
$status = @preg_match("~^((//)([^/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?$~", $uriString, $matches);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI scheme-specific decomposition failed");
}
if(!$status) return;
$this->path = (isset($matches[4])) ? $matches[4] : '';
$this->query = (isset($matches[6])) ? $matches[6] : '';
$this->fragment = (isset($matches[8])) ? $matches[8] : '';
$status = @preg_match("~^(([^:@]*)(:([^@]*))?@)?((?(?=[[])[[][^]]+[]]|[^:]+))(:(.*))?$~", (isset($matches[3])) ? $matches[3] : "", $matches);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI scheme-specific authority decomposition failed");
}
if(!$status) return;
$this->user = isset($matches[2]) ? $matches[2] : "";
$this->pass = isset($matches[4]) ? $matches[4] : "";
$this->host = isset($matches[5]) === TRUE ? preg_replace('~^\[([^]]+)\]$~', '\1', $matches[5]) : "";
$this->port = isset($matches[7]) ? $matches[7] : "";
}
/**
* Validate the current URI from the instance variables.
*
* @return boolean
*/
public function isValid()
{
return ($this->checkUser() && $this->checkPass() && $this->checkHost() && $this->checkPort() && $this->checkPath() && $this->checkQuery() && $this->checkFragment());
}
/**
* Returns TRUE if a given URI is valid.
*
* @param string $uri
* @return boolean
*/
public static function check($uri)
{
try
{
$uri = new self(strval($uri));
}
catch(Exception $e)
{
return FALSE;
}
return $uri->valid();
}
/**
* Returns TRUE if the URI has a scheme.
*
* @return boolean
*/
public function hasScheme()
{
return strlen($this->scheme) ? TRUE : FALSE;
}
/**
* Returns the scheme.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getScheme($default = null)
{
return ($this->hasScheme()) ? new TeamSpeak3_Helper_String($this->scheme) : $default;
}
/**
* Returns TRUE if the username is valid.
*
* @param string $username
* @throws TeamSpeak3_Helper_Exception
* @return boolean
*/
public function checkUser($username = null)
{
if($username === null)
{
$username = $this->user;
}
if(strlen($username) == 0)
{
return TRUE;
}
$pattern = "/^(" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . "|" . $this->regex["escaped"] . "|[;:&=+$,])+$/";
$status = @preg_match($pattern, $username);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI username validation failed");
}
return ($status == 1);
}
/**
* Returns TRUE if the URI has a username.
*
* @return boolean
*/
public function hasUser()
{
return strlen($this->user) ? TRUE : FALSE;
}
/**
* Returns the username.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getUser($default = null)
{
return ($this->hasUser()) ? new TeamSpeak3_Helper_String($this->user) : $default;
}
/**
* Returns TRUE if the password is valid.
*
* @param string $password
* @throws TeamSpeak3_Helper_Exception
* @return boolean
*/
public function checkPass($password = null)
{
if($password === null) {
$password = $this->pass;
}
if(strlen($password) == 0)
{
return TRUE;
}
$pattern = "/^(" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . "|" . $this->regex["escaped"] . "|[;:&=+$,])+$/";
$status = @preg_match($pattern, $password);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI password validation failed");
}
return ($status == 1);
}
/**
* Returns TRUE if the URI has a password.
*
* @return boolean
*/
public function hasPass()
{
return strlen($this->pass) ? TRUE : FALSE;
}
/**
* Returns the password.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getPass($default = null)
{
return ($this->hasPass()) ? new TeamSpeak3_Helper_String($this->pass) : $default;
}
/**
* Returns TRUE if the host is valid.
*
* @param string $host
* @return boolean
*/
public function checkHost($host = null)
{
if($host === null)
{
$host = $this->host;
}
return TRUE;
}
/**
* Returns TRUE if the URI has a host.
*
* @return boolean
*/
public function hasHost()
{
return strlen($this->host) ? TRUE : FALSE;
}
/**
* Returns the host.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getHost($default = null)
{
return ($this->hasHost()) ? new TeamSpeak3_Helper_String($this->host) : $default;
}
/**
* Returns TRUE if the port is valid.
*
* @param integer $port
* @return boolean
*/
public function checkPort($port = null)
{
if($port === null)
{
$port = $this->port;
}
return TRUE;
}
/**
* Returns TRUE if the URI has a port.
*
* @return boolean
*/
public function hasPort()
{
return strlen($this->port) ? TRUE : FALSE;
}
/**
* Returns the port.
*
* @param mixed default
* @return integer
*/
public function getPort($default = null)
{
return ($this->hasPort()) ? intval($this->port) : $default;
}
/**
* Returns TRUE if the path is valid.
*
* @param string $path
* @throws TeamSpeak3_Helper_Exception
* @return boolean
*/
public function checkPath($path = null)
{
if($path === null)
{
$path = $this->path;
}
if(strlen($path) == 0)
{
return TRUE;
}
$pattern = "/^" . $this->regex["path"] . "$/";
$status = @preg_match($pattern, $path);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI path validation failed");
}
return ($status == 1);
}
/**
* Returns TRUE if the URI has a path.
*
* @return boolean
*/
public function hasPath()
{
return strlen($this->path) ? TRUE : FALSE;
}
/**
* Returns the path.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getPath($default = null)
{
return ($this->hasPath()) ? new TeamSpeak3_Helper_String($this->path) : $default;
}
/**
* Returns TRUE if the query string is valid.
*
* @param string $query
* @throws TeamSpeak3_Helper_Exception
* @return boolean
*/
public function checkQuery($query = null)
{
if($query === null)
{
$query = $this->query;
}
if(strlen($query) == 0)
{
return TRUE;
}
$pattern = "/^" . $this->regex["uric"] . "*$/";
$status = @preg_match($pattern, $query);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI query string validation failed");
}
return ($status == 1);
}
/**
* Returns TRUE if the URI has a query string.
*
* @return boolean
*/
public function hasQuery()
{
return strlen($this->query) ? TRUE : FALSE;
}
/**
* Returns an array containing the query string elements.
*
* @param mixed $default
* @return array
*/
public function getQuery($default = array())
{
if(!$this->hasQuery())
{
return $default;
}
parse_str($this->query, $queryArray);
return $queryArray;
}
/**
* Returns TRUE if the URI has a query variable.
*
* @return boolean
*/
public function hasQueryVar($key)
{
if(!$this->hasQuery()) return FALSE;
parse_str($this->query, $queryArray);
return array_key_exists($key, $queryArray) ? TRUE : FALSE;
}
/**
* Returns a single variable from the query string.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public function getQueryVar($key, $default = null)
{
if(!$this->hasQuery()) return $default;
parse_str($this->query, $queryArray);
if(array_key_exists($key, $queryArray))
{
$val = $queryArray[$key];
if(ctype_digit($val))
{
return intval($val);
}
elseif(is_string($val))
{
return new TeamSpeak3_Helper_String($val);
}
else
{
return $val;
}
}
return $default;
}
/**
* Returns TRUE if the fragment string is valid.
*
* @param string $fragment
* @throws TeamSpeak3_Helper_Exception
* @return boolean
*/
public function checkFragment($fragment = null)
{
if($fragment === null)
{
$fragment = $this->fragment;
}
if(strlen($fragment) == 0)
{
return TRUE;
}
$pattern = "/^" . $this->regex["uric"] . "*$/";
$status = @preg_match($pattern, $fragment);
if($status === FALSE)
{
throw new TeamSpeak3_Helper_Exception("URI fragment validation failed");
}
return ($status == 1);
}
/**
* Returns TRUE if the URI has a fragment string.
*
* @return boolean
*/
public function hasFragment()
{
return strlen($this->fragment) ? TRUE : FALSE;
}
/**
* Returns the fragment.
*
* @param mixed default
* @return TeamSpeak3_Helper_String
*/
public function getFragment($default = null)
{
return ($this->hasFragment()) ? new TeamSpeak3_Helper_String($this->fragment) : $default;
}
/**
* Returns a specified instance parameter from the $_REQUEST array.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function getUserParam($key, $default = null)
{
return (array_key_exists($key, $_REQUEST) && !empty($_REQUEST[$key])) ? self::stripslashesRecursive($_REQUEST[$key]) : $default;
}
/**
* Returns a specified environment parameter from the $_SERVER array.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function getHostParam($key, $default = null)
{
return (array_key_exists($key, $_SERVER) && !empty($_SERVER[$key])) ? $_SERVER[$key] : $default;
}
/**
* Returns a specified session parameter from the $_SESSION array.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function getSessParam($key, $default = null)
{
return (array_key_exists($key, $_SESSION) && !empty($_SESSION[$key])) ? $_SESSION[$key] : $default;
}
/**
* Returns an array containing the three main parts of a FQDN (Fully Qualified Domain Name), including the
* top-level domain, the second-level domains or hostname and the third-level domain.
*
* @param string $hostname
* @return array
*/
public static function getFQDNParts($hostname)
{
if(!preg_match("/^([a-z0-9][a-z0-9-]{0,62}\.)*([a-z0-9][a-z0-9-]{0,62}\.)+([a-z]{2,6})$/i", $hostname, $matches))
{
return array();
}
$parts["tld"] = $matches[3];
$parts["2nd"] = $matches[2];
$parts["3rd"] = $matches[1];
return $parts;
}
/**
* Returns the applications host address.
*
* @return TeamSpeak3_Helper_String
*/
public static function getHostUri()
{
$sheme = (self::getHostParam("HTTPS") == "on") ? "https" : "http";
$serverName = new TeamSpeak3_Helper_String(self::getHostParam("HTTP_HOST"));
$serverPort = self::getHostParam("SERVER_PORT");
$serverPort = ($serverPort != 80 && $serverPort != 443) ? ":" . $serverPort : "";
if($serverName->endsWith($serverPort))
{
$serverName = $serverName->replace($serverPort, "");
}
return new TeamSpeak3_Helper_String($sheme . "://" . $serverName . $serverPort);
}
/**
* Returns the applications base address.
*
* @return string
*/
public static function getBaseUri()
{
$scriptPath = new TeamSpeak3_Helper_String(dirname(self::getHostParam("SCRIPT_NAME")));
return self::getHostUri()->append(($scriptPath == DIRECTORY_SEPARATOR ? "" : $scriptPath) . "/");
}
/**
* Strips slashes from each element of an array using stripslashes().
*
* @param mixed $var
* @return mixed
*/
protected static function stripslashesRecursive($var)
{
if(!is_array($var))
{
return stripslashes(strval($var));
}
foreach($var as $key => $val)
{
$var[$key] = (is_array($val)) ? stripslashesRecursive($val) : stripslashes(strval($val));
}
return $var;
}
}