]> err.no Git - varnish/commitdiff
Move selection of backend and creation of default Host: header until
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 21 Aug 2008 08:37:37 +0000 (08:37 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 21 Aug 2008 08:37:37 +0000 (08:37 +0000)
we actually need to get a filedescriptor to the backend.

This also makes it evident for vcl_pass{}, vcl_pipe{} and vcl_miss{}
if the client sent a Host: header or not.  Previously these functions
saw the default Host: header.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3118 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_backend.c
varnish-cache/bin/varnishd/cache_center.c
varnish-cache/bin/varnishd/cache_fetch.c
varnish-cache/bin/varnishd/cache_http.c

index 28d8ef626e14f18cf04b77d1ccf8caa66d9e461b..0560ae687d33dae661375175e712076c88ff7801 100644 (file)
@@ -412,7 +412,7 @@ extern int vca_pipes[2];
 
 /* cache_backend.c */
 
-struct vbe_conn *VBE_GetFd(const struct sess *sp);
+struct vbe_conn *VBE_GetFd(struct sess *sp);
 void VBE_ClosedFd(struct worker *w, struct vbe_conn *vc);
 void VBE_RecycleFd(struct worker *w, struct vbe_conn *vc);
 struct bereq * VBE_new_bereq(void);
index 277c173dfbcfe0be7973dc3caf2d869574288c30..23532ea4d9409e2f170723af238d55e191ecaf75 100644 (file)
@@ -267,13 +267,16 @@ bes_conn_try(const struct sess *sp, struct backend *bp)
 /*--------------------------------------------------------------------*/
 
 struct vbe_conn *
-VBE_GetFd(const struct sess *sp)
+VBE_GetFd(struct sess *sp)
 {
        struct backend *bp;
        struct vbe_conn *vc;
 
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+
+       VBE_SelectBackend(sp);
        bp = sp->backend;
+       CHECK_OBJ_NOTNULL(bp, BACKEND_MAGIC);
 
        /* first look for vbe_conn's we can recycle */
        while (1) {
index 2b1a16332d710a11e57432ae0a8df0f48deb033c..193fdd8a97bd6749978d02b34e7683cff7854bec 100644 (file)
@@ -686,7 +686,6 @@ cnt_miss(struct sess *sp)
        CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
        CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
 
-       VBE_SelectBackend(sp);
        http_FilterHeader(sp, HTTPH_R_FETCH);
        VCL_miss_method(sp);
        switch(sp->handling) {
@@ -761,7 +760,6 @@ cnt_pass(struct sess *sp)
        CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
        AZ(sp->obj);
 
-       VBE_SelectBackend(sp);
        http_FilterHeader(sp, HTTPH_R_PASS);
 
        VCL_pass_method(sp);
@@ -813,7 +811,6 @@ cnt_pipe(struct sess *sp)
        CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
 
        sp->wrk->acct.pipe++;
-       VBE_SelectBackend(sp);
        http_FilterHeader(sp, HTTPH_R_PIPE);
 
        VCL_pipe_method(sp);
index b5e11682a2a57a674287aa1846b4945a255d7ecc..681d894c5d940ab03493a91ebfe3731badd854ea 100644 (file)
@@ -335,6 +335,15 @@ Fetch(struct sess *sp)
        vc = VBE_GetFd(sp);
        if (vc == NULL)
                return (__LINE__);
+
+       /*
+        * Now that we know our backend, we can set a default Host:
+        * header if one is necessary.
+        * XXX: This possibly ought to go into the default VCL
+        */
+       if (!http_GetHdr(hp, H_Host, &b)) 
+               VBE_AddHostHeader(sp);
+
        TCP_blocking(vc->fd);   /* XXX: we should timeout instead */
        WRK_Reset(w, &vc->fd);
        http_Write(w, hp, 0);   /* XXX: stats ? */
index eff9961132fde57b0a11b45600b0612b7be57451..a49d9fa2e2a01c975fa43b34534b84644855216b 100644 (file)
@@ -642,7 +642,6 @@ http_FilterHeader(struct sess *sp, unsigned how)
 {
        struct bereq *bereq;
        struct http *hp;
-       char *b;
 
         bereq = VBE_new_bereq();
         AN(bereq);
@@ -656,10 +655,6 @@ http_FilterHeader(struct sess *sp, unsigned how)
            "X-Forwarded-For: %s", sp->addr);
 
        sp->bereq = bereq;
-
-       /* XXX: This possibly ought to go into the default VCL */
-       if (!http_GetHdr(hp, H_Host, &b)) 
-               VBE_AddHostHeader(sp);
 }
 
 /*--------------------------------------------------------------------