private function tryApplication(InternalRequest $ireq, callable $application, array $filters)
{
$response = $this->initializeResponse($ireq, $filters);
$request = new StandardRequest($ireq);
try {
$out = $application($request, $response);
if ($out instanceof \Generator) {
$promise = resolve($out);
$promise->when($this->onCoroutineAppResolve, [$ireq, $response, $filters]);
} elseif ($response->state() & Response::STARTED) {
$response->end();
} else {
$status = HTTP_STATUS["NOT_FOUND"];
$body = makeGenericBody($status, ["sub_heading" => "Requested: {$ireq->uri}"]);
$response->setStatus($status);
$response->end($body);
}
} catch (ClientSizeException $error) {
if (!($response->state() & Response::STARTED)) {
$status = HTTP_STATUS["REQUEST_ENTITY_TOO_LARGE"];
$body = makeGenericBody($status, ["sub_heading" => "Requested: {$ireq->uri}"]);
$response->setStatus($status);
$response->end($body);
}
} catch (ClientException $error) {
// Do nothing -- responder actions aren't required to catch this
} catch (\Throwable $error) {
$this->onApplicationError($error, $ireq, $response, $filters);
}
}