Commit c95acca7 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Use brain in low-power mode while sneezing my way through the first

cold of spring and add the "duration" conversion function to vmod_std.

The way these conversions work is that you give them the string you
want converted, and the value to use if they cannot.

like so:

	set beresp.ttl = std.duration(beresp.http.x-ttl, 10 s);
parent 13c60b52
......@@ -11,7 +11,8 @@ libvmod_std_la_SOURCES = \
vcc_if.c \
vcc_if.h \
vmod_std.c \
vmod_std_fileread.c
vmod_std_fileread.c \
vmod_std_conversions.c
vcc_if.c vcc_if.h: $(top_srcdir)/lib/libvmod_std/vmod.py $(top_srcdir)/lib/libvmod_std/vmod.vcc
@PYTHON@ $(top_srcdir)/lib/libvmod_std/vmod.py $(top_srcdir)/lib/libvmod_std/vmod.vcc
......
......@@ -34,9 +34,5 @@ Function REAL random(REAL, REAL)
Function VOID log(STRING_LIST)
Function VOID syslog(INT, STRING_LIST)
Function STRING fileread(PRIV_CALL, STRING)
Function STRING author(ENUM {
phk,
des,
kristian,
mithrandir
})
Function STRING author(ENUM { phk, des, kristian, mithrandir })
Function DURATION duration(STRING, DURATION)
/*-
* Copyright (c) 2010 Linpro AS
* All rights reserved.
*
* Author: Poul-Henning Kamp <phk@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include "../../bin/varnishd/cache.h"
#include "vcc_if.h"
double __match_proto__()
vmod_duration(struct sess *sp, const char *p, double d)
{
char *e;
double r;
(void)sp;
if (p == NULL)
return (d);
while(isspace(*p))
p++;
if (*p != '+' && *p != '-' && !isdigit(*p))
return (d);
e = NULL;
r = strtod(p, &e);
if (!isfinite(r))
return (d);
if (e == NULL)
return (d);
while(isspace(*e))
e++;
/* NB: Keep this list synchronized with VCC */
switch (*e++) {
case 's': break;
case 'm': r *= 60.; break;
case 'h': r *= 60.*60.; break;
case 'd': r *= 60.*60.*24.; break;
case 'w': r *= 60.*60.*24.*7.; break;
default:
return (d);
}
while(isspace(*e))
e++;
if (*e != '\0')
return (d);
return (r);
}
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