sip: Add SIP_Emulation and first osmo-sip-connector test case
Change-Id: Ifd47b0d48c609b4a678ea47aa7f89f5c12e6c0d2
diff --git a/library/MNCC_Emulation.ttcn b/library/MNCC_Emulation.ttcn
index 60ec58b..856575e 100644
--- a/library/MNCC_Emulation.ttcn
+++ b/library/MNCC_Emulation.ttcn
@@ -193,7 +193,7 @@
}
-function f_connect(charstring sock) runs on MNCC_Emulation_CT {
+private function f_connect(charstring sock) runs on MNCC_Emulation_CT {
var UD_connect_result res;
timer T := 5.0;
@@ -215,6 +215,40 @@
}
}
+private function f_listen(charstring sock) runs on MNCC_Emulation_CT {
+ var UD_listen_result res;
+ var UD_connected udc;
+ timer T := 5.0;
+
+ T.start;
+ MNCC.send(UD_listen:{sock});
+ alt {
+ [] MNCC.receive(UD_listen_result:?) -> value res {
+ if (ispresent(res.result) and ispresent(res.result.result_code) and res.result.result_code == ERROR) {
+ setverdict(fail, "Error listening to MNCC socket", res);
+ self.stop;
+ } else {
+ g_mncc_ud_id := res.id;
+ }
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout listening to MNCC socket");
+ self.stop;
+ }
+ }
+
+ T.start;
+ alt {
+ [] MNCC.receive(UD_connected:?) -> value udc {
+ g_mncc_ud_id := res.id;
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for MNCC connection");
+ self.stop;
+ }
+ }
+}
+
/* call-back type, to be provided by specific implementation; called when new SCCP connection
* arrives */
type function MnccCreateCallback(MNCC_PDU conn_ind, charstring id)
@@ -228,9 +262,14 @@
MnccUnitdataCallback unitdata_cb
}
-function main(MnccOps ops, charstring id, charstring sock) runs on MNCC_Emulation_CT {
+function main(MnccOps ops, charstring id, charstring sock, boolean role_server := false)
+runs on MNCC_Emulation_CT {
- f_connect(sock);
+ if (role_server) {
+ f_listen(sock);
+ } else {
+ f_connect(sock);
+ }
f_expect_table_init();
f_call_table_init();
@@ -289,15 +328,19 @@
f_call_table_del(call_id);
}
- /* Client -> MNCC Socket: SETUP.req: forward + add call table entry */
- [] MNCC_CLIENT.receive(MNCC_PDU:{msg_type := MNCC_SETUP_REQ, u:=?}) -> value mncc sender vc_conn {
- /* add to call table */
- f_call_table_add(vc_conn, f_mncc_get_call_id(mncc));
+ /* Client -> MNCC Socket: Normal message */
+ [] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn {
+ if (mncc.msg_type == MNCC_SETUP_REQ and not role_server) {
+ /* ConnHdlr -> MNCC Server: SETUP.req: add to call table */
+ f_call_table_add(vc_conn, f_mncc_get_call_id(mncc));
+ } else if (mncc.msg_type == MNCC_SETUP_IND and role_server) {
+ /* ConnHdlr -> MNCC Client: SETUP.ind: add to call table */
+ f_call_table_add(vc_conn, f_mncc_get_call_id(mncc));
+ }
/* forward to MNCC socket */
MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc));
}
- /* Client -> MNCC Socket: Normal message */
[] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn {
/* forward to MNCC socket */
MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc));