• Модуль: xmpp
  • Путь к файлу: ~/bitrix/modules/xmpp/classes/client.php
  • Класс: CXMPPClient
  • Вызов: CXMPPClient::__ParseBuffer
protected function __ParseBuffer()
{
	$buffer = trim($this->readBuffer);
	if ($buffer == '')
		return false;

	if (mb_strtolower(mb_substr($buffer, 0, 5)) == '") + 1));
	if (mb_strtolower(mb_substr($buffer, 0, 14)) == '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;
}