1998-09-25 23:24:07 +00:00
|
|
|
/* prefs.c
|
|
|
|
* Routines for handling preferences
|
|
|
|
*
|
2004-07-18 00:24:25 +00:00
|
|
|
* $Id$
|
1998-09-25 23:24:07 +00:00
|
|
|
*
|
2006-05-21 05:12:17 +00:00
|
|
|
* Wireshark - Network traffic analyzer
|
|
|
|
* By Gerald Combs <gerald@wireshark.org>
|
1998-09-25 23:24:07 +00:00
|
|
|
* Copyright 1998 Gerald Combs
|
2002-08-28 21:04:11 +00:00
|
|
|
*
|
1998-09-25 23:24:07 +00:00
|
|
|
* 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.
|
2002-08-28 21:04:11 +00:00
|
|
|
*
|
1998-09-25 23:24:07 +00:00
|
|
|
* 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.
|
2002-08-28 21:04:11 +00:00
|
|
|
*
|
1998-09-25 23:24:07 +00:00
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2012-06-28 22:56:06 +00:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
1998-09-25 23:24:07 +00:00
|
|
|
*/
|
|
|
|
|
2012-09-20 01:48:30 +00:00
|
|
|
#include "config.h"
|
1998-09-25 23:24:07 +00:00
|
|
|
|
1998-12-17 05:42:33 +00:00
|
|
|
#include <stdlib.h>
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
#include <string.h>
|
1998-10-29 15:59:00 +00:00
|
|
|
#include <ctype.h>
|
|
|
|
#include <errno.h>
|
1999-07-13 02:53:26 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_UNISTD_H
|
1998-11-17 04:29:13 +00:00
|
|
|
#include <unistd.h>
|
1999-07-13 02:53:26 +00:00
|
|
|
#endif
|
|
|
|
|
2001-10-24 07:18:39 +00:00
|
|
|
#include <glib.h>
|
|
|
|
|
2009-08-26 19:27:49 +00:00
|
|
|
#include <stdio.h>
|
2002-01-21 07:37:49 +00:00
|
|
|
#include <epan/filesystem.h>
|
2004-12-30 02:10:24 +00:00
|
|
|
#include <epan/address.h>
|
2004-08-06 19:57:49 +00:00
|
|
|
#include <epan/addr_resolv.h>
|
2010-03-03 17:19:30 +00:00
|
|
|
#include <epan/oids.h>
|
2012-07-06 12:25:54 +00:00
|
|
|
#ifdef HAVE_GEOIP
|
2012-07-06 04:48:36 +00:00
|
|
|
#include <epan/geoip_db.h>
|
2012-07-06 12:25:54 +00:00
|
|
|
#endif
|
2002-01-21 07:37:49 +00:00
|
|
|
#include <epan/packet.h>
|
2004-09-27 22:55:15 +00:00
|
|
|
#include <epan/prefs.h>
|
2002-01-21 07:37:49 +00:00
|
|
|
#include <epan/proto.h>
|
2010-01-26 18:21:17 +00:00
|
|
|
#include <epan/strutil.h>
|
2004-09-29 02:54:22 +00:00
|
|
|
#include <epan/column.h>
|
1998-09-26 19:28:51 +00:00
|
|
|
#include "print.h"
|
2008-05-22 15:46:27 +00:00
|
|
|
#include <wsutil/file_util.h>
|
1998-10-28 21:38:11 +00:00
|
|
|
|
2004-10-01 08:33:53 +00:00
|
|
|
#include <epan/prefs-int.h>
|
2007-02-03 14:25:02 +00:00
|
|
|
#include <epan/uat-int.h>
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2011-09-08 09:35:10 +00:00
|
|
|
#include "epan/filter_expressions.h"
|
|
|
|
|
2012-10-27 20:29:12 +00:00
|
|
|
#include "epan/wmem/wmem.h"
|
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
/* Internal functions */
|
2007-11-30 09:22:01 +00:00
|
|
|
static module_t *find_subtree(module_t *parent, const char *tilte);
|
2002-12-20 01:48:57 +00:00
|
|
|
static module_t *prefs_register_module_or_subtree(module_t *parent,
|
2006-09-29 22:48:38 +00:00
|
|
|
const char *name, const char *title, const char *description, gboolean is_subtree,
|
2012-08-08 12:13:24 +00:00
|
|
|
void (*apply_cb)(void), gboolean use_gui);
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e set_pref(gchar*, const gchar*, void *, gboolean);
|
2013-01-05 02:30:58 +00:00
|
|
|
static char * join_string_list(GList *);
|
2012-08-08 16:54:02 +00:00
|
|
|
static void free_col_info(GList *);
|
|
|
|
static void pre_init_prefs(void);
|
|
|
|
static gboolean prefs_is_column_visible(const gchar *cols_hidden, fmt_data *cfmt);
|
|
|
|
static gboolean parse_column_format(fmt_data *cfmt, const char *fmt);
|
|
|
|
static void try_convert_to_custom_column(gpointer *el_data);
|
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
|
On Windows, use the directory in which the binary resides as the
directory in which global data files are stored. If an installed binary
is being run, that's the correct directory for them; if a build-tree
binary is being run, the "manuf" file will be there, and you can put
other data files there as well, if necessary.
Do the same with plugins, except that, if there's no
"plugins\\{version}" subdirectory of that directory, fall back on the
default installation directory, so you at least have a place where you
can put plugins for use by build-tree binaries. (Should we, instead,
have the Windows build procedure create a subdirectory of the "plugins"
source directory, with the plugin version number as its name, and copy
the plugins there, so you'd use the build-tree plugin binaries?)
Move "test_for_directory()" out of "util.c" and into
"epan/filesystem.c", with the other file system access portability
wrappers and convenience routines. Fix "util.h" not to declare it - or
other routines moved to "epan/filesystem.c" a while ago.
svn path=/trunk/; revision=3858
2001-08-21 06:39:18 +00:00
|
|
|
#define PF_NAME "preferences"
|
2006-05-28 19:49:07 +00:00
|
|
|
#define OLD_GPF_NAME "wireshark.conf" /* old name for global preferences file */
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2005-07-27 16:25:44 +00:00
|
|
|
static gboolean prefs_initialized = FALSE;
|
2012-08-08 16:54:02 +00:00
|
|
|
static gboolean prefs_pre_initialized = FALSE;
|
On Windows, use the directory in which the binary resides as the
directory in which global data files are stored. If an installed binary
is being run, that's the correct directory for them; if a build-tree
binary is being run, the "manuf" file will be there, and you can put
other data files there as well, if necessary.
Do the same with plugins, except that, if there's no
"plugins\\{version}" subdirectory of that directory, fall back on the
default installation directory, so you at least have a place where you
can put plugins for use by build-tree binaries. (Should we, instead,
have the Windows build procedure create a subdirectory of the "plugins"
source directory, with the plugin version number as its name, and copy
the plugins there, so you'd use the build-tree plugin binaries?)
Move "test_for_directory()" out of "util.c" and into
"epan/filesystem.c", with the other file system access portability
wrappers and convenience routines. Fix "util.h" not to declare it - or
other routines moved to "epan/filesystem.c" a while ago.
svn path=/trunk/; revision=3858
2001-08-21 06:39:18 +00:00
|
|
|
static gchar *gpf_path = NULL;
|
2010-06-20 16:23:43 +00:00
|
|
|
static gchar *cols_hidden_list = NULL;
|
1998-09-25 23:24:07 +00:00
|
|
|
|
2001-01-05 22:45:26 +00:00
|
|
|
/*
|
|
|
|
* XXX - variables to allow us to attempt to interpret the first
|
|
|
|
* "mgcp.{tcp,udp}.port" in a preferences file as
|
|
|
|
* "mgcp.{tcp,udp}.gateway_port" and the second as
|
2001-10-16 07:35:11 +00:00
|
|
|
* "mgcp.{tcp,udp}.callagent_port".
|
2001-01-05 22:45:26 +00:00
|
|
|
*/
|
|
|
|
static int mgcp_tcp_port_count;
|
|
|
|
static int mgcp_udp_port_count;
|
|
|
|
|
1999-12-29 05:53:48 +00:00
|
|
|
e_prefs prefs;
|
1999-12-30 23:02:56 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
static enum_val_t gui_ptree_line_style[] = {
|
|
|
|
{"NONE", "NONE", 0},
|
|
|
|
{"SOLID", "SOLID", 1},
|
|
|
|
{"DOTTED", "DOTTED", 2},
|
|
|
|
{"TABBED", "TABBED", 3},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_ptree_expander_style[] = {
|
|
|
|
{"NONE", "NONE", 0},
|
|
|
|
{"SQUARE", "SQUARE", 1},
|
|
|
|
{"TRIANGLE", "TRIANGLE", 2},
|
|
|
|
{"CIRCULAR", "CIRCULAR", 3},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_hex_dump_highlight_style[] = {
|
|
|
|
{"BOLD", "BOLD", 0},
|
|
|
|
{"INVERSE", "INVERSE", 1},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_console_open_type[] = {
|
|
|
|
{"NEVER", "NEVER", console_open_never},
|
|
|
|
{"AUTOMATIC", "AUTOMATIC", console_open_auto},
|
|
|
|
{"ALWAYS", "ALWAYS", console_open_always},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_version_placement_type[] = {
|
|
|
|
{"WELCOME", "WELCOME", version_welcome_only},
|
|
|
|
{"TITLE", "TITLE", version_title_only},
|
|
|
|
{"BOTH", "BOTH", version_both},
|
|
|
|
{"NEITHER", "NEITHER", version_neither},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_fileopen_style[] = {
|
|
|
|
{"LAST_OPENED", "LAST_OPENED", 0},
|
|
|
|
{"SPECIFIED", "SPECIFIED", 1},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
2003-10-14 23:20:17 +00:00
|
|
|
|
2003-10-16 21:19:12 +00:00
|
|
|
/* GTK knows of two ways representing "both", vertical and horizontal aligned.
|
|
|
|
* as this may not work on other guis, we use only "both" in general here */
|
2012-08-08 16:54:02 +00:00
|
|
|
static enum_val_t gui_toolbar_style[] = {
|
|
|
|
{"ICONS", "ICONS", 0},
|
|
|
|
{"TEXT", "TEXT", 1},
|
|
|
|
{"BOTH", "BOTH", 2},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum_val_t gui_layout_content[] = {
|
|
|
|
{"NONE", "NONE", 0},
|
|
|
|
{"PLIST", "PLIST", 1},
|
|
|
|
{"PDETAILS", "PDETAILS", 2},
|
|
|
|
{"PBYTES", "PBYTES", 3},
|
|
|
|
{NULL, NULL, -1}
|
|
|
|
};
|
2004-04-29 17:03:27 +00:00
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
2002-12-20 01:48:57 +00:00
|
|
|
* List of all modules with preference settings.
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
2007-12-04 03:28:04 +00:00
|
|
|
static emem_tree_t *prefs_modules = NULL;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2002-12-20 01:48:57 +00:00
|
|
|
/*
|
|
|
|
* List of all modules that should show up at the top level of the
|
|
|
|
* tree in the preference dialog box.
|
|
|
|
*/
|
2007-12-04 03:28:04 +00:00
|
|
|
static emem_tree_t *prefs_top_level_modules = NULL;
|
2007-11-30 11:12:55 +00:00
|
|
|
|
2007-11-30 09:22:01 +00:00
|
|
|
/** Sets up memory used by proto routines. Called at program startup */
|
2010-08-21 04:26:26 +00:00
|
|
|
void
|
|
|
|
prefs_init(void)
|
2001-10-21 17:30:50 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
prefs_modules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_modules");
|
|
|
|
prefs_top_level_modules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_top_level_modules");
|
2010-08-21 04:26:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
free_pref(gpointer data, gpointer user_data _U_)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *pref = data;
|
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
case PREF_OBSOLETE:
|
|
|
|
case PREF_BOOL:
|
|
|
|
case PREF_ENUM:
|
|
|
|
case PREF_UINT:
|
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
case PREF_UAT:
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_COLOR:
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
case PREF_STRING:
|
|
|
|
case PREF_FILENAME:
|
|
|
|
g_free((char *)*pref->varp.string);
|
|
|
|
*pref->varp.string = NULL;
|
|
|
|
g_free(pref->default_val.string);
|
2012-12-29 01:39:02 +00:00
|
|
|
pref->default_val.string = NULL;
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
case PREF_RANGE:
|
|
|
|
g_free(*pref->varp.range);
|
|
|
|
*pref->varp.range = NULL;
|
|
|
|
g_free(pref->default_val.range);
|
2012-12-29 01:39:02 +00:00
|
|
|
pref->default_val.range = NULL;
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_CUSTOM:
|
|
|
|
pref->custom_cbs.free_cb(pref);
|
|
|
|
break;
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
g_free(pref);
|
2010-08-21 04:26:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static guint
|
|
|
|
free_module_prefs(module_t *module, gpointer data _U_)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
g_list_foreach(module->prefs, free_pref, NULL);
|
|
|
|
g_list_free(module->prefs);
|
|
|
|
module->prefs = NULL;
|
|
|
|
module->numprefs = 0;
|
|
|
|
/* We don't free the actual module: its submodules pointer points to
|
|
|
|
a pe_tree and the module itself is stored in a pe_tree
|
|
|
|
*/
|
|
|
|
|
|
|
|
return 0;
|
2001-10-21 17:30:50 +00:00
|
|
|
}
|
|
|
|
|
2007-11-30 09:22:01 +00:00
|
|
|
/** Frees memory used by proto routines. Called at program shutdown */
|
2010-08-21 04:26:26 +00:00
|
|
|
void
|
|
|
|
prefs_cleanup(void)
|
2002-12-20 01:48:57 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
/* This isn't strictly necessary since we're exiting anyway, but let's
|
|
|
|
* do what clean up we can.
|
|
|
|
*/
|
|
|
|
prefs_modules_foreach(free_module_prefs, NULL);
|
2002-12-20 01:48:57 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Register a module that will have preferences.
|
2002-12-20 01:48:57 +00:00
|
|
|
* Specify the module under which to register it or NULL to register it
|
|
|
|
* at the top level, the name used for the module in the preferences file,
|
|
|
|
* the title used in the tab for it in a preferences dialog box, and a
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
* routine to call back when we apply the preferences.
|
|
|
|
*/
|
2006-11-17 07:44:37 +00:00
|
|
|
module_t *
|
2002-12-20 01:48:57 +00:00
|
|
|
prefs_register_module(module_t *parent, const char *name, const char *title,
|
2012-09-27 16:23:06 +00:00
|
|
|
const char *description, void (*apply_cb)(void),
|
2012-08-08 12:13:24 +00:00
|
|
|
const gboolean use_gui)
|
2002-12-20 01:48:57 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return prefs_register_module_or_subtree(parent, name, title, description,
|
2012-08-08 12:13:24 +00:00
|
|
|
FALSE, apply_cb, use_gui);
|
2002-12-20 01:48:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Register a subtree that will have modules under it.
|
|
|
|
* Specify the module under which to register it or NULL to register it
|
|
|
|
* at the top level and the title used in the tab for it in a preferences
|
|
|
|
* dialog box.
|
|
|
|
*/
|
|
|
|
module_t *
|
2012-08-08 12:13:24 +00:00
|
|
|
prefs_register_subtree(module_t *parent, const char *title, const char *description,
|
|
|
|
void (*apply_cb)(void))
|
2002-12-20 01:48:57 +00:00
|
|
|
{
|
2012-08-08 12:13:24 +00:00
|
|
|
return prefs_register_module_or_subtree(parent, NULL, title, description,
|
2012-09-27 16:23:06 +00:00
|
|
|
TRUE, apply_cb,
|
2012-08-08 12:13:24 +00:00
|
|
|
parent ? parent->use_gui : FALSE);
|
2002-12-20 01:48:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static module_t *
|
|
|
|
prefs_register_module_or_subtree(module_t *parent, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
2012-08-08 12:13:24 +00:00
|
|
|
gboolean is_subtree, void (*apply_cb)(void),
|
|
|
|
gboolean use_gui)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *module;
|
|
|
|
const char *p;
|
|
|
|
guchar c;
|
|
|
|
|
|
|
|
/* this module may have been created as a subtree item previously */
|
|
|
|
if((module = find_subtree(parent, title))) {
|
|
|
|
/* the module is currently a subtree */
|
|
|
|
module->name = name;
|
|
|
|
module->apply_cb = apply_cb;
|
|
|
|
module->description = description;
|
|
|
|
|
|
|
|
if (prefs_find_module(name) == NULL) {
|
|
|
|
pe_tree_insert_string(prefs_modules, name, module,
|
|
|
|
EMEM_TREE_STRING_NOCASE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return module;
|
|
|
|
}
|
|
|
|
|
|
|
|
module = g_malloc(sizeof (module_t));
|
|
|
|
module->name = name;
|
|
|
|
module->title = title;
|
|
|
|
module->description = description;
|
|
|
|
module->apply_cb = apply_cb;
|
|
|
|
module->prefs = NULL; /* no preferences, to start */
|
2012-06-25 21:05:36 +00:00
|
|
|
module->parent = parent;
|
2012-07-07 00:30:47 +00:00
|
|
|
module->submodules = NULL; /* no submodules, to start */
|
|
|
|
module->numprefs = 0;
|
|
|
|
module->prefs_changed = FALSE;
|
|
|
|
module->obsolete = FALSE;
|
2012-08-08 12:13:24 +00:00
|
|
|
module->use_gui = use_gui;
|
2012-07-07 00:30:47 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Do we have a module name?
|
|
|
|
*/
|
|
|
|
if (name != NULL) {
|
|
|
|
/*
|
|
|
|
* Yes.
|
|
|
|
* Make sure that only lower-case ASCII letters, numbers,
|
|
|
|
* underscores, hyphens, and dots appear in the name.
|
|
|
|
*
|
|
|
|
* Crash if there is, as that's an error in the code;
|
|
|
|
* you can make the title a nice string with capitalization,
|
|
|
|
* white space, punctuation, etc., but the name can be used
|
|
|
|
* on the command line, and shouldn't require quoting,
|
|
|
|
* shifting, etc.
|
|
|
|
*/
|
|
|
|
for (p = name; (c = *p) != '\0'; p++)
|
|
|
|
g_assert(isascii(c) &&
|
|
|
|
(islower(c) || isdigit(c) || c == '_' ||
|
|
|
|
c == '-' || c == '.'));
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Make sure there's not already a module with that
|
|
|
|
* name. Crash if there is, as that's an error in the
|
|
|
|
* code, and the code has to be fixed not to register
|
|
|
|
* more than one module with the same name.
|
|
|
|
*
|
|
|
|
* We search the list of all modules; the subtree stuff
|
|
|
|
* doesn't require preferences in subtrees to have names
|
|
|
|
* that reflect the subtree they're in (that would require
|
|
|
|
* protocol preferences to have a bogus "protocol.", or
|
|
|
|
* something such as that, to be added to all their names).
|
|
|
|
*/
|
|
|
|
g_assert(prefs_find_module(name) == NULL);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Insert this module in the list of all modules.
|
|
|
|
*/
|
|
|
|
pe_tree_insert_string(prefs_modules, name, module, EMEM_TREE_STRING_NOCASE);
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* This has no name, just a title; check to make sure it's a
|
|
|
|
* subtree, and crash if it's not.
|
|
|
|
*/
|
|
|
|
g_assert(is_subtree);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Insert this module into the appropriate place in the display
|
|
|
|
* tree.
|
|
|
|
*/
|
|
|
|
if (parent == NULL) {
|
|
|
|
/*
|
|
|
|
* It goes at the top.
|
|
|
|
*/
|
|
|
|
pe_tree_insert_string(prefs_top_level_modules, title, module, EMEM_TREE_STRING_NOCASE);
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* It goes into the list for this module.
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (parent->submodules == NULL)
|
|
|
|
parent->submodules = pe_tree_create(EMEM_TREE_TYPE_RED_BLACK, "prefs_submodules");
|
|
|
|
|
|
|
|
pe_tree_insert_string(parent->submodules, title, module, EMEM_TREE_STRING_NOCASE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return module;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2001-01-03 07:53:48 +00:00
|
|
|
/*
|
|
|
|
* Register that a protocol has preferences.
|
|
|
|
*/
|
2012-07-06 04:48:36 +00:00
|
|
|
module_t *protocols_module = NULL;
|
2002-12-20 01:48:57 +00:00
|
|
|
|
2001-01-03 07:53:48 +00:00
|
|
|
module_t *
|
|
|
|
prefs_register_protocol(int id, void (*apply_cb)(void))
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
protocol_t *protocol;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Have we yet created the "Protocols" subtree?
|
|
|
|
*/
|
|
|
|
if (protocols_module == NULL) {
|
|
|
|
/*
|
|
|
|
* No. Register Protocols subtree as well as any preferences
|
2012-06-25 21:05:36 +00:00
|
|
|
* for non-dissector modules.
|
2012-07-07 00:30:47 +00:00
|
|
|
*/
|
2012-06-25 21:05:36 +00:00
|
|
|
prefs_register_modules();
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
|
|
|
protocol = find_protocol_by_id(id);
|
|
|
|
return prefs_register_module(protocols_module,
|
|
|
|
proto_get_protocol_filter_name(id),
|
|
|
|
proto_get_protocol_short_name(protocol),
|
2012-08-08 12:13:24 +00:00
|
|
|
proto_get_protocol_name(id), apply_cb, TRUE);
|
2001-01-03 07:53:48 +00:00
|
|
|
}
|
|
|
|
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
module_t *
|
|
|
|
prefs_register_protocol_subtree(const char *subtree, int id, void (*apply_cb)(void))
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
protocol_t *protocol;
|
|
|
|
module_t *subtree_module;
|
|
|
|
module_t *new_module;
|
2012-10-27 20:41:58 +00:00
|
|
|
char *sep = NULL, *ptr = NULL, *orig = NULL;
|
2012-07-07 00:30:47 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Have we yet created the "Protocols" subtree?
|
2012-07-07 02:10:44 +00:00
|
|
|
* XXX - can we just do this by registering Protocols/{subtree}?
|
|
|
|
* If not, why not?
|
2012-07-07 00:30:47 +00:00
|
|
|
*/
|
|
|
|
if (protocols_module == NULL) {
|
|
|
|
/*
|
|
|
|
* No. Register Protocols subtree as well as any preferences
|
2012-06-25 21:05:36 +00:00
|
|
|
* for non-dissector modules.
|
2012-07-07 00:30:47 +00:00
|
|
|
*/
|
2012-06-25 21:05:36 +00:00
|
|
|
prefs_register_modules();
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
subtree_module = protocols_module;
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if(subtree) {
|
2012-10-27 20:41:58 +00:00
|
|
|
/* take a copy of the buffer, orig keeps a base pointer while ptr
|
|
|
|
* walks through the string */
|
|
|
|
orig = ptr = g_strdup(subtree);
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
while(ptr && *ptr) {
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if((sep = strchr(ptr, '/')))
|
|
|
|
*sep++ = '\0';
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if(!(new_module = find_subtree(subtree_module, ptr))) {
|
2012-07-07 02:49:17 +00:00
|
|
|
/*
|
|
|
|
* There's no such module; create it, with the description
|
|
|
|
* being the name (if it's later registered explicitly
|
|
|
|
* with a description, that will override it).
|
|
|
|
*/
|
2012-11-03 15:08:00 +00:00
|
|
|
ptr = wmem_strdup(wmem_epan_scope(), ptr),
|
2012-08-08 12:13:24 +00:00
|
|
|
new_module = prefs_register_subtree(subtree_module, ptr, ptr, NULL);
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
subtree_module = new_module;
|
|
|
|
ptr = sep;
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2012-10-27 20:41:58 +00:00
|
|
|
|
|
|
|
g_free(orig);
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
protocol = find_protocol_by_id(id);
|
|
|
|
return prefs_register_module(subtree_module,
|
|
|
|
proto_get_protocol_filter_name(id),
|
|
|
|
proto_get_protocol_short_name(protocol),
|
2012-08-08 12:13:24 +00:00
|
|
|
proto_get_protocol_name(id), apply_cb, TRUE);
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-05-11 18:58:02 +00:00
|
|
|
/*
|
|
|
|
* Register that a protocol used to have preferences but no longer does,
|
|
|
|
* by creating an "obsolete" module for it.
|
|
|
|
*/
|
|
|
|
module_t *
|
|
|
|
prefs_register_protocol_obsolete(int id)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *module;
|
|
|
|
protocol_t *protocol;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Have we yet created the "Protocols" subtree?
|
|
|
|
*/
|
|
|
|
if (protocols_module == NULL) {
|
|
|
|
/*
|
|
|
|
* No. Register Protocols subtree as well as any preferences
|
2012-06-25 21:05:36 +00:00
|
|
|
* for non-dissector modules.
|
2012-07-07 00:30:47 +00:00
|
|
|
*/
|
2012-06-25 21:05:36 +00:00
|
|
|
prefs_register_modules();
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
|
|
|
protocol = find_protocol_by_id(id);
|
|
|
|
module = prefs_register_module(protocols_module,
|
|
|
|
proto_get_protocol_filter_name(id),
|
|
|
|
proto_get_protocol_short_name(protocol),
|
2012-08-08 12:13:24 +00:00
|
|
|
proto_get_protocol_name(id), NULL, TRUE);
|
2012-07-07 00:30:47 +00:00
|
|
|
module->obsolete = TRUE;
|
|
|
|
return module;
|
2002-05-11 18:58:02 +00:00
|
|
|
}
|
|
|
|
|
2012-07-07 08:15:41 +00:00
|
|
|
/*
|
|
|
|
* Register that a statistical tap has preferences.
|
|
|
|
*
|
|
|
|
* "name" is a name for the tap to use on the command line with "-o"
|
|
|
|
* and in preference files.
|
|
|
|
*
|
|
|
|
* "title" is a short human-readable name for the tap.
|
|
|
|
*
|
|
|
|
* "description" is a longer human-readable description of the tap.
|
|
|
|
*/
|
|
|
|
module_t *stats_module = NULL;
|
|
|
|
|
|
|
|
module_t *
|
|
|
|
prefs_register_stat(const char *name, const char *title,
|
|
|
|
const char *description, void (*apply_cb)(void))
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Have we yet created the "Statistics" subtree?
|
|
|
|
*/
|
|
|
|
if (stats_module == NULL) {
|
|
|
|
/*
|
|
|
|
* No. Register Statistics subtree as well as any preferences
|
|
|
|
* for non-dissector modules.
|
|
|
|
*/
|
|
|
|
prefs_register_modules();
|
|
|
|
}
|
|
|
|
|
|
|
|
return prefs_register_module(stats_module, name, title, description,
|
2012-08-08 12:13:24 +00:00
|
|
|
apply_cb, TRUE);
|
2012-07-07 08:15:41 +00:00
|
|
|
}
|
|
|
|
|
2006-10-10 00:28:53 +00:00
|
|
|
module_t *
|
|
|
|
prefs_find_module(const char *name)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return pe_tree_lookup_string(prefs_modules, name, EMEM_TREE_STRING_NOCASE);
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static module_t *
|
|
|
|
find_subtree(module_t *parent, const char *name)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return pe_tree_lookup_string(parent ? parent->submodules : prefs_top_level_modules, name, EMEM_TREE_STRING_NOCASE);
|
This change allows a structure to be created under the "Protocols" section of the preferences.
A new function is introduced, prefs_register_protocol_subtree(), that allows the subtree the protocol should appear under to be specified. The subtree is specified as a string, with a '/' delimiting each subtree element. For example,
prefs_register_protocol(proto_dap, prefs_register_dap);
becomes
prefs_register_protocol_subtree("OSI/X.500", proto_dap, prefs_register_dap);
The function will create all the intermediate subtree nodes that are required, if they don't already exist.
This allows the grouping of procotols which should make the list of protocols more manageable as even more are added. The current aim is to group by protocol family e.g.
+ OSI
+ X.400
X.411
X.420
+ X.500
DISP
DAP
DOP
DSP
+ X.509
X509AF
X509CE
...
but others grouping could be envisioned (e.g. by first letter).
As the intermediate nodes may already have preferences (e.g. OSI), then modules are now allowed to have submodules. Previously each node was either a subtree or held preferences. This is consistent with the "User Interface" node.
The subtree structure has no effect on how the preferences are saved to file, and the "Protocol Preferences..." menu option will bring up the preferences expanded to the correct node.
In addition, a new "blank page" has been introduced for intermediate nodes that have no preferences (and is also used when the "Protocols" node itself is chosen). This prevents confusion when the user moves from a node with preferences to a node without preferences, but the page old page is still shown.
There is also a change to prevent '#' characters in a value being treated as a comment when parsing the preferences file. (There is nothing that adds comments when writing the preferences file.)
svn path=/trunk/; revision=21066
2007-03-19 19:08:22 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
2002-12-20 01:48:57 +00:00
|
|
|
* Call a callback function, with a specified argument, for each module
|
|
|
|
* in a list of modules. If the list is NULL, searches the top-level
|
2004-10-12 03:13:17 +00:00
|
|
|
* list in the display tree of modules. If any callback returns a
|
|
|
|
* non-zero value, we stop and return that value, otherwise we
|
|
|
|
* return 0.
|
2002-12-20 01:48:57 +00:00
|
|
|
*
|
2002-05-11 18:58:02 +00:00
|
|
|
* Ignores "obsolete" modules; their sole purpose is to allow old
|
|
|
|
* preferences for dissectors that no longer have preferences to be
|
2002-12-20 01:48:57 +00:00
|
|
|
* silently ignored in preference files. Does not ignore subtrees,
|
|
|
|
* as this can be used when walking the display tree of modules.
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
2007-11-30 09:22:01 +00:00
|
|
|
|
|
|
|
typedef struct {
|
2012-07-07 00:30:47 +00:00
|
|
|
module_cb callback;
|
|
|
|
gpointer user_data;
|
|
|
|
guint ret;
|
2007-11-30 09:22:01 +00:00
|
|
|
} call_foreach_t;
|
|
|
|
|
|
|
|
static gboolean
|
2007-12-04 03:28:04 +00:00
|
|
|
call_foreach_cb(void *value, void *data)
|
2007-11-30 09:22:01 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *module = (module_t*)value;
|
|
|
|
call_foreach_t *call_data = (call_foreach_t*)data;
|
2007-11-30 09:22:01 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if (!module->obsolete) {
|
|
|
|
call_data->ret = (*call_data->callback)(module, call_data->user_data);
|
|
|
|
}
|
|
|
|
return (call_data->ret != 0);
|
2007-11-30 09:22:01 +00:00
|
|
|
}
|
|
|
|
|
2007-11-29 07:52:52 +00:00
|
|
|
static guint
|
2007-12-04 03:28:04 +00:00
|
|
|
prefs_module_list_foreach(emem_tree_t *module_list, module_cb callback,
|
2012-07-07 00:30:47 +00:00
|
|
|
gpointer user_data)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
call_foreach_t call_data;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if (module_list == NULL)
|
|
|
|
module_list = prefs_top_level_modules;
|
2002-12-20 01:48:57 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
call_data.callback = callback;
|
|
|
|
call_data.user_data = user_data;
|
|
|
|
call_data.ret = 0;
|
|
|
|
pe_tree_foreach(module_list, call_foreach_cb, &call_data);
|
|
|
|
return call_data.ret;
|
2002-12-20 01:48:57 +00:00
|
|
|
}
|
|
|
|
|
2007-11-29 07:52:52 +00:00
|
|
|
/*
|
|
|
|
* Returns TRUE if module has any submodules
|
|
|
|
*/
|
2010-08-21 04:26:26 +00:00
|
|
|
gboolean
|
|
|
|
prefs_module_has_submodules(module_t *module)
|
2007-11-29 07:52:52 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
if (module->submodules == NULL) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
2007-12-04 03:28:04 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if (module->submodules->tree == NULL) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
2007-12-04 03:28:04 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
return TRUE;
|
2007-11-29 07:52:52 +00:00
|
|
|
}
|
|
|
|
|
2002-12-20 01:48:57 +00:00
|
|
|
/*
|
|
|
|
* Call a callback function, with a specified argument, for each module
|
|
|
|
* in the list of all modules. (This list does not include subtrees.)
|
|
|
|
*
|
|
|
|
* Ignores "obsolete" modules; their sole purpose is to allow old
|
|
|
|
* preferences for dissectors that no longer have preferences to be
|
|
|
|
* silently ignored in preference files.
|
|
|
|
*/
|
2004-10-12 03:13:17 +00:00
|
|
|
guint
|
2002-12-20 01:48:57 +00:00
|
|
|
prefs_modules_foreach(module_cb callback, gpointer user_data)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return prefs_module_list_foreach(prefs_modules, callback, user_data);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2007-11-29 07:52:52 +00:00
|
|
|
/*
|
|
|
|
* Call a callback function, with a specified argument, for each submodule
|
|
|
|
* of specified modules. If the module is NULL, goes through the top-level
|
|
|
|
* list in the display tree of modules.
|
|
|
|
*
|
|
|
|
* Ignores "obsolete" modules; their sole purpose is to allow old
|
|
|
|
* preferences for dissectors that no longer have preferences to be
|
|
|
|
* silently ignored in preference files. Does not ignore subtrees,
|
|
|
|
* as this can be used when walking the display tree of modules.
|
|
|
|
*/
|
2008-02-15 22:36:24 +00:00
|
|
|
guint
|
2010-05-26 01:51:41 +00:00
|
|
|
prefs_modules_foreach_submodules(module_t *module, module_cb callback,
|
2012-07-07 00:30:47 +00:00
|
|
|
gpointer user_data)
|
2007-11-29 07:52:52 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return prefs_module_list_foreach((module)?module->submodules:prefs_top_level_modules, callback, user_data);
|
2007-11-29 07:52:52 +00:00
|
|
|
}
|
|
|
|
|
2007-11-30 09:22:01 +00:00
|
|
|
static gboolean
|
2007-12-04 03:28:04 +00:00
|
|
|
call_apply_cb(void *value, void *data _U_)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *module = value;
|
|
|
|
|
|
|
|
if (module->obsolete)
|
|
|
|
return FALSE;
|
|
|
|
if (module->prefs_changed) {
|
|
|
|
if (module->apply_cb != NULL)
|
|
|
|
(*module->apply_cb)();
|
|
|
|
module->prefs_changed = FALSE;
|
|
|
|
}
|
|
|
|
return FALSE;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2000-07-09 03:29:42 +00:00
|
|
|
* Call the "apply" callback function for each module if any of its
|
|
|
|
* preferences have changed, and then clear the flag saying its
|
|
|
|
* preferences have changed, as the module has been notified of that
|
|
|
|
* fact.
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_apply_all(void)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pe_tree_foreach(prefs_modules, call_apply_cb, NULL);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2006-10-11 00:37:29 +00:00
|
|
|
/*
|
|
|
|
* Call the "apply" callback function for a specific module if any of
|
|
|
|
* its preferences have changed, and then clear the flag saying its
|
|
|
|
* preferences have changed, as the module has been notified of that
|
|
|
|
* fact.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_apply(module_t *module)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
if (module && module->prefs_changed)
|
|
|
|
call_apply_cb(module, NULL);
|
2006-10-11 00:37:29 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Register a preference in a module's list of preferences.
|
2002-05-25 01:47:46 +00:00
|
|
|
* If it has a title, give it an ordinal number; otherwise, it's a
|
|
|
|
* preference that won't show up in the UI, so it shouldn't get an
|
|
|
|
* ordinal number (the ordinal should be the ordinal in the set of
|
|
|
|
* *visible* preferences).
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
|
|
|
static pref_t *
|
|
|
|
register_preference(module_t *module, const char *name, const char *title,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *description, pref_type_t type)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
|
|
|
const gchar *p;
|
|
|
|
|
|
|
|
preference = g_malloc(sizeof (pref_t));
|
|
|
|
preference->name = name;
|
|
|
|
preference->title = title;
|
|
|
|
preference->description = description;
|
|
|
|
preference->type = type;
|
|
|
|
if (title != NULL)
|
|
|
|
preference->ordinal = module->numprefs;
|
|
|
|
else
|
|
|
|
preference->ordinal = -1; /* no ordinal for you */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Make sure that only lower-case ASCII letters, numbers,
|
|
|
|
* underscores, and dots appear in the preference name.
|
|
|
|
*
|
|
|
|
* Crash if there is, as that's an error in the code;
|
|
|
|
* you can make the title and description nice strings
|
|
|
|
* with capitalization, white space, punctuation, etc.,
|
|
|
|
* but the name can be used on the command line,
|
|
|
|
* and shouldn't require quoting, shifting, etc.
|
|
|
|
*/
|
|
|
|
for (p = name; *p != '\0'; p++)
|
|
|
|
if (!(isascii((guchar)*p) &&
|
|
|
|
(islower((guchar)*p) || isdigit((guchar)*p) || *p == '_' || *p == '.')))
|
|
|
|
g_error("Preference %s.%s contains invalid characters", module->name, name);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Make sure there's not already a preference with that
|
|
|
|
* name. Crash if there is, as that's an error in the
|
|
|
|
* code, and the code has to be fixed not to register
|
|
|
|
* more than one preference with the same name.
|
|
|
|
*/
|
|
|
|
if (prefs_find_preference(module, name) != NULL)
|
|
|
|
g_error("Preference %s has already been registered", name);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
if ((type != PREF_OBSOLETE) &&
|
2012-08-08 12:13:24 +00:00
|
|
|
/* Don't compare if its a subtree */
|
|
|
|
(module->name != NULL)) {
|
2012-07-07 00:30:47 +00:00
|
|
|
/*
|
|
|
|
* Make sure the preference name doesn't begin with the
|
|
|
|
* module name, as that's redundant and Just Silly.
|
|
|
|
*/
|
|
|
|
if(!((strncmp(name, module->name, strlen(module->name)) != 0) ||
|
|
|
|
(((name[strlen(module->name)]) != '.') && ((name[strlen(module->name)]) != '_'))))
|
|
|
|
g_error("Preference %s begins with the module name", name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* There isn't already one with that name, so add the
|
|
|
|
* preference.
|
|
|
|
*/
|
|
|
|
module->prefs = g_list_append(module->prefs, preference);
|
|
|
|
if (title != NULL)
|
|
|
|
module->numprefs++;
|
|
|
|
|
|
|
|
return preference;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Find a preference in a module's list of preferences, given the module
|
|
|
|
* and the preference's name.
|
|
|
|
*/
|
2012-08-08 12:13:24 +00:00
|
|
|
typedef struct {
|
|
|
|
GList *list_entry;
|
|
|
|
const char *name;
|
|
|
|
} find_pref_arg_t;
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
static gint
|
|
|
|
preference_match(gconstpointer a, gconstpointer b)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
const pref_t *pref = a;
|
|
|
|
const char *name = b;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
return strcmp(name, pref->name);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
static gboolean module_find_pref_cb(void *value, void *data)
|
|
|
|
{
|
|
|
|
find_pref_arg_t* arg = (find_pref_arg_t*)data;
|
|
|
|
GList *list_entry;
|
|
|
|
module_t *module = value;
|
|
|
|
|
|
|
|
if (module == NULL)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
list_entry = g_list_find_custom(module->prefs, arg->name,
|
|
|
|
preference_match);
|
|
|
|
|
|
|
|
if (list_entry == NULL)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
arg->list_entry = list_entry;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2009-01-06 14:34:18 +00:00
|
|
|
struct preference *
|
|
|
|
prefs_find_preference(module_t *module, const char *name)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-08-08 12:13:24 +00:00
|
|
|
find_pref_arg_t arg;
|
2012-07-07 00:30:47 +00:00
|
|
|
GList *list_entry;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if (module == NULL)
|
|
|
|
return NULL; /* invalid parameters */
|
2011-08-14 20:31:16 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
list_entry = g_list_find_custom(module->prefs, name,
|
|
|
|
preference_match);
|
2008-04-07 05:22:54 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
if (list_entry == NULL)
|
2012-08-08 12:13:24 +00:00
|
|
|
{
|
|
|
|
arg.list_entry = NULL;
|
|
|
|
if (module->submodules != NULL)
|
|
|
|
{
|
|
|
|
arg.name = name;
|
|
|
|
pe_tree_foreach(module->submodules, module_find_pref_cb, &arg);
|
|
|
|
}
|
|
|
|
|
|
|
|
list_entry = arg.list_entry;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (list_entry == NULL)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
return NULL; /* no such preference */
|
2012-08-08 12:13:24 +00:00
|
|
|
}
|
2011-08-14 20:31:16 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
return (struct preference *) list_entry->data;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2000-08-15 20:46:17 +00:00
|
|
|
/*
|
|
|
|
* Returns TRUE if the given protocol has registered preferences
|
|
|
|
*/
|
|
|
|
gboolean
|
2005-06-24 01:32:42 +00:00
|
|
|
prefs_is_registered_protocol(const char *name)
|
2000-08-15 20:46:17 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *m = prefs_find_module(name);
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
return (m != NULL && !m->obsolete);
|
2000-08-15 20:46:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Returns the module title of a registered protocol
|
|
|
|
*/
|
2000-08-15 20:53:31 +00:00
|
|
|
const char *
|
2005-06-24 01:32:42 +00:00
|
|
|
prefs_get_title_by_name(const char *name)
|
2000-08-15 20:46:17 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *m = prefs_find_module(name);
|
2002-05-11 18:58:02 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
return (m != NULL && !m->obsolete) ? m->title : NULL;
|
2000-08-15 20:46:17 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Register a preference with an unsigned integral value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_uint_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
guint base, guint *var)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
|
|
|
|
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
PREF_UINT);
|
|
|
|
preference->varp.uint = var;
|
|
|
|
preference->default_val.uint = *var;
|
|
|
|
g_assert(base > 0 && base != 1 && base < 37);
|
|
|
|
preference->info.base = base;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2013-01-07 19:13:03 +00:00
|
|
|
/*
|
|
|
|
* XXX Add a prefs_register_{uint16|port}_preference which sets max_value?
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
/*
|
|
|
|
* Register a "custom" preference with a unsigned integral value.
|
|
|
|
* XXX - This should be temporary until we can find a better way
|
|
|
|
* to do "custom" preferences
|
|
|
|
*/
|
2012-09-27 16:23:06 +00:00
|
|
|
static void
|
2012-08-08 20:47:20 +00:00
|
|
|
prefs_register_uint_custom_preference(module_t *module, const char *name,
|
|
|
|
const char *title, const char *description,
|
|
|
|
struct pref_custom_cbs* custom_cbs, guint *var)
|
|
|
|
{
|
|
|
|
pref_t *preference;
|
|
|
|
|
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
PREF_CUSTOM);
|
|
|
|
|
|
|
|
preference->custom_cbs = *custom_cbs;
|
|
|
|
preference->varp.uint = var;
|
|
|
|
preference->default_val.uint = *var;
|
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Register a preference with an Boolean value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_bool_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
gboolean *var)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
PREF_BOOL);
|
|
|
|
preference->varp.boolp = var;
|
|
|
|
preference->default_val.boolval = *var;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Register a preference with an enumerated value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_enum_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
gint *var, const enum_val_t *enumvals,
|
|
|
|
gboolean radio_buttons)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
|
|
|
|
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
PREF_ENUM);
|
|
|
|
preference->varp.enump = var;
|
|
|
|
preference->default_val.enumval = *var;
|
|
|
|
preference->info.enum_info.enumvals = enumvals;
|
|
|
|
preference->info.enum_info.radio_buttons = radio_buttons;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
static pref_t*
|
2012-06-13 01:13:12 +00:00
|
|
|
register_string_like_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
const char **var, pref_type_t type)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
|
|
|
char *varcopy;
|
|
|
|
|
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
type);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* String preference values should be non-null (as you can't
|
|
|
|
* keep them null after using the preferences GUI, you can at best
|
|
|
|
* have them be null strings) and freeable (as we free them
|
|
|
|
* if we change them).
|
|
|
|
*
|
|
|
|
* If the value is a null pointer, make it a copy of a null
|
|
|
|
* string, otherwise make it a copy of the value.
|
|
|
|
*/
|
|
|
|
if (*var == NULL) {
|
|
|
|
*var = g_strdup("");
|
|
|
|
varcopy = g_strdup("");
|
|
|
|
} else {
|
|
|
|
*var = g_strdup(*var);
|
|
|
|
varcopy = g_strdup(*var);
|
|
|
|
}
|
|
|
|
preference->varp.string = var;
|
|
|
|
preference->default_val.string = varcopy;
|
2013-01-18 00:50:14 +00:00
|
|
|
preference->stashed_val.string = NULL;
|
2012-08-08 20:47:20 +00:00
|
|
|
|
|
|
|
return preference;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2012-06-13 01:13:12 +00:00
|
|
|
/*
|
|
|
|
* Register a preference with a character-string value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_string_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
const char **var)
|
2012-06-13 01:13:12 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
register_string_like_preference(module, name, title, description, var,
|
|
|
|
PREF_STRING);
|
2012-06-13 01:13:12 +00:00
|
|
|
}
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
/*
|
|
|
|
* Register a "custom" preference with a character-string value.
|
|
|
|
* XXX - This should be temporary until we can find a better way
|
|
|
|
* to do "custom" preferences
|
|
|
|
*/
|
2012-09-27 16:23:06 +00:00
|
|
|
static
|
2012-08-08 20:47:20 +00:00
|
|
|
void prefs_register_string_custom_preference(module_t *module, const char *name,
|
|
|
|
const char *title, const char *description,
|
|
|
|
struct pref_custom_cbs* custom_cbs, const char **var)
|
|
|
|
{
|
|
|
|
pref_t *preference;
|
|
|
|
|
|
|
|
preference = register_string_like_preference(module, name, title, description, var,
|
|
|
|
PREF_CUSTOM);
|
|
|
|
|
|
|
|
preference->custom_cbs = *custom_cbs;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-06-13 01:13:12 +00:00
|
|
|
/*
|
|
|
|
* Register a preference with a file name (string) value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_filename_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
const char **var)
|
2012-06-13 01:13:12 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
register_string_like_preference(module, name, title, description, var,
|
|
|
|
PREF_FILENAME);
|
2012-06-13 01:13:12 +00:00
|
|
|
}
|
|
|
|
|
2004-10-14 23:45:09 +00:00
|
|
|
/*
|
|
|
|
* Register a preference with a ranged value.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_range_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
range_t **var, guint32 max_value)
|
2004-10-14 23:45:09 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t *preference;
|
|
|
|
|
|
|
|
preference = register_preference(module, name, title, description,
|
|
|
|
PREF_RANGE);
|
|
|
|
preference->info.max_value = max_value;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Range preference values should be non-null (as you can't
|
|
|
|
* keep them null after using the preferences GUI, you can at best
|
|
|
|
* have them be empty ranges) and freeable (as we free them
|
|
|
|
* if we change them).
|
|
|
|
*
|
|
|
|
* If the value is a null pointer, make it an empty range.
|
|
|
|
*/
|
|
|
|
if (*var == NULL)
|
|
|
|
*var = range_empty();
|
|
|
|
preference->varp.range = var;
|
|
|
|
preference->default_val.range = range_copy(*var);
|
2013-01-18 00:50:14 +00:00
|
|
|
preference->stashed_val.range = NULL;
|
2004-10-14 23:45:09 +00:00
|
|
|
}
|
|
|
|
|
2006-12-05 00:43:00 +00:00
|
|
|
/*
|
|
|
|
* Register a static text 'preference'. It can be used to add explanatory
|
|
|
|
* text inline with other preferences in the GUI.
|
|
|
|
* Note: Static preferences are not saved to the preferences file.
|
|
|
|
*/
|
2010-08-21 04:26:26 +00:00
|
|
|
void
|
|
|
|
prefs_register_static_text_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title,
|
|
|
|
const char *description)
|
2006-12-05 00:43:00 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
register_preference(module, name, title, description, PREF_STATIC_TEXT);
|
2006-12-05 00:43:00 +00:00
|
|
|
}
|
|
|
|
|
2007-02-03 14:25:02 +00:00
|
|
|
/*
|
|
|
|
* Register a uat 'preference'. It adds a button that opens the uat's window in the
|
|
|
|
* preferences tab of the module.
|
|
|
|
*/
|
2010-08-21 04:26:26 +00:00
|
|
|
extern void
|
|
|
|
prefs_register_uat_preference(module_t *module, const char *name,
|
2012-07-07 00:30:47 +00:00
|
|
|
const char *title, const char *description,
|
|
|
|
void* uat)
|
2010-05-26 01:51:41 +00:00
|
|
|
{
|
2008-02-15 22:36:24 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_t* preference = register_preference(module, name, title, description, PREF_UAT);
|
2008-02-15 22:36:24 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
preference->varp.uat = uat;
|
2007-02-03 14:25:02 +00:00
|
|
|
}
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
/*
|
|
|
|
* Register a color preference.
|
|
|
|
*/
|
|
|
|
void prefs_register_color_preference(module_t *module, const char *name,
|
|
|
|
const char *title, const char *description, color_t *color)
|
|
|
|
{
|
|
|
|
pref_t* preference = register_preference(module, name, title, description, PREF_COLOR);
|
|
|
|
|
2013-01-18 00:50:14 +00:00
|
|
|
preference->varp.colorp = color;
|
2012-08-08 12:13:24 +00:00
|
|
|
preference->default_val.color = *color;
|
|
|
|
}
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
/*
|
|
|
|
* Register a "custom" preference with a list.
|
|
|
|
* XXX - This should be temporary until we can find a better way
|
|
|
|
* to do "custom" preferences
|
|
|
|
*/
|
|
|
|
typedef void (*pref_custom_list_init_cb) (pref_t* pref, GList** value);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
static
|
2012-08-08 20:47:20 +00:00
|
|
|
void prefs_register_list_custom_preference(module_t *module, const char *name,
|
|
|
|
const char *title, const char *description, struct pref_custom_cbs* custom_cbs,
|
|
|
|
pref_custom_list_init_cb init_cb, GList** list)
|
|
|
|
{
|
|
|
|
pref_t* preference = register_preference(module, name, title, description, PREF_CUSTOM);
|
|
|
|
|
|
|
|
preference->custom_cbs = *custom_cbs;
|
|
|
|
init_cb(preference, list);
|
|
|
|
}
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
/*
|
|
|
|
* Register a custom preference.
|
|
|
|
*/
|
|
|
|
void prefs_register_custom_preference(module_t *module, const char *name,
|
|
|
|
const char *title, const char *description, struct pref_custom_cbs* custom_cbs,
|
2012-08-08 21:34:43 +00:00
|
|
|
void** custom_data _U_)
|
2012-08-08 12:13:24 +00:00
|
|
|
{
|
|
|
|
pref_t* preference = register_preference(module, name, title, description, PREF_CUSTOM);
|
2007-02-03 14:25:02 +00:00
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
preference->custom_cbs = *custom_cbs;
|
2012-08-08 20:47:20 +00:00
|
|
|
/* XXX - wait until we can handle void** pointers
|
2012-08-08 12:13:24 +00:00
|
|
|
preference->custom_cbs.init_cb(preference, custom_data);
|
2012-08-08 20:47:20 +00:00
|
|
|
*/
|
2012-08-08 12:13:24 +00:00
|
|
|
}
|
2007-02-03 14:25:02 +00:00
|
|
|
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
/*
|
|
|
|
* Register a preference that used to be supported but no longer is.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
prefs_register_obsolete_preference(module_t *module, const char *name)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
register_preference(module, name, NULL, NULL, PREF_OBSOLETE);
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
}
|
|
|
|
|
2011-04-26 21:59:11 +00:00
|
|
|
/*
|
|
|
|
* Check to see if a preference is obsolete.
|
|
|
|
*/
|
|
|
|
extern gboolean
|
|
|
|
prefs_get_preference_obsolete(pref_t *pref)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
if (pref) {
|
|
|
|
return pref->type == PREF_OBSOLETE ? TRUE : FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
2011-04-26 21:59:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Make a preference obsolete.
|
|
|
|
*/
|
|
|
|
extern prefs_set_pref_e
|
|
|
|
prefs_set_preference_obsolete(pref_t *pref)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
if (pref) {
|
|
|
|
pref->type = PREF_OBSOLETE;
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
return PREFS_SET_NO_SUCH_PREF;
|
2011-04-26 21:59:11 +00:00
|
|
|
}
|
|
|
|
|
2011-09-23 11:01:13 +00:00
|
|
|
/* Return the value assigned to the given uint preference. */
|
|
|
|
guint prefs_get_uint_preference(pref_t *pref)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
if (pref && pref->type == PREF_UINT)
|
|
|
|
return *pref->varp.uint;
|
|
|
|
return 0;
|
2011-09-23 11:01:13 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Call a callback function, with a specified argument, for each preference
|
|
|
|
* in a given module.
|
2003-10-02 21:06:11 +00:00
|
|
|
*
|
|
|
|
* If any of the callbacks return a non-zero value, stop and return that
|
|
|
|
* value, otherwise return 0.
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
2003-10-02 21:06:11 +00:00
|
|
|
guint
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
prefs_pref_foreach(module_t *module, pref_cb callback, gpointer user_data)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
GList *elem;
|
|
|
|
pref_t *pref;
|
|
|
|
guint ret;
|
|
|
|
|
|
|
|
for (elem = g_list_first(module->prefs); elem != NULL; elem = g_list_next(elem)) {
|
|
|
|
pref = elem->data;
|
|
|
|
if (pref->type == PREF_OBSOLETE) {
|
|
|
|
/*
|
|
|
|
* This preference is no longer supported; it's
|
|
|
|
* not a real preference, so we don't call the
|
|
|
|
* callback for it (i.e., we treat it as if it
|
|
|
|
* weren't found in the list of preferences,
|
|
|
|
* and we weren't called in the first place).
|
|
|
|
*/
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = (*callback)(pref, user_data);
|
|
|
|
if (ret != 0)
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
return 0;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2012-07-06 04:48:36 +00:00
|
|
|
static const enum_val_t print_format_vals[] = {
|
2012-07-07 00:30:47 +00:00
|
|
|
{ "text", "Plain Text", PR_FMT_TEXT },
|
|
|
|
{ "postscript", "Postscript", PR_FMT_PS },
|
|
|
|
{ NULL, NULL, 0 }
|
2012-07-06 04:48:36 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const enum_val_t print_dest_vals[] = {
|
|
|
|
#ifdef _WIN32
|
2012-07-07 00:30:47 +00:00
|
|
|
/* "PR_DEST_CMD" means "to printer" on Windows */
|
|
|
|
{ "command", "Printer", PR_DEST_CMD },
|
2012-07-06 04:48:36 +00:00
|
|
|
#else
|
2012-07-07 00:30:47 +00:00
|
|
|
{ "command", "Command", PR_DEST_CMD },
|
2012-07-06 04:48:36 +00:00
|
|
|
#endif
|
2012-07-07 00:30:47 +00:00
|
|
|
{ "file", "File", PR_DEST_FILE },
|
|
|
|
{ NULL, NULL, 0 }
|
2012-07-06 04:48:36 +00:00
|
|
|
};
|
|
|
|
|
2012-06-25 21:05:36 +00:00
|
|
|
static void stats_callback(void)
|
|
|
|
{
|
|
|
|
/* Test for a sane tap update interval */
|
|
|
|
if (prefs.tap_update_interval < 100 || prefs.tap_update_interval > 10000) {
|
|
|
|
prefs.tap_update_interval = TAP_UPDATE_DEFAULT_INTERVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef HAVE_LIBPORTAUDIO
|
|
|
|
/* Test for a sane max channels entry */
|
|
|
|
if (prefs.rtp_player_max_visible < 1 || prefs.rtp_player_max_visible > 10)
|
|
|
|
prefs.rtp_player_max_visible = RTP_PLAYER_DEFAULT_VISIBLE;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
static void gui_callback(void)
|
|
|
|
{
|
|
|
|
/* Ensure there is at least one file count */
|
|
|
|
if (prefs.gui_recent_files_count_max == 0)
|
|
|
|
prefs.gui_recent_files_count_max = 10;
|
|
|
|
|
|
|
|
/* Ensure there is at least one display filter entry */
|
|
|
|
if (prefs.gui_recent_df_entries_max == 0)
|
|
|
|
prefs.gui_recent_df_entries_max = 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void gui_layout_callback(void)
|
|
|
|
{
|
|
|
|
if (prefs.gui_layout_type == layout_unused ||
|
|
|
|
prefs.gui_layout_type >= layout_type_max) {
|
|
|
|
/* XXX - report an error? It's not a syntax error - we'd need to
|
|
|
|
add a way of reporting a *semantic* error. */
|
|
|
|
prefs.gui_layout_type = layout_type_5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************
|
|
|
|
* All custom preference function callbacks
|
|
|
|
******************************************************/
|
|
|
|
static void custom_pref_no_cb(pref_t* pref _U_) {}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Console log level custom preference functions
|
|
|
|
*/
|
|
|
|
static void console_log_level_reset_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
*pref->varp.uint = pref->default_val.uint;
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e console_log_level_set_cb(pref_t* pref, const gchar* value, gboolean* changed)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
|
|
|
guint uval;
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
uval = (guint)strtoul(value, NULL, 10);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
if (*pref->varp.uint != uval) {
|
|
|
|
*changed = TRUE;
|
|
|
|
*pref->varp.uint = uval;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (*pref->varp.uint & (G_LOG_LEVEL_INFO|G_LOG_LEVEL_DEBUG)) {
|
|
|
|
/*
|
|
|
|
* GLib >= 2.32 drops INFO and DEBUG messages by default. Tell
|
|
|
|
* it not to do that.
|
|
|
|
*/
|
|
|
|
g_setenv("G_MESSAGES_DEBUG", "all", TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * console_log_level_type_name_cb(void) {
|
2013-01-07 19:13:03 +00:00
|
|
|
return "Log level";
|
2013-01-05 02:30:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char * console_log_level_type_description_cb(void) {
|
|
|
|
return g_strdup_printf(
|
2013-01-07 19:13:03 +00:00
|
|
|
"Console log level (for debugging)\n"
|
2013-01-05 02:30:58 +00:00
|
|
|
"A bitmask of log levels:\n"
|
|
|
|
"ERROR = 4\n"
|
|
|
|
"CRITICAL = 8\n"
|
|
|
|
"WARNING = 16\n"
|
|
|
|
"MESSAGE = 32\n"
|
|
|
|
"INFO = 64\n"
|
|
|
|
"DEBUG = 128");
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean console_log_level_is_default_cb(pref_t* pref) {
|
|
|
|
return *pref->varp.uint == pref->default_val.uint;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * console_log_level_to_str_cb(pref_t* pref, gboolean default_val) {
|
|
|
|
return g_strdup_printf("%u", default_val ? pref->default_val.uint : *pref->varp.uint);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Column hidden custom preference functions
|
|
|
|
*/
|
|
|
|
#define PRS_COL_HIDDEN "column.hidden"
|
|
|
|
#define PRS_COL_FMT "column.format"
|
|
|
|
#define PRS_COL_NUM "column.number"
|
|
|
|
static module_t *gui_column_module = NULL;
|
|
|
|
|
|
|
|
static void column_hidden_free_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
g_free((char *)*pref->varp.string);
|
|
|
|
*pref->varp.string = NULL;
|
|
|
|
g_free(pref->default_val.string);
|
2012-12-29 01:39:02 +00:00
|
|
|
pref->default_val.string = NULL;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void column_hidden_reset_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
g_free((void *)*pref->varp.string);
|
|
|
|
*pref->varp.string = g_strdup(pref->default_val.string);
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e column_hidden_set_cb(pref_t* pref, const gchar* value, gboolean* changed)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
|
|
|
GList *clp;
|
|
|
|
fmt_data *cfmt;
|
|
|
|
pref_t *format_pref;
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
if (*pref->varp.string && (strcmp(*pref->varp.string, value) != 0)) {
|
2012-08-08 16:54:02 +00:00
|
|
|
*changed = TRUE;
|
|
|
|
g_free((void *)*pref->varp.string);
|
|
|
|
*pref->varp.string = g_strdup(value);
|
2012-12-29 01:39:02 +00:00
|
|
|
} else {
|
|
|
|
*pref->varp.string = NULL;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set the "visible" flag for the existing columns; we need to
|
|
|
|
* do this if we set PRS_COL_HIDDEN but don't set PRS_COL_FMT
|
|
|
|
* after setting it (which might be the case if, for example, we
|
|
|
|
* set PRS_COL_HIDDEN on the command line).
|
|
|
|
*/
|
|
|
|
format_pref = prefs_find_preference(gui_column_module, PRS_COL_FMT);
|
2012-08-08 20:47:20 +00:00
|
|
|
for (clp = *format_pref->varp.list; clp != NULL; clp = clp->next) {
|
2012-08-08 16:54:02 +00:00
|
|
|
cfmt = (fmt_data *)clp->data;
|
|
|
|
cfmt->visible = prefs_is_column_visible(*pref->varp.string, cfmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * column_hidden_type_name_cb(void) {
|
|
|
|
return "Packet list hidden columns";
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * column_hidden_type_description_cb(void) {
|
|
|
|
return g_strdup("List all columns to hide in the packet list.");
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * column_hidden_to_str_cb(pref_t* pref, gboolean default_val) {
|
|
|
|
GString *cols_hidden = g_string_new ("");
|
|
|
|
GList *clp;
|
|
|
|
fmt_data *cfmt;
|
|
|
|
pref_t *format_pref;
|
|
|
|
|
|
|
|
if (default_val)
|
|
|
|
return g_strdup(pref->default_val.string);
|
|
|
|
|
|
|
|
format_pref = prefs_find_preference(gui_column_module, PRS_COL_FMT);
|
2013-01-20 21:14:12 +00:00
|
|
|
clp = (format_pref) ? *format_pref->varp.list : NULL;
|
2013-01-05 02:30:58 +00:00
|
|
|
while (clp) {
|
|
|
|
gchar *prefs_fmt;
|
|
|
|
cfmt = (fmt_data *) clp->data;
|
|
|
|
if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) {
|
|
|
|
prefs_fmt = g_strdup_printf("%s:%s:%d:%c",
|
|
|
|
col_format_to_string(cfmt->fmt),
|
|
|
|
cfmt->custom_field,
|
|
|
|
cfmt->custom_occurrence,
|
|
|
|
cfmt->resolved ? 'R' : 'U');
|
|
|
|
} else {
|
|
|
|
prefs_fmt = g_strdup(col_format_to_string(cfmt->fmt));
|
|
|
|
}
|
|
|
|
if (!cfmt->visible) {
|
|
|
|
if (cols_hidden->len) {
|
|
|
|
g_string_append (cols_hidden, ",");
|
|
|
|
}
|
|
|
|
g_string_append (cols_hidden, prefs_fmt);
|
|
|
|
}
|
|
|
|
clp = clp->next;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
|
2013-01-14 22:21:11 +00:00
|
|
|
return g_string_free (cols_hidden, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static gboolean column_hidden_is_default_cb(pref_t* pref) {
|
|
|
|
char *cur_hidden_str = column_hidden_to_str_cb(pref, FALSE);
|
2013-01-14 23:23:50 +00:00
|
|
|
gboolean is_default = g_strcmp0(cur_hidden_str, pref->default_val.string) == 0;
|
2013-01-05 02:30:58 +00:00
|
|
|
|
|
|
|
g_free(cur_hidden_str);
|
|
|
|
return is_default;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
/* Number of columns "preference". This is only used internally and is not written to the
|
|
|
|
* preference file
|
2012-08-08 16:54:02 +00:00
|
|
|
*/
|
|
|
|
static void column_num_reset_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
*pref->varp.uint = pref->default_val.uint;
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e column_num_set_cb(pref_t* pref _U_, const gchar* value _U_, gboolean* changed _U_)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
|
|
|
/* Don't write this to the preferences file */
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * column_num_type_name_cb(void) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * column_num_type_description_cb(void) {
|
|
|
|
return g_strdup("");
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean column_num_is_default_cb(pref_t* pref _U_) {
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * column_num_to_str_cb(pref_t* pref _U_, gboolean default_val _U_) {
|
|
|
|
return g_strdup("");
|
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Column format custom preference functions
|
|
|
|
*/
|
2012-08-08 20:47:20 +00:00
|
|
|
static void column_format_init_cb(pref_t* pref, GList** value)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
|
|
|
fmt_data *src_cfmt, *dest_cfmt;
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *entry;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
pref->varp.list = value;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
pref->default_val.list = NULL;
|
|
|
|
for (entry = *pref->varp.list; entry != NULL; entry = g_list_next(entry)) {
|
2012-08-08 16:54:02 +00:00
|
|
|
src_cfmt = entry->data;
|
|
|
|
dest_cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
|
|
|
|
dest_cfmt->title = g_strdup(src_cfmt->title);
|
|
|
|
dest_cfmt->fmt = src_cfmt->fmt;
|
|
|
|
if (src_cfmt->custom_field) {
|
|
|
|
dest_cfmt->custom_field = g_strdup(src_cfmt->custom_field);
|
|
|
|
dest_cfmt->custom_occurrence = src_cfmt->custom_occurrence;
|
|
|
|
} else {
|
|
|
|
dest_cfmt->custom_field = NULL;
|
|
|
|
dest_cfmt->custom_occurrence = 0;
|
|
|
|
}
|
|
|
|
dest_cfmt->visible = src_cfmt->visible;
|
|
|
|
dest_cfmt->resolved = src_cfmt->resolved;
|
2012-08-08 20:47:20 +00:00
|
|
|
pref->default_val.list = g_list_append(pref->default_val.list, dest_cfmt);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void column_format_free_cb(pref_t* pref)
|
|
|
|
{
|
2012-08-08 20:47:20 +00:00
|
|
|
free_col_info(*pref->varp.list);
|
|
|
|
free_col_info(pref->default_val.list);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void column_format_reset_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
fmt_data *src_cfmt, *dest_cfmt;
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *entry;
|
2012-08-08 16:54:02 +00:00
|
|
|
pref_t *col_num_pref;
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
free_col_info(*pref->varp.list);
|
|
|
|
*pref->varp.list = NULL;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
for (entry = pref->default_val.list; entry != NULL; entry = g_list_next(entry)) {
|
2012-08-08 16:54:02 +00:00
|
|
|
src_cfmt = entry->data;
|
|
|
|
dest_cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
|
|
|
|
dest_cfmt->title = g_strdup(src_cfmt->title);
|
|
|
|
dest_cfmt->fmt = src_cfmt->fmt;
|
|
|
|
if (src_cfmt->custom_field) {
|
|
|
|
dest_cfmt->custom_field = g_strdup(src_cfmt->custom_field);
|
|
|
|
dest_cfmt->custom_occurrence = src_cfmt->custom_occurrence;
|
|
|
|
} else {
|
|
|
|
dest_cfmt->custom_field = NULL;
|
|
|
|
dest_cfmt->custom_occurrence = 0;
|
|
|
|
}
|
|
|
|
dest_cfmt->visible = src_cfmt->visible;
|
|
|
|
dest_cfmt->resolved = src_cfmt->resolved;
|
2012-08-08 20:47:20 +00:00
|
|
|
*pref->varp.list = g_list_append(*pref->varp.list, dest_cfmt);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
col_num_pref = prefs_find_preference(gui_column_module, PRS_COL_NUM);
|
|
|
|
column_num_reset_cb(col_num_pref);
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e column_format_set_cb(pref_t* pref, const gchar* value, gboolean* changed _U_)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *col_l, *col_l_elt;
|
2012-08-08 16:54:02 +00:00
|
|
|
fmt_data *cfmt;
|
|
|
|
gint llen;
|
|
|
|
pref_t *hidden_pref, *col_num_pref;
|
|
|
|
|
|
|
|
col_l = prefs_get_string_list(value);
|
|
|
|
if (col_l == NULL)
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
if ((g_list_length(col_l) % 2) != 0) {
|
|
|
|
/* A title didn't have a matching format. */
|
|
|
|
prefs_clear_string_list(col_l);
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
|
|
|
/* Check to make sure all column formats are valid. */
|
|
|
|
col_l_elt = g_list_first(col_l);
|
|
|
|
while(col_l_elt) {
|
|
|
|
fmt_data cfmt_check;
|
|
|
|
|
|
|
|
/* Go past the title. */
|
|
|
|
col_l_elt = col_l_elt->next;
|
|
|
|
|
|
|
|
/* Parse the format to see if it's valid. */
|
|
|
|
if (!parse_column_format(&cfmt_check, col_l_elt->data)) {
|
|
|
|
/* It's not a valid column format. */
|
|
|
|
prefs_clear_string_list(col_l);
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
|
|
|
if (cfmt_check.fmt != COL_CUSTOM) {
|
|
|
|
/* Some predefined columns have been migrated to use custom colums.
|
|
|
|
* We'll convert these silently here */
|
|
|
|
try_convert_to_custom_column(&col_l_elt->data);
|
|
|
|
} else {
|
|
|
|
/* We don't need the custom column field on this pass. */
|
|
|
|
g_free(cfmt_check.custom_field);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Go past the format. */
|
|
|
|
col_l_elt = col_l_elt->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* They're all valid; process them. */
|
2012-08-08 20:47:20 +00:00
|
|
|
free_col_info(*pref->varp.list);
|
|
|
|
*pref->varp.list = NULL;
|
2012-08-08 16:54:02 +00:00
|
|
|
hidden_pref = prefs_find_preference(gui_column_module, PRS_COL_HIDDEN);
|
|
|
|
col_num_pref = prefs_find_preference(gui_column_module, PRS_COL_NUM);
|
|
|
|
llen = g_list_length(col_l);
|
|
|
|
*col_num_pref->varp.uint = llen / 2;
|
|
|
|
col_l_elt = g_list_first(col_l);
|
|
|
|
while(col_l_elt) {
|
|
|
|
cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
|
|
|
|
cfmt->title = g_strdup(col_l_elt->data);
|
|
|
|
col_l_elt = col_l_elt->next;
|
|
|
|
parse_column_format(cfmt, col_l_elt->data);
|
|
|
|
cfmt->visible = prefs_is_column_visible((gchar*)(*hidden_pref->varp.string), cfmt);
|
|
|
|
col_l_elt = col_l_elt->next;
|
2012-08-08 20:47:20 +00:00
|
|
|
*pref->varp.list = g_list_append(*pref->varp.list, cfmt);
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
prefs_clear_string_list(col_l);
|
|
|
|
column_hidden_free_cb(hidden_pref);
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * column_format_type_name_cb(void) {
|
|
|
|
return "Packet list column format";
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * column_format_type_description_cb(void) {
|
|
|
|
return g_strdup("Each pair of strings consists of a column title and its format");
|
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static gboolean column_format_is_default_cb(pref_t* pref) {
|
|
|
|
GList *clp = *pref->varp.list,
|
|
|
|
*pref_col = g_list_first(clp),
|
|
|
|
*def_col = g_list_first(pref->default_val.list);
|
|
|
|
fmt_data *cfmt, *def_cfmt;
|
|
|
|
gboolean is_default = TRUE;
|
|
|
|
pref_t *col_num_pref;
|
|
|
|
|
|
|
|
/* See if the column data has changed from the default */
|
|
|
|
col_num_pref = prefs_find_preference(gui_column_module, PRS_COL_NUM);
|
2013-01-20 21:14:12 +00:00
|
|
|
if (col_num_pref && *col_num_pref->varp.uint != col_num_pref->default_val.uint) {
|
2013-01-05 02:30:58 +00:00
|
|
|
is_default = FALSE;
|
2012-08-08 16:54:02 +00:00
|
|
|
} else {
|
2013-01-05 02:30:58 +00:00
|
|
|
while (pref_col && def_col) {
|
|
|
|
cfmt = (fmt_data *) pref_col->data;
|
|
|
|
def_cfmt = (fmt_data *) def_col->data;
|
2013-01-14 23:23:50 +00:00
|
|
|
if ((g_strcmp0(cfmt->title, def_cfmt->title) != 0) ||
|
2013-01-05 02:30:58 +00:00
|
|
|
(cfmt->fmt != def_cfmt->fmt) ||
|
|
|
|
(((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) &&
|
2013-01-14 23:23:50 +00:00
|
|
|
((g_strcmp0(cfmt->custom_field, def_cfmt->custom_field) != 0) ||
|
2013-01-05 02:30:58 +00:00
|
|
|
(cfmt->resolved != def_cfmt->resolved)))) {
|
|
|
|
is_default = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
pref_col = pref_col->next;
|
|
|
|
def_col = def_col->next;
|
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
return is_default;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static char * column_format_to_str_cb(pref_t* pref, gboolean default_val) {
|
|
|
|
GList *pref_l = default_val ? pref->default_val.list : *pref->varp.list;
|
|
|
|
GList *clp = g_list_first(pref_l);
|
|
|
|
GList *col_l;
|
|
|
|
fmt_data *cfmt;
|
|
|
|
gchar *prefs_fmt;
|
|
|
|
char *column_format_str;
|
|
|
|
|
|
|
|
col_l = NULL;
|
|
|
|
while (clp) {
|
|
|
|
cfmt = (fmt_data *) clp->data;
|
|
|
|
col_l = g_list_append(col_l, g_strdup(cfmt->title));
|
|
|
|
if ((cfmt->fmt == COL_CUSTOM) && (cfmt->custom_field)) {
|
|
|
|
prefs_fmt = g_strdup_printf("%s:%s:%d:%c",
|
|
|
|
col_format_to_string(cfmt->fmt),
|
|
|
|
cfmt->custom_field,
|
|
|
|
cfmt->custom_occurrence,
|
|
|
|
cfmt->resolved ? 'R' : 'U');
|
|
|
|
} else {
|
|
|
|
prefs_fmt = g_strdup(col_format_to_string(cfmt->fmt));
|
|
|
|
}
|
|
|
|
col_l = g_list_append(col_l, prefs_fmt);
|
|
|
|
clp = clp->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
column_format_str = join_string_list(col_l);
|
|
|
|
|
|
|
|
/* This frees the list of strings, but not the strings to which it
|
|
|
|
refers; they are free'ed in join_string_list(). */
|
|
|
|
g_list_free(col_l);
|
|
|
|
return column_format_str;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
/*
|
|
|
|
* Capture column custom preference functions
|
|
|
|
*/
|
2012-08-08 20:47:20 +00:00
|
|
|
static void capture_column_init_cb(pref_t* pref, GList** value)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *list = *value,
|
2012-08-08 16:54:02 +00:00
|
|
|
*list_copy = NULL;
|
|
|
|
gchar *col;
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
pref->varp.list = value;
|
2012-08-08 16:54:02 +00:00
|
|
|
/* Copy the current list */
|
|
|
|
while (list) {
|
|
|
|
col = (gchar *)list->data;
|
|
|
|
list_copy = g_list_append(list_copy, g_strdup(col));
|
|
|
|
list = list->next;
|
|
|
|
}
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
pref->default_val.list = list_copy;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void capture_column_free_cb(pref_t* pref)
|
|
|
|
{
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *list = *pref->varp.list;
|
2012-08-08 16:54:02 +00:00
|
|
|
gchar *col_name;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
col_name = list->data;
|
|
|
|
|
|
|
|
g_free(col_name);
|
|
|
|
list = g_list_remove_link(list, list);
|
|
|
|
}
|
|
|
|
g_list_free(list);
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
list = pref->default_val.list;
|
2012-08-08 16:54:02 +00:00
|
|
|
while (list != NULL) {
|
|
|
|
col_name = list->data;
|
|
|
|
|
|
|
|
g_free(col_name);
|
|
|
|
list = g_list_remove_link(list, list);
|
|
|
|
}
|
|
|
|
g_list_free(list);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void capture_column_reset_cb(pref_t* pref)
|
|
|
|
{
|
2012-08-08 20:47:20 +00:00
|
|
|
GList *list_copy = *pref->varp.list,
|
|
|
|
*list = pref->default_val.list;
|
2012-08-08 16:54:02 +00:00
|
|
|
gchar *col_name;
|
|
|
|
|
|
|
|
/* Clear the list before it's copied */
|
|
|
|
while (list_copy != NULL) {
|
|
|
|
col_name = list_copy->data;
|
|
|
|
|
|
|
|
g_free(col_name);
|
|
|
|
list_copy = g_list_remove_link(list_copy, list_copy);
|
|
|
|
}
|
|
|
|
|
|
|
|
while (list) {
|
|
|
|
col_name = (gchar *)list->data;
|
|
|
|
list_copy = g_list_append(list_copy, g_strdup(col_name));
|
|
|
|
list = list->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e capture_column_set_cb(pref_t* pref, const gchar* value, gboolean* changed _U_)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
2012-08-09 00:46:17 +00:00
|
|
|
GList *col_l, *col_l_elt;
|
2012-08-08 16:54:02 +00:00
|
|
|
gchar *col_name;
|
|
|
|
|
|
|
|
col_l = prefs_get_string_list(value);
|
|
|
|
if (col_l == NULL)
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
|
2012-08-09 00:46:17 +00:00
|
|
|
g_list_free(*pref->varp.list);
|
|
|
|
*pref->varp.list = NULL;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
col_l_elt = g_list_first(col_l);
|
|
|
|
while(col_l_elt) {
|
|
|
|
col_name = (gchar *)col_l_elt->data;
|
2012-08-09 00:46:17 +00:00
|
|
|
*pref->varp.list = g_list_append(*pref->varp.list, col_name);
|
2012-08-08 16:54:02 +00:00
|
|
|
col_l_elt = col_l_elt->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * capture_column_type_name_cb(void) {
|
2013-01-07 19:13:03 +00:00
|
|
|
return "Column list";
|
2013-01-05 02:30:58 +00:00
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static char * capture_column_type_description_cb(void) {
|
|
|
|
return g_strdup_printf(
|
2013-01-07 19:13:03 +00:00
|
|
|
"List of columns to be displayed in the capture options dialog.\n"
|
2013-01-05 02:30:58 +00:00
|
|
|
"Possible values: INTERFACE,LINK,PMODE,SNAPLEN,MONITOR,BUFFER,FILTER\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean capture_column_is_default_cb(pref_t* pref) {
|
|
|
|
GList *clp = *pref->varp.list,
|
|
|
|
*pref_col = g_list_first(clp),
|
|
|
|
*def_col = g_list_first(pref->default_val.list);
|
|
|
|
gchar *col, *def_col_str;
|
|
|
|
gboolean is_default = TRUE;
|
|
|
|
|
|
|
|
/* See if the column data has changed from the default */
|
|
|
|
while (pref_col && def_col) {
|
|
|
|
col = (gchar *)pref_col->data;
|
|
|
|
def_col_str = (gchar *) def_col->data;
|
|
|
|
if (strcmp(col, def_col_str) != 0) {
|
|
|
|
is_default = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
pref_col = pref_col->next;
|
|
|
|
def_col = def_col->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Ensure the same column count */
|
|
|
|
if (((pref_col == NULL) && (def_col != NULL)) ||
|
|
|
|
((pref_col != NULL) && (def_col == NULL)))
|
|
|
|
is_default = FALSE;
|
|
|
|
|
|
|
|
return is_default;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * capture_column_to_str_cb(pref_t* pref, gboolean default_val) {
|
|
|
|
GList *pref_l = default_val ? pref->default_val.list : *pref->varp.list;
|
|
|
|
GList *clp = g_list_first(pref_l);
|
|
|
|
GList *col_l = NULL;
|
|
|
|
gchar *col, *capture_column_str;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
while (clp) {
|
|
|
|
col = (gchar *) clp->data;
|
|
|
|
col_l = g_list_append(col_l, g_strdup(col));
|
|
|
|
clp = clp->next;
|
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
capture_column_str = join_string_list(col_l);
|
|
|
|
/* This frees the list of strings, but not the strings to which it
|
|
|
|
refers; they are free'ed in write_string_list(). */
|
|
|
|
g_list_free(col_l);
|
|
|
|
return capture_column_str;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
|
|
|
|
2012-08-18 02:47:37 +00:00
|
|
|
|
|
|
|
static void colorized_frame_free_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
g_free((char *)*pref->varp.string);
|
|
|
|
*pref->varp.string = NULL;
|
|
|
|
g_free(pref->default_val.string);
|
2012-12-29 01:39:02 +00:00
|
|
|
pref->default_val.string = NULL;
|
|
|
|
|
2012-08-18 02:47:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void colorized_frame_reset_cb(pref_t* pref)
|
|
|
|
{
|
|
|
|
g_free((void *)*pref->varp.string);
|
|
|
|
*pref->varp.string = g_strdup(pref->default_val.string);
|
|
|
|
}
|
|
|
|
|
2012-12-26 05:57:06 +00:00
|
|
|
static prefs_set_pref_e colorized_frame_set_cb(pref_t* pref, const gchar* value, gboolean* changed)
|
2012-08-18 02:47:37 +00:00
|
|
|
{
|
|
|
|
if (strcmp(*pref->varp.string, value) != 0) {
|
|
|
|
*changed = TRUE;
|
|
|
|
g_free((void *)*pref->varp.string);
|
|
|
|
*pref->varp.string = g_strdup(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static const char * colorized_frame_type_name_cb(void) {
|
2012-08-18 02:47:37 +00:00
|
|
|
/* Don't write the colors of the 10 easy-access-colorfilters to the preferences
|
|
|
|
* file until the colors can be changed in the GUI. Currently this is not really
|
|
|
|
* possible since the STOCK-icons for these colors are hardcoded.
|
|
|
|
*
|
|
|
|
* XXX Find a way to change the colors of the STOCK-icons on the fly and then
|
|
|
|
* add these 10 colors to the list of colors that can be changed through
|
|
|
|
* the preferences.
|
|
|
|
*
|
|
|
|
*/
|
2013-01-05 02:30:58 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * colorized_frame_type_description_cb(void) {
|
|
|
|
return g_strdup("");
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean colorized_frame_is_default_cb(pref_t* pref _U_) {
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char * colorized_frame_to_str_cb(pref_t* pref _U_, gboolean default_val _U_) {
|
|
|
|
return g_strdup("");
|
2012-08-18 02:47:37 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Register all non-dissector modules' preferences.
|
|
|
|
*/
|
2012-08-08 16:54:02 +00:00
|
|
|
static module_t *gui_module = NULL;
|
|
|
|
static module_t *gui_color_module = NULL;
|
|
|
|
static module_t *nameres_module = NULL;
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
void
|
|
|
|
prefs_register_modules(void)
|
|
|
|
{
|
2012-09-27 16:23:06 +00:00
|
|
|
module_t *printing, *capture_module, *console_module,
|
2012-08-08 16:54:02 +00:00
|
|
|
*gui_layout_module, *gui_font_module;
|
|
|
|
struct pref_custom_cbs custom_cbs;
|
2012-06-25 21:05:36 +00:00
|
|
|
|
|
|
|
if (protocols_module != NULL) {
|
|
|
|
/* Already setup preferences */
|
|
|
|
return;
|
2012-09-27 16:23:06 +00:00
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
/* Ensure the "global" preferences have been initialized so the
|
|
|
|
* preference API has the proper default values to work from
|
2012-08-08 16:54:02 +00:00
|
|
|
*/
|
|
|
|
pre_init_prefs();
|
|
|
|
|
|
|
|
/* GUI
|
2012-09-27 16:23:06 +00:00
|
|
|
* These are "simple" GUI preferences that can be read/written using the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference module API. These preferences still use their own
|
2012-09-27 16:23:06 +00:00
|
|
|
* configuration screens for access, but this cuts down on the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference "string compare list" in set_pref()
|
|
|
|
*/
|
|
|
|
gui_module = prefs_register_module(NULL, "gui", "User Interface",
|
|
|
|
"User Interface", &gui_callback, FALSE);
|
|
|
|
|
2013-01-22 18:27:18 +00:00
|
|
|
prefs_register_obsolete_preference(gui_module, "scrollbar_on_right");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "packet_list_sel_browse");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "protocol_tree_sel_browse");
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "tree_view_altern_colors",
|
|
|
|
"Alternating colors in TreeViews",
|
|
|
|
"Alternating colors in TreeViews?",
|
|
|
|
&prefs.gui_altern_colors);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "expert_composite_eyecandy",
|
2012-09-30 15:59:40 +00:00
|
|
|
"Display Icons on Expert Composite Dialog Tabs",
|
|
|
|
"Display Icons on Expert Composite Dialog Tabs?",
|
2012-08-08 16:54:02 +00:00
|
|
|
&prefs.gui_expert_composite_eyecandy);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "filter_toolbar_show_in_statusbar",
|
|
|
|
"Place filter toolbar inside the statusbar",
|
|
|
|
"Place filter toolbar inside the statusbar?",
|
|
|
|
&prefs.filter_toolbar_show_in_statusbar);
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "protocol_tree_line_style",
|
|
|
|
"Protocol-tree line style",
|
|
|
|
"Protocol-tree line style",
|
|
|
|
&prefs.gui_ptree_line_style, gui_ptree_line_style, FALSE);
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "protocol_tree_expander_style",
|
|
|
|
"Protocol-tree expander style",
|
|
|
|
"Protocol-tree expander style",
|
|
|
|
&prefs.gui_ptree_expander_style, gui_ptree_expander_style, FALSE);
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "hex_dump_highlight_style",
|
|
|
|
"Hex dump highlight style",
|
|
|
|
"Hex dump highlight style",
|
|
|
|
&prefs.gui_hex_dump_highlight_style, gui_hex_dump_highlight_style, FALSE);
|
|
|
|
|
|
|
|
gui_column_module = prefs_register_subtree(gui_module, "Columns", "Columns", NULL);
|
|
|
|
|
|
|
|
custom_cbs.free_cb = column_hidden_free_cb;
|
|
|
|
custom_cbs.reset_cb = column_hidden_reset_cb;
|
|
|
|
custom_cbs.set_cb = column_hidden_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = column_hidden_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = column_hidden_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = column_hidden_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = column_hidden_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_custom_preference(gui_column_module, PRS_COL_HIDDEN, "Packet list hidden columns",
|
2012-08-08 21:34:43 +00:00
|
|
|
"List all columns to hide in the packet list", &custom_cbs, (const char **)&cols_hidden_list);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
custom_cbs.free_cb = column_format_free_cb;
|
|
|
|
custom_cbs.reset_cb = column_format_reset_cb;
|
|
|
|
custom_cbs.set_cb = column_format_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = column_format_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = column_format_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = column_format_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = column_format_to_str_cb;
|
2012-08-08 20:47:20 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_list_custom_preference(gui_column_module, PRS_COL_FMT, "Packet list column format",
|
|
|
|
"Each pair of strings consists of a column title and its format", &custom_cbs,
|
2012-08-08 20:47:20 +00:00
|
|
|
column_format_init_cb, &prefs.col_list);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
/* Number of columns. This is only used internally and is not written to the
|
|
|
|
* preference file
|
2012-08-08 16:54:02 +00:00
|
|
|
*/
|
|
|
|
custom_cbs.free_cb = custom_pref_no_cb;
|
|
|
|
custom_cbs.reset_cb = column_num_reset_cb;
|
|
|
|
custom_cbs.set_cb = column_num_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = column_num_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = column_num_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = column_num_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = column_num_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_uint_custom_preference(gui_column_module, PRS_COL_NUM, "Number of columns",
|
2012-08-08 20:47:20 +00:00
|
|
|
"Number of columns in col_list", &custom_cbs, &prefs.num_cols);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* User Interface : Font */
|
|
|
|
gui_font_module = prefs_register_subtree(gui_module, "Font", "Font", NULL);
|
|
|
|
|
|
|
|
prefs_register_obsolete_preference(gui_font_module, "font_name");
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(gui_font_module, "gtk2.font_name", "Font name",
|
2013-01-24 01:10:12 +00:00
|
|
|
"Font name for packet list, protocol tree, and hex dump panes. (GTK+)", (const char**)(&prefs.gui_gtk2_font_name));
|
|
|
|
|
|
|
|
prefs_register_string_preference(gui_font_module, "qt.font_name", "Font name",
|
|
|
|
"Font name for packet list, protocol tree, and hex dump panes. (Qt)", (const char**)(&prefs.gui_qt_font_name));
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* User Interface : Colors */
|
|
|
|
gui_color_module = prefs_register_subtree(gui_module, "Colors", "Colors", NULL);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "marked_frame.fg", "Color preferences for a marked frame",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Color preferences for a marked frame", &prefs.gui_marked_fg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "marked_frame.bg", "Color preferences for a marked frame",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Color preferences for a marked frame", &prefs.gui_marked_bg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "ignored_frame.fg", "Color preferences for a ignored frame",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Color preferences for a ignored frame", &prefs.gui_ignored_fg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "ignored_frame.bg", "Color preferences for a ignored frame",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Color preferences for a ignored frame", &prefs.gui_ignored_bg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "stream.client.fg", "TCP stream window color preference",
|
2012-08-08 16:54:02 +00:00
|
|
|
"TCP stream window color preference", &prefs.st_client_fg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "stream.client.bg", "TCP stream window color preference",
|
2012-08-08 16:54:02 +00:00
|
|
|
"TCP stream window color preference", &prefs.st_client_bg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "stream.server.fg", "TCP stream window color preference",
|
2012-08-08 16:54:02 +00:00
|
|
|
"TCP stream window color preference", &prefs.st_server_fg);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_color_preference(gui_color_module, "stream.server.bg", "TCP stream window color preference",
|
2012-08-08 16:54:02 +00:00
|
|
|
"TCP stream window color preference", &prefs.st_server_bg);
|
|
|
|
|
2012-08-18 02:47:37 +00:00
|
|
|
custom_cbs.free_cb = colorized_frame_free_cb;
|
|
|
|
custom_cbs.reset_cb = colorized_frame_reset_cb;
|
|
|
|
custom_cbs.set_cb = colorized_frame_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = colorized_frame_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = colorized_frame_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = colorized_frame_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = colorized_frame_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_custom_preference(gui_column_module, "colorized_frame.fg", "Colorized Foreground",
|
2012-08-18 02:47:37 +00:00
|
|
|
"Filter Colorized Foreground", &custom_cbs, (const char **)&prefs.gui_colorized_fg);
|
|
|
|
|
|
|
|
custom_cbs.free_cb = colorized_frame_free_cb;
|
|
|
|
custom_cbs.reset_cb = colorized_frame_reset_cb;
|
|
|
|
custom_cbs.set_cb = colorized_frame_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = colorized_frame_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = colorized_frame_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = colorized_frame_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = colorized_frame_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_custom_preference(gui_column_module, "colorized_frame.bg", "Colorized Background",
|
2012-08-18 02:47:37 +00:00
|
|
|
"Filter Colorized Background", &custom_cbs, (const char **)&prefs.gui_colorized_bg);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "console_open",
|
|
|
|
"Open a console window",
|
|
|
|
"Open a console window (WIN32 only)",
|
2012-08-17 17:29:51 +00:00
|
|
|
(gint*)(void*)(&prefs.gui_console_open), gui_console_open_type, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "fileopen.style",
|
|
|
|
"Where to start the File Open dialog box",
|
|
|
|
"Where to start the File Open dialog box",
|
|
|
|
&prefs.gui_fileopen_style, gui_fileopen_style, FALSE);
|
|
|
|
|
|
|
|
prefs_register_uint_preference(gui_module, "recent_files_count.max",
|
|
|
|
"The max. number of items in the open recent files list",
|
|
|
|
"The max. number of items in the open recent files list",
|
|
|
|
10,
|
|
|
|
&prefs.gui_recent_files_count_max);
|
|
|
|
|
|
|
|
prefs_register_uint_preference(gui_module, "recent_display_filter_entries.max",
|
|
|
|
"The max. number of entries in the display filter list",
|
|
|
|
"The max. number of entries in the display filter list",
|
|
|
|
10,
|
|
|
|
&prefs.gui_recent_df_entries_max);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(gui_module, "fileopen.dir", "Start Directory",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Directory to start in when opening File Open dialog.", (const char**)(&prefs.gui_fileopen_dir));
|
|
|
|
|
|
|
|
prefs_register_obsolete_preference(gui_module, "fileopen.remembered_dir");
|
|
|
|
|
|
|
|
prefs_register_uint_preference(gui_module, "fileopen.preview",
|
|
|
|
"The preview timeout in the File Open dialog",
|
|
|
|
"The preview timeout in the File Open dialog",
|
|
|
|
10,
|
|
|
|
&prefs.gui_fileopen_preview);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "ask_unsaved",
|
|
|
|
"Ask to save unsaved capture files",
|
|
|
|
"Ask to save unsaved capture files?",
|
2012-08-09 12:46:44 +00:00
|
|
|
&prefs.gui_ask_unsaved);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "find_wrap",
|
|
|
|
"Wrap to beginning/end of file during search",
|
|
|
|
"Wrap to beginning/end of file during search?",
|
|
|
|
&prefs.gui_find_wrap);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "use_pref_save",
|
|
|
|
"Settings dialogs use a save button",
|
|
|
|
"Settings dialogs use a save button?",
|
2012-08-09 12:46:44 +00:00
|
|
|
&prefs.gui_use_pref_save);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "geometry.save.position",
|
|
|
|
"Save window position at exit",
|
|
|
|
"Save window position at exit?",
|
|
|
|
&prefs.gui_geometry_save_position);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "geometry.save.size",
|
|
|
|
"Save window size at exit",
|
|
|
|
"Save window size at exit?",
|
|
|
|
&prefs.gui_geometry_save_size);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "geometry.save.maximized",
|
|
|
|
"Save window maximized state at exit",
|
|
|
|
"Save window maximized state at exit?",
|
|
|
|
&prefs.gui_geometry_save_maximized);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "macosx_style",
|
|
|
|
"Use Mac OS X style",
|
|
|
|
"Use Mac OS X style (Mac OS X with native GTK only)?",
|
|
|
|
&prefs.gui_macosx_style);
|
|
|
|
|
|
|
|
prefs_register_obsolete_preference(gui_module, "geometry.main.x");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "geometry.main.y");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "geometry.main.width");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "geometry.main.height");
|
|
|
|
prefs_register_obsolete_preference(gui_module, "toolbar_main_show");
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "toolbar_main_style",
|
|
|
|
"Main Toolbar style",
|
|
|
|
"Main Toolbar style",
|
|
|
|
&prefs.gui_toolbar_main_style, gui_toolbar_style, FALSE);
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "toolbar_filter_style",
|
|
|
|
"Filter Toolbar style",
|
|
|
|
"Filter Toolbar style",
|
|
|
|
&prefs.gui_toolbar_filter_style, gui_toolbar_style, FALSE);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(gui_module, "webbrowser", "The path to the webbrowser",
|
2012-08-08 16:54:02 +00:00
|
|
|
"The path to the webbrowser (Ex: mozilla)", (const char**)(&prefs.gui_webbrowser));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(gui_module, "window_title", "Custom window title",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Custom window title. (Appended to existing titles.)", (const char**)(&prefs.gui_window_title));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(gui_module, "start_title", "Custom start page title",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Custom start page title", (const char**)(&prefs.gui_start_title));
|
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_module, "version_placement",
|
|
|
|
"Show version in the start page and/or main screen's title bar",
|
|
|
|
"Show version in the start page and/or main screen's title bar",
|
2012-08-17 17:29:51 +00:00
|
|
|
(gint*)(void*)(&prefs.gui_version_placement), gui_version_placement_type, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(gui_module, "auto_scroll_on_expand",
|
|
|
|
"Automatically scroll the recently expanded item",
|
|
|
|
"Automatically scroll the recently expanded item",
|
|
|
|
&prefs.gui_auto_scroll_on_expand);
|
|
|
|
|
|
|
|
prefs_register_uint_preference(gui_module, "auto_scroll_percentage",
|
|
|
|
"The percentage down the view the recently expanded item should be scrolled",
|
|
|
|
"The percentage down the view the recently expanded item should be scrolled",
|
|
|
|
10,
|
|
|
|
&prefs.gui_auto_scroll_percentage);
|
|
|
|
|
|
|
|
/* User Interface : Layout */
|
|
|
|
gui_layout_module = prefs_register_subtree(gui_module, "Layout", "Layout", gui_layout_callback);
|
|
|
|
|
|
|
|
prefs_register_uint_preference(gui_layout_module, "layout_type",
|
|
|
|
"Layout type",
|
|
|
|
"Layout type (1-6)",
|
|
|
|
10,
|
2012-08-17 17:29:51 +00:00
|
|
|
(guint*)(void*)(&prefs.gui_layout_type));
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_layout_module, "layout_content_1",
|
|
|
|
"Layout content of the pane 1",
|
|
|
|
"Layout content of the pane 1",
|
2012-08-17 17:29:51 +00:00
|
|
|
(gint*)(void*)(&prefs.gui_layout_content_1), gui_layout_content, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_layout_module, "layout_content_2",
|
|
|
|
"Layout content of the pane 2",
|
|
|
|
"Layout content of the pane 2",
|
2012-08-17 17:29:51 +00:00
|
|
|
(gint*)(void*)(&prefs.gui_layout_content_2), gui_layout_content, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_enum_preference(gui_layout_module, "layout_content_3",
|
|
|
|
"Layout content of the pane 3",
|
|
|
|
"Layout content of the pane 3",
|
2012-08-17 17:29:51 +00:00
|
|
|
(gint*)(void*)(&prefs.gui_layout_content_3), gui_layout_content, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* Console
|
2012-09-27 16:23:06 +00:00
|
|
|
* These are preferences that can be read/written using the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference module API. These preferences still use their own
|
2012-09-27 16:23:06 +00:00
|
|
|
* configuration screens for access, but this cuts down on the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference "string compare list" in set_pref()
|
|
|
|
*/
|
|
|
|
console_module = prefs_register_module(NULL, "console", "Console",
|
2012-08-08 20:47:20 +00:00
|
|
|
"CONSOLE", NULL, FALSE);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
custom_cbs.free_cb = custom_pref_no_cb;
|
|
|
|
custom_cbs.reset_cb = console_log_level_reset_cb;
|
|
|
|
custom_cbs.set_cb = console_log_level_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = console_log_level_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = console_log_level_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = console_log_level_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = console_log_level_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_uint_custom_preference(console_module, "log.level", "logging level",
|
2012-08-08 20:47:20 +00:00
|
|
|
"A bitmask of glib log levels", &custom_cbs, &prefs.console_log_level);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* Capture
|
2012-09-27 16:23:06 +00:00
|
|
|
* These are preferences that can be read/written using the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference module API. These preferences still use their own
|
2012-09-27 16:23:06 +00:00
|
|
|
* configuration screens for access, but this cuts down on the
|
2012-08-08 16:54:02 +00:00
|
|
|
* preference "string compare list" in set_pref()
|
|
|
|
*/
|
|
|
|
capture_module = prefs_register_module(NULL, "capture", "Capture",
|
|
|
|
"CAPTURE", NULL, FALSE);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(capture_module, "device", "Default capture device",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Default capture device", (const char**)(&prefs.capture_device));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(capture_module, "devices_linktypes", "Interface link-layer header type",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Interface link-layer header types (Ex: en0(1),en1(143),...)",
|
|
|
|
(const char**)(&prefs.capture_devices_linktypes));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(capture_module, "devices_descr", "Interface descriptions",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Interface descriptions (Ex: eth0(eth0 descr),eth1(eth1 descr),...)",
|
|
|
|
(const char**)(&prefs.capture_devices_descr));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(capture_module, "devices_hide", "Hide interface",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Hide interface? (Ex: eth0,eth3,...)", (const char**)(&prefs.capture_devices_hide));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(capture_module, "devices_monitor_mode", "Capture in monitor mode",
|
|
|
|
"By default, capture in monitor mode on interface? (Ex: eth0,eth3,...)",
|
2012-08-08 16:54:02 +00:00
|
|
|
(const char**)(&prefs.capture_devices_monitor_mode));
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_bool_preference(capture_module, "prom_mode", "Capture in promiscuous mode",
|
2012-08-08 16:54:02 +00:00
|
|
|
"Capture in promiscuous mode?", &prefs.capture_prom_mode);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_bool_preference(capture_module, "pcap_ng", "Capture in Pcap-NG format",
|
2012-08-09 12:46:44 +00:00
|
|
|
"Capture in Pcap-NG format?", &prefs.capture_pcap_ng);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(capture_module, "real_time_update", "Update packet list in real time during capture",
|
2012-08-09 12:46:44 +00:00
|
|
|
"Update packet list in real time during capture?", &prefs.capture_real_time);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(capture_module, "auto_scroll", "Scroll packet list during capture",
|
|
|
|
"Scroll packet list during capture?", &prefs.capture_auto_scroll);
|
|
|
|
|
|
|
|
prefs_register_bool_preference(capture_module, "show_info", "Show capture info dialog while capturing",
|
|
|
|
"Show capture info dialog while capturing?", &prefs.capture_show_info);
|
|
|
|
|
|
|
|
prefs_register_obsolete_preference(capture_module, "syntax_check_filter");
|
|
|
|
|
|
|
|
custom_cbs.free_cb = capture_column_free_cb;
|
|
|
|
custom_cbs.reset_cb = capture_column_reset_cb;
|
|
|
|
custom_cbs.set_cb = capture_column_set_cb;
|
2013-01-05 02:30:58 +00:00
|
|
|
custom_cbs.type_name_cb = capture_column_type_name_cb;
|
|
|
|
custom_cbs.type_description_cb = capture_column_type_description_cb;
|
|
|
|
custom_cbs.is_default_cb = capture_column_is_default_cb;
|
|
|
|
custom_cbs.to_str_cb = capture_column_to_str_cb;
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_list_custom_preference(capture_module, "columns", "Capture options dialog column list",
|
2012-08-08 20:47:20 +00:00
|
|
|
"List of columns to be displayed", &custom_cbs, capture_column_init_cb, &prefs.capture_columns);
|
2012-06-25 21:05:36 +00:00
|
|
|
|
2012-07-06 04:48:36 +00:00
|
|
|
/* Name Resolution */
|
|
|
|
nameres_module = prefs_register_module(NULL, "nameres", "Name Resolution",
|
2012-08-08 12:13:24 +00:00
|
|
|
"Name Resolution", NULL, TRUE);
|
2012-07-06 04:48:36 +00:00
|
|
|
addr_resolve_pref_init(nameres_module);
|
|
|
|
oid_pref_init(nameres_module);
|
2012-07-06 12:25:54 +00:00
|
|
|
#ifdef HAVE_GEOIP
|
2012-07-06 04:48:36 +00:00
|
|
|
geoip_db_pref_init(nameres_module);
|
2012-07-06 12:25:54 +00:00
|
|
|
#endif
|
2012-07-06 04:48:36 +00:00
|
|
|
|
|
|
|
/* Printing */
|
|
|
|
printing = prefs_register_module(NULL, "print", "Printing",
|
2012-08-08 12:13:24 +00:00
|
|
|
"Printing", NULL, TRUE);
|
2012-07-06 04:48:36 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_enum_preference(printing, "format",
|
|
|
|
"Format", "Can be one of \"text\" or \"postscript\"",
|
2012-07-06 04:48:36 +00:00
|
|
|
&prefs.pr_format, print_format_vals, TRUE);
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_enum_preference(printing, "destination",
|
|
|
|
"Print to", "Can be one of \"command\" or \"file\"",
|
2012-07-06 04:48:36 +00:00
|
|
|
&prefs.pr_dest, print_dest_vals, TRUE);
|
|
|
|
|
|
|
|
#ifndef _WIN32
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_string_preference(printing, "command", "Command",
|
2012-07-06 12:25:54 +00:00
|
|
|
"Output gets piped to this command when the destination is set to \"command\"", (const char**)(&prefs.pr_cmd));
|
2012-07-06 04:48:36 +00:00
|
|
|
#endif
|
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
prefs_register_filename_preference(printing, "file", "File",
|
2012-07-06 12:25:54 +00:00
|
|
|
"This is the file that gets written to when the destination is set to \"file\"", (const char**)(&prefs.pr_file));
|
2012-07-06 04:48:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* Statistics */
|
|
|
|
stats_module = prefs_register_module(NULL, "statistics", "Statistics",
|
2012-08-08 12:13:24 +00:00
|
|
|
"Statistics", &stats_callback, TRUE);
|
2012-06-25 21:05:36 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
prefs_register_uint_preference(stats_module, "update_interval",
|
|
|
|
"Tap update interval in ms",
|
|
|
|
"Determines time between tap updates",
|
|
|
|
10,
|
|
|
|
&prefs.tap_update_interval);
|
2012-06-25 21:05:36 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_LIBPORTAUDIO
|
2012-07-07 00:30:47 +00:00
|
|
|
prefs_register_uint_preference(stats_module, "rtp_player_max_visible",
|
|
|
|
"Max visible channels in RTP Player",
|
|
|
|
"Determines maximum height of RTP Player window",
|
|
|
|
10,
|
|
|
|
&prefs.rtp_player_max_visible);
|
2012-06-25 21:05:36 +00:00
|
|
|
#endif
|
|
|
|
|
2012-07-06 04:48:36 +00:00
|
|
|
|
|
|
|
/* Protocols */
|
2012-06-25 21:05:36 +00:00
|
|
|
protocols_module = prefs_register_module(NULL, "protocols", "Protocols",
|
2012-08-08 12:13:24 +00:00
|
|
|
"Protocols", NULL, TRUE);
|
2012-06-25 21:05:36 +00:00
|
|
|
|
|
|
|
prefs_register_bool_preference(protocols_module, "display_hidden_proto_items",
|
2012-07-07 00:30:47 +00:00
|
|
|
"Display hidden protocol items",
|
|
|
|
"Display all hidden protocol items in the packet list.",
|
|
|
|
&prefs.display_hidden_proto_items);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* Obsolete preferences
|
2012-09-27 16:23:06 +00:00
|
|
|
* These "modules" were reorganized/renamed to correspond to their GUI
|
2012-08-08 16:54:02 +00:00
|
|
|
* configuration screen within the preferences dialog
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* taps is now part of the stats module */
|
|
|
|
prefs_register_module(NULL, "taps", "TAPS", "TAPS", NULL, FALSE);
|
|
|
|
/* packet_list is now part of the protocol (parent) module */
|
|
|
|
prefs_register_module(NULL, "packet_list", "PACKET_LIST", "PACKET_LIST", NULL, FALSE);
|
|
|
|
/* stream is now part of the gui module */
|
|
|
|
prefs_register_module(NULL, "stream", "STREAM", "STREAM", NULL, FALSE);
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2001-07-22 21:27:54 +00:00
|
|
|
/* Parse through a list of comma-separated, possibly quoted strings.
|
|
|
|
Return a list of the string data. */
|
2008-04-12 19:37:05 +00:00
|
|
|
GList *
|
2012-12-26 05:57:06 +00:00
|
|
|
prefs_get_string_list(const gchar *str)
|
2001-07-22 21:27:54 +00:00
|
|
|
{
|
2001-07-22 22:34:42 +00:00
|
|
|
enum { PRE_STRING, IN_QUOT, NOT_IN_QUOT };
|
|
|
|
|
2001-07-22 22:41:37 +00:00
|
|
|
gint state = PRE_STRING, i = 0, j = 0;
|
2001-07-22 22:34:42 +00:00
|
|
|
gboolean backslash = FALSE;
|
2001-07-23 18:14:36 +00:00
|
|
|
guchar cur_c;
|
|
|
|
gchar *slstr = NULL;
|
1998-11-17 04:29:13 +00:00
|
|
|
GList *sl = NULL;
|
2001-07-22 21:27:54 +00:00
|
|
|
|
|
|
|
/* Allocate a buffer for the first string. */
|
|
|
|
slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
|
|
|
|
j = 0;
|
|
|
|
|
|
|
|
for (;;) {
|
|
|
|
cur_c = str[i];
|
|
|
|
if (cur_c == '\0') {
|
|
|
|
/* It's the end of the input, so it's the end of the string we
|
|
|
|
were working on, and there's no more input. */
|
2001-07-22 22:34:42 +00:00
|
|
|
if (state == IN_QUOT || backslash) {
|
2001-07-22 21:27:54 +00:00
|
|
|
/* We were in the middle of a quoted string or backslash escape,
|
|
|
|
and ran out of characters; that's an error. */
|
|
|
|
g_free(slstr);
|
2008-04-12 19:37:05 +00:00
|
|
|
prefs_clear_string_list(sl);
|
2001-07-22 21:27:54 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
slstr[j] = '\0';
|
|
|
|
sl = g_list_append(sl, slstr);
|
|
|
|
break;
|
|
|
|
}
|
1998-11-17 04:29:13 +00:00
|
|
|
if (cur_c == '"' && ! backslash) {
|
2001-07-22 22:34:42 +00:00
|
|
|
switch (state) {
|
2001-07-22 22:41:37 +00:00
|
|
|
case PRE_STRING:
|
|
|
|
/* We hadn't yet started processing a string; this starts the
|
|
|
|
string, and we're now quoting. */
|
|
|
|
state = IN_QUOT;
|
|
|
|
break;
|
2001-07-22 22:34:42 +00:00
|
|
|
case IN_QUOT:
|
|
|
|
/* We're in the middle of a quoted string, and we saw a quotation
|
|
|
|
mark; we're no longer quoting. */
|
|
|
|
state = NOT_IN_QUOT;
|
|
|
|
break;
|
2001-07-22 22:41:37 +00:00
|
|
|
case NOT_IN_QUOT:
|
|
|
|
/* We're working on a string, but haven't seen a quote; we're
|
|
|
|
now quoting. */
|
|
|
|
state = IN_QUOT;
|
|
|
|
break;
|
2001-07-22 22:34:42 +00:00
|
|
|
default:
|
|
|
|
break;
|
1998-11-17 04:29:13 +00:00
|
|
|
}
|
|
|
|
} else if (cur_c == '\\' && ! backslash) {
|
2001-07-22 21:27:54 +00:00
|
|
|
/* We saw a backslash, and the previous character wasn't a
|
2001-07-22 22:34:42 +00:00
|
|
|
backslash; escape the next character.
|
|
|
|
|
|
|
|
This also means we've started a new string. */
|
1998-11-17 04:29:13 +00:00
|
|
|
backslash = TRUE;
|
2001-07-22 22:34:42 +00:00
|
|
|
if (state == PRE_STRING)
|
|
|
|
state = NOT_IN_QUOT;
|
|
|
|
} else if (cur_c == ',' && state != IN_QUOT && ! backslash) {
|
2001-07-22 21:27:54 +00:00
|
|
|
/* We saw a comma, and we're not in the middle of a quoted string
|
|
|
|
and it wasn't preceded by a backslash; it's the end of
|
|
|
|
the string we were working on... */
|
|
|
|
slstr[j] = '\0';
|
|
|
|
sl = g_list_append(sl, slstr);
|
|
|
|
|
|
|
|
/* ...and the beginning of a new string. */
|
2001-07-22 22:34:42 +00:00
|
|
|
state = PRE_STRING;
|
2001-07-22 21:27:54 +00:00
|
|
|
slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
|
|
|
|
j = 0;
|
2001-07-22 22:34:42 +00:00
|
|
|
} else if (!isspace(cur_c) || state != PRE_STRING) {
|
|
|
|
/* Either this isn't a white-space character, or we've started a
|
|
|
|
string (i.e., already seen a non-white-space character for that
|
|
|
|
string and put it into the string).
|
|
|
|
|
|
|
|
The character is to be put into the string; do so if there's
|
|
|
|
room. */
|
2001-07-22 21:27:54 +00:00
|
|
|
if (j < COL_MAX_LEN) {
|
|
|
|
slstr[j] = cur_c;
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If it was backslash-escaped, we're done with the backslash escape. */
|
|
|
|
backslash = FALSE;
|
1998-11-17 04:29:13 +00:00
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return(sl);
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
static char *
|
|
|
|
join_string_list(GList *sl)
|
2001-07-22 21:56:25 +00:00
|
|
|
{
|
2013-01-05 02:30:58 +00:00
|
|
|
GString *joined_str = g_string_new("");
|
2013-01-06 19:13:33 +00:00
|
|
|
GList *cur, *first;
|
2013-01-05 02:30:58 +00:00
|
|
|
gchar *str;
|
|
|
|
gchar *quoted_str;
|
|
|
|
guint item_count = 0;
|
|
|
|
|
|
|
|
cur = first = g_list_first(sl);
|
|
|
|
while (cur) {
|
|
|
|
item_count++;
|
|
|
|
str = cur->data;
|
|
|
|
|
|
|
|
if (cur != first) {
|
|
|
|
g_string_append_c(joined_str, ',');
|
|
|
|
}
|
2012-09-21 12:29:04 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
if (item_count % 2) {
|
|
|
|
/* Wrap the line. */
|
|
|
|
g_string_append(joined_str, "\n\t");
|
|
|
|
} else {
|
|
|
|
g_string_append_c(joined_str, ' ');
|
2012-08-09 00:46:17 +00:00
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
|
|
|
|
quoted_str = g_strescape(str, "");
|
|
|
|
g_string_append_printf(joined_str, "\"%s\"", quoted_str);
|
|
|
|
g_free(quoted_str);
|
|
|
|
|
|
|
|
cur = cur->next;
|
2001-07-23 00:12:47 +00:00
|
|
|
}
|
2013-01-14 22:21:11 +00:00
|
|
|
return g_string_free(joined_str, FALSE);
|
2002-08-28 21:04:11 +00:00
|
|
|
}
|
2001-07-22 21:56:25 +00:00
|
|
|
|
2008-04-12 19:37:05 +00:00
|
|
|
void
|
|
|
|
prefs_clear_string_list(GList *sl)
|
2001-07-22 22:34:42 +00:00
|
|
|
{
|
1998-11-17 04:29:13 +00:00
|
|
|
GList *l = sl;
|
2002-08-28 21:04:11 +00:00
|
|
|
|
1998-11-17 04:29:13 +00:00
|
|
|
while (l) {
|
|
|
|
g_free(l->data);
|
|
|
|
l = g_list_remove_link(l, l);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
2000-11-18 21:41:40 +00:00
|
|
|
* Takes a string, a pointer to an array of "enum_val_t"s, and a default gint
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
* value.
|
|
|
|
* The array must be terminated by an entry with a null "name" string.
|
2004-05-24 02:25:21 +00:00
|
|
|
*
|
|
|
|
* If the string matches a "name" string in an entry, the value from that
|
|
|
|
* entry is returned.
|
|
|
|
*
|
|
|
|
* Otherwise, if a string matches a "desctiption" string in an entry, the
|
|
|
|
* value from that entry is returned; we do that for backwards compatibility,
|
|
|
|
* as we used to have only a "name" string that was used both for command-line
|
|
|
|
* and configuration-file values and in the GUI (which meant either that
|
|
|
|
* the GUI had what might be somewhat cryptic values to select from or that
|
|
|
|
* the "-o" flag took long strings, often with spaces in them).
|
|
|
|
*
|
|
|
|
* Otherwise, the default value that was passed as the third argument is
|
|
|
|
* returned.
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*/
|
2010-05-25 20:57:14 +00:00
|
|
|
static gint
|
2000-11-18 21:41:40 +00:00
|
|
|
find_val_for_string(const char *needle, const enum_val_t *haystack,
|
2012-07-07 00:30:47 +00:00
|
|
|
gint default_value)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; haystack[i].name != NULL; i++) {
|
|
|
|
if (g_ascii_strcasecmp(needle, haystack[i].name) == 0) {
|
|
|
|
return haystack[i].value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (i = 0; haystack[i].name != NULL; i++) {
|
|
|
|
if (g_ascii_strcasecmp(needle, haystack[i].description) == 0) {
|
|
|
|
return haystack[i].value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return default_value;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
/* Preferences file format:
|
2002-08-28 21:04:11 +00:00
|
|
|
* - Configuration directives start at the beginning of the line, and
|
1998-10-28 21:38:11 +00:00
|
|
|
* are terminated with a colon.
|
|
|
|
* - Directives can be continued on the next line by preceding them with
|
|
|
|
* whitespace.
|
|
|
|
*
|
|
|
|
* Example:
|
|
|
|
|
|
|
|
# This is a comment line
|
|
|
|
print.command: lpr
|
|
|
|
print.file: /a/very/long/path/
|
2012-07-07 00:30:47 +00:00
|
|
|
to/wireshark-out.ps
|
1998-10-28 21:38:11 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-11-29 20:43:24 +00:00
|
|
|
#define DEF_NUM_COLS 7
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2011-11-13 22:51:49 +00:00
|
|
|
/*
|
|
|
|
* Parse a column format, filling in the relevant fields of a fmt_data.
|
|
|
|
*/
|
|
|
|
static gboolean
|
|
|
|
parse_column_format(fmt_data *cfmt, const char *fmt)
|
|
|
|
{
|
|
|
|
const gchar *cust_format = col_format_to_string(COL_CUSTOM);
|
|
|
|
size_t cust_format_len = strlen(cust_format);
|
|
|
|
gchar **cust_format_info;
|
|
|
|
char *p;
|
|
|
|
int col_fmt;
|
|
|
|
gchar *col_custom_field;
|
|
|
|
long col_custom_occurrence;
|
|
|
|
gboolean col_resolved;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Is this a custom column?
|
|
|
|
*/
|
|
|
|
if ((strlen(fmt) > cust_format_len) && (fmt[cust_format_len] == ':') &&
|
|
|
|
strncmp(fmt, cust_format, cust_format_len) == 0) {
|
|
|
|
/* Yes. */
|
|
|
|
col_fmt = COL_CUSTOM;
|
|
|
|
cust_format_info = g_strsplit(&fmt[cust_format_len+1],":",3); /* add 1 for ':' */
|
|
|
|
col_custom_field = g_strdup(cust_format_info[0]);
|
|
|
|
if (col_custom_field && cust_format_info[1]) {
|
|
|
|
col_custom_occurrence = strtol(cust_format_info[1], &p, 10);
|
|
|
|
if (p == cust_format_info[1] || *p != '\0') {
|
|
|
|
/* Not a valid number. */
|
|
|
|
g_free(col_custom_field);
|
|
|
|
g_strfreev(cust_format_info);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
col_custom_occurrence = 0;
|
|
|
|
}
|
|
|
|
if (col_custom_field && cust_format_info[1] && cust_format_info[2]) {
|
|
|
|
col_resolved = (cust_format_info[2][0] == 'U') ? FALSE : TRUE;
|
|
|
|
} else {
|
|
|
|
col_resolved = TRUE;
|
|
|
|
}
|
|
|
|
g_strfreev(cust_format_info);
|
|
|
|
} else {
|
|
|
|
col_fmt = get_column_format_from_str(fmt);
|
|
|
|
if (col_fmt == -1)
|
|
|
|
return FALSE;
|
|
|
|
col_custom_field = NULL;
|
|
|
|
col_custom_occurrence = 0;
|
|
|
|
col_resolved = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
cfmt->fmt = col_fmt;
|
|
|
|
cfmt->custom_field = col_custom_field;
|
|
|
|
cfmt->custom_occurrence = (int)col_custom_occurrence;
|
|
|
|
cfmt->resolved = col_resolved;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2011-11-10 00:53:48 +00:00
|
|
|
/* Initialize non-dissector preferences to wired-in default values.
|
|
|
|
* (The dissector preferences are assumed to be set to those values
|
|
|
|
* by the dissectors.)
|
2005-07-27 16:25:44 +00:00
|
|
|
* They may be overridden by the global preferences file or the
|
|
|
|
* user's preferences file.
|
|
|
|
*/
|
2005-08-02 04:34:35 +00:00
|
|
|
static void
|
2012-05-16 03:06:08 +00:00
|
|
|
init_prefs(void)
|
2012-08-08 16:54:02 +00:00
|
|
|
{
|
|
|
|
if (prefs_initialized)
|
|
|
|
return;
|
|
|
|
|
|
|
|
uat_load_all();
|
|
|
|
|
|
|
|
pre_init_prefs();
|
|
|
|
|
|
|
|
filter_expression_init(TRUE);
|
|
|
|
|
|
|
|
prefs_initialized = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Initialize non-dissector preferences used by the "register preference" API
|
|
|
|
* to default values so the default values can be used when registered
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
pre_init_prefs(void)
|
2012-05-16 03:06:08 +00:00
|
|
|
{
|
2005-07-27 16:25:44 +00:00
|
|
|
int i;
|
2012-08-03 11:15:40 +00:00
|
|
|
gchar *col_name;
|
2012-08-08 16:54:02 +00:00
|
|
|
fmt_data *cfmt;
|
2011-11-13 22:51:49 +00:00
|
|
|
static const gchar *col_fmt[DEF_NUM_COLS*2] = {
|
|
|
|
"No.", "%m", "Time", "%t",
|
2010-01-26 23:05:40 +00:00
|
|
|
"Source", "%s", "Destination", "%d",
|
2010-11-29 20:43:24 +00:00
|
|
|
"Protocol", "%p", "Length", "%L",
|
|
|
|
"Info", "%i"};
|
2012-08-03 11:15:40 +00:00
|
|
|
#if defined(HAVE_PCAP_CREATE)
|
|
|
|
static gint num_capture_cols = 7;
|
|
|
|
static const gchar *capture_cols[7] = {
|
|
|
|
"INTERFACE",
|
|
|
|
"LINK",
|
|
|
|
"PMODE",
|
|
|
|
"SNAPLEN",
|
|
|
|
"MONITOR",
|
2012-09-27 16:23:06 +00:00
|
|
|
"BUFFER",
|
2012-08-03 11:15:40 +00:00
|
|
|
"FILTER"};
|
|
|
|
#elif defined(_WIN32) && !defined (HAVE_PCAP_CREATE)
|
|
|
|
static gint num_capture_cols = 6;
|
|
|
|
static const gchar *capture_cols[6] = {
|
|
|
|
"INTERFACE",
|
|
|
|
"LINK",
|
|
|
|
"PMODE",
|
|
|
|
"SNAPLEN",
|
2012-09-27 16:23:06 +00:00
|
|
|
"BUFFER",
|
2012-08-03 11:15:40 +00:00
|
|
|
"FILTER"};
|
|
|
|
#else
|
|
|
|
static gint num_capture_cols = 5;
|
|
|
|
static const gchar *capture_cols[5] = {
|
|
|
|
"INTERFACE",
|
|
|
|
"LINK",
|
|
|
|
"PMODE",
|
|
|
|
"SNAPLEN",
|
|
|
|
"FILTER"};
|
|
|
|
#endif
|
2005-07-27 16:25:44 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
if (prefs_pre_initialized)
|
|
|
|
return;
|
2008-02-15 22:36:24 +00:00
|
|
|
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.pr_format = PR_FMT_TEXT;
|
|
|
|
prefs.pr_dest = PR_DEST_CMD;
|
2012-10-27 20:29:12 +00:00
|
|
|
prefs.pr_file = "wireshark.out";
|
|
|
|
prefs.pr_cmd = "lpr";
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_altern_colors = FALSE;
|
2011-08-03 18:45:06 +00:00
|
|
|
prefs.gui_expert_composite_eyecandy = FALSE;
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_ptree_line_style = 0;
|
|
|
|
prefs.gui_ptree_expander_style = 1;
|
|
|
|
prefs.gui_hex_dump_highlight_style = 1;
|
|
|
|
prefs.filter_toolbar_show_in_statusbar = FALSE;
|
|
|
|
prefs.gui_toolbar_main_style = TB_STYLE_ICONS;
|
2009-09-25 05:19:18 +00:00
|
|
|
prefs.gui_toolbar_filter_style = TB_STYLE_TEXT;
|
2012-12-26 05:57:06 +00:00
|
|
|
/* This can be g_freed, so it must be g_mallocated. */
|
2005-07-27 16:25:44 +00:00
|
|
|
#ifdef _WIN32
|
2013-01-24 01:10:12 +00:00
|
|
|
prefs.gui_gtk2_font_name = g_strdup("Lucida Console 10");
|
2005-07-27 16:25:44 +00:00
|
|
|
#else
|
2013-01-24 01:10:12 +00:00
|
|
|
prefs.gui_gtk2_font_name = g_strdup("Monospace 10");
|
2005-07-27 16:25:44 +00:00
|
|
|
#endif
|
2013-01-24 01:10:12 +00:00
|
|
|
/* We try to find the best font in the Qt code */
|
|
|
|
prefs.gui_qt_font_name = g_strdup("");
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_marked_fg.pixel = 65535;
|
|
|
|
prefs.gui_marked_fg.red = 65535;
|
|
|
|
prefs.gui_marked_fg.green = 65535;
|
|
|
|
prefs.gui_marked_fg.blue = 65535;
|
|
|
|
prefs.gui_marked_bg.pixel = 0;
|
|
|
|
prefs.gui_marked_bg.red = 0;
|
|
|
|
prefs.gui_marked_bg.green = 0;
|
|
|
|
prefs.gui_marked_bg.blue = 0;
|
2009-12-17 01:18:14 +00:00
|
|
|
prefs.gui_ignored_fg.pixel = 32767;
|
|
|
|
prefs.gui_ignored_fg.red = 32767;
|
|
|
|
prefs.gui_ignored_fg.green = 32767;
|
|
|
|
prefs.gui_ignored_fg.blue = 32767;
|
|
|
|
prefs.gui_ignored_bg.pixel = 65535;
|
|
|
|
prefs.gui_ignored_bg.red = 65535;
|
|
|
|
prefs.gui_ignored_bg.green = 65535;
|
|
|
|
prefs.gui_ignored_bg.blue = 65535;
|
2012-10-27 20:29:12 +00:00
|
|
|
prefs.gui_colorized_fg = "000000,000000,000000,000000,000000,000000,000000,000000,000000,000000";
|
|
|
|
prefs.gui_colorized_bg = "ffc0c0,ffc0ff,e0c0e0,c0c0ff,c0e0e0,c0ffff,c0ffc0,ffffc0,e0e0c0,e0e0e0";
|
2012-08-08 16:54:02 +00:00
|
|
|
prefs.st_client_fg.pixel = 0;
|
|
|
|
prefs.st_client_fg.red = 32767;
|
|
|
|
prefs.st_client_fg.green = 0;
|
|
|
|
prefs.st_client_fg.blue = 0;
|
|
|
|
prefs.st_client_bg.pixel = 0;
|
|
|
|
prefs.st_client_bg.red = 64507;
|
|
|
|
prefs.st_client_bg.green = 60909;
|
|
|
|
prefs.st_client_bg.blue = 60909;
|
|
|
|
prefs.st_server_fg.pixel = 0;
|
|
|
|
prefs.st_server_fg.red = 0;
|
|
|
|
prefs.st_server_fg.green = 0;
|
|
|
|
prefs.st_server_fg.blue = 32767;
|
|
|
|
prefs.st_server_bg.pixel = 0;
|
|
|
|
prefs.st_server_bg.red = 60909;
|
|
|
|
prefs.st_server_bg.green = 60909;
|
|
|
|
prefs.st_server_bg.blue = 64507;
|
2012-10-05 21:58:45 +00:00
|
|
|
prefs.gui_geometry_save_position = TRUE;
|
2012-08-08 16:54:02 +00:00
|
|
|
prefs.gui_geometry_save_size = TRUE;
|
|
|
|
prefs.gui_geometry_save_maximized= TRUE;
|
2008-10-26 23:07:37 +00:00
|
|
|
prefs.gui_macosx_style = TRUE;
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_console_open = console_open_never;
|
|
|
|
prefs.gui_fileopen_style = FO_STYLE_LAST_OPENED;
|
2008-08-08 19:41:35 +00:00
|
|
|
prefs.gui_recent_df_entries_max = 10;
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_recent_files_count_max = 10;
|
2012-11-03 15:08:00 +00:00
|
|
|
prefs.gui_fileopen_dir = wmem_strdup(wmem_epan_scope(), get_persdatafile_dir());
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_fileopen_preview = 3;
|
|
|
|
prefs.gui_ask_unsaved = TRUE;
|
|
|
|
prefs.gui_find_wrap = TRUE;
|
2006-10-03 19:53:10 +00:00
|
|
|
prefs.gui_use_pref_save = FALSE;
|
2012-12-26 05:57:06 +00:00
|
|
|
/* This can be g_freed, so it must be g_mallocated. */
|
|
|
|
prefs.gui_webbrowser = g_strdup(HTML_VIEWER " %s");
|
|
|
|
/* This can be g_freed, so it must be g_mallocated. */
|
|
|
|
prefs.gui_window_title = g_strdup("");
|
2012-10-27 20:29:12 +00:00
|
|
|
prefs.gui_start_title = "The World's Most Popular Network Protocol Analyzer";
|
2012-07-31 07:27:39 +00:00
|
|
|
prefs.gui_version_placement = version_both;
|
2011-08-16 10:57:52 +00:00
|
|
|
prefs.gui_auto_scroll_on_expand = FALSE;
|
|
|
|
prefs.gui_auto_scroll_percentage = 0;
|
2005-07-27 16:25:44 +00:00
|
|
|
prefs.gui_layout_type = layout_type_5;
|
|
|
|
prefs.gui_layout_content_1 = layout_pane_content_plist;
|
|
|
|
prefs.gui_layout_content_2 = layout_pane_content_pdetails;
|
|
|
|
prefs.gui_layout_content_3 = layout_pane_content_pbytes;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
prefs.col_list = NULL;
|
|
|
|
for (i = 0; i < DEF_NUM_COLS; i++) {
|
|
|
|
cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
|
|
|
|
cfmt->title = g_strdup(col_fmt[i * 2]);
|
|
|
|
parse_column_format(cfmt, col_fmt[(i * 2) + 1]);
|
|
|
|
cfmt->visible = TRUE;
|
|
|
|
cfmt->resolved = TRUE;
|
|
|
|
cfmt->custom_field = NULL;
|
|
|
|
cfmt->custom_occurrence = 0;
|
|
|
|
prefs.col_list = g_list_append(prefs.col_list, cfmt);
|
|
|
|
}
|
|
|
|
prefs.num_cols = DEF_NUM_COLS;
|
2005-07-27 16:25:44 +00:00
|
|
|
|
|
|
|
/* set the default values for the capture dialog box */
|
2010-05-15 19:38:13 +00:00
|
|
|
prefs.capture_prom_mode = TRUE;
|
2011-06-17 17:52:31 +00:00
|
|
|
#ifdef PCAP_NG_DEFAULT
|
|
|
|
prefs.capture_pcap_ng = TRUE;
|
|
|
|
#else
|
2010-05-15 19:38:13 +00:00
|
|
|
prefs.capture_pcap_ng = FALSE;
|
2011-06-17 17:52:31 +00:00
|
|
|
#endif
|
2010-05-15 19:38:13 +00:00
|
|
|
prefs.capture_real_time = TRUE;
|
|
|
|
prefs.capture_auto_scroll = TRUE;
|
|
|
|
prefs.capture_show_info = FALSE;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
2012-08-03 11:15:40 +00:00
|
|
|
prefs.capture_columns = NULL;
|
|
|
|
for (i = 0; i < num_capture_cols; i++) {
|
|
|
|
col_name = g_strdup(capture_cols[i]);
|
|
|
|
prefs.capture_columns = g_list_append(prefs.capture_columns, col_name);
|
|
|
|
}
|
2008-01-16 07:36:34 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
prefs.console_log_level =
|
|
|
|
G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR;
|
|
|
|
|
2008-04-21 10:57:32 +00:00
|
|
|
/* set the default values for the tap/statistics dialog box */
|
2010-05-15 19:38:13 +00:00
|
|
|
prefs.tap_update_interval = TAP_UPDATE_DEFAULT_INTERVAL;
|
2008-01-16 07:36:34 +00:00
|
|
|
prefs.rtp_player_max_visible = RTP_PLAYER_DEFAULT_VISIBLE;
|
|
|
|
|
2008-04-17 23:14:01 +00:00
|
|
|
prefs.display_hidden_proto_items = FALSE;
|
2012-05-16 03:06:08 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
prefs_pre_initialized = TRUE;
|
2005-07-27 16:25:44 +00:00
|
|
|
}
|
|
|
|
|
2011-11-10 00:53:48 +00:00
|
|
|
/*
|
|
|
|
* Reset a single dissector preference.
|
|
|
|
*/
|
2013-01-18 00:50:14 +00:00
|
|
|
static void
|
2013-01-07 19:13:03 +00:00
|
|
|
reset_pref(pref_t *pref)
|
2011-11-10 00:53:48 +00:00
|
|
|
{
|
2013-01-07 19:13:03 +00:00
|
|
|
if (!pref) return;
|
2012-07-07 00:30:47 +00:00
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
|
|
|
|
case PREF_UINT:
|
|
|
|
*pref->varp.uint = pref->default_val.uint;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
|
|
|
*pref->varp.boolp = pref->default_val.boolval;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
|
|
|
/*
|
|
|
|
* For now, we save the "description" value, so that if we
|
|
|
|
* save the preferences older versions of Wireshark can at
|
|
|
|
* least read preferences that they supported; we support
|
|
|
|
* either the short name or the description when reading
|
|
|
|
* the preferences file or a "-o" option.
|
|
|
|
*/
|
|
|
|
*pref->varp.enump = pref->default_val.enumval;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STRING:
|
|
|
|
case PREF_FILENAME:
|
|
|
|
g_free((void *)*pref->varp.string);
|
|
|
|
*pref->varp.string = g_strdup(pref->default_val.string);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_RANGE:
|
|
|
|
g_free(*pref->varp.range);
|
|
|
|
*pref->varp.range = range_copy(pref->default_val.range);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
case PREF_UAT:
|
|
|
|
/* Nothing to do */
|
|
|
|
break;
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_COLOR:
|
2013-01-18 00:50:14 +00:00
|
|
|
*pref->varp.colorp = pref->default_val.color;
|
2012-08-08 12:13:24 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_CUSTOM:
|
|
|
|
pref->custom_cbs.reset_cb(pref);
|
|
|
|
break;
|
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
case PREF_OBSOLETE:
|
|
|
|
/*
|
|
|
|
* This preference is no longer supported; it's not a
|
|
|
|
* real preference, so we don't reset it (i.e., we
|
|
|
|
* treat it as if it weren't found in the list of
|
|
|
|
* preferences, and we weren't called in the first place).
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
2011-11-10 00:53:48 +00:00
|
|
|
}
|
|
|
|
|
2013-01-07 19:13:03 +00:00
|
|
|
static void
|
|
|
|
reset_pref_cb(gpointer data, gpointer user_data _U_)
|
|
|
|
{
|
|
|
|
pref_t *pref = (pref_t *) data;
|
|
|
|
reset_pref(pref);
|
|
|
|
}
|
|
|
|
|
2011-11-10 00:53:48 +00:00
|
|
|
typedef struct {
|
2012-07-07 00:30:47 +00:00
|
|
|
module_t *module;
|
2011-11-10 00:53:48 +00:00
|
|
|
} reset_pref_arg_t;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Reset all preferences for a module.
|
|
|
|
*/
|
|
|
|
static gboolean
|
|
|
|
reset_module_prefs(void *value, void *data _U_)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
reset_pref_arg_t arg;
|
2011-11-10 00:53:48 +00:00
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
arg.module = value;
|
2013-01-07 19:13:03 +00:00
|
|
|
g_list_foreach(arg.module->prefs, reset_pref_cb, &arg);
|
2012-07-07 00:30:47 +00:00
|
|
|
return FALSE;
|
2011-11-10 00:53:48 +00:00
|
|
|
}
|
|
|
|
|
2008-01-14 16:40:23 +00:00
|
|
|
/* Reset preferences */
|
|
|
|
void
|
|
|
|
prefs_reset(void)
|
|
|
|
{
|
|
|
|
prefs_initialized = FALSE;
|
2009-03-13 22:06:48 +00:00
|
|
|
|
2011-11-10 00:53:48 +00:00
|
|
|
/*
|
|
|
|
* Unload all UAT preferences.
|
|
|
|
*/
|
2008-01-19 01:18:35 +00:00
|
|
|
uat_unload_all();
|
2011-11-10 00:53:48 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Unload any loaded MIBs.
|
|
|
|
*/
|
2010-03-03 17:19:30 +00:00
|
|
|
oids_cleanup();
|
2011-11-10 00:53:48 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Reset the non-dissector preferences.
|
|
|
|
*/
|
2008-01-14 16:40:23 +00:00
|
|
|
init_prefs();
|
2011-11-10 00:53:48 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Reset the non-UAT dissector preferences.
|
|
|
|
*/
|
|
|
|
pe_tree_foreach(prefs_modules, reset_module_prefs, NULL);
|
2008-01-14 16:40:23 +00:00
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
/* Read the preferences file, fill in "prefs", and return a pointer to it.
|
|
|
|
|
|
|
|
If we got an error (other than "it doesn't exist") trying to read
|
|
|
|
the global preferences file, stuff the errno into "*gpf_errno_return"
|
|
|
|
and a pointer to the path of the file into "*gpf_path_return", and
|
|
|
|
return NULL.
|
|
|
|
|
|
|
|
If we got an error (other than "it doesn't exist") trying to read
|
|
|
|
the user's preferences file, stuff the errno into "*pf_errno_return"
|
|
|
|
and a pointer to the path of the file into "*pf_path_return", and
|
|
|
|
return NULL. */
|
1998-11-17 04:29:13 +00:00
|
|
|
e_prefs *
|
2003-08-07 00:41:28 +00:00
|
|
|
read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
|
2012-07-07 00:30:47 +00:00
|
|
|
char **gpf_path_return, int *pf_errno_return,
|
|
|
|
int *pf_read_errno_return, char **pf_path_return)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2003-08-07 00:41:28 +00:00
|
|
|
int err;
|
2005-07-22 07:55:51 +00:00
|
|
|
char *pf_path;
|
|
|
|
FILE *pf;
|
1998-11-17 04:29:13 +00:00
|
|
|
|
2010-03-03 17:19:30 +00:00
|
|
|
/* clean up libsmi structures before reading prefs */
|
2012-07-06 04:48:36 +00:00
|
|
|
oids_cleanup();
|
2010-03-03 17:19:30 +00:00
|
|
|
|
2005-07-27 16:25:44 +00:00
|
|
|
init_prefs();
|
2008-02-15 22:36:24 +00:00
|
|
|
|
2005-03-01 00:05:57 +00:00
|
|
|
/*
|
|
|
|
* If we don't already have the pathname of the global preferences
|
|
|
|
* file, construct it. Then, in either case, try to open the file.
|
|
|
|
*/
|
|
|
|
if (gpf_path == NULL) {
|
|
|
|
/*
|
|
|
|
* We don't have the path; try the new path first, and, if that
|
|
|
|
* file doesn't exist, try the old path.
|
|
|
|
*/
|
|
|
|
gpf_path = get_datafile_path(PF_NAME);
|
2008-05-22 15:46:27 +00:00
|
|
|
if ((pf = ws_fopen(gpf_path, "r")) == NULL && errno == ENOENT) {
|
2005-03-01 00:05:57 +00:00
|
|
|
/*
|
|
|
|
* It doesn't exist by the new name; try the old name.
|
|
|
|
*/
|
2005-03-24 03:10:31 +00:00
|
|
|
g_free(gpf_path);
|
2005-03-01 00:05:57 +00:00
|
|
|
gpf_path = get_datafile_path(OLD_GPF_NAME);
|
2008-05-22 15:46:27 +00:00
|
|
|
pf = ws_fopen(gpf_path, "r");
|
2005-03-01 00:05:57 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* We have the path; try it.
|
|
|
|
*/
|
2008-05-22 15:46:27 +00:00
|
|
|
pf = ws_fopen(gpf_path, "r");
|
2005-03-01 00:05:57 +00:00
|
|
|
}
|
On Windows, use the directory in which the binary resides as the
directory in which global data files are stored. If an installed binary
is being run, that's the correct directory for them; if a build-tree
binary is being run, the "manuf" file will be there, and you can put
other data files there as well, if necessary.
Do the same with plugins, except that, if there's no
"plugins\\{version}" subdirectory of that directory, fall back on the
default installation directory, so you at least have a place where you
can put plugins for use by build-tree binaries. (Should we, instead,
have the Windows build procedure create a subdirectory of the "plugins"
source directory, with the plugin version number as its name, and copy
the plugins there, so you'd use the build-tree plugin binaries?)
Move "test_for_directory()" out of "util.c" and into
"epan/filesystem.c", with the other file system access portability
wrappers and convenience routines. Fix "util.h" not to declare it - or
other routines moved to "epan/filesystem.c" a while ago.
svn path=/trunk/; revision=3858
2001-08-21 06:39:18 +00:00
|
|
|
|
2005-03-01 00:05:57 +00:00
|
|
|
/*
|
|
|
|
* If we were able to open the file, read it.
|
|
|
|
* XXX - if it failed for a reason other than "it doesn't exist",
|
|
|
|
* report the error.
|
|
|
|
*/
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
*gpf_path_return = NULL;
|
2005-03-01 00:05:57 +00:00
|
|
|
if (pf != NULL) {
|
2003-12-13 17:24:47 +00:00
|
|
|
/*
|
|
|
|
* Start out the counters of "mgcp.{tcp,udp}.port" entries we've
|
|
|
|
* seen.
|
|
|
|
*/
|
|
|
|
mgcp_tcp_port_count = 0;
|
|
|
|
mgcp_udp_port_count = 0;
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/* We succeeded in opening it; read it. */
|
2006-11-15 23:33:39 +00:00
|
|
|
err = read_prefs_file(gpf_path, pf, set_pref, NULL);
|
2003-08-07 00:41:28 +00:00
|
|
|
if (err != 0) {
|
|
|
|
/* We had an error reading the file; return the errno and the
|
|
|
|
pathname, so our caller can report the error. */
|
|
|
|
*gpf_errno_return = 0;
|
|
|
|
*gpf_read_errno_return = err;
|
|
|
|
*gpf_path_return = gpf_path;
|
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
fclose(pf);
|
|
|
|
} else {
|
|
|
|
/* We failed to open it. If we failed for some reason other than
|
|
|
|
"it doesn't exist", return the errno and the pathname, so our
|
|
|
|
caller can report the error. */
|
|
|
|
if (errno != ENOENT) {
|
|
|
|
*gpf_errno_return = errno;
|
2003-08-07 00:41:28 +00:00
|
|
|
*gpf_read_errno_return = 0;
|
On Windows, use the directory in which the binary resides as the
directory in which global data files are stored. If an installed binary
is being run, that's the correct directory for them; if a build-tree
binary is being run, the "manuf" file will be there, and you can put
other data files there as well, if necessary.
Do the same with plugins, except that, if there's no
"plugins\\{version}" subdirectory of that directory, fall back on the
default installation directory, so you at least have a place where you
can put plugins for use by build-tree binaries. (Should we, instead,
have the Windows build procedure create a subdirectory of the "plugins"
source directory, with the plugin version number as its name, and copy
the plugins there, so you'd use the build-tree plugin binaries?)
Move "test_for_directory()" out of "util.c" and into
"epan/filesystem.c", with the other file system access portability
wrappers and convenience routines. Fix "util.h" not to declare it - or
other routines moved to "epan/filesystem.c" a while ago.
svn path=/trunk/; revision=3858
2001-08-21 06:39:18 +00:00
|
|
|
*gpf_path_return = gpf_path;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Construct the pathname of the user's preferences file. */
|
2008-01-14 16:40:23 +00:00
|
|
|
pf_path = get_persconffile_path(PF_NAME, TRUE, FALSE);
|
2002-08-28 21:04:11 +00:00
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/* Read the user's preferences file, if it exists. */
|
1999-06-12 07:04:35 +00:00
|
|
|
*pf_path_return = NULL;
|
2008-05-22 15:46:27 +00:00
|
|
|
if ((pf = ws_fopen(pf_path, "r")) != NULL) {
|
2003-12-13 17:24:47 +00:00
|
|
|
/*
|
|
|
|
* Start out the counters of "mgcp.{tcp,udp}.port" entries we've
|
|
|
|
* seen.
|
|
|
|
*/
|
|
|
|
mgcp_tcp_port_count = 0;
|
|
|
|
mgcp_udp_port_count = 0;
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/* We succeeded in opening it; read it. */
|
2006-11-15 23:33:39 +00:00
|
|
|
err = read_prefs_file(pf_path, pf, set_pref, NULL);
|
2003-08-07 00:41:28 +00:00
|
|
|
if (err != 0) {
|
|
|
|
/* We had an error reading the file; return the errno and the
|
|
|
|
pathname, so our caller can report the error. */
|
|
|
|
*pf_errno_return = 0;
|
|
|
|
*pf_read_errno_return = err;
|
|
|
|
*pf_path_return = pf_path;
|
|
|
|
} else
|
|
|
|
g_free(pf_path);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
fclose(pf);
|
|
|
|
} else {
|
|
|
|
/* We failed to open it. If we failed for some reason other than
|
|
|
|
"it doesn't exist", return the errno and the pathname, so our
|
|
|
|
caller can report the error. */
|
|
|
|
if (errno != ENOENT) {
|
|
|
|
*pf_errno_return = errno;
|
2003-08-07 00:41:28 +00:00
|
|
|
*pf_read_errno_return = 0;
|
1999-06-12 07:04:35 +00:00
|
|
|
*pf_path_return = pf_path;
|
2005-03-24 03:10:31 +00:00
|
|
|
} else
|
|
|
|
g_free(pf_path);
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2010-03-03 17:19:30 +00:00
|
|
|
/* load SMI modules if needed */
|
2012-07-06 04:48:36 +00:00
|
|
|
oids_init();
|
2012-09-27 16:23:06 +00:00
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
return &prefs;
|
|
|
|
}
|
|
|
|
|
2006-12-05 00:43:00 +00:00
|
|
|
/* read the preferences file (or similiar) and call the callback
|
2003-12-13 17:24:47 +00:00
|
|
|
* function to set each key/value pair found */
|
|
|
|
int
|
2010-05-26 01:51:41 +00:00
|
|
|
read_prefs_file(const char *pf_path, FILE *pf,
|
2012-07-07 00:30:47 +00:00
|
|
|
pref_set_pair_cb pref_set_pair_fct, void *private_data)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
|
|
|
enum { START, IN_VAR, PRE_VAL, IN_VAL, IN_SKIP };
|
|
|
|
int got_c, state = START;
|
2005-06-21 22:02:18 +00:00
|
|
|
GString *cur_val;
|
|
|
|
GString *cur_var;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
gboolean got_val = FALSE;
|
2005-06-13 22:40:11 +00:00
|
|
|
gint fline = 1, pline = 1;
|
2006-10-03 21:25:16 +00:00
|
|
|
gchar hint[] = "(applying your preferences once should remove this warning)";
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2005-06-21 22:02:18 +00:00
|
|
|
cur_val = g_string_new("");
|
|
|
|
cur_var = g_string_new("");
|
2005-06-18 20:57:01 +00:00
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
while ((got_c = getc(pf)) != EOF) {
|
|
|
|
if (got_c == '\n') {
|
|
|
|
state = START;
|
|
|
|
fline++;
|
|
|
|
continue;
|
|
|
|
}
|
2002-08-28 21:04:11 +00:00
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
switch (state) {
|
|
|
|
case START:
|
|
|
|
if (isalnum(got_c)) {
|
2005-06-13 22:40:11 +00:00
|
|
|
if (cur_var->len > 0) {
|
1998-11-17 04:29:13 +00:00
|
|
|
if (got_val) {
|
2012-12-26 22:34:09 +00:00
|
|
|
/* Call the routine to set the preference; it will parse
|
2012-12-26 22:34:39 +00:00
|
|
|
the value as appropriate. */
|
2010-10-29 22:09:31 +00:00
|
|
|
switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data, FALSE)) {
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2006-12-08 04:09:44 +00:00
|
|
|
case PREFS_SET_OK:
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREFS_SET_SYNTAX_ERR:
|
2010-10-27 01:43:24 +00:00
|
|
|
g_warning ("%s line %d: Syntax error in preference %s %s", pf_path, pline, cur_var->str, hint);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
|
|
|
|
2006-12-08 04:09:44 +00:00
|
|
|
case PREFS_SET_NO_SUCH_PREF:
|
2004-05-24 18:14:58 +00:00
|
|
|
g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
|
2006-12-08 04:09:44 +00:00
|
|
|
pline, cur_var->str, hint);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
|
2006-12-08 04:09:44 +00:00
|
|
|
case PREFS_SET_OBSOLETE:
|
|
|
|
/* We silently ignore attempts to set these; it's
|
|
|
|
probably not the user's fault that it's in there -
|
|
|
|
they may have saved preferences with a release that
|
|
|
|
supported them. */
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
break;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
1998-11-17 04:29:13 +00:00
|
|
|
} else {
|
2004-05-24 18:14:58 +00:00
|
|
|
g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
|
1998-11-17 04:29:13 +00:00
|
|
|
}
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
1998-11-17 04:29:13 +00:00
|
|
|
state = IN_VAR;
|
|
|
|
got_val = FALSE;
|
2005-06-13 22:40:11 +00:00
|
|
|
g_string_truncate(cur_var, 0);
|
2005-06-26 11:32:02 +00:00
|
|
|
g_string_append_c(cur_var, (gchar) got_c);
|
1998-10-28 21:38:11 +00:00
|
|
|
pline = fline;
|
2005-06-13 22:40:11 +00:00
|
|
|
} else if (isspace(got_c) && cur_var->len > 0 && got_val) {
|
1998-10-28 21:38:11 +00:00
|
|
|
state = PRE_VAL;
|
|
|
|
} else if (got_c == '#') {
|
|
|
|
state = IN_SKIP;
|
|
|
|
} else {
|
2004-05-24 18:14:58 +00:00
|
|
|
g_warning ("%s line %d: Malformed line %s", pf_path, fline, hint);
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case IN_VAR:
|
|
|
|
if (got_c != ':') {
|
2005-06-26 11:32:02 +00:00
|
|
|
g_string_append_c(cur_var, (gchar) got_c);
|
1998-10-28 21:38:11 +00:00
|
|
|
} else {
|
1998-11-17 04:29:13 +00:00
|
|
|
state = PRE_VAL;
|
2005-06-13 22:40:11 +00:00
|
|
|
g_string_truncate(cur_val, 0);
|
1998-11-17 04:29:13 +00:00
|
|
|
got_val = TRUE;
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case PRE_VAL:
|
|
|
|
if (!isspace(got_c)) {
|
|
|
|
state = IN_VAL;
|
2005-06-26 11:32:02 +00:00
|
|
|
g_string_append_c(cur_val, (gchar) got_c);
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case IN_VAL:
|
2012-07-07 00:30:47 +00:00
|
|
|
g_string_append_c(cur_val, (gchar) got_c);
|
1998-10-28 21:38:11 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2005-06-13 22:40:11 +00:00
|
|
|
if (cur_var->len > 0) {
|
1998-11-17 04:29:13 +00:00
|
|
|
if (got_val) {
|
2010-10-29 22:09:31 +00:00
|
|
|
/* Convert the string to a range. Since we're reading the
|
|
|
|
* preferences file, silently lower values in excess of the
|
|
|
|
* range's maximum.
|
|
|
|
*/
|
|
|
|
switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data, FALSE)) {
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2006-12-08 04:09:44 +00:00
|
|
|
case PREFS_SET_OK:
|
|
|
|
break;
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
case PREFS_SET_SYNTAX_ERR:
|
2012-07-07 00:30:47 +00:00
|
|
|
g_warning ("%s line %d: Syntax error in preference %s %s", pf_path, pline, cur_var->str, hint);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREFS_SET_NO_SUCH_PREF:
|
2004-05-24 18:14:58 +00:00
|
|
|
g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
|
2006-12-08 04:09:44 +00:00
|
|
|
pline, cur_var->str, hint);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
|
|
|
|
case PREFS_SET_OBSOLETE:
|
2006-12-08 04:09:44 +00:00
|
|
|
/* We silently ignore attempts to set these; it's probably not
|
|
|
|
the user's fault that it's in there - they may have saved
|
|
|
|
preferences with a release that supported it. */
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
break;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
1998-11-17 04:29:13 +00:00
|
|
|
} else {
|
2004-05-24 18:14:58 +00:00
|
|
|
g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
|
1998-11-17 04:29:13 +00:00
|
|
|
}
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
2005-06-21 22:02:18 +00:00
|
|
|
|
|
|
|
g_string_free(cur_val, TRUE);
|
|
|
|
g_string_free(cur_var, TRUE);
|
|
|
|
|
2003-08-07 00:41:28 +00:00
|
|
|
if (ferror(pf))
|
|
|
|
return errno;
|
|
|
|
else
|
|
|
|
return 0;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2008-02-15 22:36:24 +00:00
|
|
|
/*
|
|
|
|
* If we were handed a preference starting with "uat:", try to turn it into
|
|
|
|
* a valid uat entry.
|
|
|
|
*/
|
|
|
|
static gboolean
|
|
|
|
prefs_set_uat_pref(char *uat_entry) {
|
2012-07-07 00:30:47 +00:00
|
|
|
gchar *p, *colonp;
|
|
|
|
uat_t *uat;
|
|
|
|
gchar *err;
|
|
|
|
|
|
|
|
colonp = strchr(uat_entry, ':');
|
|
|
|
if (colonp == NULL)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
p = colonp;
|
|
|
|
*p++ = '\0';
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Skip over any white space (there probably won't be any, but
|
|
|
|
* as we allow it in the preferences file, we might as well
|
|
|
|
* allow it here).
|
|
|
|
*/
|
|
|
|
while (isspace((guchar)*p))
|
|
|
|
p++;
|
|
|
|
if (*p == '\0') {
|
|
|
|
/*
|
|
|
|
* Put the colon back, so if our caller uses, in an
|
|
|
|
* error message, the string they passed us, the message
|
|
|
|
* looks correct.
|
|
|
|
*/
|
|
|
|
*colonp = ':';
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
uat = uat_find(uat_entry);
|
|
|
|
*colonp = ':';
|
|
|
|
if (uat == NULL) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (uat_load_str(uat, p, &err)) {
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
return FALSE;
|
2008-02-15 22:36:24 +00:00
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
/*
|
|
|
|
* Given a string of the form "<pref name>:<pref value>", as might appear
|
|
|
|
* as an argument to a "-o" option, parse it and set the preference in
|
|
|
|
* question. Return an indication of whether it succeeded or failed
|
|
|
|
* in some fashion.
|
|
|
|
*/
|
2006-11-17 01:24:03 +00:00
|
|
|
prefs_set_pref_e
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
prefs_set_pref(char *prefarg)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
gchar *p, *colonp;
|
|
|
|
prefs_set_pref_e ret;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set the counters of "mgcp.{tcp,udp}.port" entries we've
|
|
|
|
* seen to values that keep us from trying to interpret tham
|
|
|
|
* as "mgcp.{tcp,udp}.gateway_port" or "mgcp.{tcp,udp}.callagent_port",
|
|
|
|
* as, from the command line, we have no way of guessing which
|
|
|
|
* the user had in mind.
|
|
|
|
*/
|
|
|
|
mgcp_tcp_port_count = -1;
|
|
|
|
mgcp_udp_port_count = -1;
|
|
|
|
|
|
|
|
colonp = strchr(prefarg, ':');
|
|
|
|
if (colonp == NULL)
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
|
|
|
|
p = colonp;
|
|
|
|
*p++ = '\0';
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Skip over any white space (there probably won't be any, but
|
|
|
|
* as we allow it in the preferences file, we might as well
|
|
|
|
* allow it here).
|
|
|
|
*/
|
|
|
|
while (isspace((guchar)*p))
|
|
|
|
p++;
|
|
|
|
if (*p == '\0') {
|
|
|
|
/*
|
|
|
|
* Put the colon back, so if our caller uses, in an
|
|
|
|
* error message, the string they passed us, the message
|
|
|
|
* looks correct.
|
|
|
|
*/
|
|
|
|
*colonp = ':';
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
|
|
|
if (strcmp(prefarg, "uat")) {
|
|
|
|
ret = set_pref(prefarg, p, NULL, TRUE);
|
|
|
|
} else {
|
|
|
|
ret = prefs_set_uat_pref(p) ? PREFS_SET_OK : PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
|
|
|
*colonp = ':'; /* put the colon back */
|
|
|
|
return ret;
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
|
|
|
|
2008-01-31 16:47:05 +00:00
|
|
|
/*
|
|
|
|
* Returns TRUE if the given device is hidden
|
|
|
|
*/
|
|
|
|
gboolean
|
|
|
|
prefs_is_capture_device_hidden(const char *name)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
gchar *tok, *devices;
|
|
|
|
size_t len;
|
|
|
|
|
|
|
|
if (prefs.capture_devices_hide && name) {
|
|
|
|
devices = g_strdup (prefs.capture_devices_hide);
|
|
|
|
len = strlen (name);
|
|
|
|
for (tok = strtok (devices, ","); tok; tok = strtok(NULL, ",")) {
|
|
|
|
if (strlen (tok) == len && strcmp (name, tok) == 0) {
|
|
|
|
g_free (devices);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_free (devices);
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
2008-01-31 16:47:05 +00:00
|
|
|
}
|
|
|
|
|
2010-06-20 16:23:43 +00:00
|
|
|
/*
|
2011-11-13 22:51:49 +00:00
|
|
|
* Returns TRUE if the given column is visible (not hidden)
|
2010-06-20 16:23:43 +00:00
|
|
|
*/
|
|
|
|
static gboolean
|
2011-11-13 22:51:49 +00:00
|
|
|
prefs_is_column_visible(const gchar *cols_hidden, fmt_data *cfmt)
|
2010-06-20 16:23:43 +00:00
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
gchar *tok, *cols;
|
|
|
|
fmt_data cfmt_hidden;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Do we have a list of hidden columns?
|
|
|
|
*/
|
|
|
|
if (cols_hidden) {
|
|
|
|
/*
|
|
|
|
* Yes - check the column against each of the ones in the
|
|
|
|
* list.
|
|
|
|
*/
|
|
|
|
cols = g_strdup(cols_hidden);
|
|
|
|
for (tok = strtok(cols, ","); tok; tok = strtok(NULL, ",")) {
|
|
|
|
tok = g_strstrip(tok);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Parse this column format.
|
|
|
|
*/
|
|
|
|
if (!parse_column_format(&cfmt_hidden, tok)) {
|
|
|
|
/*
|
|
|
|
* It's not valid; ignore it.
|
|
|
|
*/
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Does it match the column?
|
|
|
|
*/
|
|
|
|
if (cfmt->fmt != cfmt_hidden.fmt) {
|
|
|
|
/* No. */
|
|
|
|
g_free(cfmt_hidden.custom_field);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (cfmt->fmt == COL_CUSTOM) {
|
|
|
|
/*
|
|
|
|
* A custom column has to have the
|
|
|
|
* same custom field and occurrence.
|
|
|
|
*/
|
|
|
|
if (strcmp(cfmt->custom_field,
|
|
|
|
cfmt_hidden.custom_field) != 0) {
|
|
|
|
/* Different fields. */
|
|
|
|
g_free(cfmt_hidden.custom_field);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (cfmt->custom_occurrence != cfmt_hidden.custom_occurrence) {
|
|
|
|
/* Different occurrences. */
|
|
|
|
g_free(cfmt_hidden.custom_field);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* OK, they match, so it's one of the hidden fields,
|
|
|
|
* hence not visible.
|
|
|
|
*/
|
|
|
|
g_free(cfmt_hidden.custom_field);
|
|
|
|
g_free(cols);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
g_free(cols);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* No - either there are no hidden columns or this isn't one
|
|
|
|
* of them - so it is visible.
|
|
|
|
*/
|
|
|
|
return TRUE;
|
2010-06-20 16:23:43 +00:00
|
|
|
}
|
|
|
|
|
2010-05-15 19:38:13 +00:00
|
|
|
/*
|
|
|
|
* Returns TRUE if the given device should capture in monitor mode by default
|
|
|
|
*/
|
|
|
|
gboolean
|
|
|
|
prefs_capture_device_monitor_mode(const char *name)
|
|
|
|
{
|
2012-07-07 00:30:47 +00:00
|
|
|
gchar *tok, *devices;
|
|
|
|
size_t len;
|
|
|
|
|
|
|
|
if (prefs.capture_devices_monitor_mode && name) {
|
|
|
|
devices = g_strdup (prefs.capture_devices_monitor_mode);
|
|
|
|
len = strlen (name);
|
|
|
|
for (tok = strtok (devices, ","); tok; tok = strtok(NULL, ",")) {
|
|
|
|
if (strlen (tok) == len && strcmp (name, tok) == 0) {
|
|
|
|
g_free (devices);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_free (devices);
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
2010-05-15 19:38:13 +00:00
|
|
|
}
|
|
|
|
|
2012-08-03 11:15:40 +00:00
|
|
|
/*
|
|
|
|
* Returns TRUE if the user has marked this column as visible
|
|
|
|
*/
|
|
|
|
gboolean
|
|
|
|
prefs_capture_options_dialog_column_is_visible(const gchar *column)
|
|
|
|
{
|
|
|
|
GList *curr;
|
|
|
|
gchar *col;
|
|
|
|
|
|
|
|
for (curr = g_list_first(prefs.capture_columns); curr; curr = g_list_next(curr)) {
|
|
|
|
col = (gchar *)curr->data;
|
|
|
|
if (col && (g_ascii_strcasecmp(col, column) == 0)) {
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-09-08 09:35:10 +00:00
|
|
|
#define PRS_GUI_FILTER_LABEL "gui.filter_expressions.label"
|
|
|
|
#define PRS_GUI_FILTER_EXPR "gui.filter_expressions.expr"
|
|
|
|
#define PRS_GUI_FILTER_ENABLED "gui.filter_expressions.enabled"
|
1999-12-02 04:30:15 +00:00
|
|
|
|
2004-01-05 19:31:44 +00:00
|
|
|
#define RED_COMPONENT(x) (guint16) (((((x) >> 16) & 0xff) * 65535 / 255))
|
|
|
|
#define GREEN_COMPONENT(x) (guint16) (((((x) >> 8) & 0xff) * 65535 / 255))
|
|
|
|
#define BLUE_COMPONENT(x) (guint16) ( (((x) & 0xff) * 65535 / 255))
|
1998-10-28 21:38:11 +00:00
|
|
|
|
2001-05-31 08:36:46 +00:00
|
|
|
char
|
2012-12-26 05:57:06 +00:00
|
|
|
string_to_name_resolve(const char *string, e_addr_resolve *name_resolve)
|
2001-05-31 08:36:46 +00:00
|
|
|
{
|
|
|
|
char c;
|
|
|
|
|
2012-07-06 04:48:36 +00:00
|
|
|
memset(name_resolve, 0, sizeof(e_addr_resolve));
|
2001-05-31 08:36:46 +00:00
|
|
|
while ((c = *string++) != '\0') {
|
2012-07-06 04:48:36 +00:00
|
|
|
switch (c) {
|
|
|
|
case 'm':
|
|
|
|
name_resolve->mac_name = TRUE;
|
|
|
|
break;
|
|
|
|
case 'n':
|
|
|
|
name_resolve->network_name = TRUE;
|
|
|
|
break;
|
2012-07-08 01:31:48 +00:00
|
|
|
case 'N':
|
|
|
|
name_resolve->use_external_net_name_resolver = TRUE;
|
|
|
|
break;
|
2012-07-06 04:48:36 +00:00
|
|
|
case 't':
|
|
|
|
name_resolve->transport_name = TRUE;
|
|
|
|
break;
|
|
|
|
case 'C':
|
|
|
|
name_resolve->concurrent_dns = TRUE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/*
|
|
|
|
* Unrecognized letter.
|
|
|
|
*/
|
|
|
|
return c;
|
2001-05-31 08:36:46 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
|
2012-07-06 04:48:36 +00:00
|
|
|
|
2009-08-23 09:16:58 +00:00
|
|
|
static void
|
|
|
|
try_convert_to_custom_column(gpointer *el_data)
|
|
|
|
{
|
|
|
|
/* Array of columns that have been migrated to custom columns */
|
|
|
|
struct {
|
|
|
|
gint el;
|
2012-12-26 05:57:06 +00:00
|
|
|
const gchar *col_expr;
|
2009-08-23 09:16:58 +00:00
|
|
|
} migrated_columns[] = {
|
2011-09-23 11:01:13 +00:00
|
|
|
{ COL_COS_VALUE, "vlan.priority" },
|
2009-08-23 10:20:42 +00:00
|
|
|
{ COL_CIRCUIT_ID, "iax2.call" },
|
2009-09-05 18:39:46 +00:00
|
|
|
{ COL_BSSGP_TLLI, "bssgp.tlli" },
|
2009-08-23 10:25:51 +00:00
|
|
|
{ COL_HPUX_SUBSYS, "nettl.subsys" },
|
2009-08-23 11:12:12 +00:00
|
|
|
{ COL_HPUX_DEVID, "nettl.devid" },
|
2009-08-23 12:24:14 +00:00
|
|
|
{ COL_FR_DLCI, "fr.dlci" },
|
2009-08-23 12:30:48 +00:00
|
|
|
{ COL_REL_CONV_TIME, "tcp.time_relative" },
|
2009-09-08 14:17:36 +00:00
|
|
|
{ COL_DELTA_CONV_TIME, "tcp.time_delta" },
|
2009-09-08 14:21:14 +00:00
|
|
|
{ COL_OXID, "fc.ox_id" },
|
2009-09-08 14:26:09 +00:00
|
|
|
{ COL_RXID, "fc.rx_id" },
|
2009-09-08 14:29:08 +00:00
|
|
|
{ COL_SRCIDX, "mdshdr.srcidx" },
|
2009-09-08 14:59:26 +00:00
|
|
|
{ COL_DSTIDX, "mdshdr.dstidx" },
|
|
|
|
{ COL_DCE_CTX, "dcerpc.cn_ctx_id" }
|
2009-08-23 09:16:58 +00:00
|
|
|
};
|
|
|
|
|
2009-08-23 11:35:53 +00:00
|
|
|
guint haystack_idx;
|
2009-08-23 09:16:58 +00:00
|
|
|
const gchar *haystack_fmt;
|
|
|
|
|
|
|
|
gchar **fmt = (gchar **) el_data;
|
|
|
|
|
|
|
|
for (haystack_idx = 0;
|
|
|
|
haystack_idx < G_N_ELEMENTS(migrated_columns);
|
|
|
|
++haystack_idx) {
|
|
|
|
|
|
|
|
haystack_fmt = col_format_to_string(migrated_columns[haystack_idx].el);
|
|
|
|
if (strcmp(haystack_fmt, *fmt) == 0) {
|
2010-09-22 20:56:14 +00:00
|
|
|
gchar *cust_col = g_strdup_printf("%%Cus:%s:0",
|
2009-08-23 09:16:58 +00:00
|
|
|
migrated_columns[haystack_idx].col_expr);
|
|
|
|
|
|
|
|
g_free(*fmt);
|
|
|
|
*fmt = cust_col;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-11-17 01:24:03 +00:00
|
|
|
static prefs_set_pref_e
|
2012-12-26 05:57:06 +00:00
|
|
|
set_pref(gchar *pref_name, const gchar *value, void *private_data _U_,
|
2012-07-07 00:30:47 +00:00
|
|
|
gboolean return_range_errors)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
1999-12-02 04:30:15 +00:00
|
|
|
unsigned long int cval;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
guint uval;
|
2000-07-09 03:29:42 +00:00
|
|
|
gboolean bval;
|
|
|
|
gint enum_val;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
char *p;
|
2001-11-19 19:53:14 +00:00
|
|
|
gchar *dotp, *last_dotp;
|
2011-09-08 09:35:10 +00:00
|
|
|
static gchar *filter_label = NULL;
|
|
|
|
static gboolean filter_enabled = FALSE;
|
|
|
|
gchar *filter_expr = NULL;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
module_t *module;
|
|
|
|
pref_t *pref;
|
2001-11-19 19:53:14 +00:00
|
|
|
gboolean had_a_dot;
|
1998-10-28 21:38:11 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
if (strcmp(pref_name, PRS_GUI_FILTER_LABEL) == 0) {
|
2011-09-08 09:35:10 +00:00
|
|
|
filter_label = g_strdup(value);
|
|
|
|
} else if (strcmp(pref_name, PRS_GUI_FILTER_ENABLED) == 0) {
|
|
|
|
filter_enabled = (strcmp(value, "TRUE") == 0) ? TRUE : FALSE;
|
|
|
|
} else if (strcmp(pref_name, PRS_GUI_FILTER_EXPR) == 0) {
|
|
|
|
filter_expr = g_strdup(value);
|
|
|
|
filter_expression_new(filter_label, filter_expr, filter_enabled);
|
|
|
|
g_free(filter_label);
|
|
|
|
g_free(filter_expr);
|
2012-08-08 16:54:02 +00:00
|
|
|
} else if (strcmp(pref_name, "gui.version_in_start_page") == 0) {
|
|
|
|
/* Convert deprecated value to closest current equivalent */
|
strcasecmp(), strncasecmp(), g_strcasecmp(), and g_strncasecmp() delenda
est. Use g_ascii_strcasecmp() and g_ascii_strncasecmp(), and supply our
own versions if they're missing from GLib (as is the case with GLib
1.x).
In the code to build the list of named fields for Diameter, don't use
g_strdown(); do our own g_ascii_-style upper-case to lower-case mapping
in the hash function and use g_ascii_strcasecmp() in the compare
function.
We do this because there is no guarantee that toupper(), tolower(), and
functions that use them will, for example, map between "I" and "i" in
all locales; in Turkish locales, for example, there are, in both
upper case and lower case, versions of "i" with and without a dot, and
the upper-case version of "i" is "I"-with-a-dot and the lower-case
version of "I" is "i"-without-a-dot. This causes strings that should
match not to match.
This finishes fixing bug 2010 - an earlier checkin prevented the crash
(as there are other ways to produce the same crash, e.g. a bogus
dictionary.xml file), but didn't fix the case-insensitive string matching.
svn path=/trunk/; revision=23623
2007-11-27 18:52:51 +00:00
|
|
|
if (g_ascii_strcasecmp(value, "true") == 0) {
|
2012-08-08 16:54:02 +00:00
|
|
|
prefs.gui_version_placement = version_both;
|
|
|
|
} else {
|
|
|
|
prefs.gui_version_placement = version_neither;
|
2004-04-06 19:02:18 +00:00
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
/* handle the deprecated name resolution options */
|
|
|
|
} else if (strcmp(pref_name, "name_resolve") == 0 ||
|
|
|
|
strcmp(pref_name, "capture.name_resolve") == 0) {
|
|
|
|
/*
|
|
|
|
* "TRUE" and "FALSE", for backwards compatibility, are synonyms for
|
|
|
|
* RESOLV_ALL and RESOLV_NONE.
|
|
|
|
*
|
|
|
|
* Otherwise, we treat it as a list of name types we want to resolve.
|
|
|
|
*/
|
|
|
|
if (g_ascii_strcasecmp(value, "true") == 0) {
|
|
|
|
gbl_resolv_flags.mac_name = TRUE;
|
|
|
|
gbl_resolv_flags.network_name = TRUE;
|
|
|
|
gbl_resolv_flags.transport_name = TRUE;
|
|
|
|
gbl_resolv_flags.concurrent_dns = TRUE;
|
|
|
|
}
|
|
|
|
else if (g_ascii_strcasecmp(value, "false") == 0) {
|
|
|
|
gbl_resolv_flags.mac_name = FALSE;
|
|
|
|
gbl_resolv_flags.network_name = FALSE;
|
|
|
|
gbl_resolv_flags.transport_name = FALSE;
|
|
|
|
gbl_resolv_flags.concurrent_dns = FALSE;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* start out with none set */
|
|
|
|
gbl_resolv_flags.mac_name = FALSE;
|
|
|
|
gbl_resolv_flags.network_name = FALSE;
|
|
|
|
gbl_resolv_flags.transport_name = FALSE;
|
|
|
|
gbl_resolv_flags.concurrent_dns = FALSE;
|
|
|
|
if (string_to_name_resolve(value, &gbl_resolv_flags) != '\0')
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
1998-10-28 21:38:11 +00:00
|
|
|
} else {
|
2012-09-27 16:23:06 +00:00
|
|
|
/* Handle deprecated "global" options that don't have a module
|
2012-08-08 16:54:02 +00:00
|
|
|
* associated with them
|
|
|
|
*/
|
|
|
|
if ((strcmp(pref_name, "name_resolve_concurrency") == 0) ||
|
|
|
|
(strcmp(pref_name, "name_resolve_load_smi_modules") == 0) ||
|
|
|
|
(strcmp(pref_name, "name_resolve_suppress_smi_errors") == 0)) {
|
|
|
|
module = nameres_module;
|
|
|
|
dotp = pref_name;
|
|
|
|
} else {
|
|
|
|
/* To which module does this preference belong? */
|
|
|
|
module = NULL;
|
|
|
|
last_dotp = pref_name;
|
|
|
|
had_a_dot = FALSE;
|
|
|
|
while (!module) {
|
2001-11-19 19:53:14 +00:00
|
|
|
dotp = strchr(last_dotp, '.');
|
|
|
|
if (dotp == NULL) {
|
|
|
|
if (had_a_dot) {
|
|
|
|
/* no such module */
|
|
|
|
return PREFS_SET_NO_SUCH_PREF;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* no ".", so no module/name separator */
|
|
|
|
return PREFS_SET_SYNTAX_ERR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
had_a_dot = TRUE;
|
|
|
|
}
|
|
|
|
*dotp = '\0'; /* separate module and preference name */
|
2006-10-10 00:28:53 +00:00
|
|
|
module = prefs_find_module(pref_name);
|
2001-11-19 19:53:14 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* XXX - "Diameter" rather than "diameter" was used in earlier
|
2006-05-21 05:12:17 +00:00
|
|
|
* versions of Wireshark; if we didn't find the module, and its name
|
2001-11-19 19:53:14 +00:00
|
|
|
* was "Diameter", look for "diameter" instead.
|
2001-12-08 01:45:36 +00:00
|
|
|
*
|
|
|
|
* In addition, the BEEP protocol used to be the BXXP protocol,
|
|
|
|
* so if we didn't find the module, and its name was "bxxp",
|
|
|
|
* look for "beep" instead.
|
2002-05-29 07:35:55 +00:00
|
|
|
*
|
|
|
|
* Also, the preferences for GTP v0 and v1 were combined under
|
2003-12-23 21:29:25 +00:00
|
|
|
* a single "gtp" heading, and the preferences for SMPP were
|
2004-01-27 04:11:48 +00:00
|
|
|
* moved to "smpp-gsm-sms" and then moved to "gsm-sms-ud".
|
|
|
|
* However, SMPP now has its own preferences, so we just map
|
|
|
|
* "smpp-gsm-sms" to "gsm-sms-ud", and then handle SMPP below.
|
2008-03-16 08:26:16 +00:00
|
|
|
*
|
2011-06-17 08:03:18 +00:00
|
|
|
* We also renamed "dcp" to "dccp", "x.25" to "x25", "x411" to "p1"
|
2012-07-07 00:30:47 +00:00
|
|
|
* and "nsip" to "gprs_ns".
|
|
|
|
*
|
|
|
|
* The SynOptics Network Management Protocol (SONMP) is now known by
|
|
|
|
* its modern name, the Nortel Discovery Protocol (NDP).
|
|
|
|
*
|
2001-11-19 19:53:14 +00:00
|
|
|
*/
|
2001-12-08 01:45:36 +00:00
|
|
|
if (module == NULL) {
|
2012-08-08 16:54:02 +00:00
|
|
|
if (strcmp(pref_name, "column") == 0)
|
|
|
|
module = gui_column_module;
|
|
|
|
else if (strcmp(pref_name, "Diameter") == 0)
|
2006-10-10 00:28:53 +00:00
|
|
|
module = prefs_find_module("diameter");
|
2001-12-08 01:45:36 +00:00
|
|
|
else if (strcmp(pref_name, "bxxp") == 0)
|
2006-10-10 00:28:53 +00:00
|
|
|
module = prefs_find_module("beep");
|
2002-05-29 07:35:55 +00:00
|
|
|
else if (strcmp(pref_name, "gtpv0") == 0 ||
|
|
|
|
strcmp(pref_name, "gtpv1") == 0)
|
2006-10-10 00:28:53 +00:00
|
|
|
module = prefs_find_module("gtp");
|
2004-01-27 04:11:48 +00:00
|
|
|
else if (strcmp(pref_name, "smpp-gsm-sms") == 0)
|
2006-10-10 00:28:53 +00:00
|
|
|
module = prefs_find_module("gsm-sms-ud");
|
2008-03-16 08:26:16 +00:00
|
|
|
else if (strcmp(pref_name, "dcp") == 0)
|
|
|
|
module = prefs_find_module("dccp");
|
2009-03-04 07:50:17 +00:00
|
|
|
else if (strcmp(pref_name, "x.25") == 0)
|
|
|
|
module = prefs_find_module("x25");
|
2011-06-17 08:03:18 +00:00
|
|
|
else if (strcmp(pref_name, "x411") == 0)
|
|
|
|
module = prefs_find_module("p1");
|
2010-04-19 10:23:41 +00:00
|
|
|
else if (strcmp(pref_name, "nsip") == 0)
|
2010-04-19 10:34:52 +00:00
|
|
|
module = prefs_find_module("gprs-ns");
|
2010-08-16 17:19:42 +00:00
|
|
|
else if (strcmp(pref_name, "sonmp") == 0)
|
|
|
|
module = prefs_find_module("ndp");
|
2012-07-07 00:30:47 +00:00
|
|
|
else if (strcmp(pref_name, "etheric") == 0 ||
|
|
|
|
strcmp(pref_name, "isup_thin") == 0)
|
|
|
|
/* This protocols was removed 7. July 2009 */
|
|
|
|
return PREFS_SET_OBSOLETE;
|
2001-12-08 01:45:36 +00:00
|
|
|
}
|
2012-07-07 00:30:47 +00:00
|
|
|
*dotp = '.'; /* put the preference string back */
|
|
|
|
dotp++; /* skip past separator to preference name */
|
2001-11-19 19:53:14 +00:00
|
|
|
last_dotp = dotp;
|
2012-08-08 16:54:02 +00:00
|
|
|
}
|
2001-11-19 19:53:14 +00:00
|
|
|
}
|
2001-01-03 06:56:03 +00:00
|
|
|
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, dotp);
|
2001-01-05 22:45:26 +00:00
|
|
|
|
2001-10-13 07:43:25 +00:00
|
|
|
if (pref == NULL) {
|
2012-08-08 16:54:02 +00:00
|
|
|
/* "gui" prefix was added to column preferences for better organization
|
|
|
|
* within the preferences file
|
|
|
|
*/
|
|
|
|
if ((strcmp(pref_name, PRS_COL_HIDDEN) == 0) ||
|
|
|
|
(strcmp(pref_name, PRS_COL_FMT) == 0)) {
|
|
|
|
pref = prefs_find_preference(module, pref_name);
|
|
|
|
}
|
|
|
|
else if (strcmp(module->name, "mgcp") == 0) {
|
2001-10-13 07:43:25 +00:00
|
|
|
/*
|
|
|
|
* XXX - "mgcp.display raw text toggle" and "mgcp.display dissect tree"
|
|
|
|
* rather than "mgcp.display_raw_text" and "mgcp.display_dissect_tree"
|
2006-05-21 05:12:17 +00:00
|
|
|
* were used in earlier versions of Wireshark; if we didn't find the
|
2001-10-13 07:43:25 +00:00
|
|
|
* preference, it was an MGCP preference, and its name was
|
|
|
|
* "display raw text toggle" or "display dissect tree", look for
|
|
|
|
* "display_raw_text" or "display_dissect_tree" instead.
|
|
|
|
*
|
|
|
|
* "mgcp.tcp.port" and "mgcp.udp.port" are harder to handle, as both
|
|
|
|
* the gateway and callagent ports were given those names; we interpret
|
|
|
|
* the first as "mgcp.{tcp,udp}.gateway_port" and the second as
|
|
|
|
* "mgcp.{tcp,udp}.callagent_port", as that's the order in which
|
|
|
|
* they were registered by the MCCP dissector and thus that's the
|
|
|
|
* order in which they were written to the preferences file. (If
|
|
|
|
* we're not reading the preferences file, but are handling stuff
|
|
|
|
* from a "-o" command-line option, we have no clue which the user
|
|
|
|
* had in mind - they should have used "mgcp.{tcp,udp}.gateway_port"
|
|
|
|
* or "mgcp.{tcp,udp}.callagent_port" instead.)
|
|
|
|
*/
|
|
|
|
if (strcmp(dotp, "display raw text toggle") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "display_raw_text");
|
2001-10-13 07:43:25 +00:00
|
|
|
else if (strcmp(dotp, "display dissect tree") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "display_dissect_tree");
|
2001-10-13 07:43:25 +00:00
|
|
|
else if (strcmp(dotp, "tcp.port") == 0) {
|
|
|
|
mgcp_tcp_port_count++;
|
|
|
|
if (mgcp_tcp_port_count == 1) {
|
|
|
|
/* It's the first one */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "tcp.gateway_port");
|
2012-07-07 00:30:47 +00:00
|
|
|
} else if (mgcp_tcp_port_count == 2) {
|
2001-10-13 07:43:25 +00:00
|
|
|
/* It's the second one */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "tcp.callagent_port");
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2001-10-13 07:43:25 +00:00
|
|
|
/* Otherwise it's from the command line, and we don't bother
|
|
|
|
mapping it. */
|
2012-07-07 00:30:47 +00:00
|
|
|
} else if (strcmp(dotp, "udp.port") == 0) {
|
2001-10-13 07:43:25 +00:00
|
|
|
mgcp_udp_port_count++;
|
|
|
|
if (mgcp_udp_port_count == 1) {
|
|
|
|
/* It's the first one */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "udp.gateway_port");
|
2012-07-07 00:30:47 +00:00
|
|
|
} else if (mgcp_udp_port_count == 2) {
|
2001-10-13 07:43:25 +00:00
|
|
|
/* It's the second one */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "udp.callagent_port");
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2001-10-13 07:43:25 +00:00
|
|
|
/* Otherwise it's from the command line, and we don't bother
|
|
|
|
mapping it. */
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "smb") == 0) {
|
2002-01-15 10:01:21 +00:00
|
|
|
/* Handle old names for SMB preferences. */
|
|
|
|
if (strcmp(dotp, "smb.trans.reassembly") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "trans_reassembly");
|
2002-01-15 10:01:21 +00:00
|
|
|
else if (strcmp(dotp, "smb.dcerpc.reassembly") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "dcerpc_reassembly");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "ndmp") == 0) {
|
2002-01-15 10:01:21 +00:00
|
|
|
/* Handle old names for NDMP preferences. */
|
|
|
|
if (strcmp(dotp, "ndmp.desegment") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "diameter") == 0) {
|
2002-01-15 10:01:21 +00:00
|
|
|
/* Handle old names for Diameter preferences. */
|
|
|
|
if (strcmp(dotp, "diameter.desegment") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "pcli") == 0) {
|
2003-01-28 22:27:20 +00:00
|
|
|
/* Handle old names for PCLI preferences. */
|
|
|
|
if (strcmp(dotp, "pcli.udp_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "udp_port");
|
2003-04-21 21:28:39 +00:00
|
|
|
} else if (strcmp(module->name, "artnet") == 0) {
|
|
|
|
/* Handle old names for ARTNET preferences. */
|
|
|
|
if (strcmp(dotp, "artnet.udp_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "udp_port");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "mapi") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for MAPI preferences. */
|
|
|
|
if (strcmp(dotp, "mapi_decrypt") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "decrypt");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "fc") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for Fibre Channel preferences. */
|
|
|
|
if (strcmp(dotp, "reassemble_fc") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "reassemble");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "fc_max_frame_size") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "max_frame_size");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "fcip") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for Fibre Channel-over-IP preferences. */
|
|
|
|
if (strcmp(dotp, "desegment_fcip_messages") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "fcip_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "target_port");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "gtp") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for GTP preferences. */
|
|
|
|
if (strcmp(dotp, "gtpv0_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v0_port");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtpv1c_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v1c_port");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtpv1u_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v1u_port");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtp_dissect_tpdu") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "dissect_tpdu");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtpv0_dissect_cdr_as") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v0_dissect_cdr_as");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtpv0_check_etsi") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v0_check_etsi");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "gtpv1_check_etsi") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "v1_check_etsi");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "ip") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for IP preferences. */
|
|
|
|
if (strcmp(dotp, "ip_summary_in_tree") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "summary_in_tree");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "iscsi") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for iSCSI preferences. */
|
|
|
|
if (strcmp(dotp, "iscsi_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "target_port");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "lmp") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for LMP preferences. */
|
|
|
|
if (strcmp(dotp, "lmp_version") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "version");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "mtp3") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for MTP3 preferences. */
|
|
|
|
if (strcmp(dotp, "mtp3_standard") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "standard");
|
2006-01-29 23:10:05 +00:00
|
|
|
else if (strcmp(dotp, "net_addr_format") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "addr_format");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "nlm") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for NLM preferences. */
|
|
|
|
if (strcmp(dotp, "nlm_msg_res_matching") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "msg_res_matching");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "ppp") == 0) {
|
2003-08-26 05:56:43 +00:00
|
|
|
/* Handle old names for PPP preferences. */
|
2003-01-28 23:56:40 +00:00
|
|
|
if (strcmp(dotp, "ppp_fcs") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "fcs_type");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "ppp_vj") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "decompress_vj");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "rsvp") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for RSVP preferences. */
|
|
|
|
if (strcmp(dotp, "rsvp_process_bundle") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "process_bundle");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "tcp") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for TCP preferences. */
|
|
|
|
if (strcmp(dotp, "tcp_summary_in_tree") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "summary_in_tree");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "tcp_analyze_sequence_numbers") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "analyze_sequence_numbers");
|
2003-01-28 23:56:40 +00:00
|
|
|
else if (strcmp(dotp, "tcp_relative_sequence_numbers") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "relative_sequence_numbers");
|
2003-03-12 19:45:52 +00:00
|
|
|
} else if (strcmp(module->name, "udp") == 0) {
|
2003-01-28 23:56:40 +00:00
|
|
|
/* Handle old names for UDP preferences. */
|
|
|
|
if (strcmp(dotp, "udp_summary_in_tree") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "summary_in_tree");
|
2003-04-09 08:43:53 +00:00
|
|
|
} else if (strcmp(module->name, "ndps") == 0) {
|
|
|
|
/* Handle old names for NDPS preferences. */
|
|
|
|
if (strcmp(dotp, "desegment_ndps") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment_tcp");
|
2003-12-31 09:58:56 +00:00
|
|
|
} else if (strcmp(module->name, "http") == 0) {
|
|
|
|
/* Handle old names for HTTP preferences. */
|
|
|
|
if (strcmp(dotp, "desegment_http_headers") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment_headers");
|
2003-12-31 09:58:56 +00:00
|
|
|
else if (strcmp(dotp, "desegment_http_body") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "desegment_body");
|
2004-01-27 04:11:48 +00:00
|
|
|
} else if (strcmp(module->name, "smpp") == 0) {
|
|
|
|
/* Handle preferences that moved from SMPP. */
|
2006-10-10 00:28:53 +00:00
|
|
|
module_t *new_module = prefs_find_module("gsm-sms-ud");
|
2006-06-17 11:11:34 +00:00
|
|
|
if(new_module){
|
|
|
|
if (strcmp(dotp, "port_number_udh_means_wsp") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(new_module, "port_number_udh_means_wsp");
|
2006-06-17 11:11:34 +00:00
|
|
|
else if (strcmp(dotp, "try_dissect_1st_fragment") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(new_module, "try_dissect_1st_fragment");
|
2006-06-17 11:11:34 +00:00
|
|
|
}
|
2004-08-08 01:20:26 +00:00
|
|
|
} else if (strcmp(module->name, "asn1") == 0) {
|
|
|
|
/* Handle old generic ASN.1 preferences (it's not really a
|
|
|
|
rename, as the new preferences support multiple ports,
|
|
|
|
but we might as well copy them over). */
|
|
|
|
if (strcmp(dotp, "tcp_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "tcp_ports");
|
2004-08-08 01:20:26 +00:00
|
|
|
else if (strcmp(dotp, "udp_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "udp_ports");
|
2004-08-08 01:20:26 +00:00
|
|
|
else if (strcmp(dotp, "sctp_port") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "sctp_ports");
|
2005-02-28 09:21:19 +00:00
|
|
|
} else if (strcmp(module->name, "llcgprs") == 0) {
|
|
|
|
if (strcmp(dotp, "ignore_cipher_bit") == 0)
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "autodetect_cipher_bit");
|
2008-07-12 02:36:32 +00:00
|
|
|
} else if (strcmp(module->name, "erf") == 0) {
|
|
|
|
if (strcmp(dotp, "erfeth") == 0) {
|
2008-07-14 18:56:25 +00:00
|
|
|
/* Handle the old "erfeth" preference; map it to the new
|
|
|
|
"ethfcs" preference, and map the values to those for
|
|
|
|
the new preference. */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "ethfcs");
|
2008-07-12 18:26:47 +00:00
|
|
|
if (strcmp(value, "ethfcs") == 0 || strcmp(value, "Ethernet with FCS") == 0)
|
|
|
|
value = "TRUE";
|
|
|
|
else if (strcmp(value, "eth") == 0 || strcmp(value, "Ethernet") == 0)
|
|
|
|
value = "FALSE";
|
|
|
|
else if (strcmp(value, "raw") == 0 || strcmp(value, "Raw data") == 0)
|
|
|
|
value = "TRUE";
|
2008-07-14 18:56:25 +00:00
|
|
|
} else if (strcmp(dotp, "erfatm") == 0) {
|
|
|
|
/* Handle the old "erfatm" preference; map it to the new
|
|
|
|
"aal5_type" preference, and map the values to those for
|
|
|
|
the new preference. */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "aal5_type");
|
2008-07-14 18:56:25 +00:00
|
|
|
if (strcmp(value, "atm") == 0 || strcmp(value, "ATM") == 0)
|
|
|
|
value = "guess";
|
|
|
|
else if (strcmp(value, "llc") == 0 || strcmp(value, "LLC") == 0)
|
|
|
|
value = "llc";
|
|
|
|
else if (strcmp(value, "raw") == 0 || strcmp(value, "Raw data") == 0)
|
|
|
|
value = "guess";
|
2008-07-14 19:28:19 +00:00
|
|
|
} else if (strcmp(dotp, "erfhdlc") == 0) {
|
|
|
|
/* Handle the old "erfhdlc" preference; map it to the new
|
|
|
|
"hdlc_type" preference, and map the values to those for
|
|
|
|
the new preference. */
|
2009-01-06 14:34:18 +00:00
|
|
|
pref = prefs_find_preference(module, "hdlc_type");
|
2008-07-14 19:28:19 +00:00
|
|
|
if (strcmp(value, "chdlc") == 0 || strcmp(value, "Cisco HDLC") == 0)
|
|
|
|
value = "chdlc";
|
|
|
|
else if (strcmp(value, "ppp") == 0 || strcmp(value, "PPP serial") == 0)
|
|
|
|
value = "ppp";
|
|
|
|
else if (strcmp(value, "fr") == 0 || strcmp(value, "Frame Relay") == 0)
|
|
|
|
value = "frelay";
|
|
|
|
else if (strcmp(value, "mtp2") == 0 || strcmp(value, "SS7 MTP2") == 0)
|
|
|
|
value = "mtp2";
|
|
|
|
else if (strcmp(value, "raw") == 0 || strcmp(value, "Raw data") == 0)
|
|
|
|
value = "guess";
|
2008-07-12 02:36:32 +00:00
|
|
|
}
|
2011-09-25 21:10:04 +00:00
|
|
|
} else if (strcmp(module->name, "eth") == 0) {
|
|
|
|
/* "eth.qinq_ethertype" has been changed(restored) to "vlan.qinq.ethertype" */
|
|
|
|
if (strcmp(dotp, "qinq_ethertype") == 0) {
|
|
|
|
module_t *new_module = prefs_find_module("vlan");
|
|
|
|
if(new_module) {
|
|
|
|
pref = prefs_find_preference(new_module, "qinq_ethertype");
|
|
|
|
module = new_module;
|
|
|
|
}
|
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
} else if (strcmp(module->name, "taps") == 0) {
|
|
|
|
/* taps preferences moved to stats module */
|
|
|
|
if (strcmp(dotp, "update_interval") == 0 || strcmp(value, "rtp_player_max_visible") == 0)
|
|
|
|
pref = prefs_find_preference(stats_module, dotp);
|
|
|
|
} else if (strcmp(module->name, "packet_list") == 0) {
|
|
|
|
/* packet_list preferences moved to protocol module */
|
|
|
|
if (strcmp(dotp, "display_hidden_proto_items") == 0)
|
|
|
|
pref = prefs_find_preference(protocols_module, dotp);
|
|
|
|
} else if (strcmp(module->name, "stream") == 0) {
|
|
|
|
/* stream preferences moved to gui color module */
|
|
|
|
if ((strcmp(dotp, "stream.client.fg") == 0) || (strcmp(value, "stream.client.bg") == 0) ||
|
|
|
|
(strcmp(dotp, "stream.server.fg") == 0) || (strcmp(value, "stream.server.bg") == 0))
|
|
|
|
pref = prefs_find_preference(gui_color_module, pref_name);
|
|
|
|
} else if (strcmp(module->name, "nameres") == 0) {
|
|
|
|
if (strcmp(pref_name, "name_resolve_concurrency") == 0) {
|
|
|
|
pref = prefs_find_preference(nameres_module, pref_name);
|
|
|
|
} else if (strcmp(pref_name, "name_resolve_load_smi_modules") == 0) {
|
|
|
|
pref = prefs_find_preference(nameres_module, "load_smi_modules");
|
|
|
|
} else if (strcmp(pref_name, "name_resolve_suppress_smi_errors") == 0) {
|
|
|
|
pref = prefs_find_preference(nameres_module, "suppress_smi_errors");
|
|
|
|
}
|
2001-01-05 22:45:26 +00:00
|
|
|
}
|
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
if (pref == NULL)
|
2012-07-07 00:30:47 +00:00
|
|
|
return PREFS_SET_NO_SUCH_PREF; /* no such preference */
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
|
|
|
|
case PREF_UINT:
|
2012-12-26 05:57:06 +00:00
|
|
|
/* XXX - give an error if it doesn't fit in a guint? */
|
|
|
|
uval = (guint)strtoul(value, &p, pref->info.base);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
if (p == value || *p != '\0')
|
2012-07-07 00:30:47 +00:00
|
|
|
return PREFS_SET_SYNTAX_ERR; /* number was bad */
|
2000-07-09 03:29:42 +00:00
|
|
|
if (*pref->varp.uint != uval) {
|
|
|
|
module->prefs_changed = TRUE;
|
|
|
|
*pref->varp.uint = uval;
|
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
|
|
|
/* XXX - give an error if it's neither "true" nor "false"? */
|
strcasecmp(), strncasecmp(), g_strcasecmp(), and g_strncasecmp() delenda
est. Use g_ascii_strcasecmp() and g_ascii_strncasecmp(), and supply our
own versions if they're missing from GLib (as is the case with GLib
1.x).
In the code to build the list of named fields for Diameter, don't use
g_strdown(); do our own g_ascii_-style upper-case to lower-case mapping
in the hash function and use g_ascii_strcasecmp() in the compare
function.
We do this because there is no guarantee that toupper(), tolower(), and
functions that use them will, for example, map between "I" and "i" in
all locales; in Turkish locales, for example, there are, in both
upper case and lower case, versions of "i" with and without a dot, and
the upper-case version of "i" is "I"-with-a-dot and the lower-case
version of "I" is "i"-without-a-dot. This causes strings that should
match not to match.
This finishes fixing bug 2010 - an earlier checkin prevented the crash
(as there are other ways to produce the same crash, e.g. a bogus
dictionary.xml file), but didn't fix the case-insensitive string matching.
svn path=/trunk/; revision=23623
2007-11-27 18:52:51 +00:00
|
|
|
if (g_ascii_strcasecmp(value, "true") == 0)
|
2000-07-09 03:29:42 +00:00
|
|
|
bval = TRUE;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
else
|
2000-07-09 03:29:42 +00:00
|
|
|
bval = FALSE;
|
2002-06-16 00:58:38 +00:00
|
|
|
if (*pref->varp.boolp != bval) {
|
2012-07-07 00:30:47 +00:00
|
|
|
module->prefs_changed = TRUE;
|
|
|
|
*pref->varp.boolp = bval;
|
2000-07-09 03:29:42 +00:00
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
|
|
|
/* XXX - give an error if it doesn't match? */
|
2010-05-25 20:57:14 +00:00
|
|
|
enum_val = find_val_for_string(value, pref->info.enum_info.enumvals,
|
2012-07-07 00:30:47 +00:00
|
|
|
*pref->varp.enump);
|
2000-07-09 03:29:42 +00:00
|
|
|
if (*pref->varp.enump != enum_val) {
|
2012-07-07 00:30:47 +00:00
|
|
|
module->prefs_changed = TRUE;
|
|
|
|
*pref->varp.enump = enum_val;
|
2000-07-09 03:29:42 +00:00
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STRING:
|
2012-06-13 01:13:12 +00:00
|
|
|
case PREF_FILENAME:
|
2003-03-11 22:51:52 +00:00
|
|
|
if (strcmp(*pref->varp.string, value) != 0) {
|
2000-07-09 03:29:42 +00:00
|
|
|
module->prefs_changed = TRUE;
|
2005-07-24 19:01:28 +00:00
|
|
|
g_free((void *)*pref->varp.string);
|
2000-07-09 03:29:42 +00:00
|
|
|
*pref->varp.string = g_strdup(value);
|
|
|
|
}
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
break;
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
|
2004-10-14 23:45:09 +00:00
|
|
|
case PREF_RANGE:
|
|
|
|
{
|
2004-10-16 23:32:24 +00:00
|
|
|
range_t *newrange;
|
2004-10-14 23:45:09 +00:00
|
|
|
|
2010-10-29 22:09:31 +00:00
|
|
|
if (range_convert_str_work(&newrange, value, pref->info.max_value,
|
2012-07-07 00:30:47 +00:00
|
|
|
return_range_errors) != CVT_NO_ERROR) {
|
|
|
|
return PREFS_SET_SYNTAX_ERR; /* number was bad */
|
2004-10-16 08:33:40 +00:00
|
|
|
}
|
2004-10-14 23:45:09 +00:00
|
|
|
|
2004-10-16 23:32:24 +00:00
|
|
|
if (!ranges_are_equal(*pref->varp.range, newrange)) {
|
2012-07-07 00:30:47 +00:00
|
|
|
module->prefs_changed = TRUE;
|
|
|
|
g_free(*pref->varp.range);
|
|
|
|
*pref->varp.range = newrange;
|
2008-03-04 23:15:11 +00:00
|
|
|
} else {
|
2012-07-07 00:30:47 +00:00
|
|
|
g_free (newrange);
|
2004-10-14 23:45:09 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_COLOR:
|
|
|
|
{
|
|
|
|
cval = strtoul(value, NULL, 16);
|
2013-01-18 00:50:14 +00:00
|
|
|
pref->varp.colorp->pixel = 0;
|
|
|
|
if ((pref->varp.colorp->red != RED_COMPONENT(cval)) ||
|
|
|
|
(pref->varp.colorp->green != GREEN_COMPONENT(cval)) ||
|
|
|
|
(pref->varp.colorp->blue != BLUE_COMPONENT(cval))) {
|
2012-08-08 12:13:24 +00:00
|
|
|
module->prefs_changed = TRUE;
|
2013-01-18 00:50:14 +00:00
|
|
|
pref->varp.colorp->red = RED_COMPONENT(cval);
|
|
|
|
pref->varp.colorp->green = GREEN_COMPONENT(cval);
|
|
|
|
pref->varp.colorp->blue = BLUE_COMPONENT(cval);
|
2012-08-08 12:13:24 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PREF_CUSTOM:
|
|
|
|
return pref->custom_cbs.set_cb(pref, value, &module->prefs_changed);
|
|
|
|
|
2008-03-04 23:15:11 +00:00
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
case PREF_UAT:
|
2006-12-05 00:43:00 +00:00
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
Allow a dissector to register preferences that it no longer supports as
obsolete; we silently ignore attempts to set those in a preferences
file, so that we don't spam the user with error messages caused by them
having saved preferences in an earlier release that contained those
preferences.
Make the Diameter and iSCSI dissectors register obsolete preferences.
Crash if some code tries to register a preferences module with a name
that contains something other than lower-case ASCII letters, numbers, or
underscores, or that has already been registered, or if some code tries
to register a preference with a name that contains something other than
lower-case ASCII letters, numbers, underscores, or periods, or that has
already been registered, so that we don't put code like that in a
release and have to shovel code into "prefs.c" to fix it up later. (The
problem with multiple modules or preferences with the same name should
be obvious; the problem with names with blanks, or upper-case letters,
or punctuation, is that they're a pain to type on the command line.)
svn path=/trunk/; revision=4148
2001-11-04 02:50:21 +00:00
|
|
|
case PREF_OBSOLETE:
|
2012-07-07 00:30:47 +00:00
|
|
|
return PREFS_SET_OBSOLETE; /* no such preference any more */
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
2002-08-28 21:04:11 +00:00
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
return PREFS_SET_OK;
|
|
|
|
}
|
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
typedef struct {
|
|
|
|
FILE *pf;
|
|
|
|
gboolean is_gui_module;
|
|
|
|
} write_gui_pref_arg_t;
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
const char *
|
|
|
|
prefs_pref_type_name(pref_t *pref)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2013-01-05 02:30:58 +00:00
|
|
|
const char *type_name = "[Unknown]";
|
|
|
|
|
|
|
|
if (!pref) {
|
|
|
|
return type_name; /* ...or maybe assert? */
|
|
|
|
}
|
2012-07-07 00:30:47 +00:00
|
|
|
|
2012-07-08 01:48:52 +00:00
|
|
|
switch (pref->type) {
|
2013-01-05 02:30:58 +00:00
|
|
|
|
|
|
|
case PREF_UINT:
|
|
|
|
switch (pref->info.base) {
|
|
|
|
|
|
|
|
case 10:
|
|
|
|
type_name = "Decimal";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 8:
|
|
|
|
type_name = "Octal";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 16:
|
|
|
|
type_name = "Hexadecimal";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
|
|
|
type_name = "Boolean";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
2013-01-07 19:13:03 +00:00
|
|
|
type_name = "Choice";
|
2013-01-05 02:30:58 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STRING:
|
|
|
|
type_name = "String";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_FILENAME:
|
|
|
|
type_name = "Filename";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_RANGE:
|
|
|
|
type_name = "Range";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_COLOR:
|
|
|
|
type_name = "Color";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_CUSTOM:
|
|
|
|
if (pref->custom_cbs.type_name_cb)
|
|
|
|
return pref->custom_cbs.type_name_cb();
|
|
|
|
type_name = "Custom";
|
|
|
|
break;
|
|
|
|
|
2012-07-08 01:48:52 +00:00
|
|
|
case PREF_OBSOLETE:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_name = "Obsolete";
|
|
|
|
break;
|
2012-07-08 01:48:52 +00:00
|
|
|
|
|
|
|
case PREF_STATIC_TEXT:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_name = "Static text";
|
|
|
|
break;
|
|
|
|
|
2012-07-08 01:48:52 +00:00
|
|
|
case PREF_UAT:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_name = "UAT";
|
|
|
|
break;
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
return type_name;
|
|
|
|
}
|
2012-07-07 00:30:47 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
char *
|
|
|
|
prefs_pref_type_description(pref_t *pref)
|
|
|
|
{
|
2013-01-05 03:42:28 +00:00
|
|
|
const char *type_desc = "An unkown preference type";
|
2012-08-08 12:13:24 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
if (!pref) {
|
|
|
|
return g_strdup_printf("%s.", type_desc); /* ...or maybe assert? */
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
|
|
|
|
case PREF_UINT:
|
|
|
|
switch (pref->info.base) {
|
|
|
|
|
|
|
|
case 10:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_desc = "A decimal number";
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 8:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_desc = "An octal number";
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 16:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_desc = "A hexadecimal number";
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
2013-01-05 02:30:58 +00:00
|
|
|
type_desc = "TRUE or FALSE (case-insensitive)";
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
2013-01-05 02:30:58 +00:00
|
|
|
{
|
|
|
|
const enum_val_t *enum_valp = pref->info.enum_info.enumvals;
|
|
|
|
GString *enum_str = g_string_new("One of: ");
|
2012-07-07 00:30:47 +00:00
|
|
|
while (enum_valp->name != NULL) {
|
2013-01-05 02:30:58 +00:00
|
|
|
g_string_append(enum_str, enum_valp->description);
|
2012-07-07 00:30:47 +00:00
|
|
|
enum_valp++;
|
2013-01-05 02:30:58 +00:00
|
|
|
if (enum_valp->name != NULL)
|
|
|
|
g_string_append(enum_str, ", ");
|
2012-07-07 00:30:47 +00:00
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
g_string_append(enum_str, "\n(case-insensitive).");
|
2013-01-14 22:21:11 +00:00
|
|
|
return g_string_free(enum_str, FALSE);
|
2013-01-05 02:30:58 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PREF_STRING:
|
|
|
|
type_desc = "A string";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_FILENAME:
|
|
|
|
type_desc = "A path to a file";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_RANGE:
|
|
|
|
{
|
|
|
|
type_desc = "A string denoting an positive integer range (e.g., \"1-20,30-40\")";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PREF_COLOR:
|
|
|
|
{
|
|
|
|
type_desc = "A six-digit hexadecimal RGB color triplet (e.g. fce94f)";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PREF_CUSTOM:
|
|
|
|
if (pref->custom_cbs.type_description_cb)
|
|
|
|
return pref->custom_cbs.type_description_cb();
|
|
|
|
type_desc = "A custom value";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_OBSOLETE:
|
|
|
|
type_desc = "An obsolete preference";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
type_desc = "[Static text]";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_UAT:
|
|
|
|
type_desc = "Configuration data stored in its own file";
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2013-01-07 19:13:03 +00:00
|
|
|
return g_strdup(type_desc);
|
2013-01-05 02:30:58 +00:00
|
|
|
}
|
|
|
|
|
2013-01-18 00:50:14 +00:00
|
|
|
static gboolean
|
2013-01-05 02:30:58 +00:00
|
|
|
prefs_pref_is_default(pref_t *pref) {
|
|
|
|
if (!pref) return FALSE;
|
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
|
|
|
|
case PREF_UINT:
|
|
|
|
if (pref->default_val.uint == *pref->varp.uint)
|
|
|
|
return TRUE;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
|
|
|
if (pref->default_val.boolval == *pref->varp.boolp)
|
|
|
|
return TRUE;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
2012-07-07 00:30:47 +00:00
|
|
|
if (pref->default_val.enumval == *pref->varp.enump)
|
2013-01-05 02:30:58 +00:00
|
|
|
return TRUE;
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_STRING:
|
|
|
|
case PREF_FILENAME:
|
2013-01-18 00:50:14 +00:00
|
|
|
if (!(g_strcmp0(pref->default_val.string, *pref->varp.string)))
|
2013-01-05 02:30:58 +00:00
|
|
|
return TRUE;
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_RANGE:
|
|
|
|
{
|
|
|
|
if ((ranges_are_equal(pref->default_val.range, *pref->varp.range)))
|
2013-01-05 02:30:58 +00:00
|
|
|
return TRUE;
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_COLOR:
|
|
|
|
{
|
2013-01-18 00:50:14 +00:00
|
|
|
if ((pref->default_val.color.red == pref->varp.colorp->red) &&
|
|
|
|
(pref->default_val.color.green == pref->varp.colorp->green) &&
|
|
|
|
(pref->default_val.color.blue == pref->varp.colorp->blue))
|
2013-01-05 02:30:58 +00:00
|
|
|
return TRUE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case PREF_CUSTOM:
|
|
|
|
return pref->custom_cbs.is_default_cb(pref);
|
|
|
|
|
|
|
|
case PREF_OBSOLETE:
|
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
case PREF_UAT:
|
|
|
|
return FALSE;
|
|
|
|
/* g_assert_not_reached(); */
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
2013-01-18 00:50:14 +00:00
|
|
|
prefs_pref_to_str(pref_t *pref, pref_source_t source) {
|
2013-01-05 03:42:28 +00:00
|
|
|
const char *pref_text = "[Unknown]";
|
2013-01-05 02:30:58 +00:00
|
|
|
guint pref_uint;
|
|
|
|
gboolean pref_boolval;
|
|
|
|
gint pref_enumval;
|
|
|
|
const char *pref_string;
|
|
|
|
range_t *pref_range;
|
|
|
|
color_t *pref_color;
|
|
|
|
|
|
|
|
if (!pref) {
|
2013-01-18 00:50:14 +00:00
|
|
|
return g_strdup(pref_text);
|
2013-01-05 02:30:58 +00:00
|
|
|
}
|
|
|
|
|
2013-01-18 00:50:14 +00:00
|
|
|
switch (source) {
|
|
|
|
case pref_default:
|
|
|
|
pref_uint = pref->default_val.uint;
|
|
|
|
pref_boolval = pref->default_val.boolval;
|
|
|
|
pref_enumval = pref->default_val.enumval;
|
|
|
|
pref_string = pref->default_val.string;
|
|
|
|
pref_range = pref->default_val.range;
|
|
|
|
pref_color = &pref->default_val.color;
|
|
|
|
break;
|
|
|
|
case pref_stashed:
|
|
|
|
pref_uint = pref->stashed_val.uint;
|
|
|
|
pref_boolval = pref->stashed_val.boolval;
|
|
|
|
pref_enumval = pref->stashed_val.enumval;
|
|
|
|
pref_string = pref->stashed_val.string;
|
|
|
|
pref_range = pref->stashed_val.range;
|
|
|
|
pref_color = &pref->stashed_val.color;
|
|
|
|
break;
|
|
|
|
case pref_current:
|
|
|
|
pref_uint = *pref->varp.uint;
|
|
|
|
pref_boolval = *pref->varp.boolp;
|
|
|
|
pref_enumval = *pref->varp.enump;
|
|
|
|
pref_string = *pref->varp.string;
|
|
|
|
pref_range = *pref->varp.range;
|
|
|
|
pref_color = pref->varp.colorp;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return g_strdup(pref_text);
|
2013-01-05 02:30:58 +00:00
|
|
|
}
|
2013-01-18 00:50:14 +00:00
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
switch (pref->type) {
|
|
|
|
|
|
|
|
case PREF_UINT:
|
|
|
|
switch (pref->info.base) {
|
|
|
|
|
|
|
|
case 10:
|
|
|
|
return g_strdup_printf("%u", pref_uint);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 8:
|
|
|
|
return g_strdup_printf("%#o", pref_uint);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 16:
|
|
|
|
return g_strdup_printf("%#x", pref_uint);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_BOOL:
|
|
|
|
return g_strdup_printf("%s", pref_boolval ? "TRUE" : "FALSE");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_ENUM:
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* For now, we return the "description" value, so that if we
|
|
|
|
* save the preferences older versions of Wireshark can at
|
|
|
|
* least read preferences that they supported; we support
|
|
|
|
* either the short name or the description when reading
|
|
|
|
* the preferences file or a "-o" option.
|
|
|
|
*/
|
|
|
|
const enum_val_t *enum_valp = pref->info.enum_info.enumvals;
|
|
|
|
while (enum_valp->name != NULL) {
|
|
|
|
if (enum_valp->value == pref_enumval)
|
|
|
|
return g_strdup(enum_valp->description);
|
|
|
|
enum_valp++;
|
|
|
|
}
|
2012-08-08 12:13:24 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2013-01-05 02:30:58 +00:00
|
|
|
case PREF_STRING:
|
|
|
|
case PREF_FILENAME:
|
|
|
|
return g_strdup(pref_string);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_RANGE:
|
|
|
|
pref_text = range_convert_range(pref_range);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PREF_COLOR:
|
|
|
|
return g_strdup_printf("%02x%02x%02x",
|
|
|
|
(pref_color->red * 255 / 65535),
|
|
|
|
(pref_color->green * 255 / 65535),
|
|
|
|
(pref_color->blue * 255 / 65535));
|
|
|
|
break;
|
|
|
|
|
2012-08-08 12:13:24 +00:00
|
|
|
case PREF_CUSTOM:
|
2013-01-05 02:30:58 +00:00
|
|
|
if (pref->custom_cbs.to_str_cb)
|
2013-01-18 00:50:14 +00:00
|
|
|
return pref->custom_cbs.to_str_cb(pref, source == pref_default ? TRUE : FALSE);
|
2013-01-05 02:30:58 +00:00
|
|
|
pref_text = "[Custom]";
|
2012-08-08 12:13:24 +00:00
|
|
|
break;
|
|
|
|
|
2012-07-08 01:48:52 +00:00
|
|
|
case PREF_OBSOLETE:
|
2013-01-05 02:30:58 +00:00
|
|
|
pref_text = "[Obsolete]";
|
|
|
|
break;
|
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
case PREF_STATIC_TEXT:
|
2013-01-05 02:30:58 +00:00
|
|
|
pref_text = "[Static text]";
|
|
|
|
break;
|
|
|
|
|
2012-07-07 00:30:47 +00:00
|
|
|
case PREF_UAT:
|
2013-01-05 02:30:58 +00:00
|
|
|
{
|
|
|
|
uat_t *uat = (uat_t *) pref->varp.uat;
|
|
|
|
if (uat && uat->filename)
|
|
|
|
return g_strdup_printf("[Managed in the file \"%s\"]", uat->filename);
|
|
|
|
else
|
|
|
|
pref_text = "[Managed in an unknown file]";
|
2012-07-07 00:30:47 +00:00
|
|
|
break;
|
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return g_strdup(pref_text);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Write out a single dissector preference.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
write_pref(gpointer data, gpointer user_data)
|
|
|
|
{
|
|
|
|
pref_t *pref = data;
|
|
|
|
write_pref_arg_t *arg = user_data;
|
|
|
|
gchar **desc_lines;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
switch (pref->type) {
|
|
|
|
case PREF_OBSOLETE:
|
|
|
|
/*
|
|
|
|
* This preference is no longer supported; it's not a
|
|
|
|
* real preference, so we don't write it out (i.e., we
|
|
|
|
* treat it as if it weren't found in the list of
|
|
|
|
* preferences, and we weren't called in the first place).
|
|
|
|
*/
|
|
|
|
return;
|
|
|
|
|
|
|
|
case PREF_STATIC_TEXT:
|
|
|
|
case PREF_UAT:
|
|
|
|
/* Nothing to do; don't bother printing the description */
|
|
|
|
return;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pref->type != PREF_CUSTOM || pref->custom_cbs.type_name_cb() != NULL) {
|
|
|
|
/*
|
|
|
|
* The prefix will either be the module name or the parent
|
|
|
|
* name if its a subtree
|
|
|
|
*/
|
|
|
|
const char *name_prefix = (arg->module->name != NULL) ? arg->module->name : arg->module->parent->name;
|
|
|
|
char *type_desc, *pref_text;
|
|
|
|
const char * def_prefix = prefs_pref_is_default(pref) ? "#" : "";
|
|
|
|
|
|
|
|
if (pref->type == PREF_CUSTOM) fprintf(arg->pf, "\n# %s", pref->custom_cbs.type_name_cb());
|
|
|
|
fprintf(arg->pf, "\n");
|
|
|
|
if (pref->description &&
|
|
|
|
(g_ascii_strncasecmp(pref->description,"", 2) != 0)) {
|
|
|
|
if (pref->type != PREF_CUSTOM) {
|
|
|
|
/* We get duplicate lines otherwise. */
|
|
|
|
|
|
|
|
desc_lines = g_strsplit(pref->description,"\n",0);
|
|
|
|
for (i = 0; desc_lines[i] != NULL; ++i) {
|
|
|
|
fprintf(arg->pf, "# %s\n", desc_lines[i]);
|
|
|
|
}
|
|
|
|
g_strfreev(desc_lines);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
fprintf(arg->pf, "# No description\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
type_desc = prefs_pref_type_description(pref);
|
|
|
|
desc_lines = g_strsplit(type_desc,"\n",0);
|
|
|
|
for (i = 0; desc_lines[i] != NULL; ++i) {
|
|
|
|
fprintf(arg->pf, "# %s\n", desc_lines[i]);
|
|
|
|
}
|
|
|
|
g_strfreev(desc_lines);
|
|
|
|
g_free(type_desc);
|
|
|
|
|
2013-01-18 00:50:14 +00:00
|
|
|
pref_text = prefs_pref_to_str(pref, pref_current);
|
2013-01-05 02:30:58 +00:00
|
|
|
fprintf(arg->pf, "%s%s.%s: ", def_prefix, name_prefix, pref->name);
|
|
|
|
desc_lines = g_strsplit(pref_text,"\n",0);
|
|
|
|
for (i = 0; desc_lines[i] != NULL; ++i) {
|
|
|
|
fprintf(arg->pf, "%s%s\n", i == 0 ? "" : def_prefix, desc_lines[i]);
|
|
|
|
}
|
|
|
|
if (i == 0) fprintf(arg->pf, "\n");
|
|
|
|
g_strfreev(desc_lines);
|
|
|
|
g_free(pref_text);
|
|
|
|
}
|
|
|
|
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
}
|
|
|
|
|
2011-11-10 00:53:48 +00:00
|
|
|
/*
|
|
|
|
* Write out all preferences for a module.
|
|
|
|
*/
|
2012-08-08 20:47:20 +00:00
|
|
|
static guint
|
2012-08-08 16:54:02 +00:00
|
|
|
write_module_prefs(module_t *module, gpointer user_data)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2012-08-08 16:54:02 +00:00
|
|
|
write_gui_pref_arg_t *gui_pref_arg = (write_gui_pref_arg_t*)user_data;
|
2012-07-07 00:30:47 +00:00
|
|
|
write_pref_arg_t arg;
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
/* The GUI module needs to be explicitly called out so it
|
|
|
|
can be written out of order */
|
|
|
|
if ((module == gui_module) && (gui_pref_arg->is_gui_module != TRUE))
|
2012-08-08 20:47:20 +00:00
|
|
|
return 0;
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
/* Write a header for the main modules and GUI sub-modules */
|
|
|
|
if (((module->parent == NULL) || (module->parent == gui_module)) &&
|
|
|
|
((prefs_module_has_submodules(module)) ||
|
|
|
|
(module->numprefs > 0) ||
|
|
|
|
(module->name == NULL))) {
|
|
|
|
if ((module->name == NULL) && (module->parent != NULL)) {
|
|
|
|
fprintf(gui_pref_arg->pf, "\n####### %s: %s ########\n", module->parent->title, module->title);
|
|
|
|
} else {
|
|
|
|
fprintf(gui_pref_arg->pf, "\n####### %s ########\n", module->title);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
arg.module = module;
|
|
|
|
arg.pf = gui_pref_arg->pf;
|
2012-07-07 00:30:47 +00:00
|
|
|
g_list_foreach(arg.module->prefs, write_pref, &arg);
|
2012-08-08 16:54:02 +00:00
|
|
|
|
|
|
|
if(prefs_module_has_submodules(module))
|
|
|
|
return prefs_modules_foreach_submodules(module, write_module_prefs, user_data);
|
|
|
|
|
2012-08-08 20:47:20 +00:00
|
|
|
return 0;
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
|
|
|
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
/* Write out "prefs" to the user's preferences file, and return 0.
|
|
|
|
|
2005-06-13 22:40:11 +00:00
|
|
|
If the preferences file path is NULL, write to stdout.
|
|
|
|
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
If we got an error, stuff a pointer to the path of the preferences file
|
|
|
|
into "*pf_path_return", and return the errno. */
|
2000-01-03 06:29:39 +00:00
|
|
|
int
|
2002-08-01 03:15:29 +00:00
|
|
|
write_prefs(char **pf_path_return)
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
{
|
2002-08-01 03:15:29 +00:00
|
|
|
char *pf_path;
|
1998-11-17 04:29:13 +00:00
|
|
|
FILE *pf;
|
2012-08-08 16:54:02 +00:00
|
|
|
write_gui_pref_arg_t write_gui_pref_info;
|
2001-07-23 00:12:47 +00:00
|
|
|
|
2005-07-27 16:25:44 +00:00
|
|
|
/* Needed for "-G defaultprefs" */
|
|
|
|
init_prefs();
|
|
|
|
|
1998-11-17 04:29:13 +00:00
|
|
|
/* To do:
|
|
|
|
* - Split output lines longer than MAX_VAL_LEN
|
|
|
|
* - Create a function for the preference directory check/creation
|
|
|
|
* so that duplication can be avoided with filter.c
|
|
|
|
*/
|
1998-10-28 21:38:11 +00:00
|
|
|
|
2005-06-13 22:40:11 +00:00
|
|
|
if (pf_path_return != NULL) {
|
2008-01-14 16:40:23 +00:00
|
|
|
pf_path = get_persconffile_path(PF_NAME, TRUE, TRUE);
|
2008-05-22 15:46:27 +00:00
|
|
|
if ((pf = ws_fopen(pf_path, "w")) == NULL) {
|
2005-06-13 22:40:11 +00:00
|
|
|
*pf_path_return = pf_path;
|
|
|
|
return errno;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
pf = stdout;
|
2000-01-03 06:29:39 +00:00
|
|
|
}
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2006-05-21 05:12:17 +00:00
|
|
|
fputs("# Configuration file for Wireshark " VERSION ".\n"
|
2012-07-07 00:30:47 +00:00
|
|
|
"#\n"
|
|
|
|
"# This file is regenerated each time preferences are saved within\n"
|
|
|
|
"# Wireshark. Making manual changes should be safe, however.\n"
|
|
|
|
"# Preferences that have been commented out have not been\n"
|
|
|
|
"# changed from their default value.\n", pf);
|
1999-12-02 04:30:15 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
/*
|
2012-08-08 16:54:02 +00:00
|
|
|
* For "backwards compatibility" the GUI module is written first as its
|
|
|
|
* at the top of the file. This is followed by all modules that can't
|
|
|
|
* fit into the preferences read/write API. Finally the remaining modules
|
|
|
|
* are written in alphabetical order (including of course the protocol preferences)
|
2012-06-25 21:05:36 +00:00
|
|
|
*/
|
2012-08-08 16:54:02 +00:00
|
|
|
write_gui_pref_info.pf = pf;
|
|
|
|
write_gui_pref_info.is_gui_module = TRUE;
|
|
|
|
|
|
|
|
write_module_prefs(gui_module, &write_gui_pref_info);
|
2008-01-16 07:36:34 +00:00
|
|
|
|
2011-09-08 09:35:10 +00:00
|
|
|
{
|
2012-08-08 16:54:02 +00:00
|
|
|
struct filter_expression *fe = *(struct filter_expression **)prefs.filter_expressions;
|
2012-09-27 16:23:06 +00:00
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
if (fe != NULL)
|
|
|
|
fprintf(pf, "\n####### Filter Expressions ########\n");
|
2011-09-08 09:35:10 +00:00
|
|
|
|
|
|
|
while (fe != NULL) {
|
|
|
|
if (fe->deleted == FALSE) {
|
2012-07-07 00:30:47 +00:00
|
|
|
fprintf(pf, "%s: %s\n", PRS_GUI_FILTER_LABEL, fe->label);
|
|
|
|
fprintf(pf, "%s: %s\n", PRS_GUI_FILTER_ENABLED,
|
|
|
|
fe->enabled == TRUE ? "TRUE" : "FALSE");
|
|
|
|
fprintf(pf, "%s: %s\n", PRS_GUI_FILTER_EXPR, fe->expression);
|
2011-09-08 09:35:10 +00:00
|
|
|
}
|
|
|
|
fe = fe->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
write_gui_pref_info.is_gui_module = FALSE;
|
|
|
|
prefs_modules_foreach_submodules(NULL, write_module_prefs, &write_gui_pref_info);
|
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most
likely).
Add a mechanism to allow modules (e.g., dissectors) to register
preference values, which:
can be put into the global or the user's preference file;
can be set from the command line, with arguments to the "-o"
flag;
can be set from tabs in the "Preferences" dialog box.
Use that mechanism to register the "Decode IPv4 TOS field as DiffServ
field" variable for IP as a preference.
Stuff that still needs to be done:
documenting the API for registering preferences;
documenting the "-o" values in the man page (probably needs a
flag similar to "-G", and a Perl script to turn the output into
documentation as is done with the list of field);
handling error checking for numeric values (range checking,
making sure that if the user changes the variable from the GUI
they change it to a valid numeric value);
using the callbacks to, for example, update the display when
preferences are changed (could be expensive);
panic if the user specifies a numeric value with a base other
than 10, 8, or 16.
We may also want to clean up the existing wired-in preferences not to
take effect the instant you tweak the widget, and to add an "Apply"
button to the "Preferences" dialog.
svn path=/trunk/; revision=2117
2000-07-05 09:41:07 +00:00
|
|
|
|
1998-10-28 21:38:11 +00:00
|
|
|
fclose(pf);
|
2000-01-03 06:29:39 +00:00
|
|
|
|
|
|
|
/* XXX - catch I/O errors (e.g. "ran out of disk space") and return
|
|
|
|
an error indication, or maybe write to a new preferences file and
|
|
|
|
rename that file on top of the old one only if there are not I/O
|
|
|
|
errors. */
|
|
|
|
return 0;
|
1998-10-28 21:38:11 +00:00
|
|
|
}
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
|
2012-09-27 16:23:06 +00:00
|
|
|
/** The col_list is only partly managed by the custom preference API
|
2012-08-08 16:54:02 +00:00
|
|
|
* because its data is shared between multiple preferences, so
|
2012-09-27 16:23:06 +00:00
|
|
|
* it's freed here
|
2012-08-08 16:54:02 +00:00
|
|
|
*/
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
static void
|
2012-08-08 16:54:02 +00:00
|
|
|
free_col_info(GList * list)
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
{
|
|
|
|
fmt_data *cfmt;
|
|
|
|
|
2012-08-08 16:54:02 +00:00
|
|
|
while (list != NULL) {
|
|
|
|
cfmt = list->data;
|
2009-03-13 22:06:48 +00:00
|
|
|
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
g_free(cfmt->title);
|
2009-03-13 22:06:48 +00:00
|
|
|
g_free(cfmt->custom_field);
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
g_free(cfmt);
|
2012-08-08 16:54:02 +00:00
|
|
|
list = g_list_remove_link(list, list);
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
}
|
2012-08-08 16:54:02 +00:00
|
|
|
g_list_free(list);
|
|
|
|
list = NULL;
|
Instead of each set of built-in preferences having "ok", "save",
"cancel", and "delete" methods, give them:
"fetch" - fetch from the notebook tab any values not already
stored in "prefs", and store them there, but doesn't apply them;
"apply" - apply the settings in "prefs";
"destroy" - clean up any windows created from the tab.
As we no longer have "cancel" methods, we don't have per-preference code
to revert preference values; instead, we have the common preference
dialog box code make a copy of all the current preferences, and, when
the "Cancel" button is clicked, free the current preferences and copy
the saved preferences to it, and apply the preferences.
Add an "Apply" button to the preference dialog box, which applies the
current preferences without closing the dialog box.
Treat a request to delete the preferences dialog box as equivalent to
clicking "Cancel".
Have a "remember_ptree_widget()" routine to remember all protocol tree
widgets, and use the list of those widgets when we set GUI preferences
for the protocol tree widgets, rather than setting the main protocol
tree widget and then using the list of packet windows. Move that code
out of "main.c" to "proto_draw.c", as it's not used by anything in
"main.c", but is used by stuff in "proto_draw.c".
Make the font one of the preferences we can set on the fly for protocol
tree widgets. Also make it something we can set on the fly for the
packet list widget.
svn path=/trunk/; revision=2316
2000-08-21 08:09:17 +00:00
|
|
|
}
|
2013-01-05 02:30:58 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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:
|
|
|
|
*/
|