[master] fa80a6a Start marking variables with VCL versions.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Feb 20 10:49:09 UTC 2018
commit fa80a6a641b997a84ec71813128d86b47620d79c
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Feb 20 09:31:38 2018 +0000
Start marking variables with VCL versions.
(It doesn't get to the C code yet.)
diff --git a/doc/sphinx/reference/vcl_var.rst b/doc/sphinx/reference/vcl_var.rst
index f94841a..9631ed3 100644
--- a/doc/sphinx/reference/vcl_var.rst
+++ b/doc/sphinx/reference/vcl_var.rst
@@ -215,7 +215,7 @@ req.url
The requested URL, for instance "/robots.txt".
-req.proto
+req.proto ``VCL <= 4.0``
Type: STRING
@@ -223,7 +223,15 @@ req.proto
Writable from: client
+ The HTTP protocol version used by the client, usually "HTTP/1.1"
+ or "HTTP/2.0".
+req.proto ``VCL >= 4.1``
+
+ Type: STRING
+
+ Readable from: client
+
The HTTP protocol version used by the client, usually "HTTP/1.1"
or "HTTP/2.0".
@@ -302,7 +310,7 @@ req.xid
Unique ID of this request.
-req.esi
+req.esi ``VCL <= 4.0``
Type: BOOL
@@ -312,9 +320,8 @@ req.esi
Set to `false` to disable ESI processing
regardless of any value in beresp.do_esi. Defaults
- to `true`. This variable is subject to change in
- future versions, you should avoid using it.
-
+ to `true`. This variable is replaced by `resp.do_esi`
+ in VCL 4.1.
req.can_gzip
@@ -515,7 +522,7 @@ bereq.url
The requested URL, copied from `req.url`
-bereq.proto
+bereq.proto ``VCL <= 4.0``
Type: STRING
@@ -526,6 +533,15 @@ bereq.proto
The HTTP protocol version, "HTTP/1.1" unless a pass or pipe
request has "HTTP/1.0" in `req.proto`
+bereq.proto ``VCL >= 4.1``
+
+ Type: STRING
+
+ Readable from: vcl_pipe, backend
+
+ The HTTP protocol version, "HTTP/1.1" unless a pass or pipe
+ request has "HTTP/1.0" in `req.proto`
+
bereq.http.*
@@ -620,7 +636,7 @@ beresp.body
For producing a synthetic body.
-beresp.proto
+beresp.proto ``VCL <= 4.0``
Type: STRING
@@ -630,6 +646,14 @@ beresp.proto
The HTTP protocol version the backend replied with.
+beresp.proto ``VCL >= 4.1``
+
+ Type: STRING
+
+ Readable from: vcl_backend_response, vcl_backend_error
+
+ The HTTP protocol version the backend replied with.
+
beresp.status
@@ -855,7 +879,6 @@ obj.proto
Readable from: vcl_hit
-
The HTTP protocol version stored in the object.
@@ -959,7 +982,10 @@ resp
~~~~
This is the response we send to the client, it is built from either
-`beresp` (pass/miss) or `obj` (hits).
+`beresp` (pass/miss), `obj` (hits) or created from whole cloth (synth).
+
+With the exception of `resp.body` all `resp.*` variables available
+in both `vcl_deliver{}` and `vcl_synth{}` as a matter of symmetry.
resp
@@ -978,7 +1004,17 @@ resp.body
To produce a synthetic response body, for instance for errors.
-resp.proto
+resp.proto ``VCL <= 4.0``
+
+ Type: STRING
+
+ Readable from: vcl_deliver, vcl_synth
+
+ Writable from: vcl_deliver, vcl_synth
+
+ The HTTP protocol version to use for the response.
+
+resp.proto ``VCL >= 4.1``
Type: STRING
diff --git a/lib/libvcc/generate.py b/lib/libvcc/generate.py
index ad353ab..cb0784c 100755
--- a/lib/libvcc/generate.py
+++ b/lib/libvcc/generate.py
@@ -169,21 +169,41 @@ returns = (
sp_variables = collections.OrderedDict()
class vardef(object):
- def __init__(self, nam, typ, rd, wr, doc, uns):
+ def __init__(self, nam, typ, rd, wr, wu, vlo, vhi):
+ if nam in sp_variables:
+ return
sp_variables[nam] = self
self.nam = nam
self.typ = typ
self.rd = rd
self.wr = wr
- self.doc = doc
- self.uns = uns
+ self.uns = wu
+ self.vlo = vlo
+ self.vhi = vhi
+
+def parse_vcl(x):
+ vlo,vhi = (0,99)
+ x = x.split()
+ if x[0] == "VCL" and x[1] == "<=":
+ vhi = int(float(x[2]) * 10)
+ elif x[0] == "VCL" and x[1] == ">=":
+ vlo = int(float(x[2]) * 10)
+ else:
+ print("Unknown variable version spec")
+ print("XXX", x, vlo, vhi)
+ exit(2)
+ return vlo,vhi
def parse_var(ln):
- vn = ln.pop(0).split()
- assert len(vn) == 1
- vn = vn[0]
+ l1 = ln.pop(0).split("``")
+ assert len(l1) in (1,3)
+ vn = l1[0].strip()
if vn[-1] == '*':
vn = vn[:-1]
+ if len(l1) == 3:
+ vlo,vhi = parse_vcl(l1[1])
+ else:
+ vlo,vhi = 0,99
vr = []
vw = []
vu = []
@@ -209,9 +229,8 @@ def parse_var(ln):
vu.append(i.strip(",."))
continue
break
- doc = "\n" + l + "\n" + "\n".join(ln)
if vn[:8] != "storage.":
- vardef(vn, vt, vr, vw, doc, uns=vu)
+ vardef(vn, vt, vr, vw, vu, vlo, vhi)
def parse_var_doc(fn):
s = 0
More information about the varnish-commit
mailing list