MCPcopy Create free account
hub / github.com/apache/trafficserver / transform_to_range

Method transform_to_range

src/proxy/Transform.cc:900–1007  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

898 -------------------------------------------------------------------------*/
899
900void
901RangeTransform::transform_to_range()
902{
903 IOBufferReader *reader = m_write_vio.get_reader();
904 int64_t toskip, tosend, avail;
905 const int64_t *end, *start;
906 int64_t prev_end = 0;
907 int64_t *done_byte;
908
909 if (m_current_range >= m_num_range_fields) {
910 return;
911 }
912
913 end = &m_ranges[m_current_range]._end;
914 done_byte = &m_ranges[m_current_range]._done_byte;
915 start = &m_ranges[m_current_range]._start;
916 avail = reader->read_avail();
917
918 while (true) {
919 if (*done_byte < (*start - 1)) {
920 toskip = *start - *done_byte - 1;
921
922 if (toskip > avail) {
923 toskip = avail;
924 }
925
926 if (toskip > 0) {
927 reader->consume(toskip);
928 *done_byte += toskip;
929 avail = reader->read_avail();
930 }
931 }
932
933 if (avail > 0) {
934 tosend = *end - *done_byte;
935
936 if (tosend > avail) {
937 tosend = avail;
938 }
939
940 m_output_buf->write(reader, tosend);
941 reader->consume(tosend);
942
943 m_done += tosend;
944 *done_byte += tosend;
945 }
946
947 if (*done_byte == *end) {
948 prev_end = *end;
949 }
950
951 // move to next Range if done one
952 // ignore bad Range: _done_byte -1, _end -1
953 while (*done_byte == *end) {
954 m_current_range++;
955
956 if (m_current_range == m_num_range_fields) {
957 if (m_num_range_fields > 1) {

Callers

nothing calls this directly

Calls 7

get_readerMethod · 0.80
ntodoMethod · 0.80
read_availMethod · 0.45
consumeMethod · 0.45
writeMethod · 0.45
reenableMethod · 0.45
handleEventMethod · 0.45

Tested by

no test coverage detected