Change in osmo-ttcn3-hacks[master]: WIP: sip: Set & validate IP addresses and ports

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Thu Sep 10 18:16:33 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20065 )


Change subject: WIP: sip: Set & validate IP addresses and ports
......................................................................

WIP: sip: Set & validate IP addresses and ports

Change-Id: Ie382f31b8b414daf598220c2e1b325b821129a40
---
M sip/SIP_Tests.ttcn
1 file changed, 98 insertions(+), 14 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/65/20065/1

diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn
index 9de2723..534801e 100644
--- a/sip/SIP_Tests.ttcn
+++ b/sip/SIP_Tests.ttcn
@@ -12,6 +12,8 @@
 
 import from General_Types all;
 import from Osmocom_Types all;
+import from Native_Functions all;
+import from Misc_Helpers all;
 
 import from Osmocom_CTRL_Functions all;
 import from Osmocom_CTRL_Types all;
@@ -59,8 +61,12 @@
 	charstring called,
 
 	uint32_t mncc_call_id optional,
+	CallParsComputed comp optional,
 
-	CallParsComputed comp optional
+	charstring sip_rtp_addr,
+	uint16_t sip_rtp_port,
+	charstring cn_rtp_addr,
+	uint16_t cn_rtp_port
 }
 
 type record CallParsComputed {
@@ -75,8 +81,13 @@
 	is_mo := is_mo,
 	calling := "12345",
 	called := "98766",
+
 	mncc_call_id := omit,
-	comp := omit
+	comp := omit,
+	sip_rtp_addr := "1.2.3.4",
+	sip_rtp_port := 1234,
+	cn_rtp_addr := "5.6.7.8",
+	cn_rtp_port := 5678
 }
 
 private function f_CallPars_compute(inout CallPars cp) {
@@ -93,6 +104,22 @@
 	cp.comp.sip_body := "";
 }
 
+private function f_mgcp_addr2addrtype(charstring addr) return charstring {
+	for (var integer i := 0; i < lengthof(addr); i := i + 1) {
+		if (addr[i] == ":") {
+			return "IP6";
+		}
+	}
+	return "IP4";
+}
+
+private function f_addrstr2addr(charstring addr) return octetstring {
+	if (f_addr_is_ipv6(addr)) {
+		return f_inet6_addr(addr);
+	} else {
+		return f_inet_addr(addr);
+	}
+}
 
 function f_init_mncc(charstring id) runs on test_CT {
 	id := id & "-MNCC";
@@ -166,6 +193,7 @@
 	var template SipAddr sip_addr_gsm := tr_SipAddr_from_val(cp.comp.sip_url_gsm);
 	var template SipAddr sip_addr_ext := tr_SipAddr_from_val(cp.comp.sip_url_ext);
 	var PDU_SIP_Request sip_req;
+	var PDU_SIP_Response sip_resp;
 	var MNCC_PDU mncc;
 
 	/* Ask MNCC_Emulation to "expect" a call to the given called number */
@@ -186,7 +214,11 @@
 	MNCC.send(ts_MNCC_CALL_CONF_ind(cp.mncc_call_id));
 	/* MSC <- OSC: OSC asks MSC to create RTP socket */
 	MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id));
-	MNCC.send(ts_MNCC_RTP_CREATE(cp.mncc_call_id));
+	mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));
+	mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);
+	mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);
+	mncc.u.rtp.rtp_port := cp.cn_rtp_port;
+	MNCC.send(mncc);
 
 	/* MSC -> OSC: After MS is ringing and sent CC ALERTING */
 	MNCC.send(ts_MNCC_ALERT_ind(cp.mncc_call_id));
@@ -200,10 +232,15 @@
 	SIP.clear;
 	interleave {
 	/* MSC <- OSC: OSC asks MSC to connect its RTP stream to remote end */
-	[] MNCC.receive(tr_MNCC_RTP_CONNECT(cp.mncc_call_id)) {}
+	[] MNCC.receive(tr_MNCC_RTP_CONNECT(cp.mncc_call_id, f_addrstr2addr(cp.sip_rtp_addr), cp.sip_rtp_port)) {}
 	/* OSC -> SIP: OSC confirms call establishment to SIP side */
 	[] SIP.receive(tr_SIP_Response(cp.comp.sip_call_id, sip_addr_ext, sip_addr_gsm, ?,
-					"INVITE", 200, ?, "OK", ?)) {}
+					"INVITE", 200, ?, "OK", ?)) -> value sip_resp {
+						if (not match(sip_resp.messageBody, pattern "*" & cp.cn_rtp_addr & "*")) {
+							setverdict(fail, "wrong ip addr sent in SIP SDP, not containing ", cp.cn_rtp_addr);
+							mtc.stop;
+						}
+					}
 	}
 	/* OSC <- SIP: SIP world acknowledges "200 OK" */
 	SIP.send(ts_SIP_ACK(cp.comp.sip_call_id, cp.comp.sip_url_ext, cp.comp.sip_url_gsm,
@@ -229,7 +266,10 @@
 	MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id)) {
 		var MNCC_PDU mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));
 		mncc.u.rtp.payload_msg_type := oct2int('0300'O);
