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));

Reply via email to