]> err.no Git - varnish/commitdiff
Implemented http purge with regexp. Example vcl usage:
authorcecilihf <cecilihf@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 25 Jul 2007 08:39:10 +0000 (08:39 +0000)
committercecilihf <cecilihf@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 25 Jul 2007 08:39:10 +0000 (08:39 +0000)
sub vcl_recv {
if (req.request == "REPURGE") {
purge(req.url);
error 404 "Purged";
}
}

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

varnish-cache/bin/varnishd/cache_ban.c
varnish-cache/include/vrt.h
varnish-cache/lib/libvcl/vcc_action.c
varnish-cache/lib/libvcl/vcc_fixed_token.c

index c16fc772406ae7b2f1e23c88c2a1beedfaef7c07..ffc603770da92383ab658799fbe90fac5e9ce941 100644 (file)
@@ -40,6 +40,7 @@
 #include "shmlog.h"
 #include "cli_priv.h"
 #include "cache.h"
+#include "vrt.h"
 
 struct ban {
        TAILQ_ENTRY(ban)        list;
@@ -114,3 +115,9 @@ BAN_Init(void)
 
        AddBan("a");
 }
+
+void
+VRT_repurge(const char *regexp)
+{
+       AddBan(regexp);
+}
index 7943e1413e8b265a35c584d0265066b30bdf0814..b3f7e090c06942711ce9840b479eae40c297f6f0 100644 (file)
@@ -70,6 +70,8 @@ int VRT_re_match(const char *, void *re);
 int VRT_re_test(struct vsb *, const char *, int sub);
 const char *VRT_regsub(struct sess *sp, const char *, void *, const char *);
 
+void VRT_repurge(const char *);
+
 void VRT_count(struct sess *, unsigned);
 int VRT_rewrite(const char *, const char *);
 void VRT_error(struct sess *, unsigned, const char *);
index 5e5d8e90b995014c6621601f90c19b34199e3605..de9a7e1976b86cd990b12d4688a585943c8d6569 100644 (file)
@@ -261,6 +261,28 @@ parse_remove(struct tokenlist *tl)
        vcc_NextToken(tl);
 }
 
+/*--------------------------------------------------------------------*/
+
+static void
+parse_repurge(struct tokenlist *tl)
+{
+       vcc_NextToken(tl);
+       
+       Fb(tl, 0, "VRT_repurge(");
+       
+       Expect(tl, '(');
+       vcc_NextToken(tl);
+       
+       if (!vcc_StringVal(tl)) {
+               vcc_ExpectedStringval(tl);
+       }
+       
+       Expect(tl, ')');
+       vcc_NextToken(tl);
+       Fb(tl, 0, ");");
+}
+
+
 /*--------------------------------------------------------------------*/
 
 typedef void action_f(struct tokenlist *tl);
@@ -277,6 +299,7 @@ static struct action_table {
        { "call",       parse_call },
        { "set",        parse_set },
        { "remove",     parse_remove },
+       { "purge",      parse_repurge },
        { NULL,         NULL }
 };
 
index 0e533e73287c5de9981590234836c8e3166fcbd9..630d29343a920b2dfa4b3ca6bbe45e4e0cffcbd4 100644 (file)
@@ -426,6 +426,8 @@ vcl_output_lang_h(struct vsb *sb)
        vsb_cat(sb, "int VRT_re_test(struct vsb *, const char *, int sub);\n");
        vsb_cat(sb, "const char *VRT_regsub(struct sess *sp, const char *, void *, const char *);\n");
        vsb_cat(sb, "\n");
+       vsb_cat(sb, "void VRT_repurge(const char *);\n");
+       vsb_cat(sb, "\n");
        vsb_cat(sb, "void VRT_count(struct sess *, unsigned);\n");
        vsb_cat(sb, "int VRT_rewrite(const char *, const char *);\n");
        vsb_cat(sb, "void VRT_error(struct sess *, unsigned, const char *);\n");