Add pathIdx for diameter in case of group items with the same path

This commit is contained in:
TeoV
2018-10-30 07:49:46 -04:00
committed by Dan Christian Bogos
parent 3f12b8470c
commit d7f736d25f

View File

@@ -21,6 +21,7 @@ package agents
import (
"fmt"
"reflect"
"strings"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
@@ -151,6 +152,7 @@ func (da *DiameterAgent) handleMessage(c diam.Conn, m *diam.Message) {
}
a := m.Answer(diam.Success)
// write reply into message
pathIdx := make(map[string]int) // group items for same path
for _, val := range rply.Values() {
nmItms, isNMItems := val.([]*config.NMItem)
if !isNMItems {
@@ -162,24 +164,33 @@ func (da *DiameterAgent) handleMessage(c diam.Conn, m *diam.Message) {
}
// find out the first itm which is not an attribute
var itm *config.NMItem
var itmStr string
for _, cfgItm := range nmItms {
if cfgItm.Config == nil || cfgItm.Config.AttributeID == "" {
itm = cfgItm
break
itmStr, err = utils.IfaceAsString(cfgItm.Data)
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> error: %s processing reply item: %s for message: %s",
utils.DiameterAgent, err.Error(), utils.ToJSON(cfgItm), m))
writeOnConn(c, m.Answer(diam.UnableToComply))
return
}
// uniquePath is path contatenated with data (must be something unique)
uniquePath := utils.ConcatenatedKey(strings.Join(cfgItm.Path, "."), itmStr)
if _, has := pathIdx[uniquePath]; !has {
pathIdx[uniquePath] += 1
itm = cfgItm
break
} else {
continue
}
}
}
if itm == nil {
continue // all attributes, not writable to diameter packet
}
itmStr, err := utils.IfaceAsString(itm.Data)
if err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> error: %s processing reply item: %s for message: %s",
utils.DiameterAgent, err.Error(), utils.ToJSON(itm), m))
writeOnConn(c, m.Answer(diam.UnableToComply))
return
}
var newBranch bool
if itm.Config != nil && itm.Config.NewBranch {
newBranch = true