MT#65662 Add support for loading based on prefs group (subscribers)

Add support of loading based on the name
of the preferences group (e.g. "Media Codec Transcoding Options")

For that to work extend functionality on levels of:
- root of the framework (NGCP)
- peers prefrences handling (NGCPPrefs)
- real preferences handling (NGCPRealPrefs)

Then in the kamailio script use it like:

     lua_run("ngcp_caller_usr_load_group",
             "$avp(s:caller_uuid)",
             "Media Codec Transcoding Options")

This is on the same manner as done previously here: 4661e5c30658b5ec

Change-Id: If1dba6e90fb76308f323779afb0499c96f3c6f38
(cherry picked from commit cf94e2c5bb)
mr26.1
Donat Zenichev 4 weeks ago committed by Talha Omair
parent 6034e68836
commit 8ba3a53320

@ -127,6 +127,12 @@ function NGCP:caller_usr_load(uuid, domain)
return unique_keys
end
function NGCP:caller_load_group(uuid, group_name)
local keys = self.prefs.usr:caller_load_group(uuid, group_name)
self.prefs.real:caller_usr_load_group(keys)
return keys
end
function NGCP:callee_usr_load(uuid, domain)
local keys = {
domain = self.prefs.dom:callee_load(domain),
@ -143,6 +149,12 @@ function NGCP:callee_usr_load(uuid, domain)
return unique_keys
end
function NGCP:callee_load_group(uuid, group_name)
local keys = self.prefs.usr:callee_load_group(uuid, group_name)
self.prefs.real:callee_usr_load_group(keys)
return keys
end
function NGCP:log_pref(level, vtype)
local xavp,xavp_log
local msg = "%s:%s\n"

@ -26,6 +26,18 @@ local NGCPPrefs = utils.inheritsFrom()
NGCPPrefs.__class__ = 'NGCPPrefs'
NGCPPrefs.levels = {"caller", "callee"}
NGCPPrefs.query_blob = "SELECT * FROM provisioning.voip_%s_blob WHERE id = %s"
NGCPPrefs.select_id_query =
"SELECT id FROM provisioning.voip_preference_groups WHERE name = '%s'"
NGCPPrefs.group_query = [[
SELECT prefs.*
FROM %s AS prefs
JOIN provisioning.voip_preferences AS vp
ON vp.attribute = prefs.attribute
JOIN provisioning.voip_preference_groups AS vpg
ON vpg.id = vp.voip_preference_groups_id
WHERE prefs.uuid = '%s' AND vpg.id = %s
ORDER BY prefs.id DESC
]]
function NGCPPrefs.__tostring(self)
local output, msg = '', "%s_%s:%s\n"
@ -131,6 +143,58 @@ function NGCPPrefs:_load(level, uuid)
return self:_set_xavp(level, cur, query)
end
function NGCPPrefs:get_pref_group_id(name)
local con = assert(self.config:getDBConnection())
local query = self.select_id_query:format(name)
local cur = assert(con:execute(query))
local row = cur:fetch({}, "a")
cur:close()
if row and row.id then
return tonumber(row.id)
end
KSR.err(string.format("[NGCP] preference group '%s' not found\n", name))
return nil
end
function NGCPPrefs:load_group(level, uuid, group_id)
if not uuid or uuid == '' then
return {}
end
if not self.group_query then
error(string.format("no group query for prefs:%s", self.group))
end
local con = assert(self.config:getDBConnection())
local query = self.group_query:format(self.db_table, uuid, group_id)
local cur = assert(con:execute(query))
return self:_set_xavp(level, cur, query)
end
function NGCPPrefs:caller_load_group(uuid, name)
local group_id = self:get_pref_group_id(name)
if not group_id then
KSR.err(string.format("[NGCP] Cannot load group '%s', skipping\n",
name))
return {}
end
return self:load_group("caller", uuid, group_id)
end
function NGCPPrefs:callee_load_group(uuid, name)
local group_id = self:get_pref_group_id(name)
if not group_id then
KSR.err(string.format("[NGCP] Cannot load group '%s', skipping\n",
name))
return {}
end
return self:load_group("callee", uuid, group_id)
end
function NGCPPrefs:caller_load(uuid)
if not uuid or uuid == '' then
return {}

@ -71,6 +71,14 @@ function NGCPRealPrefs:callee_peer_load_group(keys)
return self:_peer_load("callee", keys)
end
function NGCPRealPrefs:caller_usr_load_group(keys)
return self:_usr_load("caller", keys)
end
function NGCPRealPrefs:callee_usr_load_group(keys)
return self:_usr_load("callee", keys)
end
function NGCPRealPrefs:caller_usr_load(keys)
return self:_usr_load("caller", keys)
end

Loading…
Cancel
Save