From 45cde0fc88238ffb61073d06f7bf5ad9c81968b8 Mon Sep 17 00:00:00 2001 From: Jeff Foster Date: Fri, 23 Mar 2001 18:44:20 +0000 Subject: [PATCH] Added named data sources printing support, written by Guy Harris svn path=/trunk/; revision=3167 --- print.c | 43 ++++++++++++++++++++++++++++++++++++------- print.h | 5 ++--- tethereal.c | 5 ++--- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/print.c b/print.c index 64779b8a7e..08f5e1ad74 100644 --- a/print.c +++ b/print.c @@ -1,7 +1,7 @@ /* print.c * Routines for printing packet analysis trees. * - * $Id: print.c,v 1.29 2000/04/13 20:39:18 gram Exp $ + * $Id: print.c,v 1.30 2001/03/23 18:44:20 jfoster Exp $ * * Gilbert Ramirez * @@ -177,13 +177,42 @@ void proto_tree_print_node_text(GNode *node, gpointer data) } } -void print_hex_data(FILE *fh, gint format, register const u_char *cp, - register u_int length, char_enc encoding) +void print_hex_data(FILE *fh, gint format, frame_data *fd) { - if (format == PR_FMT_PS) - print_hex_data_ps(fh, cp, length, encoding); - else - print_hex_data_text(fh, cp, length, encoding); + gboolean multiple_sources; + GSList *src; + tvbuff_t *tvb; + char *name; + char *line; + const u_char *cp; + guint length; + + /* + * Set "multiple_sources" iff this frame has more than one + * data source; if it does, we need to print the name of + * the data source before printing the data from the + * data source. + */ + multiple_sources = (fd->data_src->next != NULL); + + for (src = fd->data_src; src != NULL; src = src->next) { + tvb = src->data; + if (multiple_sources) { + name = tvb_get_name(tvb); + line = g_malloc(strlen(name) + 3); /* :\n\0 */ + strcpy(line, name); + strcat(line, ":"); + print_line(fh, format, line); + g_free(line); + print_line(fh, format, "\n"); + } + length = tvb_length(tvb); + cp = tvb_get_ptr(tvb, 0, length); + if (format == PR_FMT_PS) + print_hex_data_ps(fh, cp, length, fd->flags.encoding); + else + print_hex_data_text(fh, cp, length, fd->flags.encoding); + } } /* This routine was created by Dan Lasley , and diff --git a/print.h b/print.h index 23c6757b2b..62845ed4d5 100644 --- a/print.h +++ b/print.h @@ -1,7 +1,7 @@ /* print.h * Definitions for printing packet analysis trees. * - * $Id: print.h,v 1.20 2000/08/11 13:34:26 deniel Exp $ + * $Id: print.h,v 1.21 2001/03/23 18:44:20 jfoster Exp $ * * Gilbert Ramirez * @@ -54,8 +54,7 @@ void print_preamble(FILE *fh, gint format); void print_finale(FILE *fh, gint format); void proto_tree_print(gboolean print_one_packet, print_args_t *print_args, GNode *protocol_tree, const u_char *pd, frame_data *fd, FILE *fh); -void print_hex_data(FILE *fh, gint format, register const u_char *cp, - register u_int length, char_enc encoding); +void print_hex_data(FILE *fh, gint format, frame_data *fd); void print_line(FILE *fh, gint format, char *line); #endif /* print.h */ diff --git a/tethereal.c b/tethereal.c index 39fc756caa..727a5c484a 100644 --- a/tethereal.c +++ b/tethereal.c @@ -1,6 +1,6 @@ /* tethereal.c * - * $Id: tethereal.c,v 1.68 2001/02/18 03:38:42 guy Exp $ + * $Id: tethereal.c,v 1.69 2001/03/23 18:44:20 jfoster Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -1256,8 +1256,7 @@ wtap_dispatch_cb_print(u_char *user, const struct wtap_pkthdr *phdr, int offset, putchar('\n'); } if (print_hex) { - print_hex_data(stdout, print_args.format, buf, - fdata.cap_len, fdata.flags.encoding); + print_hex_data(stdout, print_args.format, &fdata); putchar('\n'); } fdata.cinfo = NULL;