Verify includes, and give warnings if invalid (bug #429)
authorMark Spencer <markster@digium.com>
Sat, 25 Oct 2003 17:50:06 +0000 (17:50 +0000)
committerMark Spencer <markster@digium.com>
Sat, 25 Oct 2003 17:50:06 +0000 (17:50 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1667 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index 23366d2..9beb566 100755 (executable)
@@ -376,6 +376,13 @@ int ast_context_remove_include(char *context, char *include, char *registrar);
  */
 int ast_context_remove_include2(struct ast_context *con, char *include, char *registrar);
 
+//! Verifies includes in an ast_contect structure
+/*!
+ * \param con context in which to verify the includes
+ * Returns 0 if no problems found, -1 if there were any missing context
+ */
+int ast_context_verify_includes(struct ast_context *con);
+         
 //! Add a switch
 /*!
  * \param context context to which to add the switch
diff --git a/pbx.c b/pbx.c
index 98c7392..98e1ade 100755 (executable)
--- a/pbx.c
+++ b/pbx.c
@@ -4644,3 +4644,17 @@ struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con,
        else
                return ip->next;
 }
+
+int ast_context_verify_includes(struct ast_context *con)
+{
+       struct ast_include *inc;
+       int res = 0;
+
+       for (inc = ast_walk_context_includes(con, NULL); inc; inc = ast_walk_context_includes(con, inc))
+               if (!ast_context_find(inc->rname)) {
+                       res = -1;
+                       ast_log(LOG_WARNING, "Context '%s' tries includes non-existant context '%s'\n",
+                                       ast_get_context_name(con), inc->rname);
+               }
+       return res;
+}
index 29a2039..c09677a 100755 (executable)
@@ -1653,6 +1653,10 @@ static int pbx_load_module(void)
                ast_destroy(cfg);
        }
        ast_merge_contexts_and_delete(&local_contexts,registrar);
+
+       for (con = ast_walk_contexts(NULL); con; con = ast_walk_contexts(con))
+               ast_context_verify_includes(con);
+
        return 0;
 }