From ba4924fe6ffe565ce9fb0c6a5a857df7a47d542c Mon Sep 17 00:00:00 2001 From: Luis Azedo Date: Sat, 19 Dec 2020 13:03:57 +0000 Subject: [PATCH] handle flush for realm (cherry picked from commit c1b9123989450be572860b54def60ccb896f1e8c) --- kamailio/registrar-role.cfg | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/kamailio/registrar-role.cfg b/kamailio/registrar-role.cfg index 295784d..5a170d9 100644 --- a/kamailio/registrar-role.cfg +++ b/kamailio/registrar-role.cfg @@ -468,23 +468,40 @@ event_route[kazoo:consumer-event-directory-reg-flush] { $var(user) = $(kzE{kz.json,Username}) + "@" + $(kzE{kz.json,Realm}); xlog("L_INFO", "event|registrar|$(kzE{kz.json,Msg-ID}) received directory flush for $var(user)\n"); - if ($sht(auth_cache=>$var(user)) != $null) { - $sht(auth_cache=>$var(user)) = $null; + if ($(kzE{kz.json,Username}) == "") { + sht_rm_value_re("auth_cache=>.*@$(kzE{kz.json,Realm})"); + } else { + if ($sht(auth_cache=>$var(user)) != $null) { + $sht(auth_cache=>$var(user)) = $null; + } } if( $(kzE{kz.json,Cache-Only}) == "true") { return; } - if(reg_fetch_contacts("location", "sip:$var(user)", "caller")) { - $var(i) = 0; - while($var(i) < $(ulc(caller=>count))) { - unregister("location", "sip:$(ulc(caller=>aor))", "$(ulc(caller=>ruid)[$var(i)])"); - $var(i) = $var(i) + 1; - } - reg_free_contacts("caller"); + $var(Domain) = $(kzE{kz.json,Realm}); + $var(Username) = $(kzE{kz.json,Username}); + $var(Query) = $_s(KZQ_REGISTRAR_FLUSH); + + if($var(Username) != "") { + $var(Query) = $var(Query) + $_s( and username = "$var(Username)"); + } + + $var(count) = 0; + + if (sql_xquery("cb", "$var(Query)", "ra") == 1) + { + while($xavp(ra) != $null) { + unregister("location", "sip:$xavp(ra=>aor)", "$xavp(ra=>ruid)"); + pv_unset("$xavp(ra)"); + $var(count) = $var(count) + 1; + } } + if ($(kzE{kz.json,Username}) == "") { + xlog("L_INFO", "event|registrar|$(kzE{kz.json,Msg-ID}) flushed $var(count) entries for realm $(kzE{kz.json,Realm})\n"); + } #!ifdef ANTIFLOOD_ROLE route(ANTIFLOOD_RESET_AUTH);