Remove the UAT macro usage. The UAT API is nifty for dissectors but clunky for everything else. This allows using a hash table to store macros, that is the natural data structure for the use case (and faster). It also allows using the existing filter GUI dialog, adapted for display filter macros. The difference isn't huge but it's better and less limited than the more generic UAT dialog, with room for improvement. Changing the UAT dialog for filter specific use cases is difficult. The config file is renamed to "dmacros" and uses the same format as "dfilter", that is more amenable and forgiving for hand-editing than the UAT storage format. There is some logic to convert the "dfilter_macros" UAT config file to a "dmacros" filter config file, for backward-compatibility. The conversion is only done if there is no existing "dmacros" file in the profile folder.
107 lines
2.1 KiB
C
107 lines
2.1 KiB
C
/** @file
|
|
*
|
|
* Declarations of routines for reading and writing the filters file.
|
|
*
|
|
* Wireshark - Network traffic analyzer
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef __FILTER_FILES_H__
|
|
#define __FILTER_FILES_H__
|
|
|
|
#include <wireshark.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/*
|
|
* Capture filter file name.
|
|
*/
|
|
#define CFILTER_FILE_NAME "cfilters"
|
|
|
|
/*
|
|
* Display filter file name.
|
|
*/
|
|
#define DFILTER_FILE_NAME "dfilters"
|
|
|
|
/*
|
|
* Display filter file name.
|
|
*/
|
|
#define DMACROS_FILE_NAME "dmacros"
|
|
|
|
/*
|
|
* Filter lists.
|
|
*/
|
|
typedef enum {
|
|
CFILTER_LIST, /* capture filter list - saved */
|
|
DFILTER_LIST, /* display filter list - saved */
|
|
DMACROS_LIST, /* display filter macro list - saved */
|
|
} filter_list_type_t;
|
|
|
|
/*
|
|
* Item in a list of filters.
|
|
*/
|
|
typedef struct {
|
|
char *name; /* filter name */
|
|
char *strval; /* filter expression */
|
|
} filter_def;
|
|
|
|
typedef struct {
|
|
filter_list_type_t type;
|
|
GList *list;
|
|
} filter_list_t;
|
|
|
|
/*
|
|
* Read in a list of filters.
|
|
*
|
|
* On error, report the error via the UI.
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
WS_RETNONNULL
|
|
filter_list_t *ws_filter_list_read(filter_list_type_t list_type);
|
|
|
|
/*
|
|
* Add a new filter to the end of a list.
|
|
* Returns a pointer to the newly-added entry.
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
void ws_filter_list_add(filter_list_t *list, const char *name,
|
|
const char *expression);
|
|
|
|
/*
|
|
* Find a filter in a list by name.
|
|
* Returns a pointer to the found entry.
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
GList *ws_filter_list_find(filter_list_t *list, const char *name);
|
|
|
|
/*
|
|
* Remove a filter from a list.
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
bool ws_filter_list_remove(filter_list_t *list, const char *name);
|
|
|
|
/*
|
|
* Write out a list of filters.
|
|
*
|
|
* On error, report the error via the UI.
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
void ws_filter_list_write(filter_list_t *list);
|
|
|
|
/*
|
|
* Free all filter lists
|
|
*/
|
|
WS_DLL_PUBLIC
|
|
void ws_filter_list_free(filter_list_t *list);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __FILTER_FILES_H__ */
|