/** * Dispatch the request to the correct controller * * @param null|Mad_Controller_Request_Http $request * @param null|Mad_Controller_Response_Http $response * @return void */ public function dispatch($request = null, $response = null) { $t = new Horde_Support_Timer(); $t->push(); if ($response === null) { $response = new Mad_Controller_Response_Http(); } if ($request === null) { $request = new Mad_Controller_Request_Http(); } // request could not be parsed if ($request->isMalformed()) { $body = "Your request could not be understood by the server, " . "probably due to malformed syntax.\n\n"; $exc = $request->getException(); if ($exc && MAD_ENV != 'production') { $body .= $exc->getMessage(); } $response->setStatus(400); $response->setBody($body); // dispatch request to controller } else { $controller = $this->recognize($request); $response = $controller->process($request, $response); } $time = $t->pop(); $this->_logRequest($request, $time); $response->send(); }
/** * Send file headers for {@link sendFile()} and {@link sendData()}. * * @see sendData() * @see sendFile() * @param array $options */ protected function _sendFileHeaders($options) { // validate options $valid = array('filename', 'type', 'disposition', 'length'); $options = Mad_Support_Base::assertValidKeys($options, $valid); // default type/disposition/filename if (empty($options['type'])) { $options['type'] = 'application/octet-stream'; } if (empty($options['disposition'])) { $options['disposition'] = 'attachment'; } if (!empty($options['filename'])) { $options['disposition'] .= '; filename=' . $options['filename']; } $this->_response->setHeader('Expires: 0'); $this->_response->setHeader('Content-Length: ' . $options['length']); $this->_response->setHeader('Content-Type: ' . $options['type']); $this->_response->setHeader('Content-Disposition: ' . $options['disposition']); $this->_response->setHeader('Content-Transfer-Encoding: binary'); // allow for byte serving of pdf docs if (strstr($options['filename'], 'pdf')) { $this->_response->setHeader("Accept-Ranges: bytes"); $this->_response->setHeader("bytes: 0-"); } }