<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>