Commit e9e3e2e8 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Eliminate a lot of arguments to http_ functions which used to convey

the VSL coords which are now a property of struct http.
parent f7dbf53e
......@@ -691,7 +691,7 @@ struct vbc *VDI_GetFd(const struct director *, struct sess *sp);
int VDI_Healthy(const struct director *, const struct sess *sp);
void VDI_CloseFd(struct worker *wrk, struct vbc **vbp);
void VDI_RecycleFd(struct worker *wrk, struct vbc **vbp);
void VDI_AddHostHeader(struct worker *wrk, const struct vbc *vbc);
void VDI_AddHostHeader(struct http *to, const struct vbc *vbc);
void VBE_Poll(void);
void VDI_Init(void);
......@@ -804,16 +804,12 @@ void http_SetResp(struct http *to, const char *proto, uint16_t status,
const char *response);
void http_FilterReq(const struct sess *sp, unsigned how);
void http_FilterResp(const struct http *fm, struct http *to, unsigned how);
void http_PutProtocol(struct worker *w, unsigned vsl_id, const struct http *to,
const char *protocol);
void http_PutProtocol(const struct http *to, const char *protocol);
void http_PutStatus(struct http *to, uint16_t status);
void http_PutResponse(struct worker *w, unsigned vsl_id, const struct http *to,
const char *response);
void http_PrintfHeader(struct worker *w, unsigned vsl_id, struct http *to,
const char *fmt, ...)
__printflike(4, 5);
void http_SetHeader(struct worker *w, unsigned vsl_id, struct http *to,
const char *hdr);
void http_PutResponse(const struct http *to, const char *response);
void http_PrintfHeader(struct http *to, const char *fmt, ...)
__printflike(2, 3);
void http_SetHeader(struct http *to, const char *hdr);
void http_SetH(const struct http *to, unsigned n, const char *fm);
void http_ForceGet(const struct http *to);
void http_Setup(struct http *ht, struct ws *ws, struct vsl_log *);
......@@ -830,7 +826,7 @@ int http_HdrIs(const struct http *hp, const char *hdr, const char *val);
uint16_t http_DissectRequest(const struct sess *sp);
uint16_t http_DissectResponse(struct http *sp, const struct http_conn *htc);
const char *http_DoConnection(const struct http *hp);
void http_CopyHome(struct worker *w, unsigned vsl_id, const struct http *hp);
void http_CopyHome(const struct http *hp);
void http_Unset(struct http *hp, const char *hdr);
void http_CollectHdr(struct http *hp, const char *hdr);
......
......@@ -65,14 +65,12 @@ struct vdi_simple {
* Create default Host: header for backend request
*/
void
VDI_AddHostHeader(struct worker *wrk, const struct vbc *vbc)
VDI_AddHostHeader(struct http *hp, const struct vbc *vbc)
{
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(wrk->busyobj->bereq, HTTP_MAGIC);
CHECK_OBJ_NOTNULL(vbc, VBC_MAGIC);
CHECK_OBJ_NOTNULL(vbc->vdis, VDI_SIMPLE_MAGIC);
http_PrintfHeader(wrk, vbc->vsl_id, wrk->busyobj->bereq,
http_PrintfHeader(hp,
"Host: %s", vbc->vdis->vrt->hosthdr);
}
......
......@@ -501,17 +501,16 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
if (req->err_code < 100 || req->err_code > 999)
req->err_code = 501;
http_PutProtocol(wrk, sp->vsl_id, h, "HTTP/1.1");
http_PutProtocol(h, "HTTP/1.1");
http_PutStatus(h, req->err_code);
VTIM_format(W_TIM_real(wrk), date);
http_PrintfHeader(wrk, sp->vsl_id, h, "Date: %s", date);
http_SetHeader(wrk, sp->vsl_id, h, "Server: Varnish");
http_PrintfHeader(h, "Date: %s", date);
http_SetHeader(h, "Server: Varnish");
if (req->err_reason != NULL)
http_PutResponse(wrk, sp->vsl_id, h, req->err_reason);
http_PutResponse(h, req->err_reason);
else
http_PutResponse(wrk, sp->vsl_id, h,
http_StatusMessage(req->err_code));
http_PutResponse(h, http_StatusMessage(req->err_code));
VCL_error_method(sp);
if (req->handling == VCL_RET_RESTART &&
......@@ -745,8 +744,7 @@ cnt_prepfetch(struct sess *sp, struct worker *wrk, struct req *req)
/* If we do gzip, add the C-E header */
if (bo->do_gzip)
http_SetHeader(wrk, sp->vsl_id, bo->beresp,
"Content-Encoding: gzip");
http_SetHeader(bo->beresp, "Content-Encoding: gzip");
/* But we can't do both at the same time */
assert(bo->do_gzip == 0 || bo->do_gunzip == 0);
......@@ -839,7 +837,7 @@ cnt_prepfetch(struct sess *sp, struct worker *wrk, struct req *req)
hp2->logtag = HTTP_Obj;
http_FilterResp(hp, hp2, pass ? HTTPH_R_PASS : HTTPH_A_INS);
http_CopyHome(wrk, sp->vsl_id, hp2);
http_CopyHome(hp2);
if (http_GetHdr(hp, H_Last_Modified, &b))
req->obj->last_modified = VTIM_parse(b);
......@@ -1233,8 +1231,7 @@ cnt_miss(struct sess *sp, struct worker *wrk, struct req *req)
* the minority of clients which don't.
*/
http_Unset(wrk->busyobj->bereq, H_Accept_Encoding);
http_SetHeader(wrk, sp->vsl_id, wrk->busyobj->bereq,
"Accept-Encoding: gzip");
http_SetHeader(wrk->busyobj->bereq, "Accept-Encoding: gzip");
}
VCL_miss_method(sp);
......@@ -1400,7 +1397,7 @@ DOT hash -> lookup [label="hash",style=bold,color=green]
*/
static int
cnt_recv(struct sess *sp, struct worker *wrk, struct req *req)
cnt_recv(struct sess *sp, const struct worker *wrk, struct req *req)
{
unsigned recv_handling;
struct SHA256Context sha256ctx;
......@@ -1444,8 +1441,7 @@ cnt_recv(struct sess *sp, struct worker *wrk, struct req *req)
(recv_handling != VCL_RET_PASS)) {
if (RFC2616_Req_Gzip(sp)) {
http_Unset(req->http, H_Accept_Encoding);
http_SetHeader(wrk, sp->vsl_id, req->http,
"Accept-Encoding: gzip");
http_SetHeader(req->http, "Accept-Encoding: gzip");
} else {
http_Unset(req->http, H_Accept_Encoding);
}
......
......@@ -73,7 +73,7 @@ ved_include(struct sess *sp, const char *src, const char *host)
if (host != NULL && *host != '\0') {
http_Unset(sp->req->http, H_Host);
http_Unset(sp->req->http, H_If_Modified_Since);
http_SetHeader(w, sp->vsl_id, sp->req->http, host);
http_SetHeader(sp->req->http, host);
}
/*
* XXX: We should decide if we should cache the director
......
......@@ -393,8 +393,8 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
struct http_conn *htc;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
wrk = sp->wrk;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
htc = &wrk->busyobj->htc;
......@@ -408,12 +408,12 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
hp = wrk->busyobj->bereq;
sp->wrk->busyobj->vbc = VDI_GetFd(NULL, sp);
if (sp->wrk->busyobj->vbc == NULL) {
wrk->busyobj->vbc = VDI_GetFd(NULL, sp);
if (wrk->busyobj->vbc == NULL) {
WSP(sp, SLT_FetchError, "no backend connection");
return (-1);
}
vc = sp->wrk->busyobj->vbc;
vc = wrk->busyobj->vbc;
if (vc->recycled)
retry = 1;
......@@ -423,7 +423,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
* because the backend may be chosen by a director.
*/
if (need_host_hdr)
VDI_AddHostHeader(sp->wrk, vc);
VDI_AddHostHeader(wrk->busyobj->bereq, vc);
(void)VTCP_blocking(vc->fd); /* XXX: we should timeout instead */
WRW_Reserve(wrk, &vc->fd);
......@@ -434,7 +434,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
if (WRW_FlushRelease(wrk) || i > 0) {
WSP(sp, SLT_FetchError, "backend write error: %d (%s)",
errno, strerror(errno));
VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
VDI_CloseFd(wrk, &wrk->busyobj->vbc);
/* XXX: other cleanup ? */
return (retry);
}
......@@ -458,7 +458,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
if (i < 0) {
WSP(sp, SLT_FetchError, "http first read error: %d %d (%s)",
i, errno, strerror(errno));
VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
VDI_CloseFd(wrk, &wrk->busyobj->vbc);
/* XXX: other cleanup ? */
/* Retryable if we never received anything */
return (i == -1 ? retry : -1);
......@@ -472,7 +472,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
WSP(sp, SLT_FetchError,
"http first read error: %d %d (%s)",
i, errno, strerror(errno));
VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
VDI_CloseFd(wrk, &wrk->busyobj->vbc);
/* XXX: other cleanup ? */
return (-1);
}
......@@ -482,7 +482,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
if (http_DissectResponse(hp, htc)) {
WSP(sp, SLT_FetchError, "http format error");
VDI_CloseFd(sp->wrk, &sp->wrk->busyobj->vbc);
VDI_CloseFd(wrk, &wrk->busyobj->vbc);
/* XXX: other cleanup ? */
return (-1);
}
......@@ -614,8 +614,7 @@ FetchBody(struct worker *wrk, struct object *obj)
if (mklen > 0) {
http_Unset(obj->http, H_Content_Length);
http_PrintfHeader(wrk, bo->vbc->vsl_id, obj->http,
"Content-Length: %zd", obj->len);
http_PrintfHeader(obj->http, "Content-Length: %zd", obj->len);
}
if (cls)
......
......@@ -865,8 +865,7 @@ http_FilterReq(const struct sess *sp, unsigned how)
else
http_linkh(hp, sp->req->http, HTTP_HDR_PROTO);
http_filterfields(hp, sp->req->http, how);
http_PrintfHeader(sp->wrk, sp->vsl_id, hp,
"X-Varnish: %u", sp->req->xid);
http_PrintfHeader(hp, "X-Varnish: %u", sp->req->xid);
}
/*--------------------------------------------------------------------*/
......@@ -889,7 +888,7 @@ http_FilterResp(const struct http *fm, struct http *to, unsigned how)
*/
void
http_CopyHome(struct worker *w, unsigned vsl_id, const struct http *hp)
http_CopyHome(const struct http *hp)
{
unsigned u, l;
char *p;
......@@ -911,7 +910,7 @@ http_CopyHome(struct worker *w, unsigned vsl_id, const struct http *hp)
} else {
/* XXX This leaves a slot empty */
VSC_C_main->losthdr++;
WSLR(w->vsl, SLT_LostHeader, vsl_id, hp->hd[u]);
WSLR(hp->vsl, SLT_LostHeader, -1, hp->hd[u]);
hp->hd[u].b = NULL;
hp->hd[u].e = NULL;
}
......@@ -935,14 +934,13 @@ http_ClrHeader(struct http *to)
/*--------------------------------------------------------------------*/
void
http_SetHeader(struct worker *w, unsigned vsl_id, struct http *to,
const char *hdr)
http_SetHeader(struct http *to, const char *hdr)
{
CHECK_OBJ_NOTNULL(to, HTTP_MAGIC);
if (to->nhd >= to->shd) {
VSC_C_main->losthdr++;
WSL(w->vsl, SLT_LostHeader, vsl_id, "%s", hdr);
WSL(to->vsl, SLT_LostHeader, -1, "%s", hdr);
return;
}
http_SetH(to, to->nhd++, hdr);
......@@ -951,8 +949,7 @@ http_SetHeader(struct worker *w, unsigned vsl_id, struct http *to,
/*--------------------------------------------------------------------*/
static void
http_PutField(struct worker *w, unsigned vsl_id, const struct http *to,
int field, const char *string)
http_PutField(const struct http *to, int field, const char *string)
{
char *p;
unsigned l;
......@@ -961,7 +958,7 @@ http_PutField(struct worker *w, unsigned vsl_id, const struct http *to,
l = strlen(string);
p = WS_Alloc(to->ws, l + 1);
if (p == NULL) {
WSL(w->vsl, SLT_LostHeader, vsl_id, "%s", string);
WSL(to->vsl, SLT_LostHeader, -1, "%s", string);
to->hd[field].b = NULL;
to->hd[field].e = NULL;
to->hdf[field] = 0;
......@@ -974,11 +971,10 @@ http_PutField(struct worker *w, unsigned vsl_id, const struct http *to,
}
void
http_PutProtocol(struct worker *w, unsigned vsl_id, const struct http *to,
const char *protocol)
http_PutProtocol(const struct http *to, const char *protocol)
{
http_PutField(w, vsl_id, to, HTTP_HDR_PROTO, protocol);
http_PutField(to, HTTP_HDR_PROTO, protocol);
if (to->hd[HTTP_HDR_PROTO].b == NULL)
http_SetH(to, HTTP_HDR_PROTO, "HTTP/1.1");
Tcheck(to->hd[HTTP_HDR_PROTO]);
......@@ -993,19 +989,17 @@ http_PutStatus(struct http *to, uint16_t status)
}
void
http_PutResponse(struct worker *w, unsigned vsl_id, const struct http *to,
const char *response)
http_PutResponse(const struct http *to, const char *response)
{
http_PutField(w, vsl_id, to, HTTP_HDR_RESPONSE, response);
http_PutField(to, HTTP_HDR_RESPONSE, response);
if (to->hd[HTTP_HDR_RESPONSE].b == NULL)
http_SetH(to, HTTP_HDR_RESPONSE, "Lost Response");
Tcheck(to->hd[HTTP_HDR_RESPONSE]);
}
void
http_PrintfHeader(struct worker *w, unsigned vsl_id, struct http *to,
const char *fmt, ...)
http_PrintfHeader(struct http *to, const char *fmt, ...)
{
va_list ap;
unsigned l, n;
......@@ -1017,7 +1011,7 @@ http_PrintfHeader(struct worker *w, unsigned vsl_id, struct http *to,
va_end(ap);
if (n + 1 >= l || to->nhd >= to->shd) {
VSC_C_main->losthdr++;
WSL(w->vsl, SLT_LostHeader, vsl_id, "%s", to->ws->f);
WSL(to->vsl, SLT_LostHeader, -1, "%s", to->ws->f);
WS_Release(to->ws, 0);
} else {
to->hd[to->nhd].b = to->ws->f;
......
......@@ -90,13 +90,12 @@ res_dorange(const struct sess *sp, const char *r, ssize_t *plow, ssize_t *phigh)
if (low > high)
return;
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp,
"Content-Range: bytes %jd-%jd/%jd",
http_PrintfHeader(req->resp, "Content-Range: bytes %jd-%jd/%jd",
(intmax_t)low, (intmax_t)high, (intmax_t)req->obj->len);
http_Unset(req->resp, H_Content_Length);
assert(req->res_mode & RES_LEN);
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp,
"Content-Length: %jd", (intmax_t)(1 + high - low));
http_PrintfHeader(req->resp, "Content-Length: %jd",
(intmax_t)(1 + high - low));
http_SetResp(req->resp, "HTTP/1.1", 206, "Partial Content");
*plow = low;
......@@ -123,29 +122,25 @@ RES_BuildHttp(const struct sess *sp)
http_Unset(req->resp, H_Content_Length);
} else if (cache_param->http_range_support) {
/* We only accept ranges if we know the length */
http_SetHeader(sp->wrk, sp->vsl_id, req->resp,
"Accept-Ranges: bytes");
http_SetHeader(req->resp, "Accept-Ranges: bytes");
}
if (req->res_mode & RES_CHUNKED)
http_SetHeader(sp->wrk, sp->vsl_id, req->resp,
"Transfer-Encoding: chunked");
http_SetHeader(req->resp, "Transfer-Encoding: chunked");
VTIM_format(VTIM_real(), time_str);
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp,
"Date: %s", time_str);
http_PrintfHeader(req->resp, "Date: %s", time_str);
if (req->xid != req->obj->xid)
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp,
http_PrintfHeader(req->resp,
"X-Varnish: %u %u", req->xid, req->obj->xid);
else
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp,
"X-Varnish: %u", req->xid);
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp, "Age: %.0f",
http_PrintfHeader(req->resp, "X-Varnish: %u", req->xid);
http_PrintfHeader(req->resp, "Age: %.0f",
req->obj->exp.age + req->t_resp -
req->obj->exp.entered);
http_SetHeader(sp->wrk, sp->vsl_id, req->resp, "Via: 1.1 varnish");
http_PrintfHeader(sp->wrk, sp->vsl_id, req->resp, "Connection: %s",
http_SetHeader(req->resp, "Via: 1.1 varnish");
http_PrintfHeader(req->resp, "Connection: %s",
req->doclose ? "close" : "keep-alive");
}
......@@ -337,7 +332,7 @@ RES_StreamStart(struct sess *sp)
if (!(req->res_mode & RES_CHUNKED) &&
sp->wrk->busyobj->h_content_length != NULL)
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
http_PrintfHeader(sp->req->resp,
"Content-Length: %s", sp->wrk->busyobj->h_content_length);
sp->wrk->acct_tmp.hdrbytes +=
......
......@@ -231,7 +231,7 @@ VRT_SetHdr(const struct sess *sp , enum gethdr_e where, const char *hdr,
WSP(sp, SLT_LostHeader, "%s", hdr + 1);
} else {
http_Unset(hp, hdr);
http_SetHeader(sp->wrk, sp->vsl_id, hp, b);
http_SetHeader(hp, b);
}
}
va_end(ap);
......@@ -417,7 +417,7 @@ VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...)
va_end(ap);
SMS_Finish(sp->req->obj);
http_Unset(sp->req->obj->http, H_Content_Length);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->obj->http,
http_PrintfHeader(sp->req->obj->http,
"Content-Length: %zd", sp->req->obj->len);
}
......
-d__flexelint_v9__=1
-printf(3, VSL)
-printf(4, http_PrintfHeader)
-printf(2, http_PrintfHeader)
-printf(4, WSL)
-printf(3, WSLB)
-printf(2, VSB_printf)
......
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