Save CID and switches in "save dialplan" command (bug #2279)
authorMark Spencer <markster@digium.com>
Sat, 21 Aug 2004 18:55:39 +0000 (18:55 +0000)
committerMark Spencer <markster@digium.com>
Sat, 21 Aug 2004 18:55:39 +0000 (18:55 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3630 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/pbx.h
pbx.c
pbx/pbx_config.c

index ba7507a..f127a0e 100755 (executable)
@@ -503,6 +503,8 @@ char *ast_get_switch_data(struct ast_sw *sw);
 
 /* Other extension stuff */
 int ast_get_extension_priority(struct ast_exten *exten);
+int ast_get_extension_matchcid(struct ast_exten *e);
+char *ast_get_extension_cidmatch(struct ast_exten *e);
 char *ast_get_extension_app(struct ast_exten *e);
 void *ast_get_extension_app_data(struct ast_exten *e);
 
diff --git a/pbx.c b/pbx.c
index 83eb482..bedcabe 100755 (executable)
--- a/pbx.c
+++ b/pbx.c
@@ -4864,6 +4864,16 @@ char *ast_get_ignorepat_registrar(struct ast_ignorepat *ip)
        return ip ? ip->registrar : NULL;
 }
 
+int ast_get_extension_matchcid(struct ast_exten *e)
+{
+       return e ? e->matchcid : 0;
+}
+
+char *ast_get_extension_cidmatch(struct ast_exten *e)
+{
+       return e ? e->cidmatch : NULL;
+}
+
 char *ast_get_extension_app(struct ast_exten *e)
 {
        return e ? e->app : NULL;
index e82c497..39fd332 100755 (executable)
@@ -1016,6 +1016,7 @@ static int handle_save_dialplan(int fd, int argc, char *argv[])
                        struct ast_exten *e, *last_written_e = NULL;
                        struct ast_include *i;
                        struct ast_ignorepat *ip;
+                       struct ast_sw *sw;
 
                        /* registered by this module? */
                        if (!strcmp(ast_get_context_registrar(c), registrar)) {
@@ -1058,11 +1059,19 @@ static int handle_save_dialplan(int fd, int argc, char *argv[])
                                                                }
                                                                tempdata = startdata;
                                                        }
-                                                       fprintf(output, "exten => %s,%d,%s(%s)\n",
-                                                           ast_get_extension_name(p),
-                                                           ast_get_extension_priority(p),
-                                                           ast_get_extension_app(p),
-                                                           tempdata);
+                                                       if (ast_get_extension_matchcid(p))
+                                                               fprintf(output, "exten => %s/%s,%d,%s(%s)\n",
+                                                                   ast_get_extension_name(p),
+                                                                   ast_get_extension_cidmatch(p),
+                                                                   ast_get_extension_priority(p),
+                                                                   ast_get_extension_app(p),
+                                                                   tempdata);
+                                                       else
+                                                               fprintf(output, "exten => %s,%d,%s(%s)\n",
+                                                                   ast_get_extension_name(p),
+                                                                   ast_get_extension_priority(p),
+                                                                   ast_get_extension_app(p),
+                                                                   tempdata);
                                                        if (tempdata)
                                                                free(tempdata);
                                                } else
@@ -1097,6 +1106,24 @@ static int handle_save_dialplan(int fd, int argc, char *argv[])
                        if (ast_walk_context_includes(c, NULL))
                                fprintf(output, "\n");
 
+                       /* walk through switches */
+                       sw = ast_walk_context_switches(c, NULL);
+                       while (sw) {
+                               if (!strcmp(ast_get_switch_registrar(sw), registrar)) {
+                                       if (!context_header_written) {
+                                               fprintf(output, "[%s]\n", ast_get_context_name(c));
+                                               context_header_written = 1;
+                                       }
+                                       fprintf(output, "switch => %s/%s\n",
+                                               ast_get_switch_name(sw),
+                                               ast_get_switch_data(sw));
+                               }
+                               sw = ast_walk_context_switches(c, sw);
+                       }
+
+                       if (ast_walk_context_switches(c, NULL))
+                               fprintf(output, "\n");
+
                        /* fireout ignorepats ... */
                        ip = ast_walk_context_ignorepats(c, NULL);
                        while (ip) {