Commit 56ce6e35 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

More VRT sp->req work

parent b4d76fea
...@@ -54,17 +54,16 @@ const void * const vrt_magic_string_end = &vrt_magic_string_end; ...@@ -54,17 +54,16 @@ const void * const vrt_magic_string_end = &vrt_magic_string_end;
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
void void
VRT_error(const struct sess *sp, unsigned code, const char *reason) VRT_error(struct req *req, unsigned code, const char *reason)
{ {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
VSLb(sp->req->vsl, SLT_Debug, "VCL_error(%u, %s)", code, reason ? VSLb(req->vsl, SLT_Debug, "VCL_error(%u, %s)", code,
reason : "(null)"); reason ? reason : "(null)");
if (code < 100 || code > 999) if (code < 100 || code > 999)
code = 503; code = 503;
sp->req->err_code = (uint16_t)code; req->err_code = (uint16_t)code;
sp->req->err_reason = req->err_reason = reason ? reason : http_StatusMessage(req->err_code);
reason ? reason : http_StatusMessage(sp->req->err_code);
} }
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
...@@ -196,18 +195,18 @@ VRT_String(struct ws *ws, const char *h, const char *p, va_list ap) ...@@ -196,18 +195,18 @@ VRT_String(struct ws *ws, const char *h, const char *p, va_list ap)
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
* Build a string on the worker threads workspace * Build a string on the request workspace
*/ */
const char * const char *
VRT_WrkString(const struct sess *sp, const char *p, ...) VRT_ReqString(struct req *req, const char *p, ...)
{ {
va_list ap; va_list ap;
char *b; char *b;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
va_start(ap, p); va_start(ap, p);
b = VRT_String(sp->wrk->aws, NULL, p, ap); b = VRT_String(req->ws, NULL, p, ap);
va_end(ap); va_end(ap);
return (b); return (b);
} }
...@@ -287,7 +286,7 @@ VRT_r_now(const struct req *req) ...@@ -287,7 +286,7 @@ VRT_r_now(const struct req *req)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
char * char *
VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa) VRT_IP_string(struct req *req, const struct sockaddr_storage *sa)
{ {
char *p; char *p;
const struct sockaddr_in *si4; const struct sockaddr_in *si4;
...@@ -295,6 +294,7 @@ VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa) ...@@ -295,6 +294,7 @@ VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa)
const void *addr; const void *addr;
int len; int len;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
switch (sa->ss_family) { switch (sa->ss_family) {
case AF_INET: case AF_INET:
len = INET_ADDRSTRLEN; len = INET_ADDRSTRLEN;
...@@ -310,61 +310,65 @@ VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa) ...@@ -310,61 +310,65 @@ VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa)
INCOMPL(); INCOMPL();
} }
XXXAN(len); XXXAN(len);
AN(p = WS_Alloc(sp->req->http->ws, len)); AN(p = WS_Alloc(req->http->ws, len));
AN(inet_ntop(sa->ss_family, addr, p, len)); AN(inet_ntop(sa->ss_family, addr, p, len));
return (p); return (p);
} }
char * char *
VRT_int_string(const struct sess *sp, int num) VRT_int_string(struct req *req, int num)
{ {
char *p; char *p;
int size; int size;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
size = snprintf(NULL, 0, "%d", num) + 1; size = snprintf(NULL, 0, "%d", num) + 1;
AN(p = WS_Alloc(sp->req->http->ws, size)); AN(p = WS_Alloc(req->http->ws, size));
assert(snprintf(p, size, "%d", num) < size); assert(snprintf(p, size, "%d", num) < size);
return (p); return (p);
} }
char * char *
VRT_double_string(const struct sess *sp, double num) VRT_double_string(struct req *req, double num)
{ {
char *p; char *p;
int size; int size;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
size = snprintf(NULL, 0, "%.3f", num) + 1; size = snprintf(NULL, 0, "%.3f", num) + 1;
AN(p = WS_Alloc(sp->req->http->ws, size)); AN(p = WS_Alloc(req->http->ws, size));
assert(snprintf(p, size, "%.3f", num) < size); assert(snprintf(p, size, "%.3f", num) < size);
return (p); return (p);
} }
char * char *
VRT_time_string(const struct sess *sp, double t) VRT_time_string(struct req *req, double t)
{ {
char *p; char *p;
AN(p = WS_Alloc(sp->req->http->ws, VTIM_FORMAT_SIZE)); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
VTIM_format(t, p); p = WS_Alloc(req->http->ws, VTIM_FORMAT_SIZE);
if (p != NULL)
VTIM_format(t, p);
return (p); return (p);
} }
const char * const char *
VRT_backend_string(const struct sess *sp, const struct director *d) VRT_backend_string(const struct req *req, const struct director *d)
{ {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
if (d == NULL) if (d == NULL)
d = sp->req->director; d = req->director;
if (d == NULL) if (d == NULL)
return (NULL); return (NULL);
return (d->vcl_name); return (d->vcl_name);
} }
const char * const char *
VRT_bool_string(const struct sess *sp, unsigned val) VRT_bool_string(const struct req *req, unsigned val)
{ {
(void)sp; CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
return (val ? "true" : "false"); return (val ? "true" : "false");
} }
...@@ -395,16 +399,16 @@ VRT_panic(const struct sess *sp, const char *str, ...) ...@@ -395,16 +399,16 @@ VRT_panic(const struct sess *sp, const char *str, ...)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
void void
VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...) VRT_synth_page(struct req *req, unsigned flags, const char *str, ...)
{ {
va_list ap; va_list ap;
const char *p; const char *p;
struct vsb *vsb; struct vsb *vsb;
(void)flags; (void)flags;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(sp->req->obj, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
vsb = SMS_Makesynth(sp->req->obj); vsb = SMS_Makesynth(req->obj);
AN(vsb); AN(vsb);
VSB_cat(vsb, str); VSB_cat(vsb, str);
...@@ -417,10 +421,9 @@ VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...) ...@@ -417,10 +421,9 @@ VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...)
p = va_arg(ap, const char *); p = va_arg(ap, const char *);
} }
va_end(ap); va_end(ap);
SMS_Finish(sp->req->obj); SMS_Finish(req->obj);
http_Unset(sp->req->obj->http, H_Content_Length); http_Unset(req->obj->http, H_Content_Length);
http_PrintfHeader(sp->req->obj->http, http_PrintfHeader(req->obj->http, "Content-Length: %zd", req->obj->len);
"Content-Length: %zd", sp->req->obj->len);
} }
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
......
...@@ -157,7 +157,7 @@ void VRT_purge(const struct sess *sp, double ttl, double grace); ...@@ -157,7 +157,7 @@ void VRT_purge(const struct sess *sp, double ttl, double grace);
void VRT_count(struct req *, unsigned); void VRT_count(struct req *, unsigned);
int VRT_rewrite(const char *, const char *); int VRT_rewrite(const char *, const char *);
void VRT_error(const struct sess *, unsigned, const char *); void VRT_error(struct req *, unsigned, const char *);
int VRT_switch_config(const char *); int VRT_switch_config(const char *);
enum gethdr_e { HDR_REQ, HDR_RESP, HDR_OBJ, HDR_BEREQ, HDR_BERESP }; enum gethdr_e { HDR_REQ, HDR_RESP, HDR_OBJ, HDR_BEREQ, HDR_BERESP };
...@@ -176,7 +176,7 @@ void VRT_ESI(const struct sess *sp); ...@@ -176,7 +176,7 @@ void VRT_ESI(const struct sess *sp);
void VRT_Rollback(const struct sess *sp); void VRT_Rollback(const struct sess *sp);
/* Synthetic pages */ /* Synthetic pages */
void VRT_synth_page(const struct sess *sp, unsigned flags, const char *, ...); void VRT_synth_page(struct req *sp, unsigned flags, const char *, ...);
/* Backend related */ /* Backend related */
void VRT_init_dir(struct cli *, struct director **, const char *name, void VRT_init_dir(struct cli *, struct director **, const char *name,
...@@ -210,12 +210,12 @@ int VRT_Stv(const char *nm); ...@@ -210,12 +210,12 @@ int VRT_Stv(const char *nm);
/* Convert things to string */ /* Convert things to string */
char *VRT_IP_string(const struct sess *sp, const struct sockaddr_storage *sa); char *VRT_IP_string(struct req *, const struct sockaddr_storage *sa);
char *VRT_int_string(const struct sess *sp, int); char *VRT_int_string(struct req *, int);
char *VRT_double_string(const struct sess *sp, double); char *VRT_double_string(struct req *, double);
char *VRT_time_string(const struct sess *sp, double); char *VRT_time_string(struct req *, double);
const char *VRT_bool_string(const struct sess *sp, unsigned); const char *VRT_bool_string(const struct req *, unsigned);
const char *VRT_backend_string(const struct sess *sp, const struct director *d); const char *VRT_backend_string(const struct req *, const struct director *d);
#define VRT_done(req, hand) \ #define VRT_done(req, hand) \
do { \ do { \
...@@ -223,4 +223,4 @@ const char *VRT_backend_string(const struct sess *sp, const struct director *d); ...@@ -223,4 +223,4 @@ const char *VRT_backend_string(const struct sess *sp, const struct director *d);
return (1); \ return (1); \
} while (0) } while (0)
const char *VRT_WrkString(const struct sess *sp, const char *p, ...); const char *VRT_ReqString(struct req *, const char *p, ...);
...@@ -57,7 +57,7 @@ parse_error(struct vcc *tl) ...@@ -57,7 +57,7 @@ parse_error(struct vcc *tl)
{ {
vcc_NextToken(tl); vcc_NextToken(tl);
Fb(tl, 1, "VRT_error(sp,\n"); Fb(tl, 1, "VRT_error(req,\n");
if (tl->t->tok == '(') { if (tl->t->tok == '(') {
vcc_NextToken(tl); vcc_NextToken(tl);
vcc_Expr(tl, INT); vcc_Expr(tl, INT);
...@@ -303,7 +303,7 @@ parse_synthetic(struct vcc *tl) ...@@ -303,7 +303,7 @@ parse_synthetic(struct vcc *tl)
{ {
vcc_NextToken(tl); vcc_NextToken(tl);
Fb(tl, 1, "VRT_synth_page(sp, 0, "); Fb(tl, 1, "VRT_synth_page(req, 0, ");
vcc_Expr(tl, STRING_LIST); vcc_Expr(tl, STRING_LIST);
ERRCHK(tl); ERRCHK(tl);
Fb(tl, 0, ");\n"); Fb(tl, 0, ");\n");
......
...@@ -423,15 +423,15 @@ vcc_expr_tostring(struct expr **e, enum var_type fmt) ...@@ -423,15 +423,15 @@ vcc_expr_tostring(struct expr **e, enum var_type fmt)
p = NULL; p = NULL;
switch((*e)->fmt) { switch((*e)->fmt) {
case BACKEND: p = "VRT_backend_string(sp, \v1)"; break; case BACKEND: p = "VRT_backend_string(req, \v1)"; break;
case BOOL: p = "VRT_bool_string(sp, \v1)"; break; case BOOL: p = "VRT_bool_string(req, \v1)"; break;
case DURATION: p = "VRT_double_string(sp, \v1)"; break; case DURATION: p = "VRT_double_string(req, \v1)"; break;
/* XXX: should DURATION insist on "s" suffix ? */ /* XXX: should DURATION insist on "s" suffix ? */
case INT: p = "VRT_int_string(sp, \v1)"; break; case INT: p = "VRT_int_string(req, \v1)"; break;
case IP: p = "VRT_IP_string(sp, \v1)"; break; case IP: p = "VRT_IP_string(req, \v1)"; break;
case BYTES: p = "VRT_double_string(sp, \v1)"; break; /* XXX */ case BYTES: p = "VRT_double_string(req, \v1)"; break; /* XXX */
case REAL: p = "VRT_double_string(sp, \v1)"; break; case REAL: p = "VRT_double_string(req, \v1)"; break;
case TIME: p = "VRT_time_string(sp, \v1)"; break; case TIME: p = "VRT_time_string(req, \v1)"; break;
default: break; default: break;
} }
if (p != NULL) { if (p != NULL) {
...@@ -819,7 +819,7 @@ vcc_expr_add(struct vcc *tl, struct expr **e, enum var_type fmt) ...@@ -819,7 +819,7 @@ vcc_expr_add(struct vcc *tl, struct expr **e, enum var_type fmt)
} }
if (fmt != STRING_LIST && (*e)->fmt == STRING_LIST) if (fmt != STRING_LIST && (*e)->fmt == STRING_LIST)
*e = vcc_expr_edit(STRING, *e = vcc_expr_edit(STRING,
"\v+VRT_WrkString(sp,\n\v1,\nvrt_magic_string_end)", "\v+VRT_ReqString(req,\n\v1,\nvrt_magic_string_end)",
*e, NULL); *e, NULL);
if (fmt == STRING_LIST && (*e)->fmt == STRING) if (fmt == STRING_LIST && (*e)->fmt == STRING)
(*e)->fmt = STRING_LIST; (*e)->fmt = STRING_LIST;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment