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") + } +}