BSC_ConnectionHandler.ttcn: introduce f_mt_sms_send_rp_error()

Change-Id: I3d67a451335e1c1e1b18237fdda82260c0c969fb
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index e66a3e6..f005e02 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -925,6 +925,28 @@
 	setverdict(pass);
 }
 
+/* Send RP-ERROR for MT-SMS over an already existing DTAP connection */
+function f_mt_sms_send_rp_error(inout SmsParameters spars, uint7_t cause)
+runs on BSC_ConnHdlr {
+	var template (value) RPDU_MS_SGSN rp_mo;
+	var template (value) PDU_ML3_MS_NW l3_mo;
+	var template PDU_ML3_NW_MS l3_mt;
+
+	var default d := activate(as_other_sms());
+
+	/* send RP-ACK for RP-DATA */
+	rp_mo := ts_RP_ERROR_MO(spars.rp.msg_ref, cause);
+	l3_mo := ts_ML3_MO_SMS(spars.tid, c_TIF_REPL, ts_CP_DATA_MO(rp_mo));
+	BSSAP.send(ts_PDU_DTAP_MO(l3_mo, spars.dlci, true));
+
+	/* expect CP-ACK for CP-DATA(RP-ERROR) just sent */
+	l3_mt := tr_ML3_MT_SMS(spars.tid, c_TIF_ORIG, tr_CP_ACK_MT);
+	BSSAP.receive(tr_PDU_DTAP_MT(l3_mt, spars.dlci));
+
+	deactivate(d);
+	setverdict(pass);
+}
+
 /* Wait for a MT-SMS and send RP-ACK over an already existing
  * (and authenticated, ...) DTAP connection */
 function f_mt_sms(inout SmsParameters spars)