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