From a71765a619f8da8597f5f8e140bbf0dbb2e68829 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 24 Mar 2020 14:39:58 +0200 Subject: TPNCP: Simplify names for data field info Change-Id: Id02c6bd553251ed1c318af2687f4c9d2d3b6db8f Reviewed-on: https://code.wireshark.org/review/36565 Petri-Dish: Alexis La Goutte Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- epan/dissectors/packet-tpncp.c | 160 +++++++++++++++++++---------------------- 1 file changed, 74 insertions(+), 86 deletions(-) diff --git a/epan/dissectors/packet-tpncp.c b/epan/dissectors/packet-tpncp.c index 73b20f7eff..d2a0e3bf3a 100644 --- a/epan/dissectors/packet-tpncp.c +++ b/epan/dissectors/packet-tpncp.c @@ -50,14 +50,14 @@ void proto_reg_handoff_tpncp(void); /* The linked list for storing information about specific data fields. */ typedef struct tpncp_data_field_info { - gchar *tpncp_data_field_name; - gint tpncp_data_field_descr; - gint tpncp_ipv6_data_field_descr; - gint tpncp_data_field_sign; - gint tpncp_data_field_size; - gint tpncp_data_field_array_dim; - gint tpncp_data_field_is_ip_addr; - gint tpncp_data_field_is_address_family; + gchar *name; + gint descr; + gint ipv6_descr; + gint sign; + gint size; + gint array_dim; + gint is_ip_addr; + gint is_address_family; struct tpncp_data_field_info *p_next; } tpncp_data_field_info; @@ -126,30 +126,29 @@ dissect_tpncp_data(guint data_id, packet_info *pinfo, tvbuff_t *tvb, proto_tree gint8 g_char; guint8 g_uchar; gint g_str_len, counter, bitshift, bitmask; - tpncp_data_field_info *current_tpncp_data_field_info = NULL; + tpncp_data_field_info *field = NULL; gint bitindex = encoding == ENC_LITTLE_ENDIAN ? 7 : 0; enum AddressFamily address_family = TPNCP_IPV4; - current_tpncp_data_field_info = &data_fields_info[data_id]; + field = &data_fields_info[data_id]; - while (current_tpncp_data_field_info) { - switch (current_tpncp_data_field_info->tpncp_data_field_size) { + while (field) { + switch (field->size) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: /* add char array */ - if ((g_str_len = current_tpncp_data_field_info->tpncp_data_field_array_dim)) { + if ((g_str_len = field->array_dim)) { g_str_len = MIN(g_str_len, tvb_reported_length_remaining(tvb, *offset)); - proto_tree_add_item(ltree, current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, g_str_len, ENC_NA | ENC_ASCII); + proto_tree_add_item(ltree, field->descr, tvb, *offset, g_str_len, ENC_NA | ENC_ASCII); (*offset) += g_str_len; } else { /* add single char */ g_uchar = tvb_get_guint8(tvb, *offset); /* bitfields */ - if (current_tpncp_data_field_info->tpncp_data_field_size != 8) { + if (field->size != 8) { for (counter = 0, bitmask = 0x0, bitshift = bitindex; - counter < current_tpncp_data_field_info->tpncp_data_field_size; + counter < field->size; counter++) { bitmask |= bits[bitindex]; /* Bitmask of interesting bits. */ bitindex += encoding == ENC_LITTLE_ENDIAN ? -1 : 1; @@ -157,16 +156,12 @@ dissect_tpncp_data(guint data_id, packet_info *pinfo, tvbuff_t *tvb, proto_tree g_uchar &= bitmask; g_uchar >>= bitshift; } - if (current_tpncp_data_field_info->tpncp_data_field_sign || - current_tpncp_data_field_info->tpncp_data_field_size != 8) { - proto_tree_add_uint(ltree, - current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, 1, g_uchar); + if (field->sign || field->size != 8) { + proto_tree_add_uint(ltree, field->descr, tvb, *offset, 1, g_uchar); } else { /* signed*/ g_char = (gint8) g_uchar; - proto_tree_add_int(ltree, current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, 1, g_char); + proto_tree_add_int(ltree, field->descr, tvb, *offset, 1, g_char); } if (((bitindex == 0 || bitindex == 8) && encoding == ENC_BIG_ENDIAN) || ((bitindex == -1 || bitindex == 7) && encoding == ENC_LITTLE_ENDIAN)) { @@ -176,26 +171,21 @@ dissect_tpncp_data(guint data_id, packet_info *pinfo, tvbuff_t *tvb, proto_tree } break; case 16: - proto_tree_add_item(ltree, current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, 2, encoding); + proto_tree_add_item(ltree, field->descr, tvb, *offset, 2, encoding); (*offset) += 2; break; case 32: - proto_tree_add_item(ltree, current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, 4, encoding); - if (current_tpncp_data_field_info->tpncp_data_field_is_address_family) + proto_tree_add_item(ltree, field->descr, tvb, *offset, 4, encoding); + if (field->is_address_family) address_family = (enum AddressFamily)tvb_get_guint32(tvb, *offset, encoding); (*offset) += 4; break; case 128: - if (current_tpncp_data_field_info->tpncp_data_field_is_ip_addr) { - if (address_family == TPNCP_IPV6 || address_family == TPNCP_IPV6_PSOS) { - proto_tree_add_item(ltree, current_tpncp_data_field_info->tpncp_ipv6_data_field_descr, - tvb, *offset, 16, encoding); - } else { - proto_tree_add_item(ltree, current_tpncp_data_field_info->tpncp_data_field_descr, - tvb, *offset, 4, encoding); - } + if (field->is_ip_addr) { + if (address_family == TPNCP_IPV6 || address_family == TPNCP_IPV6_PSOS) + proto_tree_add_item(ltree, field->ipv6_descr, tvb, *offset, 16, encoding); + else + proto_tree_add_item(ltree, field->descr, tvb, *offset, 4, encoding); address_family = TPNCP_IPV4; } (*offset) += 16; @@ -203,8 +193,8 @@ dissect_tpncp_data(guint data_id, packet_info *pinfo, tvbuff_t *tvb, proto_tree default: break; } - current_tpncp_data_field_info = current_tpncp_data_field_info->p_next; - if (tvb_reported_length_remaining(tvb, *offset) <= 0 || !current_tpncp_data_field_info) + field = field->p_next; + if (tvb_reported_length_remaining(tvb, *offset) <= 0 || !field) break; } if ((g_str_len = tvb_reported_length_remaining(tvb, *offset)) > 0) { @@ -250,7 +240,7 @@ dissect_tpncp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U proto_tree_add_uint(tpncp_tree, hf_tpncp_event_id, tvb, 8, 4, id); proto_tree_add_int(tpncp_tree, hf_tpncp_cid, tvb, 12, 4, cid); offset += 16; - if (tpncp_events_info_db[id].tpncp_data_field_size) { + if (tpncp_events_info_db[id].size) { event_tree = proto_tree_add_subtree_format( tree, tvb, offset, -1, ett_tpncp_body, NULL, "TPNCP Event: %s (%d)", @@ -262,7 +252,7 @@ dissect_tpncp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U } else if (try_val_to_str(id, tpncp_commands_id_vals)) { proto_tree_add_uint(tpncp_tree, hf_tpncp_command_id, tvb, 8, 4, id); offset += 12; - if (tpncp_commands_info_db[id].tpncp_data_field_size) { + if (tpncp_commands_info_db[id].size) { command_tree = proto_tree_add_subtree_format( tree, tvb, offset, -1, ett_tpncp_body, NULL, "TPNCP Command: %s (%d)", @@ -509,11 +499,10 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) static gboolean was_registered = FALSE; gchar tpncp_db_entry[MAX_TPNCP_DB_ENTRY_LEN]; gchar entry_copy[MAX_TPNCP_DB_ENTRY_LEN]; - const gchar *tpncp_data_field_name = NULL, *tmp = NULL; - gint enum_val, data_id, current_data_id = -1, tpncp_data_field_sign, tpncp_data_field_size, - tpncp_data_field_array_dim, tpncp_data_field_is_ip_addr, tpncp_data_field_is_address_family; + const gchar *name = NULL, *tmp = NULL; + gint enum_val, data_id, current_data_id = -1, sign, size, array_dim, is_ip_addr, is_address_family; guint idx; - tpncp_data_field_info *current_tpncp_data_field_info = NULL; + tpncp_data_field_info *field = NULL; hf_register_info hf_entr; gboolean* registered_struct_ids = wmem_alloc0_array(wmem_epan_scope(), gboolean, MAX_TPNCP_DB_SIZE); @@ -640,7 +629,7 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) } else hf_size++; - tpncp_data_field_is_address_family = FALSE; + is_address_family = FALSE; /* Register standard data. */ while (fgetline(tpncp_db_entry, MAX_TPNCP_DB_ENTRY_LEN, file)) { @@ -659,7 +648,7 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) continue; } data_id = (gint) g_ascii_strtoll(tmp, NULL, 10); - if ((tpncp_data_field_name = strtok(NULL, " ")) == NULL) { + if ((name = strtok(NULL, " ")) == NULL) { report_failure( "ERROR! Badly formed data base entry: %s - corresponding field's registration is skipped.", entry_copy); @@ -667,9 +656,9 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) } /* We happen to have a line without a name (57 0 32 0 0 primitive). Consider unnamed. */ - if (g_ascii_isdigit(*tpncp_data_field_name)) { - tmp = tpncp_data_field_name; - tpncp_data_field_name = "unnamed"; + if (g_ascii_isdigit(*name)) { + tmp = name; + name = "unnamed"; } else { if ((tmp = strtok(NULL, " ")) == NULL) { report_failure( @@ -678,28 +667,28 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) continue; } } - tpncp_data_field_sign = (gint) g_ascii_strtoll(tmp, NULL, 10); + sign = (gint) g_ascii_strtoll(tmp, NULL, 10); if ((tmp = strtok(NULL, " ")) == NULL) { report_failure( "ERROR! Badly formed data base entry: %s - corresponding field's registration is skipped.", entry_copy); continue; } - tpncp_data_field_size = (gint) g_ascii_strtoll(tmp, NULL, 10); + size = (gint) g_ascii_strtoll(tmp, NULL, 10); if ((tmp = strtok(NULL, " ")) == NULL) { report_failure( "ERROR! Badly formed data base entry: %s - corresponding field's registration is skipped.", entry_copy); continue; } - tpncp_data_field_array_dim = (gint) g_ascii_strtoll(tmp, NULL, 10); + array_dim = (gint) g_ascii_strtoll(tmp, NULL, 10); if ((tmp = strtok(NULL, " ")) == NULL) { report_failure( "ERROR! Badly formed data base entry: %s - corresponding field's registration is skipped.", entry_copy); continue; } - tpncp_data_field_is_ip_addr = tpncp_data_field_sign && g_ascii_strtoll(tmp, NULL, 10); + is_ip_addr = sign && g_ascii_strtoll(tmp, NULL, 10); if ((tmp = strtok(NULL, "\n")) == NULL) { report_failure( "ERROR! Badly formed data base entry: %s - corresponding field's registration is skipped.", @@ -707,22 +696,22 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) continue; } - if (tpncp_data_field_is_ip_addr) { + if (is_ip_addr) { // ip address that comes after address family has 4 fields: ip_addr_0, ip_addr_1, 2 and 3 // On these cases, ignore 1, 2 and 3 and enlarge the field size of 0 to 128 - char *seq = (char*)tpncp_data_field_name + strlen(tpncp_data_field_name) - 2; - if (seq > tpncp_data_field_name && *seq == '_') { + char *seq = (char*)name + strlen(name) - 2; + if (seq > name && *seq == '_') { if (seq[1] >= '1' && seq[1] <= '3') continue; // relates to the *previous* field - if (tpncp_data_field_is_address_family) { + if (is_address_family) { *seq = 0; - tpncp_data_field_size = 128; + size = 128; } } } - tpncp_data_field_is_address_family = FALSE; + is_address_family = FALSE; if (current_data_id != data_id) { /* new data */ if (registered_struct_ids[data_id] == TRUE) { report_failure( @@ -731,15 +720,15 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) continue; } registered_struct_ids[data_id] = TRUE; - current_tpncp_data_field_info = &data_fields_info[data_id]; + field = &data_fields_info[data_id]; current_data_id = data_id; } else { - current_tpncp_data_field_info->p_next = (tpncp_data_field_info *) wmem_alloc( + field->p_next = (tpncp_data_field_info *) wmem_alloc( wmem_epan_scope(), sizeof (tpncp_data_field_info)); - if (!current_tpncp_data_field_info->p_next) + if (!field->p_next) return (-1); - current_tpncp_data_field_info = current_tpncp_data_field_info->p_next; - current_tpncp_data_field_info->p_next = NULL; + field = field->p_next; + field->p_next = NULL; } /* Register specific fields of hf_register_info struture. */ @@ -750,46 +739,45 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) } else { hf_entr.hfinfo.strings = VALS(tpncp_enums_id_vals[enum_val]); if (!strcmp(tmp, "AddressFamily")) - tpncp_data_field_is_address_family = TRUE; + is_address_family = TRUE; } } else { hf_entr.hfinfo.strings = NULL; } - current_tpncp_data_field_info->tpncp_data_field_descr = -1; - current_tpncp_data_field_info->tpncp_ipv6_data_field_descr = -1; - hf_entr.p_id = ¤t_tpncp_data_field_info->tpncp_data_field_descr; - current_tpncp_data_field_info->tpncp_data_field_name = - wmem_strdup_printf(wmem_epan_scope(), "tpncp.%s", tpncp_data_field_name); - hf_entr.hfinfo.name = current_tpncp_data_field_info->tpncp_data_field_name; - hf_entr.hfinfo.abbrev = current_tpncp_data_field_info->tpncp_data_field_name; - switch (tpncp_data_field_size) { + field->descr = -1; + field->ipv6_descr = -1; + hf_entr.p_id = &field->descr; + field->name = wmem_strdup_printf(wmem_epan_scope(), "tpncp.%s", name); + hf_entr.hfinfo.name = field->name; + hf_entr.hfinfo.abbrev = field->name; + switch (size) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: - if (tpncp_data_field_array_dim) { + if (array_dim) { hf_entr.hfinfo.type = FT_STRING; hf_entr.hfinfo.display = BASE_NONE; } else { - hf_entr.hfinfo.type = (tpncp_data_field_sign) ? FT_UINT8 : FT_INT8; + hf_entr.hfinfo.type = (sign) ? FT_UINT8 : FT_INT8; } break; case 16: - hf_entr.hfinfo.type = (tpncp_data_field_sign) ? FT_UINT16 : FT_INT16; + hf_entr.hfinfo.type = (sign) ? FT_UINT16 : FT_INT16; break; case 32: - if (tpncp_data_field_is_ip_addr) { + if (is_ip_addr) { hf_entr.hfinfo.display = BASE_NONE; hf_entr.hfinfo.type = FT_IPv4; } else { - hf_entr.hfinfo.type = (tpncp_data_field_sign) ? FT_UINT32 : FT_INT32; + hf_entr.hfinfo.type = (sign) ? FT_UINT32 : FT_INT32; } break; case 128: - if (tpncp_data_field_is_ip_addr) { + if (is_ip_addr) { hf_entr.hfinfo.display = BASE_NONE; hf_entr.hfinfo.type = FT_IPv4; if (!add_hf(&hf_entr)) return -1; - hf_entr.p_id = ¤t_tpncp_data_field_info->tpncp_ipv6_data_field_descr; + hf_entr.p_id = &field->ipv6_descr; hf_entr.hfinfo.type = FT_IPv6; } break; @@ -800,11 +788,11 @@ init_tpncp_data_fields_info(tpncp_data_field_info *data_fields_info, FILE *file) /* Register initialized hf_register_info in global database. */ if (!add_hf(&hf_entr)) return -1; - current_tpncp_data_field_info->tpncp_data_field_sign = tpncp_data_field_sign; - current_tpncp_data_field_info->tpncp_data_field_size = tpncp_data_field_size; - current_tpncp_data_field_info->tpncp_data_field_array_dim = tpncp_data_field_array_dim; - current_tpncp_data_field_info->tpncp_data_field_is_ip_addr = tpncp_data_field_is_ip_addr; - current_tpncp_data_field_info->tpncp_data_field_is_address_family = tpncp_data_field_is_address_family; + field->sign = sign; + field->size = size; + field->array_dim = array_dim; + field->is_ip_addr = is_ip_addr; + field->is_address_family = is_address_family; } return 0; -- cgit v1.2.3