pespin submitted this change.
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(-)
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 change 37334. To unsubscribe, or for help writing mail filters, visit settings.