• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/site_checker.php
  • Класс: CSiteCheckerTest
  • Вызов: CSiteCheckerTest::check_access_mobile
function check_access_mobile()
{
	$checker = 'checker.internal.bitrix24.com';
	$retVal = null;

	if (preg_match('#^(127|10|172.16|192.168).#', $this->host))
		$status = 0;
	else
	{
		$strRequest =
			'GET /check/?license_hash='.LICENSE_HASH.'&host='.urlencode($this->host).'&port='.urlencode($this->port).'&https='.($this->ssl ? 'Y' : 'N').' HTTP/1.1'."rn".
			'host: '.$checker."rn".
			"rn";

		if (!$res = $this->ConnectToHost($checker, 80))
		{
			$this->arTestVars['check_access_fail'] = true;
			return $this->Result($retVal, GetMessage("MAIN_SC_NO_CONNECTTO", array('#HOST#' => $checker)));
		}

		$strRes = GetHttpResponse($res, $strRequest, $strHeaders);
		PrintHTTP($strRequest, $strHeaders, $strRes);
		if (!preg_match('#^Status: (.+)$#m', $strRes, $regs))
		{
			$this->arTestVars['check_access_fail'] = true;
			return $this->Result($retVal, GetMessage("MAIN_SC_UNKNOWN_ANSWER", array('#HOST#' => $checker)));
		}
		$status = intval($regs[1]);
	}

	if (!$status)
	{
		$this->arTestVars['check_access_fail'] = true;
		return $this->Result($retVal, GetMessage("MAIN_SC_NO_EXTERNAL_CONNECT_WARN"));
	}

	if ($status != 200 && $status != 401)
	{
		$this->arTestVars['check_access_fail'] = true;
		echo $strRes;
		return $this->Result($retVal, GetMessage("MAIN_SC_EXTERNAL_ANSWER_INCORRECT"));
	}

	if (!CModule::IncludeModule('pull'))
		return $this->Result(null, GetMessage("MAIN_NO_PULL_MODULE"));
	if (!CPullOptions::GetPushStatus())
		return $this->Result(null, GetMessage("MAIN_NO_OPTION_PULL"));
	if (!$ar = parse_url(str_replace('#DOMAIN#', $this->host, COption::GetOptionString('pull', 'path_to_mobile_listener'.($this->ssl ? '_secure' : '')))))
		return $this->Result(false, GetMessage("MAIN_SC_PATH_SUB"));
	$sub_port = $ar['port'];
	if (!$sub_port)
		$sub_port = 80;
	if ($sub_port != $this->port)
	{
		$strRequest =
			'GET /check/?license_hash='.LICENSE_HASH.'&host='.urlencode($this->host).'&port='.urlencode($sub_port).'&https='.($ar['scheme'] == 'https' ? 'Y' : 'N').' HTTP/1.1'."rn".
			'host: '.$checker."rn".
			"rn";

		if (!$res = $this->ConnectToHost($checker, 80))
			return $this->Result($retVal, GetMessage("MAIN_SC_NO_CONNECTTO", array('#HOST#' => $checker)));
		$strRes = GetHttpResponse($res, $strRequest, $strHeaders);
		PrintHTTP($strRequest, $strHeaders, $strRes);
		if (!preg_match('#^Status: (.+)$#m', $strRes, $regs))
			return $this->Result($retVal, GetMessage("MAIN_SC_UNKNOWN_ANSWER", array('#HOST#' => $checker)));
		$status = intval($regs[1]);
		if (!$status)
			return $this->Result($retVal, GetMessage("MAIN_SC_NO_PULL_EXTERNAL_2"));
	}

	return true;
}