]> err.no Git - varnish/commitdiff
Log remote IP#:port on session open
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 24 Mar 2006 09:45:39 +0000 (09:45 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 24 Mar 2006 09:45:39 +0000 (09:45 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@66 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_acceptor.c
varnish-cache/include/shmlog_tags.h

index 2bd42f61a2cafaf42b93cc05b415c82e64b96553..0ec110dd57587c3f375d190581f08a36262cb60e 100644 (file)
@@ -3,9 +3,11 @@
  */
 
 #define VCA_RXBUFSIZE          1024
+#define VCA_ADDRBUFSIZE                32
 struct sess {
        int             fd;
        char            rcv[VCA_RXBUFSIZE + 1];
+       char            addr[VCA_ADDRBUFSIZE];
        unsigned        rcv_len;
        struct event    rd_e;
 };
index 43e1b7141600a88dc2510f54f03a3d2eaa21f43f..beb01416b6d0bac076b610c86dba043a5bb1d6d2 100644 (file)
 #include <sys/types.h>
 #include <sys/socket.h>
 
+#include <netdb.h>
+
 #include <sbuf.h>
 #include <event.h>
 
+#include "libvarnish.h"
 #include "heritage.h"
+#include "shmlog.h"
 #include "cache.h"
 
 static struct event_base *evb;
@@ -31,7 +35,14 @@ http_read_f(int fd, short event, void *arg)
        printf("%s(%d, %d, ...)\n", __func__, fd, event);
        assert(VCA_RXBUFSIZE - sp->rcv_len > 0);
        i = read(fd, sp->rcv + sp->rcv_len, VCA_RXBUFSIZE - sp->rcv_len);
-       assert(i > 0);
+       if (i <= 0) {
+               VSL(SLT_SessionClose, sp->fd, "remote %d", sp->rcv_len);
+               event_del(&sp->rd_e);
+               close(sp->fd);
+               free(sp);
+               return;
+       }
+
        sp->rcv_len += i;
        sp->rcv[sp->rcv_len] = '\0';
 
@@ -58,11 +69,13 @@ accept_f(int fd, short event, void *arg __unused)
        socklen_t l;
        struct sockaddr addr;
        struct sess *sp;
+       char port[10];
 
        sp = calloc(sizeof *sp, 1);
-       assert(sp != NULL);
-
-       printf("%s(%d, %d, ...)\n", __func__, fd, event);
+       assert(sp != NULL);     /*
+                                * XXX: this is probably one we should handle
+                                * XXX: accept, emit error NNN and close
+                                */
 
        l = sizeof addr;
        sp->fd = accept(fd, &addr, &l);
@@ -70,7 +83,12 @@ accept_f(int fd, short event, void *arg __unused)
                free(sp);
                return;
        }
-
+       AZ(getnameinfo(&addr, l,
+           sp->addr, VCA_ADDRBUFSIZE,
+           port, sizeof port, NI_NUMERICHOST | NI_NUMERICSERV));
+       strlcat(sp->addr, ":", VCA_ADDRBUFSIZE);
+       strlcat(sp->addr, port, VCA_ADDRBUFSIZE);
+       VSL(SLT_SessionOpen, sp->fd, "%s", sp->addr);
        event_set(&sp->rd_e, sp->fd, EV_READ | EV_PERSIST,
            http_read_f, sp);
        event_base_set(evb, &sp->rd_e);
index ce4885ccfb207d1ecd5f77db159d0695b4afe4c3..d5da0145d89d3c912311a9dc1853841a6607cf41 100644 (file)
@@ -7,7 +7,8 @@
  */
 
 SLTM(CLI)
-SLTM(SessionId)
+SLTM(SessionOpen)
+SLTM(SessionClose)
 SLTM(ClientAddr)
 SLTM(Request)
 SLTM(URL)