1 /* filter_expressions.c
2 * Submitted by Edwin Groothuis <wireshark@mavetju.org>
4 * Wireshark - Network traffic analyzer
5 * By Gerald Combs <gerald@wireshark.org>
6 * Copyright 1998 Gerald Combs
8 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include <epan/prefs.h>
17 #include <epan/uat-int.h>
19 #include "epan/filter_expressions.h"
22 static uat_t
*display_filter_macro_uat
;
23 static filter_expression_t
*display_filter_macros
;
24 static unsigned num_display_filter_macros
;
26 /* Field callbacks. */
27 UAT_BOOL_CB_DEF(display_filter_macro_uat
, enabled
, filter_expression_t
)
28 UAT_CSTRING_CB_DEF(display_filter_macro_uat
, label
, filter_expression_t
)
29 UAT_DISPLAY_FILTER_CB_DEF(display_filter_macro_uat
, expression
, filter_expression_t
)
30 UAT_CSTRING_CB_DEF(display_filter_macro_uat
, comment
, filter_expression_t
)
33 * Create a new filter_expression and add it to the end of the list
34 * of filter_expressions.
37 filter_expression_new(const char *label
, const char *expr
,
38 const char *comment
, const bool enabled
)
40 filter_expression_t expression
;
42 // UAT allocates its own memory and then deep-copies this structure in.
43 memset(&expression
, 0, sizeof(expression
));
44 expression
.label
= (char *)label
;
45 expression
.expression
= (char *)expr
;
46 expression
.comment
= (char *)comment
;
47 expression
.enabled
= enabled
;
49 /* XXX - This is just returned to make GTK GUI work. */
50 return (filter_expression_t
*)uat_add_record(display_filter_macro_uat
, &expression
, true);
53 void filter_expression_iterate_expressions(wmem_foreach_func func
, void* user_data
)
57 for (i
= 0; i
< num_display_filter_macros
; i
++)
59 func(NULL
, &display_filter_macros
[i
], user_data
);
63 static void display_filter_free_cb(void*r
) {
64 filter_expression_t
* rec
= (filter_expression_t
*)r
;
67 g_free(rec
->expression
);
71 static void* display_filter_copy_cb(void* n
, const void* o
, size_t siz _U_
) {
72 filter_expression_t
* new_record
= (filter_expression_t
*)n
;
73 const filter_expression_t
* old_record
= (const filter_expression_t
*)o
;
75 new_record
->label
= g_strdup(old_record
->label
);
76 new_record
->expression
= g_strdup(old_record
->expression
);
77 new_record
->comment
= g_strdup(old_record
->comment
);
79 new_record
->enabled
= old_record
->enabled
;
84 static uat_field_t display_filter_uat_flds
[] = {
85 UAT_FLD_BOOL(display_filter_macro_uat
, enabled
, "Show in toolbar",
86 "Checked to add display filter button to toolbar"),
87 UAT_FLD_CSTRING(display_filter_macro_uat
, label
, "Button Label",
88 "Name of the display filter button"),
89 UAT_FLD_DISPLAY_FILTER(display_filter_macro_uat
, expression
, "Filter Expression",
90 "Filter expression to be applied by the button"),
91 UAT_FLD_CSTRING(display_filter_macro_uat
, comment
, "Comment",
92 "Comment describing filter expression"),
96 void filter_expression_register_uat(module_t
* pref_module
)
98 display_filter_macro_uat
= uat_new("Display expressions",
99 sizeof(filter_expression_t
), /* record size */
100 "dfilter_buttons", /* filename */
101 true, /* from_profile */
102 &display_filter_macros
, /* data_ptr */
103 &num_display_filter_macros
, /* numitems_ptr */
104 0, /* Doesn't not explicitly effect dissection */
106 display_filter_copy_cb
, /* copy callback */
107 NULL
, /* update callback */
108 display_filter_free_cb
, /* free callback */
109 NULL
, /* post update callback */
110 NULL
, /* reset callback */
111 display_filter_uat_flds
); /* UAT field definitions */
113 prefs_register_uat_preference(pref_module
, "expressions",
114 "Display filter expressions",
115 "Macros for display filters",
116 display_filter_macro_uat
);
121 * Editor modelines - https://www.wireshark.org/tools/modelines.html
126 * indent-tabs-mode: t
129 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
130 * :indentSize=8:tabSize=8:noTabs=false: