Exemplo n.º 1
0
 /**
  *
  * @param unknown_type $text
  * @return Gpf_Net_Server_Http_Response
  */
 public static function createUnimplemented($text)
 {
     $response = new Gpf_Net_Server_Http_Response(501);
     $response->setConnection("close");
     $response->setBody($text);
     return $response;
 }
Exemplo n.º 2
0
 private function checkRequestHeader(Gpf_Net_Server_Http_Request $request)
 {
     //HTTP/1.1 All Internet-based HTTP/1.1 servers MUST respond with a 400
     //         (Bad Request) status code to any HTTP/1.1 request message which
     //         lacks a Host header field.
     if ($request->getVersion() == '1.1' && !$request->existsHeader('Host')) {
         $response = Gpf_Net_Server_Http_Response::createBadRequest("Host header is missing");
         throw new Gpf_Net_Server_Http_RequestException($response);
     }
     //        if($request->existsHeader('TE')) {
     //            $response = Gpf_Net_Server_Http_Response::createUnimplemented(
     //                "Transfer-Encoding not supported");
     //            throw new Gpf_Net_Server_Http_RequestException($response);
     //        }
     if ($request->headerContain('Content-Type', 'multipart/byteranges')) {
         $response = Gpf_Net_Server_Http_Response::createUnimplemented("Content-Type multipart/byteranges not supported");
         throw new Gpf_Net_Server_Http_RequestException($response);
     }
 }
Exemplo n.º 3
0
 /**
  * @return Gpf_Net_Server_Http_Request
  */
 public static function parseHeader($requestString)
 {
     $lines = explode("\n", $requestString);
     $firstLine = 0;
     //HTTP1.1 servers SHOULD ignore any empty line(s) received where a Request-Line is expected
     while ($firstLine < count($lines) && strlen($lines[$firstLine++]) == 0) {
     }
     $regs = array();
     if (!preg_match("'^([^ ]+)[ ]+([^ ]+)[ ]+HTTP/([^ ]+)\$'", $lines[--$firstLine], $regs)) {
         $response = Gpf_Net_Server_Http_Response::createBadRequest("Bad request");
         throw new Gpf_Net_Server_Http_RequestException($response);
     }
     $request = new Gpf_Net_Server_Http_Request($regs[1], $regs[2], $regs[3]);
     for ($i = $firstLine + 1; $i < count($lines); $i++) {
         $line = rtrim($lines[$i]);
         //HTTP1.1 Header fields can be extended over multiple lines by preceding
         //         each extra line with at least one SP or HT
         while ($i < count($lines) - 1 && $lines[$i + 1] != ltrim($lines[$i + 1])) {
             $line .= ' ' . trim($lines[$i + 1]);
             $i++;
         }
         $regs = array();
         if (!preg_match("'^([^: ]+): (.+)\$'", $line, $regs)) {
             $response = Gpf_Net_Server_Http_Response::createBadRequest("Request header filed is missing : separator");
             throw new Gpf_Net_Server_Http_RequestException($response);
         }
         $request->addHeader($regs[1], $regs[2]);
     }
     $request->exportPhpVars();
     return $request;
 }
 /**
  * @param unknown_type $code
  * @param Gpf_Common_Stream $streamingObject
  */
 public function __construct($code, Gpf_Common_Stream $streamingObject)
 {
     parent::__construct($code);
     $this->streamingObject = $streamingObject;
 }
Exemplo n.º 5
0
 /**
  *
  * @param Gpf_Net_Server_Http_Request $request
  * @return Gpf_Net_Server_Http_Response
  */
 public function handle(Gpf_Net_Server_Http_Request $request)
 {
     $file = new Gpf_Io_File($this->getFileName($request->getPath()));
     $fileETag = $this->computeEtag($file);
     Gpf_Log::debug($request->toString());
     if ($this->isCacheableFile($file) && $request->ifNoneMatch($fileETag)) {
         $response = new Gpf_Net_Server_Http_Response(304, $file);
         $response->setConnection('Keep-Alive');
         $response->setBody("Not Modified");
         $response->setETag($fileETag);
         Gpf_Log::debug($this->_sys("Resource not modified, returned 304 for %s", $request->getPath()));
         return $response;
     }
     //TODO load file from memory cache if available and not from file
     // - but I'm not sure if file cache will help - it can just use quite huge amount of server memory
     try {
         $file->open();
     } catch (Gpf_Exception $e) {
         $response = new Gpf_Net_Server_Http_Response(404);
         $response->setBody('File not found');
         Gpf_Log::info($e->getMessage());
         return $response;
     }
     $response = new Gpf_Net_Server_Http_StreamResponse(200, $file);
     $response->setConnection('Keep-Alive');
     $response->setContentType(self::getContentType(self::getFileExtension($request->getPath())));
     $response->setContentLength($file->getSize());
     if ($this->isCacheableFile($file)) {
         $response->setETag($fileETag);
     }
     Gpf_Log::debug($this->_sys("Return static file %s" . $request->getPath()));
     return $response;
 }