BSSAP_Adapter: Split f_bssap_start() from f_bssap_init()
In non-handler mode, the SCCP emulation is currently started before
there's a user registered to SCCP_SP_PORT. If the first BSSMAP
package arrives from the network, then the SCCP_Emulation will crash
as it cannot deliver the resulting SCCP user primitive to the user.
Let's split start from initialization, so user code can still register
something to SCCP_SP_PORT before starting SCCP_Emulation.
Change-Id: I55c94f18531bb7e5369500dc90f4b0ff3a420774
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 936544b..906e214 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -312,6 +312,8 @@
connect(self:BSSAP, g_bssap.vc_SCCP:SCCP_SP_PORT);
f_legacy_bssap_reset();
}
+ f_bssap_start(g_bssap);
+
f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port);
f_init_mgcp("VirtMSC");
diff --git a/library/BSSAP_Adapter.ttcn b/library/BSSAP_Adapter.ttcn
index 7f03f33..e50487d 100644
--- a/library/BSSAP_Adapter.ttcn
+++ b/library/BSSAP_Adapter.ttcn
@@ -164,9 +164,12 @@
ba.vc_BSSMAP.start(BSSMAP_Emulation.main(valueof(ops), ""));
}
- ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
}
+function f_bssap_start(inout BSSAP_Adapter ba) {
+ ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
+}
+
}
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 56ac3d3..f843839 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -228,6 +228,7 @@
for (var integer i := 0; i < num_bsc; i := i + 1) {
if (isbound(mp_bssap_cfg[i])) {
f_bssap_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_BssmapOps);
+ f_bssap_start(g_bssap[i]);
} else {
setverdict(fail, "missing BSSAP configuration");
}