diff --git a/ngcp/xavp.lua b/ngcp/xavp.lua index b761b8a..a2e4edd 100644 --- a/ngcp/xavp.lua +++ b/ngcp/xavp.lua @@ -141,9 +141,14 @@ NGCPXAvp_MT = { end end - function NGCPXAvp:clean() - sr.pv.unset(string.format("$xavp(%s)", self.name)) - sr.pv.sets(string.format("$xavp(%s=>dummy)", self.name), self.level) + function NGCPXAvp:clean(key) + if key then + local id = string.format("$xavp(%s[0]=>%s)", self.name, key) + sr.pv.unset(id) + else + sr.pv.unset(string.format("$xavp(%s)", self.name)) + sr.pv.sets(string.format("$xavp(%s=>dummy)", self.name), self.level) + end end -- class --EOF \ No newline at end of file diff --git a/tests/ngcp_xavp.lua b/tests/ngcp_xavp.lua index 4a0caf6..957336a 100644 --- a/tests/ngcp_xavp.lua +++ b/tests/ngcp_xavp.lua @@ -119,6 +119,20 @@ TestNGCPXAvp = {} --class assertEquals(sr.pv.get("$xavp(caller_peer=>dummy)"), "caller") end + function TestNGCPXAvp:test_clean_key() + local xavp = NGCPXAvp:new("caller", "peer", vals) + local vals = {1,"2",3,nil} + for i=1,#vals do + xavp("testid",vals[i]) + assertEquals(xavp("testid"), vals[i]) + assertEquals(sr.pv.get("$xavp(caller_peer=>testid)"),vals[i]) + end + xavp("other", 1) + xavp:clean("testid") + assertIsNil(xavp("testid")) + assertEquals(sr.pv.get("$xavp(caller_peer=>other)"),1) + end + function TestNGCPXAvp:test_tostring() local xavp = NGCPXAvp:new("caller", "peer", {}) assertEquals(tostring(xavp), '{dummy="caller"}')