Aerys\Root::respond PHP Method

respond() private method

private respond ( $fileInfo, aerys\Request $request, aerys\Response $response )
$request aerys\Request
$response aerys\Response
    private function respond($fileInfo, Request $request, Response $response)
    {
        // If the file doesn't exist don't bother to do anything else so the
        // HTTP server can send a 404 and/or allow handlers further down the chain
        // a chance to respond.
        if (empty($fileInfo->exists)) {
            return;
        }
        switch ($request->getMethod()) {
            case "GET":
            case "HEAD":
                break;
            case "OPTIONS":
                $response->setStatus(HTTP_STATUS["OK"]);
                $response->setHeader("Allow", "GET, HEAD, OPTIONS");
                $response->setHeader("Accept-Ranges", "bytes");
                $response->setHeader("Aerys-Generic-Response", "enable");
                return;
            default:
                $response->setStatus(HTTP_STATUS["METHOD_NOT_ALLOWED"]);
                $response->setHeader("Allow", "GET, HEAD, OPTIONS");
                $response->setHeader("Aerys-Generic-Response", "enable");
                return;
        }
        $precondition = $this->checkPreconditions($request, $fileInfo->mtime, $fileInfo->etag);
        switch ($precondition) {
            case self::PRECOND_NOT_MODIFIED:
                $response->setStatus(HTTP_STATUS["NOT_MODIFIED"]);
                $lastModifiedHttpDate = \gmdate('D, d M Y H:i:s', $fileInfo->mtime) . " GMT";
                $response->setHeader("Last-Modified", $lastModifiedHttpDate);
                if ($fileInfo->etag) {
                    $response->setHeader("Etag", $fileInfo->etag);
                }
                $response->end();
                return;
            case self::PRECOND_FAILED:
                $response->setStatus(HTTP_STATUS["PRECONDITION_FAILED"]);
                $response->end();
                return;
            case self::PRECOND_IF_RANGE_FAILED:
                // Return this so the resulting generator will be auto-resolved
                return $this->doNonRangeResponse($fileInfo, $response);
        }
        if (!($rangeHeader = $request->getHeader("Range"))) {
            // Return this so the resulting generator will be auto-resolved
            return $this->doNonRangeResponse($fileInfo, $response);
        }
        if ($range = $this->normalizeByteRanges($fileInfo->size, $rangeHeader)) {
            // Return this so the resulting generator will be auto-resolved
            return $this->doRangeResponse($range, $fileInfo, $response);
        }
        // If we're still here this is the only remaining response we can send
        $response->setStatus(HTTP_STATUS["REQUESTED_RANGE_NOT_SATISFIABLE"]);
        $response->setHeader("Content-Range", "*/{$fileInfo->size}");
        $response->end();
    }