[asterisk-commits] branch oej/02-labarea r26133 - in /team/oej/02-labarea: ./ apps/ build_tools/...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue May 9 08:50:20 MST 2006


Author: oej
Date: Tue May  9 10:50:20 2006
New Revision: 26133

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

Added:
    team/oej/02-labarea/aclocal.m4
      - copied unchanged from r26131, trunk/aclocal.m4
    team/oej/02-labarea/configure
      - copied unchanged from r26131, trunk/configure
    team/oej/02-labarea/include/autoconfig.h.in
      - copied unchanged from r26131, trunk/include/autoconfig.h.in
    team/oej/02-labarea/install-sh
      - copied unchanged from r26131, trunk/install-sh
    team/oej/02-labarea/missing
      - copied unchanged from r26131, trunk/missing
    team/oej/02-labarea/mkinstalldirs
      - copied unchanged from r26131, trunk/mkinstalldirs
    team/oej/02-labarea/sounds/vm-tempgreetactive.gsm
      - copied unchanged from r26131, trunk/sounds/vm-tempgreetactive.gsm
Modified:
    team/oej/02-labarea/   (props changed)
    team/oej/02-labarea/Makefile
    team/oej/02-labarea/UPGRADE.txt
    team/oej/02-labarea/app.c
    team/oej/02-labarea/apps/app_chanspy.c
    team/oej/02-labarea/apps/app_dial.c
    team/oej/02-labarea/apps/app_festival.c
    team/oej/02-labarea/apps/app_meetme.c
    team/oej/02-labarea/apps/app_mixmonitor.c
    team/oej/02-labarea/apps/app_queue.c
    team/oej/02-labarea/apps/app_voicemail.c
    team/oej/02-labarea/asterisk.c
    team/oej/02-labarea/build_tools/Makefile
    team/oej/02-labarea/build_tools/make_version
    team/oej/02-labarea/build_tools/menuselect.c
    team/oej/02-labarea/build_tools/menuselect.h
    team/oej/02-labarea/build_tools/menuselect_curses.c
    team/oej/02-labarea/build_tools/prep_moduledeps
    team/oej/02-labarea/channel.c
    team/oej/02-labarea/channels/chan_agent.c
    team/oej/02-labarea/channels/chan_iax2.c
    team/oej/02-labarea/channels/chan_oss.c
    team/oej/02-labarea/channels/chan_sip.c
    team/oej/02-labarea/channels/chan_zap.c
    team/oej/02-labarea/channels/misdn/isdn_lib.c
    team/oej/02-labarea/cli.c
    team/oej/02-labarea/codecs/codec_a_mu.c
    team/oej/02-labarea/codecs/codec_alaw.c
    team/oej/02-labarea/codecs/codec_ulaw.c
    team/oej/02-labarea/configs/func_odbc.conf.sample
    team/oej/02-labarea/configs/queues.conf.sample
    team/oej/02-labarea/configs/sip.conf.sample
    team/oej/02-labarea/configs/voicemail.conf.sample
    team/oej/02-labarea/configure.ac
    team/oej/02-labarea/file.c
    team/oej/02-labarea/frame.c
    team/oej/02-labarea/funcs/func_odbc.c
    team/oej/02-labarea/include/   (props changed)
    team/oej/02-labarea/include/asterisk/ael_structs.h
    team/oej/02-labarea/include/asterisk/app.h
    team/oej/02-labarea/include/asterisk/channel.h
    team/oej/02-labarea/include/asterisk/frame.h
    team/oej/02-labarea/include/asterisk/options.h
    team/oej/02-labarea/include/asterisk/pbx.h
    team/oej/02-labarea/include/asterisk/rtp.h
    team/oej/02-labarea/indications.c
    team/oej/02-labarea/logger.c
    team/oej/02-labarea/makeopts.in
    team/oej/02-labarea/manager.c
    team/oej/02-labarea/mxml/   (props changed)
    team/oej/02-labarea/pbx.c
    team/oej/02-labarea/pbx/ael/   (props changed)
    team/oej/02-labarea/pbx/pbx_dundi.c
    team/oej/02-labarea/pbx/pbx_spool.c
    team/oej/02-labarea/res/res_features.c
    team/oej/02-labarea/res/res_monitor.c
    team/oej/02-labarea/rtp.c
    team/oej/02-labarea/say.c
    team/oej/02-labarea/sounds.txt
    team/oej/02-labarea/static-http/ajamdemo.html
    team/oej/02-labarea/strcompat.c
    team/oej/02-labarea/utils/Makefile

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

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

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

Propchange: team/oej/02-labarea/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue May  9 10:50:20 2006
@@ -19,9 +19,4 @@
 config.status
 config.log
 makeopts.xml
-install-sh
-configure
-mkinstalldirs
 autom4te.cache
-missing
-aclocal.m4

Modified: team/oej/02-labarea/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/Makefile?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/Makefile (original)
+++ team/oej/02-labarea/Makefile Tue May  9 10:50:20 2006
@@ -365,9 +365,9 @@
 endif
 
 ifeq ($(OSARCH),Linux)
-  LIBS+=-ldl -lpthread -lncurses -lm -lresolv  #-lnjamd
+  LIBS+=-ldl -lpthread $(EDITLINE_LIBS) -lm -lresolv  #-lnjamd
 else
-  LIBS+=-lncurses -lm
+  LIBS+=$(EDITLINE_LIBS) -lm
 endif
 
 ifeq ($(OSARCH),Darwin)
@@ -395,22 +395,23 @@
 endif
 
 ifeq ($(OSARCH),NetBSD)
