protected function __ParseBuffer() { $buffer = trim($this->readBuffer); if (strlen($buffer) <= 0) { return false; } if (strtolower(substr($buffer, 0, 5)) == '<?xml') { $buffer = trim(substr($buffer, strpos($buffer, ">") + 1)); } if (strtolower(substr($buffer, 0, 14)) == '<stream:stream') { $buffer .= "</stream:stream>"; stream_set_timeout($this->sock, 5); } $arRequest = CXMPPParser::ToArray($buffer); if (!$arRequest) { return false; } CXMPPUtility::Show("<<< " . $this->jid . " (" . $this->xmppId . ")\n" . $buffer, 0); $this->readBuffer = ""; $this->pingTime = time(); if ($arRequest['server']) { if (isset($arRequest['server']['.']['domain'])) { $clientDomain = $arRequest['server']['.']['domain']; } if (empty($clientDomain)) { $clientDomain = CXMPPServer::GetDomain(); } if (!CXMPPUtility::SelectDatabase($clientDomain)) { $this->Disconnect(); return false; } if ($arRequest['server']['.']['uniid'] != CXMPPUtility::GetUniid($clientDomain)) { $this->Disconnect(); return false; } unset($arRequest['server']); foreach ($arRequest as $key => $value) { if ($value[0]) { foreach ($value as $value0) { $this->__ProcessServerMessage(array($key => $value0), $clientDomain); } } else { $this->__ProcessServerMessage(array($key => $value), $clientDomain); } } $this->Disconnect(); return true; } foreach ($arRequest as $key => $value) { if ($value[0]) { foreach ($value as $value0) { $this->__ProcessMessage(array($key => $value0)); } } else { $this->__ProcessMessage(array($key => $value)); } } return true; }
static function _SendToServerXML($message, &$errorNo, &$errorStr, $domain = "") { if (empty($domain)) { $domain = CXMPPServer::GetDomain(); } if ($f = @fsockopen(CXMPPServer::GetDomain(), 5222, $errNo, $errStr, 10)) { $message .= '<server uniid="' . CXMPPUtility::GetUniid($domain) . '" domain="' . htmlspecialcharsbx($domain) . '" />'; fwrite($f, $message); $responce = ""; while (!feof($f)) { $responce .= trim(fread($f, 8192)); } fclose($f); return $responce; } $errorNo = $errNo; $errorStr = $errStr; return false; }