squid_off_t httpHeaderGetSize(const HttpHeader * hdr, http_hdr_type id) { HttpHeaderEntry *e; squid_off_t value = -1; int ok; assert_eid(id); assert(Headers[id].type == ftSize); /* must be of an appropriate type */ if ((e = httpHeaderFindEntry(hdr, id))) { ok = httpHeaderParseSize(strBuf(e->value), &value); httpHeaderNoteParsedEntry(e->id, e->value, !ok); } return value; }
HttpHdrRange * httpHeaderGetRange(const HttpHeader * hdr) { HttpHdrRange *r = NULL; HttpHeaderEntry *e; /* some clients will send "Request-Range" _and_ *matching* "Range" * who knows, some clients might send Request-Range only; * this "if" should work correctly in both cases; * hopefully no clients send mismatched headers! */ if ((e = httpHeaderFindEntry(hdr, HDR_RANGE)) || (e = httpHeaderFindEntry(hdr, HDR_REQUEST_RANGE))) { r = httpHdrRangeParseCreate(&e->value); httpHeaderNoteParsedEntry(e->id, e->value, !r); } return r; }
HttpHdrCc * httpHeaderGetCc(const HttpHeader * hdr) { HttpHdrCc *cc; String s; if (!CBIT_TEST(hdr->mask, HDR_CACHE_CONTROL)) return NULL; s = httpHeaderGetList(hdr, HDR_CACHE_CONTROL); cc = httpHdrCcParseCreate(&s); HttpHeaderStats[hdr->owner].ccParsedCount++; if (cc) httpHdrCcUpdateStats(cc, &HttpHeaderStats[hdr->owner].ccTypeDistr); httpHeaderNoteParsedEntry(HDR_CACHE_CONTROL, s, !cc); stringClean(&s); return cc; }