-  LIBS+=-lpthread -lcrypto -lm -L$(CROSS_COMPILE_TARGET)/usr/pkg/lib -lncurses
+  LIBS+=-lpthread -lcrypto -lm -L$(CROSS_COMPILE_TARGET)/usr/pkg/lib $(EDITLINE_LIBS)
 endif
 
 ifeq ($(OSARCH),OpenBSD)
-  LIBS+=-lcrypto -lpthread -lm -lncurses
+  LIBS+=-lcrypto -lpthread -lm $(EDITLINE_LIBS)
 endif
 
 ifeq ($(OSARCH),SunOS)
   LIBS+=-lpthread -ldl -lnsl -lsocket -lresolv -L$(CROSS_COMPILE_TARGET)/usr/local/ssl/lib
   OBJS+=strcompat.o
+  MENUSELECT_OBJS+=strcompat.o
   ASTLINK=
   SOLINK=-shared -fpic -L$(CROSS_COMPILE_TARGET)/usr/local/ssl/lib
 endif
 
 ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
-  CFLAGS+=$(ASTCFLAGS) $(TOPDIR_CFLAGS)
+  CFLAGS+=$(TOPDIR_CFLAGS) $(ASTCFLAGS)
 endif
 
 # This is used when generating the doxygen documentation
@@ -431,12 +432,9 @@
 	@echo " +               make install                +"  
 	@echo " +-------------------------------------------+"  
 
-all: include/autoconfig.h menuselect.makeopts cleantest depend asterisk subdirs
-
-configure:
-	- at ./bootstrap.sh
-
-include/autoconfig.h: configure
+all: config.status menuselect.makeopts cleantest depend asterisk subdirs
+
+config.status: configure
 	@CFLAGS="" ./configure
 	@echo "****"
 	@echo "**** The configure script was just executed, so 'make' needs to be"
@@ -482,10 +480,10 @@
 endif
 
 ast_expr2.c:
-	bison -d --name-prefix=ast_yy ast_expr2.y -o ast_expr2.c
+	bison -o $@ -d --name-prefix=ast_yy ast_expr2.y
 
 ast_expr2f.c:
-	flex --full ast_expr2.fl
+	flex -o $@ --full ast_expr2.fl
 
 testexpr2: ast_expr2f.c ast_expr2.c ast_expr2.h
 	gcc -g -c -DSTANDALONE ast_expr2f.c
@@ -528,7 +526,7 @@
 	rm -f $@.tmp
 
 stdtime/libtime.a:
-	CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C stdtime libtime.a
+	CFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C stdtime libtime.a
 
 asterisk: editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
 	build_tools/make_build_h > include/asterisk/build.h.tmp
@@ -543,16 +541,16 @@
 	$(CC) $(AUDIO_LIBS) -o muted muted.o
 
 subdirs: 
-	for x in $(MOD_SUBDIRS); do CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C $$x || exit 1 ; done
-	CFLAGS="$(ASTCFLAGS) $(OTHER_SUBDIR_CFLAGS)" $(MAKE) -C utils
-	CFLAGS="$(ASTCFLAGS) $(OTHER_SUBDIR_CFLAGS)" $(MAKE) -C agi
+	@for x in $(MOD_SUBDIRS); do CFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C $$x || exit 1 ; done
+	@CFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C utils
+	@CFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C agi
 
 clean-depend:
-	for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
 	rm -f .depend .tags-depend
 
 clean: clean-depend
-	for x in $(SUBDIRS); do $(MAKE) -C $$x clean || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x clean || exit 1 ; done
 	rm -f *.o *.so asterisk
 	rm -f defaults.h
 	rm -f include/asterisk/build.h
@@ -708,7 +706,7 @@
 	if [ -f mpg123-0.59r/mpg123 ]; then $(MAKE) -C mpg123-0.59r install; fi
 
 install-subdirs:
