diff options
author | Luke Mewburn <luke@mewburn.net> | 2016-01-28 16:20:28 +1100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-01-28 08:32:05 +0000 |
commit | 936e4e01231a5df9dead93ac40bb2b4f923c2754 (patch) | |
tree | 615d9edfa8bb46b9ec042948346e5f56c0b9072c /epan/dissectors/packet-gsm_map.c | |
parent | eeae61bc933dc387bebf004355312724e76d3636 (diff) |
correctly decode GSM_MAP invoke SRISMv1
The decoding of application context version 1
SendRoutingInfoForSM (SRISM) invokes (added in bug 9704)
had issues:
- The ASN.1 for RoutingInfoForSM-ArgV1 in GSMMAP.asn
lacked teleserviceCode and the extension marker.
ETSI ETS 300 599 (GSM 09.02 version 4.19.1) clause 14.7.6
has teleserviceCode and the extension marker, but not cug-Interlock.
Clause C.6.4 mentions that cug-Interlock has been deleted,
but it's retained here for decoding backwards compat.
- The test for which application_context_version to decode as
didn't work when that value was 0 (i.e. missing).
Ping-Bug: 9704
Change-Id: I8a8170d959347a47413cfd9876022e9182256452
Reviewed-on: https://code.wireshark.org/review/13571
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-gsm_map.c')
-rw-r--r-- | epan/dissectors/packet-gsm_map.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/epan/dissectors/packet-gsm_map.c b/epan/dissectors/packet-gsm_map.c index 4e525c6bc3..be7f569144 100644 --- a/epan/dissectors/packet-gsm_map.c +++ b/epan/dissectors/packet-gsm_map.c @@ -1677,6 +1677,7 @@ static int hf_gsm_old_msisdn_02 = -1; /* AddressString */ static int hf_gsm_old_sm_RP_PRI = -1; /* BOOLEAN */ static int hf_gsm_old_serviceCentreAddress = -1; /* AddressString */ static int hf_gsm_old_cug_Interlock = -1; /* CUG_Interlock */ +static int hf_gsm_old_teleserviceCode = -1; /* TeleserviceCode */ static int hf_gsm_old_subscriberId = -1; /* SubscriberIdentity */ static int hf_gsm_old_requestParameterList = -1; /* RequestParameterList */ static int hf_gsm_old_RequestParameterList_item = -1; /* RequestParameter */ @@ -17888,6 +17889,7 @@ static const ber_sequence_t gsm_old_RoutingInfoForSM_ArgV1_sequence[] = { { &hf_gsm_old_sm_RP_PRI , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsm_old_BOOLEAN }, { &hf_gsm_old_serviceCentreAddress, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_gsm_map_AddressString }, { &hf_gsm_old_cug_Interlock, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_CUG_Interlock }, + { &hf_gsm_old_teleserviceCode, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_TeleserviceCode }, { &hf_gsm_old_imsi , BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMSI }, { NULL, 0, 0, 0, NULL } }; @@ -21159,7 +21161,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ } break; case 45: /*sendRoutingInfoForSM*/ - if (application_context_version == 1) { + if (application_context_version < 2) { offset=dissect_gsm_old_RoutingInfoForSM_ArgV1(FALSE, tvb, offset, actx, tree, -1); } else { offset=dissect_gsm_map_sm_RoutingInfoForSM_Arg(FALSE, tvb, offset, actx, tree, -1); @@ -29002,6 +29004,10 @@ void proto_register_gsm_map(void) { { "cug-Interlock", "gsm_old.cug_Interlock", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_gsm_old_teleserviceCode, + { "teleserviceCode", "gsm_old.teleserviceCode", + FT_UINT8, BASE_DEC, VALS(Teleservice_vals), 0, + NULL, HFILL }}, { &hf_gsm_old_subscriberId, { "subscriberId", "gsm_old.subscriberId", FT_UINT32, BASE_DEC, VALS(gsm_map_SubscriberIdentity_vals), 0, |