Commit fabdb68e authored by Geoff Simmons's avatar Geoff Simmons

Add the element enum to .integer().

parent b0c3bd67
...@@ -783,13 +783,14 @@ Example:: ...@@ -783,13 +783,14 @@ Example::
.. _xset.integer(): .. _xset.integer():
INT xset.integer(INT n, ENUM select) INT xset.integer(INT n, STRING element, ENUM select)
------------------------------------ ----------------------------------------------------
:: ::
INT xset.integer( INT xset.integer(
INT n=0, INT n=0,
STRING element=0,
ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST} select=UNIQUE ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST} select=UNIQUE
) )
......
...@@ -38,6 +38,17 @@ varnish v1 -vcl { ...@@ -38,6 +38,17 @@ varnish v1 -vcl {
set resp.http.Integer-Longest set resp.http.Integer-Longest
= s.integer(select=LONGEST); = s.integer(select=LONGEST);
} }
set resp.http.Foo = s.integer(element="foo");
set resp.http.Bar = s.integer(element="bar");
set resp.http.Baz = s.integer(element="baz");
set resp.http.Quux = s.integer(element="quux");
set resp.http.Foobar = s.integer(element="foobar");
if (req.http.Element) {
set resp.http.Element
= s.integer(element=req.http.Element);
}
return (deliver); return (deliver);
} }
} -start } -start
...@@ -52,6 +63,12 @@ client c1 { ...@@ -52,6 +63,12 @@ client c1 {
expect resp.http.N-4 == -1 expect resp.http.N-4 == -1
expect resp.http.N-5 == -2 expect resp.http.N-5 == -2
expect resp.http.Foo == 0
expect resp.http.Bar == 1
expect resp.http.Baz == 2
expect resp.http.Quux == -1
expect resp.http.Foobar == -2
txreq -hdr "Word: foo" txreq -hdr "Word: foo"
rxresp rxresp
expect resp.status == 200 expect resp.status == 200
...@@ -108,12 +125,24 @@ client c1 { ...@@ -108,12 +125,24 @@ client c1 {
expect resp.http.Integer-Longest == -2 expect resp.http.Integer-Longest == -2
} -run } -run
client c1 {
txreq -hdr "Element: oof"
expect_close
} -run
logexpect l1 -v v1 -d 1 -g vxid -q "Notice" { logexpect l1 -v v1 -d 1 -g vxid -q "Notice" {
expect 0 * Begin req expect 0 * Begin req
expect * = Notice {^vmod_selector: s\.match\(\): subject string is NULL$} expect * = Notice {^vmod_selector: s\.match\(\): subject string is NULL$}
expect * = End expect * = End
} -run } -run
logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" {
expect 0 * Begin req
expect * = VCL_Error {^vmod selector failure: s\.integer\(element="oof"\): no such element$}
expect * = VCL_return fail
expect * = End
} -run
varnish v1 -vcl { varnish v1 -vcl {
import ${vmod_selector}; import ${vmod_selector};
import std; import std;
...@@ -211,6 +240,18 @@ varnish v1 -vcl { ...@@ -211,6 +240,18 @@ varnish v1 -vcl {
set resp.http.Integer-Longest set resp.http.Integer-Longest
= s.integer(select=LONGEST); = s.integer(select=LONGEST);
} }
if (req.http.Element) {
set resp.http.Element
= s.integer(element=req.http.Element);
set resp.http.Element-Unique = s.integer(select=UNIQUE);
set resp.http.Element-Exact = s.integer(select=EXACT);
set resp.http.Element-First = s.integer(select=FIRST);
set resp.http.Element-Last = s.integer(select=LAST);
set resp.http.Element-Shortest
= s.integer(select=SHORTEST);
set resp.http.Element-Longest
= s.integer(select=LONGEST);
}
return (deliver); return (deliver);
} }
} }
...@@ -226,6 +267,17 @@ client c1 { ...@@ -226,6 +267,17 @@ client c1 {
expect resp.http.Integer-Last == 4 expect resp.http.Integer-Last == 4
expect resp.http.Integer-Shortest == 4 expect resp.http.Integer-Shortest == 4
expect resp.http.Integer-Longest == 4 expect resp.http.Integer-Longest == 4
txreq -hdr "Element: foo"
rxresp
expect resp.status == 200
expect resp.http.Element == 4
expect resp.http.Element-Unique == 4
expect resp.http.Element-Exact == 4
expect resp.http.Element-First == 4
expect resp.http.Element-Last == 4
expect resp.http.Element-Shortest == 4
expect resp.http.Element-Longest == 4
} -run } -run
varnish v1 -vcl { varnish v1 -vcl {
......
...@@ -795,14 +795,14 @@ vmod_set_string(VRT_CTX, struct vmod_selector_set * set, VCL_INT n, ...@@ -795,14 +795,14 @@ vmod_set_string(VRT_CTX, struct vmod_selector_set * set, VCL_INT n,
VCL_INT VCL_INT
vmod_set_integer(VRT_CTX, struct vmod_selector_set * set, VCL_INT n, vmod_set_integer(VRT_CTX, struct vmod_selector_set * set, VCL_INT n,
VCL_ENUM selects) VCL_STRING element, VCL_ENUM selects)
{ {
unsigned idx; unsigned idx;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(set, VMOD_SELECTOR_SET_MAGIC); CHECK_OBJ_NOTNULL(set, VMOD_SELECTOR_SET_MAGIC);
idx = get_idx(ctx, n, set, "integer", NULL, selects); idx = get_idx(ctx, n, set, "integer", element, selects);
if (idx == UINT_MAX) if (idx == UINT_MAX)
return (0); return (0);
if (!check_added(ctx, set, idx, INTEGER, "integer", "integer")) if (!check_added(ctx, set, idx, INTEGER, "integer", "integer"))
......
...@@ -698,7 +698,7 @@ Example:: ...@@ -698,7 +698,7 @@ Example::
set req.url = myset.string(); set req.url = myset.string();
} }
$Method INT .integer(INT n=0, $Method INT .integer(INT n=0, STRING element=0,
ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST} ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST}
select=UNIQUE) select=UNIQUE)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment