| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2006 Tilghman Lesher.  All rights reserved. | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  |  * Tilghman Lesher <asterisk-vmcount-func@the-tilghman.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * See http://www.asterisk.org for more information about
 | 
					
						
							|  |  |  |  * the Asterisk project. Please do not directly contact | 
					
						
							|  |  |  |  * any of the maintainers of this project for assistance; | 
					
						
							|  |  |  |  * the project provides a web site, mailing lists and IRC | 
					
						
							|  |  |  |  * channels for your use. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software, distributed under the terms of | 
					
						
							|  |  |  |  * the GNU General Public License Version 2. See the LICENSE file | 
					
						
							|  |  |  |  * at the top of the source tree. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! \file
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \brief VMCOUNT dialplan function | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \author Tilghman Lesher <asterisk-vmcount-func@the-tilghman.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \ingroup functions | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-14 20:28:54 +00:00
										 |  |  | /*** MODULEINFO
 | 
					
						
							|  |  |  | 	<support_level>core</support_level> | 
					
						
							|  |  |  |  ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | #include "asterisk.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <dirent.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "asterisk/file.h"
 | 
					
						
							|  |  |  | #include "asterisk/channel.h"
 | 
					
						
							|  |  |  | #include "asterisk/pbx.h"
 | 
					
						
							|  |  |  | #include "asterisk/module.h"
 | 
					
						
							|  |  |  | #include "asterisk/lock.h"
 | 
					
						
							|  |  |  | #include "asterisk/utils.h"
 | 
					
						
							|  |  |  | #include "asterisk/app.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | /*** DOCUMENTATION
 | 
					
						
							|  |  |  | 	<function name="VMCOUNT" language="en_US"> | 
					
						
							|  |  |  | 		<synopsis> | 
					
						
							| 
									
										
										
										
											2021-09-19 11:14:10 +00:00
										 |  |  | 			Count the voicemails in a specified mailbox or mailboxes. | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 		</synopsis> | 
					
						
							|  |  |  | 		<syntax> | 
					
						
							| 
									
										
										
										
											2021-09-19 11:14:10 +00:00
										 |  |  | 			<parameter name="vmbox" required="true" argsep="&"> | 
					
						
							|  |  |  | 				<para>A mailbox or list of mailboxes</para> | 
					
						
							|  |  |  | 			</parameter> | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 			<parameter name="folder" required="false"> | 
					
						
							|  |  |  | 				<para>If not specified, defaults to <literal>INBOX</literal></para> | 
					
						
							|  |  |  | 			</parameter> | 
					
						
							|  |  |  | 		</syntax> | 
					
						
							|  |  |  | 		<description> | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 			<para>Count the number of voicemails in a specified mailbox, you could also specify | 
					
						
							| 
									
										
										
										
											2013-12-19 16:52:43 +00:00
										 |  |  | 			the mailbox <replaceable>folder</replaceable>.</para> | 
					
						
							| 
									
										
										
										
											2022-06-01 01:43:52 +00:00
										 |  |  | 			<example title="Mailbox folder count"> | 
					
						
							|  |  |  | 			exten => s,1,Set(foo=${VMCOUNT(125@default)}) | 
					
						
							|  |  |  | 			</example> | 
					
						
							| 
									
										
										
										
											2021-09-19 11:14:10 +00:00
										 |  |  | 			<para>An ampersand-separated list of mailboxes may be specified to count voicemails in | 
					
						
							|  |  |  | 			multiple mailboxes. If a folder is specified, this will apply to all mailboxes specified.</para> | 
					
						
							|  |  |  |                         <example title="Multiple mailbox inbox count"> | 
					
						
							|  |  |  |                         same => n,NoOp(${VMCOUNT(1234@default&1235@default&1236@default,INBOX)}) | 
					
						
							|  |  |  |                         </example> | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 		</description> | 
					
						
							|  |  |  | 	</function> | 
					
						
							|  |  |  |  ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-01-06 00:13:33 +00:00
										 |  |  | static int acf_vmcount_exec(struct ast_channel *chan, const char *cmd, char *argsstr, char *buf, size_t len) | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-09-19 11:14:10 +00:00
										 |  |  | 	int total = 0; | 
					
						
							|  |  |  | 	char *mailbox = NULL; | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | 	AST_DECLARE_APP_ARGS(args, | 
					
						
							|  |  |  | 		AST_APP_ARG(vmbox); | 
					
						
							|  |  |  | 		AST_APP_ARG(folder); | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	buf[0] = '\0'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-16 15:15:53 +00:00
										 |  |  | 	if (ast_strlen_zero(argsstr)) | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | 	AST_STANDARD_APP_ARGS(args, argsstr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-19 16:52:43 +00:00
										 |  |  | 	if (ast_strlen_zero(args.vmbox)) { | 
					
						
							|  |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (ast_strlen_zero(args.folder)) { | 
					
						
							|  |  |  | 		args.folder = "INBOX"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-19 11:14:10 +00:00
										 |  |  | 	while ((mailbox = strsep(&args.vmbox, "&"))) { | 
					
						
							|  |  |  | 		int c; | 
					
						
							|  |  |  | 		if (ast_strlen_zero(mailbox)) { | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		c = ast_app_messagecount(mailbox, args.folder); | 
					
						
							|  |  |  | 		total += (c > 0 ? c : 0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	snprintf(buf, len, "%d", total); | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-15 17:34:30 +00:00
										 |  |  | static struct ast_custom_function acf_vmcount = { | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | 	.name = "VMCOUNT", | 
					
						
							|  |  |  | 	.read = acf_vmcount_exec, | 
					
						
							| 
									
										
										
										
											2009-04-29 18:53:01 +00:00
										 |  |  | 	.read_max = 12, | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int unload_module(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2007-07-16 13:35:20 +00:00
										 |  |  | 	return ast_custom_function_unregister(&acf_vmcount); | 
					
						
							| 
									
										
										
										
											2006-09-21 19:35:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int load_module(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return ast_custom_function_register(&acf_vmcount); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Indicator for whether a voice mailbox has messages in a given folder."); |