private function initializeRequest(Client $client, array $parseResult) : InternalRequest
{
$trace = $parseResult["trace"];
$protocol = empty($parseResult["protocol"]) ? "1.0" : $parseResult["protocol"];
$method = empty($parseResult["method"]) ? "GET" : $parseResult["method"];
if ($this->options->normalizeMethodCase) {
$method = strtoupper($method);
}
$uri = empty($parseResult["uri"]) ? "/" : $parseResult["uri"];
$headers = empty($parseResult["headers"]) ? [] : $parseResult["headers"];
assert($this->logDebug(sprintf("%s %s HTTP/%s @ %s:%s%s", $method, $uri, $protocol, $client->clientAddr, $client->clientPort, empty($parseResult["server_push"]) ? "" : " (server-push via {$parseResult["server_push"]})")));
if (isset($client->remainingKeepAlives)) {
$client->remainingKeepAlives--;
}
$ireq = new InternalRequest();
$ireq->client = $client;
$ireq->time = $this->ticker->currentTime;
$ireq->httpDate = $this->ticker->currentHttpDate;
$ireq->locals = [];
$ireq->trace = $trace;
$ireq->protocol = $protocol;
$ireq->method = $method;
$ireq->headers = $headers;
$ireq->body = $this->nullBody;
$ireq->streamId = $parseResult["id"];
if (empty($ireq->headers["cookie"])) {
$ireq->cookies = [];
} else {
// @TODO delay initialization
$ireq->cookies = array_merge(...array_map('\\Aerys\\parseCookie', $ireq->headers["cookie"]));
}
$ireq->uriRaw = $uri;
if (stripos($uri, "http://") === 0 || stripos($uri, "https://") === 0) {
$uri = parse_url($uri);
$ireq->uriHost = $uri["host"];
$ireq->uriPort = isset($uri["port"]) ? (int) $uri["port"] : $client->serverPort;
$ireq->uriPath = \rawurldecode($uri["path"]);
$ireq->uriQuery = $uri["query"] ?? "";
$ireq->uri = isset($uri["query"]) ? "{$ireq->uriPath}?{$uri['query']}" : $ireq->uriPath;
} else {
if ($qPos = strpos($uri, '?')) {
$ireq->uriQuery = substr($uri, $qPos + 1);
$ireq->uriPath = \rawurldecode(substr($uri, 0, $qPos));
$ireq->uri = "{$ireq->uriPath}?{$ireq->uriQuery}";
} else {
$ireq->uri = $ireq->uriPath = \rawurldecode($uri);
$ireq->uriQuery = "";
}
$host = $ireq->headers["host"][0] ?? "";
if (($colon = strrpos($host, ":")) !== false) {
$ireq->uriHost = substr($host, 0, $colon);
$ireq->uriPort = (int) substr($host, $colon + 1);
} else {
$ireq->uriHost = $host;
$ireq->uriPort = $client->serverPort;
}
}
return $ireq;
}