From: phk Date: Wed, 14 Jun 2006 09:57:19 +0000 (+0000) Subject: start examining HTTP status codes from backend X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a2d8bd310304418909e7d4487175f9853a49dd7;p=varnish start examining HTTP status codes from backend git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@186 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index cdde756d..08bd82e1 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -81,6 +81,7 @@ struct http; struct http *http_New(void); void http_Delete(struct http *hp); int http_GetHdr(struct http *hp, const char *hdr, char **ptr); +int http_GetStatus(struct http *hp); int http_HdrIs(struct http *hp, const char *hdr, const char *val); int http_GetTail(struct http *hp, unsigned len, char **b, char **e); int http_GetURL(struct http *hp, char **b); diff --git a/varnish-cache/bin/varnishd/cache_fetch.c b/varnish-cache/bin/varnishd/cache_fetch.c index 0ca159cd..a699e5ac 100644 --- a/varnish-cache/bin/varnishd/cache_fetch.c +++ b/varnish-cache/bin/varnishd/cache_fetch.c @@ -161,9 +161,19 @@ FetchSession(struct worker *w, struct sess *sp) event_base_loop(w->eb, 0); http_Dissect(hp, fd, 2); - /* XXX: fill in object from headers */ - sp->obj->valid = 1; - sp->obj->cacheable = 1; + switch (http_GetStatus(hp)) { + case 200: + /* XXX: fill in object from headers */ + sp->obj->valid = 1; + sp->obj->cacheable = 1; + break; + case 301: + sp->obj->valid = 0; + sp->obj->cacheable = 0; + break; + default: + break; + } sp->handling = HND_Insert; sp->vcl->fetch_func(sp); diff --git a/varnish-cache/bin/varnishd/cache_http.c b/varnish-cache/bin/varnishd/cache_http.c index afd72277..9b4b01d1 100644 --- a/varnish-cache/bin/varnishd/cache_http.c +++ b/varnish-cache/bin/varnishd/cache_http.c @@ -143,6 +143,13 @@ http_GetTail(struct http *hp, unsigned len, char **b, char **e) return (1); } +int +http_GetStatus(struct http *hp) +{ + + return (strtoul(hp->status, NULL /* XXX */, 10)); +} + /*--------------------------------------------------------------------*/ void diff --git a/varnish-cache/bin/varnishd/cache_vcl.c b/varnish-cache/bin/varnishd/cache_vcl.c index 4e7893b7..e4e863b9 100644 --- a/varnish-cache/bin/varnishd/cache_vcl.c +++ b/varnish-cache/bin/varnishd/cache_vcl.c @@ -205,7 +205,11 @@ void VCL_fetch(VCL_FARGS) { sess->done++; } -void VCL_error(VCL_FARGS, unsigned err, const char *str) { +void +VCL_error(VCL_FARGS, unsigned err, const char *str) +{ + + VSL(SLT_Debug, 0, "VCL_error(%u, %s)", err, str); } void