Пример #1
0
 public function output()
 {
     if ($this->maxAge && isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == infraRequestUtils::formatHttpTime($this->lastModified)) {
         infraRequestUtils::sendCachingHeaders($this->maxAge, false, $this->lastModified);
         header("HTTP/1.1 304 Not Modified");
         return;
     }
     $useXsendFile = false;
     $rangeLength = null;
     if (!$this->fileData && $this->xSendFileAllowed && in_array('mod_xsendfile', apache_get_modules())) {
         $useXsendFile = true;
     } else {
         list($rangeFrom, $rangeTo, $rangeLength) = infraRequestUtils::handleRangeRequest($this->fileSize);
     }
     if (class_exists('KalturaMonitorClient')) {
         KalturaMonitorClient::monitorDumpFile($this->fileSize, $this->filePath);
     }
     infraRequestUtils::sendCdnHeaders($this->fileExt, $rangeLength, $this->maxAge, $this->mimeType, false, $this->lastModified);
     // return "Accept-Ranges: bytes" header. Firefox looks for it when playing ogg video files
     // upon detecting this header it cancels its original request and starts sending byte range requests
     header("Accept-Ranges: bytes");
     header("Access-Control-Allow-Origin:*");
     if ($this->fileData) {
         echo substr($this->fileData, $rangeFrom, $rangeLength);
     } else {
         if ($useXsendFile) {
             header('X-Kaltura-Sendfile:');
             header("X-Sendfile: {$this->filePath}");
         } else {
             infraRequestUtils::dumpFilePart($this->filePath, $rangeFrom, $rangeLength);
         }
     }
 }
Пример #2
0
 public function output()
 {
     header('Content-Length: ' . strlen($this->content));
     if ($this->contentType) {
         header('Content-Type: ' . $this->contentType);
     }
     header("Access-Control-Allow-Origin:*");
     infraRequestUtils::sendCachingHeaders($this->maxAge);
     echo $this->content;
 }
Пример #3
0
 public static function dieError($errorCode, $message = null)
 {
     $description = self::$errorDescriptionMap[$errorCode];
     $args = func_get_args();
     if (count($args) > 1) {
         array_shift($args);
         $description = @call_user_func_array('sprintf', array_merge(array($description), $args));
     }
     if ($message) {
         $description .= ", {$message}";
     }
     if (class_exists('KalturaLog')) {
         KalturaLog::err("exiting on error {$errorCode} - {$description}");
     }
     $headers = array();
     if (self::$responseCode) {
         $headers[] = self::$errorCodeMap[self::$responseCode];
     }
     $headers[] = "X-Kaltura-App: exiting on error {$errorCode} - {$description}";
     foreach ($headers as $header) {
         header($header);
     }
     header("X-Kaltura:error-{$errorCode}");
     $headers[] = "X-Kaltura:cached-error-{$errorCode}";
     self::terminateDispatch();
     if ($errorCode != self::ACCESS_CONTROL_RESTRICTED && $errorCode != self::IP_COUNTRY_BLOCKED && $_SERVER["REQUEST_METHOD"] == "GET") {
         infraRequestUtils::sendCachingHeaders(self::CACHE_EXPIRY, true, time());
         if (function_exists('apc_store')) {
             $protocol = infraRequestUtils::getProtocol();
             $host = "";
             if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
                 $host = $_SERVER['HTTP_X_FORWARDED_HOST'];
             } else {
                 if (isset($_SERVER['HTTP_HOST'])) {
                     $host = $_SERVER['HTTP_HOST'];
                 }
             }
             $uri = $_SERVER["REQUEST_URI"];
             apc_store("exterror-{$protocol}://{$host}{$uri}", $headers, self::CACHE_EXPIRY);
         }
     }
     die;
 }
Пример #4
0
 public final function output()
 {
     $this->prepareFlavors();
     if ($this->deliveryCode) {
         $this->replaceDeliveryCode();
     }
     $this->tokenizeUrls();
     $headers = $this->getHeaders();
     $headers[] = "Access-Control-Allow-Origin:*";
     $headers[] = "Access-Control-Expose-Headers: Server,range,Content-Length,Content-Range";
     foreach ($headers as $header) {
         header($header);
     }
     if (kApiCache::hasExtraFields() && !$this->forceCachingHeaders) {
         $this->cachingHeadersAge = 0;
     }
     infraRequestUtils::sendCachingHeaders($this->cachingHeadersAge, true, $this->lastModified);
     $header = $this->getManifestHeader();
     $footer = $this->getManifestFooter();
     $flavors = $this->getManifestFlavors();
     foreach ($this->contributors as $contributorInstance) {
         /* @var $contributorInstance BaseManifestEditor */
         $header = $contributorInstance->editManifestHeader($header);
         $footer = $contributorInstance->editManifestFooter($footer);
         $flavors = $contributorInstance->editManifestFlavors($flavors);
     }
     $separator = $this->getSeparator();
     $content = $header;
     if ($content) {
         $content .= $separator;
     }
     $content .= implode($separator, $flavors);
     $content .= $separator . $footer;
     header('Content-Length: ' . strlen($content));
     // avoid chunked encoding
     echo $content;
     die;
 }
Пример #5
0
 /**
  * @param string $playbackContext
  */
 public final function output($deliveryCode, $playbackContext)
 {
     $this->deliveryCode = $this->defaultDeliveryCode;
     if ($deliveryCode) {
         $this->deliveryCode = $deliveryCode;
     }
     if ($this->deliveryCode) {
         $this->replaceDeliveryCode();
     }
     if ($this->tokenizer) {
         $this->tokenizer->setPlaybackContext($playbackContext);
     }
     $this->tokenizeUrls();
     $headers = $this->getHeaders();
     $headers[] = "Access-Control-Allow-Origin:*";
     $headers[] = "Access-Control-Expose-Headers: Server,range,Content-Length,Content-Range";
     foreach ($headers as $header) {
         header($header);
     }
     if (kApiCache::hasExtraFields() && !$this->forceCachingHeaders) {
         $this->cachingHeadersAge = 0;
     }
     infraRequestUtils::sendCachingHeaders($this->cachingHeadersAge, true, $this->lastModified);
     $header = $this->getManifestHeader();
     $footer = $this->getManifestFooter();
     $flavors = $this->getManifestFlavors();
     foreach ($this->contributors as $contributorInstance) {
         /* @var $contributorInstance BaseManifestEditor */
         $header = $contributorInstance->editManifestHeader($header);
         $footer = $contributorInstance->editManifestFooter($footer);
         $flavors = $contributorInstance->editManifestFlavors($flavors);
     }
     $content = $header;
     $separator = $this->getSeparator();
     $flavorsString = implode($separator, $flavors);
     $content .= $separator . $flavorsString;
     $content .= $separator . $footer;
     echo $content;
     die;
 }