From: Tollef Fog Heen Date: Wed, 26 Nov 2008 00:31:44 +0000 (+0100) Subject: Initial foo X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fdns_director;p=varnish Initial foo --- diff --git a/varnish-cache/bin/varnishd/cache_dir_dns.c b/varnish-cache/bin/varnishd/cache_dir_dns.c new file mode 100644 index 00000000..fb6d6bc6 --- /dev/null +++ b/varnish-cache/bin/varnishd/cache_dir_dns.c @@ -0,0 +1,117 @@ +/*- + * Copyright (c) 2006 Verdens Gang AS + * Copyright (c) 2006-2008 Linpro AS + * All rights reserved. + * + * Author: Poul-Henning Kamp + * + * 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. + * + * $Id$ + * + */ + +#include "config.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include "shmlog.h" +#include "cache.h" +#include "cache_backend.h" +#include "vrt.h" + +/*--------------------------------------------------------------------*/ + +struct vdi_dns { + unsigned magic; +#define VDI_DNS_MAGIC 0x443B3CDC + struct director dir; + struct backend *backend; + unsigned dns_ttl; +}; + +static struct vbe_conn * +vdi_dns_getfd(struct sess *sp) +{ + struct vdi_dns *vs; + + CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); + CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC); + CAST_OBJ_NOTNULL(vs, sp->director->priv, VDI_DNS_MAGIC); + return (VBE_GetVbe(sp, vs->backend)); +} + +static unsigned +vdi_dns_healthy(const struct sess *sp) +{ + struct vdi_dns *vs; + + CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); + CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC); + CAST_OBJ_NOTNULL(vs, sp->director->priv, VDI_DNS_MAGIC); + return 1; +} + +/*lint -e{818} not const-able */ +static void +vdi_dns_fini(struct director *d) +{ + struct vdi_dns *vs; + + CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC); + CAST_OBJ_NOTNULL(vs, d->priv, VDI_DNS_MAGIC); + + VBE_DropRef(vs->backend); + free(vs->dir.vcl_name); + vs->dir.magic = 0; + FREE_OBJ(vs); +} + +void +VRT_init_dir_dns(struct cli *cli, struct director **bp, + const struct vrt_dir_simple *t) +{ + struct vdi_simple *vs; + + (void)cli; + + ALLOC_OBJ(vs, VDI_DNS_MAGIC); + XXXAN(vs); + vs->dir.magic = DIRECTOR_MAGIC; + vs->dir.priv = vs; + vs->dir.name = "dns"; + REPLACE(vs->dir.vcl_name, t->host->vcl_name); + vs->dir.getfd = vdi_dns_getfd; + vs->dir.fini = vdi_dns_fini; + vs->dir.healthy = vdi_dns_healthy; + + vs->dns_ttl = t->dns_ttl; + + *bp = &vs->dir; +}