From: Anthony Minessale Date: Fri, 14 Mar 2014 17:55:50 +0000 (-0500) Subject: do not retry so fast on failed outbound subs X-Git-Tag: v1.2.23~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90da4deb1ea0508f3e4a308813d4cbb3315b90e3;p=thirdparty%2Ffreeswitch.git do not retry so fast on failed outbound subs --- diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 1e64bc981c..c174f60420 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -461,6 +461,7 @@ typedef enum { SUB_STATE_SUBED, SUB_STATE_UNSUBSCRIBE, SUB_STATE_FAILED, + SUB_STATE_FAIL_WAIT, SUB_STATE_EXPIRED, SUB_STATE_NOSUB, v_STATE_LAST diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index f62fc88325..2d94d1b7e3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -4245,8 +4245,6 @@ void sofia_presence_handle_sip_r_subscribe(int status, default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "status (%d) != 200, updated state to SUB_STATE_FAILED.\n", status); gw_sub_ptr->state = SUB_STATE_FAILED; - gw_sub_ptr->expires = switch_epoch_time_now(NULL); - gw_sub_ptr->retry = switch_epoch_time_now(NULL); if (!sofia_private) { nua_handle_destroy(nh); diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 336814d351..2c1f0f8389 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -253,6 +253,15 @@ void sofia_sub_check_gateway(sofia_profile_t *profile, time_t now) break; case SUB_STATE_FAILED: + gw_sub_ptr->expires = now; + gw_sub_ptr->retry = now + gw_sub_ptr->retry_seconds; + gw_sub_ptr->state = SUB_STATE_FAIL_WAIT; + break; + case SUB_STATE_FAIL_WAIT: + if (!gw_sub_ptr->retry || now >= gw_sub_ptr->retry) { + gw_sub_ptr->state = SUB_STATE_UNSUBED; + } + break; case SUB_STATE_TRYING: if (gw_sub_ptr->retry && now >= gw_sub_ptr->retry) { gw_sub_ptr->state = SUB_STATE_UNSUBED;