Aerys\Http1Driver::filters PHP Method

filters() public method

public filters ( InternalRequest $ireq, array $userFilters ) : array
$ireq InternalRequest
$userFilters array
return array
    public function filters(InternalRequest $ireq, array $userFilters) : array
    {
        // We need this in filters to be able to return HTTP/2.0 filters; if we allow HTTP/1.1 filters to be returned, we have lost
        if (isset($ireq->headers["upgrade"][0]) && $ireq->headers["upgrade"][0] === "h2c" && $ireq->protocol === "1.1" && isset($ireq->headers["http2-settings"][0]) && false !== ($h2cSettings = base64_decode(strtr($ireq->headers["http2-settings"][0], "-_", "+/"), true))) {
            // Send upgrading response
            $ireq->responseWriter->send([":status" => HTTP_STATUS["SWITCHING_PROTOCOLS"], ":reason" => "Switching Protocols", "connection" => ["Upgrade"], "upgrade" => ["h2c"]]);
            $ireq->responseWriter->send(false);
            // flush before replacing
            // internal upgrade
            $client = $ireq->client;
            $client->httpDriver = $this->http2;
            $client->requestParser = $client->httpDriver->parser($client, $h2cSettings);
            $client->requestParser->valid();
            // start generator
            $ireq->responseWriter = $client->httpDriver->writer($ireq);
            $ireq->streamId = 1;
            $client->streamWindow = [];
            $client->streamWindow[$ireq->streamId] = $client->window;
            $client->streamWindowBuffer[$ireq->streamId] = "";
            $ireq->protocol = "2.0";
            /* unnecessary:
               // Make request look HTTP/2 compatible
               $ireq->headers[":scheme"] = $client->isEncrypted ? "https" : "http";
               $ireq->headers[":authority"] = $ireq->headers["host"][0];
               $ireq->headers[":path"] = $ireq->uriPath;
               $ireq->headers[":method"] = $ireq->method;
               $host = \explode(":", $ireq->headers["host"][0]);
               if (count($host) > 1) {
                   $ireq->uriPort = array_pop($host);
               }
               $ireq->uriHost = implode(":", $host);
               unset($ireq->headers["host"]);
               */
            return $client->httpDriver->filters($ireq, $userFilters);
        }
        $filters = [[$this, "responseInitFilter"], '\\Aerys\\genericResponseFilter'];
        if ($userFilters) {
            $filters = array_merge($filters, $userFilters);
        }
        if ($ireq->client->options->deflateEnable) {
            $filters[] = '\\Aerys\\deflateResponseFilter';
        }
        if ($ireq->protocol === "1.1") {
            $filters[] = [$this, "chunkedResponseFilter"];
        }
        if ($ireq->method === "HEAD") {
            $filters[] = '\\Aerys\\nullBodyResponseFilter';
        }
        return $filters;
    }