Fix for Bug Packet details have errors when decode MAP V2 PRN_ACK msg

https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5076

Use:
/*
 * Dissect Multiple Choice Message
 * This function is used to decode a message, when several encoding may be used.
 * For exemple, in the last MAP version, the Cancel Location is defined like this:
 * CancelLocationArg ::= [3] IMPLICIT SEQUENCE
 * But in the previous MAP version, it was a CHOICE between a SEQUENCE and an IMSI
 * As ASN1 encoders (or software) still uses the old encoding, this function allows
 * the decoding of both versions.
 * Moreover, some optimizations (or bad practice ?) in ASN1 encoder, removes the
 * SEQUENCE tag, when only one parameter is present in the SEQUENCE.
 * This explain why the function expects 3 parameters:
 * - a [3] SEQUENCE corresponding the recent ASN1 MAP encoding
 * - a SEQUENCE for old style
 * - and a single parameter, for old version or optimizations
 *
 * The analyze of the first ASN1 tag, indicate what kind of decoding should be used,
 * if the decoding function is provided (so not a NULL function)
 */

svn path=/trunk/; revision=34001
This commit is contained in:
Anders Broman 2010-08-29 17:34:44 +00:00
parent 93cfe5571b
commit 687eb5a2a6
3 changed files with 12 additions and 6 deletions

View File

@ -1,5 +1,5 @@
-- $Id$
-- 3GPP TS 29.002 V9.1.0 V9.0.0 (2010-03)
-- 3GPP TS 29.002 V9.1.0 (2010-03)
-- 17.6.1 Mobile Service Operations
MAP-MobileServiceOperations {

View File

@ -1264,7 +1264,10 @@ static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,
offset=dissect_gsm_map_ms_CancelLocationRes(FALSE, tvb, offset, actx, tree, -1);
break;
case 4: /*provideRoamingNumber*/
offset=dissect_gsm_map_ch_ProvideRoamingNumberRes(FALSE, tvb, offset, actx, tree, -1);
offset=dissect_mc_message(tvb, offset, actx, tree,
FALSE, dissect_gsm_map_ISDN_AddressString, hf_gsm_map_msisdn,
FALSE, dissect_gsm_map_ch_ProvideRoamingNumberRes, -1,
TRUE , NULL, -1);/*undefined*/
break;
case 5: /*noteSubscriberDataModified*/
offset=dissect_gsm_map_ms_NoteSubscriberDataModifiedRes(FALSE, tvb, offset, actx, tree, -1);

View File

@ -17673,7 +17673,10 @@ static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,
offset=dissect_gsm_map_ms_CancelLocationRes(FALSE, tvb, offset, actx, tree, -1);
break;
case 4: /*provideRoamingNumber*/
offset=dissect_gsm_map_ch_ProvideRoamingNumberRes(FALSE, tvb, offset, actx, tree, -1);
offset=dissect_mc_message(tvb, offset, actx, tree,
FALSE, dissect_gsm_map_ISDN_AddressString, hf_gsm_map_msisdn,
FALSE, dissect_gsm_map_ch_ProvideRoamingNumberRes, -1,
TRUE , NULL, -1);/*undefined*/
break;
case 5: /*noteSubscriberDataModified*/
offset=dissect_gsm_map_ms_NoteSubscriberDataModifiedRes(FALSE, tvb, offset, actx, tree, -1);
@ -24371,7 +24374,7 @@ void proto_register_gsm_map(void) {
"LCS_QoS", HFILL }},
/*--- End of included file: packet-gsm_map-hfarr.c ---*/
#line 2438 "packet-gsm_map-template.c"
#line 2441 "packet-gsm_map-template.c"
};
/* List of subtrees */
@ -24974,7 +24977,7 @@ void proto_register_gsm_map(void) {
/*--- End of included file: packet-gsm_map-ettarr.c ---*/
#line 2466 "packet-gsm_map-template.c"
#line 2469 "packet-gsm_map-template.c"
};
/* Register protocol */
@ -25050,7 +25053,7 @@ void proto_register_gsm_map(void) {
/*--- End of included file: packet-gsm_map-dis-tab.c ---*/
#line 2484 "packet-gsm_map-template.c"
#line 2487 "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" );