aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-10-18 09:14:35 -0400
committerMichael Mann <mmann78@netscape.net>2016-10-18 23:03:23 +0000
commit739bdfb45f6e6f78a88e978de1eff088377e8330 (patch)
treeae18b2a7eab3ace0ba533cfb7acd104f726b3945 /epan
parent09b43591a13e9834a66adbd7b24c3c28af8ea5fc (diff)
Some Pref <-> Decode As bugfixes.
1. If a deprecated port preference is found, populate the new port preference with the value 2. Mark preferences as changed to trigger preference callback at startup. Change-Id: Ic271841686617e847d2e0ed8800bbb0fa874df47 Reviewed-on: https://code.wireshark.org/review/18274 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan')
-rw-r--r--epan/decode_as.c6
-rw-r--r--epan/prefs.c53
2 files changed, 33 insertions, 26 deletions
diff --git a/epan/decode_as.c b/epan/decode_as.c
index 0342d423aa..cf0e74170f 100644
--- a/epan/decode_as.c
+++ b/epan/decode_as.c
@@ -181,6 +181,7 @@ read_set_decode_as_entries(gchar *key, const gchar *value,
dissector_handle_t handle;
ftenum_t selector_type;
pref_t* pref_value;
+ module_t *module;
selector_type = dissector_table_get_type(sub_dissectors);
@@ -206,7 +207,8 @@ read_set_decode_as_entries(gchar *key, const gchar *value,
}
/* Now apply the value data back to dissector table preference */
- pref_value = prefs_find_preference(prefs_find_module(proto_get_protocol_filter_name(dissector_handle_get_protocol_index(handle))), values[0]);
+ module = prefs_find_module(proto_get_protocol_filter_name(dissector_handle_get_protocol_index(handle)));
+ pref_value = prefs_find_preference(module, values[0]);
if (pref_value != NULL) {
switch(pref_value->type)
{
@@ -215,9 +217,11 @@ read_set_decode_as_entries(gchar *key, const gchar *value,
preference only supports a single value. This leads to a "last port for
dissector in Decode As wins" */
*pref_value->varp.uint = (guint)long_value;
+ module->prefs_changed = TRUE;
break;
case PREF_DECODE_AS_RANGE:
range_add_value(pref_value->varp.range, (guint)long_value);
+ module->prefs_changed = TRUE;
break;
default:
/* XXX - Worth asserting over? */
diff --git a/epan/prefs.c b/epan/prefs.c
index 3f1677115a..aaeca8cc00 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -4208,6 +4208,8 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
guint uval;
dissector_table_t sub_dissectors;
dissector_handle_t handle, tpkt_handle;
+ module_t *module;
+ pref_t *pref;
for (i = 0; i < sizeof(port_prefs)/sizeof(struct port_pref_name); i++)
{
@@ -4218,6 +4220,14 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
if (p == value || *p != '\0')
return FALSE; /* number was bad */
+ module = prefs_find_module((gchar*)port_prefs[i].module_name);
+ pref = prefs_find_preference(module, port_prefs[i].table_name);
+ if (pref != NULL)
+ {
+ module->prefs_changed = TRUE;
+ *pref->varp.uint = uval;
+ }
+
/* If the value is zero, it wouldn't add to the Decode As tables */
if (uval != 0)
{
@@ -4239,25 +4249,15 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
{
if (strcmp(pref_name, port_range_prefs[i].pref_name) == 0)
{
- range_t *newrange;
guint32 range_i, range_j;
- guint32 max_value = 0;
sub_dissectors = find_dissector_table(port_range_prefs[i].table_name);
if (sub_dissectors != NULL) {
- /* Max value is based on datatype of dissector table */
switch (dissector_table_get_type(sub_dissectors)) {
case FT_UINT8:
- max_value = 0xFF;
- break;
case FT_UINT16:
- max_value = 0xFFFF;
- break;
case FT_UINT24:
- max_value = 0xFFFFFF;
- break;
case FT_UINT32:
- max_value = 0xFFFFFFFF;
break;
default:
@@ -4265,26 +4265,29 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
g_assert_not_reached();
}
- if (range_convert_str_work(&newrange, value, max_value,
- TRUE) != CVT_NO_ERROR) {
- return FALSE; /* number was bad */
- }
+ module = prefs_find_module((gchar*)port_range_prefs[i].module_name);
+ pref = prefs_find_preference(module, port_range_prefs[i].table_name);
+ if (pref != NULL)
+ {
+ if (!prefs_set_range_value(pref, value, &module->prefs_changed))
+ {
+ return FALSE; /* number was bad */
+ }
- handle = dissector_table_get_dissector_handle(sub_dissectors, (gchar*)port_range_prefs[i].module_name);
- if (handle != NULL) {
+ handle = dissector_table_get_dissector_handle(sub_dissectors, (gchar*)port_range_prefs[i].module_name);
+ if (handle != NULL) {
- for (range_i = 0; range_i < newrange->nranges; range_i++) {
- for (range_j = newrange->ranges[range_i].low; range_j < newrange->ranges[range_i].high; range_j++) {
- dissector_change_uint(port_range_prefs[i].table_name, range_j, handle);
- decode_build_reset_list(port_range_prefs[i].table_name, dissector_table_get_type(sub_dissectors), GUINT_TO_POINTER(range_j), NULL, NULL);
- }
+ for (range_i = 0; range_i < (*pref->varp.range)->nranges; range_i++) {
+ for (range_j = (*pref->varp.range)->ranges[range_i].low; range_j < (*pref->varp.range)->ranges[range_i].high; range_j++) {
+ dissector_change_uint(port_range_prefs[i].table_name, range_j, handle);
+ decode_build_reset_list(port_range_prefs[i].table_name, dissector_table_get_type(sub_dissectors), GUINT_TO_POINTER(range_j), NULL, NULL);
+ }
- dissector_change_uint(port_range_prefs[i].table_name, newrange->ranges[range_i].high, handle);
- decode_build_reset_list(port_range_prefs[i].table_name, dissector_table_get_type(sub_dissectors), GUINT_TO_POINTER(newrange->ranges[range_i].high), NULL, NULL);
+ dissector_change_uint(port_range_prefs[i].table_name, (*pref->varp.range)->ranges[range_i].high, handle);
+ decode_build_reset_list(port_range_prefs[i].table_name, dissector_table_get_type(sub_dissectors), GUINT_TO_POINTER((*pref->varp.range)->ranges[range_i].high), NULL, NULL);
+ }
}
}
-
- g_free(newrange);
}
return TRUE;