2 * Definitions for printing packet analysis trees.
6 * Gilbert Ramirez <gram@alumni.rice.edu>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
32 #include <epan/packet.h>
34 #include <epan/packet-range.h>
38 #endif /* __cplusplus */
41 * Print stream code; this provides a "print stream" class with subclasses
42 * of various sorts. Additional subclasses might be implemented elsewhere.
46 typedef struct print_stream_ops
{
47 gboolean (*print_preamble
)(struct print_stream
*self
, gchar
*filename
, const char *version_string
);
48 gboolean (*print_line
)(struct print_stream
*self
, int indent
,
50 gboolean (*print_bookmark
)(struct print_stream
*self
,
51 const gchar
*name
, const gchar
*title
);
52 gboolean (*new_page
)(struct print_stream
*self
);
53 gboolean (*print_finale
)(struct print_stream
*self
);
54 gboolean (*destroy
)(struct print_stream
*self
);
57 typedef struct print_stream
{
58 const print_stream_ops_t
*ops
;
62 WS_DLL_PUBLIC print_stream_t
*print_stream_text_new(gboolean to_file
, const char *dest
);
63 WS_DLL_PUBLIC print_stream_t
*print_stream_text_stdio_new(FILE *fh
);
64 WS_DLL_PUBLIC print_stream_t
*print_stream_ps_new(gboolean to_file
, const char *dest
);
65 WS_DLL_PUBLIC print_stream_t
*print_stream_ps_stdio_new(FILE *fh
);
67 WS_DLL_PUBLIC gboolean
print_preamble(print_stream_t
*self
, gchar
*filename
, const char *version_string
);
68 WS_DLL_PUBLIC gboolean
print_line(print_stream_t
*self
, int indent
, const char *line
);
69 WS_DLL_PUBLIC gboolean
print_bookmark(print_stream_t
*self
, const gchar
*name
,
71 WS_DLL_PUBLIC gboolean
new_page(print_stream_t
*self
);
72 WS_DLL_PUBLIC gboolean
print_finale(print_stream_t
*self
);
73 WS_DLL_PUBLIC gboolean
destroy_print_stream(print_stream_t
*self
);
75 /* print output format */
77 PR_FMT_TEXT
, /* plain text */
78 PR_FMT_PS
/* postscript */
81 /* print_range, enum which frames should be printed */
83 print_range_selected_only
, /* selected frame(s) only (currently only one) */
84 print_range_marked_only
, /* marked frames only */
85 print_range_all_displayed
, /* all frames currently displayed */
86 print_range_all_captured
/* all frames in capture */
89 /* print_dissections, enum how the dissections should be printed */
91 print_dissections_none
, /* no dissections at all */
92 print_dissections_collapsed
, /* no dissection details */
93 print_dissections_as_displayed
, /* details as displayed */
94 print_dissections_expanded
/* all dissection details */
95 } print_dissections_e
;
98 print_stream_t
*stream
; /* the stream to which we're printing */
99 print_format_e format
; /* plain text or PostScript */
100 gboolean to_file
; /* TRUE if we're printing to a file */
101 char *file
; /* file output pathname */
102 char *cmd
; /* print command string (not win32) */
103 packet_range_t range
;
105 gboolean print_summary
; /* TRUE if we should print summary line. */
106 gboolean print_col_headings
; /* TRUE if we should print column headings */
107 print_dissections_e print_dissections
;
108 gboolean print_hex
; /* TRUE if we should print hex data;
109 * FALSE if we should print only if not dissected. */
110 gboolean print_formfeed
; /* TRUE if a formfeed should be printed before
115 * Print user selected list of fields
117 struct _output_fields
;
118 typedef struct _output_fields output_fields_t
;
120 WS_DLL_PUBLIC output_fields_t
* output_fields_new(void);
121 WS_DLL_PUBLIC
void output_fields_free(output_fields_t
* info
);
122 WS_DLL_PUBLIC
void output_fields_add(output_fields_t
* info
, const gchar
* field
);
123 WS_DLL_PUBLIC gsize
output_fields_num_fields(output_fields_t
* info
);
124 WS_DLL_PUBLIC gboolean
output_fields_set_option(output_fields_t
* info
, gchar
* option
);
125 WS_DLL_PUBLIC
void output_fields_list_options(FILE *fh
);
126 WS_DLL_PUBLIC gboolean
output_fields_has_cols(output_fields_t
* info
);
129 * Output only these protocols
131 WS_DLL_PUBLIC GHashTable
*output_only_tables
;
134 * Higher-level packet-printing code.
137 WS_DLL_PUBLIC gboolean
proto_tree_print(print_args_t
*print_args
, epan_dissect_t
*edt
,
138 print_stream_t
*stream
);
139 WS_DLL_PUBLIC gboolean
print_hex_data(print_stream_t
*stream
, epan_dissect_t
*edt
);
141 WS_DLL_PUBLIC
void write_pdml_preamble(FILE *fh
, const gchar
* filename
);
142 WS_DLL_PUBLIC
void proto_tree_write_pdml(epan_dissect_t
*edt
, FILE *fh
);
143 WS_DLL_PUBLIC
void write_pdml_finale(FILE *fh
);
145 WS_DLL_PUBLIC
void write_psml_preamble(FILE *fh
);
146 WS_DLL_PUBLIC
void proto_tree_write_psml(epan_dissect_t
*edt
, FILE *fh
);
147 WS_DLL_PUBLIC
void write_psml_finale(FILE *fh
);
149 WS_DLL_PUBLIC
void write_csv_preamble(FILE *fh
);
150 WS_DLL_PUBLIC
void proto_tree_write_csv(epan_dissect_t
*edt
, FILE *fh
);
151 WS_DLL_PUBLIC
void write_csv_finale(FILE *fh
);
153 WS_DLL_PUBLIC
void write_carrays_preamble(FILE *fh
);
154 WS_DLL_PUBLIC
void proto_tree_write_carrays(guint32 num
, FILE *fh
, epan_dissect_t
*edt
);
155 WS_DLL_PUBLIC
void write_carrays_finale(FILE *fh
);
157 WS_DLL_PUBLIC
void write_fields_preamble(output_fields_t
* fields
, FILE *fh
);
158 WS_DLL_PUBLIC
void proto_tree_write_fields(output_fields_t
* fields
, epan_dissect_t
*edt
, column_info
*cinfo
, FILE *fh
);
159 WS_DLL_PUBLIC
void write_fields_finale(output_fields_t
* fields
, FILE *fh
);
161 WS_DLL_PUBLIC
const gchar
* get_node_field_value(field_info
* fi
, epan_dissect_t
* edt
);
165 #endif /* __cplusplus */