diff --git a/ngcp/dp.lua b/ngcp/dp.lua index 7506db4..461c21b 100644 --- a/ngcp/dp.lua +++ b/ngcp/dp.lua @@ -41,33 +41,38 @@ NGCPDomainPrefs_MT.__tostring = function () return NGCPDomainPrefs._load(self,"callee",uuid) end - function NGCPDomainPrefs:_get_defaults(level) + function NGCPDomainPrefs:_defaults(level) local defaults = self.config:get_defaults('dom') local keys = {} local k,_ if defaults then - self:xavp(level, defaults) for k,_ in pairs(defaults) do table.insert(keys, k) end end - return keys + return keys, defaults end function NGCPDomainPrefs:_load(level, uuid) local con = self.config:getDBConnection() local query = "SELECT * FROM " .. self.db_table .. " WHERE domain ='" .. uuid .."'" local cur = con:execute(query) - local keys = self:_get_defaults(level) + local defaults + local keys local result = {} local row = cur:fetch({}, "a") + local k,v + local xavp + + keys, defaults = self:_defaults(level) if row then while row do --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) table.insert(result, row) table.add(keys, row.attribute) + defaults[row.attribute] = nil row = cur:fetch({}, "a") end else @@ -75,7 +80,11 @@ NGCPDomainPrefs_MT.__tostring = function () end cur:close() con:close() - self:xavp(level, result) + + xavp = self:xavp(level, result) + for k,v in pairs(defaults) do + xavp(k, v) + end return keys end diff --git a/ngcp/ngcp.lua b/ngcp/ngcp.lua index f7cbddd..c550ce5 100644 --- a/ngcp/ngcp.lua +++ b/ngcp/ngcp.lua @@ -22,7 +22,7 @@ NGCPConfig_MT = { __index = NGCPConfig } db_pass = "somepasswd", db_database = "kamailio", default = { - all = { + peer = { sst_enable = "yes", sst_expires = 300, sst_min_timer = 90, @@ -34,7 +34,19 @@ NGCPConfig_MT = { __index = NGCPConfig } inbound_uprn = "from_user", ip_header = "P-NGCP-Src-Ip", }, - real = { + dom = { + sst_enable = "yes", + sst_expires = 300, + sst_min_timer = 90, + sst_max_timer = 7200, + sst_refresh_method = "UPDATE_FALLBACK_INVITE", + outbound_from_user = "npn", + inbound_upn = "from_user", + inbound_uprn = "from_user", + ip_header = "P-NGCP-Src-Ip", + }, + -- just for prefs that are only on usr level + usr = { account_id = 0, ext_subscriber_id = "", ext_contract_id = "", @@ -55,11 +67,7 @@ NGCPConfig_MT = { __index = NGCPConfig } function NGCPConfig:get_defaults(vtype) local k,v - local defs = table.deepcopy(self.default.all) - - if (vtype == 'dom' or vtype == 'usr') then - vtype = 'real' - end + local defs = {} if self.default.vtype then for k,v in pairs(default.vtype) do @@ -99,7 +107,7 @@ end dom = NGCPDomainPrefs:new(t.config), usr = NGCPUserPrefs:new(t.config), peer = NGCPPeerPrefs:new(t.config), - real = NGCPRealPrefs:new(), + real = NGCPRealPrefs:new(t.config), } return t end diff --git a/ngcp/pp.lua b/ngcp/pp.lua index 3fbe92a..0cbbe46 100644 --- a/ngcp/pp.lua +++ b/ngcp/pp.lua @@ -43,41 +43,50 @@ NGCPPeerPrefs_MT.__tostring = function () end end - function NGCPPeerPrefs:_get_defaults(level) + function NGCPPeerPrefs:_defaults(level) local defaults = self.config:get_defaults('peer') local keys = {} local k,_ if defaults then - self:xavp(level, defaults) - for k,_ in pairs(defaults) do + for k,v in pairs(defaults) do table.insert(keys, k) end end - return keys + return keys, defaults end function NGCPPeerPrefs:_load(level, uuid) local con = assert (self.config:getDBConnection()) local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid = '" .. uuid .. "'" local cur = assert (con:execute(query)) - local keys = self:_get_defaults(level) + local defaults + local keys local result = {} local row = cur:fetch({}, "a") + local k,v + local xavp + + keys, defaults = self:_defaults(level) if row then while row do --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) table.insert(result, row) table.add(keys, row.attribute) + defaults[row.attribute] = nil row = cur:fetch({}, "a") end else sr.log("dbg", string.format("no results for query:%s", query)) end - self:xavp(level, result) cur:close() con:close() + + xavp = self:xavp(level, result) + for k,v in pairs(defaults) do + xavp(k, v) + end return keys end diff --git a/ngcp/up.lua b/ngcp/up.lua index cb60267..561941e 100644 --- a/ngcp/up.lua +++ b/ngcp/up.lua @@ -41,41 +41,50 @@ NGCPUserPrefs_MT.__tostring = function () return NGCPUserPrefs._load(self,"callee",uuid) end - function NGCPUserPrefs:_get_defaults(level) + function NGCPUserPrefs:_defaults(level) local defaults = self.config:get_defaults('usr') local keys = {} local k,_ if defaults then - self:xavp(level, defaults) - for k,_ in pairs(defaults) do + for k,v in pairs(defaults) do table.insert(keys, k) end end - return keys + return keys, defaults end function NGCPUserPrefs:_load(level, uuid) local con = assert (self.config:getDBConnection()) local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid ='" .. uuid .. "'" local cur = assert (con:execute(query)) - local keys = self:_get_defaults(level) + local defaults + local keys local result = {} local row = cur:fetch({}, "a") + local k,v + local xavp + + keys, defaults = self:_defaults(level) if row then while row do --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) table.insert(result, row) table.add(keys, row.attribute) + defaults[row.attribute] = nil row = cur:fetch({}, "a") end else sr.log("dbg", string.format("no results for query:%s", query)) end - self:xavp(level,result) cur:close() con:close() + + xavp = self:xavp(level, result) + for k,v in pairs(defaults) do + xavp(k, v) + end return keys end diff --git a/tests/ngcp.lua b/tests/ngcp.lua index acecfe8..e746ea8 100644 --- a/tests/ngcp.lua +++ b/tests/ngcp.lua @@ -53,22 +53,17 @@ TestNGCP = {} --class function TestNGCP:test_config() assertTrue(self.ngcp.config) - assertEquals(self.ngcp.config.default.all.sst_enable, "yes") end function TestNGCP:test_config_get_defaults_all() local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'peer') - assertItemsEquals(defaults, self.ngcp.config.default.all) + assertItemsEquals(defaults, self.ngcp.config.default.peer) end function TestNGCP:test_config_get_defaults_real() local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'usr') - local real_defaults = table.deepcopy(self.ngcp.config.default.all) - local k,v - for k,v in pairs(self.ngcp.config.default.real) do - real_defaults[k] = v - end - assertItemsEquals(defaults, real_defaults) + local usr_defaults = table.deepcopy(self.ngcp.config.default.usr) + assertItemsEquals(defaults, usr_defaults) end function TestNGCP:test_prefs_init() @@ -131,6 +126,31 @@ TestNGCP = {} --class assertEquals(sr.pv.get("$xavp(caller_real_prefs=>no_nat_sipping)"), "no") end + function TestNGCP:test_caller_usr_load_empty_usr() + local c = self.ngcp.config + env:connect(c.db_database, c.db_username, c.db_pass, c.db_host, c.db_port) ;mc :returns(self.con) + self.con:execute("SELECT * FROM dom_preferences WHERE domain ='192.168.51.56'") ;mc :returns(self.cur) + self.cur:fetch(mc.ANYARGS) ;mc :returns(self.dp_vars:val("d_192_168_51_56")) + self.cur:fetch(mc.ANYARGS) ;mc :returns(self.dp_vars:val("d_192_168_51_56")) + self.cur:fetch(mc.ANYARGS) ;mc :returns(nil) + self.cur:close() + self.con:close() + + mc:replay() + local keys = self.ngcp:caller_usr_load(nil, "192.168.51.56") + mc:verify() + + assertEquals(sr.pv.get("$xavp(caller_dom_prefs=>dummy)"), "caller") + assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>dummy)"), "caller") + --- the default is on real and dom NOT in usr + assertIsNil(sr.pv.get("$xavp(caller_usr_prefs=>sst_enable)")) + assertEquals(sr.pv.get("$xavp(caller_dom_prefs=>sst_enable)"), "no") + assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_enable)"), "no") + assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") + assertIsNil(sr.pv.get("$xavp(caller_real_prefs=>force_outbound_calls_to_peer)")) + assertIsNil(sr.pv.get("$xavp(caller_dom_prefs=>force_outbound_calls_to_peer)")) + end + function TestNGCP:test_caller_usr_load() local c = self.ngcp.config env:connect(c.db_database, c.db_username, c.db_pass, c.db_host, c.db_port) ;mc :returns(self.con) @@ -157,6 +177,8 @@ TestNGCP = {} --class mc:verify() assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>dummy)"), "caller") + --- the default is on real NOT in usr + assertIsNil(sr.pv.get("$xavp(caller_usr_prefs=>sst_enable)")) assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_enable)"), "no") assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>force_outbound_calls_to_peer)"), 1) @@ -192,6 +214,9 @@ TestNGCP = {} --class mc:verify() assertEquals(sr.pv.get("$xavp(callee_usr_prefs=>dummy)"), "callee") + assertEquals(sr.pv.get("$xavp(callee_dom_prefs=>sst_enable)"), "no") + --- the default is on real NOT in usr + assertIsNil(sr.pv.get("$xavp(callee_usr_prefs=>sst_enable)")) assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_enable)"), "no") assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") end diff --git a/tests/ngcp_pp.lua b/tests/ngcp_pp.lua index 70c12db..ccecf41 100644 --- a/tests/ngcp_pp.lua +++ b/tests/ngcp_pp.lua @@ -56,13 +56,14 @@ TestNGCPPeerPrefs = {} --class assertEquals(self.d.db_table, "peer_preferences") end - function TestNGCPPeerPrefs:get_defaults() + function TestNGCPPeerPrefs:get_defaults(level) local keys_expected = {"sst_enable", "sst_refresh_method"} - local defaults = NGCPConfig.get_defaults(self.d.config, 'peer') - local k,_ + local defaults = self.d.config:get_defaults('peer') + local k,v - for k,_ in pairs(defaults) do + for k,v in pairs(defaults) do table.add(keys_expected, k) + assertEquals(sr.pv.get("$xavp("..level.."_peer_prefs=>"..k..")"), v) end return keys_expected end @@ -93,7 +94,7 @@ TestNGCPPeerPrefs = {} --class assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>dummy)"), "caller") assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_enable)"),"no") assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") - assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults()) + assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults("caller")) end function TestNGCPPeerPrefs:test_callee_load() @@ -112,7 +113,7 @@ TestNGCPPeerPrefs = {} --class assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>dummy)"), "callee") assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_enable)"),"no") assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") - assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults()) + assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults("callee")) end function TestNGCPPeerPrefs:test_clean()