-		MNCC.send(mncc);	/* FIXME: port/ip */
+		mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);
+		mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);
+		mncc.u.rtp.rtp_port := cp.cn_rtp_port;
+		MNCC.send(mncc);
 		}
 	/* OSC -> SIP: Send INVITE with GSM side IP/Port in SDP */
 	SIP.receive(tr_SIP_INVITE(?, sip_addr_gsm, sip_addr_ext, ?, ?)) -> value sip_req {
@@ -304,9 +344,12 @@
 
 /* Successful MT Call, which is subsequently released by GSM side */
 private function f_TC_mt_success_rel_gsm(charstring id) runs on ConnHdlr {
-	var CallPars cp := valueof(t_CallPars(false));
+	var CallPars cp := g_pars.g_cp;
 	f_CallPars_compute(cp);
-	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 0.0.0.0\r\ns=GSM Call\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
+	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &
+			    f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &
+			    "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &
+			    " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
 	f_sleep(3.0)
 
 	f_establish_mt(cp);
@@ -320,6 +363,18 @@
 	var ConnHdlr vc_conn;
 	f_init();
 	pars := valueof(t_Pars);
+	pars.g_cp := valueof(t_CallPars(false));
+	vc_conn := f_start_handler(refers(f_TC_mt_success_rel_gsm), pars);
+	vc_conn.done;
+}
+testcase TC_mt_success_rel_gsm_ipv6() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init();
+	pars := valueof(t_Pars);
+	pars.g_cp := valueof(t_CallPars(false));
+	pars.g_cp.sip_rtp_addr := "::1";
+	pars.g_cp.cn_rtp_addr := "::2";
 	vc_conn := f_start_handler(refers(f_TC_mt_success_rel_gsm), pars);
 	vc_conn.done;
 }
@@ -328,7 +383,10 @@
 private function f_TC_mt_success_rel_sip(charstring id) runs on ConnHdlr {
 	var CallPars cp := valueof(t_CallPars(false));
 	f_CallPars_compute(cp);
-	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 0.0.0.0\r\ns=GSM Call\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
+	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &
+			    f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &
+			    "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &
+			    " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
 	f_sleep(3.0)
 
 	f_establish_mt(cp);
@@ -349,9 +407,12 @@
 
 /* Successful MO Call, which is subsequently released by GSM side */
 private function f_TC_mo_success_rel_gsm(charstring id) runs on ConnHdlr {
-	var CallPars cp := valueof(t_CallPars(true));
+	var CallPars cp := g_pars.g_cp;
 	f_CallPars_compute(cp);
-	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 0.0.0.0\r\ns=GSM Call\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
+	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &
+			    f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &
+			    "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &
+			    " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
 	f_sleep(3.0)
 
 	f_establish_mo(cp);
@@ -365,6 +426,18 @@
 	var ConnHdlr vc_conn;
 	f_init();
 	pars := valueof(t_Pars);
+	pars.g_cp := valueof(t_CallPars(true));
+	vc_conn := f_start_handler(refers(f_TC_mo_success_rel_gsm), pars);
+	vc_conn.done;
+}
+testcase TC_mo_success_rel_gsm_ipv6() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init();
+	pars := valueof(t_Pars);
+	pars.g_cp := valueof(t_CallPars(true));
+	pars.g_cp.sip_rtp_addr := "::1";
+	pars.g_cp.cn_rtp_addr := "::2";
 	vc_conn := f_start_handler(refers(f_TC_mo_success_rel_gsm), pars);
 	vc_conn.done;
 }
@@ -373,7 +446,10 @@
 private function f_TC_mo_success_rel_sip(charstring id) runs on ConnHdlr {
 	var CallPars cp := valueof(t_CallPars(true));
 	f_CallPars_compute(cp);
-	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 0.0.0.0\r\ns=GSM Call\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
+	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &
+			    f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &
+			    "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &
+			    " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
 	f_sleep(3.0)
 
 	f_establish_mo(cp);
@@ -395,7 +471,10 @@
 private function f_TC_mo_setup_disc_late_rtp(charstring id) runs on ConnHdlr {
 	var CallPars cp := valueof(t_CallPars(true));
 	f_CallPars_compute(cp);
-	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 0.0.0.0\r\ns=GSM Call\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 0 RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
+	cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &
+			    f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &
+			    "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &
+			    " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";
 	f_sleep(3.0);
 
 	var MNCC_number dst := valueof(ts_MNCC_number(cp.called, GSM48_TON_UNKNOWN));
@@ -415,7 +494,10 @@
 	MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id)) {
 		var MNCC_PDU mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));
 		mncc.u.rtp.payload_msg_type := oct2int('0300'O);
-		MNCC.send(mncc);	/* FIXME: port/ip */
+		mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);
+		mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);
+		mncc.u.rtp.rtp_port := cp.cn_rtp_port;
+		MNCC.send(mncc);
 		}
 
 	/* OSC -> SIP: We should never receive INVITE */
@@ -441,8 +523,10 @@
 
 control {
 	execute( TC_mt_success_rel_gsm() );
+	execute( TC_mt_success_rel_gsm_ipv6() );
 	execute( TC_mt_success_rel_sip() );
 	execute( TC_mo_success_rel_gsm() );
+	execute( TC_mo_success_rel_gsm_ipv6() );
 	execute( TC_mo_success_rel_sip() );
 	execute( TC_mo_setup_disc_late_rtp() );
 }

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20065
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ie382f31b8b414daf598220c2e1b325b821129a40
Gerrit-Change-Number: 20065
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200910/c4eb0ec9/attachment.htm>


More information about the gerrit-log mailing list