diff --git a/ngcp/ngcp.lua b/ngcp/ngcp.lua index dd3512a..2758d04 100644 --- a/ngcp/ngcp.lua +++ b/ngcp/ngcp.lua @@ -26,6 +26,10 @@ NGCPConfig_MT = { __index = NGCPConfig } sst_max_timer = 7200, sst_refresh_method = "UPDATE_FALLBACK_INVITE", outbound_from_user = "npn", + inbound_upn = "from_user", + inbound_npn = "from_user", + inbound_uprn = "from_user", + ip_header = "P-NGCP-Src-Ip", } } setmetatable( t, NGCPConfig_MT ) @@ -88,6 +92,31 @@ NGCP_MT = { __index = NGCP } {"rewrite_caller_in_dpid"}, {"rewrite_callee_in_dpid"} } + }, + callee_peer_load = { + callee_peer_prefs = { + {"peer_peer_callee_auth_user", "peer_auth_user"}, + {"peer_peer_callee_auth_pass", "peer_auth_pass"}, + {"peer_peer_callee_auth_realm", "peer_auth_realm"}, + {"caller_use_rtpproxy", "use_rtpproxy"}, + {"caller_force_outbound_calls_to_peer", "force_outbound_calls_to_peer"}, + {"peer_caller_find_subscriber_by_uuid", "find_subscriber_by_uuid"}, + {"caller_inbound_upn", "inbound_upn"}, + {"caller_inbound_npn", "inbound_npn"}, + {"caller_inbound_uprn", "inbound_uprn"}, + {"pstn_dp_caller_in_id", "rewrite_caller_in_dpid"}, + {"pstn_dp_callee_in_id", "rewrite_callee_in_dpid"}, + {"rewrite_caller_out_dpid"}, + {"rewrite_callee_out_dpid"}, + {"peer_caller_ipv46_for_rtpproxy","ipv46_for_rtpproxy"}, + {"caller_ip_header","ip_header"}, + {"caller_peer_concurrent_max", "concurrent_max"}, + {"peer_caller_sst_enable", "sst_enable"}, + {"peer_caller_sst_expires", "sst_expires"}, + {"peer_caller_sst_min_timer", "sst_min_timer"}, + {"peer_caller_sst_max_timer", "sst_max_timer"}, + {"peer_caller_sst_refresh_method", "sst_refresh_method"} + } } } return t @@ -98,7 +127,7 @@ NGCP_MT = { __index = NGCP } local keys = self.prefs.peer:caller_load(peer) local vars = self.vars.caller_peer_load - self.prefs.real:caller_usr_load(keys) + self.prefs.real:caller_peer_load(keys) for _,v in pairs(vars.caller_peer_prefs) do default = self.config.default[v[2]] if v[2] then @@ -112,8 +141,21 @@ NGCP_MT = { __index = NGCP } end function NGCP:callee_peer_load(peer) + local _,v, default, xvap local keys = self.prefs.peer:callee_load(peer) + local vars = self.vars.callee_peer_load + self.prefs.real:callee_peer_load(keys) + for _,v in pairs(vars.callee_peer_prefs) do + default = self.config.default[v[2]] + if v[2] then + xavp = "callee_peer_prefs=>" .. v[2] + else + xavp = nil + end + NGCPPrefs.set_avp(v[1], xavp, default) + end + return keys end diff --git a/tests/ngcp.lua b/tests/ngcp.lua index 4129e81..77a5a4f 100644 --- a/tests/ngcp.lua +++ b/tests/ngcp.lua @@ -117,6 +117,27 @@ TestNGCP = {} --class assertEquals(self.ngcp:callee_peer_load(), {}) end + function TestNGCP:test_callee_peer_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) + self.con:execute(mc.ANYARGS) ;mc :returns(self.cur) + self.cur:fetch(mc.ANYARGS) ;mc :returns(self.pp_vars:val("p_2")) --sst_enable: "no" + self.cur:fetch(mc.ANYARGS) ;mc :returns(self.pp_vars:val("p_2")) --sst_refresh_method: "UPDATE_FALLBACK_INVITE" + self.cur:fetch(mc.ANYARGS) ;mc :returns(nil) + self.cur:close() + self.con:close() + + mc:replay() + local keys = self.ngcp:callee_peer_load("2") + mc:verify() + + 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("$avp(peer_caller_sst_enable)"), "no") + assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") + assertEquals(sr.pv.get("$avp(peer_caller_sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") + end + function TestNGCP:test_clean() local xavp = NGCPXAvp:new('callee','usr_prefs') xavp("testid",1) @@ -303,5 +324,45 @@ TestNGCP = {} --class assertEquals(sr.pv.get("$avp(s:concurrent_max_out_per_account)"), nil) end + function TestNGCP:test_callee_peer_clean_vars() + self:test_callee_peer_load() + + assertEquals(sr.pv.get("$avp(peer_caller_sst_enable)"), "no") + assertEquals(sr.pv.get("$avp(peer_caller_sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") + + self.ngcp:clean('callee', 'peer') + + assertEquals(sr.pv.get("$avp(s:peer_peer_callee_auth_user)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_peer_callee_auth_pass)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_peer_callee_auth_realm)"), nil) + + + assertEquals(sr.pv.get("$avp(s:caller_use_rtpproxy)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_ipv46_for_rtpproxy)"), nil) + + assertEquals(sr.pv.get("$avp(s:caller_force_outbound_calls_to_peer)"), nil) + + assertEquals(sr.pv.get("$avp(s:peer_caller_find_subscriber_by_uuid)"), nil) + + assertEquals(sr.pv.get("$avp(s:pstn_dp_caller_in_id)"), nil) + assertEquals(sr.pv.get("$avp(s:pstn_dp_callee_in_id)"), nil) + assertEquals(sr.pv.get("$avp(s:pstn_dp_caller_out_id)"), nil) + assertEquals(sr.pv.get("$avp(s:pstn_dp_callee_out_id)"), nil) + + assertEquals(sr.pv.get("$avp(s:caller_peer_concurrent_max)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_sst_enable)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_sst_expires)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_sst_min_timer)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_sst_max_timer)"), nil) + assertEquals(sr.pv.get("$avp(s:peer_caller_sst_refresh_method)"), nil) + + assertEquals(sr.pv.get("$avp(s:caller_inbound_upn)"), nil) + assertEquals(sr.pv.get("$avp(s:caller_inbound_npn)"), nil) + assertEquals(sr.pv.get("$avp(s:caller_inbound_uprn)"), nil) + + assertEquals(sr.pv.get("$avp(s:caller_ip_header)"), nil) + assertEquals(sr.pv.get("$avp(s:caller_ip_val)"), nil) + end + -- class TestNGCP --EOF \ No newline at end of file