-	for x in $(SUBDIRS); do $(MAKE) -C $$x install || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x install || exit 1 ; done
 
 NEWMODS=$(notdir $(wildcard */*.so))
 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
@@ -884,19 +882,37 @@
 	$(MAKE) -C mpg123-0.59r $(MPG123TARG)
 
 config:
-	if [ -d /etc/rc.d/init.d ]; then \
-		$(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk /etc/rc.d/init.d/asterisk; \
-		/sbin/chkconfig --add asterisk; \
-	elif [ -d /etc/init.d ]; then \
-		$(INSTALL) -m 755 init.asterisk /etc/init.d/asterisk; \
-	fi 
+	@if [ "${OSARCH}" = "Linux" ]; then \
+		if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk /etc/rc.d/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/debian_version ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk /etc/init.d/asterisk; \
+			/usr/sbin/update-rc.d asterisk start 10 2 3 4 5 . stop 91 2 3 4 5 .; \
+		elif [ -f /etc/gentoo-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk /etc/init.d/asterisk; \
+			/sbin/rc-update add asterisk default; \
+		elif [ -f /etc/mandrake-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.mandrake.asterisk /etc/rc.d/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk /etc/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/slackware-version ]; then \
+			echo "Slackware is not currently supported, although an init script does exist for it." \
+		else \
+			echo "We could not install init scripts for your distribution."; \
+		fi \
+	else \
+		echo "We could not install init scripts for your operating system."; \
+	fi
 
 dont-optimize: _all
 
 valgrind: dont-optimize
 
 depend: include/asterisk/version.h .depend defaults.h 
-	for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
 
 .depend: include/asterisk/version.h defaults.h
 	build_tools/mkdep $(CFLAGS) $(wildcard *.c)
@@ -981,7 +997,7 @@
 menuselect: build_tools/menuselect makeopts.xml
 	- at build_tools/menuselect ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!"
 
-build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect_curses.c build_tools/menuselect.h include/autoconfig.h strcompat.o mxml/libmxml.a
+build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect_curses.c build_tools/menuselect.h include/autoconfig.h mxml/libmxml.a $(MENUSELECT_OBJS)
 	$(MAKE) -C build_tools menuselect
 
 mxml/libmxml.a:

Modified: team/oej/02-labarea/UPGRADE.txt
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/UPGRADE.txt?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/UPGRADE.txt (original)
+++ team/oej/02-labarea/UPGRADE.txt Tue May  9 10:50:20 2006
@@ -92,6 +92,10 @@
   to enable this new behavior. If you do not specify or comment out this 
   option, it will default to "no" to keep backward compatability with the old 
   behavior.
+
+* The app_queue application now has the ability to use MixMonitor to 
+  record conversations queue members are having with queue callers. Please
+  see configs/queues.conf.sample for more information on this option.
 
 * ast_play_and_record would attempt to cancel the recording if a DTMF
   '0' was received.  This behavior was not documented in most of the

Modified: team/oej/02-labarea/app.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/app.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/app.c (original)
+++ team/oej/02-labarea/app.c Tue May  9 10:50:20 2006
@@ -142,86 +142,6 @@
 		fto = to = 1000000000;
 	res = ast_readstring_full(c, s, maxlen, to, fto, "#", audiofd, ctrlfd);
 	return res;
-}
-
-int ast_app_getvoice(struct ast_channel *c, char *dest, char *dstfmt, char *prompt, int silence, int maxsec)
-{
-	int res;
-	struct ast_filestream *writer;
-	int rfmt;
-	int totalms=0, total;
-	
-	struct ast_frame *f;
-	struct ast_dsp *sildet;
-	/* Play prompt if requested */
-	if (prompt) {
-		res = ast_stream_and_wait(c, prompt, c->language, "");
-		if (res < 0)
-			return res;
-	}
-	rfmt = c->readformat;
-	res = ast_set_read_format(c, AST_FORMAT_SLINEAR);
-	if (res < 0) {
-		ast_log(LOG_WARNING, "Unable to set to linear mode, giving up\n");
-		return -1;
-	}
-	sildet = ast_dsp_new();
-	if (!sildet) {
-		ast_log(LOG_WARNING, "Unable to create silence detector :(\n");
-		return -1;
-	}
-	writer = ast_writefile(dest, dstfmt, "Voice file", 0, 0, 0666);
-	if (!writer) {
-		ast_log(LOG_WARNING, "Unable to open file '%s' in format '%s' for writing\n", dest, dstfmt);
-		ast_dsp_free(sildet);
-		return -1;
-	}
-	for(;;) {
-		if ((res = ast_waitfor(c, 2000)) < 0) {
-			ast_log(LOG_NOTICE, "Waitfor failed while recording file '%s' format '%s'\n", dest, dstfmt);
-			break;
-		}
-		if (res) {
-			f = ast_read(c);
-			if (!f) {
-				ast_log(LOG_NOTICE, "Hungup while recording file '%s' format '%s'\n", dest, dstfmt);
-				break;
-			}
-			if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#')) {
-				/* Ended happily with DTMF */
-				ast_frfree(f);
-				break;
-			} else if (f->frametype == AST_FRAME_VOICE) {
-				ast_dsp_silence(sildet, f, &total); 
-				if (total > silence) {
-					/* Ended happily with silence */
-					ast_frfree(f);
-					break;
-				}
-				totalms += f->samples / 8;
-				if (totalms > maxsec * 1000) {
-					/* Ended happily with too much stuff */
-					ast_log(LOG_NOTICE, "Constraining voice on '%s' to %d seconds\n", c->name, maxsec);
-					ast_frfree(f);
-					break;
-				}
-				res = ast_writestream(writer, f);
-				if (res < 0) {
-					ast_log(LOG_WARNING, "Failed to write to stream at %s!\n", dest);
-					ast_frfree(f);
-					break;
-				}
-					
-			}
-			ast_frfree(f);
-		}
-	}
-	res = ast_set_read_format(c, rfmt);
-	if (res)
-		ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", c->name);
-	ast_dsp_free(sildet);
-	ast_closestream(writer);
-	return 0;
 }
 
 static int (*ast_has_voicemail_func)(const char *mailbox, const char *folder) = NULL;

Modified: team/oej/02-labarea/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_chanspy.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_chanspy.c (original)
+++ team/oej/02-labarea/apps/app_chanspy.c Tue May  9 10:50:20 2006
@@ -56,7 +56,7 @@
 #define ALL_DONE(u, ret) LOCAL_USER_REMOVE(u); return ret;
 #define get_volfactor(x) x ? ((x > 0) ? (1 << x) : ((1 << abs(x)) * -1)) : 0
 
-static const char *synopsis = "Listen to the audio of an active channel";
+static const char *tdesc = "Listen to the audio of an active channel";
 static const char *app = "ChanSpy";
 static const char *desc = 
 "  ChanSpy([chanprefix][|options]): This application is used to listen to the\n"
@@ -584,12 +584,12 @@
 static int load_module(void *mod)
 {
 	__mod_desc = mod;
-	return ast_register_application(app, chanspy_exec, synopsis, desc);
+	return ast_register_application(app, chanspy_exec, tdesc, desc);
 }
 
 static const char *description(void)
 {
-	return (char *) synopsis;
+	return (char *) tdesc;
 }
 
 static const char *key(void)

