Properly handle *concatenated type, fixes #1268

This commit is contained in:
DanB
2018-11-06 20:28:52 +01:00
parent 57ff13bcd2
commit a73d19f101
2 changed files with 18 additions and 3 deletions

View File

@@ -121,14 +121,29 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) (
}
var valSet []*config.NMItem
fldPath := strings.Split(tplFld.FieldId, utils.NestingSep)
nMItm := &config.NMItem{Data: out, Path: fldPath, Config: tplFld}
if nMFields, err := nM.FieldAsInterface(fldPath); err != nil {
if err != utils.ErrNotFound {
return nil, err
}
} else {
valSet = nMFields.([]*config.NMItem) // start from previous stored fields
if tplFld.Type == utils.META_COMPOSED {
prevNMItem := valSet[len(valSet)-1]
prevDataStr, err := utils.IfaceAsString(prevNMItem.Data)
if err != nil {
return nil, err
}
outStr, err := utils.IfaceAsString(out)
if err != nil {
return nil, err
}
*nMItm = *prevNMItem // inherit the particularities, ie AttributeName
nMItm.Data = prevDataStr + outStr
valSet = valSet[:len(valSet)-1] // discard the last item
}
}
valSet = append(valSet, &config.NMItem{Data: out, Path: fldPath, Config: tplFld})
valSet = append(valSet, nMItm)
nM.Set(fldPath, valSet, true)
if tplFld.Blocker { // useful in case of processing errors first
break

View File

@@ -21,9 +21,9 @@
"reply_fields":[
{"tag": "Allow", "field_id": "response.Allow", "type": "*constant",
"value": "1", "mandatory": true},
{"tag": "Concatenated1", "field_id": "Concatenated", "type": "*composed",
{"tag": "Concatenated1", "field_id": "response.Concatenated", "type": "*composed",
"value": "~*req.MCC;/", "mandatory": true},
{"tag": "Concatenated2", "field_id": "Concatenated", "type": "*composed",
{"tag": "Concatenated2", "field_id": "response.Concatenated", "type": "*composed",
"value": "Val1"},
{"tag": "MaxDuration", "field_id": "response.MaxDuration", "type": "*constant",
"value": "1200", "blocker": true},