aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/gsmmap
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2006-05-03 18:57:32 +0000
committerAnders Broman <anders.broman@ericsson.com>2006-05-03 18:57:32 +0000
commit0a007827043e1084a075c805c00d2b4601ea8762 (patch)
treee86d815c56672d18bdf54432e35f6edaf59d85a8 /asn1/gsmmap
parent2670be58599d3d909fcfb5ecf2815cd1a297755e (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.cnf36
-rw-r--r--asn1/gsmmap/packet-gsm_map-template.c3
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"
};