* @revision 03 * @license http://creativecommons.org/licenses/by-sa/3.0/de/ Creative Commons Attribution-Share Alike 3.0 Germany * @homepage http://oss.tiggerswelt.net/oscar/ * @copyright Copyright © 2009 tiggersWelt.net */ require_once ("oscar/tlv.php"); class Oscar_TLV_Helper_Capability extends Oscar_TLV { /* Capabilities */ const AIM_VOICECHAT = "{09461341-4C7F-11D1-8222-444553540000}"; const AIM_DIRECTPLAY = "{09461342-4C7F-11D1-8222-444553540000}"; const AIM_DIRECTIM = "{09461345-4C7F-11D1-8222-444553540000}"; const AIM_AVATAR = "{09461346-4C7F-11D1-8222-444553540000}"; // Kopete const AIM_STOCKS = "{09461347-4C7F-11D1-8222-444553540000}"; const AIM_FILETRANSFER_SEND = "{09461343-4C7F-11D1-8222-444553540000}"; const AIM_FILETRANSFER_RECV = "{09461348-4C7F-11D1-8222-444553540000}"; const AIM_GAMES = "{0946134A-4C7F-11D1-8222-444553540000}"; const AIM_BUDDYLIST_TRANSFER = "{0946134B-4C7F-11D1-8222-444553540000}"; const AIM_ICQGATEWAY = "{0946134D-4C7F-11D1-8222-444553540000}"; const AIM_UTF8 = "{0946134E-4C7F-11D1-8222-444553540000}"; // Kopete const AIM_CHAT = "{748F2420-6287-11D1-8222-444553540000}"; const ICQ_ROUTEFINDER = "{09461344-4C7F-11D1-8222-444553540000}"; // Kopete const ICQ_EXTENDED_TLV = "{09461349-4C7F-11D1-8222-444553540000}"; const ICQ_RTF = "{97B12751-243C-4334-AD22-D6ABF73F1492}"; const ICQ_TRILIAN_SECUREIM = "{F2E7C7F4-FEAD-4DFB-B235-36798BDF0000}"; /* These ones are from the official documentation */ const SHORT_CAPS = "{09460000-4C7F-11D1-8222-444553540000}"; const SECURE_IM = "{09460001-4C7F-11D1-8222-444553540000}"; const XHTML_IM = "{09460002-4C7F-11D1-8222-444553540000}"; const RTCVIDEO = "{09460101-4C7F-11D1-8222-444553540000}"; const HAS_CAMERA = "{09460102-4C7F-11D1-8222-444553540000}"; const HAS_MICROPHONE = "{09460103-4C7F-11D1-8222-444553540000}"; const RTCAUDIO = "{09460104-4C7F-11D1-8222-444553540000}"; const HOST_STATUS_TEXT_AWARE = "{0946010A-4C7F-11D1-8222-444553540000}"; const RTIM = "{0946010B-4C7F-11D1-8222-444553540000}"; const SMART_CAPS = "{094601FF-4C7F-11D1-8222-444553540000}"; const FILE_TRANSFER = "{09461343-4C7F-11D1-8222-444553540000}"; // aka AIM_FILETRANSFER_SEND const DIRECT_ICBM = "{09461345-4C7F-11D1-8222-444553540000}"; // aka AIM_DIRECTIM const FILE_SHARING = "{09461348-4C7F-11D1-8222-444553540000}"; // aka AIM_FILETRANSFER_RECV const SUPPORT_ICQ = "{0946134D-4C7F-11D1-8222-444553540000}"; // aka AIM_ICQGATEWAY // Kopete also defines these ones, but no-one seem to know really: // 4B6F7065-7465-2049-4351-2020000C0007 // 563FC809-0B6F-41BD-9F79-422609DFA2F3 ICQ Lite or GO protected $Capabilities = array (); // {{{ stripCapability /** * Strip unneccessary chars from a capability * * @param string $Capability * * @access public * @return string */ public static function stripCapability ($Capability) { $buf = str_replace (array (" ", "-", "{", "}"), array ("", "", "", ""), $Capability); if (strlen ($buf) != 32) return false; return strtoupper ($buf); } // }}} // {{{ addCapability /** * Add a capability to stack * * @param string $Capability * * @access public * @return void */ public function addCapability ($Capability) { if (($buf = self::stripCapability ($Capability)) === false) return false; $this->Capabilities [$buf] = $buf; } // }}} // {{{ parse /** * @access public * @return void */ public function parse () { while ($this->Data != "") { $this->addCapability (bin2hex (substr ($this->Data, 0, 16))); $this->Data = substr ($this->Data, 16); } } // }}} // {{{ generate /** * Generate capability-Packet * * @access public * @return string */ public function generate () { $this->Data = ""; foreach ($this->Capabilities as $Capa) for ($i = 0; $i < strlen ($Capa) / 2; $i++) $this->Data .= chr (hexdec (substr ($Capa, $i * 2, 2))); return parent::generate (); } // }}} } ?>