r4739 - trunk/varnish-cache/lib/libvcl
phk at varnish-cache.org
phk at varnish-cache.org
Wed Apr 28 11:54:13 CEST 2010
Author: phk
Date: 2010-04-28 11:54:13 +0200 (Wed, 28 Apr 2010)
New Revision: 4739
Modified:
trunk/varnish-cache/lib/libvcl/generate.py
Log:
Split the bit map of allowed methods for variables into separate
bitmaps for read and write.
Modified: trunk/varnish-cache/lib/libvcl/generate.py
===================================================================
--- trunk/varnish-cache/lib/libvcl/generate.py 2010-04-28 09:53:26 UTC (rev 4738)
+++ trunk/varnish-cache/lib/libvcl/generate.py 2010-04-28 09:54:13 UTC (rev 4739)
@@ -95,231 +95,277 @@
sp_variables = (
('client.ip',
- 'IP', 'RO',
+ 'IP',
( 'all',),
+ ( ),
'const struct sess *'
),
('server.ip',
- 'IP', 'RO',
+ 'IP',
( 'all',),
+ ( ),
'struct sess *'
),
('server.hostname',
- 'STRING', 'RO',
+ 'STRING',
( 'all',),
+ ( ),
'struct sess *'
),
('server.identity',
- 'STRING', 'RO',
+ 'STRING',
( 'all',),
+ ( ),
'struct sess *'
),
('server.port',
- 'INT', 'RO',
+ 'INT',
( 'all',),
+ ( ),
'struct sess *'
),
('req.request',
- 'STRING', 'RW',
+ 'STRING',
( 'all',),
+ ( 'all',),
'const struct sess *'
),
('req.url',
- 'STRING', 'RW',
+ 'STRING',
( 'all',),
+ ( 'all',),
'const struct sess *'
),
('req.proto',
- 'STRING', 'RW',
+ 'STRING',
( 'all',),
+ ( 'all',),
'const struct sess *'
),
('req.http.',
- 'HDR_REQ', 'RW',
+ 'HDR_REQ',
( 'all',),
+ ( 'all',),
'const struct sess *'
),
('req.hash',
- 'HASH', 'WO',
- ( 'hash', 'error',),
+ 'HASH',
+ ( ),
+ ( 'hash', 'error',), # XXX error ???
'struct sess *'
),
('req.backend',
- 'BACKEND', 'RW',
+ 'BACKEND',
( 'all',),
+ ( 'all',),
'struct sess *'
),
('req.restarts',
- 'INT', 'RO',
+ 'INT',
( 'all',),
+ ( ),
'const struct sess *'
),
('req.grace',
- 'RTIME', 'RW',
+ 'RTIME',
( 'all',),
+ ( 'all',),
'struct sess *'
),
('req.xid',
- 'STRING', 'RO',
+ 'STRING',
( 'all',),
+ ( ),
'struct sess *'
),
('req.esi',
- 'BOOL', 'RW',
+ 'BOOL',
( 'recv', 'fetch', 'deliver', 'error',),
+ ( 'recv', 'fetch', 'deliver', 'error',),
'struct sess *'
),
('req.backend.healthy',
- 'BOOL', 'RO',
+ 'BOOL',
( 'all',),
+ ( ),
'const struct sess *'
),
('bereq.request',
- 'STRING', 'RW',
+ 'STRING',
( 'pipe', 'pass', 'miss', 'fetch',),
+ ( 'pipe', 'pass', 'miss', 'fetch',),
'const struct sess *'
),
('bereq.url',
- 'STRING', 'RW',
+ 'STRING',
( 'pipe', 'pass', 'miss', 'fetch',),
+ ( 'pipe', 'pass', 'miss', 'fetch',),
'const struct sess *'
),
('bereq.proto',
- 'STRING', 'RW',
+ 'STRING',
( 'pipe', 'pass', 'miss', 'fetch',),
+ ( 'pipe', 'pass', 'miss', 'fetch',),
'const struct sess *'
),
('bereq.http.',
- 'HDR_BEREQ', 'RW',
+ 'HDR_BEREQ',
( 'pipe', 'pass', 'miss', 'fetch',),
+ ( 'pipe', 'pass', 'miss', 'fetch',),
'const struct sess *'
),
('bereq.connect_timeout',
- 'RTIME', 'RW',
+ 'RTIME',
( 'pass', 'miss',),
+ ( 'pass', 'miss',),
'struct sess *'
),
('bereq.first_byte_timeout',
- 'RTIME', 'RW',
+ 'RTIME',
( 'pass', 'miss',),
+ ( 'pass', 'miss',),
'struct sess *'
),
('bereq.between_bytes_timeout',
- 'RTIME', 'RW',
+ 'RTIME',
( 'pass', 'miss',),
+ ( 'pass', 'miss',),
'struct sess *'
),
('beresp.proto',
- 'STRING', 'RW',
+ 'STRING',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.saintmode',
- 'RTIME', 'WO',
+ 'RTIME',
+ ( ),
( 'fetch',),
'const struct sess *'
),
('beresp.status',
- 'INT', 'RW',
+ 'INT',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.response',
- 'STRING', 'RW',
+ 'STRING',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.http.',
- 'HDR_BERESP', 'RW',
+ 'HDR_BERESP',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.cacheable',
- 'BOOL', 'RW',
+ 'BOOL',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.ttl',
- 'RTIME', 'RW',
+ 'RTIME',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('beresp.grace',
- 'RTIME', 'RW',
+ 'RTIME',
( 'fetch',),
+ ( 'fetch',),
'const struct sess *'
),
('obj.proto',
- 'STRING', 'RW',
+ 'STRING',
( 'hit', 'error',),
+ ( 'hit', 'error',),
'const struct sess *'
),
('obj.status',
- 'INT', 'RW',
+ 'INT',
( 'error',),
+ ( 'error',),
'const struct sess *'
),
('obj.response',
- 'STRING', 'RW',
+ 'STRING',
( 'error',),
+ ( 'error',),
'const struct sess *'
),
('obj.hits',
- 'INT', 'RO',
+ 'INT',
( 'hit', 'deliver',),
+ ( ),
'const struct sess *'
),
('obj.http.',
- 'HDR_OBJ', 'RW',
+ 'HDR_OBJ',
( 'hit', 'error',),
+ ( 'error',), # XXX ?
'const struct sess *'
),
('obj.cacheable',
- 'BOOL', 'RW',
+ 'BOOL',
( 'hit',),
+ ( 'hit',),
'const struct sess *'
),
('obj.ttl',
- 'RTIME', 'RW',
+ 'RTIME',
( 'hit', 'error',),
+ ( 'hit', 'error',),
'const struct sess *'
),
('obj.grace',
- 'RTIME', 'RW',
+ 'RTIME',
( 'hit', 'error',),
+ ( 'hit', 'error',),
'const struct sess *'
),
('obj.lastuse',
- 'RTIME', 'RO',
+ 'RTIME',
( 'hit', 'deliver', 'error',),
+ ( ),
'const struct sess *'
),
('resp.proto',
- 'STRING', 'RW',
+ 'STRING',
( 'deliver',),
+ ( 'deliver',),
'const struct sess *'
),
('resp.status',
- 'INT', 'RW',
+ 'INT',
( 'deliver',),
+ ( 'deliver',),
'const struct sess *'
),
('resp.response',
- 'STRING', 'RW',
+ 'STRING',
( 'deliver',),
+ ( 'deliver',),
'const struct sess *'
),
('resp.http.',
- 'HDR_RESP', 'RW',
+ 'HDR_RESP',
( 'deliver',),
+ ( 'deliver',),
'const struct sess *'
),
('now',
- 'TIME', 'RO',
+ 'TIME',
( 'all',),
+ ( ),
'const struct sess *'
),
)
+
#######################################################################
# VCL to C type conversion
@@ -656,6 +702,29 @@
#######################################################################
+def restrict(fo, spec):
+ print("RX: ", spec)
+ if len(spec) == 0:
+ fo.write("\t 0,\n")
+ return
+ if spec[0] == 'all':
+ spec = vcls
+ p = ""
+ n = 0
+ for j in spec:
+ if n == 4:
+ fo.write("\n")
+ n = 0
+ if n == 0:
+ fo.write("\t ")
+ n += 1
+ fo.write(p + "VCL_MET_" + j.upper())
+ p = " | "
+
+ fo.write(",\n")
+
+#######################################################################
+
fo=open("vcc_obj.c", "w")
file_header(fo)
@@ -668,40 +737,28 @@
""")
for i in sp_variables:
+ print(i)
typ = i[1]
if typ[:4] == "HDR_":
typ = "HEADER"
fo.write("\t{ \"%s\", %s, %d,\n" % (i[0], typ, len(i[0])))
- if i[2] == "RO" or i[2] == "RW":
+
+ if len(i[2]) > 0:
fo.write('\t "VRT_r_%s(sp)",\n' % i[0].replace(".", "_"))
else:
- fo.write('\t NULL,\n')
- if i[2] == "WO" or i[2] == "RW":
+ fo.write('\t NULL,\t/* No reads allowed */\n')
+ restrict(fo, i[2])
+
+ if len(i[3]) > 0:
fo.write('\t "VRT_l_%s(sp, ",\n' % i[0].replace(".", "_"))
else:
- fo.write('\t NULL,\n')
- fo.write('\t V_%s,' % i[2])
+ fo.write('\t NULL,\t/* No writes allowed */\n')
+ restrict(fo, i[3])
+
if typ == "HEADER":
fo.write('\t "%s",\n' % i[1])
else:
fo.write('\t 0,\n') # XXX: shoule be NULL
- x = i[3]
- if x[0] == 'all':
- x = vcls
- p = ""
- n = 0
- for j in x:
- if n == 0:
- fo.write("\t ")
- n += 1
- fo.write(p + "VCL_MET_" + j.upper())
- p = " | "
- if n == 4:
- fo.write("\n")
- n = 0
-
- if n > 0:
- fo.write("\n")
fo.write("\t},\n")
fo.write("\t{ NULL }\n};\n")
More information about the varnish-commit
mailing list