void VRT_SetHdr(VRT_CTX , const struct gethdr_s *hs, const char *p, ...) { struct http *hp; va_list ap; const char *b; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); AN(hs); AN(hs->what); hp = VRT_selecthttp(ctx, hs->where); CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC); va_start(ap, p); if (p == vrt_magic_string_unset) { http_Unset(hp, hs->what); } else { b = VRT_String(hp->ws, hs->what + 1, p, ap); if (b == NULL) { VSLb(ctx->vsl, SLT_LostHeader, "%s", hs->what + 1); } else { http_Unset(hp, hs->what); http_SetHeader(hp, b); } } va_end(ap); }
vmod_collect(VRT_CTX, VCL_HEADER hdr, VCL_STRING sep) { struct http *hp; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); hp = VRT_selecthttp(ctx, hdr->where); http_CollectHdrSep(hp, hdr->what, sep); }
vmod_copy(VRT_CTX, VCL_HEADER src, VCL_HEADER dst) { struct http *src_hp; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); src_hp = VRT_selecthttp(ctx, src->where); header_http_cphdr(ctx, src_hp, src->what, dst); }
vmod_remove(VRT_CTX, struct vmod_priv *priv, VCL_HEADER hdr, VCL_STRING s) { struct http *hp; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); header_init_re(priv, s); hp = VRT_selecthttp(ctx, hdr->where); header_http_Unset(ctx, hp, hdr->what, priv->priv); }
vmod_get(VRT_CTX, struct vmod_priv *priv, VCL_HEADER hdr, VCL_STRING s) { struct http *hp; unsigned u; const char *p; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); header_init_re(priv, s); hp = VRT_selecthttp(ctx, hdr->where); u = header_http_findhdr(ctx, hp, hdr->what, priv->priv); if (u == 0) return (NULL); p = hp->hd[u].b + hdr->what[0]; while (*p == ' ' || *p == '\t') p++; return (p); }
vmod_append(VRT_CTX, VCL_HEADER hdr, const char *fmt, ...) { va_list ap; struct http *hp; const char *b; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); assert(fmt != NULL); hp = VRT_selecthttp(ctx, hdr->where); va_start(ap, fmt); b = VRT_String(hp->ws, hdr->what + 1, fmt, ap); if (b == NULL) VSLb(ctx->vsl, SLT_LostHeader, "vmod_header: %s", hdr->what + 1); else http_SetHeader(hp, b); va_end(ap); }
const char * VRT_GetHdr(VRT_CTX, const struct gethdr_s *hs) { const char *p; struct http *hp; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); if (hs->where == HDR_OBJ) { CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC); CHECK_OBJ_NOTNULL(ctx->req->objcore, OBJCORE_MAGIC); return(HTTP_GetHdrPack(ctx->req->wrk, ctx->req->objcore, hs->what)); } hp = VRT_selecthttp(ctx, hs->where); CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC); if (!http_GetHdr(hp, hs->what, &p)) return (NULL); return (p); }