MT#63923 Add support for loading based on prefs group

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 (NGCPPeerPrefs)
- real preferences handling (NGCPRealPrefs)

Then in the kamailio script use it like:

     lua_run("ngcp_caller_peer_load_group",
             "$avp(s:peer_id)",
             "Media Codec Transcoding Options")

Change-Id: I3b4bca6fc0959550366fc18268f7e355571385cb
master
Donat Zenichev 2 months ago
parent 1431d44eee
commit 0e091264c6

@ -98,6 +98,18 @@ function NGCP:callee_peer_load(peer)
return keys
end
function NGCP:caller_peer_load_group(peer, group_name)
local keys = self.prefs.peer:caller_load_group(peer, group_name)
self.prefs.real:caller_peer_load_group(keys)
return keys
end
function NGCP:callee_peer_load_group(peer, group_name)
local keys = self.prefs.peer:callee_load_group(peer, group_name)
self.prefs.real:callee_peer_load_group(keys)
return keys
end
function NGCP:caller_usr_load(uuid, domain)
local keys = {
domain = self.prefs.dom:caller_load(domain),

@ -28,6 +28,23 @@ NGCPPeerPrefs.__class__ = 'NGCPPeerPrefs'
NGCPPeerPrefs.group = "peer_prefs"
NGCPPeerPrefs.db_table = "peer_preferences"
NGCPPeerPrefs.query = "SELECT * FROM %s WHERE uuid = '%s'"
-- joins three tables:
-- *kamailio.peer_preferences
-- *provisioning.voip_preferences
-- *provisioning.voip_preference_groups
-- links peers attributes to the preferences list,
-- to the preferences group id
NGCPPeerPrefs.group_query = [[
SELECT kp.*
FROM kamailio.peer_preferences AS kp
JOIN provisioning.voip_preferences AS vp
ON vp.attribute = kp.attribute
JOIN provisioning.voip_preference_groups AS vpg
ON vpg.id = vp.voip_preference_groups_id
WHERE kp.uuid = '%s' AND vpg.id = %s
]]
NGCPPeerPrefs.select_id_query = "SELECT id FROM provisioning.voip_preference_groups WHERE name = '%s'"
-- luacheck: globals KSR
function NGCPPeerPrefs:new(config)
local instance = NGCPPeerPrefs:create()
@ -46,5 +63,50 @@ function NGCPPeerPrefs:clean(vtype)
end
end
function NGCPPeerPrefs: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 NGCPPeerPrefs:load_group(level, uuid, group_id)
local con = assert(self.config:getDBConnection())
local query = self.group_query:format(uuid, group_id)
local cur = assert(con:execute(query))
return self:_set_xavp(level, cur, query)
end
function NGCPPeerPrefs:caller_load_group(uuid, name)
local group_id = self:get_pref_group_id(name)
if not group_id then
KSR.err("[NGCP] Cannot load group '%s', skipping\n", name)
return {}
end
if not uuid or uuid == '' then return {} end
return self:load_group("caller", uuid, group_id)
end
function NGCPPeerPrefs:callee_load_group(uuid, name)
local group_id = self:get_pref_group_id(name)
if not group_id then
KSR.err("[NGCP] Cannot load group '%s', skipping\n", name)
return {}
end
if not uuid or uuid == '' then return {} end
return self:load_group("callee", uuid, group_id)
end
-- class
return NGCPPeerPrefs

@ -63,6 +63,14 @@ function NGCPRealPrefs:callee_peer_load(keys)
return self:_peer_load("callee", keys)
end
function NGCPRealPrefs:caller_peer_load_group(keys)
return self:_peer_load("caller", keys)
end
function NGCPRealPrefs:callee_peer_load_group(keys)
return self:_peer_load("callee", keys)
end
function NGCPRealPrefs:caller_usr_load(keys)
return self:_usr_load("caller", keys)
end

Loading…
Cancel
Save