Modified: team/oej/02-labarea/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_dial.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_dial.c (original)
+++ team/oej/02-labarea/apps/app_dial.c Tue May  9 10:50:20 2006
@@ -482,7 +482,7 @@
 					ast_clear_flag(o, DIAL_STILLGOING);	
 					HANDLE_CAUSE(cause, in);
 				} else {
-					ast_rtp_make_compatible(c, in);
+					ast_rtp_make_compatible(c, in, single);
 					if (c->cid.cid_num)
 						free(c->cid.cid_num);
 					c->cid.cid_num = NULL;
@@ -550,6 +550,8 @@
 							       OPT_CALLEE_HANGUP | OPT_CALLER_HANGUP |
 							       OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR |
 							       DIAL_NOFORWARDHTML);
+						/* Setup early media if appropriate */
+						ast_rtp_early_media(in, peer);
 					}
 					/* If call has been answered, then the eventual hangup is likely to be normal hangup */
 					in->hangupcause = AST_CAUSE_NORMAL_CLEARING;
@@ -576,6 +578,9 @@
 				case AST_CONTROL_RINGING:
 					if (option_verbose > 2)
 						ast_verbose(VERBOSE_PREFIX_3 "%s is ringing\n", c->name);
+					/* Setup early media if appropriate */
+					if (single)
+						ast_rtp_early_media(in, c);
 					if (!(*sentringing) && !ast_test_flag(outgoing, OPT_MUSICBACK)) {
 						ast_indicate(in, AST_CONTROL_RINGING);
 						(*sentringing)++;
@@ -584,6 +589,9 @@
 				case AST_CONTROL_PROGRESS:
 					if (option_verbose > 2)
 						ast_verbose (VERBOSE_PREFIX_3 "%s is making progress passing it to %s\n", c->name, in->name);
+					/* Setup early media if appropriate */
+					if (single)
+						ast_rtp_early_media(in, c);
 					if (!ast_test_flag(outgoing, OPT_RINGBACK))
 						ast_indicate(in, AST_CONTROL_PROGRESS);
 					break;
@@ -595,6 +603,8 @@
 				case AST_CONTROL_PROCEEDING:
 					if (option_verbose > 2)
 						ast_verbose (VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", c->name, in->name);
+					if (single)
+						ast_rtp_early_media(in, c);
 					if (!ast_test_flag(outgoing, OPT_RINGBACK))
 						ast_indicate(in, AST_CONTROL_PROCEEDING);
 					break;
@@ -1056,7 +1066,7 @@
 		}
 
 		/* Setup outgoing SDP to match incoming one */
-		ast_rtp_make_compatible(tmp->chan, chan);
+		ast_rtp_make_compatible(tmp->chan, chan, !outgoing && !rest);
 		
 		/* Inherit specially named variables from parent channel */
 		ast_channel_inherit_variables(chan, tmp->chan);
@@ -1550,6 +1560,7 @@
 		sentringing = 0;
 		ast_indicate(chan, -1);
 	}
+	ast_rtp_early_media(chan, NULL);
 	hanguptree(outgoing, NULL);
 	pbx_builtin_setvar_helper(chan, "DIALSTATUS", status);
 	if (option_debug)

Modified: team/oej/02-labarea/apps/app_festival.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_festival.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_festival.c (original)
+++ team/oej/02-labarea/apps/app_festival.c Tue May  9 10:50:20 2006
@@ -305,6 +305,7 @@
 	char *data;	
 	char *intstr;
 	struct ast_config *cfg;
+	char *newfestivalcommand;
 
 	if (ast_strlen_zero(vdata)) {
 		ast_log(LOG_WARNING, "festival requires an argument (text)\n");
@@ -337,6 +338,22 @@
 	}
 	if (!(festivalcommand = ast_variable_retrieve(cfg, "general", "festivalcommand"))) {
 		festivalcommand = "(tts_textasterisk \"%s\" 'file)(quit)\n";
+	} else { /* This else parses the festivalcommand that we're sent from the config file for \n's, etc */
+		int i, j;
+		newfestivalcommand = alloca(strlen(festivalcommand) + 1);
+
+		for (i = 0, j = 0; i < strlen(festivalcommand); i++) {
+			if (festivalcommand[i] == '\\' && festivalcommand[i + 1] == 'n') {
+				newfestivalcommand[j++] = '\n';
+				i++;
+			} else if (festivalcommand[i] == '\\') {
+				newfestivalcommand[j++] = festivalcommand[i + 1];
+				i++;
+			} else
+				newfestivalcommand[j++] = festivalcommand[i];
+		}
+		newfestivalcommand[j] = '\0';
+		festivalcommand = newfestivalcommand;
 	}
 	
 	if (!(data = ast_strdupa(vdata))) {

Modified: team/oej/02-labarea/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_meetme.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_meetme.c (original)
+++ team/oej/02-labarea/apps/app_meetme.c Tue May  9 10:50:20 2006
@@ -1,4 +1,3 @@
-
 /*
  * Asterisk -- An open source telephony toolkit.
  *
@@ -2151,9 +2150,12 @@
 								break;
 							} else {
 								/* Pin invalid */
-								res = ast_streamfile(chan, "conf-invalidpin", chan->language);
-								if (!res)
-									ast_waitstream(chan, AST_DIGIT_ANY);
+								if (!ast_streamfile(chan, "conf-invalidpin", chan->language))
+									res = ast_waitstream(chan, AST_DIGIT_ANY);
+								else {
+									ast_log(LOG_WARNING, "Couldn't play invalid pin msg!\n");
+									break;
+								}
 								if (res < 0) {
 									AST_LIST_LOCK(&confs);
 									cnf->refcount--;
@@ -2287,6 +2289,11 @@
 			case 77: /* M: Mute */ 
 				if (user) {
 					user->adminflags |= ADMINFLAG_MUTED;
+					manager_event(EVENT_FLAG_CALL, "MeetmeMute",
+						"Status: on"
+						"Meetme: %s\r\n"
+						"Usernum: %d\r\n",
+						cnf->confno, user->user_no);
 				} else {
 					ast_log(LOG_NOTICE, "Specified User not found!\n");
 				}
@@ -2306,6 +2313,11 @@
 			case 109: /* m: Unmute */ 
 				if (user && (user->adminflags & ADMINFLAG_MUTED)) {
 					user->adminflags ^= ADMINFLAG_MUTED;
+					manager_event(EVENT_FLAG_CALL, "MeetmeMute",
+						"Status: off"
+						"Meetme: %s\r\n"
+						"Usernum: %d\r\n",
+						cnf->confno, user->user_no);
 				} else {
 					ast_log(LOG_NOTICE, "Specified User not found or he muted himself!\n");
 				}

Modified: team/oej/02-labarea/apps/app_mixmonitor.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_mixmonitor.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_mixmonitor.c (original)
+++ team/oej/02-labarea/apps/app_mixmonitor.c Tue May  9 10:50:20 2006
@@ -133,9 +133,9 @@
 	if (!chan)
 		return;
 
-	ast_mutex_lock(&chan->lock);
+	ast_channel_lock(chan);
 	ast_channel_spy_remove(chan, spy);
-	ast_mutex_unlock(&chan->lock);
+	ast_channel_unlock(chan);
 }
 
 static int startmon(struct ast_channel *chan, struct ast_channel_spy *spy) 
@@ -146,9 +146,9 @@
 	if (!chan)
 		return -1;
 
-	ast_mutex_lock(&chan->lock);
+	ast_channel_lock(chan);
 	res = ast_channel_spy_add(chan, spy);
-	ast_mutex_unlock(&chan->lock);
+	ast_channel_unlock(chan);
 		
 	if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan)))
 		ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE);	
