From owner-p4-projects@FreeBSD.ORG Tue Jul 10 09:53:06 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B3A8216A46D; Tue, 10 Jul 2007 09:53:06 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 847F416A400 for ; Tue, 10 Jul 2007 09:53:06 +0000 (UTC) (envelope-from dongmei@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 72D1713C44B for ; Tue, 10 Jul 2007 09:53:06 +0000 (UTC) (envelope-from dongmei@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l6A9r6eD041392 for ; Tue, 10 Jul 2007 09:53:06 GMT (envelope-from dongmei@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l6A9r60V041389 for perforce@freebsd.org; Tue, 10 Jul 2007 09:53:06 GMT (envelope-from dongmei@FreeBSD.org) Date: Tue, 10 Jul 2007 09:53:06 GMT Message-Id: <200707100953.l6A9r60V041389@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dongmei@FreeBSD.org using -f From: dongmei To: Perforce Change Reviews Cc: Subject: PERFORCE change 123264 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Jul 2007 09:53:07 -0000 http://perforce.freebsd.org/chv.cgi?CH=123264 Change 123264 by dongmei@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 -#include -#include -#include - -#include -#include -#include -#include -#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 +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#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) <<<