diff options
author | Michael Mann <mmann78@netscape.net> | 2016-10-18 09:14:35 -0400 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-10-18 23:03:23 +0000 |
commit | 739bdfb45f6e6f78a88e978de1eff088377e8330 (patch) | |
tree | ae18b2a7eab3ace0ba533cfb7acd104f726b3945 /epan | |
parent | 09b43591a13e9834a66adbd7b24c3c28af8ea5fc (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.c | 6 | ||||
-rw-r--r-- | epan/prefs.c | 53 |
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; |