From fde8d821548b69c1005cab2a5c414b916348c023 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 2 Dec 2017 12:10:14 +0100 Subject: [PATCH] fixup --- sip.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/sip.cpp b/sip.cpp index aa28f59..d3bcf8a 100644 --- a/sip.cpp +++ b/sip.cpp @@ -1855,7 +1855,7 @@ void Psip::i_invite(int status, char const *phrase, nua_t *nua, nua_magic_t *mag if (inst->auth_realm[0]) { authorization = sip->sip_proxy_authorization; status = check_authorization(authorization, "INVITE", inst->auth_user, inst->auth_password, inst->auth_realm, p_s_auth_nonce, &auth_text); - if (status == 401) { + if (status == 407) { generate_nonce(p_s_auth_nonce); SPRINT(auth_str, "Digest realm=\"%s\", nonce=\"%s\", algorithm=MD5, qop=\"auth\"", inst->auth_realm, p_s_auth_nonce); } @@ -1868,6 +1868,16 @@ void Psip::i_invite(int status, char const *phrase, nua_t *nua, nua_magic_t *mag if (status == 200) { p_s_auth_nonce[0] = '\0'; + } else { + sip_trace_header(this, inst->interface_name, "RESPOND", DIRECTION_OUT); + add_trace("respond", "value", "%d", status); + add_trace("reason", NULL, "peer registers"); + end_trace(); + + nua_respond(nh, status, auth_text, SIPTAG_CONTACT(sip->sip_contact), TAG_IF(auth_str[0], SIPTAG_WWW_AUTHENTICATE_STR(auth_str)), TAG_END()); +// nua_handle_destroy(nh); +// inst->register_handle = NULL; + return; } sip_trace_header(this, inst->interface_name, "Payload received", DIRECTION_NONE); @@ -2217,6 +2227,12 @@ void Psip::r_invite(int status, char const *phrase, nua_t *nua, nua_magic_t *mag add_trace("respond", "value", "%d", status); end_trace(); + if (status == 401 || status == 407) { + PDEBUG(DEBUG_SIP, "Invite challenge received\n"); + challenge(inst, this, status, phrase, nua, magic, nh, hmagic, sip, tags); + return; + } + /* connect audio */ if (status == 183 || (status >= 200 && status <= 299)) { int ret; @@ -2391,7 +2407,6 @@ static void sip_callback(nua_event_t event, int status, char const *phrase, nua_ struct sip_inst *inst = (struct sip_inst *) magic; class Port *port; class Psip *psip = NULL; - int rc; PDEBUG(DEBUG_SIP, "Event %d from SIP stack received (handle=%p)\n", event, nh); if (!nh) @@ -2480,14 +2495,6 @@ static void sip_callback(nua_event_t event, int status, char const *phrase, nua_ return; } - switch (status) { - case 401: - case 407: - rc = challenge(inst, psip, status, phrase, nua, magic, nh, hmagic, sip, tags); - if (rc >= 0) - return; - } - switch (event) { case nua_r_set_params: PDEBUG(DEBUG_SIP, "setparam response\n"); -- 2.13.6