Index: pbx/pbx_dundi.c =================================================================== --- pbx/pbx_dundi.c (revision 178769) +++ pbx/pbx_dundi.c (working copy) @@ -468,13 +468,17 @@ char fluffy[0]; }; -static int get_mapping_weight(struct dundi_mapping *map) +static int get_mapping_weight(struct dundi_mapping *map, struct varshead *headp) { char buf[32]; buf[0] = 0; if (map->weightstr) { - pbx_substitute_variables_helper(NULL, map->weightstr, buf, sizeof(buf) - 1); + if (headp) { + pbx_substitute_variables_varshead(headp, map->weightstr, buf, sizeof(buf) - 1); + } else { + pbx_substitute_variables_helper(NULL, map->weightstr, buf, sizeof(buf) - 1); + } if (sscanf(buf, "%d", &map->_weight) != 1) map->_weight = MAX_WEIGHT; } @@ -510,7 +514,6 @@ ast_set_flag(&flags, map->options & 0xffff); ast_copy_flags(dr + anscnt, &flags, AST_FLAGS_ALL); dr[anscnt].techint = map->tech; - dr[anscnt].weight = get_mapping_weight(map); dr[anscnt].expiration = dundi_cache_time; ast_copy_string(dr[anscnt].tech, tech2str(map->tech), sizeof(dr[anscnt].tech)); dr[anscnt].eid = *us_eid; @@ -526,10 +529,13 @@ newvariable = ast_var_assign("IPADDR", ipaddr); AST_LIST_INSERT_HEAD(&headp, newvariable, entries); pbx_substitute_variables_varshead(&headp, map->dest, dr[anscnt].dest, sizeof(dr[anscnt].dest)); + dr[anscnt].weight = get_mapping_weight(map, &headp); while ((newvariable = AST_LIST_REMOVE_HEAD(&headp, entries))) ast_var_delete(newvariable); - } else + } else { dr[anscnt].dest[0] = '\0'; + dr[anscnt].weight = get_mapping_weight(map, NULL); + } anscnt++; } else { /* No answers... Find the fewest number of digits from the @@ -2807,7 +2813,7 @@ AST_LIST_LOCK(&peers); ast_cli(a->fd, FORMAT2, "DUNDi Cntxt", "Weight", "Local Cntxt", "Options", "Tech", "Destination"); AST_LIST_TRAVERSE(&mappings, map, list) { - snprintf(weight, sizeof(weight), "%d", get_mapping_weight(map)); + snprintf(weight, sizeof(weight), "%d", get_mapping_weight(map, NULL)); ast_cli(a->fd, FORMAT, map->dcontext, weight, ast_strlen_zero(map->lcontext) ? "" : map->lcontext, dundi_flags2str(fs, sizeof(fs), map->options), tech2str(map->tech), map->dest);