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(×tamp, 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(×tamp, 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(×tamp, 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(×tamp, 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