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 {
} 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 {
</body>
</html>
"};
- deliver;
+ return (deliver);
}
/*--------------------------------------------------------------------*/
-#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;
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);
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
+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)
{
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 },
{ "set", parse_set },
{ "synthetic", parse_synthetic },
{ "unset", parse_unset },
+ { "return", parse_return },
{ NULL, NULL }
};