aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--capinfos.c142
-rw-r--r--config.nmake2
-rw-r--r--epan/addr_resolv.c95
-rw-r--r--epan/addr_resolv.h30
-rw-r--r--epan/geoip_db.c29
-rw-r--r--epan/geoip_db.h2
-rw-r--r--epan/oids.c148
-rw-r--r--epan/oids.h2
-rw-r--r--epan/prefs.c268
-rw-r--r--epan/prefs.h7
-rw-r--r--rawshark.c10
-rw-r--r--tshark.c19
-rw-r--r--ui/gtk/CMakeLists.txt2
-rw-r--r--ui/gtk/Makefile.common4
-rw-r--r--ui/gtk/capture_dlg.c18
-rw-r--r--ui/gtk/capture_file_dlg.c18
-rw-r--r--ui/gtk/main.c17
-rw-r--r--ui/gtk/main_menubar.c26
-rw-r--r--ui/gtk/manual_addr_resolv.c8
-rw-r--r--ui/gtk/packet_panes.c2
-rw-r--r--ui/gtk/packet_panes.h2
-rw-r--r--ui/gtk/prefs_dlg.c21
-rw-r--r--ui/gtk/proto_tree_model.c6
-rw-r--r--ui/gtk/proto_tree_model.h2
-rw-r--r--ui/win32/file_dlg_win32.c13
25 files changed, 495 insertions, 398 deletions
diff --git a/capinfos.c b/capinfos.c
index 89d901f64d..f002e4214b 100644
--- a/capinfos.c
+++ b/capinfos.c
@@ -154,6 +154,100 @@ static gboolean cap_order = TRUE; /* Report if packets are in chronolo
static gboolean cap_file_hashes = TRUE; /* Calculate file hashes */
#endif
+#define USE_GOPTION = 1
+#ifdef USE_GOPTION
+static gboolean cap_help = FALSE;
+static gboolean table_report = FALSE;
+
+static GOptionEntry general_entries[] =
+{
+/* General */
+ { "type", 't', 0, G_OPTION_ARG_NONE, &cap_file_type,
+ "display the capture file type", NULL },
+ { "Encapsulation", 'E', 0, G_OPTION_ARG_NONE, &cap_file_encap,
+ "display the capture file encapsulation", NULL },
+#ifdef HAVE_LIBGCRYPT
+ { "Hash", 'H', 0, G_OPTION_ARG_NONE, &cap_file_hashes,
+ "display the SHA1, RMD160, and MD5 hashes of the file", NULL },
+#endif /* HAVE_LIBGCRYPT */
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+static GOptionEntry size_entries[] =
+{
+/* Size */
+ { "packets", 'c', 0, G_OPTION_ARG_NONE, &cap_packet_count,
+ "display the number of packets", NULL },
+ { "size", 's', 0, G_OPTION_ARG_NONE, &cap_file_size,
+ "display the size of the file (in bytes)", NULL },
+ { "tot-len-of-pkts", 'd', 0, G_OPTION_ARG_NONE, &cap_data_size,
+ "display the total length of all packets (in bytes)", NULL },
+ { "snap", 'l', 0, G_OPTION_ARG_NONE, &cap_snaplen,
+ "display the packet size limit (snapshot length)", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+static GOptionEntry time_entries[] =
+{
+/* Time */
+ { "duration", 'u', 0, G_OPTION_ARG_NONE, &cap_duration,
+ "display the capture duration (in seconds)", NULL },
+ { "start", 'a', 0, G_OPTION_ARG_NONE, &cap_start_time,
+ "display the capture start time", NULL },
+ { "end", 'e', 0, G_OPTION_ARG_NONE, &cap_end_time,
+ "display the capture end time", NULL },
+ { "cron", 'o', 0, G_OPTION_ARG_NONE, &cap_order,
+ "display the capture file chronological status (True/False)", NULL },
+ { "start-end-time-sec", 'S', 0, G_OPTION_ARG_NONE, &time_as_secs,
+ "display start and end times as seconds", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+
+static GOptionEntry stats_entries[] =
+{
+/* Statistics */
+ { "bytes", 'y', 0, G_OPTION_ARG_NONE, &cap_data_rate_byte,
+ "display average data rate (in bytes/s)", NULL },
+ { "bits", 'i', 0, G_OPTION_ARG_NONE, &cap_data_rate_bit,
+ "display average data rate (in bits/s)", NULL },
+ { "packet-bytes", 'z', 0, G_OPTION_ARG_NONE, &cap_packet_size,
+ "display average packet size (in bytes)", NULL },
+ { "packets", 'x', 0, G_OPTION_ARG_NONE, &cap_packet_rate,
+ "display average packet rate (in packets/s)", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+
+static GOptionEntry output_format_entries[] =
+{
+/* Output format */
+ { "long", 'L', 0, G_OPTION_ARG_NONE, &long_report,
+ "generate long report (default)", NULL },
+ { "Table", 'T', 0, G_OPTION_ARG_NONE, &table_report,
+ "generate table report", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+
+static GOptionEntry table_report_entries[] =
+{
+/* Table report */
+ { "header-rec", 'R', 0, G_OPTION_ARG_NONE, &table_report_header,
+ "generate header record (default)", NULL },
+ { "no-table", 'r', 0, G_OPTION_ARG_NONE, &table_report_header,
+ "do not generate header record", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+
+static GOptionEntry misc_entries[] =
+{
+ { "helpcompat", 'h', 0, G_OPTION_ARG_NONE, &cap_help,
+ "display help", NULL },
+ { NULL,'\0',0,G_OPTION_ARG_NONE,NULL,NULL,NULL }
+};
+
+GOptionContext *ctx;
+GOptionGroup *general_grp, *size_grp, *time_grp, *stats_grp, *output_grp, *table_report_grp;
+GError *parse_err = NULL;
+
+#endif /* USE_GOPTION */
+
#ifdef HAVE_LIBGCRYPT
#define HASH_SIZE_SHA1 20
#define HASH_SIZE_RMD160 20
@@ -217,6 +311,7 @@ typedef struct _capture_info {
int *encap_counts; /* array of per_packet encap counts; array has one entry per wtap_encap type */
} capture_info;
+
static void
enable_all_infos(void)
{
@@ -950,7 +1045,54 @@ main(int argc, char *argv[])
#endif
/* Process the options */
+#ifdef USE_GOPTION
+ ctx = g_option_context_new(" <infile> ... - print information about capture file(s)");
+ general_grp = g_option_group_new("gen", "General infos:",
+ "Show general options", NULL, NULL);
+ size_grp = g_option_group_new("size", "Size infos:",
+ "Show size options", NULL, NULL);
+ time_grp = g_option_group_new("time", "Time infos:",
+ "Show time options", NULL, NULL);
+ stats_grp = g_option_group_new("stats", "Statistics infos:",
+ "Show statistics options", NULL, NULL);
+ output_grp = g_option_group_new("output", "Output format:",
+ "Show output format options", NULL, NULL);
+ table_report_grp = g_option_group_new("table", "Table report options:",
+ "Show table report options", NULL, NULL);
+ g_option_group_add_entries(general_grp, general_entries);
+ g_option_group_add_entries(size_grp, size_entries);
+ g_option_group_add_entries(time_grp, time_entries);
+ g_option_group_add_entries(stats_grp, stats_entries);
+ g_option_group_add_entries(output_grp, output_format_entries);
+ g_option_group_add_entries(table_report_grp, table_report_entries);
+ g_option_context_add_main_entries(ctx, misc_entries, NULL);
+ g_option_context_add_group(ctx, general_grp);
+ g_option_context_add_group(ctx, size_grp);
+ g_option_context_add_group(ctx, time_grp);
+ g_option_context_add_group(ctx, stats_grp);
+ g_option_context_add_group(ctx, output_grp);
+ g_option_context_add_group(ctx, table_report_grp);
+ /* There's probably a better way to do this, but this works for now.
+ GOptions displays the name in argv[0] as the name of the
+ application. This is reasonable, but because we actually have a
+ script wrapper that calls the executable. The name that gets
+ displayed is not exactly the same as the command the user used
+ ran.
+ */
+ argv[0] = "capinfos";
+ ;
+ if( !g_option_context_parse(ctx, &argc, &argv, &parse_err) ) {
+ if(parse_err) g_print ("option parsing failed: %s\n", parse_err->message);
+ g_print("%s", g_option_context_get_help (ctx, TRUE, NULL));
+ exit(1);
+ }
+ if( cap_help || (argc < 2) ) {
+ g_print("%s", g_option_context_get_help (ctx, FALSE, NULL));
+ exit(0);
+ }
+ g_option_context_free(ctx);
+#endif /* USE_GOPTION */
while ((opt = getopt(argc, argv, "tEcs" FILE_HASH_OPT "dluaeyizvhxoCALTRrSNqQBmb")) !=-1) {
switch (opt) {
diff --git a/config.nmake b/config.nmake
index d45e9b9c4d..540c67d3d4 100644
--- a/config.nmake
+++ b/config.nmake
@@ -104,7 +104,7 @@ PROCESSOR_ARCHITECTURE=amd64
# "Microsoft Visual Studio 2010"
# Visual C++ 10.0, _MSC_VER 1600, msvcr100.dll
-#MSVC_VARIANT=MSVC2010
+MSVC_VARIANT=MSVC2010
# "Microsoft Visual C++ 2010 Express Edition"
# Visual C++ 10.0, _MSC_VER 1600, msvcr100.dll
diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c
index efd671e3b7..e51e4caeff 100644
--- a/epan/addr_resolv.c
+++ b/epan/addr_resolv.c
@@ -286,7 +286,8 @@ static void add_serv_port_cb(const guint32 port);
/*
* Flag controlling what names to resolve.
*/
-guint32 gbl_resolv_flags;
+e_addr_resolve gbl_resolv_flags = {TRUE, FALSE, TRUE, TRUE};
+static guint name_resolve_concurrency = 500;
/*
* Global variables (can be changed in GUI sections)
@@ -362,7 +363,7 @@ typedef struct _async_dns_queue_msg
#endif /* HAVE_C_ARES */
#ifdef ASYNC_DNS
static gboolean async_dns_initialized = FALSE;
-static int async_dns_in_flight = 0;
+static guint async_dns_in_flight = 0;
static GList *async_dns_queue_head = NULL;
/* push a dns request */
@@ -656,7 +657,7 @@ static gchar
tp->port = port;
tp->next = NULL;
- if (!(gbl_resolv_flags & RESOLV_TRANSPORT) ||
+ if ((!gbl_resolv_flags.transport_name) ||
(servp = getservbyport(g_htons(port), serv_proto)) == NULL) {
/* unknown port */
guint32_to_str_buf(port, tp->name, MAXNAMELEN);
@@ -799,8 +800,8 @@ host_lookup(const guint addr, const gboolean resolve, gboolean *found)
if (resolve) {
tp->resolve = TRUE;
#ifdef ASYNC_DNS
- if ((gbl_resolv_flags & RESOLV_CONCURRENT) &&
- prefs.name_resolve_concurrency > 0 &&
+ if (gbl_resolv_flags.concurrent_dns &&
+ name_resolve_concurrency > 0 &&
async_dns_initialized) {
add_async_dns_ipv4(AF_INET, addr);
/* XXX found is set to TRUE, which seems a bit odd, but I'm not
@@ -817,7 +818,7 @@ host_lookup(const guint addr, const gboolean resolve, gboolean *found)
* botch, we don't try to translate an all-zero IP address to a host
* name.
*/
- if (addr != 0 && (gbl_resolv_flags & RESOLV_NETWORK)) {
+ if (addr != 0 && gbl_resolv_flags.network_name) {
/* Use async DNS if possible, else fall back to timeouts,
* else call gethostbyaddr and hope for the best
*/
@@ -908,8 +909,8 @@ host_lookup6(const struct e_in6_addr *addr, const gboolean resolve, gboolean *fo
#ifdef INET6
#ifdef HAVE_C_ARES
- if ((gbl_resolv_flags & RESOLV_CONCURRENT) &&
- prefs.name_resolve_concurrency > 0 &&
+ if ((gbl_resolv_flags.concurrent_dns) &&
+ name_resolve_concurrency > 0 &&
async_dns_initialized) {
caqm = g_malloc(sizeof(async_dns_queue_msg_t));
caqm->family = AF_INET6;
@@ -2377,6 +2378,42 @@ subnet_name_lookup_init(void)
* External Functions
*/
+void
+addr_resolve_pref_init(module_t *nameres)
+{
+ prefs_register_bool_preference(nameres, "mac_name",
+ "Enable MAC name resolution",
+ "e.g. Ethernet address to manufacturer name",
+ &gbl_resolv_flags.mac_name);
+
+ prefs_register_bool_preference(nameres, "network_name",
+ "Enable network name resolution",
+ "e.g. IP address to DNS name (hostname)",
+ &gbl_resolv_flags.network_name);
+
+ prefs_register_bool_preference(nameres, "transport_name",
+ "Enable transport name resolution",
+ "e.g. TCP/UDP port to service name",
+ &gbl_resolv_flags.transport_name);
+
+#if defined(HAVE_C_ARES) || defined(HAVE_GNU_ADNS)
+ prefs_register_bool_preference(nameres, "concurrent_dns",
+ "Enable concurrent DNS name resolution",
+ "be sure to enable network name resolution",
+ &gbl_resolv_flags.concurrent_dns);
+
+ prefs_register_uint_preference(nameres, "name_resolve_concurrency",
+ "Maximum concurrent requests",
+ "maximum parallel running DNS requests",
+ 10,
+ &name_resolve_concurrency);
+#else
+ prefs_register_static_text_preference(nameres, "no_concurrent_dns",
+ "Enable concurrent DNS name resolution: N/A",
+ "Support for this feature was not compiled into this version of Wireshark");
+#endif
+}
+
void
host_name_lookup_init(void) {
char *hostspath;
@@ -2492,7 +2529,7 @@ host_name_lookup_process(gpointer data _U_) {
async_dns_queue_head = g_list_first(async_dns_queue_head);
- while (async_dns_queue_head != NULL && async_dns_in_flight <= prefs.name_resolve_concurrency) {
+ while (async_dns_queue_head != NULL && async_dns_in_flight <= name_resolve_concurrency) {
caqm = (async_dns_queue_msg_t *) async_dns_queue_head->data;
async_dns_queue_head = g_list_remove(async_dns_queue_head, (void *) caqm);
if (caqm->family == AF_INET) {
@@ -2636,7 +2673,7 @@ const gchar *
get_hostname(const guint addr)
{
gboolean found;
- gboolean resolve = gbl_resolv_flags & RESOLV_NETWORK;
+ gboolean resolve = gbl_resolv_flags.network_name;
hashipv4_t *tp = host_lookup(addr, resolve, &found);
if (!resolve)
@@ -2651,7 +2688,7 @@ const gchar *
get_hostname6(const struct e_in6_addr *addr)
{
gboolean found;
- gboolean resolve = gbl_resolv_flags & RESOLV_NETWORK;
+ gboolean resolve = gbl_resolv_flags.network_name;
hashipv6_t *tp = host_lookup6(addr, resolve, &found);
if (!resolve)
@@ -2794,7 +2831,7 @@ gchar *
get_udp_port(guint port)
{
- if (!(gbl_resolv_flags & RESOLV_TRANSPORT)) {
+ if (!gbl_resolv_flags.transport_name) {
return ep_utoa(port);
}
@@ -2806,7 +2843,7 @@ gchar *
get_dccp_port(guint port)
{
- if (!(gbl_resolv_flags & RESOLV_TRANSPORT)) {
+ if (!gbl_resolv_flags.transport_name) {
return ep_utoa(port);
}
@@ -2819,7 +2856,7 @@ gchar *
get_tcp_port(guint port)
{
- if (!(gbl_resolv_flags & RESOLV_TRANSPORT)) {
+ if (!gbl_resolv_flags.transport_name) {
return ep_utoa(port);
}
@@ -2831,7 +2868,7 @@ gchar *
get_sctp_port(guint port)
{
- if (!(gbl_resolv_flags & RESOLV_TRANSPORT)) {
+ if (!gbl_resolv_flags.transport_name) {
return ep_utoa(port);
}
@@ -2894,7 +2931,7 @@ gchar *
get_ether_name(const guint8 *addr)
{
hashether_t *tp;
- gboolean resolve = (gbl_resolv_flags & RESOLV_MAC) != 0;
+ gboolean resolve = gbl_resolv_flags.mac_name;
if (resolve && !eth_resolution_initialized) {
initialize_ethers();
@@ -2917,7 +2954,7 @@ get_ether_name_if_known(const guint8 *addr)
/* Initialize ether structs if we're the first
* ether-related function called */
- if (!(gbl_resolv_flags & RESOLV_MAC))
+ if (!gbl_resolv_flags.mac_name)
return NULL;
if (!eth_resolution_initialized) {
@@ -2962,7 +2999,7 @@ add_ether_byip(const guint ip, const guint8 *eth)
gboolean found;
/* first check that IP address can be resolved */
- if (!(gbl_resolv_flags & RESOLV_NETWORK))
+ if (!gbl_resolv_flags.network_name)
return;
if ((host = host_name_lookup(ip, &found)) == NULL)
@@ -2979,7 +3016,7 @@ const gchar *
get_ipxnet_name(const guint32 addr)
{
- if (!(gbl_resolv_flags & RESOLV_NETWORK)) {
+ if (!gbl_resolv_flags.network_name) {
return ipxnet_to_str_punct(addr, '\0');
}
@@ -3018,12 +3055,12 @@ get_manuf_name(const guint8 *addr)
gchar *cur;
hashmanuf_t *mtp;
- if ((gbl_resolv_flags & RESOLV_MAC) && !eth_resolution_initialized) {
+ if (gbl_resolv_flags.mac_name && !eth_resolution_initialized) {
initialize_ethers();
eth_resolution_initialized = TRUE;
}
- if (!(gbl_resolv_flags & RESOLV_MAC) || ((mtp = manuf_name_lookup(addr)) == NULL)) {
+ if (!gbl_resolv_flags.mac_name || ((mtp = manuf_name_lookup(addr)) == NULL)) {
cur=ep_strdup_printf("%02x:%02x:%02x", addr[0], addr[1], addr[2]);
return cur;
}
@@ -3094,12 +3131,12 @@ get_eui64_name(const guint64 addr_eui64)
/* Copy and convert the address to network byte order. */
*(guint64 *)(void *)(addr) = pntoh64(&(addr_eui64));
- if ((gbl_resolv_flags & RESOLV_MAC) && !eth_resolution_initialized) {
+ if (gbl_resolv_flags.mac_name && !eth_resolution_initialized) {
initialize_ethers();
eth_resolution_initialized = TRUE;
}
- if (!(gbl_resolv_flags & RESOLV_MAC) || ((mtp = manuf_name_lookup(addr)) == NULL)) {
+ if (!gbl_resolv_flags.mac_name || ((mtp = manuf_name_lookup(addr)) == NULL)) {
cur=ep_strdup_printf("%02x:%02x:%02x%02x:%02x:%02x%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7]);
return cur;
}
@@ -3177,14 +3214,14 @@ get_host_ipaddr(const char *host, guint32 *addrp)
* less-than-4 octet notation.
*/
if (!inet_aton(host, &ipaddr)) {
- if (! (gbl_resolv_flags & RESOLV_NETWORK)) {
+ if (!gbl_resolv_flags.network_name) {
return FALSE;
}
/* It's not a valid dotted-quad IP address; is it a valid
* host name? */
#ifdef HAVE_C_ARES
- if (! (gbl_resolv_flags & RESOLV_CONCURRENT) ||
- prefs.name_resolve_concurrency < 1 ||
+ if (! (gbl_resolv_flags.concurrent_dns) ||
+ name_resolve_concurrency < 1 ||
! async_dns_initialized) {
return FALSE;
}
@@ -3253,14 +3290,14 @@ get_host_ipaddr6(const char *host, struct e_in6_addr *addrp)
if (inet_pton(AF_INET6, host, addrp) == 1)
return TRUE;
- if (! (gbl_resolv_flags & RESOLV_NETWORK)) {
+ if (!gbl_resolv_flags.network_name) {
return FALSE;
}
/* try FQDN */
#ifdef HAVE_C_ARES
- if (! (gbl_resolv_flags & RESOLV_CONCURRENT) ||
- prefs.name_resolve_concurrency < 1 ||
+ if (! (gbl_resolv_flags.concurrent_dns) ||
+ name_resolve_concurrency < 1 ||
! async_dns_initialized) {
return FALSE;
}
diff --git a/epan/addr_resolv.h b/epan/addr_resolv.h
index f751efdb12..7b0f13769a 100644
--- a/epan/addr_resolv.h
+++ b/epan/addr_resolv.h
@@ -45,22 +45,17 @@ extern "C" {
#define MAXNAMELEN 64 /* max name length (hostname and port name) */
#endif
+typedef struct _e_addr_resolve {
+ gboolean mac_name;
+ gboolean network_name;
+ gboolean transport_name;
+ gboolean concurrent_dns;
+} e_addr_resolve;
+
/*
* Flag controlling what names to resolve.
*/
-WS_VAR_IMPORT guint32 gbl_resolv_flags;
-
-/* 32 types are sufficient (as are 640k of RAM) */
-/* FIXME: Maybe MANUF/m, IP/i, IP6/6, IPX/x, UDP+TCP/t etc would be
- more useful/consistent */
-#define RESOLV_NONE 0x0
-#define RESOLV_MAC 0x1
-#define RESOLV_NETWORK 0x2
-#define RESOLV_TRANSPORT 0x4
-#define RESOLV_CONCURRENT 0x8
-
-#define RESOLV_ALL_ADDRS (RESOLV_MAC|RESOLV_NETWORK|RESOLV_TRANSPORT)
-#define RESOLV_ALL 0xFFFFFFFF
+WS_VAR_IMPORT e_addr_resolve gbl_resolv_flags;
/* global variables */
@@ -69,10 +64,7 @@ extern gchar *g_ipxnets_path;
extern gchar *g_pethers_path;
extern gchar *g_pipxnets_path;
-/* Functions in resolv.c */
-
-/* Set the flags controlling what names to resolve */
-extern void resolv_set_flags(guint32 flags);
+/* Functions in addr_resolv.c */
/*
* get_udp_port() returns the port name corresponding to that UDP port,
@@ -122,6 +114,10 @@ void get_addr_name_buf(const address *addr, gchar *buf, gsize size);
* Asynchronous host name lookup initialization, processing, and cleanup
*/
+/* Setup name resolution preferences */
+typedef struct pref_module module_t;
+extern void addr_resolve_pref_init(module_t *nameres);
+
/* host_name_lookup_init fires up an ADNS socket if we're using ADNS */
extern void host_name_lookup_init(void);
diff --git a/epan/geoip_db.c b/epan/geoip_db.c
index f99e23ef5e..98bca94dec 100644
--- a/epan/geoip_db.c
+++ b/epan/geoip_db.c
@@ -140,16 +140,13 @@ static void geoip_db_path_free_cb(void* p) {
/**
* Initialize GeoIP lookups
*/
-void
-geoip_db_init(void) {
- guint i;
+void
+geoip_db_pref_init(module_t *nameres)
+{
static uat_field_t geoip_db_paths_fields[] = {
UAT_FLD_DIRECTORYNAME(geoip_mod, path, "GeoIP Database Directory", "The GeoIP database directory path"),
UAT_END_FIELDS
};
- char* geoip_load_error = NULL;
-
- geoip_dat_arr = g_array_new(FALSE, FALSE, sizeof(GeoIP *));
geoip_db_paths_uat = uat_new("GeoIP Database Paths",
sizeof(geoip_db_path_t),
@@ -165,12 +162,22 @@ geoip_db_init(void) {
NULL,
geoip_db_paths_fields);
- uat_load(geoip_db_paths_uat, &geoip_load_error);
+ prefs_register_uat_preference(nameres,
+ "geoip_db_paths",
+ "GeoIP database directories",
+ "Search paths for GeoIP address mapping databases.\n"
+ "Wireshark will look in each directory for files beginning\n"
+ "with \"Geo\" and ending with \".dat\".\n"
+ "You must restart Wireshark for these changes to take\n"
+ "effect.",
+ geoip_db_paths_uat);
+}
+
+void
+geoip_db_init(void) {
+ guint i;
- if (geoip_load_error) {
- report_failure("Error loading GeoIP database path table: %s", geoip_load_error);
- return;
- }
+ geoip_dat_arr = g_array_new(FALSE, FALSE, sizeof(GeoIP *));
for (i = 0; i < num_geoip_db_paths; i++) {
if (geoip_db_paths[i].path) {
diff --git a/epan/geoip_db.h b/epan/geoip_db.h
index ac6ae388c9..85ddd11bbb 100644
--- a/epan/geoip_db.h
+++ b/epan/geoip_db.h
@@ -28,6 +28,7 @@
#define __GEOIP_DB_H__
#include <epan/ipv6-utils.h>
+#include <epan/prefs.h>
/* Fake databases to make lat/lon values available */
/* XXX - find a better way to interface */
@@ -39,6 +40,7 @@
* Init function called from epan.h
*/
extern void geoip_db_init(void);
+extern void geoip_db_pref_init(module_t *nameres);
/**
* Number of databases we have loaded
diff --git a/epan/oids.c b/epan/oids.c
index b6825fcb24..561b1e4732 100644
--- a/epan/oids.c
+++ b/epan/oids.c
@@ -46,6 +46,8 @@
#include <smi.h>
static gboolean oids_init_done = FALSE;
+static gboolean load_smi_modules = FALSE;
+static gboolean suppress_smi_errors = FALSE;
#endif
#define D(level,args) do if (debuglevel >= level) { printf args; printf("\n"); fflush(stdout); } while(0)
@@ -514,61 +516,9 @@ static void register_mibs(void) {
int proto_mibs = -1;
GArray* hfa = g_array_new(FALSE,TRUE,sizeof(hf_register_info));
GArray* etta = g_array_new(FALSE,TRUE,sizeof(gint*));
- static uat_field_t smi_fields[] = {
- UAT_FLD_CSTRING(smi_mod,name,"Module name","The module's name"),
- UAT_END_FIELDS
- };
- static uat_field_t smi_paths_fields[] = {
- UAT_FLD_DIRECTORYNAME(smi_mod,name,"Directory path","The directory name"),
- UAT_END_FIELDS
- };
- char* smi_load_error = NULL;
gchar* path_str;
- smi_modules_uat = uat_new("SMI Modules",
- sizeof(smi_module_t),
- "smi_modules",
- FALSE,
- (void*)&smi_modules,
- &num_smi_modules,
- UAT_CAT_GENERAL,
- "ChSNMPSMIModules",
- smi_mod_copy_cb,
- NULL,
- smi_mod_free_cb,
- restart_needed_warning,
- smi_fields);
-
- smi_paths_uat = uat_new("SMI Paths",
- sizeof(smi_module_t),
- "smi_paths",
- FALSE,
- (void*)&smi_paths,
- &num_smi_paths,
- UAT_CAT_GENERAL,
- "ChSNMPSMIPaths",
- smi_mod_copy_cb,
- NULL,
- smi_mod_free_cb,
- restart_needed_warning,
- smi_paths_fields);
-
-
- uat_load(smi_modules_uat, &smi_load_error);
-
- if (smi_load_error) {
- report_failure("Error Loading SMI Modules Table: %s",smi_load_error);
- return;
- }
-
- uat_load(smi_paths_uat, &smi_load_error);
-
- if (smi_load_error) {
- report_failure("Error Loading SMI Paths Table: %s",smi_load_error);
- return;
- }
-
- if (!prefs.load_smi_modules) {
+ if (!load_smi_modules) {
D(1,("OID resolution not enabled"));
return;
}
@@ -607,7 +557,7 @@ static void register_mibs(void) {
}
if (smi_errors->len) {
- if (!prefs.suppress_smi_errors) {
+ if (!suppress_smi_errors) {
report_failure("The following errors were found while loading the MIBS:\n%s\n\n"
"The Current Path is: %s\n\nYou can avoid this error message "
"by removing the missing MIB modules at Edit -> Preferences"
@@ -631,7 +581,7 @@ static void register_mibs(void) {
* Currently there is no such version. :-(
*/
if (smiModule->conformance == 1) {
- if (!prefs.suppress_smi_errors) {
+ if (!suppress_smi_errors) {
report_failure("Stopped processing module %s due to "
"error(s) to prevent potential crash in libsmi.\n"
"Module's conformance level: %d.\n"
@@ -768,21 +718,103 @@ static void register_mibs(void) {
}
#endif
+void oid_pref_init(module_t *nameres)
+{
+ static uat_field_t smi_fields[] = {
+ UAT_FLD_CSTRING(smi_mod,name,"Module name","The module's name"),
+ UAT_END_FIELDS
+ };
+ static uat_field_t smi_paths_fields[] = {
+ UAT_FLD_DIRECTORYNAME(smi_mod,name,"Directory path","The directory name"),
+ UAT_END_FIELDS
+ };
+
+#ifdef HAVE_LIBSMI
+ prefs_register_bool_preference(nameres, "load_smi_modules",
+ "Enable OID resolution",
+ "You must restart Wireshark for this change to take effect",
+ &load_smi_modules);
+
+ prefs_register_bool_preference(nameres, "suppress_smi_errors",
+ "Suppress SMI errors",
+ "Some errors can be ignored. If unsure, set to false.",
+ &suppress_smi_errors);
+
+ smi_paths_uat = uat_new("SMI Paths",
+ sizeof(smi_module_t),
+ "smi_paths",
+ FALSE,
+ (void*)&smi_paths,
+ &num_smi_paths,
+ UAT_CAT_GENERAL,
+ "ChSNMPSMIPaths",
+ smi_mod_copy_cb,
+ NULL,
+ smi_mod_free_cb,
+ restart_needed_warning,
+ smi_paths_fields);
+
+ prefs_register_uat_preference(nameres,
+ "smi_paths",
+ "SMI (MIB and PIB) paths",
+ "Search paths for SMI (MIB and PIB) modules. You must\n"
+ "restart Wireshark for these changes to take effect.",
+ smi_paths_uat);
+
+ smi_modules_uat = uat_new("SMI Modules",
+ sizeof(smi_module_t),
+ "smi_modules",
+ FALSE,
+ (void*)&smi_modules,
+ &num_smi_modules,
+ UAT_CAT_GENERAL,
+ "ChSNMPSMIModules",
+ smi_mod_copy_cb,
+ NULL,
+ smi_mod_free_cb,
+ restart_needed_warning,
+ smi_fields);
+
+ prefs_register_uat_preference(nameres,
+ "smi_modules",
+ "SMI (MIB and PIB) modules",
+ "List of enabled SMI (MIB and PIB) modules. You must\n"
+ "restart Wireshark for these changes to take effect.",
+ smi_modules_uat);
+
+#else
+ prefs_register_static_text_preference(nameres, "load_smi_modules_static",
+ "Enable OID resolution: N/A",
+ "Support for this feature was not compiled into this version of Wireshark");
+
+ prefs_register_static_text_preference(nameres, "suppress_smi_errors_static",
+ "Suppress SMI errors: N/A",
+ "Support for this feature was not compiled into this version of Wireshark");
+
+ prefs_register_static_text_preference(nameres, "smi_module_path",
+ "SMI (MIB and PIB) modules and paths: N/A",
+ "Support for this feature was not compiled into this version of Wireshark");
+#endif
+}
void oids_init(void) {
+ if (load_smi_modules) {
#ifdef HAVE_LIBSMI
register_mibs();
#else
D(1,("libsmi disabled oid resolution not enabled"));
#endif
+ }
}
void oids_cleanup(void) {
+ if (load_smi_modules) {
#ifdef HAVE_LIBSMI
- unregister_mibs();
+ unregister_mibs();
#else
- D(1,("libsmi disabled oid resolution not enabled"));
+ D(1,("libsmi disabled oid resolution not enabled"));
#endif
+ }
}
const char* oid_subid2string(guint32* subids, guint len) {
@@ -1123,7 +1155,7 @@ oid_get_default_mib_path(void) {
path_str = g_string_new("");
- if (!prefs.load_smi_modules) {
+ if (!load_smi_modules) {
D(1,("OID resolution not enabled"));
return path_str->str;
}
diff --git a/epan/oids.h b/epan/oids.h
index d8c353f50d..3fd03ff293 100644
--- a/epan/oids.h
+++ b/epan/oids.h
@@ -28,6 +28,7 @@
#define __OIDS_H__
#include <epan/ftypes/ftypes.h>
+#include <epan/prefs.h>
/**
*@file
*/
@@ -106,6 +107,7 @@ typedef struct _oid_info_t {
/** init funcion called from epan.h */
extern void oids_init(void);
+extern void oid_pref_init(module_t *nameres);
/** init funcion called from epan.h */
extern void oids_cleanup(void);
diff --git a/epan/prefs.c b/epan/prefs.c
index 35707035d3..1c348ea75d 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -42,6 +42,7 @@
#include <epan/address.h>
#include <epan/addr_resolv.h>
#include <epan/oids.h>
+#include <epan/geoip_db.h>
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/proto.h>
@@ -315,7 +316,8 @@ prefs_register_module_or_subtree(module_t *parent, const char *name,
/*
* Register that a protocol has preferences.
*/
-module_t *protocols_module;
+module_t *protocols_module = NULL;
+module_t *stats_module = NULL;
module_t *
prefs_register_protocol(int id, void (*apply_cb)(void))
@@ -339,7 +341,6 @@ prefs_register_protocol(int id, void (*apply_cb)(void))
proto_get_protocol_name(id), apply_cb);
}
-
module_t *
prefs_register_protocol_subtree(const char *subtree, int id, void (*apply_cb)(void))
{
@@ -931,6 +932,23 @@ prefs_pref_foreach(module_t *module, pref_cb callback, gpointer user_data)
return 0;
}
+static const enum_val_t print_format_vals[] = {
+ { "text", "Plain Text", PR_FMT_TEXT },
+ { "postscript", "Postscript", PR_FMT_PS },
+ { NULL, NULL, 0 }
+};
+
+static const enum_val_t print_dest_vals[] = {
+#ifdef _WIN32
+ /* "PR_DEST_CMD" means "to printer" on Windows */
+ { "command", "Printer", PR_DEST_CMD },
+#else
+ { "command", "Command", PR_DEST_CMD },
+#endif
+ { "file", "File", PR_DEST_FILE },
+ { NULL, NULL, 0 }
+};
+
static void stats_callback(void)
{
/* Test for a sane tap update interval */
@@ -952,30 +970,61 @@ static void stats_callback(void)
void
prefs_register_modules(void)
{
- module_t* stats;
+ module_t *printing, *nameres_module;
if (protocols_module != NULL) {
/* Already setup preferences */
return;
}
- stats = prefs_register_module(NULL, "statistics", "Statistics",
+ /* Name Resolution */
+ nameres_module = prefs_register_module(NULL, "nameres", "Name Resolution",
+ "Name Resolution", NULL);
+ addr_resolve_pref_init(nameres_module);
+ oid_pref_init(nameres_module);
+ geoip_db_pref_init(nameres_module);
+
+ /* Printing */
+ printing = prefs_register_module(NULL, "print", "Printing",
+ "Printing", NULL);
+
+ prefs_register_enum_preference(printing, "format",
+ "Format", "Can be one of \"text\" or \"postscript\"",
+ &prefs.pr_format, print_format_vals, TRUE);
+
+ prefs_register_enum_preference(printing, "destination",
+ "Print to", "Can be one of \"command\" or \"file\"",
+ &prefs.pr_dest, print_dest_vals, TRUE);
+
+#ifndef _WIN32
+ prefs_register_string_preference(printing, "command", "Command",
+ "Output gets piped to this command when the destination is set to \"command\"", &prefs.pr_cmd);
+#endif
+
+ prefs_register_filename_preference(printing, "file", "File",
+ "This is the file that gets written to when the destination is set to \"file\"", &prefs.pr_file);
+
+
+ /* Statistics */
+ stats_module = prefs_register_module(NULL, "statistics", "Statistics",
"Statistics", &stats_callback);
- prefs_register_uint_preference(stats, "update_interval",
+ prefs_register_uint_preference(stats_module, "update_interval",
"Tap update interval in ms",
"Determines time between tap updates",
10,
&prefs.tap_update_interval);
#ifdef HAVE_LIBPORTAUDIO
- prefs_register_uint_preference(stats, "rtp_player_max_visible",
+ 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);
#endif
+
+ /* Protocols */
protocols_module = prefs_register_module(NULL, "protocols", "Protocols",
"Protocols", NULL);
@@ -1456,12 +1505,6 @@ init_prefs(void)
prefs.capture_auto_scroll = TRUE;
prefs.capture_show_info = FALSE;
-/* set the default values for the name resolution dialog box */
- prefs.name_resolve = RESOLV_ALL ^ RESOLV_NETWORK;
- prefs.name_resolve_concurrency = 500;
- prefs.load_smi_modules = FALSE;
- prefs.suppress_smi_errors = FALSE;
-
/* set the default values for the tap/statistics dialog box */
prefs.tap_update_interval = TAP_UPDATE_DEFAULT_INTERVAL;
prefs.rtp_player_max_visible = RTP_PLAYER_DEFAULT_VISIBLE;
@@ -1616,9 +1659,7 @@ read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
FILE *pf;
/* clean up libsmi structures before reading prefs */
- if (prefs.load_smi_modules) {
- oids_cleanup();
- }
+ oids_cleanup();
init_prefs();
@@ -1719,10 +1760,8 @@ read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
}
/* load SMI modules if needed */
- if (prefs.load_smi_modules) {
- oids_init();
- }
-
+ oids_init();
+
return &prefs;
}
@@ -2081,10 +2120,6 @@ prefs_capture_device_monitor_mode(const char *name)
return FALSE;
}
-#define PRS_PRINT_FMT "print.format"
-#define PRS_PRINT_DEST "print.destination"
-#define PRS_PRINT_FILE "print.file"
-#define PRS_PRINT_CMD "print.command"
#define PRS_COL_HIDDEN "column.hidden"
#define PRS_COL_FMT "column.format"
#define PRS_STREAM_CL_FG "stream.client.fg"
@@ -2139,7 +2174,7 @@ prefs_capture_device_monitor_mode(const char *name)
#define PRS_GUI_LAYOUT_CONTENT_1 "gui.layout_content_1"
#define PRS_GUI_LAYOUT_CONTENT_2 "gui.layout_content_2"
#define PRS_GUI_LAYOUT_CONTENT_3 "gui.layout_content_3"
-#define PRS_CONSOLE_LOG_LEVEL "console.log.level"
+#define PRS_CONSOLE_LOG_LEVEL "console.log.level"
#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"
@@ -2179,67 +2214,37 @@ prefs_capture_device_monitor_mode(const char *name)
static const gchar *pr_formats[] = { "text", "postscript" };
static const gchar *pr_dests[] = { "command", "file" };
-typedef struct {
- char letter;
- guint32 value;
-} name_resolve_opt_t;
-
-static name_resolve_opt_t name_resolve_opt[] = {
- { 'm', RESOLV_MAC },
- { 'n', RESOLV_NETWORK },
- { 't', RESOLV_TRANSPORT },
- { 'C', RESOLV_CONCURRENT },
-};
-
-#define N_NAME_RESOLVE_OPT (sizeof name_resolve_opt / sizeof name_resolve_opt[0])
-
-static const char *
-name_resolve_to_string(guint32 name_resolve)
-{
- static char string[N_NAME_RESOLVE_OPT+1];
- char *p;
- unsigned int i;
- gboolean all_opts_set = TRUE;
-
- if (name_resolve == RESOLV_NONE)
- return "FALSE";
- p = &string[0];
- for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
- if (name_resolve & name_resolve_opt[i].value)
- *p++ = name_resolve_opt[i].letter;
- else
- all_opts_set = FALSE;
- }
- *p = '\0';
- if (all_opts_set)
- return "TRUE";
- return string;
-}
-
char
-string_to_name_resolve(char *string, guint32 *name_resolve)
+string_to_name_resolve(char *string, e_addr_resolve *name_resolve)
{
char c;
- unsigned int i;
- *name_resolve = 0;
+ memset(name_resolve, 0, sizeof(e_addr_resolve));
while ((c = *string++) != '\0') {
- for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
- if (c == name_resolve_opt[i].letter) {
- *name_resolve |= name_resolve_opt[i].value;
- break;
+ switch (c) {
+ case 'm':
+ name_resolve->mac_name = TRUE;
+ break;
+ case 'n':
+ name_resolve->network_name = TRUE;
+ break;
+ case 't':
+ name_resolve->transport_name = TRUE;
+ break;
+ case 'C':
+ name_resolve->concurrent_dns = TRUE;
+ break;
+ default:
+ /*
+ * Unrecognized letter.
+ */
+ return c;
}
- }
- if (i == N_NAME_RESOLVE_OPT) {
- /*
- * Unrecognized letter.
- */
- return c;
- }
}
return '\0';
}
+
static void
try_convert_to_custom_column(gpointer *el_data)
{
@@ -2303,29 +2308,7 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_,
pref_t *pref;
gboolean had_a_dot;
- if (strcmp(pref_name, PRS_PRINT_FMT) == 0) {
- if (strcmp(value, pr_formats[PR_FMT_TEXT]) == 0) {
- prefs.pr_format = PR_FMT_TEXT;
- } else if (strcmp(value, pr_formats[PR_FMT_PS]) == 0) {
- prefs.pr_format = PR_FMT_PS;
- } else {
- return PREFS_SET_SYNTAX_ERR;
- }
- } else if (strcmp(pref_name, PRS_PRINT_DEST) == 0) {
- if (strcmp(value, pr_dests[PR_DEST_CMD]) == 0) {
- prefs.pr_dest = PR_DEST_CMD;
- } else if (strcmp(value, pr_dests[PR_DEST_FILE]) == 0) {
- prefs.pr_dest = PR_DEST_FILE;
- } else {
- return PREFS_SET_SYNTAX_ERR;
- }
- } else if (strcmp(pref_name, PRS_PRINT_FILE) == 0) {
- g_free(prefs.pr_file);
- prefs.pr_file = g_strdup(value);
- } else if (strcmp(pref_name, PRS_PRINT_CMD) == 0) {
- g_free(prefs.pr_cmd);
- prefs.pr_cmd = g_strdup(value);
- } else if (strcmp(pref_name, PRS_COL_HIDDEN) == 0) {
+ if (strcmp(pref_name, PRS_COL_HIDDEN) == 0) {
g_free(cols_hidden_list);
cols_hidden_list = g_strdup(value);
/*
@@ -2681,30 +2664,6 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_,
} else if (strcmp(pref_name, PRS_CAP_SYNTAX_CHECK_FILTER) == 0) {
/* Obsolete preference. */
;
-/* handle the global options */
- } else if (strcmp(pref_name, PRS_NAME_RESOLVE) == 0 ||
- strcmp(pref_name, PRS_CAP_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)
- prefs.name_resolve = RESOLV_ALL;
- else if (g_ascii_strcasecmp(value, "false") == 0)
- prefs.name_resolve = RESOLV_NONE;
- else {
- prefs.name_resolve = RESOLV_NONE; /* start out with none set */
- if (string_to_name_resolve(value, &prefs.name_resolve) != '\0')
- return PREFS_SET_SYNTAX_ERR;
- }
- } else if (strcmp(pref_name, PRS_NAME_RESOLVE_CONCURRENCY) == 0) {
- prefs.name_resolve_concurrency = strtol(value, NULL, 10);
- } else if (strcmp(pref_name, PRS_NAME_RESOLVE_LOAD_SMI_MODULES) == 0) {
- prefs.load_smi_modules = ((g_ascii_strcasecmp(value, "true") == 0)?TRUE:FALSE);
- } else if (strcmp(pref_name, PRS_NAME_RESOLVE_SUPPRESS_SMI_ERRORS) == 0) {
- prefs.suppress_smi_errors = ((g_ascii_strcasecmp(value, "true") == 0)?TRUE:FALSE);
} else {
/* To which module does this preference belong? */
module = NULL;
@@ -3739,63 +3698,13 @@ write_prefs(char **pf_path_return)
fprintf(pf, PRS_CAP_SHOW_INFO ": %s\n",
prefs.capture_show_info == TRUE ? "TRUE" : "FALSE");
- fprintf (pf, "\n######## Printing ########\n");
-
- fprintf (pf, "\n# Can be one of \"text\" or \"postscript\".\n");
- if (prefs.pr_format == default_prefs.pr_format)
- fprintf(pf, "#");
- fprintf (pf, "print.format: %s\n", pr_formats[prefs.pr_format]);
-
- fprintf (pf, "\n# Can be one of \"command\" or \"file\".\n");
- if (prefs.pr_dest == default_prefs.pr_dest)
- fprintf(pf, "#");
- fprintf (pf, "print.destination: %s\n", pr_dests[prefs.pr_dest]);
-
- fprintf (pf, "\n# This is the file that gets written to when the "
- "destination is set to \"file\"\n");
- if (strcmp(prefs.pr_file, default_prefs.pr_file) == 0)
- fprintf(pf, "#");
- fprintf (pf, "%s: %s\n", PRS_PRINT_FILE, prefs.pr_file);
-
- fprintf (pf, "\n# Output gets piped to this command when the destination "
- "is set to \"command\"\n");
- if (strcmp(prefs.pr_cmd, default_prefs.pr_cmd) == 0)
- fprintf(pf, "#");
- fprintf (pf, "%s: %s\n", PRS_PRINT_CMD, prefs.pr_cmd);
-
- fprintf(pf, "\n####### Name Resolution ########\n");
-
- fprintf(pf, "\n# Resolve addresses to names?\n");
- fprintf(pf, "# TRUE or FALSE (case-insensitive), or a list of address types to resolve.\n");
- if (prefs.name_resolve == default_prefs.name_resolve)
- fprintf(pf, "#");
- fprintf(pf, PRS_NAME_RESOLVE ": %s\n",
- name_resolve_to_string(prefs.name_resolve));
-
- fprintf(pf, "\n# Name resolution concurrency.\n");
- fprintf(pf, "# A decimal number.\n");
- if (prefs.name_resolve_concurrency == default_prefs.name_resolve_concurrency)
- fprintf(pf, "#");
- fprintf(pf, PRS_NAME_RESOLVE_CONCURRENCY ": %d\n",
- prefs.name_resolve_concurrency);
-
- fprintf(pf, "\n# Load SMI modules?\n");
- fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
- if (prefs.load_smi_modules == default_prefs.load_smi_modules)
- fprintf(pf, "#");
- fprintf(pf, PRS_NAME_RESOLVE_LOAD_SMI_MODULES ": %s\n",
- prefs.load_smi_modules == TRUE ? "TRUE" : "FALSE");
-
- fprintf(pf, "\n# Suppress SMI errors?\n");
- fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
- if (prefs.suppress_smi_errors == default_prefs.suppress_smi_errors)
- fprintf(pf, "#");
- fprintf(pf, PRS_NAME_RESOLVE_SUPPRESS_SMI_ERRORS ": %s\n",
- prefs.suppress_smi_errors == TRUE ? "TRUE" : "FALSE");
-
/*
* XXX - The following members are intentionally not written here because
* they are handled within the 'generic' preference handling:
+ * pr_format
+ * pr_dest
+ * pr_file
+ * pr_cmd
* tap_update_interval
* rtp_player_max_visible
*/
@@ -3842,8 +3751,6 @@ copy_prefs(e_prefs *dest, e_prefs *src)
fmt_data *src_cfmt, *dest_cfmt;
GList *entry;
- dest->pr_format = src->pr_format;
- dest->pr_dest = src->pr_dest;
dest->pr_file = g_strdup(src->pr_file);
dest->pr_cmd = g_strdup(src->pr_cmd);
dest->col_list = NULL;
@@ -3917,11 +3824,12 @@ copy_prefs(e_prefs *dest, e_prefs *src)
dest->capture_real_time = src->capture_real_time;
dest->capture_auto_scroll = src->capture_auto_scroll;
dest->capture_show_info = src->capture_show_info;
- dest->name_resolve = src->name_resolve;
- dest->name_resolve_concurrency = src->name_resolve_concurrency;
+
/*
* XXX - The following members are intentionally not copied because they
* are handled within the 'generic' preference handling:
+ * pr_format
+ * pr_dest
* tap_update_interval
* rtp_player_max_visible
* display_hidden_proto_items
diff --git a/epan/prefs.h b/epan/prefs.h
index 50cac30822..066f136a73 100644
--- a/epan/prefs.h
+++ b/epan/prefs.h
@@ -35,6 +35,7 @@ extern "C" {
#include <epan/params.h>
#include <epan/range.h>
+#include <epan/addr_resolv.h>
#define PR_DEST_CMD 0
#define PR_DEST_FILE 1
@@ -54,7 +55,7 @@ extern "C" {
* Set "*name_resolve" to the bitmask, and return '\0', on success;
* return the bad character in the string on error.
*/
-char string_to_name_resolve(char *string, guint32 *name_resolve);
+char string_to_name_resolve(char *string, e_addr_resolve *name_resolve);
/*
* Modes for the starting directory in File Open dialogs.
@@ -153,10 +154,6 @@ typedef struct _e_prefs {
layout_pane_content_e gui_layout_content_2;
layout_pane_content_e gui_layout_content_3;
gint console_log_level;
- guint32 name_resolve;
- gint name_resolve_concurrency;
- gboolean load_smi_modules;
- gboolean suppress_smi_errors;
gchar *capture_device;
gchar *capture_devices_linktypes;
gchar *capture_devices_descr;
diff --git a/rawshark.c b/rawshark.c
index 2e68a970da..b68fecab9c 100644
--- a/rawshark.c
+++ b/rawshark.c
@@ -542,9 +542,6 @@ main(int argc, char *argv[])
pf_path = NULL;
}
- /* Set the name resolution code's flags from the preferences. */
- gbl_resolv_flags = prefs_p->name_resolve;
-
/* Read the disabled protocols file. */
read_disabled_protos_list(&gdp_path, &gdp_open_errno, &gdp_read_errno,
&dp_path, &dp_open_errno, &dp_read_errno);
@@ -619,11 +616,12 @@ main(int argc, char *argv[])
line_buffered = TRUE;
break;
case 'n': /* No name resolution */
- gbl_resolv_flags = RESOLV_NONE;
+ gbl_resolv_flags.mac_name = FALSE;
+ gbl_resolv_flags.network_name = FALSE;
+ gbl_resolv_flags.transport_name = FALSE;
+ gbl_resolv_flags.concurrent_dns = FALSE;
break;
case 'N': /* Select what types of addresses/port #s to resolve */
- if (gbl_resolv_flags == RESOLV_ALL)
- gbl_resolv_flags = RESOLV_NONE;
badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
if (badopt != '\0') {
cmdarg_err("-N specifies unknown resolving option '%c'; valid options are 'm', 'n', and 't'",
diff --git a/tshark.c b/tshark.c
index fe984bac4d..7ba8124c3e 100644
--- a/tshark.c
+++ b/tshark.c
@@ -1045,9 +1045,6 @@ main(int argc, char *argv[])
pf_path = NULL;
}
- /* Set the name resolution code's flags from the preferences. */
- gbl_resolv_flags = prefs_p->name_resolve;
-
/* Read the disabled protocols file. */
read_disabled_protos_list(&gdp_path, &gdp_open_errno, &gdp_read_errno,
&dp_path, &dp_open_errno, &dp_read_errno);
@@ -1215,11 +1212,12 @@ main(int argc, char *argv[])
#endif
break;
case 'n': /* No name resolution */
- gbl_resolv_flags = RESOLV_NONE;
+ gbl_resolv_flags.mac_name = FALSE;
+ gbl_resolv_flags.network_name = FALSE;
+ gbl_resolv_flags.transport_name = FALSE;
+ gbl_resolv_flags.concurrent_dns = FALSE;
break;
case 'N': /* Select what types of addresses/port #s to resolve */
- if (gbl_resolv_flags == RESOLV_ALL)
- gbl_resolv_flags = RESOLV_NONE;
badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
if (badopt != '\0') {
cmdarg_err("-N specifies unknown resolving option '%c';",
@@ -2513,7 +2511,8 @@ process_packet_first_pass(capture_file *cf,
run a read filter, or we're going to process taps, set up to
do a dissection and do so. */
if (do_dissection) {
- if (gbl_resolv_flags)
+ if (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
+ gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns)
/* Grab any resolved addresses */
host_name_lookup_process(NULL);
@@ -2572,7 +2571,8 @@ process_packet_second_pass(capture_file *cf, frame_data *fdata,
run a read filter, or we're going to process taps, set up to
do a dissection and do so. */
if (do_dissection) {
- if (gbl_resolv_flags)
+ if (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
+ gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns)
/* Grab any resolved addresses */
host_name_lookup_process(NULL);
@@ -3026,7 +3026,8 @@ process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr,
run a read filter, or we're going to process taps, set up to
do a dissection and do so. */
if (do_dissection) {
- if (print_packet_info && gbl_resolv_flags)
+ if (print_packet_info && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
+ gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns))
/* Grab any resolved addresses */
host_name_lookup_process(NULL);
diff --git a/ui/gtk/CMakeLists.txt b/ui/gtk/CMakeLists.txt
index 37dbbad1b5..bc58536a43 100644
--- a/ui/gtk/CMakeLists.txt
+++ b/ui/gtk/CMakeLists.txt
@@ -96,8 +96,6 @@ set(WIRESHARK_GTK_SRC
prefs_filter_expressions.c
prefs_gui.c
prefs_layout.c
- prefs_nameres.c
- prefs_print.c
prefs_stream.c
print_dlg.c
profile_dlg.c
diff --git a/ui/gtk/Makefile.common b/ui/gtk/Makefile.common
index 85ae2ce137..6e94be5a44 100644
--- a/ui/gtk/Makefile.common
+++ b/ui/gtk/Makefile.common
@@ -121,8 +121,6 @@ WIRESHARK_GTK_SRC = \
prefs_filter_expressions.c \
prefs_gui.c \
prefs_layout.c \
- prefs_nameres.c \
- prefs_print.c \
prefs_stream.c \
print_dlg.c \
profile_dlg.c \
@@ -324,8 +322,6 @@ noinst_HEADERS = \
prefs_filter_expressions.h \
prefs_gui.h \
prefs_layout.h \
- prefs_nameres.h \
- prefs_print.h \
prefs_stream.h \
profile_dlg.h \
proto_dlg.h \
diff --git a/ui/gtk/capture_dlg.c b/ui/gtk/capture_dlg.c
index 7f338dbc49..d99dbfae04 100644
--- a/ui/gtk/capture_dlg.c
+++ b/ui/gtk/capture_dlg.c
@@ -4072,21 +4072,21 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
m_resolv_cb = gtk_check_button_new_with_mnemonic(
"Enable _MAC name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_resolv_cb),
- gbl_resolv_flags & RESOLV_MAC);
+ gbl_resolv_flags.mac_name);
gtk_widget_set_tooltip_text(m_resolv_cb, "Perform MAC layer name resolution while capturing.");
gtk_container_add(GTK_CONTAINER(resolv_vb), m_resolv_cb);
n_resolv_cb = gtk_check_button_new_with_mnemonic(
"Enable _network name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(n_resolv_cb),
- gbl_resolv_flags & RESOLV_NETWORK);
+ gbl_resolv_flags.network_name);
gtk_widget_set_tooltip_text(n_resolv_cb, "Perform network layer name resolution while capturing.");
gtk_container_add(GTK_CONTAINER(resolv_vb), n_resolv_cb);
t_resolv_cb = gtk_check_button_new_with_mnemonic(
"Enable _transport name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(t_resolv_cb),
- gbl_resolv_flags & RESOLV_TRANSPORT);
+ gbl_resolv_flags.transport_name);
gtk_widget_set_tooltip_text(t_resolv_cb,
"Perform transport layer name resolution while capturing.");
gtk_container_add(GTK_CONTAINER(resolv_vb), t_resolv_cb);
@@ -4386,17 +4386,17 @@ capture_dlg_prep(gpointer parent_w) {
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hide_info_cb));
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_resolv_cb)))
- gbl_resolv_flags |= RESOLV_MAC;
+ gbl_resolv_flags.mac_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_MAC;
+ gbl_resolv_flags.mac_name = FALSE;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(n_resolv_cb)))
- gbl_resolv_flags |= RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = FALSE;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t_resolv_cb)))
- gbl_resolv_flags |= RESOLV_TRANSPORT;
+ gbl_resolv_flags.transport_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_TRANSPORT;
+ gbl_resolv_flags.transport_name = FALSE;
global_capture_opts.has_ring_num_files =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ringbuffer_nbf_cb));
diff --git a/ui/gtk/capture_file_dlg.c b/ui/gtk/capture_file_dlg.c
index 0fc9c398fc..f547740b5f 100644
--- a/ui/gtk/capture_file_dlg.c
+++ b/ui/gtk/capture_file_dlg.c
@@ -512,18 +512,18 @@ file_open_cmd(GtkWidget *w)
/* resolve buttons */
m_resolv_cb = gtk_check_button_new_with_mnemonic("Enable _MAC name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_resolv_cb),
- gbl_resolv_flags & RESOLV_MAC);
+ gbl_resolv_flags.mac_name);
gtk_box_pack_start(GTK_BOX(main_vb), m_resolv_cb, FALSE, FALSE, 0);
gtk_widget_show(m_resolv_cb);
n_resolv_cb = gtk_check_button_new_with_mnemonic("Enable _network name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(n_resolv_cb),
- gbl_resolv_flags & RESOLV_NETWORK);
+ gbl_resolv_flags.network_name);
gtk_box_pack_start(GTK_BOX(main_vb), n_resolv_cb, FALSE, FALSE, 0);
gtk_widget_show(n_resolv_cb);
t_resolv_cb = gtk_check_button_new_with_mnemonic("Enable _transport name resolution");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(t_resolv_cb),
- gbl_resolv_flags & RESOLV_TRANSPORT);
+ gbl_resolv_flags.transport_name);
gtk_box_pack_start(GTK_BOX(main_vb), t_resolv_cb, FALSE, FALSE, 0);
gtk_widget_show(t_resolv_cb);
@@ -580,17 +580,17 @@ file_open_cmd(GtkWidget *w)
/* Set the global resolving variable */
gbl_resolv_flags = prefs.name_resolve;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_resolv_cb)))
- gbl_resolv_flags |= RESOLV_MAC;
+ gbl_resolv_flags.mac_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_MAC;
+ gbl_resolv_flags.mac_name = FALSE;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(n_resolv_cb)))
- gbl_resolv_flags |= RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = FALSE;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t_resolv_cb)))
- gbl_resolv_flags |= RESOLV_TRANSPORT;
+ gbl_resolv_flags.transport_name = TRUE;
else
- gbl_resolv_flags &= ~RESOLV_TRANSPORT;
+ gbl_resolv_flags.transport_name = FALSE;
/* We've crossed the Rubicon; get rid of the file selection box. */
window_destroy(GTK_WIDGET(file_open_w));
diff --git a/ui/gtk/main.c b/ui/gtk/main.c
index f7732e9518..34f65f2ccc 100644
--- a/ui/gtk/main.c
+++ b/ui/gtk/main.c
@@ -916,8 +916,11 @@ void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) {
}
void resolve_name_cb(GtkWidget *widget _U_, gpointer data _U_) {
- if (cfile.edt->tree)
- proto_tree_draw_resolve(cfile.edt->tree, tree_view_gbl, RESOLV_ALL);
+ e_addr_resolve resolv_flags = {TRUE, TRUE, TRUE, TRUE};
+
+ if (cfile.edt->tree) {
+ proto_tree_draw_resolve(cfile.edt->tree, tree_view_gbl, resolv_flags);
+ }
}
/* Update main window items based on whether there's a capture in progress. */
@@ -2665,11 +2668,12 @@ main(int argc, char *argv[])
prefs_p->gui_font_name = g_strdup(optarg);
break;
case 'n': /* No name resolution */
- gbl_resolv_flags = RESOLV_NONE;
+ gbl_resolv_flags.mac_name = FALSE;
+ gbl_resolv_flags.network_name = FALSE;
+ gbl_resolv_flags.transport_name = FALSE;
+ gbl_resolv_flags.concurrent_dns = FALSE;
break;
case 'N': /* Select what types of addresses/port #s to resolve */
- if (gbl_resolv_flags == RESOLV_ALL)
- gbl_resolv_flags = RESOLV_NONE;
badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
if (badopt != '\0') {
cmdarg_err("-N specifies unknown resolving option '%c'; valid options are 'm', 'n', and 't'",
@@ -3854,9 +3858,6 @@ prefs_to_capture_opts(void)
global_capture_opts.real_time_mode = prefs.capture_real_time;
auto_scroll_live = prefs.capture_auto_scroll;
#endif /* HAVE_LIBPCAP */
-
- /* Set the name resolution code's flags from the preferences. */
- gbl_resolv_flags = prefs.name_resolve;
}
static void copy_global_profile (const gchar *profile_name)
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c
index 8b9ad2df7f..5589590a0a 100644
--- a/ui/gtk/main_menubar.c
+++ b/ui/gtk/main_menubar.c
@@ -152,7 +152,7 @@ static void set_menu_sensitivity (GtkUIManager *ui_manager, const gchar *, gint)
#if !defined(WANT_PACKET_EDITOR) || !defined(HAVE_LIBPCAP)
static void set_menu_visible(GtkUIManager *ui_manager, const gchar *path, gint val);
#endif
-static void name_resolution_cb(GtkWidget *w, gpointer d, gint action);
+static void name_resolution_cb(GtkWidget *w, gpointer d, gboolean* res_flag);
static void colorize_cb(GtkWidget *w, gpointer d);
@@ -727,7 +727,7 @@ view_menu_en_for_MAC_cb(GtkAction *action _U_, gpointer user_data)
if (!widget){
g_warning("view_menu_en_for_MAC_cb: No widget found");
}else{
- name_resolution_cb( widget , user_data, RESOLV_MAC);
+ name_resolution_cb( widget , user_data, &gbl_resolv_flags.mac_name);
}
}
@@ -738,7 +738,7 @@ view_menu_en_for_network_cb(GtkAction *action _U_, gpointer user_data)
if (!widget){
g_warning("view_menu_en_for_network_cb: No widget found");
}else{
- name_resolution_cb( widget , user_data, RESOLV_NETWORK);
+ name_resolution_cb( widget , user_data, &gbl_resolv_flags.network_name);
}
}
@@ -749,7 +749,7 @@ view_menu_en_for_transport_cb(GtkAction *action _U_, gpointer user_data)
if (!widget){
g_warning("view_menu_en_for_transport_cb: No widget found");
}else{
- name_resolution_cb( widget , user_data, RESOLV_TRANSPORT);
+ name_resolution_cb( widget , user_data, &gbl_resolv_flags.transport_name);
}
}
@@ -4301,29 +4301,29 @@ menu_name_resolution_changed(void)
if(!menu){
g_warning("menu_name_resolution_changed: No menu found, path= /Menubar/ViewMenu/NameResolution/EnableforMACLayer");
}
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags & RESOLV_MAC);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags.mac_name);
menu = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/EnableforNetworkLayer");
if(!menu){
g_warning("menu_name_resolution_changed: No menu found, path= /Menubar/ViewMenu/NameResolution/EnableforNetworkLayer");
}
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags & RESOLV_NETWORK);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags.network_name);
menu = gtk_ui_manager_get_widget(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/EnableforTransportLayer");
if(!menu){
g_warning("menu_name_resolution_changed: No menu found, path= /Menubar/ViewMenu/NameResolution/EnableforTransportLayer");
}
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags & RESOLV_TRANSPORT);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), gbl_resolv_flags.transport_name);
}
static void
-name_resolution_cb(GtkWidget *w, gpointer d _U_, gint action)
+name_resolution_cb(GtkWidget *w, gpointer d _U_, gboolean* res_flag)
{
if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))) {
- gbl_resolv_flags |= action;
+ *res_flag = TRUE;
} else {
- gbl_resolv_flags &= ~action;
+ *res_flag = FALSE;
}
}
@@ -4889,7 +4889,8 @@ set_menus_for_selected_packet(capture_file *cf)
set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/PrepareaFilter",
frame_selected);
set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ResolveName",
- frame_selected && (gbl_resolv_flags & RESOLV_ALL_ADDRS) != RESOLV_ALL_ADDRS);
+ frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
+ gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns));
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowTCPStream",
frame_selected ? (cf->edt->pi.ipproto == IP_PROTO_TCP) : FALSE);
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowUDPStream",
@@ -4899,7 +4900,8 @@ set_menus_for_selected_packet(capture_file *cf)
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/DecodeAs",
frame_selected && decode_as_ok());
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/ResolveName",
- frame_selected && (gbl_resolv_flags & RESOLV_ALL_ADDRS) != RESOLV_ALL_ADDRS);
+ frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
+ gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns));
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ToolsMenu/FirewallACLRules",
frame_selected);
set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/StatisticsMenu/TCPStreamGraphMenu",
diff --git a/ui/gtk/manual_addr_resolv.c b/ui/gtk/manual_addr_resolv.c
index 4784eec908..bdb54b8774 100644
--- a/ui/gtk/manual_addr_resolv.c
+++ b/ui/gtk/manual_addr_resolv.c
@@ -75,9 +75,9 @@ man_addr_resolv_ok (GtkWidget *w _U_, gpointer data _U_)
resolv_cb = g_object_get_data (G_OBJECT(man_addr_resolv_dlg), "resolv");
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(resolv_cb));
- if (!(gbl_resolv_flags & RESOLV_NETWORK) && active) {
+ if (!gbl_resolv_flags.network_name && active) {
/* Name resolution for Network Layer activated */
- gbl_resolv_flags |= RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = TRUE;
menu_name_resolution_changed ();
redissect = TRUE;
}
@@ -152,8 +152,8 @@ manual_addr_resolv_dlg (GtkWidget *w _U_, gpointer data)
gtk_container_add (GTK_CONTAINER(vbox), sep);
resolv_cb = gtk_check_button_new_with_mnemonic ("Enable network name resolution");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(resolv_cb), gbl_resolv_flags & RESOLV_NETWORK);
- gtk_widget_set_sensitive (resolv_cb, !(gbl_resolv_flags & RESOLV_NETWORK));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(resolv_cb), gbl_resolv_flags.network_name);
+ gtk_widget_set_sensitive (resolv_cb, !gbl_resolv_flags.network_name);
gtk_widget_set_tooltip_text(resolv_cb, "Perform network layer name resolution.");
g_object_set_data (G_OBJECT(man_addr_resolv_dlg), "resolv", resolv_cb);
diff --git a/ui/gtk/packet_panes.c b/ui/gtk/packet_panes.c
index 3e62c9c2c0..84efc4c8b8 100644
--- a/ui/gtk/packet_panes.c
+++ b/ui/gtk/packet_panes.c
@@ -2132,7 +2132,7 @@ expand_finfos(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointe
}
void
-proto_tree_draw_resolve(proto_tree *protocol_tree, GtkWidget *tree_view, guint32 resolv)
+proto_tree_draw_resolve(proto_tree *protocol_tree, GtkWidget *tree_view, e_addr_resolve resolv)
{
ProtoTreeModel *model;
diff --git a/ui/gtk/packet_panes.h b/ui/gtk/packet_panes.h
index 2177f2e240..839385ec61 100644
--- a/ui/gtk/packet_panes.h
+++ b/ui/gtk/packet_panes.h
@@ -192,7 +192,7 @@ extern GtkWidget * proto_tree_view_new(e_prefs *prefs, GtkWidget **tree_view_p);
*/
extern void proto_tree_draw(proto_tree *protocol_tree, GtkWidget *tree_view);
-extern void proto_tree_draw_resolve(proto_tree *protocol_tree, GtkWidget *tree_view, guint32 resolv);
+extern void proto_tree_draw_resolve(proto_tree *protocol_tree, GtkWidget *tree_view, e_addr_resolve resolv);
/** Expand the whole tree view.
*
diff --git a/ui/gtk/prefs_dlg.c b/ui/gtk/prefs_dlg.c
index bb1a907400..caa1f6d8a9 100644
--- a/ui/gtk/prefs_dlg.c
+++ b/ui/gtk/prefs_dlg.c
@@ -44,12 +44,10 @@
#include "ui/gtk/prefs_column.h"
#include "ui/gtk/prefs_dlg.h"
#include "ui/gtk/prefs_filter_expressions.h"
-#include "ui/gtk/prefs_print.h"
#include "ui/gtk/prefs_stream.h"
#include "ui/gtk/prefs_gui.h"
#include "ui/gtk/prefs_layout.h"
#include "ui/gtk/prefs_capture.h"
-#include "ui/gtk/prefs_nameres.h"
#include "ui/gtk/gui_utils.h"
#include "ui/gtk/dlg_utils.h"
#include "ui/gtk/stock_icons.h"
@@ -95,7 +93,6 @@ static GtkWidget *create_preference_filename_entry(GtkWidget *, int,
#define E_GUI_FONT_PAGE_KEY "gui_font_options_page"
#define E_GUI_COLORS_PAGE_KEY "gui_colors_options_page"
#define E_CAPTURE_PAGE_KEY "capture_options_page"
-#define E_PRINT_PAGE_KEY "printer_options_page"
#define E_NAMERES_PAGE_KEY "nameres_options_page"
#define E_FILTER_EXPRESSIONS_PAGE_KEY "filter_expressions_page"
@@ -623,18 +620,6 @@ prefs_page_cb(GtkWidget *w _U_, gpointer dummy _U_, PREFS_PAGE_E prefs_page)
prefs_tree_page_add(label_str, cts.page, store, NULL);
cts.page++;
- /* Name resolution prefs */
- g_strlcpy(label_str, "Name Resolution", MAX_TREE_NODE_NAME_LEN);
- prefs_nb_page_add(prefs_nb, label_str, nameres_prefs_show(), E_NAMERES_PAGE_KEY);
- prefs_tree_page_add(label_str, cts.page, store, NULL);
- cts.page++;
-
- /* Printing prefs */
- g_strlcpy(label_str, "Printing", MAX_TREE_NODE_NAME_LEN);
- prefs_nb_page_add(prefs_nb, label_str, printer_prefs_show(), E_PRINT_PAGE_KEY);
- prefs_tree_page_add(label_str, cts.page, store, NULL);
- cts.page++;
-
/* Registered prefs */
cts.notebook = prefs_nb;
cts.store = store;
@@ -1346,8 +1331,6 @@ prefs_main_fetch_all(GtkWidget *dlg, gboolean *must_redissect)
}
#endif /* _WIN32 */
#endif /* HAVE_LIBPCAP */
- printer_prefs_fetch(g_object_get_data(G_OBJECT(dlg), E_PRINT_PAGE_KEY));
- nameres_prefs_fetch(g_object_get_data(G_OBJECT(dlg), E_NAMERES_PAGE_KEY));
filter_expressions_prefs_fetch(g_object_get_data(G_OBJECT(dlg),
E_FILTER_EXPRESSIONS_PAGE_KEY));
prefs_modules_foreach(module_prefs_fetch, must_redissect);
@@ -1383,8 +1366,6 @@ prefs_main_apply_all(GtkWidget *dlg, gboolean redissect)
}
#endif /* _WIN32 */
#endif /* HAVE_LIBPCAP */
- printer_prefs_apply(g_object_get_data(G_OBJECT(dlg), E_PRINT_PAGE_KEY));
- nameres_prefs_apply(g_object_get_data(G_OBJECT(dlg), E_NAMERES_PAGE_KEY));
/* show/hide the Save button - depending on setting */
save_bt = g_object_get_data(G_OBJECT(prefs_w), E_PREFSW_SAVE_BT_KEY);
@@ -1425,8 +1406,6 @@ prefs_main_destroy_all(GtkWidget *dlg)
}
#endif /* _WIN32 */
#endif /* HAVE_LIBPCAP */
- printer_prefs_destroy(g_object_get_data(G_OBJECT(dlg), E_PRINT_PAGE_KEY));
- nameres_prefs_destroy(g_object_get_data(G_OBJECT(dlg), E_NAMERES_PAGE_KEY));
/* Free up the saved preferences (both for "prefs" and for registered
preferences). */
diff --git a/ui/gtk/proto_tree_model.c b/ui/gtk/proto_tree_model.c
index 46c66ee278..837948029a 100644
--- a/ui/gtk/proto_tree_model.c
+++ b/ui/gtk/proto_tree_model.c
@@ -54,7 +54,7 @@ struct proto_tree_model {
int with_hidden;
gboolean resolv_forced;
- guint32 resolv_flags;
+ e_addr_resolve resolv_flags;
};
#include "proto_tree_model.h"
@@ -202,7 +202,7 @@ proto_tree_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint col
{
g_value_init(value, G_TYPE_STRING);
if (model->resolv_forced) {
- guint32 old_flags = gbl_resolv_flags;
+ e_addr_resolve old_flags = gbl_resolv_flags;
gbl_resolv_flags = model->resolv_flags;
g_value_take_string(value, fi_get_string(fi));
@@ -455,7 +455,7 @@ proto_tree_model_get_type(void)
}
void
-proto_tree_model_force_resolv(ProtoTreeModel *model, guint32 flags)
+proto_tree_model_force_resolv(ProtoTreeModel *model, e_addr_resolve flags)
{
model->resolv_forced = TRUE;
model->resolv_flags = flags;
diff --git a/ui/gtk/proto_tree_model.h b/ui/gtk/proto_tree_model.h
index 26d003a87b..bf9fb203b6 100644
--- a/ui/gtk/proto_tree_model.h
+++ b/ui/gtk/proto_tree_model.h
@@ -37,6 +37,6 @@ typedef struct proto_tree_model ProtoTreeModel;
GType proto_tree_model_get_type(void);
ProtoTreeModel *proto_tree_model_new(proto_tree *protocol_tree, int display_hidden_proto_items);
-void proto_tree_model_force_resolv(ProtoTreeModel *model, guint32 resolv_flags);
+void proto_tree_model_force_resolv(ProtoTreeModel *model, e_addr_resolve resolv_flags);
#endif /* __PROTO_TREE_MODEL_H__ */
diff --git a/ui/win32/file_dlg_win32.c b/ui/win32/file_dlg_win32.c
index 27e5d51796..8f2d9dbb94 100644
--- a/ui/win32/file_dlg_win32.c
+++ b/ui/win32/file_dlg_win32.c
@@ -1612,11 +1612,11 @@ open_file_hook_proc(HWND of_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) {
/* Fill in our resolution values */
cur_ctrl = GetDlgItem(of_hwnd, EWFD_MAC_NR_CB);
- SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_MAC, 0);
+ SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags.mac_name, 0);
cur_ctrl = GetDlgItem(of_hwnd, EWFD_NET_NR_CB);
- SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_NETWORK, 0);
+ SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags.network_name, 0);
cur_ctrl = GetDlgItem(of_hwnd, EWFD_TRANS_NR_CB);
- SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_TRANSPORT, 0);
+ SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags.transport_name, 0);
preview_set_filename(of_hwnd, NULL);
break;
@@ -1630,16 +1630,15 @@ open_file_hook_proc(HWND of_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) {
dfilter_str = filter_tb_get(cur_ctrl);
/* Fetch our resolution values */
- gbl_resolv_flags = prefs.name_resolve & RESOLV_CONCURRENT;
cur_ctrl = GetDlgItem(of_hwnd, EWFD_MAC_NR_CB);
if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gbl_resolv_flags |= RESOLV_MAC;
+ gbl_resolv_flags.mac_name = TRUE;
cur_ctrl = GetDlgItem(of_hwnd, EWFD_NET_NR_CB);
if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gbl_resolv_flags |= RESOLV_NETWORK;
+ gbl_resolv_flags.network_name = TRUE;
cur_ctrl = GetDlgItem(of_hwnd, EWFD_TRANS_NR_CB);
if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gbl_resolv_flags |= RESOLV_TRANSPORT;
+ gbl_resolv_flags.transport_name = TRUE;
break;
case CDN_SELCHANGE:
/* This _almost_ works correctly. We need to handle directory