]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Re-compute Range response content offset after an FTP response was adapted.
authorAlex Rousskov <rousskov@measurement-factory.com>
Tue, 19 Nov 2013 22:51:46 +0000 (15:51 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 19 Nov 2013 22:51:46 +0000 (15:51 -0700)
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.

src/Server.cc
src/http.cc

index 39ed4fe0f69b6e48f379735fdad362fb99b8d85b..f9e998d6dc15aead076696ba09e815d95525c6ac 100644 (file)
@@ -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"
@@ -525,6 +526,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 *
index 78070948637fc9372d7bb4ca71777f95554a4a64..40032198143e3e0a90879e544d5dcddca87bb93a 100644 (file)
@@ -913,9 +913,6 @@ HttpStateData::haveParsedReplyHeaders()
     Ctx ctx = ctx_enter(entry->mem_obj->url);
     HttpReply *rep = finalReply();
 
-    if (rep->sline.status() == Http::scPartialContent && rep->content_range)
-        currentOffset = rep->content_range->spec.offset;
-
     entry->timestampsSet();
 
     /* Check if object is cacheable or not based on reply code */