[asterisk-commits] file: trunk r51215 - in /trunk: CHANGES apps/app_page.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Jan 17 22:24:09 MST 2007


Author: file
Date: Wed Jan 17 23:24:08 2007
New Revision: 51215

URL: http://svn.digium.com/view/asterisk?view=rev&rev=51215
Log:
Add 's' option to Page application which checks devicestate before dialing. (issue #8673 reported by sunder)

Modified:
    trunk/CHANGES
    trunk/apps/app_page.c

Modified: trunk/CHANGES
URL: http://svn.digium.com/view/asterisk/trunk/CHANGES?view=diff&rev=51215&r1=51214&r2=51215
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Wed Jan 17 23:24:08 2007
@@ -63,6 +63,7 @@
   * Added the trunkmaxsize configuration option to chan_iax2.
   * Added G729 passthrough support to chan_phone for Sigma Designs boards.
   * Added the parkedcalltransfers option to features.conf
+  * Added 's' option to Page application.
 
 SIP changes
 -----------

Modified: trunk/apps/app_page.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_page.c?view=diff&rev=51215&r1=51214&r2=51215
==============================================================================
--- trunk/apps/app_page.c (original)
+++ trunk/apps/app_page.c Wed Jan 17 23:24:08 2007
@@ -48,6 +48,7 @@
 #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 @@
 "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 @@
 		(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)) {



More information about the asterisk-commits mailing list