diff options
author | Anders Broman <anders.broman@ericsson.com> | 2006-05-03 18:57:32 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2006-05-03 18:57:32 +0000 |
commit | 0a007827043e1084a075c805c00d2b4601ea8762 (patch) | |
tree | e86d815c56672d18bdf54432e35f6edaf59d85a8 /asn1/gsmmap | |
parent | 2670be58599d3d909fcfb5ecf2815cd1a297755e (diff) |
Add dissection of country code if number is in international format and Number plan is E164.
svn path=/trunk/; revision=18085
Diffstat (limited to 'asn1/gsmmap')
-rw-r--r-- | asn1/gsmmap/gsmmap.cnf | 36 | ||||
-rw-r--r-- | asn1/gsmmap/packet-gsm_map-template.c | 3 |
2 files changed, 35 insertions, 4 deletions
diff --git a/asn1/gsmmap/gsmmap.cnf b/asn1/gsmmap/gsmmap.cnf index f2128a7f8a..4e5b9b7443 100644 --- a/asn1/gsmmap/gsmmap.cnf +++ b/asn1/gsmmap/gsmmap.cnf @@ -223,19 +223,33 @@ Component tvbuff_t *parameter_tvb; char *digit_str; + guint8 octet; + guint8 na; + guint8 np; + proto_item *item; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; - proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); - proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); - proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_gsm_map_isdn_address_string); + + proto_tree_add_item(subtree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(subtree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); + proto_tree_add_item(subtree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); digit_str = unpack_digits(parameter_tvb, 1); - proto_tree_add_string(tree, hf_gsm_map_isdn_address_digits, parameter_tvb, 1, -1, digit_str); + proto_tree_add_string(subtree, hf_gsm_map_isdn_address_digits, parameter_tvb, 1, -1, digit_str); + + octet = tvb_get_guint8(parameter_tvb,0); + na = (octet & 0x70)>>4; + np = octet & 0x0f; + if ((na == 1) && (np==1))/*International Number & E164*/ + dissect_e164_cc(parameter_tvb, subtree, 1, TRUE); pinfo->p2p_dir = P2P_DIR_RECV; @@ -250,12 +264,20 @@ Component tvbuff_t *parameter_tvb; char *digit_str; + guint8 octet; + guint8 na; + guint8 np; + proto_item *item; + proto_tree *subtree; %(DEFAULT_BODY)s if (!parameter_tvb) return offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_gsm_map_isdn_address_string); + proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE); proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE); proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE); @@ -264,6 +286,12 @@ Component proto_tree_add_string(tree, hf_gsm_map_address_digits, parameter_tvb, 1, -1, digit_str); + octet = tvb_get_guint8(parameter_tvb,0); + na = (octet & 0x70)>>4; + np = octet & 0x0f; + if ((na == 1) && (np==1))/*International Number & E164*/ + dissect_e164_cc(parameter_tvb, subtree, 1, TRUE); + #---------------------------------------------------------------------------------------- #.FN_PARS SS-Status diff --git a/asn1/gsmmap/packet-gsm_map-template.c b/asn1/gsmmap/packet-gsm_map-template.c index e45643ec20..a6c259e18c 100644 --- a/asn1/gsmmap/packet-gsm_map-template.c +++ b/asn1/gsmmap/packet-gsm_map-template.c @@ -47,6 +47,7 @@ #include "packet-gsm_map.h" #include "packet-gsm_a.h" #include "packet-tcap.h" +#include "packet-e164.h" #include "packet-e212.h" #include "packet-smpp.h" #include "packet-gsm_sms.h" @@ -127,6 +128,7 @@ static gint ett_gsm_map_ext_qos_subscribed = -1; static gint ett_gsm_map_pdptypenumber = -1; static gint ett_gsm_map_RAIdentity = -1; static gint ett_gsm_map_LAIFixedLength = -1; +static gint ett_gsm_map_isdn_address_string = -1; #include "packet-gsm_map-ett.c" @@ -1922,6 +1924,7 @@ void proto_register_gsm_map(void) { &ett_gsm_map_pdptypenumber, &ett_gsm_map_RAIdentity, &ett_gsm_map_LAIFixedLength, + &ett_gsm_map_isdn_address_string, #include "packet-gsm_map-ettarr.c" }; |