From 4d48a7c21fa451c7f32a096ea0b1dcb24160d742 Mon Sep 17 00:00:00 2001 From: Alex Rousskov Date: Tue, 19 Nov 2013 15:51:46 -0700 Subject: [PATCH] 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. --- src/Server.cc | 6 ++++++ src/http.cc | 3 --- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Server.cc b/src/Server.cc index 39ed4fe0f6..f9e998d6dc 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" @@ -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 * diff --git a/src/http.cc b/src/http.cc index 7807094863..4003219814 100644 --- a/src/http.cc +++ b/src/http.cc @@ -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 */ -- 2.47.2