diff options
author | Anders Broman <anders.broman@ericsson.com> | 2008-10-23 05:56:28 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2008-10-23 05:56:28 +0000 |
commit | 9b9c51873bf68298fe3cb7508bb5a26006e0c0a1 (patch) | |
tree | ca73752540d6ae514f63a4a78f52fbcba6f22aba | |
parent | befeb91d67a18fe3ae008c018f3f0e03e594ed39 (diff) | |
download | wireshark-9b9c51873bf68298fe3cb7508bb5a26006e0c0a1.tar.gz |
From shmulikB:
1. ansi map fail to parser BCD digits when Numbering Plan: Telephony Numbering
(ITU-T Rec. E.164,E.163) (2)
2. fix dissector_try_port if sms-TeleserviceIdentifier RECIEVE BEFORE
sms-BearerData.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2989
svn path=/trunk/; revision=26521
-rw-r--r-- | asn1/ansi_map/ansi_map.cnf | 9 | ||||
-rw-r--r-- | asn1/ansi_map/packet-ansi_map-template.c | 8 | ||||
-rw-r--r-- | epan/dissectors/packet-ansi_map.c | 53 | ||||
-rw-r--r-- | epan/dissectors/packet-ansi_map.h | 2 |
4 files changed, 45 insertions, 27 deletions
diff --git a/asn1/ansi_map/ansi_map.cnf b/asn1/ansi_map/ansi_map.cnf index 4878b54bb1..38e1444c8b 100644 --- a/asn1/ansi_map/ansi_map.cnf +++ b/asn1/ansi_map/ansi_map.cnf @@ -287,6 +287,13 @@ break; } } + else + { + if (ansi_map_sms_tele_id != -1) + { + dissector_try_port(is637_tele_id_dissector_table, ansi_map_sms_tele_id, SMS_BearerData_tvb, g_pinfo, g_tree); + } + } } # 6.5.2.136 SMS-OriginationRestrictions @@ -304,7 +311,7 @@ int length; proto_tree *subtree; tvbuff_t *parameter_tvb = NULL; - static gint32 ansi_map_sms_tele_id = -1; + ansi_map_sms_tele_id = -1; %(DEFAULT_BODY)s if (parameter_tvb){ diff --git a/asn1/ansi_map/packet-ansi_map-template.c b/asn1/ansi_map/packet-ansi_map-template.c index 81fd108743..59e0ae93fc 100644 --- a/asn1/ansi_map/packet-ansi_map-template.c +++ b/asn1/ansi_map/packet-ansi_map-template.c @@ -364,6 +364,7 @@ static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */ static packet_info *g_pinfo; static proto_tree *g_tree; tvbuff_t *SMS_BearerData_tvb = NULL; +gint32 ansi_map_sms_tele_id = -1; static gboolean is683_ota; static gboolean is801_pld; static gboolean ansi_map_is_invoke; @@ -706,7 +707,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre static void dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ - guint8 octet; + guint8 octet , octet_len; guint8 b1,b2,b3,b4; int offset = 0; char *digit_str; @@ -763,9 +764,9 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */ case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */ case 7:/* Private Numbering Plan */ - octet = tvb_get_guint8(tvb,offset); + octet_len = tvb_get_guint8(tvb,offset); proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE); - if(octet == 0) + if(octet_len == 0) return; offset++; switch ((octet&0xf)){ @@ -4291,6 +4292,7 @@ dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); SMS_BearerData_tvb = NULL; + ansi_map_sms_tele_id = -1; g_pinfo = pinfo; g_tree = tree; /* diff --git a/epan/dissectors/packet-ansi_map.c b/epan/dissectors/packet-ansi_map.c index f0c0d7c2a1..1fb9c16b8a 100644 --- a/epan/dissectors/packet-ansi_map.c +++ b/epan/dissectors/packet-ansi_map.c @@ -1,7 +1,7 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Wireshark dissector compiler */ /* packet-ansi_map.c */ -/* ../../tools/asn2wrs.py -b -p ansi_map -c ./ansi_map.cnf -s ./packet-ansi_map-template -D . ansi_map.asn */ +/* ../../tools/asn2wrs.py -b -p ansi_map -c ansi_map.cnf -s packet-ansi_map-template ansi_map.asn */ /* Input file: packet-ansi_map-template.c */ @@ -1133,6 +1133,7 @@ static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */ static packet_info *g_pinfo; static proto_tree *g_tree; tvbuff_t *SMS_BearerData_tvb = NULL; +gint32 ansi_map_sms_tele_id = -1; static gboolean is683_ota; static gboolean is801_pld; static gboolean ansi_map_is_invoke; @@ -1475,7 +1476,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre static void dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ - guint8 octet; + guint8 octet , octet_len; guint8 b1,b2,b3,b4; int offset = 0; char *digit_str; @@ -1532,9 +1533,9 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */ case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */ case 7:/* Private Numbering Plan */ - octet = tvb_get_guint8(tvb,offset); + octet_len = tvb_get_guint8(tvb,offset); proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE); - if(octet == 0) + if(octet_len == 0) return; offset++; switch ((octet&0xf)){ @@ -4925,7 +4926,7 @@ dissect_ansi_map_SystemAccessType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_ansi_map_SystemCapabilities(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 328 "ansi_map.cnf" +#line 335 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -5178,7 +5179,7 @@ dissect_ansi_map_SuspiciousAccess(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_ansi_map_TransactionCapability(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 345 "ansi_map.cnf" +#line 352 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -5422,7 +5423,7 @@ dissect_ansi_map_ReauthenticationReport(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_ansi_map_ServiceIndicator(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 425 "ansi_map.cnf" +#line 432 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -5963,7 +5964,7 @@ dissect_ansi_map_AlertCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_ansi_map_CDMA2000HandoffInvokeIOSData(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 403 "ansi_map.cnf" +#line 410 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; proto_tree *subtree; @@ -6078,7 +6079,7 @@ dissect_ansi_map_CDMAConnectionReference(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_ansi_map_CDMAServiceOption(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 353 "ansi_map.cnf" +#line 360 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -6571,7 +6572,7 @@ dissect_ansi_map_BSMCStatus(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_ansi_map_CDMA2000HandoffResponseIOSData(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 414 "ansi_map.cnf" +#line 421 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; proto_tree *subtree; @@ -6812,7 +6813,7 @@ dissect_ansi_map_ACGEncountered(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in static int dissect_ansi_map_CallingPartyName(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 364 "ansi_map.cnf" +#line 371 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -7302,7 +7303,7 @@ dissect_ansi_map_LegInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in static int dissect_ansi_map_TerminationTriggers(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 337 "ansi_map.cnf" +#line 344 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -7491,7 +7492,7 @@ dissect_ansi_map_DestinationAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_ static int dissect_ansi_map_WIN_TriggerList(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 387 "ansi_map.cnf" +#line 394 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -9024,7 +9025,7 @@ dissect_ansi_map_TriggerType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o static int dissect_ansi_map_TriggerCapability(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 372 "ansi_map.cnf" +#line 379 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -9042,7 +9043,7 @@ dissect_ansi_map_TriggerCapability(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_ansi_map_WINOperationsCapability(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 380 "ansi_map.cnf" +#line 387 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -9128,7 +9129,7 @@ dissect_ansi_map_LocationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i static int dissect_ansi_map_ControlNetworkID(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 "ansi_map.cnf" +#line 402 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -10096,7 +10097,7 @@ dissect_ansi_map_RestrictionDigits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_ansi_map_SMS_OriginationRestrictions(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 294 "ansi_map.cnf" +#line 301 "ansi_map.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -10507,6 +10508,13 @@ dissect_ansi_map_SMS_BearerData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in break; } } + else + { + if (ansi_map_sms_tele_id != -1) + { + dissector_try_port(is637_tele_id_dissector_table, ansi_map_sms_tele_id, SMS_BearerData_tvb, g_pinfo, g_tree); + } + } } @@ -10518,12 +10526,12 @@ dissect_ansi_map_SMS_BearerData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in static int dissect_ansi_map_SMS_TeleserviceIdentifier(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 303 "ansi_map.cnf" +#line 310 "ansi_map.cnf" int length; proto_tree *subtree; tvbuff_t *parameter_tvb = NULL; - static gint32 ansi_map_sms_tele_id = -1; + ansi_map_sms_tele_id = -1; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, ¶meter_tvb); @@ -15049,7 +15057,7 @@ dissect_ansi_map_ReturnData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of /*--- End of included file: packet-ansi_map-fn.c ---*/ -#line 3620 "packet-ansi_map-template.c" +#line 3621 "packet-ansi_map-template.c" /* * 6.5.2.dk N.S0013-0 v 1.0,X.S0004-550-E v1.0 2.301 @@ -15724,6 +15732,7 @@ dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); SMS_BearerData_tvb = NULL; + ansi_map_sms_tele_id = -1; g_pinfo = pinfo; g_tree = tree; /* @@ -18789,7 +18798,7 @@ void proto_register_ansi_map(void) { "ansi_map.StatusRequestRes", HFILL }}, /*--- End of included file: packet-ansi_map-hfarr.c ---*/ -#line 5211 "packet-ansi_map-template.c" +#line 5213 "packet-ansi_map-template.c" }; /* List of subtrees */ @@ -19042,7 +19051,7 @@ void proto_register_ansi_map(void) { &ett_ansi_map_ReturnData, /*--- End of included file: packet-ansi_map-ettarr.c ---*/ -#line 5244 "packet-ansi_map-template.c" +#line 5246 "packet-ansi_map-template.c" }; diff --git a/epan/dissectors/packet-ansi_map.h b/epan/dissectors/packet-ansi_map.h index af25f1ca22..c84e5a1a37 100644 --- a/epan/dissectors/packet-ansi_map.h +++ b/epan/dissectors/packet-ansi_map.h @@ -1,7 +1,7 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Wireshark dissector compiler */ /* packet-ansi_map.h */ -/* ../../tools/asn2wrs.py -b -p ansi_map -c ./ansi_map.cnf -s ./packet-ansi_map-template -D . ansi_map.asn */ +/* ../../tools/asn2wrs.py -b -p ansi_map -c ansi_map.cnf -s packet-ansi_map-template ansi_map.asn */ /* Input file: packet-ansi_map-template.h */ |