]> err.no Git - varnish/commitdiff
Think I have found a program structure that works. Filling in bits to build logline.
authorandersb <andersb@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 3 Aug 2006 10:16:20 +0000 (10:16 +0000)
committerandersb <andersb@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 3 Aug 2006 10:16:20 +0000 (10:16 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@618 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishncsa/varnishncsa.c

index e54089b4fcd299aabe0886a6e18d72f47cd69d5e..c2754469c084367fd09b37c5223096f5a1d60128 100644 (file)
 
 struct logline {
        char df_h[4 * (3 + 1)]; // Datafield for %h (IP adress)
-       //   //   int y;
-       //   //   unsigned char *df_l; // Datafield for %l
-       //   //   unsigned char *df_u; // Datafield for %u
-       //   //   unsigned char *df_t; // Datafield for %t
-       //   //   unsigned char *df_r; // Datafield for %r
-       //   //   unsigned char *df_s; // Datafield for %s
-       //   //   unsigned char *df_b; // Datafield for %b
-       //   //   unsigned char *df_R; // Datafield for %{Referer}i
+       //   int y;
+       //   unsigned char *df_l; // Datafield for %l
+       //   unsigned char *df_u; // Datafield for %u
+       //   unsigned char *df_t; // Datafield for %t
+       unsigned char *df_r; // Datafield for %r
+       //   unsigned char *df_s; // Datafield for %s
+       //   unsigned char *df_b; // Datafield for %b
+       //   unsigned char *df_R; // Datafield for %{Referer}i
        unsigned char *df_U; // Datafield for %{User-agent}i
 };
 
@@ -99,6 +99,9 @@ extended_log_format(unsigned char *p, char *w_opt)
        }
        switch (p[0]) {
 
+               // XXX remember to check for NULL when strdup, if no allocate
+               // XXX also remember to free() after strdup?
+
        case SLT_SessionOpen:
                // Finding the IP adress when data is: "XXX.XXX.XXX.XXX somenumber"
 
@@ -110,6 +113,41 @@ extended_log_format(unsigned char *p, char *w_opt)
 
                break;
 
+       case SLT_RxRequest:
+               // XXX: Remember to support more than GET, HEAD and POST.
+               // http://rfc.net/rfc2616.html#p51
+       
+               if (p[1] >= 4 && !strncasecmp((void *)&p[4], "HEAD",11)){
+                       sbuf_bcat(ob[u], p + 4, strlen(p + 4));
+                       //printf("Got a HEAD\n");
+               }
+
+               if (p[1] >= 4 && !strncasecmp((void *)&p[4], "POST",11)){
+                       sbuf_bcat(ob[u], p + 4, strlen(p + 4));
+                       //printf("Got a POST\n");
+               }
+
+               if (p[1] >= 3 && !strncasecmp((void *)&p[4], "GET",11)){
+                       sbuf_bcat(ob[u], p + 4, strlen(p + 4));
+                       //printf("Got a GET\n");
+               }
+
+               break;
+
+       case SLT_RxURL:
+               
+               sbuf_cat(ob[u], " ");
+               sbuf_bcat(ob[u], p + 4, strlen(p + 4));
+
+               break;
+
+       case SLT_RxProtocol:
+               
+               sbuf_cat(ob[u], " ");
+               sbuf_bcat(ob[u], p + 4, strlen(p + 4));
+
+               break;
+
        case SLT_RxHeader:
                        
                if (p[1] >= 11 && !strncasecmp((void *)&p[4], "user-agent:",11)){
@@ -119,11 +157,23 @@ extended_log_format(unsigned char *p, char *w_opt)
                break;
 
        case SLT_SessionClose:
-               printf("Session close [%d]: %s %s\n",u, ll[u].df_h, ll[u].df_U);
+
+               printf("Session close [%d]: %s ",u, ll[u].df_h);
+               sbuf_finish(ob[u]);
+               printf("\"%s\"", sbuf_data(ob[u]));
+               printf(" \"%s\"\n", ll[u].df_U);
+               sbuf_clear(ob[u]);
+               
                break;
 
        case SLT_SessionReuse:
-               printf("Session reuse [%d]: %s %s\n",u, ll[u].df_h, ll[u].df_U);
+
+               printf("Session reuse [%d]: %s ",u, ll[u].df_h);
+               sbuf_finish(ob[u]);
+               printf("\"%s\"", sbuf_data(ob[u]));
+               printf(" \"%s\"\n", ll[u].df_U);
+               sbuf_clear(ob[u]);
+
                break;
 
        default: