forked from osmocom/wireshark
simplified Decode As entry if the next protocol requires manual selection
There's a number of protocols whose payload contains yet another protocol but no criterion to figure out what this next protocol is. Define a new global function register_decode_as_next_proto() to register a Decode As entry for this scenario so the user can manually select the next protocol. A lot of the housekeeping that is normally required for Decode As is not applicable to such a scenario. Provide simple data structures and functions to cover this, make them internal to epan/decode_as.c and allow them to be shared by multiple of the new simplified Decode As entries. (For now, the mechanism is based on an FT_UINT32 dissectore table where all entries are linked to number 0. We should eventually come up with a better mechanism.) Change-Id: I3f81e331d7d04cfdfe9a58732d881652d77fabe2 Reviewed-on: https://code.wireshark.org/review/22376 Reviewed-by: Martin Kaiser <wireshark@kaiser.cx> Petri-Dish: Martin Kaiser <wireshark@kaiser.cx> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
parent
bb20b159f3
commit
1620c45e03
|
@ -1266,6 +1266,7 @@ libwireshark.so.0 libwireshark0 #MINVER#
|
|||
register_custom_dissector_table@Base 1.99.8
|
||||
register_custom_dissector_table@Base 1.99.8
|
||||
register_decode_as@Base 1.12.0~rc1
|
||||
register_decode_as_next_proto@Base 2.5.0
|
||||
register_depend_dissector@Base 2.1.0
|
||||
register_dissector@Base 2.1.0
|
||||
register_dissector_table@Base 1.9.1
|
||||
|
|
|
@ -55,6 +55,41 @@ void register_decode_as(decode_as_t* reg)
|
|||
decode_as_list = g_list_append(decode_as_list, reg);
|
||||
}
|
||||
|
||||
static void next_proto_prompt(packet_info *pinfo _U_, gchar *result)
|
||||
{
|
||||
g_snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Next level protocol as");
|
||||
}
|
||||
|
||||
static gpointer next_proto_value(packet_info *pinfo _U_)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static build_valid_func next_proto_values[] = { next_proto_value };
|
||||
static decode_as_value_t next_proto_da_values =
|
||||
{ next_proto_prompt, 1, next_proto_values };
|
||||
|
||||
void register_decode_as_next_proto(
|
||||
const char *name, const gchar *title, const gchar *table_name)
|
||||
{
|
||||
decode_as_t *da;
|
||||
dissector_table_t dt;
|
||||
|
||||
dt = find_dissector_table(table_name);
|
||||
DISSECTOR_ASSERT(IS_FT_UINT(dissector_table_get_type(dt)));
|
||||
|
||||
da = wmem_new0(wmem_epan_scope(), decode_as_t);
|
||||
da->name = wmem_strdup(wmem_epan_scope(), name);
|
||||
da->title = wmem_strdup(wmem_epan_scope(), title);
|
||||
da->table_name = wmem_strdup(wmem_epan_scope(), table_name);
|
||||
da->num_items = 1;
|
||||
da->values = &next_proto_da_values;
|
||||
da->populate_list = decode_as_default_populate_list;
|
||||
da->reset_value = decode_as_default_reset;
|
||||
da->change_value = decode_as_default_change;
|
||||
|
||||
register_decode_as(da);
|
||||
}
|
||||
|
||||
struct decode_as_default_populate
|
||||
{
|
||||
|
|
|
@ -85,6 +85,14 @@ typedef struct decode_as_s {
|
|||
/** register a "Decode As". A copy of the decode_as_t will be maintained by the decode_as module */
|
||||
WS_DLL_PUBLIC void register_decode_as(decode_as_t* reg);
|
||||
|
||||
/** Register a "Decode As" entry for the special case where there is no
|
||||
indication for the next protocol (such as port number etc.).
|
||||
For now, this will use a uint32 dissector table internally and
|
||||
assign all registered protocols to 0. The framework to do this can
|
||||
be kept internal to epan. */
|
||||
WS_DLL_PUBLIC void register_decode_as_next_proto(
|
||||
const char *name, const gchar *title, const gchar *table_name);
|
||||
|
||||
/* Walk though the dissector table and provide dissector_handle_t for each item in the table */
|
||||
WS_DLL_PUBLIC void decode_as_default_populate_list(const gchar *table_name, decode_as_add_to_list_func add_to_list, gpointer ui_element);
|
||||
/* Clear a FT_UINT32 value from dissector table list */
|
||||
|
|
Loading…
Reference in New Issue