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