diff options
author | Anders Broman <anders.broman@ericsson.com> | 2010-08-29 17:34:44 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2010-08-29 17:34:44 +0000 |
commit | 687eb5a2a69f0260247fab4cbf41ed28be5e03f1 (patch) | |
tree | f320be89ead22e0d5645e11c7d897dcb5c97cdd0 /asn1/gsm_map | |
parent | 93cfe5571b36e986ae90a040b6723dd3e4d236bb (diff) |
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
Diffstat (limited to 'asn1/gsm_map')
-rw-r--r-- | asn1/gsm_map/MAP-MobileServiceOperations.asn | 2 | ||||
-rw-r--r-- | asn1/gsm_map/packet-gsm_map-template.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/asn1/gsm_map/MAP-MobileServiceOperations.asn b/asn1/gsm_map/MAP-MobileServiceOperations.asn index d9a18313f9..894c62fcbd 100644 --- a/asn1/gsm_map/MAP-MobileServiceOperations.asn +++ b/asn1/gsm_map/MAP-MobileServiceOperations.asn @@ -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 { diff --git a/asn1/gsm_map/packet-gsm_map-template.c b/asn1/gsm_map/packet-gsm_map-template.c index 0b9b6c1430..70102146ca 100644 --- a/asn1/gsm_map/packet-gsm_map-template.c +++ b/asn1/gsm_map/packet-gsm_map-template.c @@ -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); |