• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/general.php
  • Класс: CWebDavBase
  • Вызов: CWebDavBase::_if_header_parser
function _if_header_parser($str)
{
	$pos  = 0;
	$len = mb_strlen($str);
	$uris = array();

	while ($pos < $len)
	{
		$token = $this->_if_header_lexer($str, $pos);

		if ($token[0] == 'URI')
		{
			$uri   = $token[1];
			$token = $this->_if_header_lexer($str, $pos);
		}
		else
		{
			$uri = '';
		}

		if ($token[0] != 'CHAR' || $token[1] != '(')
		{
			return false;
		}

		$list  = array();
		$level = 1;
		$not   = '';
		while ($level)
		{
			$token = $this->_if_header_lexer($str, $pos);
			if ($token[0] == 'NOT')
			{
				$not = '!';
				continue;
			}
			switch ($token[0])
			{
				case 'CHAR':
					switch ($token[1])
					{
						case '(':
							$level++;
							break;
						case ')':
							$level--;
							break;
						default:
							return false;
					}
					break;
				case 'URI':
					$list[] = $not."<" . $token[1] . ">";
					break;
				case 'ETAG_WEAK':
					$list[] = $not . "[W/'".$token[1] . "']>";
					break;
				case 'ETAG_STRONG':
					$list[] = $not . "['".$token[1] . "']>";
					break;
				default:
					return false;
			}
			$not = '';
		}
		$uris[$uri] = (@is_array($uris[$uri]) ? array_merge($uris[$uri], $list) : $list);
	}

	return $uris;
}