Wireshark  2.9.0-477-g68ec514b
The Wireshark network protocol analyzer
print.h
1 /* print.h
2  * Definitions for printing packet analysis trees.
3  *
4  * Gilbert Ramirez <gram@alumni.rice.edu>
5  *
6  * Wireshark - Network traffic analyzer
7  * By Gerald Combs <gerald@wireshark.org>
8  * Copyright 1998 Gerald Combs
9  *
10  * SPDX-License-Identifier: GPL-2.0-or-later
11  */
12 
13 #ifndef __PRINT_H__
14 #define __PRINT_H__
15 
16 #include <stdio.h>
17 
18 #include <epan/epan.h>
19 #include <epan/packet.h>
20 
21 #include <epan/print_stream.h>
22 
23 #include "ws_symbol_export.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif /* __cplusplus */
28 
29 /* print output format */
30 typedef enum {
31  PR_FMT_TEXT, /* plain text */
32  PR_FMT_PS /* postscript */
33 } print_format_e;
34 
35 /* print_dissections, enum how the dissections should be printed */
36 typedef enum {
37  print_dissections_none, /* no dissections at all */
38  print_dissections_collapsed, /* no dissection details */
39  print_dissections_as_displayed, /* details as displayed */
40  print_dissections_expanded /* all dissection details */
41 } print_dissections_e;
42 
43 
44 typedef enum {
45  FORMAT_CSV, /* CSV */
46  FORMAT_JSON, /* JSON */
47  FORMAT_EK, /* JSON bulk insert to Elasticsearch */
48  FORMAT_XML /* PDML output */
49 } fields_format;
50 
51 typedef enum {
52  PF_NONE = 0x00,
53  PF_INCLUDE_CHILDREN = 0x01
54 } pf_flags;
55 
56 /*
57  * Print user selected list of fields
58  */
59 struct _output_fields;
60 typedef struct _output_fields output_fields_t;
61 
62 typedef GSList* (*proto_node_children_grouper_func)(proto_node *node);
63 
64 WS_DLL_PUBLIC output_fields_t* output_fields_new(void);
65 WS_DLL_PUBLIC void output_fields_free(output_fields_t* info);
66 WS_DLL_PUBLIC void output_fields_add(output_fields_t* info, const gchar* field);
67 WS_DLL_PUBLIC GSList * output_fields_valid(output_fields_t* info);
68 WS_DLL_PUBLIC gsize output_fields_num_fields(output_fields_t* info);
69 WS_DLL_PUBLIC gboolean output_fields_set_option(output_fields_t* info, gchar* option);
70 WS_DLL_PUBLIC void output_fields_list_options(FILE *fh);
71 WS_DLL_PUBLIC gboolean output_fields_has_cols(output_fields_t* info);
72 
73 /*
74  * Higher-level packet-printing code.
75  */
76 
77 WS_DLL_PUBLIC gboolean proto_tree_print(print_dissections_e print_dissections,
78  gboolean print_hex_data,
79  epan_dissect_t *edt,
80  GHashTable *output_only_tables,
82 WS_DLL_PUBLIC gboolean print_hex_data(print_stream_t *stream, epan_dissect_t *edt);
83 
84 WS_DLL_PUBLIC void write_pdml_preamble(FILE *fh, const gchar* filename);
85 WS_DLL_PUBLIC void write_pdml_proto_tree(output_fields_t* fields, gchar **protocolfilter, pf_flags protocolfilter_flags, epan_dissect_t *edt, column_info *cinfo, FILE *fh, gboolean use_color);
86 WS_DLL_PUBLIC void write_pdml_finale(FILE *fh);
87 
88 // Implementations of proto_node_children_grouper_func
89 // Groups each child separately
90 WS_DLL_PUBLIC GSList *proto_node_group_children_by_unique(proto_node *node);
91 // Groups children by json key (children with the same json key get put in the same group
92 WS_DLL_PUBLIC GSList *proto_node_group_children_by_json_key(proto_node *node);
93 
94 WS_DLL_PUBLIC void write_json_preamble(FILE *fh);
95 WS_DLL_PUBLIC void write_json_proto_tree(output_fields_t* fields,
96  print_dissections_e print_dissections,
97  gboolean print_hex_data,
98  gchar **protocolfilter,
99  pf_flags protocolfilter_flags,
100  epan_dissect_t *edt,
101  column_info *cinfo,
102  proto_node_children_grouper_func node_children_grouper,
103  FILE *fh);
104 WS_DLL_PUBLIC void write_json_finale(FILE *fh);
105 
106 WS_DLL_PUBLIC void write_ek_proto_tree(output_fields_t* fields,
107  gboolean print_summary,
108  gboolean print_hex_data,
109  gchar **protocolfilter,
110  pf_flags protocolfilter_flags,
111  epan_dissect_t *edt,
112  column_info *cinfo, FILE *fh);
113 
114 WS_DLL_PUBLIC void write_psml_preamble(column_info *cinfo, FILE *fh);
115 WS_DLL_PUBLIC void write_psml_columns(epan_dissect_t *edt, FILE *fh, gboolean use_color);
116 WS_DLL_PUBLIC void write_psml_finale(FILE *fh);
117 
118 WS_DLL_PUBLIC void write_csv_column_titles(column_info *cinfo, FILE *fh);
119 WS_DLL_PUBLIC void write_csv_columns(epan_dissect_t *edt, FILE *fh);
120 
121 WS_DLL_PUBLIC void write_carrays_hex_data(guint32 num, FILE *fh, epan_dissect_t *edt);
122 
123 WS_DLL_PUBLIC void write_fields_preamble(output_fields_t* fields, FILE *fh);
124 WS_DLL_PUBLIC void write_fields_proto_tree(output_fields_t* fields, epan_dissect_t *edt, column_info *cinfo, FILE *fh);
125 WS_DLL_PUBLIC void write_fields_finale(output_fields_t* fields, FILE *fh);
126 
127 WS_DLL_PUBLIC gchar* get_node_field_value(field_info* fi, epan_dissect_t* edt);
128 
129 extern void print_cache_field_handles(void);
130 
131 #ifdef __cplusplus
132 }
133 #endif /* __cplusplus */
134 
135 #endif /* print.h */
Definition: print_stream.h:42
Definition: print.c:72
Definition: file-pcapng.c:177
Definition: column-info.h:51
Definition: proto.h:673
Definition: pcapng.c:148
Definition: stream.c:40
Definition: epan_dissect.h:28
Definition: proto.h:759