diff --git a/main/pbx.c b/main/pbx.c index 9b3b629342..359d2b0c98 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -868,8 +868,10 @@ static void log_match_char_tree(struct match_char *node, char *prefix) static void cli_match_char_tree(struct match_char *node, char *prefix, int fd) { char my_prefix[1024]; - - ast_cli(fd, "%s%s:%c:%d:%s%s\n", prefix, node->x, node->is_pattern ? 'Y':'N', node->specificity, node->exten? "EXTEN:":"", node->exten ? node->exten->exten : ""); + if (strlen(node->x) > 1 ) + ast_cli(fd, "%s[%s]:%c:%d:%s%s\n", prefix, node->x, node->is_pattern ? 'Y':'N', node->specificity, node->exten? "EXTEN:":"", node->exten ? node->exten->exten : ""); + else + ast_cli(fd, "%s%s:%c:%d:%s%s\n", prefix, node->x, node->is_pattern ? 'Y':'N', node->specificity, node->exten? "EXTEN:":"", node->exten ? node->exten->exten : ""); strcpy(my_prefix,prefix); strcat(my_prefix,"+ "); if (node->next_char) @@ -1084,6 +1086,7 @@ struct match_char *add_exten_to_pattern_tree(struct ast_context *con, struct ast if (pattern && *s1 == '[' && *(s1-1) != '\\') { char *s2 = buf; buf[0] = 0; + s1++; /* get past the '[' */ while (*s1 != ']' && *(s1-1) != '\\' ) { if (*s1 == '\\') { if (*(s1+1) == ']') { @@ -1110,6 +1113,7 @@ struct match_char *add_exten_to_pattern_tree(struct ast_context *con, struct ast *s2++ = *s1++; } } + *s2 = 0; /* null terminate the exploded range */ specif = strlen(buf); } else { if (*s1 == '\\') { diff --git a/res/res_features.c b/res/res_features.c index 5e1d3523fe..34c5661c01 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -2104,8 +2104,15 @@ static void *do_parking_thread(void *ignore) } if (con) { char returnexten[AST_MAX_EXTENSION]; + char peername_flat[AST_MAX_EXTENSION]; /* using something like Zap/52 for an extension name is NOT a good idea */ + int i; + ast_copy_string(peername_flat,peername,sizeof(peername_flat)); + for(i=0; peername_flat[i] && i < AST_MAX_EXTENSION; i++) { + if (peername_flat[i] == '/') + peername_flat[i]= '0'; + } snprintf(returnexten, sizeof(returnexten), "%s,,t", peername); - ast_add_extension2(con, 1, peername, 1, NULL, NULL, "Dial", ast_strdup(returnexten), ast_free_ptr, registrar); + ast_add_extension2(con, 1, peername_flat, 1, NULL, NULL, "Dial", ast_strdup(returnexten), ast_free_ptr, registrar); } if (comebacktoorigin) { set_c_e_p(chan, parking_con_dial, peername, 1);