[asterisk-commits] branch oej/sdpcleanup r29642 - in /team/oej/sdpcleanup: ./ apps/ build_tools/...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue May 23 04:18:23 MST 2006


Author: oej
Date: Tue May 23 06:18:22 2006
New Revision: 29642

URL: http://svn.digium.com/view/asterisk?rev=29642&view=rev
Log:
Reset automerge

Added:
    team/oej/sdpcleanup/cdr/cdr_radius.c
      - copied unchanged from r29364, trunk/cdr/cdr_radius.c
    team/oej/sdpcleanup/contrib/dictionary.digium
      - copied unchanged from r29364, trunk/contrib/dictionary.digium
    team/oej/sdpcleanup/doc/radius.txt
      - copied unchanged from r29364, trunk/doc/radius.txt
    team/oej/sdpcleanup/doc/video.txt
      - copied unchanged from r29364, trunk/doc/video.txt
Modified:
    team/oej/sdpcleanup/   (props changed)
    team/oej/sdpcleanup/.cleancount
    team/oej/sdpcleanup/CREDITS
    team/oej/sdpcleanup/Makefile
    team/oej/sdpcleanup/UPGRADE.txt
    team/oej/sdpcleanup/acinclude.m4
    team/oej/sdpcleanup/app.c
    team/oej/sdpcleanup/apps/app_hasnewvoicemail.c
    team/oej/sdpcleanup/apps/app_meetme.c
    team/oej/sdpcleanup/apps/app_queue.c
    team/oej/sdpcleanup/apps/app_sms.c
    team/oej/sdpcleanup/apps/app_userevent.c
    team/oej/sdpcleanup/apps/app_voicemail.c
    team/oej/sdpcleanup/asterisk.c
    team/oej/sdpcleanup/build_tools/menuselect-deps.in
    team/oej/sdpcleanup/cdr/Makefile
    team/oej/sdpcleanup/cdr/cdr_pgsql.c
    team/oej/sdpcleanup/channels/chan_iax2.c
    team/oej/sdpcleanup/channels/chan_local.c
    team/oej/sdpcleanup/channels/chan_misdn.c
    team/oej/sdpcleanup/channels/chan_sip.c
    team/oej/sdpcleanup/channels/chan_skinny.c
    team/oej/sdpcleanup/channels/chan_zap.c
    team/oej/sdpcleanup/channels/h323/Makefile
    team/oej/sdpcleanup/channels/misdn/isdn_lib.c
    team/oej/sdpcleanup/cli.c
    team/oej/sdpcleanup/codecs/codec_a_mu.c
    team/oej/sdpcleanup/codecs/codec_adpcm.c
    team/oej/sdpcleanup/codecs/codec_alaw.c
    team/oej/sdpcleanup/codecs/codec_ulaw.c
    team/oej/sdpcleanup/configs/cdr.conf.sample
    team/oej/sdpcleanup/configs/func_odbc.conf.sample
    team/oej/sdpcleanup/configs/sip.conf.sample
    team/oej/sdpcleanup/configs/zapata.conf.sample
    team/oej/sdpcleanup/configure
    team/oej/sdpcleanup/configure.ac
    team/oej/sdpcleanup/doc/cdrdriver.txt
    team/oej/sdpcleanup/enum.c
    team/oej/sdpcleanup/funcs/func_odbc.c
    team/oej/sdpcleanup/funcs/func_realtime.c
    team/oej/sdpcleanup/funcs/func_strings.c
    team/oej/sdpcleanup/include/asterisk/app.h
    team/oej/sdpcleanup/include/autoconfig.h.in
    team/oej/sdpcleanup/makeopts.in
    team/oej/sdpcleanup/manager.c
    team/oej/sdpcleanup/pbx.c
    team/oej/sdpcleanup/pbx/pbx_spool.c
    team/oej/sdpcleanup/res/res_features.c
    team/oej/sdpcleanup/res/res_musiconhold.c
    team/oej/sdpcleanup/sample.call
    team/oej/sdpcleanup/utils/Makefile
    team/oej/sdpcleanup/utils/ael_main.c
    team/oej/sdpcleanup/utils/smsq.c

Propchange: team/oej/sdpcleanup/
------------------------------------------------------------------------------
    automerge = http://edvina.net/training/

Propchange: team/oej/sdpcleanup/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.

Propchange: team/oej/sdpcleanup/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: team/oej/sdpcleanup/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue May 23 06:18:22 2006
@@ -1,1 +1,1 @@
-/trunk:1-27721
+/trunk:1-29392

Modified: team/oej/sdpcleanup/.cleancount
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/.cleancount?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/.cleancount (original)
+++ team/oej/sdpcleanup/.cleancount Tue May 23 06:18:22 2006
@@ -1,1 +1,1 @@
-16
+17

Modified: team/oej/sdpcleanup/CREDITS
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/CREDITS?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/CREDITS (original)
+++ team/oej/sdpcleanup/CREDITS Tue May 23 06:18:22 2006
@@ -92,8 +92,9 @@
 Music provided by www.freeplaymusic.com
 
 === OTHER SOURCE CODE IN ASTERISK ===
-Asterisk uses libedit, the lightweight readline replacement from
-NetBSD. It is BSD-licensed and requires the following statement:
+Asterisk uses libedit, the lightweight readline replacement from NetBSD.
+The cdr_radius module uses libradiusclient-ng, which is also from NetBSD.
+They are BSD-licensed and require the following statement:
 
       This product includes software developed by the NetBSD
       Foundation, Inc. and its contributors.

Modified: team/oej/sdpcleanup/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/Makefile?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/Makefile (original)
+++ team/oej/sdpcleanup/Makefile Tue May 23 06:18:22 2006
@@ -82,41 +82,27 @@
 # Define standard directories for various platforms
 # These apply if they are not redefined in asterisk.conf 
 ifeq ($(OSARCH),SunOS)
-  ASTETCDIR=$(INSTALL_PREFIX)/etc/opt/asterisk
-  ASTLIBDIR=$(INSTALL_PREFIX)/opt/asterisk/lib
-  ASTVARLIBDIR=$(INSTALL_PREFIX)/var/opt/asterisk/lib
-  ASTSPOOLDIR=$(INSTALL_PREFIX)/var/opt/asterisk/spool
-  ASTLOGDIR=$(INSTALL_PREFIX)/var/opt/asterisk/log
-  ASTHEADERDIR=$(INSTALL_PREFIX)/opt/asterisk/usr/include/asterisk
-  ASTBINDIR=$(INSTALL_PREFIX)/opt/asterisk/usr/bin
-  ASTSBINDIR=$(INSTALL_PREFIX)/opt/asterisk/usr/sbin
-  ASTVARRUNDIR=$(INSTALL_PREFIX)/var/opt/asterisk/run
-  ASTMANDIR=$(INSTALL_PREFIX)/opt/asterisk/usr/share/man
+  ASTETCDIR=/etc/opt/asterisk
+  ASTLIBDIR=/opt/asterisk/lib
+  ASTVARLIBDIR=/var/opt/asterisk/lib
+  ASTSPOOLDIR=/var/opt/asterisk/spool
+  ASTLOGDIR=/var/opt/asterisk/log
+  ASTHEADERDIR=/opt/asterisk/usr/include/asterisk
+  ASTBINDIR=/opt/asterisk/usr/bin
+  ASTSBINDIR=/opt/asterisk/usr/sbin
+  ASTVARRUNDIR=/var/opt/asterisk/run
+  ASTMANDIR=/opt/asterisk/usr/share/man
 else
-ifeq ($(OSARCH),FreeBSD)
-  PREFIX?=/usr/local
-  ASTETCDIR=$(INSTALL_PREFIX)$(PREFIX)/etc/asterisk
-  ASTLIBDIR=$(INSTALL_PREFIX)$(PREFIX)/lib/asterisk
-  ASTVARLIBDIR=$(INSTALL_PREFIX)$(PREFIX)/share/asterisk
-  ASTSPOOLDIR=$(INSTALL_PREFIX)/var/spool/asterisk
-  ASTLOGDIR=$(INSTALL_PREFIX)/var/log/asterisk
-  ASTHEADERDIR=$(INSTALL_PREFIX)$(PREFIX)/include/asterisk
-  ASTBINDIR=$(INSTALL_PREFIX)$(PREFIX)/bin
-  ASTSBINDIR=$(INSTALL_PREFIX)$(PREFIX)/sbin
-  ASTVARRUNDIR=$(INSTALL_PREFIX)/var/run
-  ASTMANDIR=$(INSTALL_PREFIX)$(PREFIX)/man
-else
-  ASTETCDIR=$(INSTALL_PREFIX)/etc/asterisk
-  ASTLIBDIR=$(INSTALL_PREFIX)/usr/lib/asterisk
-  ASTVARLIBDIR=$(INSTALL_PREFIX)/var/lib/asterisk
-  ASTSPOOLDIR=$(INSTALL_PREFIX)/var/spool/asterisk
-  ASTLOGDIR=$(INSTALL_PREFIX)/var/log/asterisk
-  ASTHEADERDIR=$(INSTALL_PREFIX)/usr/include/asterisk
-  ASTBINDIR=$(INSTALL_PREFIX)/usr/bin
-  ASTSBINDIR=$(INSTALL_PREFIX)/usr/sbin
-  ASTVARRUNDIR=$(INSTALL_PREFIX)/var/run
-  ASTMANDIR=$(INSTALL_PREFIX)/usr/share/man
-endif
+  ASTETCDIR=$(sysconfdir)/asterisk
+  ASTLIBDIR=$(libdir)/asterisk
+  ASTVARLIBDIR=$(localstatedir)/lib/asterisk
+  ASTSPOOLDIR=$(localstatedir)/spool/asterisk
+  ASTLOGDIR=$(localstatedir)/log/asterisk
+  ASTHEADERDIR=$(includedir)/asterisk
+  ASTBINDIR=$(bindir)
+  ASTSBINDIR=$(sbindir)
+  ASTVARRUNDIR=$(localstatedir)/run
+  ASTMANDIR=$(mandir)
 endif
 ASTDATADIR?=$(ASTVARLIBDIR)
 
@@ -279,12 +265,10 @@
 endif
 
 ASTCFLAGS+=$(MALLOC_DEBUG)$(BUSYDETECT)$(OPTIONS)
-ifeq ($(findstring dont-optimize,$(MAKECMDGOALS)),)
-ASTCFLAGS+=-fomit-frame-pointer
-endif
 
 MOD_SUBDIRS=res channels pbx apps codecs formats cdr funcs
-SUBDIRS:=$(MOD_SUBDIRS) utils stdtime agi
+OTHER_SUBDIRS=utils stdtime agi
+SUBDIRS:=$(MOD_SUBDIRS) $(OTHER_SUBDIRS)
 
 OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
 	translate.o file.o pbx.o cli.o md5.o term.o \
@@ -383,7 +367,7 @@
 	@echo " +               make install                +"  
 	@echo " +-------------------------------------------+"  
 
-all: cleantest config.status menuselect.makeopts depend asterisk subdirs
+all: cleantest defaults.h config.status menuselect.makeopts depend asterisk subdirs
 
 config.status: configure
 	@CFLAGS="" ./configure
@@ -871,7 +855,8 @@
 valgrind: dont-optimize
 
 depend: include/asterisk/version.h include/asterisk/buildopts.h .depend defaults.h 
-	@for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
+	@for x in $(MOD_SUBDIRS); do CFLAGS="$(MOD_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C $$x depend || exit 1 ; done
+	@for x in $(OTHER_SUBDIRS); do CFLAGS="$(OTHER_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C $$x depend || exit 1 ; done
 
 .depend: include/asterisk/version.h include/asterisk/buildopts.h defaults.h
 	build_tools/mkdep $(CFLAGS) $(wildcard *.c)

Modified: team/oej/sdpcleanup/UPGRADE.txt
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/UPGRADE.txt?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/UPGRADE.txt (original)
+++ team/oej/sdpcleanup/UPGRADE.txt Tue May 23 06:18:22 2006
@@ -107,6 +107,12 @@
   to specify which DTMF digits can be used to accept a recording and
   which digits can be used to cancel a recording.
 
+* ast_app_messagecount has been renamed to ast_app_inboxcount.  There is now a
+  new ast_app_messagecount function which takes a single context/mailbox/folder
+  mailbox specification and returns the message count for that folder only.
+  This addresses the deficiency of not being able to count the number of
+  messages in folders other than INBOX and Old.
+
 Manager:
 
 * After executing the 'status' manager action, the "Status" manager events
@@ -120,6 +126,11 @@
   which contains the unique ID of the queue member channel that is taking the 
   call. This is useful when trying to link recording filenames back to 
   a particular call from the queue.
+
+* app_userevent has been modified to always send Event: UserEvent with the
+  additional header UserEvent: <userspec>.  Also, the Channel and UniqueID
+  headers are not automatically sent, unless you specify them as separate
+  arguments.  Please see the application help for the new syntax.
 
 Variables:
 

Modified: team/oej/sdpcleanup/acinclude.m4
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/acinclude.m4?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/acinclude.m4 (original)
+++ team/oej/sdpcleanup/acinclude.m4 Tue May 23 06:18:22 2006
@@ -5,35 +5,35 @@
 AC_ARG_WITH([$1], AC_HELP_STRING([--with-$1=PATH],[use $5 files in PATH]),[
 case ${withval} in
      n|no)
-     USE_$1=no
+     USE_$4=no
      ;;
      y|ye|yes)
-     $1_MANDATORY="yes"
+     $4_MANDATORY="yes"
      ;;
      *)
-     $1_DIR="${withval}"
-     $1_MANDATORY="yes"
+     $4_DIR="${withval}"
+     $4_MANDATORY="yes"
      ;;
 esac
 ])
 
-PBX_LIB$1=0
+PBX_LIB$4=0
 
-if test "${USE_$1}" != "no"; then
-   libdir=""
-   if test "x${$1_DIR}" != "x"; then
-      libdir="-L${$1_DIR}/lib"
+if test "${USE_$4}" != "no"; then
+   pbxlibdir=""
+   if test "x${$4_DIR}" != "x"; then
+      pbxlibdir="-L${$1_DIR}/lib"
    fi
-   AC_CHECK_LIB([$1], [$2], [:], [], ${libdir} $6)
+   AC_CHECK_LIB([$1], [$2], [AST_$4_FOUND=yes], [AST_$4_FOUND=no], ${pbxlibdir} $6)
 
-   if test "${ac_cv_lib_$1_$2}" = "yes"; then
-      $1_LIB="-l$1 $6"
+   if test "${AST_$4_FOUND}" = "yes"; then
+      $4_LIB="-l$1 $6"
       $4_HEADER_FOUND="1"
-      if test "x${$1_DIR}" != "x"; then
-         $1_LIB="${libdir} ${$1_LIB}"
-	 $1_INCLUDE="-I${$1_DIR}/include"
+      if test "x${$4_DIR}" != "x"; then
+         $4_LIB="${pbxlibdir} ${$4_LIB}"
+	 $4_INCLUDE="-I${$4_DIR}/include"
 	 if test "x$3" != "x" ; then
-	    AC_CHECK_HEADER([${$1_DIR}/include/$3], [$4_HEADER_FOUND=1], [$4_HEADER_FOUND=0] )
+	    AC_CHECK_HEADER([${$4_DIR}/include/$3], [$4_HEADER_FOUND=1], [$4_HEADER_FOUND=0] )
 	 fi
       else
 	 if test "x$3" != "x" ; then
@@ -41,7 +41,7 @@
 	 fi
       fi
       if test "x${$4_HEADER_FOUND}" = "x0" ; then
-         if test ! -z "${$1_MANDATORY}" ;
+         if test ! -z "${$4_MANDATORY}" ;
          then
             echo " ***"
             echo " *** It appears that you do not have the $1 development package installed."
@@ -49,14 +49,14 @@
             echo " *** without explicitly specifying --with-$1"
             exit 1
          fi
-         $1_LIB=""
-         $1_INCLUDE=""
-         PBX_LIB$1=0
+         $4_LIB=""
+         $4_INCLUDE=""
+         PBX_LIB$4=0
       else
-         PBX_LIB$1=1
+         PBX_LIB$4=1
          AC_DEFINE_UNQUOTED([HAVE_$4], 1, [Define to indicate the $5 library])
       fi
-   elif test ! -z "${$1_MANDATORY}";
+   elif test ! -z "${$4_MANDATORY}";
    then
       echo "***"
       echo "*** The $5 installation on this system appears to be broken."
@@ -65,9 +65,9 @@
       exit 1
    fi
 fi
-AC_SUBST([$1_LIB])
-AC_SUBST([$1_INCLUDE])
-AC_SUBST([PBX_LIB$1])
+AC_SUBST([$4_LIB])
+AC_SUBST([$4_INCLUDE])
+AC_SUBST([PBX_LIB$4])
 ])
 
 

Modified: team/oej/sdpcleanup/app.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/app.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/app.c (original)
+++ team/oej/sdpcleanup/app.c Tue May 23 06:18:22 2006
@@ -145,18 +145,22 @@
 }
 
 static int (*ast_has_voicemail_func)(const char *mailbox, const char *folder) = NULL;
-static int (*ast_messagecount_func)(const char *mailbox, int *newmsgs, int *oldmsgs) = NULL;
+static int (*ast_inboxcount_func)(const char *mailbox, int *newmsgs, int *oldmsgs) = NULL;
+static int (*ast_messagecount_func)(const char *context, const char *mailbox, const char *folder) = NULL;
 
 void ast_install_vm_functions(int (*has_voicemail_func)(const char *mailbox, const char *folder),
-			      int (*messagecount_func)(const char *mailbox, int *newmsgs, int *oldmsgs))
+			      int (*inboxcount_func)(const char *mailbox, int *newmsgs, int *oldmsgs),
+			      int (*messagecount_func)(const char *context, const char *mailbox, const char *folder))
 {
 	ast_has_voicemail_func = has_voicemail_func;
+	ast_inboxcount_func = inboxcount_func;
 	ast_messagecount_func = messagecount_func;
 }
 
 void ast_uninstall_vm_functions(void)
 {
 	ast_has_voicemail_func = NULL;
+	ast_inboxcount_func = NULL;
 	ast_messagecount_func = NULL;
 }
 
@@ -174,19 +178,33 @@
 }
 
 