@@ -410,13 +410,9 @@
 
 	LOCAL_USER_ADD(u);
 
-	if (!ast_mutex_lock(&chan->lock)) {
-		ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
-		ast_mutex_unlock(&chan->lock);
-	} else {
-		ast_log(LOG_WARNING, "Could not lock %s to stop MixMonitor on it\n", 
-				chan->name);
-	}
+	ast_channel_lock(chan);
+	ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
+	ast_channel_unlock(chan);
 
 	LOCAL_USER_REMOVE(u);
 
@@ -440,7 +436,7 @@
 	else if (!strcasecmp(argv[1], "stop"))
 		ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
 
-	ast_mutex_unlock(&chan->lock);
+	ast_channel_unlock(chan);
 
 	return RESULT_SUCCESS;
 }

Modified: team/oej/02-labarea/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_queue.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_queue.c (original)
+++ team/oej/02-labarea/apps/app_queue.c Tue May  9 10:50:20 2006
@@ -93,12 +93,14 @@
 #include "asterisk/devicestate.h"
 #include "asterisk/stringfields.h"
 
-#define QUEUE_STRATEGY_RINGALL		0
-#define QUEUE_STRATEGY_ROUNDROBIN	1
-#define QUEUE_STRATEGY_LEASTRECENT	2
-#define QUEUE_STRATEGY_FEWESTCALLS	3
-#define QUEUE_STRATEGY_RANDOM		4
-#define QUEUE_STRATEGY_RRMEMORY		5
+enum {
+	QUEUE_STRATEGY_RINGALL = 0,
+	QUEUE_STRATEGY_ROUNDROBIN,
+	QUEUE_STRATEGY_LEASTRECENT,
+	QUEUE_STRATEGY_FEWESTCALLS,
+	QUEUE_STRATEGY_RANDOM,
+	QUEUE_STRATEGY_RRMEMORY
+};
 
 static struct strategy {
 	int strategy;
@@ -129,7 +131,7 @@
 static char *synopsis = "Queue a call for a call queue";
 
 static char *descrip =
-"  Queue(queuename[|options[|URL][|announceoverride][|timeout]]):\n"
+"  Queue(queuename[|options[|URL][|announceoverride][|timeout][|AGI]):\n"
 "Queues an incoming call in a particular call queue as defined in queues.conf.\n"
 "This application will return to the dialplan if the queue does not exist, or\n"
 "any of the join options cause the caller to not enter the queue.\n"
@@ -148,6 +150,8 @@
 "up by another user.\n"
 "  The optional URL will be sent to the called party if the channel supports\n"
 "it.\n"
+"  The optional AGI parameter will setup an AGI script to be executed on the \n"
+"calling party's channel once they are connected to a queue member.\n"
 "  The timeout will cause the queue to fail out after a specified number of\n"
 "seconds, checked between each queues.conf 'timeout' and 'retry' cycle.\n"
 "  This application sets the following channel variable upon completion:\n"
@@ -237,6 +241,9 @@
 /*! \brief queues.conf [general] option */
 static int autofill_default = 0;
 
+/*! \brief queues.conf [general] option */
+static int montype_default = 0;
+
 enum queue_result {
 	QUEUE_UNKNOWN = 0,
 	QUEUE_TIMEOUT = 1,
@@ -329,6 +336,7 @@
 	unsigned int eventwhencalled:1;
 	unsigned int leavewhenempty:2;
 	unsigned int ringinuse:1;
+	unsigned int setinterfacevar:1;
 	unsigned int reportholdtime:1;
 	unsigned int wrapped:1;
 	unsigned int timeoutrestart:1;
@@ -345,6 +353,7 @@
 	int servicelevel;               /*!< seconds setting for servicelevel*/
 	int callscompletedinsl;         /*!< Number of calls answered with servicelevel*/
 	char monfmt[8];                 /*!< Format to use when recording calls */
+	int montype;			/*!< Monitor type  Monitor vs. MixMonitor */
 	char sound_next[80];            /*!< Sound file: "Your call is now first in line" (def. queue-youarenext) */
 	char sound_thereare[80];        /*!< Sound file: "There are currently" (def. queue-thereare) */
 	char sound_calls[80];           /*!< Sound file: "calls waiting to speak to a representative." (def. queue-callswaiting)*/
@@ -579,7 +588,9 @@
 	q->roundingseconds = 0; /* Default - don't announce seconds */
 	q->servicelevel = 0;
 	q->ringinuse = 1;
+	q->setinterfacevar = 0;
 	q->autofill = autofill_default;
+	q->montype = montype_default;
 	q->moh[0] = '\0';
 	q->announce[0] = '\0';
 	q->context[0] = '\0';
@@ -633,6 +644,8 @@
 			q->timeout = DEFAULT_TIMEOUT;
 	} else if (!strcasecmp(param, "ringinuse")) {
 		q->ringinuse = ast_true(val);
+	} else if (!strcasecmp(param, "setinterfacevar")) {
+		q->setinterfacevar = ast_true(val);
 	} else if (!strcasecmp(param, "monitor-join")) {
 		q->monjoin = ast_true(val);
 	} else if (!strcasecmp(param, "monitor-format")) {
@@ -705,6 +718,9 @@
 		q->wrapuptime = atoi(val);
 	} else if (!strcasecmp(param, "autofill")) {
 		q->autofill = ast_true(val);
+	} else if (!strcasecmp(param, "monitor-type")) {
+		if (!strcasecmp(val, "mixmonitor"))
+			q->montype = 1;
 	} else if (!strcasecmp(param, "autopause")) {
 		q->autopause = ast_true(val);
 	} else if (!strcasecmp(param, "maxlen")) {
@@ -718,7 +734,7 @@
 		if (q->strategy < 0) {
 			ast_log(LOG_WARNING, "'%s' isn't a valid strategy for queue '%s', using ringall instead\n",
 				val, q->name);
-			q->strategy = 0;
+			q->strategy = QUEUE_STRATEGY_RINGALL;
 		}
 	} else if (!strcasecmp(param, "joinempty")) {
 		if (!strcasecmp(val, "strict"))
@@ -1200,7 +1216,9 @@
 	/* Set our last_pos indicators */
  	qe->last_pos = now;
 	qe->last_pos_said = qe->pos;
-	ast_moh_start(qe->chan, qe->moh);
+	/* Don't restart music on hold if we're about to exit the caller from the queue */
+	if (res)
+		ast_moh_start(qe->chan, qe->moh);
 
 	return res;
 }
@@ -1245,9 +1263,8 @@
 			manager_event(EVENT_FLAG_CALL, "Leave",
 				"Channel: %s\r\nQueue: %s\r\nCount: %d\r\n",
 				qe->chan->name, q->name,  q->count);
-#if 0
-ast_log(LOG_NOTICE, "Queue '%s' Leave, Channel '%s'\n", q->name, qe->chan->name );
-#endif
+			if (option_debug)
+				ast_log(LOG_DEBUG, "Queue '%s' Leave, Channel '%s'\n", q->name, qe->chan->name );
 			/* Take us out of the queue */
 			if (prev)
 				prev->next = cur->next;
@@ -1511,7 +1528,7 @@
 				ast_log(LOG_DEBUG, "Nobody left to try ringing in queue\n");
 			break;
 		}
