Objective: Turn “6m” into 6*60
set req.http.X-ttl = "60s" ... call set_ttl ... #set cached obj.ttl from req.url.X-ttl sub set_ttl{ #TODO }
First version: converting “60s” to 60:
C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_OBJ, "\06X-ttl:"); // 6 == 6 chars VRT_l_obj_ttl(sp, atoi(ttl)); }C
Second version: use brute force to covert 60s + 60m + 60h
if( req.http.X-ttl ~ "s$"){ # seconds C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_REQ, "\06X-ttl:"); // 6 == 6 chars VRT_l_obj_ttl(sp, atoi(ttl)); }C } elseif ( req.http.X-ttl ~ "m$") { # minutes C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_REQ, "\06X-ttl:"); // 6 == 6 chars VRT_l_obj_ttl(sp, atoi(ttl) * 60); }C } elseif ( req.http.X-ttl ~ "h$") { # hours C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_REQ, "\06X-ttl:"); // 6 == 6 chars VRT_l_obj_ttl(sp, atoi(ttl) * 60 * 60); }C }
Third version: TODO
- use TimeUnit from vcc_parse.c
- build parser myself
- ask for help in #varnish
If all else fails: Study the compiled C code: varnishd -d -f foo.vcl -C