From 4d0e046a068edce8f898d17f713d3865e9d8f8dd Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Sat, 25 Oct 2003 17:50:06 +0000 Subject: [PATCH] Verify includes, and give warnings if invalid (bug #429) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1667 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/pbx.h | 7 +++++++ pbx.c | 14 ++++++++++++++ pbx/pbx_config.c | 4 ++++ 3 files changed, 25 insertions(+) diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index 23366d2eba..9beb5667a5 100755 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -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 98c7392ede..98e1ade6ad 100755 --- 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; +} diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index 29a2039df9..c09677a020 100755 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -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; }