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 #include <epan/print_stream.h> 21 22 #include <wsutil/json_dumper.h> 23 24 #include "ws_symbol_export.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif /* __cplusplus */ 29 30 /* print output format */ 31 typedef enum { 32 PR_FMT_TEXT, /* plain text */ 33 PR_FMT_PS /* postscript */ 34 } print_format_e; 35 36 /* print_dissections, enum how the dissections should be printed */ 37 typedef enum { 38 print_dissections_none, /* no dissections at all */ 39 print_dissections_collapsed, /* no dissection details */ 40 print_dissections_as_displayed, /* details as displayed */ 41 print_dissections_expanded /* all dissection details */ 42 } print_dissections_e; 43 44 45 typedef enum { 46 FORMAT_CSV, /* CSV */ 47 FORMAT_JSON, /* JSON */ 48 FORMAT_EK, /* JSON bulk insert to Elasticsearch */ 49 FORMAT_XML /* PDML output */ 50 } fields_format; 51 52 typedef enum { 53 PF_NONE = 0x00, 54 PF_INCLUDE_CHILDREN = 0x01 55 } pf_flags; 56 57 /* 58 * Print user selected list of fields 59 */ 60 struct _output_fields; 61 typedef struct _output_fields output_fields_t; 62 63 typedef GSList* (*proto_node_children_grouper_func)(proto_node *node); 64 65 WS_DLL_PUBLIC output_fields_t* output_fields_new(void); 66 WS_DLL_PUBLIC void output_fields_free(output_fields_t* info); 67 WS_DLL_PUBLIC void output_fields_add(output_fields_t* info, const gchar* field); 68 WS_DLL_PUBLIC GSList * output_fields_valid(output_fields_t* info); 69 WS_DLL_PUBLIC gsize output_fields_num_fields(output_fields_t* info); 70 WS_DLL_PUBLIC gboolean output_fields_set_option(output_fields_t* info, gchar* option); 71 WS_DLL_PUBLIC void output_fields_list_options(FILE *fh); 72 WS_DLL_PUBLIC gboolean output_fields_has_cols(output_fields_t* info); 73 74 /* 75 * Higher-level packet-printing code. 76 */ 77 78 WS_DLL_PUBLIC gboolean proto_tree_print(print_dissections_e print_dissections, 79 gboolean print_hex_data, 80 epan_dissect_t *edt, 81 GHashTable *output_only_tables, 82 print_stream_t *stream); 83 WS_DLL_PUBLIC gboolean print_hex_data(print_stream_t *stream, epan_dissect_t *edt); 84 85 WS_DLL_PUBLIC void write_pdml_preamble(FILE *fh, const gchar* filename); 86 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); 87 WS_DLL_PUBLIC void write_pdml_finale(FILE *fh); 88 89 // Implementations of proto_node_children_grouper_func 90 // Groups each child separately 91 WS_DLL_PUBLIC GSList *proto_node_group_children_by_unique(proto_node *node); 92 // Groups children by json key (children with the same json key get put in the same group 93 WS_DLL_PUBLIC GSList *proto_node_group_children_by_json_key(proto_node *node); 94 95 WS_DLL_PUBLIC json_dumper write_json_preamble(FILE *fh); 96 WS_DLL_PUBLIC void write_json_proto_tree(output_fields_t* fields, 97 print_dissections_e print_dissections, 98 gboolean print_hex_data, 99 gchar **protocolfilter, 100 pf_flags protocolfilter_flags, 101 epan_dissect_t *edt, 102 column_info *cinfo, 103 proto_node_children_grouper_func node_children_grouper, 104 json_dumper *dumper); 105 WS_DLL_PUBLIC void write_json_finale(json_dumper *dumper); 106 107 WS_DLL_PUBLIC void write_ek_proto_tree(output_fields_t* fields, 108 gboolean print_summary, 109 gboolean print_hex_data, 110 gchar **protocolfilter, 111 pf_flags protocolfilter_flags, 112 epan_dissect_t *edt, 113 column_info *cinfo, FILE *fh); 114 115 WS_DLL_PUBLIC void write_psml_preamble(column_info *cinfo, FILE *fh); 116 WS_DLL_PUBLIC void write_psml_columns(epan_dissect_t *edt, FILE *fh, gboolean use_color); 117 WS_DLL_PUBLIC void write_psml_finale(FILE *fh); 118 119 WS_DLL_PUBLIC void write_csv_column_titles(column_info *cinfo, FILE *fh); 120 WS_DLL_PUBLIC void write_csv_columns(epan_dissect_t *edt, FILE *fh); 121 122 WS_DLL_PUBLIC void write_carrays_hex_data(guint32 num, FILE *fh, epan_dissect_t *edt); 123 124 WS_DLL_PUBLIC void write_fields_preamble(output_fields_t* fields, FILE *fh); 125 WS_DLL_PUBLIC void write_fields_proto_tree(output_fields_t* fields, epan_dissect_t *edt, column_info *cinfo, FILE *fh); 126 WS_DLL_PUBLIC void write_fields_finale(output_fields_t* fields, FILE *fh); 127 128 WS_DLL_PUBLIC gchar* get_node_field_value(field_info* fi, epan_dissect_t* edt); 129 130 extern void print_cache_field_handles(void); 131 132 #ifdef __cplusplus 133 } 134 #endif /* __cplusplus */ 135 136 #endif /* print.h */ 137