summaryrefslogtreecommitdiff
path: root/epan
diff options
context:
space:
mode:
authorLuke Mewburn <luke@mewburn.net>2016-01-28 16:20:28 +1100
committerAnders Broman <a.broman58@gmail.com>2016-01-28 08:32:05 +0000
commit936e4e01231a5df9dead93ac40bb2b4f923c2754 (patch)
tree615d9edfa8bb46b9ec042948346e5f56c0b9072c /epan
parenteeae61bc933dc387bebf004355312724e76d3636 (diff)
downloadwireshark-936e4e01231a5df9dead93ac40bb2b4f923c2754.tar.gz
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')
-rw-r--r--epan/dissectors/packet-gsm_map.c8
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,