msc: rework f_expect_paging(): handle mismatch and timeout

When a received Paging mismatches, instead of waiting for Tguard
timeout, fail immediately.  Add a local timer and wait 4.0 seconds
by default.

Change-Id: I30273e3882e348a2ded88b7b96a5ec1473a56913
Tweaked-By: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 75eb892..5714fbf 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -1357,18 +1357,32 @@
 	log("f_mt_call_complete DONE");
 }
 
-function f_expect_paging_tmsi(template OCT4 tmsi := *)
+function f_expect_paging_tmsi(template OCT4 tmsi := *, float Tval := 4.0)
 runs on BSC_ConnHdlr {
-	if (g_pars.ran_is_geran) {
-		BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi, tmsi));
-	} else {
-		BSSAP.receive(tr_RANAP_Paging(cs_domain, imsi_hex2oct(g_pars.imsi)));
+	timer T;
+
+	T.start(Tval);
+	alt {
+	[g_pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi, tmsi));
+	[g_pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_Paging(?, *)) {
+		setverdict(fail, "Paging message doesn't match expectations");
+		mtc.stop;
+		}
+	[not g_pars.ran_is_geran] BSSAP.receive(tr_RANAP_Paging(cs_domain, imsi_hex2oct(g_pars.imsi)));
+	[not g_pars.ran_is_geran] BSSAP.receive(tr_RANAP_Paging(?, ?)) {
+		setverdict(fail, "Paging message doesn't match expectations");
+		mtc.stop;
+		}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for paging");
+		mtc.stop;
+		}
 	}
 }
 
-function f_expect_paging()
+function f_expect_paging(float Tval := 4.0)
 runs on BSC_ConnHdlr {
-	f_expect_paging_tmsi(g_pars.tmsi);
+	f_expect_paging_tmsi(g_pars.tmsi, Tval);
 }
 
 function f_mt_call_establish(inout CallParameters cpars)