diff --git a/airtime_mvc/application/controllers/FeedsController.php b/airtime_mvc/application/controllers/FeedsController.php index 6212d0a7f..4bca8d7d2 100644 --- a/airtime_mvc/application/controllers/FeedsController.php +++ b/airtime_mvc/application/controllers/FeedsController.php @@ -15,8 +15,45 @@ class FeedsController extends Zend_Controller_Action return; } - header('Content-Type: text/xml; charset=UTF-8'); - echo Application_Service_PodcastService::createStationRssFeed(); + $rssData = Application_Service_PodcastService::createStationRssFeed(); + + $mimeType = "text/xml"; + header("Content-Type: $mimeType; charset=UTF-8"); + + if (isset($_SERVER['HTTP_RANGE'])) { + header('HTTP/1.1 206 Partial Content'); + } else { + header('HTTP/1.1 200 OK'); + } + header("Content-Type: $mimeType"); + header("Content-Transfer-Encoding: binary"); + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Pragma: no-cache'); + header('Accept-Ranges: bytes'); + $size = strlen($rssData); + + $begin = 0; + $end = $size - 1; + + //ob_start(); //Must start a buffer here for these header() functions + + if (isset($_SERVER['HTTP_RANGE'])) { + if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) { + $begin = intval($matches[1]); + if (!empty($matches[2])) { + $end = intval($matches[2]); + } + } + } + + if ($size > 0) { + header('Content-Length:' . (($end - $begin) + 1)); + if (isset($_SERVER['HTTP_RANGE'])) { + header("Content-Range: bytes $begin-$end/$size"); + } + } + + echo $rssData; } } \ No newline at end of file