31#define range_spec_unknown (-1)
34#define known_spec(s) ((s) != range_spec_unknown)
35#define size_min(a,b) ((a) <= (b) ? (a) : (b))
36#define size_diff(a,b) ((a) >= (b) ? ((a)-(b)) : 0)
56 if (!((p = strchr(field,
'-')) && (p - field < flen))) {
57 debugs(68, 2,
"invalid (no '-') resp-range-spec near: '" << field <<
"'");
67 debugs(68, 2,
"invalid (no first-byte-pos or it is negative) resp-range-spec near: '" << field <<
"'");
74 if (p - field >= flen) {
75 debugs(68, 2,
"invalid (no last-byte-pos) resp-range-spec near: '" << field <<
"'");
84 if (last_pos < spec->offset) {
85 debugs(68, 2,
"invalid (negative last-byte-pos) resp-range-spec near: '" << field <<
"'");
93 debugs(68, 2,
"invalid range (" << spec->
offset <<
" += " <<
94 (
long int) spec->
length <<
") in resp-range-spec near: '" << field <<
"'");
145 debugs(68, 8,
"parsing content-range field: '" << str <<
"'");
148 if (strncasecmp(str,
"bytes ", 6))
154 if (!(p = strchr(str,
'/')))
166 debugs(68, 2,
"invalid (*/*) content-range-spec near: '" << str <<
"'");
172 else if (range->
elength <= 0) {
174 debugs(68, 2,
"invalid (entity-length is negative) content-range-spec near: '" << str <<
"'");
177 debugs(68, 2,
"invalid (range is outside entity-length) content-range-spec near: '" << str <<
"'");
183 debugs(68, 2,
"unwanted content-range-spec near: '" << str <<
"'");
187 debugs(68, 8,
"parsed content-range field: " <<
222 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.
#define debugs(SECTION, LEVEL, CONTENT)