nhttpd: disable range handling for cached content

Origin commit data
------------------
Commit: ee1ab08bd4
Author: martii <m4rtii@gmx.de>
Date: 2014-09-23 (Tue, 23 Sep 2014)
This commit is contained in:
martii
2014-09-23 11:45:59 +02:00
committed by vanhofen
parent c85a6c1948
commit 1611d6229c
4 changed files with 20 additions and 16 deletions

View File

@@ -301,7 +301,7 @@ std::string CyhookHandler::BuildHeader(bool cache) {
strftime(timeStr, sizeof(timeStr), RFC1123FMT, gmtime(&mod_time));
result += string_printf("Last-Modified: %s\r\n", timeStr);
if (status == HANDLED_SENDFILE) {
if (status == HANDLED_SENDFILE && !cached) {
result += string_printf("Accept-Ranges: bytes\r\n");
result += string_printf("Content-Length: %lld\r\n", RangeEnd - RangeStart + 1);
if (httpStatus == HTTP_PARTIAL_CONTENT)

View File

@@ -135,6 +135,7 @@ public:
time_t LastModified; // Last Modified Time of Item to send / -1 dynamic content
std::string Sendfile; // Path & Name (local os style) of file to send
bool keep_alive;
bool cached; // cached by mod_cache
// Input
CStringList ParamList; // local copy of ParamList (Request)
@@ -144,7 +145,7 @@ public:
CStringList HookVarList; // Variables in Hook-Handling passing to other Hooks
THttp_Method Method; // HTTP Method (requested)
// constructor & deconstructor
CyhookHandler(){ContentLength = 0; RangeStart = 0; RangeEnd = -1; keep_alive = 0; _outIndent = 0;status = HANDLED_NONE;Method = M_UNKNOWN;httpStatus = HTTP_NIL;outType = plain;};
CyhookHandler(){ContentLength = 0; RangeStart = 0; RangeEnd = -1; cached = false; keep_alive = 0; _outIndent = 0;status = HANDLED_NONE;Method = M_UNKNOWN;httpStatus = HTTP_NIL;outType = plain;};
virtual ~CyhookHandler(){};
// hook slot handler

View File

@@ -135,7 +135,7 @@ bool CWebserverResponse::SendResponse() {
// Send static file
if (Connection->HookHandler.status == HANDLED_SENDFILE
&& !Connection->RequestCanceled) {
bool cache = true;
bool cache = !Connection->HookHandler.cached;
// if(Connection->HookHandler.UrlData["path"] == "/tmp/")//TODO: un-cachable dirs
// cache = false;
Write(Connection->HookHandler.BuildHeader(cache));

View File

@@ -32,6 +32,8 @@ THandleStatus CmodCache::Hook_PrepareResponse(CyhookHandler *hh) {
std::string url = hh->UrlData["fullurl"];
if (CacheList.find(url) != CacheList.end()) // is in Cache. Rewrite URL or not modified
{
hh->cached = true;
pthread_mutex_lock(&mutex); // yeah, its mine
// Check if modified
@@ -82,6 +84,7 @@ THandleStatus CmodCache::Hook_SendResponse(CyhookHandler *hh) {
{
AddToCache(hh, url, hh->yresult, hh->HookVarList["CacheMimeType"],
category); // create cache file and add to cache list
hh->cached = true;
hh->ContentLength = (hh->yresult).length();
hh->RangeEnd = (hh->yresult).length()-1;
hh->SendFile(CacheList[url].filename); // Send as file