public function action_full_stream($last_modified = -1, $cache_names = false, $headers = false, $do_headers = true, $exit = true)
    {
        $directories = array();
        if (!is_array($cache_names)) {
            $cache_names = I2CE::getConfig()->getKeys("/modules/csd_cache");
        }
        if ($do_headers && array_key_exists('HTTP_HOST', $_SERVER)) {
            if (!is_array($headers)) {
                $headers = array('Content-Type: text/xml');
            }
            foreach ($headers as $header) {
                header($header);
            }
        }
        foreach ($cache_names as $cache_name) {
            try {
                $csd_cache = new iHRIS_CSDCache($cache_name);
            } catch (Exception $e) {
                I2CE::raiseError("{$cache_name} exception");
                continue;
            }
            if (!$csd_cache->enabled()) {
                continue;
            }
            if (!($directory = $csd_cache->directory())) {
                I2CE::raiseError("{$cache_name} error with directory");
                continue;
            }
            if (!array_key_exists($directory, $directories)) {
                $directories[$directory] = array();
            }
            $directories[$directory][] = $csd_cache;
        }
        if ($errors = I2CE_Dumper::cleanlyEndOutputBuffers()) {
            I2CE::raiseError("Got errors:\n{$errors}");
        }
        if ($do_headers) {
            echo '<?xml version="1.0" encoding="UTF-8"?>
';
            flush();
        }
        echo '<csd:CSD xmlns:csd="urn:ihe:iti:csd:2013" >
';
        foreach (array('organization', 'service', 'facility', 'provider') as $directory) {
            if (!array_key_exists($directory, $directories)) {
                $directories[$directory] = array();
            }
            echo "<csd:" . $directory . "Directory>";
            foreach ($directories[$directory] as $csd_cache) {
                $csd_cache->streamCache(false, $last_modified, array(), '', '', false);
                flush();
            }
            echo "</csd:" . $directory . "Directory>";
        }
        echo '</csd:CSD>';
        flush();
        if ($exit) {
            exit(0);
        }
        return true;
    }