summaryrefslogtreecommitdiff
path: root/apps/app_page.c
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2007-01-18 05:24:08 +0000
committerJoshua Colp <jcolp@digium.com>2007-01-18 05:24:08 +0000
commitdd23f68d189773d91bc72b83a36f509b18683e46 (patch)
tree7ef1b3d5d23e7a24e2586a435a8fa600d2d887d7 /apps/app_page.c
parent180eb47bcb8313e9835fbb5ec44007011b1f5ecc (diff)
Add 's' option to Page application which checks devicestate before dialing. (issue #8673 reported by sunder)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@51215 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_page.c')
-rw-r--r--apps/app_page.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/apps/app_page.c b/apps/app_page.c
index dd4c9f2aa..dc6e450dd 100644
--- a/apps/app_page.c
+++ b/apps/app_page.c
@@ -48,6 +48,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/app.h"
#include "asterisk/chanvars.h"
#include "asterisk/utils.h"
+#include "asterisk/devicestate.h"
static const char *app_page= "Page";
@@ -61,19 +62,21 @@ static const char *page_descrip =
"destroyed when the original caller leaves. Valid options are:\n"
" d - full duplex audio\n"
" q - quiet, do not play beep to caller\n"
-" r - record the page into a file (see 'r' for app_meetme)\n";
-
+" r - record the page into a file (see 'r' for app_meetme)\n"
+" s - only dial channel if devicestate says it is not in use\n";
enum {
PAGE_DUPLEX = (1 << 0),
PAGE_QUIET = (1 << 1),
PAGE_RECORD = (1 << 2),
+ PAGE_SKIP = (1 << 3),
} page_opt_flags;
AST_APP_OPTIONS(page_opts, {
AST_APP_OPTION('d', PAGE_DUPLEX),
AST_APP_OPTION('q', PAGE_QUIET),
AST_APP_OPTION('r', PAGE_RECORD),
+ AST_APP_OPTION('s', PAGE_SKIP),
});
struct calloutdata {
@@ -187,16 +190,25 @@ static int page_exec(struct ast_channel *chan, void *data)
(ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") );
while ((tech = strsep(&tmp, "&"))) {
+ int state = 0;
+
/* don't call the originating device */
if (!strcasecmp(tech, originator))
continue;
- if ((resource = strchr(tech, '/'))) {
- *resource++ = '\0';
- launch_page(chan, meetmeopts, tech, resource);
- } else {
+ if (!(resource = strchr(tech, '/'))) {
ast_log(LOG_WARNING, "Incomplete destination '%s' supplied.\n", tech);
+ continue;
}
+
+ /* Ensure device is not in use if skip option is enabled */
+ if (ast_test_flag(&flags, PAGE_SKIP) && (state = ast_device_state(tech)) != AST_DEVICE_NOT_INUSE) {
+ ast_log(LOG_WARNING, "Destination '%s' has device state '%s'.\n", tech, devstate2str(state));
+ continue;
+ }
+
+ *resource++ = '\0';
+ launch_page(chan, meetmeopts, tech, resource);
}
if (!ast_test_flag(&flags, PAGE_QUIET)) {