-int ast_app_messagecount(const char *mailbox, int *newmsgs, int *oldmsgs)
+int ast_app_inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
 {
 	static int warned = 0;
 	if (newmsgs)
 		*newmsgs = 0;
 	if (oldmsgs)
 		*oldmsgs = 0;
-	if (ast_messagecount_func)
-		return ast_messagecount_func(mailbox, newmsgs, oldmsgs);
+	if (ast_inboxcount_func)
+		return ast_inboxcount_func(mailbox, newmsgs, oldmsgs);
 
 	if (!warned && (option_verbose > 2)) {
 		warned++;
 		ast_verbose(VERBOSE_PREFIX_3 "Message count requested for mailbox %s but voicemail not loaded.\n", mailbox);
+	}
+
+	return 0;
+}
+
+int ast_app_messagecount(const char *context, const char *mailbox, const char *folder)
+{
+	static int warned = 0;
+	if (ast_messagecount_func)
+		return ast_messagecount_func(context, mailbox, folder);
+
+	if (!warned && (option_verbose > 2)) {
+		warned++;
+		ast_verbose(VERBOSE_PREFIX_3 "Message count requested for mailbox %s@%s/%s but voicemail not loaded.\n", mailbox, context, folder);
 	}
 
 	return 0;
@@ -531,8 +549,7 @@
 		sfmt[fmtcnt++] = ast_strdupa(fmt);
 	}
 
-	time(&start);
-	end = start;  /* pre-initialize end to be same as start in case we never get into loop */
+	end = start = time(NULL);  /* pre-initialize end to be same as start in case we never get into loop */
 	for (x = 0; x < fmtcnt; x++) {
 		others[x] = ast_writefile(prepend ? prependfile : recordfile, sfmt[x], comment, O_TRUNC, 0, 0700);
 		if (option_verbose > 2)
@@ -652,7 +669,7 @@
 				}
 			}
 			if (maxtime) {
-				time(&end);
+				end = time(NULL);
 				if (maxtime < (end - start)) {
 					if (option_verbose > 2)
 						ast_verbose(VERBOSE_PREFIX_3 "Took too long, cutting it short...\n");
@@ -671,7 +688,8 @@
 		} else {
 			ast_frfree(f);
 		}
-		if (end == start) time(&end);
+		if (end == start)
+			end = time(NULL);
 	} else {
 		ast_log(LOG_WARNING, "Error creating writestream '%s', format '%s'\n", recordfile, sfmt[x]);
 	}
@@ -913,7 +931,7 @@
 	close(fd);
 
 	snprintf(s, strlen(path) + 9, "%s/.lock", path);
