PERFORCE change 123264 for review

dongmei dongmei at FreeBSD.org
Tue Jul 10 09:53:07 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123264

Change 123264 by dongmei at dongmei-soc2007-home on 2007/07/10 09:52:52

	complete the function parse the record into tree view  

Affected files ...

.. //depot/projects/soc2007/dongmei-auditanalyzer/gtk/tree_view.c#3 edit
.. //depot/projects/soc2007/dongmei-auditanalyzer/gtk/tree_view.h#3 edit
.. //depot/projects/soc2007/dongmei-auditanalyzer/tfile.c#2 edit

Differences ...

==== //depot/projects/soc2007/dongmei-auditanalyzer/gtk/tree_view.c#3 (text+ko) ====

@@ -1,718 +1,2420 @@
-/* Tree View/Tree Store
- *
- * The GtkTreeStore is used to store data in tree form, to be
- * used later on by a GtkTreeView to display it. This demo builds
- * a simple GtkTreeStore and displays it. If you're new to the
- * GtkTreeView widgets and associates, look into the GtkListStore
- * example first.
- *
- */
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <bsm/libbsm.h>
-#include "../tfile.h"
-
-static GtkWidget *window = NULL;
-GtkTreeStore *record_tree;
-
-/* columns */
-enum
-{
-  TOKEN_DETAIL_COLUMN = 0,
-  NUM_COLUMNS
-};
-
-static GtkTreeModel *
-create_model (void)
-{
-  /* create tree store */
-  record_tree= gtk_tree_store_new (NUM_COLUMNS,
-			      G_TYPE_STRING);
-
-  return GTK_TREE_MODEL (record_tree);
-}
-/*
- * Prints a single byte in the given format.
- */
-static void
-sprint_1_byte(gchar **str, u_char val, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+50);
-	g_sprintf(*str,"%s:%u\0",label,val);
-}
-
-/*
- * Print 2 bytes in the given format.
- */
-static void
-sprint_2_bytes(gchar **str, u_int16_t val, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+50);
-	g_sprintf(str,"%s:%u\0",label,val);
-}
-
-/*
- * Prints 4 bytes in the given format.
- */
-static void
-sprint_4_bytes(gchar **str, u_int32_t val, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+50);
-	g_sprintf(*str,"%s:%u\0",label,val);
-}
-
-/*
- * Prints 8 bytes in the given format.
- */
-static void
-sprint_8_bytes(gchar **str, u_int64_t val, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+50);
-	g_sprintf(*str,"%s:%llu\0",label,val);
-}
-
-/*
- * Prints the given size of data bytes in hex.
- */
-static void
-sprint_mem(gchar **str, u_char *data, size_t len)
-{
-	*str=(gchar *)malloc(len+1);
-	int i;
-
-	if (len > 0) {
-		g_sprintf(*str, "0x");
-		for (i = 0; i < len; i++)
-			g_sprintf(*str, "%x", data[i]);
-	}
-}
-
-/*
- * Prints the given data bytes as a string.
- */
-static void
-sprint_string(gchar **dstr, const char *sstr, size_t len, const gchar *label)
-{
-	int i;
-	*dstr=(gchar *)malloc(len+1+sizeof(label));
-	g_sprintf(dstr,"%s:",label);
-	if (len > 0) {
-		for (i = 0; i < len; i++) {
-			if (sstr[i] != '\0')
-				g_sprintf(*dstr, "%c", sstr[i]);
-		}
-	}
-}
-/*
- * Prints seconds in the ctime format.
- */
-static void
-sprint_sec32(gchar **str, u_int32_t sec, const gchar *label)
-{
-	time_t timestamp;
-	char timestr[26];
-	*str=(gchar *)malloc(sizeof(label)+1+26);
-	timestamp = (time_t)sec;
-	ctime_r(&timestamp, timestr);
-	timestr[24] = '\0'; /* No new line */
-	g_sprintf(*str,"%s:%s",label,timestr);
-}
-
-/*
- * XXXRW: 64-bit token streams make use of 64-bit time stamps; since we
- * assume a 32-bit time_t, we simply truncate for now.
- */
-static void
-sprint_sec64(gchar **str, u_int64_t sec,const gchar *label)
-{
-	time_t timestamp;
-	char timestr[26];
-	*str=(gchar *)malloc(sizeof(label)+1+26);
-	timestamp = (time_t)sec;
-	ctime_r(&timestamp, timestr);
-	timestr[24] = '\0'; /* No new line */
-	g_sprintf(*str,"%s:%s",label,timestr);
-}
-
-/*
- * Prints the excess milliseconds.
- */
-static void
-sprint_msec32(gchar **str, u_int32_t msec, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+1+50);
-	g_sprintf(*str,"%s:+ %u msec",label,msec);
-}
-
-/*
- * XXXRW: 64-bit token streams make use of 64-bit time stamps; since we assume
- * a 32-bit msec, we simply truncate for now.
- */
-static void
-sprint_msec64(gchar **str, u_int64_t msec, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+1+50);
-	msec &= 0xffffffff;
-	g_sprintf(*str,"%s:+ %u msec",label,(u_int32_t)msec);
-}
-#define IP_V4_ADDRESS_LEN  20
-#define IP_V6_ADDRESS_LEN 25
-/*
- * Prints a dotted form for the IP address.
- */
-static void
-sprint_ip_address(gchar **str, u_int32_t ip,const gchar *label)
-{
-	struct in_addr ipaddr;
-	*str=(gchar *)malloc(sizeof(label)+1+IP_V4_ADDRESS_LEN);
-	ipaddr.s_addr = ip;
-	g_sprintf(*str,"%s:%s",label,inet_ntoa(ipaddr));
-}
-
-/*
- * Prints a string value for the given ip address.
- */
-static void
-sprint_ip_ex_address(gchar **str, u_int32_t type, u_int32_t *ipaddr,const gchar *label)
-{
-	struct in_addr ipv4;
-	struct in6_addr ipv6;
-	char dst[INET6_ADDRSTRLEN];
-	*str=(gchar *)malloc(sizeof(label)+1+IP_V6_ADDRESS_LEN);
-	
-	switch (type) {
-	case AU_IPv4:
-		ipv4.s_addr = (in_addr_t)(ipaddr[0]);
-		g_sprintf(*str,"%s:%s",label,inet_ntop(AF_INET, &ipv4, dst,
-		    INET6_ADDRSTRLEN));
-		break;
-
-	case AU_IPv6:
-		bcopy(ipaddr, &ipv6, sizeof(ipv6));
-		g_sprintf(*str, "%s:%s",label, inet_ntop(AF_INET6, &ipv6, dst,
-		    INET6_ADDRSTRLEN));
-		break;
-
-	default:
-		g_sprintf(*str, "%s:invalid",label);
-	}
-}
-#define RETVAL_MAX_LEN	128
-/*
- * Prints return value as success or failure.
- */
-static void
-sprint_retval(gchar **str, u_char status, const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+1+RETVAL_MAX_LEN);
-
-	if (status == 0)
-		g_sprintf(*str, "%s:success",label);
-	else
-		g_sprintf(*str, "%s:failure : %s",label, strerror(status));
-}
-
-/*
- * Prints the exit value.
- */
-static void
-sprint_errval(gchar **str, u_int32_t val,const gchar *label)
-{
-	*str=(gchar *)malloc(sizeof(label)+1+RETVAL_MAX_LEN);
-	g_sprintf(*str, "%s:Error %u",label, val);
-}
-
-/*
- * Prints IPC type.
- */
-static void
-sprint_ipctype(gchar **str, u_char type, const gchar *label)
-{
-	if (type == AT_IPC_MSG)
-		g_sprintf(*str, "%s:Message IPC",label);
-	else if (type == AT_IPC_SEM)
-		g_sprintf(*str, "%s:Semaphore IPC",label);
-	else if (type == AT_IPC_SHM)
-		g_sprintf(*str, "%s:Shared Memory IPC",label);
-	else
-		g_sprintf(*str, "%s:%u", label,type);
-}
-
-/*
- * Prints the event from the header token in either the short, default or raw
- * form.
- */
-static void
-sprint_event(gchar **event_name, u_int16_t ev,const gchar *label)
-{
-	char event_ent_name[AU_EVENT_NAME_MAX];
-	char event_ent_desc[AU_EVENT_DESC_MAX];
-	struct au_event_ent e, *ep;
-	*event_name=(gchar *)malloc(sizeof(label)+1+AU_EVENT_NAME_MAX);
-	bzero(&e, sizeof(e));
-	bzero(event_ent_name, sizeof(event_ent_name));
-	bzero(event_ent_desc, sizeof(event_ent_desc));
-	e.ae_name = event_ent_name;
-	e.ae_desc = event_ent_desc;
-
-	ep = getauevnum_r(&e, ev);
-	if (ep == NULL) {
-		g_sprintf(*event_name, "%s:%u", label, ev);
-		return;
-	}
-	g_sprintf(*event_name, "%s:%s",label,e.ae_name);
-}
-
-void 
-parse_header32_tok(tokenstr_t *tok)
-{
-	GtkTreeIter iter;
-	GtkTreeIter child_iter;
-  
-	gtk_tree_store_append (record_tree, &iter, NULL);
-	gtk_tree_store_set (record_tree, &iter,
-		  TOKEN_DETAIL_COLUMN, "header token",
-		  -1);
-	/*version*/
-	gchar *str;
-	sprint_1_byte(&str,tok->tt.hdr32.version,"version");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-
-}
-void 
-parse_header32_ex_tok(tokenstr_t *tok)
-{
-	GtkTreeIter iter;
-	GtkTreeIter child_iter;
-  
-	gtk_tree_store_append (record_tree, &iter, NULL);
-	gtk_tree_store_set (record_tree, &iter,
-		  TOKEN_DETAIL_COLUMN, "header token",
-		  -1);
-	/*version*/
-	gchar *str;
-	sprint_1_byte(&str,tok->tt.hdr32.version,"version");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-	/*event*/
-	sprint_event(&str,tok->tt.hdr32.e_type,"event");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-	
-	/*modifier*/
-	sprint_2_bytes(&str,tok->tt.hdr32.e_mod,"modifier");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-
-	/*time*/
-	sprint_sec32(&str, tok->tt.hdr32.s, "time");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-    /*msec*/
-	sprint_msec32(&str, tok->tt.hdr32.ms,"msec");
-	gtk_tree_store_append (record_tree, &child_iter, &iter);
-	gtk_tree_store_set (record_tree, &child_iter,
-			  TOKEN_DETAIL_COLUMN,str,
-			  -1);
-	free(str);
-
-}
-void 
-parse_header64_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_header64_ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_trailer_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_arg32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_arg64_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_arb_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_atrr32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_attr64_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_exit_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_execarg_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_execenv_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_file_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_newgroups_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_inaddr_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_inaddr_ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_ip_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_ipc_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_ipcperm_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_iport_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_opaque_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_path_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_process32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_process32ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_process64ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_return32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_return64_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_seq_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_socket_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_soc_inet32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_sock_unix_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_subject32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_subject64_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_subject32ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_subject64ex_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_text_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_socketex32_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_zonename_tok(tokenstr_t *tok)
-{
-}
-void 
-parse_invalid_tok(tokenstr_t *tok)
-{
-}
-
-static void
-add_columns (GtkTreeView *treeview)
-{
-  gint col_offset;
-  GtkCellRenderer *renderer;
-  GtkTreeViewColumn *column;
-  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
-
-  /* column for holiday names */
-  renderer = gtk_cell_renderer_text_new ();
-  g_object_set (renderer, "xalign", 0.0, NULL);
-
-  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-							    -1, "Token Detail",
-							    renderer, "text",
-							    TOKEN_DETAIL_COLUMN,
-							    NULL);
-  column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
-  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
-
-}
-
-GtkWidget *
-create_tree ()
-{
-	GtkWidget *treeview;
-	GtkTreeModel *model;
-
-	/* create model */
-	model = create_model ();
-
-	/* create tree view */
-	treeview = gtk_tree_view_new_with_model (model);
-	g_object_unref (model);
-	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
-	gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
-			   GTK_SELECTION_MULTIPLE);
-
-	add_columns (GTK_TREE_VIEW (treeview));
-	return treeview;
-}
-
-/* parse record data to tree view*/
-void
-parse_token_tree(record_data *rdata)
-{
-	gint bytesread=0;
-	tokenstr_t tok;
-	int reclen=rdata->record_len;
-	while (bytesread < reclen) {
-		/* Is this an incomplete record? */
-		if (-1 == au_fetch_tok(&tok, rdata->buf + bytesread,
-			reclen - bytesread))
-			break;
-		/* add the token detail to tree */
-			switch(tok.id) {
-			case AUT_HEADER32:
-				parse_header32_tok(&tok);
-				return;
-
-			case AUT_HEADER32_EX:
-				parse_header32_ex_tok(&tok);
-				return;
-
-/*			case AUT_HEADER64:
-				print_header64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_HEADER64_EX:
-				print_header64_ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_TRAILER:
-				print_trailer_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_ARG32:
-				print_arg32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_ARG64:
-				print_arg64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_DATA:
-				print_arb_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_ATTR32:
-				print_attr32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_ATTR64:
-				print_attr64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_EXIT:
-				print_exit_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_EXEC_ARGS:
-				print_execarg_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_EXEC_ENV:
-				print_execenv_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_OTHER_FILE32:
-				print_file_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_NEWGROUPS:
-				print_newgroups_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IN_ADDR:
-				print_inaddr_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IN_ADDR_EX:
-				print_inaddr_ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IP:
-				print_ip_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IPC:
-				print_ipc_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IPC_PERM:
-				print_ipcperm_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_IPORT:
-				print_iport_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_OPAQUE:
-				print_opaque_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_PATH:
-				print_path_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_PROCESS32:
-				print_process32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_PROCESS32_EX:
-				print_process32ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_PROCESS64:
-				print_process64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_PROCESS64_EX:
-				print_process64ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_RETURN32:
-				print_return32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_RETURN64:
-				print_return64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SEQ:
-				print_seq_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SOCKET:
-				print_socket_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SOCKINET32:
-				print_sock_inet32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SOCKUNIX:
-				print_sock_unix_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SUBJECT32:
-				print_subject32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SUBJECT64:
-				print_subject64_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SUBJECT32_EX:
-				print_subject32ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SUBJECT64_EX:
-				print_subject64ex_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_TEXT:
-				print_text_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_SOCKET_EX:
-				print_socketex32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			case AUT_ZONENAME:
-				print_zonename_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);
-				return;
-
-			default:
-				print_invalid_tok(outfp, tok, del, raw, sfrm, AU_PLAIN);*/
-			}
-
-		bytesread += tok.len;
-	}
-
-}
+/* Tree View/Tree Store
+ *
+ * The GtkTreeStore is used to store data in tree form, to be
+ * used later on by a GtkTreeView to display it. This demo builds
+ * a simple GtkTreeStore and displays it. If you're new to the
+ * GtkTreeView widgets and associates, look into the GtkListStore
+ * example first.
+ *
+ */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <bsm/libbsm.h>
+#include "../tfile.h"
+
+static GtkWidget *window = NULL;
+GtkTreeStore *record_tree;
+
+/* columns */
+enum
+{
+  TOKEN_DETAIL_COLUMN = 0,
+  NUM_COLUMNS
+};
+
+static GtkTreeModel *
+create_model (void)
+{
+  /* create tree store */
+  record_tree= gtk_tree_store_new (NUM_COLUMNS,
+			      G_TYPE_STRING);
+
+  return GTK_TREE_MODEL (record_tree);
+}
+#define MAX_PRINT_FORMAT_LEN 	50
+#define LEN_FOR_BYTES_MARGIN	50
+/*
+ * Prints a single byte in the given format.
+ */
+static void
+sprint_1_byte(gchar **str, u_char val, const gchar *format,const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	gchar *fstr;
+	fstr=(gchar *)malloc(MAX_PRINT_FORMAT_LEN);
+	fstr=(gchar *)g_strconcat("%s:",format,NULL);
+	g_sprintf(*str,fstr,label,val);
+	free(fstr);
+}
+/*
+ * Prints a single byte in the default format.
+ */
+static void
+sprint_1_byte_df(gchar **str, u_char val, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	g_sprintf(*str,"%s:%u",label,val);
+}
+
+/*
+ * Print 2 bytes in the given format.
+ */
+static void
+sprint_2_bytes(gchar **str, u_int16_t val, const gchar *format,const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	gchar *fstr;
+	fstr=(gchar *)malloc(MAX_PRINT_FORMAT_LEN);
+	fstr=(gchar *)g_strconcat("%s:",format,NULL);
+	g_sprintf(*str,fstr,label,val);
+	free(fstr);
+}
+/*
+ * Print 2 bytes in the default format.
+ */
+static void
+sprint_2_bytes_df(gchar **str, u_int16_t val, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	g_sprintf(*str,"%s:%u",label,val);
+}
+
+/*
+ * Prints 4 bytes in the given format.
+ */
+static void
+sprint_4_bytes(gchar **str, u_int32_t val, const gchar *format,const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	gchar *fstr;
+	fstr=(gchar *)malloc(MAX_PRINT_FORMAT_LEN);
+	fstr=(gchar *)g_strconcat("%s:",format,NULL);
+	g_sprintf(*str,fstr,label,val);
+	free(fstr);
+}
+/*
+ * Prints 4 bytes in the defautl format.
+ */
+static void
+sprint_4_bytes_df(gchar **str, u_int32_t val, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	g_sprintf(*str,"%s:%u\0",label,val);
+}
+
+/*
+ * Prints 8 bytes in the given format.
+ */
+static void
+sprint_8_bytes(gchar **str, u_int64_t val, const gchar *format,const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	gchar *fstr;
+	fstr=(gchar *)malloc(MAX_PRINT_FORMAT_LEN);
+	fstr=(gchar *)g_strconcat("%s:",format,NULL);
+	g_sprintf(*str,fstr,label,val);
+	free(fstr);
+}
+
+/*
+ * Prints 8 bytes in the default format.
+ */
+static void
+sprint_8_bytes_df(gchar **str, u_int64_t val, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+LEN_FOR_BYTES_MARGIN);
+	g_sprintf(*str,"%s:%llu\0",label,val);
+}
+
+/*
+ * Prints the given size of data bytes in hex.
+ */
+static void
+sprint_mem(gchar **str, u_char *data, size_t len,const gchar *label)
+{
+	*str=(gchar *)malloc(len+sizeof(label)+1);
+	int i;
+	if (len > 0) {
+		gchar *temp;
+		temp=(gchar *)malloc(len);
+		for (i = 0; i < len; i++)
+			g_sprintf(temp, "%x", data[i]);
+		g_sprintf(*str,"%s:0x%s",label,temp);	
+		free(temp);
+	}
+
+}
+/*
+ * Prints the given size of arbitray data in give format.
+ */
+static void
+sprint_arb_data(gchar **str, u_char *data, u_char count, size_t size,const gchar *format)
+{
+	*str=(gchar *)malloc(count+1);
+	int i;
+	for (i = 0; i < count; i++)
+	{
+		switch (size) {
+			case AUR_BYTE_SIZE:
+				g_sprintf(*str, format,*(data +(size * i)));
+				break;
+			case AUR_SHORT_SIZE:
+				g_sprintf(*str, format, *((u_int16_t *)(data +(size * i))));
+				break;
+			case AUR_INT32_SIZE:
+				g_sprintf(*str, format, *((u_int32_t *)(data +(size * i))));
+				break;
+			case AUR_INT64_SIZE:
+				g_sprintf(*str, format, *((u_int64_t *)(data +(size * i))));
+				break;
+			default:
+				return;
+		}
+	}
+}
+
+/*
+ * Prints the given data bytes as a string.
+ */
+static void
+sprint_string(gchar **dstr, const char *sstr, size_t len, const gchar *label)
+{
+	int i;
+	*dstr=(gchar *)malloc(len+1+sizeof(label));
+	gchar *temp;
+	temp=(gchar *)malloc(len);
+	if (len > 0) {
+		for (i = 0; i < len; i++) {
+			if (sstr[i] != '\0')
+				g_sprintf(temp+i, "%c", sstr[i]);
+		}
+		temp[len]='\0';
+		g_sprintf(*dstr,"%s:%s",label,temp);
+	}
+}
+/*
+ * Prints seconds in the ctime format.
+ */
+static void
+sprint_sec32(gchar **str, u_int32_t sec, const gchar *label)
+{
+	time_t timestamp;
+	char timestr[26];
+	*str=(gchar *)malloc(sizeof(label)+1+26);
+	timestamp = (time_t)sec;
+	ctime_r(&timestamp, timestr);
+	timestr[24] = '\0'; /* No new line */
+	g_sprintf(*str,"%s:%s",label,timestr);
+}
+
+/*
+ * XXXRW: 64-bit token streams make use of 64-bit time stamps; since we
+ * assume a 32-bit time_t, we simply truncate for now.
+ */
+static void
+sprint_sec64(gchar **str, u_int64_t sec,const gchar *label)
+{
+	time_t timestamp;
+	char timestr[26];
+	*str=(gchar *)malloc(sizeof(label)+1+26);
+	timestamp = (time_t)sec;
+	ctime_r(&timestamp, timestr);
+	timestr[24] = '\0'; /* No new line */
+	g_sprintf(*str,"%s:%s",label,timestr);
+}
+
+/*
+ * Prints the excess milliseconds.
+ */
+static void
+sprint_msec32(gchar **str, u_int32_t msec, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+1+50);
+	g_sprintf(*str,"%s:+ %u msec",label,msec);
+}
+
+/*
+ * XXXRW: 64-bit token streams make use of 64-bit time stamps; since we assume
+ * a 32-bit msec, we simply truncate for now.
+ */
+static void
+sprint_msec64(gchar **str, u_int64_t msec, const gchar *label)
+{
+	*str=(gchar *)malloc(sizeof(label)+1+50);
+	msec &= 0xffffffff;
+	g_sprintf(*str,"%s:+ %u msec",label,(u_int32_t)msec);
+}
+#define IP_V4_ADDRESS_LEN  20
+#define IP_V6_ADDRESS_LEN 25
+/*
+ * Prints a dotted form for the IP address.
+ */
+static void
+sprint_ip_address(gchar **str, u_int32_t ip,const gchar *label)
+{
+	struct in_addr ipaddr;
+	*str=(gchar *)malloc(sizeof(label)+1+IP_V4_ADDRESS_LEN);
+	ipaddr.s_addr = ip;
+	g_sprintf(*str,"%s:%s",label,inet_ntoa(ipaddr));
+}

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list