pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37193?usp=email )
Change subject: asterisk: Implement SIP UA unregister ......................................................................
asterisk: Implement SIP UA unregister
Change-Id: I1ea6be662db00e52dbd39c4f54bb656dc4587ec7 --- M asterisk/Asterisk_Tests.ttcn M asterisk/SIP_ConnectionHandler.ttcn 2 files changed, 66 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/93/37193/1
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn index bb1ed90..7126118 100644 --- a/asterisk/Asterisk_Tests.ttcn +++ b/asterisk/Asterisk_Tests.ttcn @@ -183,7 +183,9 @@ private function f_TC_internal_registration(charstring id) runs on SIPConnHdlr {
f_SIP_register(); - // f_SIP_deregister(); + /* Trigger unregistration: */ + f_sleep(1.0); + f_SIP_unregister(); setverdict(pass); } testcase TC_internal_registration() runs on test_CT { @@ -209,6 +211,8 @@ COORD.receive(COORD_CMD_HANGUP); f_SIP_do_call_hangup();
+ f_SIP_unregister(); + setverdict(pass); } private function f_TC_internal_call_mt(charstring id) runs on SIPConnHdlr { @@ -234,6 +238,8 @@ } as_SIP_exp_call_hangup(g_pars.cp.sip_seq_nr + 1);
+ f_SIP_unregister(); + setverdict(pass); } testcase TC_internal_call_momt() runs on test_CT { diff --git a/asterisk/SIP_ConnectionHandler.ttcn b/asterisk/SIP_ConnectionHandler.ttcn index 05f872f..892f5a3 100644 --- a/asterisk/SIP_ConnectionHandler.ttcn +++ b/asterisk/SIP_ConnectionHandler.ttcn @@ -61,6 +61,7 @@ SipUrl local_sip_url_ext, SipAddr local_sip_record, Contact local_contact, + Authorization authorization optional, CallPars cp optional } type record of SIPConnHdlrPars SIPConnHdlrParsList; @@ -147,6 +148,7 @@ ts_UserInfo(user))), omit) })), + authorization := omit, cp := cp }
@@ -299,10 +301,11 @@ as_SIP_expect_resp(exp);
/* Digest Auth: RFC 2617 */ - authorization := f_sip_digest_gen_Authorization_MD5(g_rx_sip_resp.msgHeader.wwwAuthenticate, - g_pars.user, g_pars.password, - "REGISTER", - f_sip_SipUrl_to_str(g_pars.registrar_sip_req_uri)) + g_pars.authorization := + f_sip_digest_gen_Authorization_MD5(g_rx_sip_resp.msgHeader.wwwAuthenticate, + g_pars.user, g_pars.password, + "REGISTER", + f_sip_SipUrl_to_str(g_pars.registrar_sip_req_uri))
/* New transaction: */ g_pars.registrar_sip_seq_nr := g_pars.registrar_sip_seq_nr + 1; @@ -320,7 +323,49 @@ g_pars.registrar_sip_seq_nr, g_pars.local_contact, ts_Expires("7200"), - authorization := authorization)); + authorization := g_pars.authorization)); + + /* Wait for OK answer */ + exp := tr_SIP_Response( + g_pars.registrar_sip_call_id, + from_addr, + to_addr_exp, + f_tr_Via_response(via), + *, + "REGISTER", 200, + g_pars.registrar_sip_seq_nr, "OK"); + as_SIP_expect_resp(exp); + + /* Prepare for next use: */ + g_pars.registrar_sip_seq_nr := g_pars.registrar_sip_seq_nr + 1; + return g_rx_sip_resp; +} + +function f_SIP_unregister() runs on SIPConnHdlr return PDU_SIP_Response +{ + var template (present) PDU_SIP_Response exp; + var Via via := g_pars.local_via; + var From from_addr := valueof(ts_From(g_pars.registrar_sip_record.addr, g_pars.registrar_sip_record.params)); + var To to_addr := valueof(ts_To(g_pars.registrar_sip_record.addr, g_pars.registrar_sip_record.params)); + var template (present) To to_addr_exp := tr_To(tr_Addr_Union_from_val(to_addr.addressField), *); + var charstring branch_value; + + branch_value := f_sip_gen_branch(f_sip_SipAddr_to_str(g_pars.registrar_sip_record), + f_sip_SipAddr_to_str(g_pars.registrar_sip_record), + g_pars.registrar_sip_call_id, + g_pars.registrar_sip_seq_nr); + + via.viaBody[0].viaParams := f_sip_param_set(via.viaBody[0].viaParams, "branch", branch_value); + from_addr.fromParams := f_sip_param_set(from_addr.fromParams, "tag", f_sip_rand_tag()); + SIP.send(ts_SIP_REGISTER(g_pars.registrar_sip_req_uri, + g_pars.registrar_sip_call_id, + from_addr, + to_addr, + via, + g_pars.registrar_sip_seq_nr, + g_pars.local_contact, + ts_Expires("0"), + authorization := g_pars.authorization));
/* Wait for OK answer */ exp := tr_SIP_Response(