msc: Add Emergency call to f_mo_call() and use it from TC_emerg_call_imsi
This fixes TC_emerg_call_imsi with current osmo-msc master. The old
implementation was broken as it didn't deal with MGCP yet.
Change-Id: Ic35797931387b078205269365421ad730db7af15
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 1d39ab4..403064b 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -188,6 +188,7 @@
type enumerated EstablishType {
EST_TYPE_MO_CALL,
+ EST_TYPE_EMERG_CALL,
EST_TYPE_PAG_RESP
};
@@ -199,6 +200,9 @@
case (EST_TYPE_MO_CALL) {
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));
+ }
case (EST_TYPE_PAG_RESP) {
l3_info := valueof(ts_PAG_RESP(mi));
}
@@ -211,7 +215,7 @@
if (g_pars.net.expect_ciph) {
/* implicit CM SERVICE ACCEPT? */
} else {
- if (etype == EST_TYPE_MO_CALL) {
+ if (etype != EST_TYPE_PAG_RESP) {
/* explicit CM SERVICE ACCEPT */
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_ACC));
}
@@ -373,6 +377,7 @@
hexstring called_party, /* whom are we calling */
integer transaction_id optional, /* which TS 04.08 CC transaction ID to use */
BearerCapability_TLV bearer_cap, /* which bearer capabilities to claim */
+ boolean emergency, /* is this an emergency call? */
/* MNCC related parameters */
uint32_t mncc_callref optional, /* call reference on the MNCC side */
@@ -400,6 +405,7 @@
called_party := called,
transaction_id := tid,
bearer_cap := valueof(ts_Bcap_voice),
+ emergency := false,
mncc_callref := omit,
mncc_bearer_cap := valueof(ts_MNCC_bcap_voice),
bss_rtp_ip := "9.8.7.6",
@@ -432,13 +438,21 @@
} else {
mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
}
- f_establish_fully(mi);
+ if (cpars.emergency) {
+ f_establish_fully(mi, EST_TYPE_EMERG_CALL);
+ } else {
+ f_establish_fully(mi, EST_TYPE_MO_CALL);
+ }
/* Create MNCC and MGCP expect */
f_create_mncc_expect(hex2str(cpars.called_party));
f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
- BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
+ if (cpars.emergency) {
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_EMERG_SETUP(cpars.transaction_id)));
+ } else {
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
+ }
interleave {
[] MNCC.receive(tr_MNCC_SETUP_ind(?, tr_MNCC_number(hex2str(cpars.called_party)))) -> value mncc {
cpars.mncc_callref := mncc.u.signal.callref;