r618 - trunk/varnish-cache/bin/varnishncsa

andersb at projects.linpro.no andersb at projects.linpro.no
Thu Aug 3 12:16:21 CEST 2006


Author: andersb
Date: 2006-08-03 12:16:20 +0200 (Thu, 03 Aug 2006)
New Revision: 618

Modified:
   trunk/varnish-cache/bin/varnishncsa/varnishncsa.c
Log:
Think I have found a program structure that works. Filling in bits to build logline.

Modified: trunk/varnish-cache/bin/varnishncsa/varnishncsa.c
===================================================================
--- trunk/varnish-cache/bin/varnishncsa/varnishncsa.c	2006-08-03 09:45:36 UTC (rev 617)
+++ trunk/varnish-cache/bin/varnishncsa/varnishncsa.c	2006-08-03 10:16:20 UTC (rev 618)
@@ -34,14 +34,14 @@
 
 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 @@
 	}
 	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 @@
 
 		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 @@
 		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:




More information about the varnish-commit mailing list