diff options
author | AndersBroman <anders.broman@ericsson.com> | 2014-08-26 14:49:24 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-09-01 05:07:20 +0000 |
commit | a11b7bfc34268c93b370e3a66cb68aad7ea180a9 (patch) | |
tree | f0db355d917e0aea0a02569f8e415e8f0e4df6a7 /asn1/gsm_map/packet-gsm_map-template.c | |
parent | 5e6e0600c5cc4144bbdc84180a884b0bf258f50d (diff) | |
download | wireshark-a11b7bfc34268c93b370e3a66cb68aad7ea180a9.tar.gz |
Use a common hf for international E164 numbers (MSISDN).
Change-Id: Ie0103c04033d7bf69c92947b789ba4f5a300a74b
Reviewed-on: https://code.wireshark.org/review/3863
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'asn1/gsm_map/packet-gsm_map-template.c')
-rw-r--r-- | asn1/gsm_map/packet-gsm_map-template.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/asn1/gsm_map/packet-gsm_map-template.c b/asn1/gsm_map/packet-gsm_map-template.c index 1d2e0bad46..580a45dee0 100644 --- a/asn1/gsm_map/packet-gsm_map-template.c +++ b/asn1/gsm_map/packet-gsm_map-template.c @@ -778,7 +778,7 @@ dissect_cbs_data_coding_scheme(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree return sms_encoding; } void -dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) +dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { const char *digit_str; guint8 octet; @@ -792,17 +792,34 @@ dissect_gsm_map_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) if(tvb_reported_length(tvb)==1) return; - 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); - octet = tvb_get_guint8(tvb,0); + /* nature of address indicator */ na = (octet & 0x70)>>4; + /* numbering plan indicator */ np = octet & 0x0f; - if ((na == 1) && (np==1))/*International Number & E164*/ - dissect_e164_cc(tvb, tree, 1, E164_ENC_BCD); - else if(np==6) - dissect_e212_mcc_mnc_in_address(tvb, pinfo, tree, 1); + switch(np){ + case 1: + /* ISDN/Telephony Numbering Plan (Rec ITU-T E.164) */ + switch(na){ + case 1: + /* international number */ + 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); + break; + } + break; + case 6: + /* land mobile numbering plan (ITU-T Rec E.212) */ + 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); + break; + } } |