From 61917bb58e7d3442af0029e5a5e5964e96d45343 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 10 Jan 2012 08:51:14 -0600 Subject: [PATCH] reg expire tweak --- src/mod/endpoints/mod_sofia/sofia_reg.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 36c7204251..a596930fd3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -278,6 +278,7 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) { sofia_gateway_t *check, *gateway_ptr, *last = NULL; switch_event_t *event; + int delta = 0; switch_mutex_lock(profile->gw_mutex); for (gateway_ptr = profile->gateways; gateway_ptr; gateway_ptr = gateway_ptr->next) { @@ -373,16 +374,18 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) gateway_ptr->failures = 0; - if (gateway_ptr->freq >= 60) { - gateway_ptr->expires = now + (gateway_ptr->freq - 15); + if (gateway_ptr->freq > 30) { + delta = (gateway_ptr->freq - 15); } else { - if (gateway_ptr->freq < 30 && gateway_ptr->freq >= 5) { - gateway_ptr->expires = now + (gateway_ptr->freq - 5); - } else { - gateway_ptr->expires = now + (gateway_ptr->freq); - } + delta = (gateway_ptr->freq / 2); } + if (delta < 1) { + delta = 1; + } + + gateway_ptr->expires = now + delta; + gateway_ptr->state = REG_STATE_REGED; gateway_ptr->status = SOFIA_GATEWAY_UP; break; @@ -390,9 +393,9 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) case REG_STATE_UNREGISTER: sofia_reg_kill_reg(gateway_ptr); gateway_ptr->state = REG_STATE_NOREG; + gateway_ptr->status = SOFIA_GATEWAY_DOWN; break; case REG_STATE_UNREGED: - gateway_ptr->status = SOFIA_GATEWAY_DOWN; gateway_ptr->retry = 0; if (!gateway_ptr->nh) { @@ -423,6 +426,7 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) NUTAG_OUTBOUND("no-options-keepalive"), NUTAG_OUTBOUND("no-validate"), NUTAG_KEEPALIVE(0), TAG_NULL()); gateway_ptr->retry = now + gateway_ptr->retry_seconds; } else { + gateway_ptr->status = SOFIA_GATEWAY_DOWN; nua_unregister(gateway_ptr->nh, NUTAG_URL(gateway_ptr->register_url), TAG_IF(user_via, SIPTAG_VIA_STR(user_via)),