[master] a7ceb25 Support IP + STRING
Federico G. Schwindt
fgsch at lodoss.net
Wed Feb 8 06:09:05 CET 2017
commit a7ceb252895274b8640e731f22d5073132bfd178
Author: Federico G. Schwindt <fgsch at lodoss.net>
Date: Wed Feb 8 05:03:04 2017 +0000
Support IP + STRING
Fixes #2205.
diff --git a/bin/varnishtest/tests/v00020.vtc b/bin/varnishtest/tests/v00020.vtc
index 352809f..7100e11 100644
--- a/bin/varnishtest/tests/v00020.vtc
+++ b/bin/varnishtest/tests/v00020.vtc
@@ -108,6 +108,10 @@ varnish v1 -vcl {
set req.http.foo = req.http.foo + "bar" ~ "bar";
set req.http.foo = req.http.foo + "bar" !~ "bar";
+ set req.http.foo = "foo" + req.ttl;
+
+ set req.http.foo = client.ip + ", " + server.ip;
+
set req.ttl = 1s;
set req.ttl *= 1.5;
set req.ttl = 1.5 s * 2.5;
@@ -141,9 +145,6 @@ varnish v1 -vcl {
else if (4) { }
else { }
}
- sub vcl_backend_response {
- set beresp.http.buzz = "ttl=" + beresp.ttl;
- }
}
# XXX: not the most clear error message
@@ -238,6 +239,13 @@ varnish v1 -errvcl {DURATION + STRING not possible.} {
}
}
+varnish v1 -errvcl {IP + IP not possible.} {
+ backend b { .host = "127.0.0.1"; }
+ sub vcl_recv {
+ set req.ttl = client.ip + server.ip;
+ }
+}
+
varnish v1 -errvcl {Name of function, 'foo-bar', contains illegal character '-'} {
backend b { .host = "127.0.0.1"; }
sub foo-bar {
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 680ebd6..729873b 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -1019,14 +1019,15 @@ static const struct adds {
{ '-', INT, REAL, REAL },
/* Error */
- { '+', TIME, INT, VOID },
- { '+', TIME, REAL, VOID },
- { '+', INT, DURATION, VOID },
- { '+', REAL, DURATION, VOID },
{ '+', DURATION, INT, VOID },
{ '+', DURATION, REAL, VOID },
{ '+', DURATION, TIME, VOID },
{ '+', DURATION, STRING, VOID },
+ { '+', INT, DURATION, VOID },
+ { '+', IP, IP, VOID },
+ { '+', REAL, DURATION, VOID },
+ { '+', TIME, INT, VOID },
+ { '+', TIME, REAL, VOID },
{ EOI, VOID, VOID, VOID }
};
@@ -1050,6 +1051,8 @@ vcc_expr_add(struct vcc *tl, struct expr **e, vcc_type_t fmt)
vcc_NextToken(tl);
if (f2 == TIME)
vcc_expr_mul(tl, &e2, DURATION);
+ else if (f2 == IP)
+ vcc_expr_mul(tl, &e2, STRING);
else
vcc_expr_mul(tl, &e2, f2);
ERRCHK(tl);
More information about the varnish-commit
mailing list