2 * Routines for dissector-generated conversation filters for use as
3 * display and color filters
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
17 #include "dissector_filters.h"
20 GList *conv_filter_list = NULL;
23 void register_conversation_filter(const char *proto_name, const char *display_name,
24 is_filter_valid_func is_filter_valid, build_filter_string_func build_filter_string) {
25 conversation_filter_t *entry;
27 entry = (conversation_filter_t *)g_malloc(sizeof(conversation_filter_t));
29 entry->proto_name = proto_name;
30 entry->display_name = display_name;
31 entry->is_filter_valid = is_filter_valid;
32 entry->build_filter_string = build_filter_string;
34 conv_filter_list = g_list_append(conv_filter_list, entry);
37 struct conversation_filter_s* find_conversation_filter(const char *name)
39 GList *list_entry = conv_filter_list;
40 conversation_filter_t* filter;
42 while (list_entry != NULL) {
43 filter = (conversation_filter_t*)list_entry->data;
44 if (!strcmp(filter->proto_name, name))
47 list_entry = g_list_next(list_entry);
53 static void conversation_filter_free(gpointer p, gpointer user_data _U_)
58 void conversation_filters_cleanup(void)
60 g_list_foreach(conv_filter_list, conversation_filter_free, NULL);
61 g_list_free(conv_filter_list);
64 gchar *conversation_filter_from_packet(struct _packet_info *pinfo)
66 const char *layers[] = { "tcp", "udp", "ip", "ipv6", "eth" };
67 conversation_filter_t *conv_filter;
71 for (i = 0; i < G_N_ELEMENTS(layers); i++) {
72 conv_filter = find_conversation_filter(layers[i]);
73 if (conv_filter && conv_filter->is_filter_valid(pinfo)) {
74 if ((filter = conv_filter->build_filter_string(pinfo)) != NULL)
83 * Editor modelines - http://www.wireshark.org/tools/modelines.html
88 * indent-tabs-mode: nil
91 * vi: set shiftwidth=4 tabstop=8 expandtab:
92 * :indentSize=4:tabSize=8:noTabs=true: