From e5c05ff192c4bf2cda0b8c3087ee4e46c83acd66 Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 6 Apr 2016 10:59:05 +0200 Subject: [PATCH] Diameter - pass empty AVP as ^$ in filter --- agents/libdmt.go | 5 +++++ agents/libdmt_test.go | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/agents/libdmt.go b/agents/libdmt.go index f3ee75dee..3467b980c 100644 --- a/agents/libdmt.go +++ b/agents/libdmt.go @@ -287,6 +287,11 @@ func passesFieldFilter(m *diam.Message, fieldFilter *utils.RSRField, processorVa if err != nil { return false, 0 } + if len(avps) == 0 { // No AVP found in request, treat it same as empty + if fieldFilter.FilterPasses("") { + return true, -1 + } + } for avpIdx, avpVal := range avps { // First match wins due to index if fieldFilter.FilterPasses(avpValAsString(avpVal)) { return true, avpIdx diff --git a/agents/libdmt_test.go b/agents/libdmt_test.go index 5bb1d7c01..fcddb1ce1 100644 --- a/agents/libdmt_test.go +++ b/agents/libdmt_test.go @@ -473,3 +473,10 @@ func TestCCRAsSMGenericEvent(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", eSMGEv, rSMGEv) } } + +func TestPassesFieldFilter(t *testing.T) { + m := diam.NewRequest(diam.CreditControl, 4, nil) // Multiple-Services-Credit-Control>Rating-Group + if pass, _ := passesFieldFilter(m, utils.ParseRSRFieldsMustCompile("Multiple-Services-Credit-Control>Rating-Group(^$)", utils.INFIELD_SEP)[0], nil); !pass { + t.Error("Does not pass") + } +}