diff --git a/kamailio/keepalive.cfg b/kamailio/keepalive.cfg index dfa02b1..da9c620 100644 --- a/kamailio/keepalive.cfg +++ b/kamailio/keepalive.cfg @@ -5,6 +5,7 @@ #!trydef KEEPALIVE_TIMERS 7 #!trydef KEEPALIVE_INTERVAL 30 #!trydef KEEPALIVE_TIMEOUT 3500 +#!trydef KEEPALIVE_FAILED_THRESHOLD 2 #!substdef "!KEEPALIVE_S_FROM_URI!sip:keepalive@MY_HOSTNAME!g" #!substdef "!KEEPALIVE_S_TIMERS!$def(KEEPALIVE_TIMERS)!g" @@ -41,8 +42,20 @@ route[KEEPALIVE_DB_TIMER] } } +route[KEEPALIVE_CLEANUP] +{ + $var(Query) = $_s(update location set expires = last_modified where id in(select a.id from loc a inner join (select cast(substr(contact, 1, instr(contact,";")-1) as varchar(32)) contact from keepalive where slot = $rtimer_worker AND failed > $def(KEEPALIVE_FAILED_THRESHOLD)) b on substr(a.contact, 1, instr(a.contact,";")-1) = b.contact)); + sql_query("cb", "$var(Query)"); + $var(Query) = $_s(DELETE FROM active_watchers where id in(select a.id from keepalive a inner join active_watchers b on a.contact=b.contact where slot = $rtimer_worker and failed > $def(KEEPALIVE_FAILED_THRESHOLD))); + sql_query("cb", "$var(Query)"); + $var(Query) = $_s(DELETE FROM keepalive where slot = $rtimer_worker and failed > $def(KEEPALIVE_FAILED_THRESHOLD)); + sql_query("cb", "$var(Query)"); +} + route[KEEPALIVE_TIMER] { + route(KEEPALIVE_CLEANUP); + $var(Query) = $_s(UPDATE keepalive SET selected = 1 WHERE slot = $rtimer_worker AND selected = 0 AND time_sent < datetime('now', '-$def(KEEPALIVE_INTERVAL) seconds')); $var(sqlres) = sql_query("cb", "$var(Query)"); if($var(sqlres) < 0) {