diff options
author | Jeff Morriss <jeff.morriss.ws@gmail.com> | 2014-08-22 15:44:20 -0400 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-08-22 20:24:47 +0000 |
commit | 863b6646d6995b7f0a7c70aad845c7bb3f00dbc7 (patch) | |
tree | 9fa3632b74173ce3016740431aa4a0241a252061 /epan | |
parent | 2d74838e473a3e3414addb73c892efa470c4c0f1 (diff) | |
download | wireshark-863b6646d6995b7f0a7c70aad845c7bb3f00dbc7.tar.gz |
Replace a couple of implementations of unpack_digits() with tvb_bcd_dig_to_wmem_packet_str().
Change-Id: Ic9e740345fb3a748f6df4f624441bb947bbd9429
Reviewed-on: https://code.wireshark.org/review/3797
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-bssap.c | 55 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_map.c | 54 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_map.h | 3 | ||||
-rw-r--r-- | epan/dissectors/packet-gtp.c | 2 |
4 files changed, 15 insertions, 99 deletions
diff --git a/epan/dissectors/packet-bssap.c b/epan/dissectors/packet-bssap.c index 34d9868fbe..9132eb7291 100644 --- a/epan/dissectors/packet-bssap.c +++ b/epan/dissectors/packet-bssap.c @@ -619,53 +619,6 @@ static dgt_set_t Dgt_tbcd = { }; #endif -static dgt_set_t Dgt1_9_bcd = { - { - /* 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','?','?','?','?','?','?' - } -}; -/* Assumes the rest of the tvb contains the digits to be turned into a string - */ -static const char* -unpack_digits(tvbuff_t *tvb, int offset, dgt_set_t *dgt, gboolean skip_first) -{ - int length; - guint8 octet; - int i = 0; - char *digit_str; - - length = tvb_reported_length(tvb); - if (length < offset) - return ""; - digit_str = (char *)wmem_alloc(wmem_packet_scope(), (length - offset)*2+1); - - while (offset < length) { - - octet = tvb_get_guint8(tvb, offset); - if (!skip_first) { - digit_str[i] = dgt->out[octet & 0x0f]; - i++; - } - skip_first = FALSE; - - /* - * unpack second value in byte - */ - octet = octet >> 4; - - if (octet == 0x0f) /* odd number bytes - hit filler */ - break; - - digit_str[i] = dgt->out[octet & 0x0f]; - i++; - offset++; - - } - digit_str[i]= '\0'; - return digit_str; -} - static gboolean check_ie(tvbuff_t *tvb, proto_tree *tree, int *offset, guint8 expected_ie) { @@ -983,7 +936,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 = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE); + 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); return offset + ie_len; @@ -1011,7 +964,7 @@ dissect_bssap_imesiv(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 = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE); + 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); return offset + ie_len; @@ -1418,7 +1371,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 = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE); + 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); @@ -1570,7 +1523,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 = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE); + 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); return offset + ie_len - 1; diff --git a/epan/dissectors/packet-gsm_map.c b/epan/dissectors/packet-gsm_map.c index b25eb6b7dc..fb8deb50d1 100644 --- a/epan/dissectors/packet-gsm_map.c +++ b/epan/dissectors/packet-gsm_map.c @@ -2735,42 +2735,6 @@ static const value_string gsm_map_screening_ind_vals[] = { { 0, NULL } }; -const char * -unpack_digits(tvbuff_t *tvb, int offset) { - - int length; - guint8 octet; - int i=0; - char *digit_str; - - length = tvb_reported_length(tvb); - if (length < offset) - return ""; - digit_str = (char *)wmem_alloc(wmem_packet_scope(), (length - offset)*2+1); - - while ( offset < length ){ - - octet = tvb_get_guint8(tvb,offset); - digit_str[i] = ((octet & 0x0f) + '0'); - i++; - - /* - * unpack second value in byte - */ - octet = octet >> 4; - - if (octet == 0x0f) /* odd number bytes - hit filler */ - break; - - digit_str[i] = ((octet & 0x0f) + '0'); - i++; - offset++; - - } - digit_str[i]= '\0'; - return digit_str; -} - /* returns value in kb/s */ static guint gsm_map_calc_bitrate(guint8 value){ @@ -3250,7 +3214,7 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) if(tvb_reported_length(tvb)==1) return; - digit_str = unpack_digits(tvb, 1); + 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); @@ -3471,7 +3435,7 @@ dissect_gsm_map_TBCD_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of if(tvb_reported_length(parameter_tvb)==0) return offset; - digit_str = unpack_digits(parameter_tvb, 0); + digit_str = tvb_bcd_dig_to_wmem_packet_str(parameter_tvb, 0, -1, NULL, FALSE); proto_tree_add_string(tree, hf_gsm_map_TBCD_digits, parameter_tvb, 0, -1, digit_str); @@ -8184,7 +8148,7 @@ dissect_gsm_map_ms_LocationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, proto_tree_add_item(subtree, hf_gsm_map_locationnumber_apri, tvb, 1, 1, ENC_BIG_ENDIAN); proto_tree_add_item(subtree, hf_gsm_map_locationnumber_screening_ind, tvb, 1, 1, ENC_BIG_ENDIAN); - digit_str = unpack_digits(tvb, 1); + digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, 1, -1, NULL, FALSE); proto_tree_add_string(tree, hf_gsm_map_locationnumber_digits, tvb, 1, -1, digit_str); @@ -20281,7 +20245,7 @@ dissect_NokiaMAP_Extensions_AllowedServiceData(gboolean implicit_tag _U_, tvbuff /*--- End of included file: packet-gsm_map-fn.c ---*/ -#line 846 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 810 "../../asn1/gsm_map/packet-gsm_map-template.c" /* Specific translation for MAP V3 */ const value_string gsm_map_V1V2_opr_code_strings[] = { @@ -20503,7 +20467,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 857 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 821 "../../asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; @@ -20720,7 +20684,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 863 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 827 "../../asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; #endif @@ -29508,7 +29472,7 @@ void proto_register_gsm_map(void) { NULL, HFILL }}, /*--- End of included file: packet-gsm_map-hfarr.c ---*/ -#line 2881 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2845 "../../asn1/gsm_map/packet-gsm_map-template.c" }; /* List of subtrees */ @@ -30217,7 +30181,7 @@ void proto_register_gsm_map(void) { &ett_NokiaMAP_Extensions_AllowedServiceData, /*--- End of included file: packet-gsm_map-ettarr.c ---*/ -#line 2913 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2877 "../../asn1/gsm_map/packet-gsm_map-template.c" }; static ei_register_info ei[] = { @@ -30320,7 +30284,7 @@ void proto_register_gsm_map(void) { /*--- End of included file: packet-gsm_map-dis-tab.c ---*/ -#line 2950 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2914 "../../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_map.h b/epan/dissectors/packet-gsm_map.h index 13a4ac795c..3c42c19876 100644 --- a/epan/dissectors/packet-gsm_map.h +++ b/epan/dissectors/packet-gsm_map.h @@ -52,7 +52,6 @@ typedef struct _gsm_map_tap_rec_t { #define SMS_ENCODING_UCS2_LANG 5 WS_DLL_PUBLIC const value_string gsm_map_opr_code_strings[]; -const char* unpack_digits(tvbuff_t *tvb, int offset); extern const value_string ssCode_vals[]; extern const value_string gsm_map_PDP_Type_Organisation_vals[]; @@ -276,7 +275,7 @@ int dissect_gsm_ss_LocationMethod(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int dissect_NokiaMAP_Extensions_ServiceKey(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); /*--- End of included file: packet-gsm_map-exp.h ---*/ -#line 58 "../../asn1/gsm_map/packet-gsm_map-template.h" +#line 57 "../../asn1/gsm_map/packet-gsm_map-template.h" #endif /* PACKET_GSM_MAP_H */ diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c index d3de2c5e0d..87377b9b6a 100644 --- a/epan/dissectors/packet-gtp.c +++ b/epan/dissectors/packet-gtp.c @@ -5823,7 +5823,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 = unpack_digits(next_tvb, 0); + 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_item_append_text(te, ": %s", digit_str); |