~ps10gel/ubuntu/xenial/trafficserver/6.2.0

« back to all changes in this revision

Viewing changes to proxy/Transform.cc

  • Committer: Package Import Robot
  • Author(s): Aron Xu
  • Date: 2013-05-09 01:00:04 UTC
  • mto: (1.1.11) (5.3.3 experimental)
  • mto: This revision was merged to the branch mainline in revision 15.
  • Revision ID: package-import@ubuntu.com-20130509010004-9fqq9n0adseg3f8w
Tags: upstream-3.3.2
ImportĀ upstreamĀ versionĀ 3.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
114
114
  -------------------------------------------------------------------------*/
115
115
 
116
116
INKVConnInternal *
117
 
TransformProcessor::range_transform(ProxyMutex *mut, RangeRecord *ranges, bool unsatisfiable, int num_fields, HTTPHdr *transform_resp, const char * content_type, int content_type_len, int64_t content_length)
 
117
TransformProcessor::range_transform(ProxyMutex *mut, RangeRecord *ranges, int num_fields, HTTPHdr *transform_resp, const char * content_type, int content_type_len, int64_t content_length)
118
118
{
119
 
  RangeTransform *range_transform = NEW(new RangeTransform(mut, ranges, unsatisfiable, num_fields, transform_resp, content_type, content_type_len, content_length));
 
119
  RangeTransform *range_transform = NEW(new RangeTransform(mut, ranges, num_fields, transform_resp, content_type, content_type_len, content_length));
120
120
  return range_transform;
121
121
}
122
122
 
729
729
/*-------------------------------------------------------------------------
730
730
  -------------------------------------------------------------------------*/
731
731
 
732
 
RangeTransform::RangeTransform(ProxyMutex *mut, RangeRecord *ranges,bool unsatisfiable, int num_fields, HTTPHdr * transform_resp, const char * content_type, int content_type_len, int64_t content_length)
 
732
RangeTransform::RangeTransform(ProxyMutex *mut, RangeRecord *ranges, int num_fields, HTTPHdr * transform_resp, const char * content_type, int content_type_len, int64_t content_length)
733
733
  : INKVConnInternal(NULL, reinterpret_cast<TSMutex>(mut)),
734
734
  m_output_buf(NULL),
735
735
  m_output_reader(NULL),
736
736
  m_transform_resp(transform_resp),
737
737
  m_output_vio(NULL),
738
 
  m_unsatisfiable_range(unsatisfiable),
739
738
  m_range_content_length(0),
740
739
  m_num_range_fields(num_fields),
741
740
  m_current_range(0), m_content_type(content_type), m_content_type_len(content_type_len), m_ranges(ranges), m_output_cl(content_length), m_done(0)
969
968
  m_done += m_output_buf->write("\r\n", 2);
970
969
  m_done += m_output_buf->write(cont_range, sizeof(cont_range) - 1);
971
970
 
972
 
  snprintf(numbers, sizeof(numbers), "%" PRId64 "d-%" PRId64 "d/%" PRId64 "d", m_ranges[index]._start, m_ranges[index]._end, m_output_cl);
 
971
  snprintf(numbers, sizeof(numbers), "%" PRId64 "-%" PRId64 "/%" PRId64 "", m_ranges[index]._start, m_ranges[index]._end, m_output_cl);
973
972
  len = strlen(numbers);
974
973
  if (len < RANGE_NUMBERS_LENGTH)
975
974
    m_done += m_output_buf->write(numbers, len);
992
991
  HTTPStatus status_code;
993
992
  
994
993
  ink_release_assert(m_transform_resp);
995
 
  ink_release_assert(m_transform_resp->field_find(MIME_FIELD_CONTENT_RANGE, MIME_LEN_CONTENT_RANGE) == NULL);
996
994
 
997
995
  status_code = HTTP_STATUS_PARTIAL_CONTENT;
998
996
  m_transform_resp->status_set(status_code);
999
997
  reason_phrase = (char *) (http_hdr_reason_lookup(status_code));
1000
998
  m_transform_resp->reason_set(reason_phrase, strlen(reason_phrase));
1001
999
 
1002
 
  // set the right Content-Type for multiple entry Range
1003
 
  field = m_transform_resp->field_find(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
1004
 
 
1005
 
  if (field != NULL)
1006
 
    m_transform_resp->field_delete(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
1007
 
 
1008
 
 
1009
 
  field = m_transform_resp->field_create(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
1010
 
  field->value_append(m_transform_resp->m_heap, m_transform_resp->m_mime, range_type, sizeof(range_type) - 1);
1011
 
 
1012
 
  m_transform_resp->field_attach(field);
1013
 
 
 
1000
  if (m_num_range_fields > 1) {
 
1001
    // set the right Content-Type for multiple entry Range
 
1002
    field = m_transform_resp->field_find(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
 
1003
 
 
1004
    if (field != NULL)
 
1005
      m_transform_resp->field_delete(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
 
1006
 
 
1007
 
 
1008
    field = m_transform_resp->field_create(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE);
 
1009
    field->value_append(m_transform_resp->m_heap, m_transform_resp->m_mime, range_type, sizeof(range_type) - 1);
 
1010
 
 
1011
    m_transform_resp->field_attach(field);
 
1012
  } else {
 
1013
    char numbers[RANGE_NUMBERS_LENGTH];
 
1014
    m_transform_resp->field_delete(MIME_FIELD_CONTENT_RANGE, MIME_LEN_CONTENT_RANGE);
 
1015
    field = m_transform_resp->field_create(MIME_FIELD_CONTENT_RANGE, MIME_LEN_CONTENT_RANGE);
 
1016
    snprintf(numbers, sizeof(numbers), "bytes %" PRId64"-%" PRId64"/%" PRId64, m_ranges[0]._start, m_ranges[0]._end, m_output_cl);
 
1017
    field->value_set(m_transform_resp->m_heap, m_transform_resp->m_mime, numbers, strlen(numbers));
 
1018
    m_transform_resp->field_attach(field);
 
1019
  }
1014
1020
}
1015
1021
 
1016
1022
#undef RANGE_NUMBERS_LENGTH