msc: new test: TC_lu_and_mo_csd

Related: OS#4394
Depends: https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MobileL3_v13.4.0/-/merge_requests/3
Change-Id: Ia863a63a318a9b0a8b4bfc1dc425cbc0235256b3
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 4351e06..3d7dc07 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -375,7 +375,8 @@
 	EST_TYPE_EMERG_CALL,
 	EST_TYPE_PAG_RESP,
 	EST_TYPE_MO_SMS,
-	EST_TYPE_SS_ACT
+	EST_TYPE_SS_ACT,
+	EST_TYPE_MO_CSD
 };
 
 /* helper function to fully establish a dedicated channel */
@@ -395,6 +396,9 @@
 	case (EST_TYPE_MO_CALL) {
 		l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi));
 		}
+	case (EST_TYPE_MO_CSD) {
+		l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi));
+		}
 	case (EST_TYPE_EMERG_CALL) {
 		l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi));
 		}
@@ -951,6 +955,7 @@
 							   important to set the TI flag properly */
 	BearerCapability_TLV bearer_cap,		/* which bearer capabilities to claim */
 	boolean emergency,				/* is this an emergency call? */
+	boolean csd,					/* is this a circuit switched data call? */
 
 	/* MNCC related parameters */
 	uint32_t mncc_callref optional,			/* call reference on the MNCC side */
@@ -1538,6 +1543,8 @@
 
 	if (cpars.emergency) {
 		f_establish_fully(EST_TYPE_EMERG_CALL);
+	} else if (cpars.csd) {
+		f_establish_fully(EST_TYPE_MO_CSD);
 	} else {
 		f_establish_fully(EST_TYPE_MO_CALL);
 	}
@@ -1548,6 +1555,8 @@
 
 	if (cpars.emergency) {
 		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_EMERG_SETUP(cpars.transaction_id)));
+	} if (cpars.csd) {
+		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party, ts_Bcap_csd)));
 	} else {
 		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
 	}
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 666c6c1..9650b3e 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -7187,6 +7187,21 @@
 	f_TC_auth_options(11);
 }
 
+friend function f_tc_lu_and_mo_csd(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+	f_init_handler(pars);
+	var CallParameters cpars := valueof(t_CallParams);
+	cpars.csd := true;
+	f_perform_lu();
+	f_mo_call(cpars);
+}
+testcase TC_lu_and_mo_csd() runs on MTC_CT {
+	var BSC_ConnHdlr vc_conn;
+	f_init();
+
+	vc_conn := f_start_handler(refers(f_tc_lu_and_mo_csd), 7);
+	vc_conn.done;
+}
+
 control {
 	execute( TC_cr_before_reset() );
 	execute( TC_lu_imsi_noauth_tmsi() );
@@ -7364,6 +7379,8 @@
 	execute( TC_auth_options_9() );
 	execute( TC_auth_options_10() );
 	execute( TC_auth_options_11() );
+
+	execute( TC_lu_and_mo_csd() );
 }