r5086 - in trunk/varnish-cache: include lib/libvcl
phk at varnish-cache.org
phk at varnish-cache.org
Wed Aug 11 10:59:40 CEST 2010
Author: phk
Date: 2010-08-11 10:59:40 +0200 (Wed, 11 Aug 2010)
New Revision: 5086
Modified:
trunk/varnish-cache/include/vrt.h
trunk/varnish-cache/lib/libvcl/vcc_backend.c
Log:
Add string representation of backend ipv4/ipv6 addresses to compiled VCL.
Modified: trunk/varnish-cache/include/vrt.h
===================================================================
--- trunk/varnish-cache/include/vrt.h 2010-08-10 15:39:36 UTC (rev 5085)
+++ trunk/varnish-cache/include/vrt.h 2010-08-11 08:59:40 UTC (rev 5086)
@@ -67,7 +67,10 @@
const char *hosthdr;
const unsigned char *ipv4_sockaddr;
+ const char *ipv4_addr;
const unsigned char *ipv6_sockaddr;
+ const char *ipv6_addr;
+ const char *port;
double connect_timeout;
double first_byte_timeout;
Modified: trunk/varnish-cache/lib/libvcl/vcc_backend.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_backend.c 2010-08-10 15:39:36 UTC (rev 5085)
+++ trunk/varnish-cache/lib/libvcl/vcc_backend.c 2010-08-11 08:59:40 UTC (rev 5086)
@@ -90,6 +90,32 @@
return (NULL);
}
+static int
+emit_sockaddr(struct vcc *tl, void *sa, unsigned sal)
+{
+ unsigned len;
+ uint8_t *u;
+
+ AN(sa);
+ AN(sal);
+ assert(sal < 256);
+ Fh(tl, 0, "\nstatic const unsigned char sockaddr%u[%d] = {\n",
+ tl->nsockaddr, sal + 1);
+ Fh(tl, 0, " %3u, /* Length */\n", sal);
+ u = sa;
+ for (len = 0; len <sal; len++) {
+ if ((len % 8) == 0)
+ Fh(tl, 0, " ");
+ Fh(tl, 0, " %3u", u[len]);
+ if (len + 1 < sal)
+ Fh(tl, 0, ",");
+ if ((len % 8) == 7)
+ Fh(tl, 0, "\n");
+ }
+ Fh(tl, 0, "\n};\n");
+ return (tl->nsockaddr++);
+}
+
/*--------------------------------------------------------------------
* Struct sockaddr is not really designed to be a compile time
* initialized data structure, so we encode it as a byte-string
@@ -101,9 +127,8 @@
const char *port)
{
struct addrinfo *res, *res0, *res1, hint;
- int n4, n6, len, error, retval;
+ int n4, n6, error, retval, x;
const char *emit, *multiple;
- unsigned char *u;
char hbuf[NI_MAXHOST];
AN(t_host->dec);
@@ -115,16 +140,17 @@
AZ(error);
n4 = n6 = 0;
multiple = NULL;
+
for (res = res0; res; res = res->ai_next) {
emit = NULL;
if (res->ai_family == PF_INET) {
if (n4++ == 0)
- emit = "ipv4_sockaddr";
+ emit = "ipv4";
else
multiple = "IPv4";
} else if (res->ai_family == PF_INET6) {
if (n6++ == 0)
- emit = "ipv6_sockaddr";
+ emit = "ipv6";
else
multiple = "IPv6";
} else
@@ -149,26 +175,22 @@
return;
}
AN(emit);
- AN(res->ai_addr);
- AN(res->ai_addrlen);
- assert(res->ai_addrlen < 256);
- Fh(tl, 0, "\nstatic const unsigned char sockaddr%u[%d] = {\n",
- tl->nsockaddr, res->ai_addrlen + 1);
- Fh(tl, 0, " %3u, /* Length */\n", res->ai_addrlen);
- u = (void*)res->ai_addr;
- for (len = 0; len < res->ai_addrlen; len++) {
- if ((len % 8) == 0)
- Fh(tl, 0, " ");
- Fh(tl, 0, " %3u", u[len]);
- if (len + 1 < res->ai_addrlen)
- Fh(tl, 0, ",");
- if ((len % 8) == 7)
- Fh(tl, 0, "\n");
- }
- Fh(tl, 0, "\n};\n");
- Fb(tl, 0, "\t.%s = sockaddr%u,\n", emit, tl->nsockaddr++);
+ x = emit_sockaddr(tl, res->ai_addr, res->ai_addrlen);
+ Fb(tl, 0, "\t.%s_sockaddr = sockaddr%u,\n", emit, x);
+ error = getnameinfo(res->ai_addr,
+ res->ai_addrlen, hbuf, sizeof hbuf,
+ NULL, 0, NI_NUMERICHOST);
+ AZ(error);
+ Fb(tl, 0, "\t.%s_addr = \"%s\",\n", emit, hbuf);
retval++;
}
+ if (res0 != NULL) {
+ error = getnameinfo(res0->ai_addr,
+ res0->ai_addrlen, NULL, 0, hbuf, sizeof hbuf,
+ NI_NUMERICSERV);
+ AZ(error);
+ Fb(tl, 0, "\t.port = \"%s\",\n", hbuf);
+ }
freeaddrinfo(res0);
if (retval == 0) {
vsb_printf(tl->sb,
More information about the varnish-commit
mailing list