From: Alex Rousskov Date: Thu, 21 Nov 2013 21:54:29 +0000 (-0700) Subject: Re-compute Range response content offset after an FTP response was adapted. X-Git-Tag: SQUID_3_3_11~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f2a67e7f17ef0b1f4c53791567636ec583c886c;p=thirdparty%2Fsquid.git Re-compute Range response content offset after an FTP response was adapted. Moved HTTP-only offset calculation code to the general ServerStateData code so that [converted-to-HTTP] FTP responses can use it. FTP code computes the range offset on its own earlier, but we must REcalculate in case the response is adapted into a response with a different (or no) content range. --- diff --git a/src/Server.cc b/src/Server.cc index efb1071cd0..cef1fb2b12 100644 --- a/src/Server.cc +++ b/src/Server.cc @@ -39,6 +39,7 @@ #include "fd.h" #include "err_detail_type.h" #include "errorpage.h" +#include "HttpHdrContRange.h" #include "HttpReply.h" #include "HttpRequest.h" #include "Server.h" @@ -522,6 +523,11 @@ ServerStateData::haveParsedReplyHeaders() { Must(theFinalReply); maybePurgeOthers(); + + // adaptation may overwrite old offset computed using the virgin response + const bool partial = theFinalReply->content_range && + theFinalReply->sline.status() == Http::scPartialContent; + currentOffset = partial ? theFinalReply->content_range->spec.offset : 0; } HttpRequest * diff --git a/src/http.cc b/src/http.cc index 5badfcce20..d11e025a23 100644 --- a/src/http.cc +++ b/src/http.cc @@ -924,10 +924,6 @@ HttpStateData::haveParsedReplyHeaders() Ctx ctx = ctx_enter(entry->mem_obj->url); HttpReply *rep = finalReply(); - if (rep->sline.status == HTTP_PARTIAL_CONTENT && - rep->content_range) - currentOffset = rep->content_range->spec.offset; - entry->timestampsSet(); /* Check if object is cacheable or not based on reply code */