]> err.no Git - varnish/commitdiff
Add support for, and use a new syntax for terminating actions in VCL,
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 9 Dec 2008 13:54:09 +0000 (13:54 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 9 Dec 2008 13:54:09 +0000 (13:54 +0000)
basically "return(action)" instead of just "action".

The previos syntax is still available.

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

varnish-cache/bin/varnishd/default.vcl
varnish-cache/lib/libvcl/vcc_action.c

index 13e15b206b5457e34aa0473ec439191c51df0ece..711aeaa8dfe570a2e58eb784319adff06f2d340a 100644 (file)
@@ -48,25 +48,25 @@ sub vcl_recv {
       req.request != "OPTIONS" &&
       req.request != "DELETE") {
         /* Non-RFC2616 or CONNECT which is weird. */
-        pipe;
+        return (pipe);
     }
     if (req.request != "GET" && req.request != "HEAD") {
         /* We only deal with GET and HEAD by default */
-        pass;
+        return (pass);
     }
     if (req.http.Authorization || req.http.Cookie) {
         /* Not cacheable by default */
-        pass;
+        return (pass);
     }
-    lookup;
+    return (lookup);
 }
 
 sub vcl_pipe {
-    pipe;
+    return (pipe);
 }
 
 sub vcl_pass {
-    pass;
+    return (pass);
 }
 
 sub vcl_hash {
@@ -76,48 +76,48 @@ sub vcl_hash {
     } else {
         set req.hash += server.ip;
     }
-    hash;
+    return (hash);
 }
 
 sub vcl_hit {
     if (!obj.cacheable) {
-        pass;
+        return (pass);
     }
-    deliver;
+    return (deliver);
 }
 
 sub vcl_miss {
-    fetch;
+    return (fetch);
 }
 
 sub vcl_fetch {
     if (!obj.cacheable) {
-        pass;
+        return (pass);
     }
     if (obj.http.Set-Cookie) {
-        pass;
+        return (pass);
     }
     set obj.prefetch =  -30s;
-    deliver;
+    return (deliver);
 }
 
 sub vcl_deliver {
-    deliver;
+    return (deliver);
 }
 
 sub vcl_discard {
     /* XXX: Do not redefine vcl_discard{}, it is not yet supported */
-    discard;
+    return (discard);
 }
 
 sub vcl_prefetch {
     /* XXX: Do not redefine vcl_prefetch{}, it is not yet supported */
-    fetch;
+    return (fetch);
 }
 
 sub vcl_timeout {
     /* XXX: Do not redefine vcl_timeout{}, it is not yet supported */
-    discard;
+    return (discard);
 }
 
 sub vcl_error {
@@ -141,5 +141,5 @@ sub vcl_error {
   </body>
 </html>
 "};
-    deliver;
+    return (deliver);
 }
index fc42f9c16e5910eaa6728f46c7f857d0ff5633d9..20f7d9663e45d73ce674e211c3ed775f0257d349 100644 (file)
 
 /*--------------------------------------------------------------------*/
 
-#define VCL_RET_MAC(l,u,b,i)                           \
-static void                                            \
-parse_##l(struct tokenlist *tl)                                \
-{                                                      \
-                                                       \
-       Fb(tl, 1, "VRT_done(sp, VCL_RET_%s);\n", #u);   \
-       vcc_ProcAction(tl->curproc, i, tl->t);          \
-       vcc_NextToken(tl);                              \
-}
-
+static void
+parse_action(struct tokenlist *tl)
+{
+       int retval = 0;
+
+       Expect(tl, ID);
+
+#define VCL_RET_MAC(l, u, b, i)                                                \
+       do {                                                            \
+               if (vcc_IdIs(tl->t, #l)) {                              \
+                       Fb(tl, 1, "VRT_done(sp, VCL_RET_%s);\n", #u);   \
+                       vcc_ProcAction(tl->curproc, i, tl->t);          \
+                       retval = 1;                                     \
+               }                                                       \
+       } while (0);
+#define VCL_RET_MAC_E(l, u, b, i) VCL_RET_MAC(l, u, b, i)
 #include "vcl_returns.h"
 #undef VCL_RET_MAC
+#undef VCL_RET_MAC_E
+       if (!retval) {
+               vsb_printf(tl->sb, "Expected action name.\n");
+               vcc_ErrWhere(tl, tl->t);
+               ERRCHK(tl);
+       }
+       vcc_NextToken(tl);
+}
 
 /*--------------------------------------------------------------------*/
 
 static void
-parse_restart_real(struct tokenlist *tl)
+parse_restart(struct tokenlist *tl)
 {
        struct token *t1;
 
@@ -70,7 +84,9 @@ parse_restart_real(struct tokenlist *tl)
                vcc_ErrWhere(tl, t1);
                ERRCHK(tl);
        }
-       parse_restart(tl);
+       Fb(tl, 1, "VRT_done(sp, VCL_RET_RESTART);\n");
+       vcc_ProcAction(tl->curproc, VCL_RET_RESTART, tl->t);
+       vcc_NextToken(tl);
 }
 
 /*--------------------------------------------------------------------*/
@@ -406,6 +422,22 @@ parse_panic(struct tokenlist *tl)
 
 /*--------------------------------------------------------------------*/
 
+static void
+parse_return(struct tokenlist *tl)
+{
+       vcc_NextToken(tl);
+       Expect(tl, '(');
+       vcc_NextToken(tl);
+       Expect(tl, ID);
+
+       parse_action(tl);
+       ERRCHK(tl);
+       Expect(tl, ')');
+       vcc_NextToken(tl);
+}
+
+/*--------------------------------------------------------------------*/
+
 static void
 parse_synthetic(struct tokenlist *tl)
 {
@@ -430,12 +462,11 @@ static struct action_table {
        const char              *name;
        action_f                *func;
 } action_table[] = {
-       { "restart",    parse_restart_real },
-#define VCL_RET_MAC(l, u, b, i) { #l, parse_##l },
-#define VCL_RET_MAC_E(l, u, b, i) VCL_RET_MAC(l, u, b, i)
+       { "restart",            parse_restart },
+       { "error",              parse_error },
+#define VCL_RET_MAC(l, u, b, i) { #l, parse_action },
 #include "vcl_returns.h"
 #undef VCL_RET_MAC
-#undef VCL_RET_MAC_E
 
        /* Keep list sorted from here */
        { "call",               parse_call },
@@ -447,6 +478,7 @@ static struct action_table {
        { "set",                parse_set },
        { "synthetic",          parse_synthetic },
        { "unset",              parse_unset },
+       { "return",             parse_return },
        { NULL,                 NULL }
 };