-	time(&start);
+	start = time(NULL);
 	while (((res = link(fs, s)) < 0) && (errno == EEXIST) && (time(NULL) - start < 5))
 		usleep(1);
 	if (res) {

Modified: team/oej/sdpcleanup/apps/app_hasnewvoicemail.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/apps/app_hasnewvoicemail.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/apps/app_hasnewvoicemail.c (original)
+++ team/oej/sdpcleanup/apps/app_hasnewvoicemail.c Tue May 23 06:18:22 2006
@@ -78,26 +78,6 @@
 "		<# of messages in the folder, 0 for NONE>\n";
 
 LOCAL_USER_DECL;
-
-static int hasvoicemail_internal(char *context, char *box, char *folder)
-{
-	char vmpath[256];
-	DIR *vmdir;
-	struct dirent *vment;
-	int count=0;
-
-	snprintf(vmpath,sizeof(vmpath), "%s/voicemail/%s/%s/%s", (char *)ast_config_AST_SPOOL_DIR, context, box, folder);
-	if ((vmdir = opendir(vmpath))) {
-		/* No matter what the format of VM, there will always be a .txt file for each message. */
-		while ((vment = readdir(vmdir))) {
-			if (!strncmp(vment->d_name + 7, ".txt", 4)) {
-				count++;
-			}
-		}
-		closedir(vmdir);
-	}
-	return count;
-}
 
 static int hasvoicemail_exec(struct ast_channel *chan, void *data)
 {
@@ -130,11 +110,10 @@
 
 	AST_STANDARD_APP_ARGS(args, input);
 
-	if ((vmbox = strsep(&args.vmbox, "@")))
-		if (!ast_strlen_zero(args.vmbox))
-			context = args.vmbox;
-	if (!vmbox)
-		vmbox = args.vmbox;
+	vmbox = strsep(&args.vmbox, "@");
+
+	if (!ast_strlen_zero(args.vmbox))
+		context = args.vmbox;
 
 	vmfolder = strchr(vmbox, '/');
 	if (vmfolder) {
@@ -149,7 +128,7 @@
 			priority_jump = 1;
 	}
 
-	vmcount = hasvoicemail_internal(context, vmbox, vmfolder);
+	vmcount = ast_app_messagecount(context, vmbox, vmfolder);
 	/* Set the count in the channel variable */
 	if (varname) {
 		snprintf(tmp, sizeof(tmp), "%d", vmcount);
@@ -198,7 +177,7 @@
 		args.folder = "INBOX";
 	}
 
-	snprintf(buf, len, "%d", hasvoicemail_internal(context, args.vmbox, args.folder));
+	snprintf(buf, len, "%d", ast_app_messagecount(context, args.vmbox, args.folder));
 
 	LOCAL_USER_REMOVE(u);
 	

Modified: team/oej/sdpcleanup/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/apps/app_meetme.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/apps/app_meetme.c (original)
+++ team/oej/sdpcleanup/apps/app_meetme.c Tue May 23 06:18:22 2006
@@ -63,6 +63,120 @@
 #include "asterisk/translate.h"
 #include "asterisk/ulaw.h"
 
+#include "enter.h"
+#include "leave.h"
+
+LOCAL_USER_DECL;
+
+#define CONFIG_FILE_NAME "meetme.conf"
+
+/*! each buffer is 20ms, so this is 640ms total */
+#define DEFAULT_AUDIO_BUFFERS  32
+
+enum {
+	ADMINFLAG_MUTED =  (1 << 1), /*!< User is muted */
+	ADMINFLAG_KICKME = (1 << 2)  /*!< User has been kicked */
+};
+
+#define MEETME_DELAYDETECTTALK     300
+#define MEETME_DELAYDETECTENDTALK  1000
+
+#define AST_FRAME_BITS  32
+
+enum volume_action {
+	VOL_UP,
+	VOL_DOWN
+};
+
+enum entrance_sound {
+	ENTER,
+	LEAVE
+};
+
+enum recording_state {
+	MEETME_RECORD_OFF,
+	MEETME_RECORD_STARTED,
+	MEETME_RECORD_ACTIVE,
+	MEETME_RECORD_TERMINATE
+};
+
+#define CONF_SIZE  320
+
+enum {
+	/*! user has admin access on the conference */
+	CONFFLAG_ADMIN = (1 << 0),
+	/*! If set the user can only receive audio from the conference */
+	CONFFLAG_MONITOR = (1 << 1),
+	/*! If set asterisk will exit conference when '#' is pressed */
+	CONFFLAG_POUNDEXIT = (1 << 2),
+	/*! If set asterisk will provide a menu to the user when '*' is pressed */
+	CONFFLAG_STARMENU = (1 << 3),
+	/*! If set the use can only send audio to the conference */
+	CONFFLAG_TALKER = (1 << 4),
+	/*! If set there will be no enter or leave sounds */
+	CONFFLAG_QUIET = (1 << 5),
+	/*! If set, when user joins the conference, they will be told the number 
+	 *  of users that are already in */
+	CONFFLAG_ANNOUNCEUSERCOUNT = (1 << 6),
+	/*! Set to run AGI Script in Background */
+	CONFFLAG_AGI = (1 << 7),
+	/*! Set to have music on hold when user is alone in conference */
+	CONFFLAG_MOH = (1 << 8),
+	/*! If set the MeetMe will return if all marked with this flag left */
+	CONFFLAG_MARKEDEXIT = (1 << 9),
+	/*! If set, the MeetMe will wait until a marked user enters */
+	CONFFLAG_WAITMARKED = (1 << 10),
+	/*! If set, the MeetMe will exit to the specified context */
+	CONFFLAG_EXIT_CONTEXT = (1 << 11),
+	/*! If set, the user will be marked */
+	CONFFLAG_MARKEDUSER = (1 << 12),
+	/*! If set, user will be ask record name on entry of conference */
+	CONFFLAG_INTROUSER = (1 << 13),
+	/*! If set, the MeetMe will be recorded */
+	CONFFLAG_RECORDCONF = (1<< 14),
+	/*! If set, the user will be monitored if the user is talking or not */
+	CONFFLAG_MONITORTALKER = (1 << 15),
+	CONFFLAG_DYNAMIC = (1 << 16),
+	CONFFLAG_DYNAMICPIN = (1 << 17),
+	CONFFLAG_EMPTY = (1 << 18),
+	CONFFLAG_EMPTYNOPIN = (1 << 19),
+	CONFFLAG_ALWAYSPROMPT = (1 << 20),
+	/*! If set, treats talking users as muted users */
+	CONFFLAG_OPTIMIZETALKER = (1 << 21),
+	/*! If set, won't speak the extra prompt when the first person 
+	 *  enters the conference */
+	CONFFLAG_NOONLYPERSON = (1 << 22),
+	CONFFLAG_INTROUSERNOREVIEW = (1 << 23)
+	/*! If set, user will be asked to record name on entry of conference 
+	 *  without review */
+};
+
+AST_APP_OPTIONS(meetme_opts, {
+	AST_APP_OPTION('A', CONFFLAG_MARKEDUSER ),
+	AST_APP_OPTION('a', CONFFLAG_ADMIN ),
+	AST_APP_OPTION('b', CONFFLAG_AGI ),
+	AST_APP_OPTION('c', CONFFLAG_ANNOUNCEUSERCOUNT ),
+	AST_APP_OPTION('D', CONFFLAG_DYNAMICPIN ),
+	AST_APP_OPTION('d', CONFFLAG_DYNAMIC ),
+	AST_APP_OPTION('E', CONFFLAG_EMPTYNOPIN ),
+	AST_APP_OPTION('e', CONFFLAG_EMPTY ),
+	AST_APP_OPTION('i', CONFFLAG_INTROUSER ),
+	AST_APP_OPTION('I', CONFFLAG_INTROUSERNOREVIEW ),
+	AST_APP_OPTION('M', CONFFLAG_MOH ),
+	AST_APP_OPTION('m', CONFFLAG_MONITOR ),
+	AST_APP_OPTION('o', CONFFLAG_OPTIMIZETALKER ),
+	AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ),
+	AST_APP_OPTION('p', CONFFLAG_POUNDEXIT ),
+	AST_APP_OPTION('q', CONFFLAG_QUIET ),
+	AST_APP_OPTION('r', CONFFLAG_RECORDCONF ),
+	AST_APP_OPTION('s', CONFFLAG_STARMENU ),
+	AST_APP_OPTION('T', CONFFLAG_MONITORTALKER ),
+	AST_APP_OPTION('t', CONFFLAG_TALKER ),
+	AST_APP_OPTION('w', CONFFLAG_WAITMARKED ),
+	AST_APP_OPTION('X', CONFFLAG_EXIT_CONTEXT ),
+	AST_APP_OPTION('x', CONFFLAG_MARKEDEXIT ),
+	AST_APP_OPTION('1', CONFFLAG_NOONLYPERSON ),
+});
 
 static const char *app = "MeetMe";
 static const char *app2 = "MeetMeCount";
@@ -109,7 +223,6 @@
 "      's' -- Present menu (user or admin) when '*' is received ('send' to menu)\n"
 "      't' -- set talk only mode. (Talk only, no listening)\n"
 "      'T' -- set talker detection (sent to manager interface and meetme list)\n"
-"      'v' -- video mode\n"
 "      'w' -- wait until the marked user enters the conference\n"
 "      'x' -- close the conference when last marked user exits\n"
 "      'X' -- allow user to exit the conference by entering a valid single\n"
@@ -138,31 +251,27 @@
 "      'N' -- Mute entire conference (except admin)\n"
 "";
 
-#define CONFIG_FILE_NAME "meetme.conf"
-
-LOCAL_USER_DECL;
-
 struct ast_conference {
-	ast_mutex_t playlock;				/* Conference specific lock (players) */
-	ast_mutex_t listenlock;				/* Conference specific lock (listeners) */
-	char confno[AST_MAX_EXTENSION];		/* Conference */
-	struct ast_channel *chan;		/* Announcements channel */
-	struct ast_channel *lchan;		/* Listen/Record channel */
-	int fd;					/* Announcements fd */
-	int zapconf;				/* Zaptel Conf # */
-	int users;				/* Number of active users */
-	int markedusers;			/* Number of marked users */
-	time_t start;				/* Start time (s) */
-	int refcount;				/* reference count of usage */
-	unsigned int recording:2;				/* recording status */
-	unsigned int isdynamic:1;				/* Created on the fly? */
-	unsigned int locked:1;				/* Is the conference locked? */
-	pthread_t recordthread;			/* thread for recording */
-	pthread_attr_t attr;			/* thread attribute */
-	const char *recordingfilename;		/* Filename to record the Conference into */
-	const char *recordingformat;			/* Format to record the Conference in */
-	char pin[AST_MAX_EXTENSION];		/* If protected by a PIN */
-	char pinadmin[AST_MAX_EXTENSION];	/* If protected by a admin PIN */
+	ast_mutex_t playlock;                   /*!< Conference specific lock (players) */
+	ast_mutex_t listenlock;                 /*!< Conference specific lock (listeners) */
+	char confno[AST_MAX_EXTENSION];         /*!< Conference */
+	struct ast_channel *chan;               /*!< Announcements channel */
+	struct ast_channel *lchan;              /*!< Listen/Record channel */
+	int fd;                                 /*!< Announcements fd */
+	int zapconf;                            /*!< Zaptel Conf # */
+	int users;                              /*!< Number of active users */
+	int markedusers;                        /*!< Number of marked users */
+	time_t start;                           /*!< Start time (s) */
+	int refcount;                           /*!< reference count of usage */
+	enum recording_state recording:2;               /*!< recording status */
+	unsigned int isdynamic:1;               /*!< Created on the fly? */
+	unsigned int locked:1;                  /*!< Is the conference locked? */
+	pthread_t recordthread;                 /*!< thread for recording */
+	pthread_attr_t attr;                    /*!< thread attribute */
+	const char *recordingfilename;          /*!< Filename to record the Conference into */
+	const char *recordingformat;            /*!< Format to record the Conference in */
+	char pin[AST_MAX_EXTENSION];            /*!< If protected by a PIN */
+	char pinadmin[AST_MAX_EXTENSION];       /*!< If protected by a admin PIN */
 	struct ast_frame *transframe[32];
 	struct ast_frame *origframe;
 	struct ast_trans_pvt *transpath[32];
@@ -173,112 +282,52 @@
 static AST_LIST_HEAD_STATIC(confs, ast_conference);
 
 struct volume {
-	int desired;				/* Desired volume adjustment */
-	int actual;				/* Actual volume adjustment (for channels that can't adjust) */
+	int desired;                            /*!< Desired volume adjustment */
+	int actual;                             /*!< Actual volume adjustment (for channels that can't adjust) */
 };
 
 struct ast_conf_user {
-	int user_no;				/* User Number */
-	int userflags;				/* Flags as set in the conference */
-	int adminflags;				/* Flags set by the Admin */
-	struct ast_channel *chan;		/* Connected channel */
-	int talking;				/* Is user talking */
-	int zapchannel;				/* Is a Zaptel channel */
-	char usrvalue[50];			/* Custom User Value */
-	char namerecloc[AST_MAX_EXTENSION];	/* Name Recorded file Location */
-	time_t jointime;			/* Time the user joined the conference */
+	int user_no;                            /*!< User Number */
+	int userflags;                          /*!< Flags as set in the conference */
+	int adminflags;                         /*!< Flags set by the Admin */
+	struct ast_channel *chan;               /*!< Connected channel */
+	int talking;                            /*!< Is user talking */
+	int zapchannel;                         /*!< Is a Zaptel channel */
+	char usrvalue[50];                      /*!< Custom User Value */
+	char namerecloc[AST_MAX_EXTENSION];     /*!< Name Recorded file Location */
+	time_t jointime;                        /*!< Time the user joined the conference */
 	struct volume talk;
 	struct volume listen;
 	AST_LIST_ENTRY(ast_conf_user) list;
 };
 
-static int audio_buffers;			/* The number of audio buffers to be allocated on pseudo channels
-						   when in a conference
-						*/
-
-#define DEFAULT_AUDIO_BUFFERS 32		/* each buffer is 20ms, so this is 640ms total */
-
-#define ADMINFLAG_MUTED (1 << 1)		/* User is muted */
-#define ADMINFLAG_KICKME (1 << 2)		/* User is kicked */
-#define MEETME_DELAYDETECTTALK 		300
-#define MEETME_DELAYDETECTENDTALK 	1000
-
-#define AST_FRAME_BITS 32
-
-enum volume_action {
-	VOL_UP,
-	VOL_DOWN,
+/*! The number of audio buffers to be allocated on pseudo channels
+ *  when in a conference */
+static int audio_buffers;
+
+/*! Map 'volume' levels from -5 through +5 into
+ *  decibel (dB) settings for channel drivers
+ *  Note: these are not a straight linear-to-dB
+ *  conversion... the numbers have been modified
+ *  to give the user a better level of adjustability
+ */
+static signed char gain_map[] = {
+	-15,
+	-13,
+	-10,
+	-6,
+	0,
+	0,
+	0,
+	6,
+	10,
+	13,
+	15,
 };
 
+
 static int admin_exec(struct ast_channel *chan, void *data);
-
 static void *recordthread(void *args);
-
-#include "enter.h"
-#include "leave.h"
-
-#define ENTER	0
-#define LEAVE	1
-
-#define MEETME_RECORD_OFF	0
-#define MEETME_RECORD_STARTED	1
-#define MEETME_RECORD_ACTIVE	2
-#define MEETME_RECORD_TERMINATE	3
-
-#define CONF_SIZE 320
-
-#define CONFFLAG_ADMIN	(1 << 1)		/* If set the user has admin access on the conference */
-#define CONFFLAG_MONITOR (1 << 2)		/* If set the user can only receive audio from the conference */
-#define CONFFLAG_POUNDEXIT (1 << 3)		/* If set asterisk will exit conference when '#' is pressed */
-#define CONFFLAG_STARMENU (1 << 4)		/* If set asterisk will provide a menu to the user when '*' is pressed */
-#define CONFFLAG_TALKER (1 << 5)		/* If set the use can only send audio to the conference */
-#define CONFFLAG_QUIET (1 << 6)			/* If set there will be no enter or leave sounds */
-#define CONFFLAG_VIDEO (1 << 7)			/* Set to enable video mode */
-#define CONFFLAG_AGI (1 << 8)			/* Set to run AGI Script in Background */
-#define CONFFLAG_MOH (1 << 9)			/* Set to have music on hold when user is alone in conference */
-#define CONFFLAG_MARKEDEXIT (1 << 10)		/* If set the MeetMe will return if all marked with this flag left */
-#define CONFFLAG_WAITMARKED (1 << 11)		/* If set, the MeetMe will wait until a marked user enters */
-#define CONFFLAG_EXIT_CONTEXT (1 << 12)		/* If set, the MeetMe will exit to the specified context */
-#define CONFFLAG_MARKEDUSER (1 << 13)		/* If set, the user will be marked */
-#define CONFFLAG_INTROUSER (1 << 14)		/* If set, user will be ask record name on entry of conference */
-#define CONFFLAG_RECORDCONF (1<< 15)		/* If set, the MeetMe will be recorded */
-#define CONFFLAG_MONITORTALKER (1 << 16)	/* If set, the user will be monitored if the user is talking or not */
-#define CONFFLAG_DYNAMIC (1 << 17)
-#define CONFFLAG_DYNAMICPIN (1 << 18)
-#define CONFFLAG_EMPTY (1 << 19)
-#define CONFFLAG_EMPTYNOPIN (1 << 20)
-#define CONFFLAG_ALWAYSPROMPT (1 << 21)
-#define CONFFLAG_ANNOUNCEUSERCOUNT (1 << 22)	/* If set, when user joins the conference, they will be told the number of users that are already in */
-#define CONFFLAG_OPTIMIZETALKER (1 << 23)	/* If set, treats talking users as muted users */
-#define CONFFLAG_NOONLYPERSON (1 << 24)		/* If set, won't speak the extra prompt when the first person enters the conference */
-#define CONFFLAG_INTROUSERNOREVIEW (1 << 25) /* If set, user will be asked to record name on entry of conference without review */
-
-AST_APP_OPTIONS(meetme_opts, {
-	AST_APP_OPTION('A', CONFFLAG_MARKEDUSER ),
-	AST_APP_OPTION('a', CONFFLAG_ADMIN ),
-	AST_APP_OPTION('b', CONFFLAG_AGI ),
-	AST_APP_OPTION('c', CONFFLAG_ANNOUNCEUSERCOUNT ),
-	AST_APP_OPTION('D', CONFFLAG_DYNAMICPIN ),
-	AST_APP_OPTION('d', CONFFLAG_DYNAMIC ),
-	AST_APP_OPTION('E', CONFFLAG_EMPTYNOPIN ),
-	AST_APP_OPTION('e', CONFFLAG_EMPTY ),
-	AST_APP_OPTION('i', CONFFLAG_INTROUSER ),
-	AST_APP_OPTION('I', CONFFLAG_INTROUSERNOREVIEW ),
-	AST_APP_OPTION('M', CONFFLAG_MOH ),
-	AST_APP_OPTION('m', CONFFLAG_MONITOR ),
-	AST_APP_OPTION('o', CONFFLAG_OPTIMIZETALKER ),
-	AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ),
-	AST_APP_OPTION('p', CONFFLAG_POUNDEXIT ),
-	AST_APP_OPTION('q', CONFFLAG_QUIET ),
-	AST_APP_OPTION('r', CONFFLAG_RECORDCONF ),
-	AST_APP_OPTION('s', CONFFLAG_STARMENU ),
-	AST_APP_OPTION('T', CONFFLAG_MONITORTALKER ),
-	AST_APP_OPTION('t', CONFFLAG_TALKER ),
-	AST_APP_OPTION('w', CONFFLAG_WAITMARKED ),
-	AST_APP_OPTION('X', CONFFLAG_EXIT_CONTEXT ),
-	AST_APP_OPTION('x', CONFFLAG_MARKEDEXIT ),
-	AST_APP_OPTION('1', CONFFLAG_NOONLYPERSON ),
-});
 
 static char *istalking(int x)
 {
@@ -317,26 +366,6 @@
 	return 0;
 }
 
-/* Map 'volume' levels from -5 through +5 into
-   decibel (dB) settings for channel drivers
-   Note: these are not a straight linear-to-dB
-   conversion... the numbers have been modified
-   to give the user a better level of adjustability
-*/
-static signed char gain_map[] = {
-	-15,
-	-13,
-	-10,
-	-6,
-	0,
-	0,
-	0,
-	6,
-	10,
-	13,
-	15,
-};
-
 static int set_talk_volume(struct ast_conf_user *user, int volume)
 {
 	signed char gain_adjust;
@@ -428,7 +457,7 @@
 	ast_channel_setoption(user->chan, AST_OPTION_RXGAIN, &zero_volume, sizeof(zero_volume), 0);
 }
 
-static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int sound)
+static void conf_play(struct ast_channel *chan, struct ast_conference *conf, enum entrance_sound sound)
 {
 	unsigned char *data;
 	int len;
@@ -543,20 +572,6 @@
 	return cnf;
 }
 
-static int confs_show(int fd, int argc, char **argv)
-{
-	ast_cli(fd, "Deprecated! Please use 'meetme' instead.\n");
-
-	return RESULT_SUCCESS;
-}
-
-static char show_confs_usage[] =
-"Deprecated! Please use 'meetme' instead.\n";
-
-static struct ast_cli_entry cli_show_confs = {
-	{ "show", "conferences", NULL }, confs_show,
-	"Show status of conferences", show_confs_usage, NULL };
-	
 static int conf_cmd(int fd, int argc, char **argv) {
 	/* Process the command */
 	struct ast_conference *cnf;
@@ -2394,8 +2409,7 @@
 {
 	int res;
 	
-	res = ast_cli_unregister(&cli_show_confs);
-	res |= ast_cli_unregister(&cli_conf);
+	res = ast_cli_unregister(&cli_conf);
 	res |= ast_unregister_application(app3);
 	res |= ast_unregister_application(app2);
 	res |= ast_unregister_application(app);
@@ -2411,8 +2425,7 @@
 
 	load_config();
 
-	res = ast_cli_register(&cli_show_confs);
-	res |= ast_cli_register(&cli_conf);
+	res = ast_cli_register(&cli_conf);
 	res |= ast_register_application(app3, admin_exec, synopsis3, descrip3);
 	res |= ast_register_application(app2, count_exec, synopsis2, descrip2);
 	res |= ast_register_application(app, conf_exec, synopsis, descrip);

Modified: team/oej/sdpcleanup/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/apps/app_queue.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/apps/app_queue.c (original)
+++ team/oej/sdpcleanup/apps/app_queue.c Tue May 23 06:18:22 2006
@@ -454,6 +454,8 @@
 	for (member = q->members; member; member = member->next) {
 		if (max_penalty && (member->penalty > max_penalty))
 			continue;
+
+		if (member->paused) continue;
 
 		switch (member->status) {
 		case AST_DEVICE_INVALID:
@@ -1895,11 +1897,10 @@
 	int res;
 
 	if (!qe->parent->autofill) {
-
 		/* Atomically read the parent head -- does not need a lock */
 		ch = qe->parent->head;
 		/* If we are now at the top of the head, break out */
-		if ((ch == qe) || (qe->parent->autofill)) {
+		if (ch == qe) {
 			if (option_debug)
 				ast_log(LOG_DEBUG, "It's our turn (%s).\n", qe->chan->name);
 			res = 1;
@@ -2200,7 +2201,10 @@
 			free(tmp);
 		}
 	}
-	to = (qe->parent->timeout) ? qe->parent->timeout * 1000 : -1;
+	if (qe->expire && (!qe->parent->timeout || (qe->expire - now) <= qe->parent->timeout))
+		to = (qe->expire - now) * 1000;
+	else
+		to = (qe->parent->timeout) ? qe->parent->timeout * 1000 : -1;
 	ring_one(qe, outgoing, &numbusies);
 	ast_mutex_unlock(&qe->parent->lock);
 	if (use_weight) 

Modified: team/oej/sdpcleanup/apps/app_sms.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/apps/app_sms.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/apps/app_sms.c (original)
+++ team/oej/sdpcleanup/apps/app_sms.c Tue May 23 06:18:22 2006
@@ -1176,14 +1176,13 @@
 static int sms_generate (struct ast_channel *chan, void *data, int len, int samples)
 {
 	struct ast_frame f = { 0 };
-	unsigned char waste[AST_FRIENDLY_OFFSET];
 #define MAXSAMPLES (800)
 #ifdef OUTALAW
-	unsigned char buf[MAXSAMPLES];
+	unsigned char *buf;
 #else
-	signed short buf[MAXSAMPLES];
+	short *buf;
 #endif
-#define SAMPLE2LEN (sizeof (buf[0]))
+#define SAMPLE2LEN sizeof(*buf)
 	sms_t *h = data;
 	int i;
 
@@ -1192,9 +1191,9 @@
 			 MAXSAMPLES, samples);
 		samples = MAXSAMPLES;
 	}
-	len = samples * SAMPLE2LEN;
-
-	waste[0] = 0;				 /* make compiler happy */
+	len = samples * SAMPLE2LEN + AST_FRIENDLY_OFFSET;
+	buf = alloca(len);
+
 	f.frametype = AST_FRAME_VOICE;
 #ifdef OUTALAW
 	f.subclass = AST_FORMAT_ALAW;
@@ -1204,7 +1203,7 @@
 	f.datalen = len;
 	f.offset = AST_FRIENDLY_OFFSET;
 	f.mallocd = 0;
-	f.data = buf;
+	f.data = buf + AST_FRIENDLY_OFFSET;
 	f.samples = samples;
 	f.src = "app_sms";
 	/* create a buffer containing the digital sms pattern */

Modified: team/oej/sdpcleanup/apps/app_userevent.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/apps/app_userevent.c?rev=29642&r1=29641&r2=29642&view=diff
==============================================================================
--- team/oej/sdpcleanup/apps/app_userevent.c (original)
+++ team/oej/sdpcleanup/apps/app_userevent.c Tue May 23 06:18:22 2006
@@ -38,6 +38,7 @@
 #include "asterisk/pbx.h"
 #include "asterisk/module.h"
 #include "asterisk/manager.h"
+#include "asterisk/app.h"
 
 static char *tdesc = "Custom User Event Application";
 
@@ -46,24 +47,27 @@
 static char *synopsis = "Send an arbitrary event to the manager interface";
 
 static char *descrip = 
-"  UserEvent(eventname[|body]): Sends an arbitrary event to the\n"
-"manager interface, with an optional body representing additional\n"
-"arguments.  The format of the event will be:\n"
-"    Event: UserEvent<specified event name>\n"
-"    Channel: <channel name>\n"
-"    Uniqueid: <call uniqueid>\n"
+"  UserEvent(eventname[|body]): Sends an arbitrary event to the manager\n"
+"interface, with an optional body representing additional arguments.  The\n"
+"body may be specified as a | delimeted list of headers. Each additional\n"
+"argument will be placed on a new line in the event. The format of the\n"
+"event will be:\n"
+"    Event: UserEvent\n"
+"    UserEvent: <specified event name>\n"
 "    [body]\n"
-"If the body is not specified, only Event, Channel, and Uniqueid fields\n"
-"will be present.  Returns 0.";
+"If no body is specified, only Event and UserEvent headers will be present.\n";
 
 LOCAL_USER_DECL;
 
 static int userevent_exec(struct ast_channel *chan, void *data)
 {
 	struct localuser *u;
-	char *info;
-	char eventname[512];
-	char *eventbody;
+	char *parse, buf[2048] = "";
+	int x, buflen = 0;
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(eventname);
+		AST_APP_ARG(extra)[100];
+	);
 
 	if (ast_strlen_zero(data)) {
 		ast_log(LOG_WARNING, "UserEvent requires an argument (eventname|optional event body)\n");
@@ -72,25 +76,18 @@
 
 	LOCAL_USER_ADD(u);
 
-	info = ast_strdupa(data);
+	parse = ast_strdupa(data);
 
-	snprintf(eventname, sizeof(eventname), "UserEvent%s", info);

[... 10587 lines stripped ...]


More information about the asterisk-commits mailing list