From 524baee94fd8fab0ce4ba212ef35f39e81a386c0 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 26 Apr 2020 16:33:20 -0700 Subject: [PATCH] Add string encoding values for various BCD encodings, and use them. Add some ENC_ values for various flavors of packed BCD, and use that instead of explicitly calling tvb_bcd_dig_to_wmem_packet_str() and adding the result. Change-Id: I07511d9d09c9231b610c121cd6ffb3b16fb017a9 Reviewed-on: https://code.wireshark.org/review/36952 Reviewed-by: Guy Harris --- debian/libwireshark0.symbols | 1 + doc/README.dissector | 3 + epan/dissectors/asn1/ain/ain.cnf | 12 +- .../asn1/ansi_map/packet-ansi_map-template.c | 20 +-- epan/dissectors/asn1/gsm_map/gsm_map.cnf | 10 +- .../asn1/gsm_map/packet-gsm_map-template.c | 7 +- epan/dissectors/asn1/ilp/ilp.cnf | 2 +- .../asn1/lnpdqp/packet-lnpdqp-template.c | 11 +- epan/dissectors/asn1/ulp/ulp.cnf | 2 +- epan/dissectors/packet-ain.c | 16 +- epan/dissectors/packet-ansi_683.c | 4 +- epan/dissectors/packet-ansi_map.c | 26 +--- epan/dissectors/packet-bssap.c | 25 +--- epan/dissectors/packet-e164.c | 9 +- epan/dissectors/packet-gsm_a_dtap.c | 25 +--- epan/dissectors/packet-gsm_map.c | 139 ++++++++---------- epan/dissectors/packet-gsm_r_uus1.c | 9 +- epan/dissectors/packet-gtp.c | 5 +- epan/dissectors/packet-gtpv2.c | 11 +- epan/dissectors/packet-ilp.c | 2 +- epan/dissectors/packet-isakmp.c | 10 +- epan/dissectors/packet-isup.c | 13 +- epan/dissectors/packet-kerberos.c | 2 +- epan/dissectors/packet-lnpdqp.c | 17 +-- epan/dissectors/packet-meta.c | 27 ++-- epan/dissectors/packet-mip6.c | 15 +- epan/dissectors/packet-nas_5gs.c | 3 +- epan/dissectors/packet-nas_eps.c | 3 +- epan/dissectors/packet-pfcp.c | 4 +- epan/dissectors/packet-sgsap.c | 5 +- epan/dissectors/packet-ulp.c | 2 +- epan/proto.h | 3 + epan/tvbuff.c | 131 ++++++++++++----- epan/tvbuff.h | 16 ++ 34 files changed, 274 insertions(+), 316 deletions(-) diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index 9ca3e23555..754b5bfb13 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -1720,6 +1720,7 @@ libwireshark.so.0 libwireshark0 #MINVER# tvb_free@Base 1.9.1 tvb_free_chain@Base 1.12.0~rc1 tvb_get_ascii_7bits_string@Base 1.12.0~rc1 + tvb_get_bcd_string@Base 3.3.0 tvb_get_bits16@Base 1.9.1 tvb_get_bits32@Base 1.9.1 tvb_get_bits64@Base 1.9.1 diff --git a/doc/README.dissector b/doc/README.dissector index ba7bbd64d0..818e502785 100644 --- a/doc/README.dissector +++ b/doc/README.dissector @@ -1748,6 +1748,9 @@ currently supported are: ENC_CP866 - DOS code page 866 ENC_ASCII_7BITS - 7 bits ASCII ENC_T61 - ITU T.61 + ENC_BCD_DIGITS_0_9 - packed BCD (one digit per nibble), digits 0-9 + ENC_KEYPAD_ABC_TBCD - keypad-with-a/b/c "telephony packed BCD" = 0-9, *, #, a, b, c + ENC_KEYPAD_BC_TBCD - keypad-with-B/C "telephony packed BCD" = 0-9, B, C, *, # Other encodings will be added in the future. diff --git a/epan/dissectors/asn1/ain/ain.cnf b/epan/dissectors/asn1/ain/ain.cnf index 3a2672a2d1..a1f34e652c 100644 --- a/epan/dissectors/asn1/ain/ain.cnf +++ b/epan/dissectors/asn1/ain/ain.cnf @@ -184,7 +184,6 @@ static const ain_err_t ain_err_tab[] = { #.FN_BODY AINDigits VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; %(DEFAULT_BODY)s @@ -197,13 +196,11 @@ static const ain_err_t ain_err_tab[] = { proto_tree_add_item(subtree, hf_ain_numbering_plan, parameter_tvb, 1, 1, ENC_BIG_ENDIAN); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb,2), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_bcd_digits, parameter_tvb, 2, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_bcd_digits, parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb, 2), ENC_BCD_DIGITS_0_9); #.FN_BODY CarrierFormat VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; %(DEFAULT_BODY)s @@ -218,13 +215,11 @@ static const ain_err_t ain_err_tab[] = { proto_tree_add_item(subtree, hf_ain_nr_digits, parameter_tvb, 1, 1, ENC_BIG_ENDIAN); /* 2nd Digit 1st Digit .. */ - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb,2), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_carrier_bcd_digits, parameter_tvb, 2, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_carrier_bcd_digits, parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb, 2), ENC_BCD_DIGITS_0_9); #.FN_BODY AMAslpID VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; %(DEFAULT_BODY)s @@ -233,8 +228,7 @@ static const ain_err_t ain_err_tab[] = { subtree = proto_item_add_subtree(actx->created_item, ett_ain_amaslpid); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_amaslpid, parameter_tvb, 0, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_amaslpid, parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb, 0), ENC_BCD_DIGITS_0_9); #.END diff --git a/epan/dissectors/asn1/ansi_map/packet-ansi_map-template.c b/epan/dissectors/asn1/ansi_map/packet-ansi_map-template.c index c25fd0f65d..fbc53795ee 100644 --- a/epan/dissectors/asn1/ansi_map/packet-ansi_map-template.c +++ b/epan/dissectors/asn1/ansi_map/packet-ansi_map-template.c @@ -544,13 +544,6 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx); static int dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_); -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#','?' - } -}; - /* Type of Digits (octet 1, bits A-H) */ static const value_string ansi_map_type_of_digits_vals[] = { { 0, "Not Used" }, @@ -616,7 +609,7 @@ static const value_string ansi_map_np_vals[] = { static void dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ - const char *digit_str; + char *digit_str; int offset = 0; proto_tree *subtree; @@ -624,8 +617,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre subtree = proto_item_add_subtree(actx->created_item, ett_mintype); - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), NULL, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); } @@ -635,7 +627,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree guint8 octet , octet_len; guint8 b1,b2,b3,b4; int offset = 0; - const char *digit_str; + char *digit_str; proto_tree *subtree; @@ -669,8 +661,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree if(octet_len == 0) return; offset++; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: @@ -711,8 +702,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree switch ((octet&0xf)){ case 1: /* BCD Coding */ - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: diff --git a/epan/dissectors/asn1/gsm_map/gsm_map.cnf b/epan/dissectors/asn1/gsm_map/gsm_map.cnf index 0308174369..654e229aa5 100644 --- a/epan/dissectors/asn1/gsm_map/gsm_map.cnf +++ b/epan/dissectors/asn1/gsm_map/gsm_map.cnf @@ -283,14 +283,7 @@ MAP-DialoguePDU B "0.4.0.0.1.1.1.1" "map-DialogueAS" #.FN_BODY TBCD-STRING VAL_PTR = ¶meter_tvb tvbuff_t *parameter_tvb; - const char *digit_str; proto_tree *subtree; - static const dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c', 0 - } - }; %(DEFAULT_BODY)s @@ -301,8 +294,7 @@ MAP-DialoguePDU B "0.4.0.0.1.1.1.1" "map-DialogueAS" return offset; subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_tbcd_digits); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, -1, &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, digit_str); + proto_tree_add_item(subtree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, ENC_KEYPAD_ABC_TBCD); #---------------------------------------------------------------------------------------- #.FN_BODY LongSignalInfo VAL_PTR = ¶meter_tvb diff --git a/epan/dissectors/asn1/gsm_map/packet-gsm_map-template.c b/epan/dissectors/asn1/gsm_map/packet-gsm_map-template.c index 2e15671c4b..fbbe88aca0 100644 --- a/epan/dissectors/asn1/gsm_map/packet-gsm_map-template.c +++ b/epan/dissectors/asn1/gsm_map/packet-gsm_map-template.c @@ -1000,7 +1000,6 @@ dissect_cbs_data_coding_scheme(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree void dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - const char *digit_str; guint8 octet; guint8 na; guint8 np; @@ -1026,8 +1025,7 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_e164_msisdn(tvb, tree, 1, tvb_reported_length(tvb)-1, E164_ENC_BCD); break; default: - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 1, -1, NULL, FALSE); - proto_tree_add_string(tree, hf_gsm_map_address_digits, tvb, 1, -1, digit_str); + proto_tree_add_item(tree, hf_gsm_map_address_digits, tvb, 1, -1, ENC_BCD_DIGITS_0_9); break; } break; @@ -1036,8 +1034,7 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_e212_imsi(tvb, pinfo, tree, 1, tvb_reported_length(tvb)-1, FALSE); break; default: - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 1, -1, NULL, FALSE); - proto_tree_add_string(tree, hf_gsm_map_address_digits, tvb, 1, -1, digit_str); + proto_tree_add_item(tree, hf_gsm_map_address_digits, tvb, 1, -1, ENC_BCD_DIGITS_0_9); break; } diff --git a/epan/dissectors/asn1/ilp/ilp.cnf b/epan/dissectors/asn1/ilp/ilp.cnf index 594efe44d3..46b041bbf3 100644 --- a/epan/dissectors/asn1/ilp/ilp.cnf +++ b/epan/dissectors/asn1/ilp/ilp.cnf @@ -83,7 +83,7 @@ guint32 IlpMessage; proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); - proto_tree_add_string(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + proto_tree_add_item(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, ENC_BCD_DIGITS_0_9); } #.FN_BODY SETId/imsi VAL_PTR=&imsi_tvb diff --git a/epan/dissectors/asn1/lnpdqp/packet-lnpdqp-template.c b/epan/dissectors/asn1/lnpdqp/packet-lnpdqp-template.c index e2cfca856d..3f1aafef34 100644 --- a/epan/dissectors/asn1/lnpdqp/packet-lnpdqp-template.c +++ b/epan/dissectors/asn1/lnpdqp/packet-lnpdqp-template.c @@ -132,12 +132,6 @@ static const value_string lnpdqp_np_vals[] = { { 0, NULL } }; -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#' - } -}; /* * OriginatingStationType ::= OCTET STRING (SIZE(1)) * The following codes are used in the originating line information field: @@ -172,7 +166,7 @@ dissect_lnpdqp_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr guint8 octet , no_of_digits; int offset = 0; - const char *digit_str; + char *digit_str; proto_tree *subtree; @@ -199,8 +193,7 @@ dissect_lnpdqp_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr if(no_of_digits == 0) return; offset++; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_lnpdqp_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_lnpdqp_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: diff --git a/epan/dissectors/asn1/ulp/ulp.cnf b/epan/dissectors/asn1/ulp/ulp.cnf index 426fb25260..888f2e3ae8 100644 --- a/epan/dissectors/asn1/ulp/ulp.cnf +++ b/epan/dissectors/asn1/ulp/ulp.cnf @@ -306,7 +306,7 @@ ExtendedEphemeris/validity DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ulp_ExtendedEphem proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); - proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + proto_tree_add_item(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, ENC_BCD_DIGITS_0_9); } #.FN_BODY SETId/imsi VAL_PTR=&imsi_tvb diff --git a/epan/dissectors/packet-ain.c b/epan/dissectors/packet-ain.c index 6e0052041f..2582f9328f 100644 --- a/epan/dissectors/packet-ain.c +++ b/epan/dissectors/packet-ain.c @@ -946,7 +946,6 @@ dissect_ain_AINDigits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ #line 185 "./asn1/ain/ain.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -961,8 +960,7 @@ dissect_ain_AINDigits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ proto_tree_add_item(subtree, hf_ain_numbering_plan, parameter_tvb, 1, 1, ENC_BIG_ENDIAN); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb,2), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_bcd_digits, parameter_tvb, 2, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_bcd_digits, parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb, 2), ENC_BCD_DIGITS_0_9); @@ -1548,10 +1546,9 @@ dissect_ain_CollectedAddressInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i static int dissect_ain_CarrierFormat(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 204 "./asn1/ain/ain.cnf" +#line 202 "./asn1/ain/ain.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -1568,8 +1565,7 @@ dissect_ain_CarrierFormat(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs proto_tree_add_item(subtree, hf_ain_nr_digits, parameter_tvb, 1, 1, ENC_BIG_ENDIAN); /* 2nd Digit 1st Digit .. */ - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb,2), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_carrier_bcd_digits, parameter_tvb, 2, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_carrier_bcd_digits, parameter_tvb, 2, tvb_reported_length_remaining(parameter_tvb, 2), ENC_BCD_DIGITS_0_9); @@ -3214,10 +3210,9 @@ dissect_ain_SEQUENCE_SIZE_1_2_OF_AMALineNumber(gboolean implicit_tag _U_, tvbuff static int dissect_ain_AMAslpID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 225 "./asn1/ain/ain.cnf" +#line 221 "./asn1/ain/ain.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; - const char *digit_str; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -3228,8 +3223,7 @@ dissect_ain_AMAslpID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U subtree = proto_item_add_subtree(actx->created_item, ett_ain_amaslpid); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), NULL, FALSE); - proto_tree_add_string(subtree, hf_ain_amaslpid, parameter_tvb, 0, -1, digit_str); + proto_tree_add_item(subtree, hf_ain_amaslpid, parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb, 0), ENC_BCD_DIGITS_0_9); diff --git a/epan/dissectors/packet-ansi_683.c b/epan/dissectors/packet-ansi_683.c index 5301f07f2b..6f6817bdb7 100644 --- a/epan/dissectors/packet-ansi_683.c +++ b/epan/dissectors/packet-ansi_683.c @@ -958,8 +958,8 @@ for_param_block_val_spc(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, gui { EXACT_DATA_CHECK(len, 3); - proto_tree_add_string(tree, hf_ansi_683_service_programming_code, - tvb, offset, len, tvb_bcd_dig_to_wmem_packet_str(tvb, offset, 3, NULL, FALSE)); + proto_tree_add_item(tree, hf_ansi_683_service_programming_code, + tvb, offset, len, ENC_BCD_DIGITS_0_9); } /* diff --git a/epan/dissectors/packet-ansi_map.c b/epan/dissectors/packet-ansi_map.c index a82e801b23..639d85e57c 100644 --- a/epan/dissectors/packet-ansi_map.c +++ b/epan/dissectors/packet-ansi_map.c @@ -1332,13 +1332,6 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx); static int dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_); -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#','?' - } -}; - /* Type of Digits (octet 1, bits A-H) */ static const value_string ansi_map_type_of_digits_vals[] = { { 0, "Not Used" }, @@ -1404,7 +1397,7 @@ static const value_string ansi_map_np_vals[] = { static void dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ - const char *digit_str; + char *digit_str; int offset = 0; proto_tree *subtree; @@ -1412,8 +1405,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre subtree = proto_item_add_subtree(actx->created_item, ett_mintype); - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), NULL, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); } @@ -1423,7 +1415,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree guint8 octet , octet_len; guint8 b1,b2,b3,b4; int offset = 0; - const char *digit_str; + char *digit_str; proto_tree *subtree; @@ -1457,8 +1449,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree if(octet_len == 0) return; offset++; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: @@ -1499,8 +1490,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree switch ((octet&0xf)){ case 1: /* BCD Coding */ - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: @@ -15261,7 +15251,7 @@ dissect_ansi_map_QualificationRequest2Res(gboolean implicit_tag _U_, tvbuff_t *t /*--- End of included file: packet-ansi_map-fn.c ---*/ -#line 3616 "./asn1/ansi_map/packet-ansi_map-template.c" +#line 3606 "./asn1/ansi_map/packet-ansi_map-template.c" /* * 6.5.2.dk N.S0013-0 v 1.0,X.S0004-550-E v1.0 2.301 @@ -19209,7 +19199,7 @@ void proto_register_ansi_map(void) { NULL, HFILL }}, /*--- End of included file: packet-ansi_map-hfarr.c ---*/ -#line 5371 "./asn1/ansi_map/packet-ansi_map-template.c" +#line 5361 "./asn1/ansi_map/packet-ansi_map-template.c" }; /* List of subtrees */ @@ -19470,7 +19460,7 @@ void proto_register_ansi_map(void) { &ett_ansi_map_ReturnData, /*--- End of included file: packet-ansi_map-ettarr.c ---*/ -#line 5404 "./asn1/ansi_map/packet-ansi_map-template.c" +#line 5394 "./asn1/ansi_map/packet-ansi_map-template.c" }; static ei_register_info ei[] = { diff --git a/epan/dissectors/packet-bssap.c b/epan/dissectors/packet-bssap.c index 0b7907d1ae..72df336272 100644 --- a/epan/dissectors/packet-bssap.c +++ b/epan/dissectors/packet-bssap.c @@ -583,15 +583,6 @@ dissect_bssap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) * BSSAP+ Routines */ -#ifdef REMOVED -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#','?' - } -}; -#endif - static gboolean check_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, guint8 expected_ie) { @@ -895,7 +886,6 @@ dissect_bssap_imei(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree *ie_tree; guint8 ie_len; tvbuff_t *ie_tvb; - const char *digit_str; ie_len = tvb_get_guint8(tvb, offset+1); item = proto_tree_add_item(tree, hf_bssap_imei_ie, tvb, offset, ie_len+2, ENC_NA); @@ -909,8 +899,7 @@ dissect_bssap_imei(tvbuff_t *tvb, proto_tree *tree, int offset) * The IMEI consists of 15 digits (see 3GPP TS 23.003). */ ie_tvb = tvb_new_subset_length(tvb, offset, ie_len); - digit_str = tvb_bcd_dig_to_wmem_packet_str(ie_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(ie_tree, hf_bssap_imei, ie_tvb, 0, -1, digit_str); + proto_tree_add_item(ie_tree, hf_bssap_imei, ie_tvb, 0, -1, ENC_BCD_DIGITS_0_9); return offset + ie_len; @@ -928,7 +917,6 @@ dissect_bssap_imeisv(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree *ie_tree; guint8 ie_len; tvbuff_t *ie_tvb; - const char *digit_str; ie_len = tvb_get_guint8(tvb, offset+1); item = proto_tree_add_item(tree, hf_bssap_imeisv_ie, tvb, offset, ie_len+2, ENC_NA); @@ -942,8 +930,7 @@ dissect_bssap_imeisv(tvbuff_t *tvb, proto_tree *tree, int offset) * The IMEISV consists of 16 digits (see 3GPP TS 23.003). */ ie_tvb = tvb_new_subset_length(tvb, offset, ie_len); - digit_str = tvb_bcd_dig_to_wmem_packet_str(ie_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(ie_tree, hf_bssap_imeisv, ie_tvb, 0, -1, digit_str); + proto_tree_add_item(ie_tree, hf_bssap_imeisv, ie_tvb, 0, -1, ENC_BCD_DIGITS_0_9); return offset + ie_len; @@ -1328,7 +1315,6 @@ dissect_bssap_sgsn_number(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree *ie_tree; guint8 ie_len; tvbuff_t *number_tvb; - const char *digit_str; ie_len = tvb_get_guint8(tvb, offset+1); item = proto_tree_add_item(tree, hf_bssap_sgsn_nr_ie, tvb, offset, ie_len+2, ENC_NA); @@ -1349,8 +1335,7 @@ dissect_bssap_sgsn_number(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; number_tvb = tvb_new_subset_length(tvb, offset, ie_len-1); - digit_str = tvb_bcd_dig_to_wmem_packet_str(number_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str); + proto_tree_add_item(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, ENC_BCD_DIGITS_0_9); return offset + ie_len-1; @@ -1479,7 +1464,6 @@ dissect_bssap_vlr_number(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree *ie_tree; guint8 ie_len; tvbuff_t *number_tvb; - const char *digit_str; ie_len = tvb_get_guint8(tvb, offset+1); item = proto_tree_add_item(tree, hf_bssap_vlr_number_ie, tvb, offset, ie_len+2, ENC_NA); @@ -1501,8 +1485,7 @@ dissect_bssap_vlr_number(tvbuff_t *tvb, proto_tree *tree, int offset) proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; number_tvb = tvb_new_subset_length(tvb, offset, ie_len - 1); - digit_str = tvb_bcd_dig_to_wmem_packet_str(number_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str); + proto_tree_add_item(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, ENC_BCD_DIGITS_0_9); return offset + ie_len - 1; diff --git a/epan/dissectors/packet-e164.c b/epan/dissectors/packet-e164.c index 916635af63..8da020c2ba 100644 --- a/epan/dissectors/packet-e164.c +++ b/epan/dissectors/packet-e164.c @@ -802,21 +802,22 @@ dissect_e164_msisdn(tvbuff_t *tvb, proto_tree *tree, int offset, int length, e16 { proto_item *pi; proto_tree *subtree; - const gchar *msisdn_str; + guint str_encoding; + char *msisdn_str; switch (encoding) { case E164_ENC_UTF8: - msisdn_str = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, length, ENC_UTF_8); + str_encoding = ENC_UTF_8; break; case E164_ENC_BCD: - msisdn_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, length, NULL, FALSE); + str_encoding = ENC_BCD_DIGITS_0_9; break; case E164_ENC_BINARY: default: DISSECTOR_ASSERT_NOT_REACHED(); } - pi = proto_tree_add_string(tree, hf_E164_number, tvb, offset, length, msisdn_str); + pi = proto_tree_add_item_ret_display_string(tree, hf_E164_number, tvb, offset, length, str_encoding, wmem_packet_scope(), &msisdn_str); subtree = proto_item_add_subtree(pi, ett_e164_msisdn); diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c index c37dd3c500..9126578743 100644 --- a/epan/dissectors/packet-gsm_a_dtap.c +++ b/epan/dissectors/packet-gsm_a_dtap.c @@ -778,13 +778,6 @@ static guint8 epc_test_loop_mode; #define NUM_GSM_DTAP_ELEM (sizeof(gsm_dtap_elem_strings)/sizeof(value_string)) gint ett_gsm_dtap_elem[NUM_GSM_DTAP_ELEM]; -static dgt_set_t Dgt_mbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?' - } -}; - /* * [9] 10.5.3.1 Authentication parameter RAND */ @@ -1183,7 +1176,7 @@ de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o guint8 count; proto_tree *subtree; proto_item *item; - const char *digit_str; + char *digit_str; curr_offset = offset; @@ -1214,8 +1207,7 @@ de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o curr_offset++; en_len--; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, en_len, NULL, FALSE); - item = proto_tree_add_string(subtree, hf_gsm_a_dtap_emergency_bcd_num, tvb, curr_offset, en_len, digit_str); + item = proto_tree_add_item_ret_display_string(subtree, hf_gsm_a_dtap_emergency_bcd_num, tvb, curr_offset, en_len, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); /* Check for values that aren't digits; they get mapped to '?' */ if(strchr(digit_str,'?')){ @@ -2247,7 +2239,7 @@ const value_string gsm_a_dtap_screening_ind_values[] = { }; static guint16 -de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, int header_field, const gchar **extracted_address) +de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, int header_field, gchar **extracted_address) { guint8 extension; guint32 curr_offset, num_string_len; @@ -2275,8 +2267,7 @@ de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, num_string_len = len - (curr_offset - offset); - *extracted_address = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, num_string_len, &Dgt_mbcd, FALSE); - item = proto_tree_add_string(tree, header_field, tvb, curr_offset, num_string_len, *extracted_address); + item = proto_tree_add_item_ret_display_string(tree, header_field, tvb, curr_offset, num_string_len, ENC_KEYPAD_ABC_TBCD, wmem_packet_scope(), extracted_address); /* Check for an end mark, which gets mapped to '?' */ if(strchr(*extracted_address,'?')){ @@ -2371,7 +2362,7 @@ de_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint16 de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len) { - const gchar *extr_addr; + gchar *extr_addr; de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_cld_party_bcd_num, &extr_addr); @@ -2409,7 +2400,7 @@ de_cld_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint static guint16 de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len) { - const gchar *extr_addr; + gchar *extr_addr; de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_clg_party_bcd_num, &extr_addr); @@ -2620,7 +2611,7 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, gu static guint16 de_conn_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len) { - const gchar *extr_addr; + gchar *extr_addr; de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_conn_num, &extr_addr); @@ -2873,7 +2864,7 @@ de_recall_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 static guint16 de_red_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len) { - const gchar *extr_addr; + gchar *extr_addr; de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_red_party_bcd_num, &extr_addr); diff --git a/epan/dissectors/packet-gsm_map.c b/epan/dissectors/packet-gsm_map.c index f9adb91afd..3a3c3297b9 100644 --- a/epan/dissectors/packet-gsm_map.c +++ b/epan/dissectors/packet-gsm_map.c @@ -3602,7 +3602,6 @@ dissect_cbs_data_coding_scheme(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree void dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - const char *digit_str; guint8 octet; guint8 na; guint8 np; @@ -3628,8 +3627,7 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_e164_msisdn(tvb, tree, 1, tvb_reported_length(tvb)-1, E164_ENC_BCD); break; default: - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 1, -1, NULL, FALSE); - proto_tree_add_string(tree, hf_gsm_map_address_digits, tvb, 1, -1, digit_str); + proto_tree_add_item(tree, hf_gsm_map_address_digits, tvb, 1, -1, ENC_BCD_DIGITS_0_9); break; } break; @@ -3638,8 +3636,7 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_e212_imsi(tvb, pinfo, tree, 1, tvb_reported_length(tvb)-1, FALSE); break; default: - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 1, -1, NULL, FALSE); - proto_tree_add_string(tree, hf_gsm_map_address_digits, tvb, 1, -1, digit_str); + proto_tree_add_item(tree, hf_gsm_map_address_digits, tvb, 1, -1, ENC_BCD_DIGITS_0_9); break; } @@ -3846,14 +3843,7 @@ int dissect_gsm_map_TBCD_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 285 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; - const char *digit_str; proto_tree *subtree; - static const dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c', 0 - } - }; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -3866,8 +3856,7 @@ dissect_gsm_map_TBCD_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of return offset; subtree = proto_item_add_subtree(actx->created_item, ett_gsm_map_tbcd_digits); - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, -1, &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, digit_str); + proto_tree_add_item(subtree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, ENC_KEYPAD_ABC_TBCD); @@ -3960,7 +3949,7 @@ dissect_gsm_map_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_gsm_map_SignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 515 "./asn1/gsm_map/gsm_map.cnf" +#line 507 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; @@ -3986,7 +3975,7 @@ static const ber_sequence_t gsm_map_ExternalSignalInfo_sequence[] = { int dissect_gsm_map_ExternalSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 976 "./asn1/gsm_map/gsm_map.cnf" +#line 968 "./asn1/gsm_map/gsm_map.cnf" /* -- Information about the internal structure is given in -- clause 7.6.9. @@ -4126,7 +4115,7 @@ dissect_gsm_map_AccessNetworkProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_gsm_map_LongSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 315 "./asn1/gsm_map/gsm_map.cnf" +#line 307 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -4208,7 +4197,7 @@ dissect_gsm_map_AlertingPattern(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in int dissect_gsm_map_GSN_Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 799 "./asn1/gsm_map/gsm_map.cnf" +#line 791 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -4385,7 +4374,7 @@ dissect_gsm_map_HLR_List(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse int dissect_gsm_map_GlobalCellId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1058 "./asn1/gsm_map/gsm_map.cnf" +#line 1050 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4642,7 +4631,7 @@ dissect_gsm_map_PLMN_Id(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_map_E_UTRAN_CGI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1164 "./asn1/gsm_map/gsm_map.cnf" +#line 1156 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -4673,7 +4662,7 @@ dissect_gsm_map_NR_CGI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_map_TA_Id(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1174 "./asn1/gsm_map/gsm_map.cnf" +#line 1166 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -4694,7 +4683,7 @@ dissect_gsm_map_TA_Id(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ int dissect_gsm_map_RAIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 823 "./asn1/gsm_map/gsm_map.cnf" +#line 815 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4742,7 +4731,7 @@ dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(gboolean implicit_tag _U_ int dissect_gsm_map_LAIFixedLength(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 835 "./asn1/gsm_map/gsm_map.cnf" +#line 827 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4868,7 +4857,7 @@ dissect_gsm_map_EMLPP_Info(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_gsm_map_Ext_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 645 "./asn1/gsm_map/gsm_map.cnf" +#line 637 "./asn1/gsm_map/gsm_map.cnf" /* Note Ext-SS-Status can have more than one byte */ tvbuff_t *parameter_tvb; @@ -5001,7 +4990,7 @@ dissect_gsm_map_ss_RegisterSS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int dissect_gsm_map_ss_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 625 "./asn1/gsm_map/gsm_map.cnf" +#line 617 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -5035,7 +5024,7 @@ dissect_gsm_map_ss_ForwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb _U offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); -#line 712 "./asn1/gsm_map/gsm_map.cnf" +#line 704 "./asn1/gsm_map/gsm_map.cnf" proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN); @@ -5354,7 +5343,7 @@ dissect_gsm_map_ss_InterrogateSS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U int dissect_gsm_map_ss_USSD_DataCodingScheme(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 668 "./asn1/gsm_map/gsm_map.cnf" +#line 660 "./asn1/gsm_map/gsm_map.cnf" /*The structure of the USSD-DataCodingScheme is defined by * the Cell Broadcast Data Coding Scheme as described in * TS 3GPP TS 23.038 @@ -5380,7 +5369,7 @@ dissect_gsm_map_ss_USSD_DataCodingScheme(gboolean implicit_tag _U_, tvbuff_t *tv int dissect_gsm_map_ss_USSD_String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 683 "./asn1/gsm_map/gsm_map.cnf" +#line 675 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint length; @@ -5831,7 +5820,7 @@ static const ber_sequence_t gsm_map_er_SM_DeliveryFailureCause_sequence[] = { static int dissect_gsm_map_er_SM_DeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 524 "./asn1/gsm_map/gsm_map.cnf" +#line 516 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ guint8 oct; gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; @@ -6599,7 +6588,7 @@ dissect_gsm_map_sm_SM_RP_MTI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o static int dissect_gsm_map_sm_SM_RP_SMEA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1154 "./asn1/gsm_map/gsm_map.cnf" +#line 1146 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *payload_tvb; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &payload_tvb); @@ -6783,7 +6772,7 @@ dissect_gsm_map_sm_RoutingInfoForSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_gsm_map_sm_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 406 "./asn1/gsm_map/gsm_map.cnf" +#line 398 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6804,7 +6793,7 @@ dissect_gsm_map_sm_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_gsm_map_sm_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 417 "./asn1/gsm_map/gsm_map.cnf" +#line 409 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_LMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6825,7 +6814,7 @@ dissect_gsm_map_sm_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_gsm_map_sm_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 460 "./asn1/gsm_map/gsm_map.cnf" +#line 452 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6846,7 +6835,7 @@ dissect_gsm_map_sm_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t static int dissect_gsm_map_sm_T_noSM_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 504 "./asn1/gsm_map/gsm_map.cnf" +#line 496 "./asn1/gsm_map/gsm_map.cnf" offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index); if (!PINFO_FD_VISITED(actx->pinfo)) { @@ -6893,7 +6882,7 @@ dissect_gsm_map_sm_SM_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_gsm_map_sm_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 439 "./asn1/gsm_map/gsm_map.cnf" +#line 431 "./asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_ISDN_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6913,7 +6902,7 @@ dissect_gsm_map_sm_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_gsm_map_sm_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 373 "./asn1/gsm_map/gsm_map.cnf" +#line 365 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6934,7 +6923,7 @@ dissect_gsm_map_sm_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t static int dissect_gsm_map_sm_T_noSM_RP_OA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 482 "./asn1/gsm_map/gsm_map.cnf" +#line 474 "./asn1/gsm_map/gsm_map.cnf" offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index); if (!PINFO_FD_VISITED(actx->pinfo)) { @@ -7006,7 +6995,7 @@ static const ber_sequence_t gsm_map_sm_MO_ForwardSM_Arg_sequence[] = { static int dissect_gsm_map_sm_MO_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 553 "./asn1/gsm_map/gsm_map.cnf" +#line 545 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -7034,7 +7023,7 @@ static const ber_sequence_t gsm_map_sm_MO_ForwardSM_Res_sequence[] = { static int dissect_gsm_map_sm_MO_ForwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 565 "./asn1/gsm_map/gsm_map.cnf" +#line 557 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -7072,7 +7061,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_Arg_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 577 "./asn1/gsm_map/gsm_map.cnf" +#line 569 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -7100,7 +7089,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_Res_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 589 "./asn1/gsm_map/gsm_map.cnf" +#line 581 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -7305,7 +7294,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_VGCS_Arg_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_VGCS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 601 "./asn1/gsm_map/gsm_map.cnf" +#line 593 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -7362,7 +7351,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_VGCS_Res_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_VGCS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 613 "./asn1/gsm_map/gsm_map.cnf" +#line 605 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -8747,7 +8736,7 @@ dissect_gsm_map_ms_CancelLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb _U int dissect_gsm_map_ms_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1184 "./asn1/gsm_map/gsm_map.cnf" +#line 1176 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -8768,7 +8757,7 @@ dissect_gsm_map_ms_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t * static int dissect_gsm_map_ms_LocationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1119 "./asn1/gsm_map/gsm_map.cnf" +#line 1111 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -8799,7 +8788,7 @@ dissect_gsm_map_ms_LSAIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int static int dissect_gsm_map_ms_GeodeticInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1194 "./asn1/gsm_map/gsm_map.cnf" +#line 1186 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -9533,7 +9522,7 @@ dissect_gsm_map_ms_SGSN_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_gsm_map_ms_APN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1092 "./asn1/gsm_map/gsm_map.cnf" +#line 1084 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; int length, name_len, tmp; @@ -9769,7 +9758,7 @@ dissect_gsm_map_ms_UpdateGprsLocationRes(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_gsm_map_ms_IntegrityProtectionInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 871 "./asn1/gsm_map/gsm_map.cnf" +#line 863 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -9792,7 +9781,7 @@ dissect_gsm_map_ms_IntegrityProtectionInformation(gboolean implicit_tag _U_, tvb static int dissect_gsm_map_ms_EncryptionInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 883 "./asn1/gsm_map/gsm_map.cnf" +#line 875 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -9877,7 +9866,7 @@ dissect_gsm_map_ms_AllowedUMTS_Algorithms(gboolean implicit_tag _U_, tvbuff_t *t static int dissect_gsm_map_ms_RadioResourceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 847 "./asn1/gsm_map/gsm_map.cnf" +#line 839 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -9948,7 +9937,7 @@ dissect_gsm_map_ms_BSSMAP_ServiceHandover(gboolean implicit_tag _U_, tvbuff_t *t static int dissect_gsm_map_ms_RANAP_ServiceHandover(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 859 "./asn1/gsm_map/gsm_map.cnf" +#line 851 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -10897,7 +10886,7 @@ static int dissect_gsm_map_ms_T_forwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_gsm_map_ms_Ext_ForwOptions(implicit_tag, tvb, offset, actx, tree, hf_index); -#line 718 "./asn1/gsm_map/gsm_map.cnf" +#line 710 "./asn1/gsm_map/gsm_map.cnf" proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN); @@ -12060,7 +12049,7 @@ dissect_gsm_map_ms_VlrCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t static int dissect_gsm_map_ms_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 726 "./asn1/gsm_map/gsm_map.cnf" +#line 718 "./asn1/gsm_map/gsm_map.cnf" guint8 pdp_type_org; tvbuff_t *parameter_tvb; @@ -12093,7 +12082,7 @@ dissect_gsm_map_ms_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of int dissect_gsm_map_ms_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 748 "./asn1/gsm_map/gsm_map.cnf" +#line 740 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -12115,7 +12104,7 @@ dissect_gsm_map_ms_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int dissect_gsm_map_ms_Ext_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 759 "./asn1/gsm_map/gsm_map.cnf" +#line 751 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -12146,7 +12135,7 @@ dissect_gsm_map_ms_ChargingCharacteristics(gboolean implicit_tag _U_, tvbuff_t * int dissect_gsm_map_ms_Ext2_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 769 "./asn1/gsm_map/gsm_map.cnf" +#line 761 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -12167,7 +12156,7 @@ dissect_gsm_map_ms_Ext2_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb int dissect_gsm_map_ms_Ext3_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 779 "./asn1/gsm_map/gsm_map.cnf" +#line 771 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -12188,7 +12177,7 @@ dissect_gsm_map_ms_Ext3_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_gsm_map_ms_Ext4_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 789 "./asn1/gsm_map/gsm_map.cnf" +#line 781 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -16646,7 +16635,7 @@ dissect_gsm_map_lcs_ProvideSubscriberLocation_Arg(gboolean implicit_tag _U_, tvb int dissect_gsm_map_lcs_Ext_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1070 "./asn1/gsm_map/gsm_map.cnf" +#line 1062 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -18113,7 +18102,7 @@ static const ber_sequence_t gsm_old_Bss_APDU_sequence[] = { static int dissect_gsm_old_Bss_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 896 "./asn1/gsm_map/gsm_map.cnf" +#line 888 "./asn1/gsm_map/gsm_map.cnf" guint8 octet; guint8 length; tvbuff_t *next_tvb; @@ -18698,7 +18687,7 @@ dissect_gsm_old_PlmnContainer(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int static int dissect_gsm_old_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 384 "./asn1/gsm_map/gsm_map.cnf" +#line 376 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -18719,7 +18708,7 @@ dissect_gsm_old_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_old_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 395 "./asn1/gsm_map/gsm_map.cnf" +#line 387 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_LMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -18740,7 +18729,7 @@ dissect_gsm_old_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_old_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 449 "./asn1/gsm_map/gsm_map.cnf" +#line 441 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -18761,7 +18750,7 @@ dissect_gsm_old_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_gsm_old_T_noSM_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 493 "./asn1/gsm_map/gsm_map.cnf" +#line 485 "./asn1/gsm_map/gsm_map.cnf" offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index); if (!PINFO_FD_VISITED(actx->pinfo)) { @@ -18808,7 +18797,7 @@ dissect_gsm_old_SM_RP_DAold(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_gsm_old_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 428 "./asn1/gsm_map/gsm_map.cnf" +#line 420 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_ISDN_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -18829,7 +18818,7 @@ dissect_gsm_old_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse static int dissect_gsm_old_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 362 "./asn1/gsm_map/gsm_map.cnf" +#line 354 "./asn1/gsm_map/gsm_map.cnf" actx->private_data = NULL; actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -18850,7 +18839,7 @@ dissect_gsm_old_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_gsm_old_T_noSM_RP_OA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 471 "./asn1/gsm_map/gsm_map.cnf" +#line 463 "./asn1/gsm_map/gsm_map.cnf" offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index); if (!PINFO_FD_VISITED(actx->pinfo)) { @@ -18902,7 +18891,7 @@ static const ber_sequence_t gsm_old_ForwardSM_Arg_sequence[] = { static int dissect_gsm_old_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 537 "./asn1/gsm_map/gsm_map.cnf" +#line 529 "./asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ gsm_map_private_info_t *gsm_map_priv = (gsm_map_private_info_t*)actx->value_ptr; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -20164,7 +20153,7 @@ dissect_gsm_ss_LCS_PeriodicTriggeredInvokeRes(gboolean implicit_tag _U_, tvbuff_ static int dissect_gsm_map_ericsson_T_locationInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1129 "./asn1/gsm_map/gsm_map.cnf" +#line 1121 "./asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; guint8 rat; @@ -21980,7 +21969,7 @@ dissect_NokiaMAP_Extensions_AllowedServiceData(gboolean implicit_tag _U_, tvbuff /*--- End of included file: packet-gsm_map-fn.c ---*/ -#line 1047 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 1044 "./asn1/gsm_map/packet-gsm_map-template.c" /* Specific translation for MAP V3 */ const value_string gsm_map_V1V2_opr_code_strings[] = { @@ -22203,7 +22192,7 @@ const value_string gsm_map_opr_code_strings[] = { /* Unknown or empty loop list OPERATION */ /*--- End of included file: packet-gsm_map-table.c ---*/ -#line 1058 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 1055 "./asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; @@ -22421,7 +22410,7 @@ static const value_string gsm_map_err_code_string_vals[] = { /* Unknown or empty loop list OPERATION */ /*--- End of included file: packet-gsm_map-table.c ---*/ -#line 1064 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 1061 "./asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; #endif @@ -32014,7 +32003,7 @@ void proto_register_gsm_map(void) { NULL, HFILL }}, /*--- End of included file: packet-gsm_map-hfarr.c ---*/ -#line 3327 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 3324 "./asn1/gsm_map/packet-gsm_map-template.c" }; /* List of subtrees */ @@ -32769,7 +32758,7 @@ void proto_register_gsm_map(void) { &ett_NokiaMAP_Extensions_AllowedServiceData, /*--- End of included file: packet-gsm_map-ettarr.c ---*/ -#line 3366 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 3363 "./asn1/gsm_map/packet-gsm_map-template.c" }; static ei_register_info ei[] = { @@ -32913,7 +32902,7 @@ void proto_register_gsm_map(void) { /*--- End of included file: packet-gsm_map-dis-tab.c ---*/ -#line 3426 "./asn1/gsm_map/packet-gsm_map-template.c" +#line 3423 "./asn1/gsm_map/packet-gsm_map-template.c" oid_add_from_string("ericsson-gsm-Map-Ext","1.2.826.0.1249.58.1.0" ); oid_add_from_string("accessTypeNotAllowed-id","1.3.12.2.1107.3.66.1.2"); /*oid_add_from_string("map-ac networkLocUp(1) version3(3)","0.4.0.0.1.0.1.3" ); diff --git a/epan/dissectors/packet-gsm_r_uus1.c b/epan/dissectors/packet-gsm_r_uus1.c index 907a3a783b..70b0cc0340 100644 --- a/epan/dissectors/packet-gsm_r_uus1.c +++ b/epan/dissectors/packet-gsm_r_uus1.c @@ -192,7 +192,6 @@ de_gsm_r_uus1_chpc_forward(tvbuff_t *tvb, proto_tree *tree, guint32 offset) guint32 len; guint32 t_dur; guint32 t_rel; - const gchar *gref_str; proto_item *item; proto_tree *sub_tree; @@ -233,8 +232,7 @@ de_gsm_r_uus1_chpc_forward(tvbuff_t *tvb, proto_tree *tree, guint32 offset) proto_tree_add_bitmask(sub_tree, tvb, curr_offset, hf_gsm_r_uus1_chpc_cause, ett_gsm_r_uus1_chpc_cause, cause_flags, ENC_NA); curr_offset += 1; - gref_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, 4, NULL, FALSE); - proto_tree_add_string(sub_tree, hf_gsm_r_uus1_chpc_gref, tvb, curr_offset, 4, gref_str); + proto_tree_add_item(sub_tree, hf_gsm_r_uus1_chpc_gref, tvb, curr_offset, 4, ENC_BCD_DIGITS_0_9); curr_offset += 4; return (curr_offset - offset); @@ -540,9 +538,9 @@ de_gsm_r_uus1_alert_controller(tvbuff_t *tvb, proto_tree *tree, packet_info *pin { guint32 curr_offset; guint32 len; - const gchar *gref_str; proto_item *item; proto_tree *sub_tree; + char *gref_str; curr_offset = offset; @@ -555,8 +553,7 @@ de_gsm_r_uus1_alert_controller(tvbuff_t *tvb, proto_tree *tree, packet_info *pin proto_tree_add_item(sub_tree, hf_gsm_r_uus1_elem_len, tvb, curr_offset+1, 1, ENC_NA); curr_offset += 2; - gref_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, 4, NULL, FALSE); - proto_tree_add_string(sub_tree, hf_gsm_r_uus1_alert_controller_gref, tvb, curr_offset, 4, gref_str); + proto_tree_add_item_ret_display_string(sub_tree, hf_gsm_r_uus1_alert_controller_gref, tvb, curr_offset, 4, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &gref_str); proto_item_append_text(item, ": %s", gref_str); curr_offset += 4; diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c index d8cc3aae31..ad4f98fccd 100644 --- a/epan/dissectors/packet-gtp.c +++ b/epan/dissectors/packet-gtp.c @@ -6806,7 +6806,7 @@ decode_gtp_imeisv(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre proto_tree *ext_imeisv; proto_item *te; tvbuff_t *next_tvb; - const char *digit_str; + char *digit_str; length = tvb_get_ntohs(tvb, offset + 1); ext_imeisv = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_IMEISV], &te, @@ -6823,8 +6823,7 @@ decode_gtp_imeisv(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre * set to '1111'. Both IMEI and IMEISV are BCD encoded. */ next_tvb = tvb_new_subset_length(tvb, offset, length); - digit_str = tvb_bcd_dig_to_wmem_packet_str(next_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(ext_imeisv, hf_gtp_ext_imeisv, next_tvb, 0, -1, digit_str); + proto_tree_add_item_ret_display_string(ext_imeisv, hf_gtp_ext_imeisv, next_tvb, 0, -1, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); proto_item_append_text(te, ": %s", digit_str); return 3 + length; diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c index 2ca8885283..2edd7a38cf 100644 --- a/epan/dissectors/packet-gtpv2.c +++ b/epan/dissectors/packet-gtpv2.c @@ -2273,15 +2273,13 @@ static void dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { int offset = 0; - const gchar *mei_str; + gchar *mei_str; /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP * allocated string will be returned. */ - mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, 0, length, NULL, FALSE); - - proto_tree_add_string(tree, hf_gtpv2_mei, tvb, offset, length, mei_str); + proto_tree_add_item_ret_display_string(tree, hf_gtpv2_mei, tvb, offset, length, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &mei_str); proto_item_append_text(item, "%s", mei_str); } @@ -4065,10 +4063,7 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr offset += 1; /* (m+2) to r Mobile Equipment Identity (MEI) */ if (mei_len) { - const gchar *mei_str; - - mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, mei_len, NULL, FALSE); - proto_tree_add_string(tree, hf_gtpv2_mei, tvb, offset, mei_len, mei_str); + proto_tree_add_item(tree, hf_gtpv2_mei, tvb, offset, mei_len, ENC_BCD_DIGITS_0_9); offset += mei_len; } return offset; diff --git a/epan/dissectors/packet-ilp.c b/epan/dissectors/packet-ilp.c index 771277a3a6..9254519287 100644 --- a/epan/dissectors/packet-ilp.c +++ b/epan/dissectors/packet-ilp.c @@ -848,7 +848,7 @@ dissect_ilp_T_mdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_ilp_setid); - proto_tree_add_string(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + proto_tree_add_item(subtree, hf_ilp_mobile_directory_number, mdn_tvb, 0, 8, ENC_BCD_DIGITS_0_9); } diff --git a/epan/dissectors/packet-isakmp.c b/epan/dissectors/packet-isakmp.c index 5c17ed0676..035d809ccb 100644 --- a/epan/dissectors/packet-isakmp.c +++ b/epan/dissectors/packet-isakmp.c @@ -4963,18 +4963,14 @@ dissect_notif(tvbuff_t *tvb, packet_info *pinfo, int offset, int length, proto_t } /* Payload Octet 8-n - Identity value */ - const gchar *imei_str; - const gchar *imeisv_str; switch (octet) { case 1: /* IMEI */ - imei_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, length, NULL, FALSE); - proto_tree_add_string(tree, hf_isakmp_notify_data_3gpp_device_identity_imei, tvb, offset, length, imei_str); + proto_tree_add_item(tree, hf_isakmp_notify_data_3gpp_device_identity_imei, tvb, offset, length, ENC_BCD_DIGITS_0_9); break; case 2: /* IMEISV */ - imeisv_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, length, NULL, FALSE); - proto_tree_add_string(tree, hf_isakmp_notify_data_3gpp_device_identity_imeisv, tvb, offset, length, imeisv_str); + proto_tree_add_item(tree, hf_isakmp_notify_data_3gpp_device_identity_imeisv, tvb, offset, length, ENC_BCD_DIGITS_0_9); break; default: proto_tree_add_expert(tree, pinfo, &ei_isakmp_notify_data_3gpp_unknown_device_identity, tvb, offset, length); @@ -5029,7 +5025,7 @@ dissect_notif(tvbuff_t *tvb, packet_info *pinfo, int offset, int length, proto_t /*IE Octet 5 to j | Digit_N+1 | Digit_N | */ current_em_num_len -= 2; //Not counting octets 3 and 4 - proto_tree_add_string(current_emergency_call_number_tree, hf_iskamp_notify_data_3gpp_emergency_call_number, tvb, offset, current_em_num_len, tvb_bcd_dig_to_wmem_packet_str(tvb, offset, current_em_num_len, NULL, FALSE)); + proto_tree_add_item(current_emergency_call_number_tree, hf_iskamp_notify_data_3gpp_emergency_call_number, tvb, offset, current_em_num_len, ENC_BCD_DIGITS_0_9); offset += current_em_num_len; //moving to the next number in the list } } diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index b2d6d607bd..c524373cd2 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -3960,7 +3960,6 @@ static void dissect_ansi_isup_transit_network_selection_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo _U_, proto_tree *parameter_tree, proto_item *parameter_item _U_) { gint offset = 0; - const char *digit_str; static const int * indicators_fields[] = { &hf_ansi_isup_spare_b7, @@ -3972,8 +3971,7 @@ dissect_ansi_isup_transit_network_selection_parameter(tvbuff_t *parameter_tvb, p proto_tree_add_bitmask_list(parameter_tree, parameter_tvb, 0, 1, indicators_fields, ENC_NA); offset = 1; - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, offset, 2, NULL, FALSE); - proto_tree_add_string(parameter_tree, hf_ansi_isup_nw_id, parameter_tvb, offset, 2, digit_str); + proto_tree_add_item(parameter_tree, hf_ansi_isup_nw_id, parameter_tvb, offset, 2, ENC_BCD_DIGITS_0_9); offset += 2; proto_tree_add_item(parameter_tree, hf_ansi_isup_circuit_code, parameter_tvb, offset, 1, ENC_BIG_ENDIAN); @@ -4000,7 +3998,6 @@ static void dissect_ansi_isup_param_carrier_id(tvbuff_t *parameter_tvb, packet_info *pinfo _U_, proto_tree *parameter_tree, proto_item *parameter_item _U_) { int offset = 0; - const char *digit_str; static const int * flags[] = { &hf_ansi_isup_spare_b7, @@ -4012,8 +4009,7 @@ dissect_ansi_isup_param_carrier_id(tvbuff_t *parameter_tvb, packet_info *pinfo _ proto_tree_add_bitmask_list(parameter_tree, parameter_tvb, offset, 1, flags, ENC_BIG_ENDIAN); offset++; - digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, offset, 2, NULL, FALSE); - proto_tree_add_string(parameter_tree, hf_ansi_isup_nw_id, parameter_tvb, offset, 2, digit_str); + proto_tree_add_item(parameter_tree, hf_ansi_isup_nw_id, parameter_tvb, offset, 2, ENC_BCD_DIGITS_0_9); } @@ -7247,7 +7243,7 @@ dissect_japan_isup_contractor_number(tvbuff_t *parameter_tvb, proto_tree *parame { int offset = 0; int parameter_length; - const char *digit_str; + char *digit_str; parameter_length = tvb_reported_length_remaining(parameter_tvb, offset); @@ -7258,8 +7254,7 @@ dissect_japan_isup_contractor_number(tvbuff_t *parameter_tvb, proto_tree *parame proto_tree_add_item(parameter_tree, hf_isup_numbering_plan_indicator, parameter_tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; - digit_str = tvb_bcd_dig_to_wmem_packet_str( parameter_tvb, offset, parameter_length-2, NULL, FALSE); - proto_tree_add_string(parameter_tree, hf_japan_isup_contractor_number, parameter_tvb, offset, parameter_length-offset, digit_str); + proto_tree_add_item_ret_display_string(parameter_tree, hf_japan_isup_contractor_number, parameter_tvb, offset, parameter_length-2, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); proto_item_append_text(parameter_item, " %s", digit_str); diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c index c9278dfe70..51c9ba42ea 100644 --- a/epan/dissectors/packet-kerberos.c +++ b/epan/dissectors/packet-kerberos.c @@ -4038,7 +4038,7 @@ dissect_kerberos_KDC_REQ_BODY(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int * accordingly. * * Ref: Section 7.2.1 of - * https://tools.ietf.org/html/draft-ietf-krb-wg-kerberos-clarifications-07 + * http://www.ietf.org/internet-drafts/draft-ietf-krb-wg-kerberos-clarifications-07.txt */ if (actx->pinfo->destport == UDP_PORT_KERBEROS && actx->pinfo->ptype == PT_UDP) { conversation = find_conversation(actx->pinfo->num, &actx->pinfo->src, &actx->pinfo->dst, ENDPOINT_UDP, diff --git a/epan/dissectors/packet-lnpdqp.c b/epan/dissectors/packet-lnpdqp.c index 700d5b6ce9..07a96522d8 100644 --- a/epan/dissectors/packet-lnpdqp.c +++ b/epan/dissectors/packet-lnpdqp.c @@ -159,12 +159,6 @@ static const value_string lnpdqp_np_vals[] = { { 0, NULL } }; -static dgt_set_t Dgt_tbcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ - '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#' - } -}; /* * OriginatingStationType ::= OCTET STRING (SIZE(1)) * The following codes are used in the originating line information field: @@ -199,7 +193,7 @@ dissect_lnpdqp_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr guint8 octet , no_of_digits; int offset = 0; - const char *digit_str; + char *digit_str; proto_tree *subtree; @@ -226,8 +220,7 @@ dissect_lnpdqp_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr if(no_of_digits == 0) return; offset++; - digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_reported_length_remaining(tvb,offset), &Dgt_tbcd, FALSE); - proto_tree_add_string(subtree, hf_lnpdqp_bcd_digits, tvb, offset, -1, digit_str); + proto_tree_add_item_ret_display_string(subtree, hf_lnpdqp_bcd_digits, tvb, offset, -1, ENC_KEYPAD_BC_TBCD, wmem_packet_scope(), &digit_str); proto_item_append_text(actx->created_item, " - %s", digit_str); break; case 2: @@ -403,7 +396,7 @@ static int dissect_ProvideInstructionArg_PDU(tvbuff_t *tvb _U_, packet_info *pin /*--- End of included file: packet-lnpdqp-fn.c ---*/ -#line 224 "./asn1/lnpdqp/packet-lnpdqp-template.c" +#line 217 "./asn1/lnpdqp/packet-lnpdqp-template.c" static int dissect_lnpdqp_cc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_) @@ -530,7 +523,7 @@ void proto_register_lnpdqp(void) { "OriginatingStationType", HFILL }}, /*--- End of included file: packet-lnpdqp-hfarr.c ---*/ -#line 322 "./asn1/lnpdqp/packet-lnpdqp-template.c" +#line 315 "./asn1/lnpdqp/packet-lnpdqp-template.c" }; /* List of subtrees */ @@ -547,7 +540,7 @@ void proto_register_lnpdqp(void) { &ett_lnpdqp_ServiceKey, /*--- End of included file: packet-lnpdqp-ettarr.c ---*/ -#line 331 "./asn1/lnpdqp/packet-lnpdqp-template.c" +#line 324 "./asn1/lnpdqp/packet-lnpdqp-template.c" }; /* Register protocol */ diff --git a/epan/dissectors/packet-meta.c b/epan/dissectors/packet-meta.c index bf87fab05d..a03f50dd70 100644 --- a/epan/dissectors/packet-meta.c +++ b/epan/dissectors/packet-meta.c @@ -308,9 +308,8 @@ static guint16 evaluate_meta_item_dxt(proto_tree *meta_tree, tvbuff_t *tvb, pack guint8 dir, nsapi, rat, aal5proto; guint16 phylinkid, localdevid, remotedevid, tapgroupid; guint32 tlli; - guint64 ts, imsi, imei, cell; + guint64 ts, cell; sscop_payload_info *p_sscop_info; - const gchar *imsi_str, *imei_str; proto_item *cell_item, *imsi_item, *imei_item; proto_tree *cell_tree, *imsi_tree, *imei_tree; @@ -342,22 +341,18 @@ static guint16 evaluate_meta_item_dxt(proto_tree *meta_tree, tvbuff_t *tvb, pack offs, 1, nsapi); break; case META_ID_IMSI: - imsi = tvb_get_letoh64(tvb, offs); - imsi_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offs, 8, NULL, FALSE); - imsi_item = proto_tree_add_string(meta_tree, hf_meta_item_imsi_digits, tvb, - offs, 8, imsi_str); + imsi_item = proto_tree_add_item(meta_tree, hf_meta_item_imsi_digits, tvb, + offs, 8, ENC_BCD_DIGITS_0_9); imsi_tree = proto_item_add_subtree(imsi_item, ett_meta_imsi); - proto_tree_add_uint64(imsi_tree, hf_meta_item_imsi_value, - tvb, offs, 8, imsi); + proto_tree_add_item(imsi_tree, hf_meta_item_imsi_value, + tvb, offs, 8, ENC_LITTLE_ENDIAN); break; case META_ID_IMEI: - imei = tvb_get_letoh64(tvb, offs); - imei_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offs, 8, NULL, FALSE); - imei_item = proto_tree_add_string(meta_tree, hf_meta_item_imei_digits, tvb, - offs, 8, imei_str); + imei_item = proto_tree_add_item(meta_tree, hf_meta_item_imei_digits, tvb, + offs, 8, ENC_BCD_DIGITS_0_9); imei_tree = proto_item_add_subtree(imei_item, ett_meta_imei); - proto_tree_add_uint64(imei_tree, hf_meta_item_imei_value, - tvb, offs, 8, imei); + proto_tree_add_item(imei_tree, hf_meta_item_imei_value, + tvb, offs, 8, ENC_LITTLE_ENDIAN); break; case META_ID_APN: proto_tree_add_item(meta_tree, hf_meta_item_apn, tvb, @@ -675,7 +670,7 @@ proto_register_meta(void) }, { &hf_meta_item_imsi_digits, { "IMSI digits", "meta.imsi_digits", - FT_STRINGZ, BASE_NONE, NULL, 0, + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } }, { &hf_meta_item_imsi_value, @@ -685,7 +680,7 @@ proto_register_meta(void) }, { &hf_meta_item_imei_digits, { "IMEI digits", "meta.imei_digits", - FT_STRINGZ, BASE_NONE, NULL, 0, + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } }, { &hf_meta_item_imei_value, diff --git a/epan/dissectors/packet-mip6.c b/epan/dissectors/packet-mip6.c index 761c8a5ce5..0bcedfdd94 100644 --- a/epan/dissectors/packet-mip6.c +++ b/epan/dissectors/packet-mip6.c @@ -1910,10 +1910,10 @@ dissect_mip6_opt_vsm_3gpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v int offset = 0; guint8 sub_type, m_flag; tvbuff_t *next_tvb; - const gchar *mei_str; - const char *digit_str; + gchar *mei_str; + char *digit_str; gchar *mcc_mnc_str; - const gchar *imsi_str; + gchar *imsi_str; /* offset points to the sub type */ sub_type = tvb_get_guint8(tvb,offset); @@ -1998,15 +1998,13 @@ dissect_mip6_opt_vsm_3gpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v break; /* 11, Mobile Equipment Identity (MEI) */ case 11: - mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, len, NULL, FALSE); - proto_tree_add_string(tree, hf_mip6_opt_3gpp_mei, tvb, offset, len, mei_str); + proto_tree_add_item_ret_display_string(tree, hf_mip6_opt_3gpp_mei, tvb, offset, len, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &mei_str); proto_item_append_text(hdr_item, " %s", mei_str); break; /* 12, MSISDN */ case 12: dissect_e164_cc(tvb, tree, offset, E164_ENC_BCD); - digit_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, len, NULL, FALSE); - proto_tree_add_string(tree, hf_mip6_opt_3gpp_msisdn, tvb, offset, len, digit_str); + proto_tree_add_item_ret_display_string(tree, hf_mip6_opt_3gpp_msisdn, tvb, offset, len, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &digit_str); proto_item_append_text(hdr_item, " %s", digit_str); break; /* 13, Serving Network */ @@ -2024,8 +2022,7 @@ dissect_mip6_opt_vsm_3gpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v break; /* 16, Unauthenticated IMSI */ case 16: - imsi_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, len, NULL, FALSE); - proto_tree_add_string(tree, hf_mip6_opt_3gpp_imsi, tvb, offset, len, imsi_str); + proto_tree_add_item_ret_display_string(tree, hf_mip6_opt_3gpp_imsi, tvb, offset, len, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &imsi_str); proto_item_append_text(hdr_item," %s", imsi_str); break; /* 17, PDN Connection ID */ diff --git a/epan/dissectors/packet-nas_5gs.c b/epan/dissectors/packet-nas_5gs.c index 811a95cfb8..10e4818574 100644 --- a/epan/dissectors/packet-nas_5gs.c +++ b/epan/dissectors/packet-nas_5gs.c @@ -760,8 +760,7 @@ de_nas_5gs_mm_5gs_mobile_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* Scheme output octet 12-x */ if (scheme_id == 0) { new_tvb = tvb_new_subset_length(tvb, offset, len - 8); - digit_str = tvb_bcd_dig_to_wmem_packet_str(new_tvb, 0, -1, NULL, FALSE); - proto_tree_add_string(tree, hf_nas_5gs_mm_suci_msin, new_tvb, 0, -1, digit_str); + proto_tree_add_item(tree, hf_nas_5gs_mm_suci_msin, new_tvb, 0, -1, ENC_BCD_DIGITS_0_9); } else { proto_item *pi = proto_tree_add_item(tree, hf_nas_5gs_mm_scheme_output, tvb, offset, len - 8, ENC_NA); if ((scheme_id == 1 && len >= 49) || (scheme_id == 2 && len >= 50)) { diff --git a/epan/dissectors/packet-nas_eps.c b/epan/dissectors/packet-nas_eps.c index c32abda8e0..8058c18f04 100644 --- a/epan/dissectors/packet-nas_eps.c +++ b/epan/dissectors/packet-nas_eps.c @@ -2349,8 +2349,7 @@ de_emm_ext_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U tvb, curr_offset, 1, ENC_NA, &length); curr_offset++; if (length > 0) { - const char *digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, curr_offset, length, NULL, FALSE); - proto_tree_add_string(sub_tree, hf_eps_emm_ext_emerg_num_list_emerg_num, tvb, curr_offset, length, digit_str); + proto_tree_add_item(sub_tree, hf_eps_emm_ext_emerg_num_list_emerg_num, tvb, curr_offset, length, ENC_BCD_DIGITS_0_9); curr_offset += length; } proto_tree_add_item_ret_uint(sub_tree, hf_eps_emm_ext_emerg_num_list_sub_serv_field_len, diff --git a/epan/dissectors/packet-pfcp.c b/epan/dissectors/packet-pfcp.c index bcb84c08d3..416e818456 100644 --- a/epan/dissectors/packet-pfcp.c +++ b/epan/dissectors/packet-pfcp.c @@ -5440,7 +5440,6 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree * int offset = 0; guint64 flags_val; guint32 length_imsi, length_imei, length_msisdn, length_nai; - const gchar *mei_str; static const int * pfcp_user_id_flags[] = { &hf_pfcp_spare_b7_b3, @@ -5476,8 +5475,7 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree * * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP * allocated string will be returned. */ - mei_str = tvb_bcd_dig_to_wmem_packet_str( tvb, offset, length_imei, NULL, FALSE); - proto_tree_add_string(tree, hf_pfcp_user_id_imei, tvb, offset, length_imei, mei_str); + proto_tree_add_item(tree, hf_pfcp_user_id_imei, tvb, offset, length_imei, ENC_BCD_DIGITS_0_9); offset += length_imei; } diff --git a/epan/dissectors/packet-sgsap.c b/epan/dissectors/packet-sgsap.c index 68d030436d..036a7afe98 100644 --- a/epan/dissectors/packet-sgsap.c +++ b/epan/dissectors/packet-sgsap.c @@ -219,13 +219,12 @@ de_sgsap_g_cn_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of static guint16 de_sgsap_imeisv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - const char *imeisv_str; + char *imeisv_str; guint32 curr_offset; curr_offset = offset; - imeisv_str = tvb_bcd_dig_to_wmem_packet_str( tvb, curr_offset, len, NULL, FALSE); - proto_tree_add_string(tree, hf_sgsap_imeisv, tvb, curr_offset, len, imeisv_str); + proto_tree_add_item_ret_display_string(tree, hf_sgsap_imeisv, tvb, curr_offset, len, ENC_BCD_DIGITS_0_9, wmem_packet_scope(), &imeisv_str); if (add_string) { /* (len<<2)+4 = the maximum number of bytes to produce (including the terminating nul character). */ g_snprintf(add_string, (len<<2)+4, " - %s", imeisv_str); diff --git a/epan/dissectors/packet-ulp.c b/epan/dissectors/packet-ulp.c index 3f1a9a8e73..f3c4efda33 100644 --- a/epan/dissectors/packet-ulp.c +++ b/epan/dissectors/packet-ulp.c @@ -1361,7 +1361,7 @@ dissect_ulp_T_mdn(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_ulp_setid); - proto_tree_add_string(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, tvb_bcd_dig_to_wmem_packet_str(mdn_tvb, 0, 8, NULL, FALSE)); + proto_tree_add_item(subtree, hf_ulp_mobile_directory_number, mdn_tvb, 0, 8, ENC_BCD_DIGITS_0_9); } diff --git a/epan/proto.h b/epan/proto.h index 9ce18b11c2..fd6d5c8f1f 100644 --- a/epan/proto.h +++ b/epan/proto.h @@ -491,6 +491,9 @@ void proto_report_dissector_bug(const char *format, ...) #define ENC_CP855 0x0000003E #define ENC_CP866 0x00000040 #define ENC_ISO_646_BASIC 0x00000042 +#define ENC_BCD_DIGITS_0_9 0x00000044 /* Packed BCD, digits 0-9 */ +#define ENC_KEYPAD_ABC_TBCD 0x00000046 /* Keypad-with-a/b/c "telephony BCD" = 0-9, *, #, a, b, c */ +#define ENC_KEYPAD_BC_TBCD 0x00000048 /* Keypad-with-B/C "telephony BCD" = 0-9, B, C, *, # */ /* * TODO: * diff --git a/epan/tvbuff.c b/epan/tvbuff.c index a5a8d24503..3aa4397616 100644 --- a/epan/tvbuff.c +++ b/epan/tvbuff.c @@ -2738,6 +2738,30 @@ tvb_get_t61_string(wmem_allocator_t *scope, tvbuff_t *tvb, gint offset, gint len return get_t61_string(scope, ptr, length); } +/* + * Encoding tables for BCD strings. + */ +static const dgt_set_t Dgt0_9_bcd = { + { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?','?' + } +}; + +static const dgt_set_t Dgt_keypad_abc_tbcd = { + { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?' + } +}; + +static const dgt_set_t Dgt_ansi_tbcd = { + { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#','?' + } +}; + /* * Given a tvbuff, an offset, a length, and an encoding, allocate a * buffer big enough to hold a non-null-terminated string of that length @@ -2931,6 +2955,29 @@ tvb_get_string_enc(wmem_allocator_t *scope, tvbuff_t *tvb, const gint offset, case ENC_T61: strptr = tvb_get_t61_string(scope, tvb, offset, length); break; + + case ENC_BCD_DIGITS_0_9: + /* + * Packed BCD, with digits 0-9. + */ + strptr = tvb_get_bcd_string(scope, tvb, offset, length, &Dgt0_9_bcd, FALSE); + break; + + case ENC_KEYPAD_ABC_TBCD: + /* + * Keypad-with-a/b/c "telephony BCD" - packed BCD, with + * digits 0-9 and symbols *, #, a, b, and c. + */ + strptr = tvb_get_bcd_string(scope, tvb, offset, length, &Dgt_keypad_abc_tbcd, FALSE); + break; + + case ENC_KEYPAD_BC_TBCD: + /* + * Keypad-with-B/C "telephony BCD" - packed BCD, with + * digits 0-9 and symbols B, C, *, and #. + */ + strptr = tvb_get_bcd_string(scope, tvb, offset, length, &Dgt_ansi_tbcd, FALSE); + break; } return strptr; } @@ -3928,50 +3975,53 @@ tvb_bytes_to_str_punct(wmem_allocator_t *scope, tvbuff_t *tvb, const gint offset return bytestring_to_str(scope, ensure_contiguous(tvb, offset, len), len, punct); } - /* - * Given a tvbuff, an offset into the tvbuff, and a length that starts - * at that offset (which may be -1 for "all the way to the end of the - * tvbuff"), fetch BCD encoded digits from a tvbuff starting from either - * the low or high half byte, formating the digits according to an input digit set, - * if NUll a default digit set of 0-9 returning "?" for overdecadic digits will be used. - * A pointer to the packet scope allocated string will be returned. - * Note a tvbuff content of 0xf is considered a 'filler' and will end the conversion. + * Given a wmem scope, a tvbuff, an offset, a length, an input digit + * set, and a boolean indicator, fetch BCD-encoded digits from a + * tvbuff starting from either the low or high half byte of the + * first byte depending on the boolean indicator (TRUE means "start + * with the high half byte, ignoring the low half byte", and FALSE + * means "start with the low half byte and proceed to the high half + * byte), formating the digits into characters according to the + * input digit set, and return a pointer to a UTF-8 string, allocated + * using the wmem scope. A high-order nibble of 0xf is considered a + * 'filler' and will end the conversion. */ -static const dgt_set_t Dgt1_9_bcd = { - { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f*/ - '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?','?' - } -}; -const gchar * -tvb_bcd_dig_to_wmem_packet_str(tvbuff_t *tvb, const gint offset, const gint len, const dgt_set_t *dgt, gboolean skip_first) +gchar * +tvb_get_bcd_string(wmem_allocator_t *scope, tvbuff_t *tvb, const gint offset, gint len, const dgt_set_t *dgt, gboolean skip_first) { - int length; - guint8 octet; - int i = 0; - char *digit_str; - gint t_offset = offset; + const guint8 *ptr; + int i = 0; + char *digit_str; + guint8 octet; DISSECTOR_ASSERT(tvb && tvb->initialized); - if (!dgt) - dgt = &Dgt1_9_bcd; - if (len == -1) { + /* + * Run to the end of the captured data. + * + * XXX - captured, or total? + */ /*length = tvb_captured_length(tvb);*/ - length = tvb->length; - if (length < offset) { - return ""; + len = tvb->length; + if (len < offset) { + return (char *)""; } - } else { - length = offset + len; + len -= offset; } - digit_str = (char *)wmem_alloc(wmem_packet_scope(), (length - offset)*2+1); - while (t_offset < length) { + ptr = ensure_contiguous(tvb, offset, len); - octet = tvb_get_guint8(tvb,t_offset); + /* + * XXX - map illegal digits (digits that map to 0) to REPLACEMENT + * CHARACTER, and have all the tables in epan/tvbuff.c use 0 rather + * than '?'? + */ + digit_str = (char *)wmem_alloc(scope, len*2 + 1); + + while (len > 0) { + octet = *ptr; if (!skip_first) { digit_str[i] = dgt->out[octet & 0x0f]; i++; @@ -3983,9 +4033,9 @@ tvb_bcd_dig_to_wmem_packet_str(tvbuff_t *tvb, const gint offset, const gint len, */ octet = octet >> 4; - if (t_offset == length - 1 && octet == 0x0f) { + if (len == 1 && octet == 0x0f) { /* - * This is the last octet, and the low-order + * This is the last octet, and the high-order * nibble is 0xf, so we have an odd number of * digits, and this is a filler digit. Ignore * it. @@ -3995,12 +4045,21 @@ tvb_bcd_dig_to_wmem_packet_str(tvbuff_t *tvb, const gint offset, const gint len, digit_str[i] = dgt->out[octet & 0x0f]; i++; - t_offset++; + ptr++; + len--; } - digit_str[i]= '\0'; + digit_str[i] = '\0'; return digit_str; +} +const gchar * +tvb_bcd_dig_to_wmem_packet_str(tvbuff_t *tvb, const gint offset, const gint len, const dgt_set_t *dgt, gboolean skip_first) +{ + if (!dgt) + dgt = &Dgt0_9_bcd; + + return tvb_get_bcd_string(wmem_packet_scope(), tvb, offset, len, dgt, skip_first); } /* diff --git a/epan/tvbuff.h b/epan/tvbuff.h index 233608a285..22ffa05114 100644 --- a/epan/tvbuff.h +++ b/epan/tvbuff.h @@ -889,6 +889,22 @@ WS_DLL_PUBLIC const gchar *tvb_bcd_dig_to_wmem_packet_str(tvbuff_t *tvb, const gint offset, const gint len, const dgt_set_t *dgt, gboolean skip_first); +/** + * Given a wmem scope, a tvbuff, an offset, a length, an input digit + * set, and a boolean indicator, fetch BCD-encoded digits from a + * tvbuff starting from either the low or high half byte of the + * first byte depending on the boolean indicator (TRUE means "start + * with the high half byte, ignoring the low half byte", and FALSE + * means "start with the low half byte and proceed to the high half + * byte), formating the digits into characters according to the + * input digit set, and return a pointer to a UTF-8 string, allocated + * using the wmem scope. A high-order nibble of 0xf is considered a + * 'filler' and will end the conversion. + */ +WS_DLL_PUBLIC gchar *tvb_get_bcd_string(wmem_allocator_t *scope, tvbuff_t *tvb, + const gint offset, gint len, const dgt_set_t *dgt, + gboolean skip_first); + /** Locate a sub-tvbuff within another tvbuff, starting at position * 'haystack_offset'. Returns the index of the beginning of 'needle' within * 'haystack', or -1 if 'needle' is not found. The index is relative