/* filter_expressions.c * Submitted by Edwin Groothuis * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "config.h" #include #include #include #include #include "epan/filter_expressions.h" /* UAT variables */ static uat_t *display_filter_macro_uat = NULL; static filter_expression_t *display_filter_macros = NULL; static guint num_display_filter_macros = 0; /* Field callbacks. */ UAT_BOOL_CB_DEF(display_filter_macro_uat, enabled, filter_expression_t) UAT_CSTRING_CB_DEF(display_filter_macro_uat, label, filter_expression_t) UAT_DISPLAY_FILTER_CB_DEF(display_filter_macro_uat, expression, filter_expression_t) UAT_CSTRING_CB_DEF(display_filter_macro_uat, comment, filter_expression_t) /* * Create a new filter_expression and add it to the end of the list * of filter_expressions. */ filter_expression_t* filter_expression_new(const gchar *label, const gchar *expr, const gchar *comment, const gboolean enabled) { filter_expression_t expression; //UAT does the allocation of memory before copying structure memset(&expression, 0, sizeof(expression)); expression.label = g_strdup(label); expression.expression = g_strdup(expr); expression.comment = g_strdup(comment); expression.enabled = enabled; /* XXX - This is just returned to make GTK GUI work. */ return (filter_expression_t*)uat_add_record(display_filter_macro_uat, &expression, TRUE); } void filter_expression_iterate_expressions(wmem_foreach_func func, void* user_data) { guint i; for (i = 0; i < num_display_filter_macros; i++) { func(NULL, &display_filter_macros[i], user_data); } } static void display_filter_free_cb(void*r) { filter_expression_t* rec = (filter_expression_t*)r; g_free(rec->label); g_free(rec->expression); g_free(rec->comment); } static void* display_filter_copy_cb(void* n, const void* o, size_t siz _U_) { filter_expression_t* new_record = (filter_expression_t*)n; const filter_expression_t* old_record = (const filter_expression_t*)o; new_record->button = old_record->button; new_record->label = g_strdup(old_record->label); new_record->expression = g_strdup(old_record->expression); new_record->comment = g_strdup(old_record->comment); new_record->enabled = old_record->enabled; return new_record; } static uat_field_t display_filter_uat_flds[] = { UAT_FLD_BOOL(display_filter_macro_uat, enabled, "Show in toolbar", "Checked to add display filter button to toolbar"), UAT_FLD_CSTRING(display_filter_macro_uat, label, "Button Label", "Name of the display filter button"), UAT_FLD_DISPLAY_FILTER(display_filter_macro_uat, expression, "Filter Expression", "Filter expression to be applied by the button"), UAT_FLD_CSTRING(display_filter_macro_uat, comment, "Comment", "Comment describing filter expression"), UAT_END_FIELDS }; void filter_expression_register_uat(module_t* pref_module) { display_filter_macro_uat = uat_new("Display expressions", sizeof(filter_expression_t), /* record size */ "dfilter_buttons", /* filename */ TRUE, /* from_profile */ &display_filter_macros, /* data_ptr */ &num_display_filter_macros, /* numitems_ptr */ 0, /* Doesn't not explicitly effect dissection */ NULL, /* help */ display_filter_copy_cb, /* copy callback */ NULL, /* update callback */ display_filter_free_cb, /* free callback */ NULL, /* post update callback */ NULL, /* reset callback */ display_filter_uat_flds); /* UAT field definitions */ prefs_register_uat_preference(pref_module, "expressions", "Display filter expressions", "Macros for display filters", display_filter_macro_uat); } /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: * c-basic-offset: 8 * tab-width: 8 * indent-tabs-mode: t * End: * * vi: set shiftwidth=8 tabstop=8 noexpandtab: * :indentSize=8:tabSize=8:noTabs=false: */