]> err.no Git - varnish/commitdiff
Rework the way we do ascii representations of addresses
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 14 Jul 2006 10:34:06 +0000 (10:34 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 14 Jul 2006 10:34:06 +0000 (10:34 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@468 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_acceptor.c
varnish-cache/bin/varnishd/cache_backend.c
varnish-cache/bin/varnishd/common.h
varnish-cache/bin/varnishd/tcp.c

index 44b71fb20c9f0d9738270cd3b923b163e513ea0a..796a4acf0a61fe52c880ca61c6574d27e5a1a792 100644 (file)
@@ -159,7 +159,7 @@ struct objhead {
 struct client {
        TAILQ_ENTRY(client)     list;
        unsigned                nsess;
-       char                    addr[TCP_ADDRBUFFSIZE];
+       char                    addr[TCP_ADDRBUFSIZE];
        uint64_t                bytes;
 };
 
@@ -170,7 +170,8 @@ struct sess {
        struct worker           *wrk;
 
        /* formatted ascii client address */
-       char                    addr[TCP_ADDRBUFFSIZE];
+       char                    addr[TCP_ADDRBUFSIZE];
+       char                    port[TCP_PORTBUFSIZE];
        struct client           *client;
 
        /* HTTP request */
index d7edc8f3ca10806ee6424b57d91c73d5da5821c8..5f0bc5911a7eb6828817af3bddc24b9bc547508a 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <stdio.h>
+#include <errno.h>
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -184,6 +185,8 @@ accept_f(int fd, short event, void *arg)
        l = sizeof addr;
        i = accept(fd, addr, &l);
        if (i < 0) {
+               VSL(SLT_Debug, fd, "Accept failed errno=%d", errno);
+               /* XXX: stats ? */
                return;
        }
        sp = SES_New(addr, l);
@@ -201,8 +204,8 @@ accept_f(int fd, short event, void *arg)
        AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER, &linger, sizeof linger));
 #endif
 
-       TCP_name(addr, l, sp->addr);
-       VSL(SLT_SessionOpen, sp->fd, "%s", sp->addr);
+       TCP_name(addr, l, sp->addr, sizeof sp->addr, sp->port, sizeof sp->port);
+       VSL(SLT_SessionOpen, sp->fd, "%s %s", sp->addr, sp->port);
        (void)time(&sp->t_resp);
        TAILQ_INSERT_TAIL(&sesshead, sp, list);
        http_RecvHead(sp->http, sp->fd, evb, vca_callback, sp);
@@ -272,7 +275,7 @@ vca_return_session(struct sess *sp)
 {
 
        if (sp->fd >= 0) {
-               VSL(SLT_SessionReuse, sp->fd, "%s", sp->addr);
+               VSL(SLT_SessionReuse, sp->fd, "%s %s", sp->addr, sp->port);
                assert(sizeof sp == write(pipes[1], &sp, sizeof sp));
        } else {
                SES_Delete(sp);
index f049ce54525cafbdeef3ad88e2e508cc51ed71db..4d4d24f401c087232a71963a6fc8d44866e72cac 100644 (file)
@@ -186,7 +186,8 @@ static int
 vbe_connect(struct backend *bp)
 {
        int s;
-       char buf[TCP_ADDRBUFFSIZE * 2 + 1], *p;
+       char abuf1[TCP_ADDRBUFSIZE], abuf2[TCP_ADDRBUFSIZE];
+       char pbuf1[TCP_PORTBUFSIZE], pbuf2[TCP_PORTBUFSIZE];
        struct addrinfo *ai;
 
        assert(bp != NULL);
@@ -196,11 +197,10 @@ vbe_connect(struct backend *bp)
        if (s < 0) 
                return (s);
 
-       TCP_myname(s, buf);
-       p = strchr(buf, '\0');
-       *p++ = ' ';
-       TCP_name(ai->ai_addr, ai->ai_addrlen, p);
-       VSL(SLT_BackendOpen, s, buf);
+       TCP_myname(s, abuf1, sizeof abuf1, pbuf1, sizeof pbuf1);
+       TCP_name(ai->ai_addr, ai->ai_addrlen,
+           abuf2, sizeof abuf2, pbuf2, sizeof pbuf2);
+       VSL(SLT_BackendOpen, s, "%s %s %s %s", abuf1, pbuf1, abuf2, pbuf2);
        return (s);
 }
 
index b732cc768f2b20786a5d94a85194c30b48ad5d46..da45916e515b7d9d0ae88c1974e6d96eb53ca956 100644 (file)
@@ -9,9 +9,9 @@ void VSL_MgtInit(const char *fn, unsigned size);
 extern struct varnish_stats *VSL_stats;
 
 /* tcp.c */
-#define TCP_ADDRBUFFSIZE       64      /* Sizeof ascii representation */
-
-void TCP_name(struct sockaddr *addr, unsigned l, char *buf);
-void TCP_myname(int sock, char *buf);
-
+/* NI_MAXHOST and NI_MAXSERV are ridiculously long for numeric format */
+#define TCP_ADDRBUFSIZE                64
+#define TCP_PORTBUFSIZE                16
 
+void TCP_name(struct sockaddr *addr, unsigned l, char *abuf, unsigned alen, char *pbuf, unsigned plen);
+void TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen);
index 42cbc97c6a7ae5791e2c24805a684b5b101befad..27b6b578cb96a7ff58e2e52c4f82ece00f7518ae 100644 (file)
 /*--------------------------------------------------------------------*/
 
 void
-TCP_name(struct sockaddr *addr, unsigned l, char *buf)
+TCP_name(struct sockaddr *addr, unsigned l, char *abuf, unsigned alen, char *pbuf, unsigned plen)
 {
        int i;
-       char port[NI_MAXSERV];
 
-       i = getnameinfo(addr, l, buf, TCP_ADDRBUFFSIZE,
-           port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV);
+       i = getnameinfo(addr, l, abuf, alen, pbuf, plen,
+          NI_NUMERICHOST | NI_NUMERICSERV);
        if (i) {
                printf("getnameinfo = %d %s\n", i, gai_strerror(i));
-               strcpy(buf, "Conversion:Failed");
+               strlcpy(abuf, "Conversion", alen);
+               strlcpy(pbuf, "Failed", plen);
                return;
        }
-       strlcat(buf, " ", TCP_ADDRBUFFSIZE);
-       strlcat(buf, port, TCP_ADDRBUFFSIZE);
 }
 
 /*--------------------------------------------------------------------*/
 
 void
-TCP_myname(int sock, char *buf)
+TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen)
 {
        struct sockaddr addr[2];        /* XXX: IPv6 hack */
        socklen_t l;
 
        l = sizeof addr;
        AZ(getsockname(sock, addr, &l));
-       TCP_name(addr, l, buf);
+       TCP_name(addr, l, abuf, alen, pbuf, plen);
 }
 
 /*--------------------------------------------------------------------*/