<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20065">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: sip: Set & validate IP addresses and ports<br><br>Change-Id: Ie382f31b8b414daf598220c2e1b325b821129a40<br>---<br>M sip/SIP_Tests.ttcn<br>1 file changed, 98 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/65/20065/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn</span><br><span>index 9de2723..534801e 100644</span><br><span>--- a/sip/SIP_Tests.ttcn</span><br><span>+++ b/sip/SIP_Tests.ttcn</span><br><span>@@ -12,6 +12,8 @@</span><br><span> </span><br><span> import from General_Types all;</span><br><span> import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Native_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Misc_Helpers all;</span><br><span> </span><br><span> import from Osmocom_CTRL_Functions all;</span><br><span> import from Osmocom_CTRL_Types all;</span><br><span>@@ -59,8 +61,12 @@</span><br><span> charstring called,</span><br><span> </span><br><span> uint32_t mncc_call_id optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ CallParsComputed comp optional,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- CallParsComputed comp optional</span><br><span style="color: hsl(120, 100%, 40%);">+ charstring sip_rtp_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t sip_rtp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+ charstring cn_rtp_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t cn_rtp_port</span><br><span> }</span><br><span> </span><br><span> type record CallParsComputed {</span><br><span>@@ -75,8 +81,13 @@</span><br><span> is_mo := is_mo,</span><br><span> calling := "12345",</span><br><span> called := "98766",</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> mncc_call_id := omit,</span><br><span style="color: hsl(0, 100%, 40%);">- comp := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ comp := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ sip_rtp_addr := "1.2.3.4",</span><br><span style="color: hsl(120, 100%, 40%);">+ sip_rtp_port := 1234,</span><br><span style="color: hsl(120, 100%, 40%);">+ cn_rtp_addr := "5.6.7.8",</span><br><span style="color: hsl(120, 100%, 40%);">+ cn_rtp_port := 5678</span><br><span> }</span><br><span> </span><br><span> private function f_CallPars_compute(inout CallPars cp) {</span><br><span>@@ -93,6 +104,22 @@</span><br><span> cp.comp.sip_body := "";</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_mgcp_addr2addrtype(charstring addr) return charstring {</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer i := 0; i < lengthof(addr); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (addr[i] == ":") {</span><br><span style="color: hsl(120, 100%, 40%);">+ return "IP6";</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return "IP4";</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_addrstr2addr(charstring addr) return octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (f_addr_is_ipv6(addr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return f_inet6_addr(addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ return f_inet_addr(addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> function f_init_mncc(charstring id) runs on test_CT {</span><br><span> id := id & "-MNCC";</span><br><span>@@ -166,6 +193,7 @@</span><br><span> var template SipAddr sip_addr_gsm := tr_SipAddr_from_val(cp.comp.sip_url_gsm);</span><br><span> var template SipAddr sip_addr_ext := tr_SipAddr_from_val(cp.comp.sip_url_ext);</span><br><span> var PDU_SIP_Request sip_req;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_SIP_Response sip_resp;</span><br><span> var MNCC_PDU mncc;</span><br><span> </span><br><span> /* Ask MNCC_Emulation to "expect" a call to the given called number */</span><br><span>@@ -186,7 +214,11 @@</span><br><span> MNCC.send(ts_MNCC_CALL_CONF_ind(cp.mncc_call_id));</span><br><span> /* MSC <- OSC: OSC asks MSC to create RTP socket */</span><br><span> MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id));</span><br><span style="color: hsl(0, 100%, 40%);">- MNCC.send(ts_MNCC_RTP_CREATE(cp.mncc_call_id));</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.rtp_port := cp.cn_rtp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ MNCC.send(mncc);</span><br><span> </span><br><span> /* MSC -> OSC: After MS is ringing and sent CC ALERTING */</span><br><span> MNCC.send(ts_MNCC_ALERT_ind(cp.mncc_call_id));</span><br><span>@@ -200,10 +232,15 @@</span><br><span> SIP.clear;</span><br><span> interleave {</span><br><span> /* MSC <- OSC: OSC asks MSC to connect its RTP stream to remote end */</span><br><span style="color: hsl(0, 100%, 40%);">- [] MNCC.receive(tr_MNCC_RTP_CONNECT(cp.mncc_call_id)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+ [] MNCC.receive(tr_MNCC_RTP_CONNECT(cp.mncc_call_id, f_addrstr2addr(cp.sip_rtp_addr), cp.sip_rtp_port)) {}</span><br><span> /* OSC -> SIP: OSC confirms call establishment to SIP side */</span><br><span> [] SIP.receive(tr_SIP_Response(cp.comp.sip_call_id, sip_addr_ext, sip_addr_gsm, ?,</span><br><span style="color: hsl(0, 100%, 40%);">- "INVITE", 200, ?, "OK", ?)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+ "INVITE", 200, ?, "OK", ?)) -> value sip_resp {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(sip_resp.messageBody, pattern "*" & cp.cn_rtp_addr & "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "wrong ip addr sent in SIP SDP, not containing ", cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> /* OSC <- SIP: SIP world acknowledges "200 OK" */</span><br><span> SIP.send(ts_SIP_ACK(cp.comp.sip_call_id, cp.comp.sip_url_ext, cp.comp.sip_url_gsm,</span><br><span>@@ -229,7 +266,10 @@</span><br><span> MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id)) {</span><br><span> var MNCC_PDU mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));</span><br><span> mncc.u.rtp.payload_msg_type := oct2int('0300'O);</span><br><span style="color: hsl(0, 100%, 40%);">- MNCC.send(mncc); /* FIXME: port/ip */</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.rtp_port := cp.cn_rtp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ MNCC.send(mncc);</span><br><span> }</span><br><span> /* OSC -> SIP: Send INVITE with GSM side IP/Port in SDP */</span><br><span> SIP.receive(tr_SIP_INVITE(?, sip_addr_gsm, sip_addr_ext, ?, ?)) -> value sip_req {</span><br><span>@@ -304,9 +344,12 @@</span><br><span> </span><br><span> /* Successful MT Call, which is subsequently released by GSM side */</span><br><span> private function f_TC_mt_success_rel_gsm(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">- var CallPars cp := valueof(t_CallPars(false));</span><br><span style="color: hsl(120, 100%, 40%);">+ var CallPars cp := g_pars.g_cp;</span><br><span> f_CallPars_compute(cp);</span><br><span style="color: hsl(0, 100%, 40%);">- 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";</span><br><span style="color: hsl(120, 100%, 40%);">+ cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &</span><br><span style="color: hsl(120, 100%, 40%);">+ "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &</span><br><span style="color: hsl(120, 100%, 40%);">+ " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";</span><br><span> f_sleep(3.0)</span><br><span> </span><br><span> f_establish_mt(cp);</span><br><span>@@ -320,6 +363,18 @@</span><br><span> var ConnHdlr vc_conn;</span><br><span> f_init();</span><br><span> pars := valueof(t_Pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp := valueof(t_CallPars(false));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_mt_success_rel_gsm), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_mt_success_rel_gsm_ipv6() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ pars := valueof(t_Pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp := valueof(t_CallPars(false));</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp.sip_rtp_addr := "::1";</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp.cn_rtp_addr := "::2";</span><br><span> vc_conn := f_start_handler(refers(f_TC_mt_success_rel_gsm), pars);</span><br><span> vc_conn.done;</span><br><span> }</span><br><span>@@ -328,7 +383,10 @@</span><br><span> private function f_TC_mt_success_rel_sip(charstring id) runs on ConnHdlr {</span><br><span> var CallPars cp := valueof(t_CallPars(false));</span><br><span> f_CallPars_compute(cp);</span><br><span style="color: hsl(0, 100%, 40%);">- 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";</span><br><span style="color: hsl(120, 100%, 40%);">+ cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &</span><br><span style="color: hsl(120, 100%, 40%);">+ "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &</span><br><span style="color: hsl(120, 100%, 40%);">+ " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";</span><br><span> f_sleep(3.0)</span><br><span> </span><br><span> f_establish_mt(cp);</span><br><span>@@ -349,9 +407,12 @@</span><br><span> </span><br><span> /* Successful MO Call, which is subsequently released by GSM side */</span><br><span> private function f_TC_mo_success_rel_gsm(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">- var CallPars cp := valueof(t_CallPars(true));</span><br><span style="color: hsl(120, 100%, 40%);">+ var CallPars cp := g_pars.g_cp;</span><br><span> f_CallPars_compute(cp);</span><br><span style="color: hsl(0, 100%, 40%);">- 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";</span><br><span style="color: hsl(120, 100%, 40%);">+ cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &</span><br><span style="color: hsl(120, 100%, 40%);">+ "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &</span><br><span style="color: hsl(120, 100%, 40%);">+ " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";</span><br><span> f_sleep(3.0)</span><br><span> </span><br><span> f_establish_mo(cp);</span><br><span>@@ -365,6 +426,18 @@</span><br><span> var ConnHdlr vc_conn;</span><br><span> f_init();</span><br><span> pars := valueof(t_Pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp := valueof(t_CallPars(true));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_mo_success_rel_gsm), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_mo_success_rel_gsm_ipv6() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ pars := valueof(t_Pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp := valueof(t_CallPars(true));</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp.sip_rtp_addr := "::1";</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.g_cp.cn_rtp_addr := "::2";</span><br><span> vc_conn := f_start_handler(refers(f_TC_mo_success_rel_gsm), pars);</span><br><span> vc_conn.done;</span><br><span> }</span><br><span>@@ -373,7 +446,10 @@</span><br><span> private function f_TC_mo_success_rel_sip(charstring id) runs on ConnHdlr {</span><br><span> var CallPars cp := valueof(t_CallPars(true));</span><br><span> f_CallPars_compute(cp);</span><br><span style="color: hsl(0, 100%, 40%);">- 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";</span><br><span style="color: hsl(120, 100%, 40%);">+ cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &</span><br><span style="color: hsl(120, 100%, 40%);">+ "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &</span><br><span style="color: hsl(120, 100%, 40%);">+ " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";</span><br><span> f_sleep(3.0)</span><br><span> </span><br><span> f_establish_mo(cp);</span><br><span>@@ -395,7 +471,10 @@</span><br><span> private function f_TC_mo_setup_disc_late_rtp(charstring id) runs on ConnHdlr {</span><br><span> var CallPars cp := valueof(t_CallPars(true));</span><br><span> f_CallPars_compute(cp);</span><br><span style="color: hsl(0, 100%, 40%);">- 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";</span><br><span style="color: hsl(120, 100%, 40%);">+ cp.comp.sip_body := "v=0\r\no=Osmocom 0 0 IN IP4 1.1.1.1\r\ns=GSM Call\r\nc=IN " &</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_addr2addrtype(cp.sip_rtp_addr) & " " & cp.sip_rtp_addr &</span><br><span style="color: hsl(120, 100%, 40%);">+ "\r\nt=0 0\r\nm=audio " & int2str(cp.sip_rtp_port) &</span><br><span style="color: hsl(120, 100%, 40%);">+ " RTP/AVP 0\r\na=rtpmap:0 GSM/8000\r\n";</span><br><span> f_sleep(3.0);</span><br><span> </span><br><span> var MNCC_number dst := valueof(ts_MNCC_number(cp.called, GSM48_TON_UNKNOWN));</span><br><span>@@ -415,7 +494,10 @@</span><br><span> MNCC.receive(tr_MNCC_RTP_CREATE(cp.mncc_call_id)) {</span><br><span> var MNCC_PDU mncc := valueof(ts_MNCC_RTP_CREATE(cp.mncc_call_id));</span><br><span> mncc.u.rtp.payload_msg_type := oct2int('0300'O);</span><br><span style="color: hsl(0, 100%, 40%);">- MNCC.send(mncc); /* FIXME: port/ip */</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.is_ipv6 := f_addr_is_ipv6(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.ip := f_addrstr2addr(cp.cn_rtp_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.u.rtp.rtp_port := cp.cn_rtp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ MNCC.send(mncc);</span><br><span> }</span><br><span> </span><br><span> /* OSC -> SIP: We should never receive INVITE */</span><br><span>@@ -441,8 +523,10 @@</span><br><span> </span><br><span> control {</span><br><span> execute( TC_mt_success_rel_gsm() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_mt_success_rel_gsm_ipv6() );</span><br><span> execute( TC_mt_success_rel_sip() );</span><br><span> execute( TC_mo_success_rel_gsm() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_mo_success_rel_gsm_ipv6() );</span><br><span> execute( TC_mo_success_rel_sip() );</span><br><span> execute( TC_mo_setup_disc_late_rtp() );</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20065">change 20065</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20065"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie382f31b8b414daf598220c2e1b325b821129a40 </div>
<div style="display:none"> Gerrit-Change-Number: 20065 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>