r2115 - trunk/varnish-cache/bin/varnishd

cecilihf at projects.linpro.no cecilihf at projects.linpro.no
Thu Oct 18 15:38:45 CEST 2007


Author: cecilihf
Date: 2007-10-18 15:38:45 +0200 (Thu, 18 Oct 2007)
New Revision: 2115

Modified:
   trunk/varnish-cache/bin/varnishd/cache_fetch.c
Log:
Make pass mode work for POST requests. Solves ticket #47.



Modified: trunk/varnish-cache/bin/varnishd/cache_fetch.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_fetch.c	2007-10-18 13:30:52 UTC (rev 2114)
+++ trunk/varnish-cache/bin/varnishd/cache_fetch.c	2007-10-18 13:38:45 UTC (rev 2115)
@@ -261,6 +261,9 @@
 	int mklen, is_head;
 	struct http_conn htc[1];
 	int i;
+	int content_length;
+	char hdr[20];
+	char *ptr;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
@@ -287,6 +290,17 @@
 		return (__LINE__);
 	WRK_Reset(w, &vc->fd);
 	http_Write(w, hp, 0);
+	
+	/* If a POST request was passed to fetch, we must send
+	 * any pipelined bytes to the backend as well */
+	if (!strcmp(http_GetReq(sp->http), "POST")) {
+		sprintf(hdr, "%ccontent-length:", 15);
+		assert(http_GetHdr(sp->http, hdr, &ptr));
+		content_length = atoi(ptr);
+		if (sp->htc->pipeline.b != NULL && content_length > 0)
+			WRK_Write(w, sp->htc->pipeline.b, content_length);
+	}
+	
 	if (WRK_Flush(w)) {
 		VBE_UpdateHealth(sp, vc, -1);
 		VBE_ClosedFd(sp->wrk, vc);




More information about the varnish-commit mailing list