diff --git a/engine/aliases.go b/engine/aliases.go index 9286aefcb..34dd1f574 100644 --- a/engine/aliases.go +++ b/engine/aliases.go @@ -19,6 +19,7 @@ along with this program. If not, see package engine import ( + "fmt" "reflect" "sort" "strings" @@ -407,30 +408,43 @@ func LoadAlias(attr *AttrMatchingAlias, in interface{}, extraFields string) erro rightPairs = values[0].Pairs } + if rightPairs == nil { // attempt to match on *any destination, so we don't longer look for prefixes + for _, value := range values { + if value.DestinationId == utils.ANY { + rightPairs = value.Pairs + break + } + } + } + if rightPairs == nil { // check destination ids for _, p := range utils.SplitPrefix(attr.Destination, MIN_PREFIX_MATCH) { - if destIDs, err := dm.DataDB().GetReverseDestination(p, false, utils.NonTransactional); err == nil { - for _, value := range values { - for _, dId := range destIDs { - if value.DestinationId == utils.ANY || value.DestinationId == dId { - rightPairs = value.Pairs - } - if rightPairs != nil { - break - } + destIDs, err := dm.DataDB().GetReverseDestination(p, false, utils.NonTransactional) + if err != nil { + if err.Error() != utils.ErrNotFound.Error() { // no reverse found + return err + } + continue + } + for _, value := range values { + for _, dId := range destIDs { + if value.DestinationId == dId { + rightPairs = value.Pairs } if rightPairs != nil { break } } + if rightPairs != nil { + break + } } if rightPairs != nil { break } } } - if rightPairs != nil { // change values in the given object v := reflect.ValueOf(in)