Updated Branches: refs/heads/master 7ddc44f74 -> f130971bb
TS-1955 Range: requests during read-while-writer gets the wrong Content-Length Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3d3aa13b Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3d3aa13b Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3d3aa13b Branch: refs/heads/master Commit: 3d3aa13b603e90fb20e5c9d1e0e70ab878e51d64 Parents: 7ddc44f Author: Leif Hedstrom <[email protected]> Authored: Thu Oct 31 21:40:07 2013 -0600 Committer: Leif Hedstrom <[email protected]> Committed: Tue Nov 5 08:17:28 2013 -0700 ---------------------------------------------------------------------- proxy/http/HttpTransact.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3d3aa13b/proxy/http/HttpTransact.cc ---------------------------------------------------------------------- diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index a0fb53c..049e672 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -6532,12 +6532,11 @@ HttpTransact::handle_content_length_header(State* s, HTTPHdr* header, HTTPHdr* b // response content length in init_state_vars_from_response() if (s->range_setup != HttpTransact::RANGE_NOT_TRANSFORM_REQUESTED) break; - case SOURCE_CACHE: + case SOURCE_CACHE: // if we are doing a single Range: request, calculate the new // C-L: header if (s->range_setup == HttpTransact::RANGE_NOT_TRANSFORM_REQUESTED) { - Debug("http_trans", "Partial content requested, re-calculating content-length"); change_response_header_because_of_range_request(s,header); s->hdr_info.trust_response_cl = true; } @@ -6554,13 +6553,18 @@ HttpTransact::handle_content_length_header(State* s, HTTPHdr* header, HTTPHdr* b s->hdr_info.trust_response_cl = false; } break; + case SOURCE_TRANSFORM: - if (s->hdr_info.transform_response_cl == HTTP_UNDEFINED_CL) { + if (s->range_setup == HttpTransact::RANGE_REQUESTED) { + change_response_header_because_of_range_request(s, header); + s->hdr_info.trust_response_cl = true; + } else if (s->hdr_info.transform_response_cl == HTTP_UNDEFINED_CL) { s->hdr_info.trust_response_cl = false; } else { s->hdr_info.trust_response_cl = true; } break; + default: ink_release_assert(0); break; @@ -6588,7 +6592,6 @@ HttpTransact::handle_content_length_header(State* s, HTTPHdr* header, HTTPHdr* b else if (s->range_setup == RANGE_NOT_TRANSFORM_REQUESTED) { // if we are doing a single Range: request, calculate the new // C-L: header - Debug("http_trans", "Partial content requested, re-calculating content-length"); change_response_header_because_of_range_request(s,header); s->hdr_info.trust_response_cl = true; } @@ -8664,6 +8667,8 @@ HttpTransact::change_response_header_because_of_range_request(State *s, HTTPHdr MIMEField *field; char *reason_phrase; + Debug("http_trans", "Partial content requested, re-calculating content-length"); + header->status_set(HTTP_STATUS_PARTIAL_CONTENT); reason_phrase = (char *) (http_hdr_reason_lookup(HTTP_STATUS_PARTIAL_CONTENT)); header->reason_set(reason_phrase, strlen(reason_phrase));