-		if (!qe->parent->strategy) {
+		if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
 			struct callattempt *cur;
 			/* Ring everyone who shares this best metric (for ringall) */
 			for (cur = outgoing; cur; cur = cur->q_next) {
@@ -1671,7 +1688,7 @@
 				numlines++;
 			}
 			if (pos > 1 /* found */ || !stillgoing /* nobody listening */ ||
-					 qe->parent->strategy /* ring would not be delivered */)
+					 (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) /* ring would not be delivered */)
 				break;
 			/* On "ringall" strategy we only move to the next penalty level
 			   when *all* ringing phones are done in the current penalty level */
@@ -1769,7 +1786,7 @@
 							if (in->cdr)
 								ast_cdr_busy(in->cdr);
 							do_hang(o);
-							if (qe->parent->strategy) {
+							if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 								if (qe->parent->timeoutrestart)
 									*to = orig;
 								ring_one(qe, outgoing, &numbusies);
@@ -1782,7 +1799,7 @@
 							if (in->cdr)
 								ast_cdr_busy(in->cdr);
 							do_hang(o);
-							if (qe->parent->strategy) {
+							if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 								if (qe->parent->timeoutrestart)
 									*to = orig;
 								ring_one(qe, outgoing, &numbusies);
@@ -1809,7 +1826,7 @@
 					ast_frfree(f);
 				} else {
 					do_hang(o);
-					if (qe->parent->strategy) {
+					if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 						if (qe->parent->timeoutrestart)
 							*to = orig;
 						ring_one(qe, outgoing, &numbusies);
@@ -1910,7 +1927,7 @@
 		if (option_debug)
 			ast_log(LOG_DEBUG, "There are %d available members.\n", avl);
 	
-		if (qe->parent->strategy == 1) {
+		if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
 			if (option_debug)
 				ast_log(LOG_DEBUG, "Even though there are %d available members, the strategy is ringall so only the head call is allowed in!\n", avl);
 			avl = 1;
@@ -2068,7 +2085,7 @@
 	return 0;
 }
 
-static int try_calling(struct queue_ent *qe, const char *options, char *announceoverride, const char *url, int *go_on)
+static int try_calling(struct queue_ent *qe, const char *options, char *announceoverride, const char *url, int *go_on, const char *agi)
 {
 	struct member *cur;
 	struct callattempt *outgoing=NULL; /* the queue we are building */
@@ -2080,6 +2097,7 @@
 	struct ast_channel *which;
 	struct callattempt *lpeer;
 	struct member *member;
+	struct ast_app *app;
 	int res = 0, bridge = 0;
 	int numbusies = 0;
 	int x=0;
@@ -2089,6 +2107,17 @@
 	time_t now = time(NULL);
 	struct ast_bridge_config bridge_config;
 	char nondataquality = 1;
+	char *agiexec = NULL;
+	int ret = 0;
+	const char *monitorfilename;
+	const char *monitor_exec;
+	const char *monitor_options;
+	char tmpid[256], tmpid2[256];
+	char meid[1024], meid2[1024];
+	char mixmonargs[1512];
+	struct ast_app *mixmonapp = NULL;
+	char *p;
+
 
 	memset(&bridge_config, 0, sizeof(bridge_config));
 	time(&now);
@@ -2274,23 +2303,90 @@
 		}
 		/* Begin Monitoring */
 		if (qe->parent->monfmt && *qe->parent->monfmt) {
-			const char *monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
-			if (pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC") || pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC_ARGS"))
-				which = qe->chan;
-			else
-				which = peer;
-			if (monitorfilename)
-				ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1 );
-			else if (qe->chan->cdr) 
-				ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1 );
-			else {
-				/* Last ditch effort -- no CDR, make up something */
-				char tmpid[256];
-				snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
-				ast_monitor_start(which, qe->parent->monfmt, tmpid, 1 );
-			}
-			if (qe->parent->monjoin)
-				ast_monitor_setjoinfiles(which, 1);
+			if (!qe->parent->montype) {
+				if (option_debug)
+					ast_log(LOG_DEBUG, "Starting Monitor as requested.\n");
+				monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
+				if (pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC") || pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC_ARGS"))
+					which = qe->chan;
+				else
+					which = peer;
+				if (monitorfilename)
+					ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1 );
+				else if (qe->chan->cdr) 
+					ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1 );
+				else {
+					/* Last ditch effort -- no CDR, make up something */
+					snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
+					ast_monitor_start(which, qe->parent->monfmt, tmpid, 1 );
+				}
+				if (qe->parent->monjoin)
+					ast_monitor_setjoinfiles(which, 1);
+			} else {
+				if (option_debug)
+					ast_log(LOG_DEBUG, "Starting MixMonitor as requested.\n");
+				monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
+				if (!monitorfilename) {
+					if (qe->chan->cdr)
+						ast_copy_string(tmpid, qe->chan->cdr->uniqueid, sizeof(tmpid)-1);
+					else 
+						snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
+				} else {
+					ast_copy_string(tmpid2, monitorfilename, sizeof(tmpid2)-1);
+					for (p = tmpid2; *p ; p++) {
+						if (*p == '^' && *(p+1) == '{') {
+							*p = '$';
+						}
+					}
+
+					pbx_substitute_variables_helper(qe->chan, tmpid2, tmpid, sizeof(tmpid) - 1);
+				}
+
+				monitor_exec = pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC");
+				monitor_options = pbx_builtin_getvar_helper(qe->chan, "MONITOR_OPTIONS");
+
+				if (monitor_exec) {
+					ast_copy_string(meid2, monitor_exec, sizeof(meid2)-1);
+					for (p = meid2; *p ; p++) {
+						if (*p == '^' && *(p+1) == '{') {
+							*p = '$';
+						}
+					}
+					pbx_substitute_variables_helper(qe->chan, meid2, meid, sizeof(meid) - 1);
+				} 
+	
+				snprintf(tmpid2, sizeof(tmpid2)-1, "%s.%s", tmpid, qe->parent->monfmt);
+
+				mixmonapp = pbx_findapp("MixMonitor");
+
+				if (strchr(tmpid2, '|')) {
+					ast_log(LOG_WARNING, "monitor-format (in queues.conf) and MONITOR_FILENAME cannot contain a '|'! Not recording.\n");
+					mixmonapp = NULL;
+				}
+				
+				if (strchr(monitor_options, '|')) {
+					ast_log(LOG_WARNING, "MONITOR_OPTIONS cannot contain a '|'! Not recording.\n");
+					mixmonapp = NULL;
+				}
+
+				if (!monitor_options)
+					monitor_options = ast_strdupa("");
+
+				if (mixmonapp) {
+					if (!ast_strlen_zero(monitor_exec) && !ast_strlen_zero(monitor_options)) 
+						snprintf(mixmonargs, sizeof(mixmonargs)-1, "%s|b%s|%s", tmpid2, monitor_options, monitor_exec);
+					else 
+						snprintf(mixmonargs, sizeof(mixmonargs)-1, "%s|b%s", tmpid2, monitor_options);
+						
+					if (option_debug)
+						ast_log(LOG_DEBUG, "Arguments being passed to MixMonitor: %s\n", mixmonargs);
+
+					ret = pbx_exec(qe->chan, mixmonapp, mixmonargs);
+
+				} else
+					ast_log(LOG_WARNING, "Asked to run MixMonitor on this call, but cannot find the MixMonitor app!\n");
+
+			}
 		}
 		/* Drop out of the queue at this point, to prepare for next caller */
 		leave_queue(qe);			
