From 77d9a059fe2d125a8cfe2193a09804a3e48caf06 Mon Sep 17 00:00:00 2001 From: Michal Labedzki Date: Sun, 8 Mar 2015 14:59:32 +0100 Subject: Qt: Fix DecodeAs Previously DecodeAs neither save its changes nor changes dissector tables. Do that and redissect packets to refresh view. Bug: 10553 Change-Id: Icd8453c9650f0265852f6b6b58bc483b35570a15 Reviewed-on: https://code.wireshark.org/review/7676 Petri-Dish: Michal Labedzki Tested-by: Petri Dish Buildbot Reviewed-by: Michal Labedzki --- epan/decode_as.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'epan/decode_as.c') diff --git a/epan/decode_as.c b/epan/decode_as.c index e54802f10f..f66f17ca19 100644 --- a/epan/decode_as.c +++ b/epan/decode_as.c @@ -77,15 +77,50 @@ void decode_as_default_populate_list(const gchar *table_name, decode_as_add_to_l gboolean decode_as_default_reset(const char *name, const gpointer pattern) { - dissector_reset_uint(name, GPOINTER_TO_UINT(pattern)); + switch (get_dissector_table_selector_type(name)) { + case FT_UINT8: + case FT_UINT16: + case FT_UINT24: + case FT_UINT32: + dissector_reset_uint(name, GPOINTER_TO_UINT(pattern)); + return TRUE; + case FT_STRING: + case FT_STRINGZ: + case FT_UINT_STRING: + case FT_STRINGZPAD: + dissector_reset_string(name, (!pattern)?"":(gchar *) pattern); + return TRUE; + default: + return FALSE; + }; + return TRUE; } gboolean decode_as_default_change(const char *name, const gpointer pattern, gpointer handle, gchar* list_name _U_) { dissector_handle_t* dissector = (dissector_handle_t*)handle; - if (dissector != NULL) - dissector_change_uint(name, GPOINTER_TO_UINT(pattern), *dissector); + if (dissector != NULL) { + switch (get_dissector_table_selector_type(name)) { + case FT_UINT8: + case FT_UINT16: + case FT_UINT24: + case FT_UINT32: + dissector_change_uint(name, GPOINTER_TO_UINT(pattern), *dissector); + return TRUE; + case FT_STRING: + case FT_STRINGZ: + case FT_UINT_STRING: + case FT_STRINGZPAD: + dissector_change_string(name, (!pattern)?"":(gchar *) pattern, *dissector); + return TRUE; + default: + return FALSE; + }; + + return FALSE; + } + return TRUE; } -- cgit v1.2.1