diff options
author | Anders Broman <anders.broman@ericsson.com> | 2020-12-10 13:14:21 +0100 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2020-12-10 16:02:10 +0100 |
commit | 9a46fabf5299fb0b634dfc0f6368d8201e847d73 (patch) | |
tree | 8a3cd1a11130d56cb10182fddfddaabc79d5cf12 /epan/dissectors | |
parent | 37f11e9a364c4b3684db52c3f4ad4773034a90a0 (diff) |
Introduce ENC_BCD_ODD_NUM_DIG in order to handle odd number of digits
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-e212.c | 9 | ||||
-rw-r--r-- | epan/dissectors/packet-nas_5gs.c | 15 | ||||
-rw-r--r-- | epan/dissectors/packet-nas_eps.c | 18 |
3 files changed, 16 insertions, 26 deletions
diff --git a/epan/dissectors/packet-e212.c b/epan/dissectors/packet-e212.c index cb96611204..b979c6d292 100644 --- a/epan/dissectors/packet-e212.c +++ b/epan/dissectors/packet-e212.c @@ -3468,14 +3468,17 @@ dissect_e212_imsi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offse { proto_item *item; proto_tree *subtree; - const gchar *imsi_str; + const guint8 *imsi_str; /* Fetch the BCD encoded digits from tvb indicated half byte, formating the digits according to * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the wmem * allocated string will be returned. */ - imsi_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, length, NULL, skip_first); - item = proto_tree_add_string(tree, hf_E212_imsi, tvb, offset, length, imsi_str); + if (skip_first) { + item = proto_tree_add_item_ret_string(tree, hf_E212_imsi, tvb, offset, length, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST, wmem_packet_scope(), &imsi_str); + } else { + item = proto_tree_add_item_ret_string(tree, hf_E212_imsi, tvb, offset, length, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &imsi_str); + } if (!is_imsi_string_valid(imsi_str)) { expert_add_info(pinfo, item, &ei_E212_imsi_malformed); } diff --git a/epan/dissectors/packet-nas_5gs.c b/epan/dissectors/packet-nas_5gs.c index 8e2c0d9c87..d44cddc97c 100644 --- a/epan/dissectors/packet-nas_5gs.c +++ b/epan/dissectors/packet-nas_5gs.c @@ -954,7 +954,7 @@ de_nas_5gs_mm_5gs_mobile_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 oct, type_id, supi_fmt; guint32 scheme_id, fiveg_tmsi; tvbuff_t * new_tvb; - const char *digit_str, *route_id_str; + const char *route_id_str; proto_item* ti; static int * const flags_spare_tid[] = { @@ -1076,9 +1076,7 @@ de_nas_5gs_mm_5gs_mobile_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, case 3: /* IMEI */ proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_odd_even_tid, ENC_BIG_ENDIAN); - new_tvb = tvb_new_subset_length(tvb, offset, len); - digit_str = tvb_bcd_dig_to_wmem_packet_str(new_tvb, 0, -1, NULL, TRUE); - proto_tree_add_string(tree, hf_nas_5gs_mm_imei, new_tvb, 0, -1, digit_str); + proto_tree_add_item(tree, hf_nas_5gs_mm_imei, tvb, offset, len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); break; case 4: /*5G-S-TMSI*/ @@ -1097,9 +1095,8 @@ de_nas_5gs_mm_5gs_mobile_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, case 5: /* IMEISV */ proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_odd_even_tid, ENC_BIG_ENDIAN); - new_tvb = tvb_new_subset_length(tvb, offset, len); - digit_str = tvb_bcd_dig_to_wmem_packet_str(new_tvb, 0, -1, NULL, TRUE); - proto_tree_add_string(tree, hf_nas_5gs_mm_imeisv, new_tvb, 0, -1, digit_str); + /* XXXX Do we need the odd/even bit?*/ + proto_tree_add_item(tree, hf_nas_5gs_mm_imeisv, tvb, offset, len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); break; case 6: /* MAC address */ @@ -3475,12 +3472,10 @@ de_nas_5gs_mm_ue_radio_cap_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinf gchar* add_string _U_, int string_len _U_) { int curr_offset; - const char* digit_str; curr_offset = offset; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, len, NULL, FALSE); - proto_tree_add_string(tree, hf_nas_5gs_mm_ue_radio_cap_id, tvb, 0, -1, digit_str); + proto_tree_add_item(tree, hf_nas_5gs_mm_ue_radio_cap_id, tvb, curr_offset, len, ENC_BCD_DIGITS_0_9); return len; } diff --git a/epan/dissectors/packet-nas_eps.c b/epan/dissectors/packet-nas_eps.c index 715b15f0a0..e3c8530020 100644 --- a/epan/dissectors/packet-nas_eps.c +++ b/epan/dissectors/packet-nas_eps.c @@ -1343,8 +1343,6 @@ de_emm_eps_mid(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, { guint32 curr_offset; guint8 octet; - const char *digit_str; - tvbuff_t *new_tvb; proto_item* ti; curr_offset = offset; @@ -1356,14 +1354,11 @@ de_emm_eps_mid(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, switch (octet&0x7) { case 1: /* IMSI */ - new_tvb = tvb_new_subset_length(tvb, curr_offset, len); - dissect_e212_imsi(new_tvb, pinfo, tree, 0, len, TRUE); + dissect_e212_imsi(tvb, pinfo, tree, curr_offset, len, TRUE); break; case 3: /* IMEI */ - new_tvb = tvb_new_subset_length(tvb, curr_offset, len); - digit_str = tvb_bcd_dig_to_wmem_packet_str(new_tvb, 0, len, NULL, TRUE); - proto_tree_add_string(tree, hf_nas_eps_emm_imei, new_tvb, 0, -1, digit_str); + proto_tree_add_item(tree, hf_nas_eps_emm_imei, tvb, curr_offset, len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); break; case 6: /* GUTI */ @@ -3701,22 +3696,19 @@ de_esm_remote_ue_context_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinf break; case 3: { - const gchar *msisdn_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, user_id_len, NULL, TRUE); - proto_tree_add_string(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_msisdn, tvb, curr_offset, user_id_len, msisdn_str); + proto_tree_add_item(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_msisdn, tvb, curr_offset, user_id_len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); curr_offset += user_id_len; } break; case 4: { - const gchar *imei_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, user_id_len, NULL, TRUE); - proto_tree_add_string(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_imei, tvb, curr_offset, user_id_len, imei_str); + proto_tree_add_item(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_imei, tvb, curr_offset, user_id_len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); curr_offset += user_id_len; } break; case 5: { - const gchar *imeisv_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, user_id_len, NULL, TRUE); - proto_tree_add_string(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_imeisv, tvb, curr_offset, user_id_len, imeisv_str); + proto_tree_add_item(subtree, hf_nas_eps_esm_remote_ue_context_list_ue_context_imeisv, tvb, curr_offset, user_id_len, ENC_BCD_DIGITS_0_9 | ENC_BCD_SKIP_FIRST); curr_offset += user_id_len; } break; |