r5766 - trunk/varnish-cache/bin/varnishd

phk at varnish-cache.org phk at varnish-cache.org
Wed Jan 19 11:16:24 CET 2011


Author: phk
Date: 2011-01-19 11:16:19 +0100 (Wed, 19 Jan 2011)
New Revision: 5766

Modified:
   trunk/varnish-cache/bin/varnishd/cache_center.c
Log:
Unify header handling for gzip, and make wrk->do_g[un]zip usable
as intention flags.



Modified: trunk/varnish-cache/bin/varnishd/cache_center.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_center.c	2011-01-19 09:59:57 UTC (rev 5765)
+++ trunk/varnish-cache/bin/varnishd/cache_center.c	2011-01-19 10:16:19 UTC (rev 5766)
@@ -586,20 +586,33 @@
 	}
 
 	AZ(sp->wrk->vfp);
-	/* XXX: precedence, also: do_esi */
-	if (sp->wrk->do_esi) {
-		sp->wrk->vfp = &vfp_esi;
-	} else
+
+	/* We won't gunzip unless it is gzip'ed, if we do remove C-E header */
 	if (sp->wrk->do_gunzip &&
-	    http_HdrIs(sp->wrk->beresp, H_Content_Encoding, "gzip")) {
+	     !http_HdrIs(sp->wrk->beresp, H_Content_Encoding, "gzip"))
+		sp->wrk->do_gunzip = 0;
+	if (sp->wrk->do_gunzip) 
 		http_Unset(sp->wrk->beresp, H_Content_Encoding);
-		sp->wrk->vfp = &vfp_gunzip;
-	} else if (sp->wrk->do_gzip &&
-	    !http_HdrIs(sp->wrk->beresp, H_Content_Encoding, "gzip")) {
+
+
+	/* And we wont gzip if it already has a C-E header, if we do add it */
+	if (sp->wrk->do_gzip &&
+	     http_GetHdr(sp->wrk->beresp, H_Content_Encoding, NULL))
+		sp->wrk->do_gzip = 0;
+	if (sp->wrk->do_gzip) 
 		http_PrintfHeader(sp->wrk, sp->fd, sp->wrk->beresp,
 		    "Content-Encoding: %s", "gzip");
+
+	/* But we can't do both */
+	assert(sp->wrk->do_gzip == 0 || sp->wrk->do_gunzip == 0);
+
+	/* ESI takes precedence and handles gzip/gunzip also */
+	if (sp->wrk->do_esi)
+		sp->wrk->vfp = &vfp_esi;
+	else if (sp->wrk->do_gunzip)
+		sp->wrk->vfp = &vfp_gunzip;
+	else if (sp->wrk->do_gzip)
 		sp->wrk->vfp = &vfp_gzip;
-	}
 
 	l = http_EstimateWS(sp->wrk->beresp,
 	    sp->pass ? HTTPH_R_PASS : HTTPH_A_INS, &nhttp);




More information about the varnish-commit mailing list