static void vrt_do_string(const struct http *hp, int fld, const char *err, const char *p, va_list ap) { const char *b; CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC); b = VRT_String(hp->ws, NULL, p, ap); if (b == NULL || *b == '\0') { VSLb(hp->vsl, SLT_LostHeader, "%s", err); WS_MarkOverflow(hp->ws); return; } http_SetH(hp, fld, b); }
void VRT_l_beresp_storage_hint(const struct vrt_ctx *ctx, const char *str, ...) { va_list ap; const char *b; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC); va_start(ap, str); b = VRT_String(ctx->bo->ws, NULL, str, ap); // XXX: ctx->ws ? va_end(ap); if (b == NULL) { VSLb(ctx->vsl, SLT_LostHeader, "storage.hint"); WS_MarkOverflow(ctx->bo->beresp->ws); return; } ctx->bo->storage_hint = b; }
void VRT_l_client_identity(const struct vrt_ctx *ctx, const char *str, ...) { va_list ap; const char *b; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC); va_start(ap, str); b = VRT_String(ctx->req->http->ws, NULL, str, ap); va_end(ap); if (b == NULL) { VSLb(ctx->vsl, SLT_LostHeader, "client.identity"); WS_MarkOverflow(ctx->req->http->ws); return; } ctx->req->client_identity = b; }
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); }
static void vrt_do_string(VRT_CTX, struct http *hp, int fld, const char *err, const char *p, va_list ap) { const char *b; CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC); b = VRT_String(hp->ws, NULL, p, ap); if (b == NULL) { VRT_fail(ctx, "Workspace overflow (%s)", err); WS_MarkOverflow(hp->ws); return; } if (*b == '\0') { VRT_fail(ctx, "Setting %s to empty string", err); return; } http_SetH(hp, fld, b); }
int vmod_location(struct sess *sp, int status, const char*p,...) { if ( status == 301 || status == 302 || status == 303 ){ if(hook_done == 1 && sp->vcl->error_func != vmod_Hook_vcl_error) hook_done = 0; if(hook_done == 0){ AZ(pthread_mutex_lock(&vmod_redirect_mutex)); if(hook_done == 0) { vmod_redirect_Hook_vcl_error = sp->vcl->error_func; sp->vcl->error_func = vmod_Hook_vcl_error; hook_done = 1; } AZ(pthread_mutex_unlock(&vmod_redirect_mutex)); } //build location string va_list ap; char *location; va_start(ap, p); location = VRT_String(sp->wrk->ws, NULL, p, ap); va_end(ap); //set location header VRT_SetHdr(sp, HDR_REQ, "\030X-VMODREDIRECT-Location:", location, vrt_magic_string_end ); } return (status); }
void VRT_SetHdr(const struct sess *sp , enum gethdr_e where, const char *hdr, const char *p, ...) { struct http *hp; va_list ap; char *b; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); hp = vrt_selecthttp(sp, where); va_start(ap, p); if (p == NULL) { http_Unset(hp, hdr); } else { b = VRT_String(hp->ws, hdr + 1, p, ap); if (b == NULL) { WSP(sp, SLT_LostHeader, "%s", hdr + 1); } else { http_Unset(hp, hdr); http_SetHeader(sp->wrk, sp->vsl_id, hp, b); } } va_end(ap); }