From 831832c2c62aaec9039bfc5e2d081b960d5856f4 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 4 Nov 2014 18:31:39 -0600 Subject: [PATCH] FS-6890 #please test --- libs/sofia-sip/.update | 2 +- .../libsofia-sip-ua/nua/nua_session.c | 46 +++++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index fb3ae1977e..cc65611429 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Fri Oct 31 13:48:09 CDT 2014 +Tue Nov 4 18:30:40 CST 2014 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c index 933d76249e..c589722ebd 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c @@ -1543,38 +1543,48 @@ static void nua_session_usage_refresh(nua_handle_t *nh, nua_session_usage_t *ss = NUA_DIALOG_USAGE_PRIVATE(du); nua_client_request_t const *cr = du->du_cr; nua_server_request_t const *sr; + + SU_DEBUG_3(("nua(%p): Checking Session Refresh\n", (void *)nh)); if (ss->ss_state >= nua_callstate_terminating || /* INVITE is in progress or being authenticated */ - nua_client_request_in_progress(cr)) - return; + nua_client_request_in_progress(cr)) { + SU_DEBUG_3(("nua(%p): client has a request in progress\n", (void *)nh)); + return; + } /* UPDATE has been queued */ - for (cr = ds->ds_cr; cr; cr = cr->cr_next) - if (cr->cr_method == sip_method_update) - return; + for (cr = ds->ds_cr; cr; cr = cr->cr_next) { + if (cr->cr_method == sip_method_update) { + SU_DEBUG_3(("nua(%p): client has an update queued\n", (void *)nh)); + return; + } + } /* INVITE or UPDATE in progress on server side */ - for (sr = ds->ds_sr; sr; sr = sr->sr_next) + for (sr = ds->ds_sr; sr; sr = sr->sr_next) { if (sr->sr_usage == du && - (sr->sr_method == sip_method_invite || - sr->sr_method == sip_method_update)) - return; + (sr->sr_method == sip_method_invite || + sr->sr_method == sip_method_update)) { + SU_DEBUG_3(("nua(%p): client has an INVITE OR UPDATE in progress\n", (void *)nh)); + return; + } + } if (ss->ss_timer->refresher == nua_remote_refresher) { SU_DEBUG_3(("nua(%p): session almost expired, sending BYE before timeout.\n", (void *)nh)); ss->ss_reason = "SIP;cause=408;text=\"Session timeout\""; nua_stack_bye(nh->nh_nua, nh, nua_r_bye, NULL); return; - } - else if (NH_PGET(nh, update_refresh)) { - nua_stack_update(nh->nh_nua, nh, nua_r_update, NULL); - } - else if (du->du_cr) { - nua_client_resend_request(du->du_cr, 0); - } - else { - nua_stack_invite(nh->nh_nua, nh, nua_r_invite, NULL); + } else if (NH_PGET(nh, update_refresh)) { + SU_DEBUG_3(("nua(%p): STACK UPDATE\n", (void *)nh)); + nua_stack_update(nh->nh_nua, nh, nua_r_update, NULL); + } else if (du->du_cr && du->du_cr->cr_method == sip_method_invite) { + SU_DEBUG_3(("nua(%p): RESEND REQUEST\n", (void *)nh)); + nua_client_resend_request(du->du_cr, 0); + } else { + SU_DEBUG_3(("nua(%p): STACK INVITE\n", (void *)nh)); + nua_stack_invite(nh->nh_nua, nh, nua_r_invite, NULL); } }