/* Mangles headers for a list of headers. */ void httpHdrMangleList(HttpHeader * l, request_t * request) { HttpHeaderEntry *e; HttpHeaderPos p = HttpHeaderInitPos; int removed_headers = 0; while ((e = httpHeaderGetEntry(l, &p))) { if (0 == httpHdrMangle(e, request)) { httpHeaderDelAt(l, p); removed_headers++; } } if (removed_headers) httpHeaderRefreshMask(l); }
/* * deletes all fields with a given name if any, returns #fields deleted; */ int httpHeaderDelByName(HttpHeader * hdr, const char *name) { int count = 0; HttpHeaderPos pos = HttpHeaderInitPos; HttpHeaderEntry *e; httpHeaderMaskInit(&hdr->mask, 0); /* temporal inconsistency */ debug(55, 7) ("deleting '%s' fields in hdr %p\n", name, hdr); while ((e = httpHeaderGetEntry(hdr, &pos))) { if (!strCaseCmp(e->name, name)) { httpHeaderDelAt(hdr, pos); count++; } else CBIT_SET(hdr->mask, e->id); } return count; }
/* deletes all entries with a given id, returns the #entries deleted */ int httpHeaderDelById(HttpHeader * hdr, http_hdr_type id) { int count = 0; HttpHeaderPos pos = HttpHeaderInitPos; HttpHeaderEntry *e; debug(55, 8) ("%p del-by-id %d\n", hdr, id); assert(hdr); assert_eid(id); assert(id != HDR_OTHER); /* does not make sense */ if (!CBIT_TEST(hdr->mask, id)) return 0; while ((e = httpHeaderGetEntry(hdr, &pos))) { if (e->id == id) { httpHeaderDelAt(hdr, pos); count++; } } CBIT_CLR(hdr->mask, id); assert(count); return count; }