diff --git a/ngcp/avp.lua b/ngcp/avp.lua index bd77806..f6fd5f5 100644 --- a/ngcp/avp.lua +++ b/ngcp/avp.lua @@ -60,6 +60,17 @@ local NGCPAvp_MT = { sr.log(level, tostring(self)) end + function NGCPAvp:del(value) + local values = self.all() + if not values or not value then return end + sr.pv.unset(self.id) + for i = #values, 1, -1 do + if values[i] ~= value then + self(values[i]) + end + end + end + function NGCPAvp:clean() sr.pv.unset(self.id) end diff --git a/tests/ngcp_avp.lua b/tests/ngcp_avp.lua index ebda0d4..5bb0fd1 100644 --- a/tests/ngcp_avp.lua +++ b/tests/ngcp_avp.lua @@ -75,6 +75,28 @@ TestNGCPAvp = {} --class assertItemsEquals(self.avp:all(), okvals) end + function TestNGCPAvp:test_avp_del() + local vals = {1,2, {"3", 4}} + local okvals = {4, "3", 2, 1} + + for i=1,#vals do + self.avp(vals[i]) + end + assertItemsEquals(self.avp:all(), okvals) + self.avp:del(1) + assertItemsEquals(self.avp:all(), {4, "3", 2}) + self.avp:del(4) + assertItemsEquals(self.avp:all(), {"3", 2}) + self.avp:del(1) + assertItemsEquals(self.avp:all(), {"3", 2}) + self.avp:del("3") + assertItemsEquals(self.avp:all(), {2}) + self.avp:del(2) + assertNil(self.avp:all()) + self.avp:del(nil) + assertNil(self.avp:all()) + end + function TestNGCPAvp:test_clean() self.avp(1) self.avp:clean()