@@ -2299,6 +2395,18 @@
 	 			ast_log(LOG_DEBUG, "app_queue: sendurl=%s.\n", url);
  			ast_channel_sendurl(peer, url);
  		}
+		if (qe->parent->setinterfacevar)
+				pbx_builtin_setvar_helper(qe->chan, "MEMBERINTERFACE", member->interface);
+		if (!ast_strlen_zero(agi)) {
+			if (option_debug)
+				ast_log(LOG_DEBUG, "app_queue: agi=%s.\n", agi);
+			app = pbx_findapp("agi");
+			if (app) {
+				agiexec = ast_strdupa(agi);
+				ret = pbx_exec(qe->chan, app, agiexec);
+			} else 
+				ast_log(LOG_WARNING, "Asked to execute an AGI on this channel, but could not find application (agi)!\n");
+		}
 		ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "CONNECT", "%ld|%s", (long)time(NULL) - qe->start, peer->uniqueid);
 		if (qe->parent->eventwhencalled)
 			manager_event(EVENT_FLAG_AGENT, "AgentConnect",
@@ -2909,6 +3017,7 @@
 		 AST_APP_ARG(url);
 		 AST_APP_ARG(announceoverride);
 		 AST_APP_ARG(queuetimeoutstr);
+		 AST_APP_ARG(agi);
 	);
 	
 	/* Our queue entry */
