pespin has uploaded this change for review.
asterisk: IMS: allow re-auth during unregister
After a while, Asterisk may ask for re-auth when issuing a REGISTER
Expires=0 (unregister), which is totally fine. Handle the 401 Unauthorized
and retry again.
Change-Id: I7f2536771e7d47e83bb8fa1442c32fd73a2868b7
---
M asterisk/SIP_ConnectionHandler.ttcn
1 file changed, 70 insertions(+), 10 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/09/37309/1
diff --git a/asterisk/SIP_ConnectionHandler.ttcn b/asterisk/SIP_ConnectionHandler.ttcn
index 52290fd..5aa3773 100644
--- a/asterisk/SIP_ConnectionHandler.ttcn
+++ b/asterisk/SIP_ConnectionHandler.ttcn
@@ -366,17 +366,64 @@
g_pars.local_contact,
ts_Expires("0"),
authorization := g_pars.authorization));
-
+ alt {
/* 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);
+ [] SIP.receive(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")) -> value g_rx_sip_resp;
+
+ /* May require re-auth: */
+ [] SIP.receive(tr_SIP_Response_Unauthorized(
+ g_pars.registrar_sip_call_id,
+ from_addr,
+ to_addr_exp,
+ f_tr_Via_response(via),
+ *,
+ tr_WwwAuthenticate({tr_Challenge_digestCln(?)}),
+ g_pars.registrar_sip_seq_nr)) -> value g_rx_sip_resp {
+
+ /* Digest Auth: RFC 2617 */
+ 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;
+ 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);
+
+ 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(
+ 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;
To view, visit change 37309. To unsubscribe, or for help writing mail filters, visit settings.