pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37334?usp=email )


Change subject: asterisk: IMS: Fix Contact and URI headers during MT call 
precondition
......................................................................

asterisk: IMS: Fix Contact and URI headers during MT call precondition

Change-Id: Id0036adf850d71eda92d6c0f07eeb873bdfa9d0c
---
M asterisk/IMS_ConnectionHandler.ttcn
M asterisk/SIP_ConnectionHandler.ttcn
M library/SIP_Templates.ttcn
M sip/SIP_Tests.ttcn
4 files changed, 30 insertions(+), 13 deletions(-)



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

diff --git a/asterisk/IMS_ConnectionHandler.ttcn 
b/asterisk/IMS_ConnectionHandler.ttcn
index ec163f5..4b50c31 100644
--- a/asterisk/IMS_ConnectionHandler.ttcn
+++ b/asterisk/IMS_ConnectionHandler.ttcn
@@ -1127,7 +1127,7 @@
        var charstring tx_sdp;
        var default d_trying, d_ringing;
        var charstring branch_value;
-       var Contact calling_contact;
+       var Contact calling_contact, called_contact;

        /* RFC 3261 8.1.1.3 From */
        g_pars.subscr.cp.from_addr := 
valueof(ts_From(g_pars.subscr.cp.calling.addr, 
g_pars.subscr.cp.calling.params));
@@ -1238,11 +1238,12 @@
                                                        
g_pars.subscr.cp.peer_sdp.media_list[0].attributes));
                }

+               called_contact := g_rx_sip_resp.msgHeader.contact;
                /* Update To with the tags received from peer: */
                g_pars.subscr.cp.to_addr := g_rx_sip_resp.msgHeader.toField;

                /* Tx PRACK */
-               req := 
ts_SIP_PRACK(g_pars.subscr.cp.to_addr.addressField.nameAddr.addrSpec,
+               req := 
ts_SIP_PRACK(called_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec,
                                    g_pars.subscr.cp.sip_call_id,
                                    g_pars.subscr.cp.from_addr,
                                    g_pars.subscr.cp.to_addr,
@@ -1263,11 +1264,11 @@
                                       "PRACK", 200,
                                       g_rx_sip_resp.msgHeader.cSeq.seqNumber + 
1, "OK",
                                       body := omit);
-               as_SIP_expect_resp(exp, fail_others := false);
+               as_SIP_expect_resp(exp);

                /* Tx UPDATE */
                tx_sdp := f_gen_sdp(IMS_GEN_SDP_MO_UPDATE);
-               req := 
ts_SIP_UPDATE(g_pars.subscr.cp.to_addr.addressField.nameAddr.addrSpec,
+               req := 
ts_SIP_UPDATE(called_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec,
                                     g_pars.subscr.cp.sip_call_id,
                                     g_pars.subscr.cp.from_addr,
                                     g_pars.subscr.cp.to_addr,
@@ -1283,11 +1284,11 @@
                                       from_addr_exp,
                                       to_addr_exp,
                                       f_tr_Via_response(via),
-                                      omit,
+                                      called_contact,
                                       "UPDATE", 200,
                                       g_rx_sip_resp.msgHeader.cSeq.seqNumber + 
1, "OK",
                                       body := ?);
-               as_SIP_expect_resp(exp, fail_others := false);
+               as_SIP_expect_resp(exp);

                /* Validate SDP in 200 OK (UPDATE) contains the preconditions:
                 * a=curr:qos local sendrecv
@@ -1318,13 +1319,15 @@
                        g_pars.subscr.cp.sip_seq_nr, "INVITE");
        d_ringing := activate(as_SIP_ignore_resp(exp));

+       called_contact := g_rx_sip_resp.msgHeader.contact;
+
        /* Wait for 200 OK (INVITE) answer */
        exp := tr_SIP_Response(
                        g_pars.subscr.cp.sip_call_id,
                        from_addr_exp,
                        to_addr_exp,
                        f_tr_Via_response(via),
-                       *,
+                       called_contact,
                        "INVITE", 200,
                        g_pars.subscr.cp.sip_seq_nr, "OK",
                        body := *);
@@ -1341,7 +1344,8 @@

        /* Transmit ACK */
        g_pars.subscr.cp.sip_seq_nr := g_pars.subscr.cp.sip_seq_nr + 1;
-       req := ts_SIP_ACK(g_pars.subscr.cp.sip_call_id,
+       req := 
ts_SIP_ACK(called_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec,
+                         g_pars.subscr.cp.sip_call_id,
                          g_pars.subscr.cp.from_addr,
                          g_pars.subscr.cp.to_addr,
                          via,
diff --git a/asterisk/SIP_ConnectionHandler.ttcn 
b/asterisk/SIP_ConnectionHandler.ttcn
index 0cb6167..f688fe0 100644
--- a/asterisk/SIP_ConnectionHandler.ttcn
+++ b/asterisk/SIP_ConnectionHandler.ttcn
@@ -531,7 +531,8 @@
        g_pars.cp.to_addr := g_rx_sip_resp.msgHeader.toField;

        /* Transmit ACK */
-       req := ts_SIP_ACK(g_pars.cp.sip_call_id,
+       req := ts_SIP_ACK(g_pars.cp.to_addr.addressField.nameAddr.addrSpec,
+                         g_pars.cp.sip_call_id,
                          g_pars.cp.from_addr,
                          g_pars.cp.to_addr,
                          via,
diff --git a/library/SIP_Templates.ttcn b/library/SIP_Templates.ttcn
index 3d2112c..c05ab02 100644
--- a/library/SIP_Templates.ttcn
+++ b/library/SIP_Templates.ttcn
@@ -995,13 +995,14 @@


 template (value) PDU_SIP_Request
-ts_SIP_ACK(template (value) CallidString call_id,
+ts_SIP_ACK(template (value) SipUrl uri,
+          template (value) CallidString call_id,
           template (value) From from_addr,
           template (value) To to_addr,
           template (value) Via via,
           integer seq_nr,
           template (omit) charstring body) := {
-       requestLine := ts_SIP_ReqLine(ACK_E, 
to_addr.addressField.nameAddr.addrSpec),
+       requestLine := ts_SIP_ReqLine(ACK_E, uri),
        msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr,
                                     ts_Contact({ 
ts_ContactAddress(from_addr.addressField, from_addr.fromParams) }),
                                     "ACK", seq_nr,
diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn
index 74e0688..6064372 100644
--- a/sip/SIP_Tests.ttcn
+++ b/sip/SIP_Tests.ttcn
@@ -295,7 +295,8 @@
                }
        [] SIP.receive {
                setverdict(fail, "Received unexpected SIP response");
-               SIP.send(ts_SIP_ACK(cp.comp.sip_call_id,
+               SIP.send(ts_SIP_ACK(to_addr.addressField.nameAddr.addrSpec,
+                                   cp.comp.sip_call_id,
                                    from_addr, to_addr,
                                    via,
                                    cp.comp.sip_seq_nr, omit));
@@ -363,7 +364,8 @@
                                           body := expect_sdp_to_sip));

        /* OSC <- SIP: SIP world acknowledges "200 OK" */
-       SIP.send(ts_SIP_ACK(cp.comp.sip_call_id,
+       SIP.send(ts_SIP_ACK(to_addr.addressField.nameAddr.addrSpec,
+                           cp.comp.sip_call_id,
                            from_addr, to_addr,
                            via,
                            cp.comp.sip_seq_nr, omit));

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37334?usp=email
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: Id0036adf850d71eda92d6c0f07eeb873bdfa9d0c
Gerrit-Change-Number: 37334
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to