private function parseHeadersFromRaw($rawHeaders)
{
if (strpos($rawHeaders, "\n ") || strpos($rawHeaders, "\n\t")) {
$rawHeaders = preg_replace("/(?:\r\n|\n)[ \t]+/", ' ', $rawHeaders);
}
if (!preg_match_all(self::HEADERS_PATTERN, $rawHeaders, $matches)) {
throw new ParseException($this->getParsedMessageArray(), $msg = 'Invalid headers', $code = 400, $previousException = null);
}
$headers = [];
$aggregateMatchedHeaders = '';
for ($i = 0, $c = count($matches[0]); $i < $c; $i++) {
$aggregateMatchedHeaders .= $matches[0][$i];
$field = $matches['field'][$i];
$headers[$field][] = $matches['value'][$i];
}
if (strlen($rawHeaders) !== strlen($aggregateMatchedHeaders)) {
throw new ParseException($this->getParsedMessageArray(), $msg = 'Invalid headers', $code = 400, $previousException = null);
}
$ucKeyHeaders = array_change_key_case($headers, CASE_UPPER);
if (isset($ucKeyHeaders['TRANSFER-ENCODING']) && strcasecmp('identity', $ucKeyHeaders['TRANSFER-ENCODING'][0])) {
$this->parseFlowHeaders['TRANSFER-ENCODING'] = true;
} elseif (isset($ucKeyHeaders['CONTENT-LENGTH'])) {
$this->parseFlowHeaders['CONTENT-LENGTH'] = (int) $ucKeyHeaders['CONTENT-LENGTH'][0];
}
return $headers;
}