[Asterisk-cvs] asterisk/apps app_hasnewvoicemail.c,1.22,1.23

russell russell
Sun Nov 6 14:45:13 CST 2005


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv4375/apps

Modified Files:
	app_hasnewvoicemail.c 
Log Message:
issue #5625


Index: app_hasnewvoicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_hasnewvoicemail.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- app_hasnewvoicemail.c	6 Nov 2005 15:09:46 -0000	1.22
+++ app_hasnewvoicemail.c	6 Nov 2005 19:36:27 -0000	1.23
@@ -44,23 +44,33 @@
 #include "asterisk/module.h"
 #include "asterisk/lock.h"
 #include "asterisk/utils.h"
+#include "asterisk/app.h"
+#include "asterisk/options.h"
 
 static char *tdesc = "Indicator for whether a voice mailbox has messages in a given folder.";
 static char *app_hasvoicemail = "HasVoicemail";
-static char *hasvoicemail_synopsis = "Conditionally branches to priority + 101";
+static char *hasvoicemail_synopsis = "Conditionally branches to priority + 101 with the right options set";
 static char *hasvoicemail_descrip =
-"HasVoicemail(vmbox[/folder][@context][|varname])\n"
-"  Branches to priority + 101, if there is voicemail in folder indicated."
+"HasVoicemail(vmbox[/folder][@context][|varname[|options]])\n"
 "  Optionally sets <varname> to the number of messages in that folder."
-"  Assumes folder of INBOX if not specified.\n";
+"  Assumes folder of INBOX if not specified.\n"
+"  The option string may contain zero or the following character:\n"
+"	'j' -- jump to priority n+101, if there is voicemail in the folder indicated.\n"
+"  This application sets the following channel variable upon completion:\n"
+"	HASVMSTATUS		The result of the voicemail check returned as a text string as follows\n"
+"		<# of messages in the folder, 0 for NONE>\n";
 
 static char *app_hasnewvoicemail = "HasNewVoicemail";
-static char *hasnewvoicemail_synopsis = "Conditionally branches to priority + 101";
+static char *hasnewvoicemail_synopsis = "Conditionally branches to priority + 101 with the right options set";
 static char *hasnewvoicemail_descrip =
-"HasNewVoicemail(vmbox[/folder][@context][|varname])\n"
-"  Branches to priority + 101, if there is voicemail in folder 'folder' or INBOX.\n"
-"if folder is not specified. Optionally sets <varname> to the number of messages\n" 
-"in that folder.\n";
+"HasNewVoicemail(vmbox[/folder][@context][|varname[|options]])\n"
+"Assumes folder 'INBOX' if folder is not specified. Optionally sets <varname> to the number of messages\n" 
+"in that folder.\n"
+"  The option string may contain zero of the following character:\n"
+"	'j' -- jump to priority n+101, if there is new voicemail in tolder 'folder' or INBOX\n"
+"  This application sets the following channel variable upon completion:\n"
+"	HASVMSTATUS		The result of the new voicemail check returned as a text string as follows\n"
+"		<# of messages in the folder, 0 for NONE>\n";
 
 STANDARD_LOCAL_USER;
 
@@ -90,10 +100,17 @@
 static int hasvoicemail_exec(struct ast_channel *chan, void *data)
 {
 	struct localuser *u;
-	char *temps, *input, *varname = NULL, *vmbox, *context = "default";
+	char *input, *varname = NULL, *vmbox, *context = "default";
 	char *vmfolder;
 	int vmcount = 0;
 	static int dep_warning = 0;
+	int priority_jump = 0;
+	char tmp[12];
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(vmbox);
+		AST_APP_ARG(varname);
+		AST_APP_ARG(options);
+	);
 
 	if (!dep_warning) {
 		ast_log(LOG_WARNING, "The applications HasVoicemail and HasNewVoicemail have been deprecated.  Please use the VMCOUNT() function instead.\n");
@@ -101,7 +118,7 @@
 	}
 	
 	if (!data) {
-		ast_log(LOG_WARNING, "HasVoicemail requires an argument (vm-box[/folder][@context]|varname)\n");
+		ast_log(LOG_WARNING, "HasVoicemail requires an argument (vm-box[/folder][@context][|varname[|options]])\n");
 		return -1;
 	}
 
@@ -114,18 +131,13 @@
 		return -1;
 	}
 
-	temps = input;
-	if ((temps = strsep(&input, "|"))) {
-		if (!ast_strlen_zero(input))
-			varname = input;
-		input = temps;
-	}
+	AST_STANDARD_APP_ARGS(args, input);
 
-	if ((vmbox = strsep(&input, "@")))
-		if (!ast_strlen_zero(input))
-			context = input;
+	if ((vmbox = strsep(&args.vmbox, "@")))
+		if (!ast_strlen_zero(args.vmbox))
+			context = args.vmbox;
 	if (!vmbox)
-		vmbox = input;
+		vmbox = args.vmbox;
 
 	vmfolder = strchr(vmbox, '/');
 	if (vmfolder) {
@@ -135,21 +147,31 @@
 		vmfolder = "INBOX";
 	}
 
+	if (args.options) {
+		if (strchr(args.options, 'j'))
+			priority_jump = 1;
+	}
+
 	vmcount = hasvoicemail_internal(context, vmbox, vmfolder);
 	/* Set the count in the channel variable */
 	if (varname) {
-		char tmp[12];
 		snprintf(tmp, sizeof(tmp), "%d", vmcount);
 		pbx_builtin_setvar_helper(chan, varname, tmp);
 	}
 
 	if (vmcount > 0) {
 		/* Branch to the next extension */
-		if (!ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) 
-			ast_log(LOG_WARNING, "VM box %s@%s has new voicemail, but extension %s, priority %d doesn't exist\n", vmbox, context, chan->exten, chan->priority + 101);
+		if (priority_jump || option_priority_jumping) {
+			if (!ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) 
+				ast_log(LOG_WARNING, "VM box %s@%s has new voicemail, but extension %s, priority %d doesn't exist\n", vmbox, context, chan->exten, chan->priority + 101);
+		}
 	}
 
+	snprintf(tmp, sizeof(tmp), "%d", vmcount);
+	pbx_builtin_setvar_helper(chan, "HASVMSTATUS", tmp);
+	
 	LOCAL_USER_REMOVE(u);
+
 	return 0;
 }
 




More information about the svn-commits mailing list