@@ -3039,7 +3148,7 @@
 					/* Make a position announcement, if enabled */
 					if (qe.parent->announcefrequency && !ringing)
 						res = say_position(&qe);
-					if (res && valid_exit(&qe, res)) {
+					if (res) {
 						 ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%s|%d", qe.digits, qe.pos);
 						break;
 					}
@@ -3057,7 +3166,7 @@
 				}
 
 				/* Try calling all queue members for 'timeout' seconds */
-				res = try_calling(&qe, args.options, args.announceoverride, args.url, &go_on);
+				res = try_calling(&qe, args.options, args.announceoverride, args.url, &go_on, args.agi);
 
 				if (res) {
 					if (res < 0) {
@@ -3364,6 +3473,10 @@
 			autofill_default = 0;
 			if ((general_val = ast_variable_retrieve(cfg, "general", "autofill")))
 				autofill_default = ast_true(general_val);
+			montype_default = 0;
+			if ((general_val = ast_variable_retrieve(cfg, "general", "monitor-type")))
+				if (!strcasecmp(general_val, "mixmonitor"))
+					montype_default = 1;
 		} else {	/* Define queue */
 			/* Look for an existing one */
 			AST_LIST_TRAVERSE(&queues, q, list) {
@@ -3717,12 +3830,13 @@
 		}
 		ast_mutex_unlock(&q->lock);
 	}
-	AST_LIST_UNLOCK(&queues);
 
 	astman_append(s,
 		"Event: QueueStatusComplete\r\n"
 		"%s"
 		"\r\n",idText);
+
+	AST_LIST_UNLOCK(&queues);
 
 
 	return RESULT_SUCCESS;

Modified: team/oej/02-labarea/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_voicemail.c?rev=26133&r1=26132&r2=26133&view=diff
==============================================================================
--- team/oej/02-labarea/apps/app_voicemail.c (original)
+++ team/oej/02-labarea/apps/app_voicemail.c Tue May  9 10:50:20 2006
@@ -37,6 +37,8 @@
  * 07-11-2005 : An issue with voicemail synchronization has been fixed by GDS Partners (www.gdspartners.com)
  *				 Stojan Sljivic <stojan.sljivic at gdspartners.com>
  *
+ * 12-04-2006 : Support for Polish added by DIR (www.dir.pl)
+ *				 Bartosz Supczinski <Bartosz.Supczinski at dir.pl>
  */
 
 #include <stdlib.h>
@@ -120,7 +122,7 @@
 #define VM_DELETE		(1 << 12)
 #define VM_ALLOCED		(1 << 13)
 #define VM_SEARCH		(1 << 14)
-
+#define VM_TEMPGREETWARN	(1 << 15)	/*!< Remind user tempgreeting is set */
 #define ERROR_LOCK_PATH		-100
 
 enum {
@@ -161,6 +163,7 @@
 	\arg \b fr - French
 	\arg \b it = Italian
 	\arg \b nl - Dutch
+	\arg \b pt - Polish
 	\arg \b pt - Portuguese
 	\arg \b gr - Greek
 	\arg \b no - Norwegian
@@ -179,6 +182,16 @@
 NB these are plural:
 \arg \b vm-INBOX	nieuwe (nl)
 \arg \b vm-Old		oude (nl)
+
+Polish uses:
+\arg \b vm-new-a	'new', feminine singular accusative
+\arg \b vm-new-e	'new', feminine plural accusative
+\arg \b vm-new-ych	'new', feminine plural genitive
+\arg \b vm-old-a	'old', feminine singular accusative
+\arg \b vm-old-e	'old', feminine plural accusative
+\arg \b vm-old-ych	'old', feminine plural genitive
+\arg \b digits/1-a	'one', not always same as 'digits/1'
+\arg \b digits/2-ie	'two', not always same as 'digits/2'
 
 Swedish uses:
 \arg \b vm-nytt		singular of 'new'
@@ -467,7 +480,9 @@
 	} else if (!strcasecmp(var,"sendvoicemail")){
 		ast_set2_flag(vmu, ast_true(value), VM_SVMAIL);	
 	} else if (!strcasecmp(var, "review")){
-		ast_set2_flag(vmu, ast_true(value), VM_REVIEW);	
+		ast_set2_flag(vmu, ast_true(value), VM_REVIEW);
+	} else if (!strcasecmp(var, "tempgreetwarn")){
+		ast_set2_flag(vmu, ast_true(value), VM_TEMPGREETWARN);	
 	} else if (!strcasecmp(var, "operator")){
 		ast_set2_flag(vmu, ast_true(value), VM_OPERATOR);	
 	} else if (!strcasecmp(var, "envelope")){
@@ -571,6 +586,7 @@
 					apply_option(retval, tmp->name, tmp->value);
 				tmp = tmp->next;
 			} 

[... 7821 lines stripped ...]


More information about the asterisk-commits mailing list