33#define range_spec_unknown (-1)
36#define known_spec(s) ((s) != range_spec_unknown)
37#define size_min(a,b) ((a) <= (b) ? (a) : (b))
38#define size_diff(a,b) ((a) >= (b) ? ((a)-(b)) : 0)
58 if (!((p = strchr(field,
'-')) && (p - field < flen))) {
59 debugs(68, 2,
"invalid (no '-') resp-range-spec near: '" << field <<
"'");
69 debugs(68, 2,
"invalid (no first-byte-pos or it is negative) resp-range-spec near: '" << field <<
"'");
76 if (p - field >= flen) {
77 debugs(68, 2,
"invalid (no last-byte-pos) resp-range-spec near: '" << field <<
"'");
86 if (last_pos < spec->offset) {
87 debugs(68, 2,
"invalid (negative last-byte-pos) resp-range-spec near: '" << field <<
"'");
92 if (last_pos == std::numeric_limits<
decltype(last_pos)>
::max()) {
93 debugs(68, 2,
"unsupported (last-byte-pos too large) resp-range-spec near: '" << field <<
"'");
101 debugs(68, 2,
"invalid range (" << spec->
offset <<
" += " <<
102 (
long int) spec->
length <<
") in resp-range-spec near: '" << field <<
"'");
153 debugs(68, 8,
"parsing content-range field: '" << str <<
"'");
156 if (strncasecmp(str,
"bytes ", 6))
162 if (!(p = strchr(str,
'/')))
174 debugs(68, 2,
"invalid (*/*) content-range-spec near: '" << str <<
"'");
180 else if (range->
elength <= 0) {
182 debugs(68, 2,
"invalid (entity-length is negative) content-range-spec near: '" << str <<
"'");
185 debugs(68, 2,
"invalid (range is outside entity-length) content-range-spec near: '" << str <<
"'");
191 debugs(68, 2,
"unwanted content-range-spec near: '" << str <<
"'");
195 debugs(68, 8,
"parsed content-range field: " <<
230 assert(cr && ent_len >= 0);
HttpHdrContRange * httpHdrContRangeCreate(void)
static void httpHdrRangeRespSpecPackInto(const HttpHdrRangeSpec *spec, Packable *p)
static int httpHdrRangeRespSpecParseInit(HttpHdrRangeSpec *spec, const char *field, int flen)
HttpHdrContRange * httpHdrContRangeDup(const HttpHdrContRange *range)
void httpHdrContRangePackInto(const HttpHdrContRange *range, Packable *p)
#define range_spec_unknown
void httpHdrContRangeSet(HttpHdrContRange *cr, HttpHdrRangeSpec spec, int64_t ent_len)
int httpHdrContRangeParseInit(HttpHdrContRange *range, const char *str)
HttpHdrContRange * httpHdrContRangeParseCreate(const char *str)
void appendf(const char *fmt,...) PRINTF_FORMAT_ARG2
Append operation with printf-style arguments.
virtual void append(const char *buf, int size)=0
Appends a c-string to existing packed data.
A const & max(A const &lhs, A const &rhs)
#define debugs(SECTION, LEVEL, CONTENT)