summaryrefslogtreecommitdiff
path: root/epan/plugin_if.h
diff options
context:
space:
mode:
Diffstat (limited to 'epan/plugin_if.h')
-rw-r--r--epan/plugin_if.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/epan/plugin_if.h b/epan/plugin_if.h
new file mode 100644
index 0000000000..df9ea6e846
--- /dev/null
+++ b/epan/plugin_if.h
@@ -0,0 +1,202 @@
+/* plugin_if.h
+ * An API for Wireshark plugins
+ *
+ * This enables wireshark dissectors, especially those implemented by plugins
+ * to register menubar entries, which then will call a pre-defined callback
+ * function for the dissector or plugin.
+ *
+ * Also it implements additional methods, which allow plugins to interoperate
+ * with the main GUI.
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * 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.
+ */
+#ifndef EPAN_PLUGIN_IF_H
+#define EPAN_PLUGIN_IF_H
+
+#include <config.h>
+
+#include "ws_symbol_export.h"
+
+#include <glib.h>
+#include <epan/epan.h>
+#include <epan/packet_info.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define EXT_MENUBAR_MAX_DEPTH 5
+
+typedef enum
+{
+ EXT_MENUBAR_GTK_GUI,
+ EXT_MENUBAR_QT_GUI
+} ext_menubar_gui_type;
+
+/* menubar callback */
+typedef void (*ext_menubar_action_cb)(ext_menubar_gui_type gui_type, gpointer gui_object, gpointer user_data);
+
+typedef enum
+{
+ EXT_MENUBAR_MENU,
+ EXT_MENUBAR_ITEM,
+ EXT_MENUBAR_SEPARATOR,
+ EXT_MENUBAR_URL
+} ext_menubar_entry_t;
+
+typedef struct _ext_menubar_t ext_menubar_t;
+typedef ext_menubar_t ext_menu_t;
+
+struct _ext_menubar_t
+{
+ ext_menubar_entry_t type;
+ ext_menu_t * parent;
+ int proto;
+ GList * children;
+ guint submenu_cnt;
+ guint item_cnt;
+
+ gchar * name;
+ gchar * label;
+
+ gchar * tooltip;
+ gboolean is_plugin;
+ gpointer user_data;
+
+ ext_menubar_action_cb callback;
+
+
+};
+
+/* Registers a new main menu.
+ *
+ * This will register a new main menu entry, underneath all other menu entries will
+ * be sorted
+ *
+ * @param proto_id the proto item for the protocol this menu entry belongs too
+ * @param name the entry name (the internal used one) for the menu item
+ * @param menulabel the entry label (the displayed name) for the menu item
+ * @param is_plugin must be set to TRUE for plugin registration
+ */
+WS_DLL_PUBLIC ext_menu_t * ext_menubar_register_menu(
+ int proto_id, const gchar * menulabel, gboolean is_plugin);
+
+/* Registers a new main menu.
+ *
+ * This will register a new sub menu entry, underneath the parent menu
+ *
+ * @param parent the parent menu for this submenu
+ * @param name the entry name (the internal used one) for the menu item
+ * @param menulabel the entry label (the displayed name) for the menu item
+ */
+WS_DLL_PUBLIC ext_menu_t * ext_menubar_add_submenu(
+ ext_menu_t * parent, const gchar *menulabel);
+
+/* Registers a new menubar entry.
+ *
+ * This registers a new menubar entry, which will have the given name, and
+ * call the provided callback on activation
+ *
+ * @param parent_menu the parent menu for this entry
+ * @param name the entry name (the internal used one) for the menu item
+ * @param label the entry label (the displayed name) for the menu item
+ * @param tooltip a tooltip to be displayed on mouse-over
+ * @param callback the action which will be invoked after click on the menu item
+ */
+WS_DLL_PUBLIC void ext_menubar_add_entry(
+ ext_menu_t * parent_menu,
+ const gchar *label,
+ const gchar *tooltip,
+ ext_menubar_action_cb callback,
+ gpointer user_data);
+
+/* Registers a new separator entry.
+ *
+ * @note This will not work using the legacy GTK interface, due to
+ * restrictions on how separators are handled in the menu
+ *
+ * @param parent_menu the parent menu for this entry
+ */
+WS_DLL_PUBLIC void ext_menubar_add_separator(ext_menu_t *parent_menu);
+
+/* Registers a entry for a website call
+ *
+ * This registers a new menubar entry, which will call the given website, using
+ * the predefined webbrowser
+ *
+ * @param parent_menu the parent menu for this entry
+ * @param name the entry name (the internal used one) for the menu item
+ * @param label the entry label (the displayed name) for the menu item
+ * @param tooltip a tooltip to be displayed on mouse-over
+ * @param url the url for the website
+ */
+WS_DLL_PUBLIC void ext_menubar_add_website(ext_menu_t * parent, const gchar *label,
+ const gchar *tooltip, const gchar *url);
+
+
+/*
+ * Enumeration of possible actions, which are registered in GUI interfaces
+ */
+typedef enum
+{
+ /* Applies a given string as filter */
+ PLUGIN_IF_FILTER_ACTION_APPLY,
+
+ /* Prepares the given string as filter */
+ PLUGIN_IF_FILTER_ACTION_PREPARE,
+
+ /* Saves a preference entry */
+ PLUGIN_IF_PREFERENCE_SAVE
+} plugin_if_callback_t;
+
+
+typedef void (*plugin_if_gui_cb)(gconstpointer user_data);
+
+WS_DLL_PUBLIC void plugin_if_register_gui_cb(plugin_if_callback_t actionType, plugin_if_gui_cb callback);
+
+/* Applies the given filter string as display filter */
+WS_DLL_PUBLIC void plugin_if_apply_filter(const char * filter_string, gboolean force);
+
+/* Saves the given preference to the main preference storage */
+WS_DLL_PUBLIC void plugin_if_save_preference(const char * pref_module, const char * pref_key, const char * pref_value);
+
+/* Private Method for retrieving the menubar entries
+ *
+ * Is only to be used by the UI interfaces to retrieve the menu entries
+ */
+WS_DLL_PUBLIC GList * ext_menubar_get_entries(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* EPAN_PLUGIN_IF_H */
+
+/*
+ * Editor modelines
+ *
+ * Local Variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */