[asterisk-commits] oej: branch oej/jitterbuffer-1.2 r46605 - in /team/oej/jitterbuffer-1.2: ./ a...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Oct 31 02:16:13 MST 2006


Author: oej
Date: Tue Oct 31 03:16:12 2006
New Revision: 46605

URL: http://svn.digium.com/view/asterisk?rev=46605&view=rev
Log:
Reset automerge on this branch

Added:
    team/oej/jitterbuffer-1.2/channels/misdn/fac.c
      - copied unchanged from r46430, branches/1.2/channels/misdn/fac.c
    team/oej/jitterbuffer-1.2/channels/misdn/fac.h
      - copied unchanged from r46430, branches/1.2/channels/misdn/fac.h
    team/oej/jitterbuffer-1.2/channels/misdn_config.c
      - copied unchanged from r46430, branches/1.2/channels/misdn_config.c
Removed:
    team/oej/jitterbuffer-1.2/channels/chan_misdn_config.c
    team/oej/jitterbuffer-1.2/channels/misdn/mISDN.patch
    team/oej/jitterbuffer-1.2/channels/misdn/portinfo.c
Modified:
    team/oej/jitterbuffer-1.2/   (props changed)
    team/oej/jitterbuffer-1.2/.cleancount
    team/oej/jitterbuffer-1.2/CREDITS
    team/oej/jitterbuffer-1.2/LICENSE
    team/oej/jitterbuffer-1.2/Makefile
    team/oej/jitterbuffer-1.2/acl.c
    team/oej/jitterbuffer-1.2/apps/app_alarmreceiver.c
    team/oej/jitterbuffer-1.2/apps/app_authenticate.c
    team/oej/jitterbuffer-1.2/apps/app_chanspy.c
    team/oej/jitterbuffer-1.2/apps/app_dial.c
    team/oej/jitterbuffer-1.2/apps/app_directory.c
    team/oej/jitterbuffer-1.2/apps/app_externalivr.c
    team/oej/jitterbuffer-1.2/apps/app_festival.c
    team/oej/jitterbuffer-1.2/apps/app_hasnewvoicemail.c
    team/oej/jitterbuffer-1.2/apps/app_macro.c
    team/oej/jitterbuffer-1.2/apps/app_math.c
    team/oej/jitterbuffer-1.2/apps/app_meetme.c
    team/oej/jitterbuffer-1.2/apps/app_mixmonitor.c
    team/oej/jitterbuffer-1.2/apps/app_page.c
    team/oej/jitterbuffer-1.2/apps/app_playback.c
    team/oej/jitterbuffer-1.2/apps/app_queue.c
    team/oej/jitterbuffer-1.2/apps/app_random.c
    team/oej/jitterbuffer-1.2/apps/app_record.c
    team/oej/jitterbuffer-1.2/apps/app_rpt.c
    team/oej/jitterbuffer-1.2/apps/app_voicemail.c
    team/oej/jitterbuffer-1.2/asterisk.c
    team/oej/jitterbuffer-1.2/cdr.c
    team/oej/jitterbuffer-1.2/cdr/Makefile
    team/oej/jitterbuffer-1.2/cdr/cdr_odbc.c
    team/oej/jitterbuffer-1.2/cdr/cdr_tds.c
    team/oej/jitterbuffer-1.2/channel.c
    team/oej/jitterbuffer-1.2/channels/Makefile
    team/oej/jitterbuffer-1.2/channels/chan_agent.c
    team/oej/jitterbuffer-1.2/channels/chan_features.c
    team/oej/jitterbuffer-1.2/channels/chan_h323.c
    team/oej/jitterbuffer-1.2/channels/chan_iax2.c
    team/oej/jitterbuffer-1.2/channels/chan_local.c
    team/oej/jitterbuffer-1.2/channels/chan_mgcp.c
    team/oej/jitterbuffer-1.2/channels/chan_misdn.c
    team/oej/jitterbuffer-1.2/channels/chan_modem.c
    team/oej/jitterbuffer-1.2/channels/chan_phone.c
    team/oej/jitterbuffer-1.2/channels/chan_sip.c
    team/oej/jitterbuffer-1.2/channels/chan_skinny.c
    team/oej/jitterbuffer-1.2/channels/chan_vpb.c
    team/oej/jitterbuffer-1.2/channels/chan_zap.c
    team/oej/jitterbuffer-1.2/channels/iax2-provision.c
    team/oej/jitterbuffer-1.2/channels/misdn/Makefile
    team/oej/jitterbuffer-1.2/channels/misdn/chan_misdn_config.h
    team/oej/jitterbuffer-1.2/channels/misdn/ie.c
    team/oej/jitterbuffer-1.2/channels/misdn/isdn_lib.c
    team/oej/jitterbuffer-1.2/channels/misdn/isdn_lib.h
    team/oej/jitterbuffer-1.2/channels/misdn/isdn_lib_intern.h
    team/oej/jitterbuffer-1.2/channels/misdn/isdn_msg_parser.c
    team/oej/jitterbuffer-1.2/cli.c
    team/oej/jitterbuffer-1.2/config.c
    team/oej/jitterbuffer-1.2/configs/alsa.conf.sample
    team/oej/jitterbuffer-1.2/configs/cdr.conf.sample
    team/oej/jitterbuffer-1.2/configs/dundi.conf.sample
    team/oej/jitterbuffer-1.2/configs/enum.conf.sample
    team/oej/jitterbuffer-1.2/configs/extensions.conf.sample
    team/oej/jitterbuffer-1.2/configs/features.conf.sample
    team/oej/jitterbuffer-1.2/configs/iax.conf.sample
    team/oej/jitterbuffer-1.2/configs/indications.conf.sample
    team/oej/jitterbuffer-1.2/configs/misdn.conf.sample
    team/oej/jitterbuffer-1.2/configs/osp.conf.sample
    team/oej/jitterbuffer-1.2/configs/phone.conf.sample
    team/oej/jitterbuffer-1.2/configs/queues.conf.sample
    team/oej/jitterbuffer-1.2/configs/sip.conf.sample
    team/oej/jitterbuffer-1.2/configs/skinny.conf.sample
    team/oej/jitterbuffer-1.2/configs/voicemail.conf.sample
    team/oej/jitterbuffer-1.2/configs/vpb.conf.sample
    team/oej/jitterbuffer-1.2/configs/zapata.conf.sample
    team/oej/jitterbuffer-1.2/contrib/init.d/rc.redhat.asterisk
    team/oej/jitterbuffer-1.2/contrib/scripts/astgenkey.8
    team/oej/jitterbuffer-1.2/dnsmgr.c
    team/oej/jitterbuffer-1.2/doc/README.misdn
    team/oej/jitterbuffer-1.2/doc/README.variables
    team/oej/jitterbuffer-1.2/file.c
    team/oej/jitterbuffer-1.2/frame.c
    team/oej/jitterbuffer-1.2/funcs/func_cdr.c
    team/oej/jitterbuffer-1.2/funcs/func_timeout.c
    team/oej/jitterbuffer-1.2/include/asterisk/channel.h
    team/oej/jitterbuffer-1.2/include/asterisk/chanspy.h
    team/oej/jitterbuffer-1.2/include/asterisk/linkedlists.h
    team/oej/jitterbuffer-1.2/include/asterisk/lock.h
    team/oej/jitterbuffer-1.2/include/asterisk/logger.h
    team/oej/jitterbuffer-1.2/include/asterisk/rtp.h
    team/oej/jitterbuffer-1.2/include/asterisk/utils.h
    team/oej/jitterbuffer-1.2/io.c
    team/oej/jitterbuffer-1.2/logger.c
    team/oej/jitterbuffer-1.2/netsock.c
    team/oej/jitterbuffer-1.2/pbx.c
    team/oej/jitterbuffer-1.2/pbx/pbx_ael.c
    team/oej/jitterbuffer-1.2/pbx/pbx_config.c
    team/oej/jitterbuffer-1.2/pbx/pbx_gtkconsole.c
    team/oej/jitterbuffer-1.2/res/res_agi.c
    team/oej/jitterbuffer-1.2/res/res_features.c
    team/oej/jitterbuffer-1.2/res/res_monitor.c
    team/oej/jitterbuffer-1.2/res/res_musiconhold.c
    team/oej/jitterbuffer-1.2/rtp.c
    team/oej/jitterbuffer-1.2/utils.c

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

Propchange: team/oej/jitterbuffer-1.2/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Oct 31 03:16:12 2006
@@ -1,1 +1,1 @@
-/branches/1.2:1-38844
+/branches/1.2:1-46504

Modified: team/oej/jitterbuffer-1.2/.cleancount
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/.cleancount?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/.cleancount (original)
+++ team/oej/jitterbuffer-1.2/.cleancount Tue Oct 31 03:16:12 2006
@@ -1,1 +1,1 @@
-8
+9

Modified: team/oej/jitterbuffer-1.2/CREDITS
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/CREDITS?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/CREDITS (original)
+++ team/oej/jitterbuffer-1.2/CREDITS Tue Oct 31 03:16:12 2006
@@ -33,6 +33,14 @@
 Russell Bryant - Asterisk 1.0 maintainer and misc. enhancements
 	russelb at clemson.edu
 Anthony Minessale II - Countless big and small fixes, and relentless forward push
+	ChanSpy, ForkCDR, ControlPlayback, While/EndWhile, DumpChan, Dictate,
+	MacroIf, ExecIf, ExecIfTime, RetryDial, MixMonitor applications; res_odbc;
+	many realtime concepts and implementation pieces, including res_config_odbc;
+	format_slin; cdr_custom; several features in Dial including L(), G() and
+	enhancements to M() and D(); several CDR enhancements including CDR variables;
+	attended transfer; one touch record; native MOH; manager eventmask; command
+	line '-t' flag to allow recording/voicemail on nfs shares; #exec command and
+	multiline comments in config files; setvar in iax and sip configs.
 	anthmct at yahoo.com              http://www.asterlink.com
 James Golovich - Innumerable contributions
 	You can find him and asterisk-perl at http://asterisk.gnuinter.net

Modified: team/oej/jitterbuffer-1.2/LICENSE
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/LICENSE?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/LICENSE (original)
+++ team/oej/jitterbuffer-1.2/LICENSE Tue Oct 31 03:16:12 2006
@@ -4,6 +4,18 @@
 applies to all loadable Asterisk modules used on your system as well,
 except as defined below. The GPL (version 2) is included in this
 source tree in the file COPYING.
+
+This package also includes various components that are not part of
+Asterisk itself; these components are in the 'contrib' directory
+and its subdirectories. Most of these components are also
+distributed under the GPL version 2 as well, except for the following:
+
+contrib/firmware/iax/iaxy.bin:
+	This file is Copyright (C) Digium, Inc. and is licensed for
+	use with Digium IAXy hardware devices only. It can be
+	distributed freely as long as the distribution is in the
+	original form present in this package (not reformatted or
+	modified).
 
 Digium, Inc. (formerly Linux Support Services) holds copyright
 and/or sufficient licenses to all components of the Asterisk

Modified: team/oej/jitterbuffer-1.2/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/Makefile?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/Makefile (original)
+++ team/oej/jitterbuffer-1.2/Makefile Tue Oct 31 03:16:12 2006
@@ -593,7 +593,7 @@
 			exit 1; \
 		fi; \
 	done
-	for x in sounds/demo-* sounds/vm-* sounds/transfer* sounds/pbx-* sounds/ss-* sounds/beep* sounds/dir-* sounds/conf-* sounds/agent-* sounds/invalid* sounds/tt-* sounds/auth-* sounds/privacy-* sounds/queue-* sounds/spy-* sounds/priv-* sounds/screen-* sounds/hello-*; do \
+	for x in sounds/demo-* sounds/vm-* sounds/transfer* sounds/pbx-* sounds/ss-* sounds/beep* sounds/dir-* sounds/conf-* sounds/agent-* sounds/invalid* sounds/tt-* sounds/auth-* sounds/privacy-* sounds/queue-* sounds/spy-* sounds/priv-* sounds/screen-* sounds/hello-* sounds/hours* sounds/minute* sounds/second* ; do \
 		if $(GREP) -q "^%`basename $$x`%" sounds.txt; then \
 			$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds ; \
 		else \

Modified: team/oej/jitterbuffer-1.2/acl.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/acl.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/acl.c (original)
+++ team/oej/jitterbuffer-1.2/acl.c Tue Oct 31 03:16:12 2006
@@ -176,12 +176,12 @@
 		} else if (!inet_aton(nm, &ha->netmask)) {
 			ast_log(LOG_WARNING, "%s is not a valid netmask\n", nm);
 			free(ha);
-			return path;
+			return ret;
 		}
 		if (!inet_aton(tmp, &ha->netaddr)) {
 			ast_log(LOG_WARNING, "%s is not a valid IP\n", tmp);
 			free(ha);
-			return path;
+			return ret;
 		}
 		ha->netaddr.s_addr &= ha->netmask.s_addr;
 		if (!strncasecmp(sense, "p", 1)) {

Modified: team/oej/jitterbuffer-1.2/apps/app_alarmreceiver.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_alarmreceiver.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_alarmreceiver.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_alarmreceiver.c Tue Oct 31 03:16:12 2006
@@ -145,7 +145,7 @@
 	res = ast_db_put(db_family, key, value);
 	
 	if((res)&&(option_verbose >= 4))
-		ast_verbose(VERBOSE_PREFIX_4 "AlarmReceiver: database_increment write error");
+		ast_verbose(VERBOSE_PREFIX_4 "AlarmReceiver: database_increment write error\n");
 	
 	return;	
 }

Modified: team/oej/jitterbuffer-1.2/apps/app_authenticate.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_authenticate.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_authenticate.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_authenticate.c Tue Oct 31 03:16:12 2006
@@ -186,7 +186,7 @@
 		if (!res)
 			res = ast_waitstream(chan, "");
 	} else {
-		if (jump && ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) {
+		if (jump && ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101) == 0) {
 			res = 0;
 		} else {
 			if (!ast_streamfile(chan, "vm-goodbye", chan->language))

Modified: team/oej/jitterbuffer-1.2/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_chanspy.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_chanspy.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_chanspy.c Tue Oct 31 03:16:12 2006
@@ -131,7 +131,7 @@
 	ast_mutex_lock(&modlock);
 	chan = local_channel_walk(NULL);
 	while (chan) {
-		if (!strncmp(chan->name, name, strlen(name))) {
+		if (!strncmp(chan->name, name, strlen(name)) && strncmp(chan->name, "Zap/pseudo", 10)) {
 			ret = chan;
 			break;
 		}
@@ -206,21 +206,6 @@
 
 	return res;
 }
-
-static void stop_spying(struct ast_channel *chan, struct ast_channel_spy *spy) 
-{
-	/* If our status has changed to DONE, then the channel we're spying on is gone....
-	   DON'T TOUCH IT!!!  RUN AWAY!!! */
-	if (spy->status == CHANSPY_DONE)
-		return;
-
-	if (!chan)
-		return;
-
-	ast_mutex_lock(&chan->lock);
-	ast_channel_spy_remove(chan, spy);
-	ast_mutex_unlock(&chan->lock);
-};
 
 /* Map 'volume' levels from -4 through +4 into
    decibel (dB) settings for channel drivers
@@ -252,102 +237,111 @@
 static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int *volfactor, int fd) 
 {
 	struct chanspy_translation_helper csth;
-	int running, res = 0, x = 0;
-	char inp[24];
-	char *name=NULL;
-	struct ast_frame *f;
-
-	running = (chan && !ast_check_hangup(chan) && spyee && !ast_check_hangup(spyee));
-
-	if (running) {
-		memset(inp, 0, sizeof(inp));
-		name = ast_strdupa(spyee->name);
-		if (option_verbose >= 2)
-			ast_verbose(VERBOSE_PREFIX_2 "Spying on channel %s\n", name);
-
-		memset(&csth, 0, sizeof(csth));
-		ast_set_flag(&csth.spy, CHANSPY_FORMAT_AUDIO);
-		ast_set_flag(&csth.spy, CHANSPY_TRIGGER_NONE);
-		ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
-		csth.spy.type = chanspy_spy_type;
-		csth.spy.status = CHANSPY_RUNNING;
-		csth.spy.read_queue.format = AST_FORMAT_SLINEAR;
-		csth.spy.write_queue.format = AST_FORMAT_SLINEAR;
-		ast_mutex_init(&csth.spy.lock);
-		csth.volfactor = *volfactor;
-		set_volume(chan, &csth);
+	int running = 0, res = 0, x = 0;
+	char inp[24] = "", *name = NULL;
+	struct ast_frame *f = NULL;
+
+	if ((chan && ast_check_hangup(chan)) || (spyee && ast_check_hangup(spyee)))
+		return 0;
+
+	name = ast_strdupa(spyee->name);
+	if (option_verbose > 1)
+		ast_verbose(VERBOSE_PREFIX_2 "Spying on channel %s\n", name);
+
+	memset(&csth, 0, sizeof(csth));
+	ast_set_flag(&csth.spy, CHANSPY_FORMAT_AUDIO);
+	ast_set_flag(&csth.spy, CHANSPY_TRIGGER_NONE);
+	ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
+	csth.spy.type = chanspy_spy_type;
+	csth.spy.status = CHANSPY_RUNNING;
+	csth.spy.read_queue.format = AST_FORMAT_SLINEAR;
+	csth.spy.write_queue.format = AST_FORMAT_SLINEAR;
+	ast_mutex_init(&csth.spy.lock);
+	csth.volfactor = *volfactor;
+	set_volume(chan, &csth);
+	if (csth.volfactor) {
+		ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
 		csth.spy.read_vol_adjustment = csth.volfactor;
+		ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
 		csth.spy.write_vol_adjustment = csth.volfactor;
-		csth.fd = fd;
-
-		if (start_spying(spyee, chan, &csth.spy))
-			running = 0;
-	}
-
-	if (running) {
-		running = 1;
-		ast_activate_generator(chan, &spygen, &csth);
-
-		while (csth.spy.status == CHANSPY_RUNNING &&
-		       chan && !ast_check_hangup(chan) &&
-		       spyee &&
-		       !ast_check_hangup(spyee) &&
-		       running == 1 &&
-		       (res = ast_waitfor(chan, -1) > -1)) {
-			if ((f = ast_read(chan))) {
-				res = 0;
-				if (f->frametype == AST_FRAME_DTMF) {
-					res = f->subclass;
+	}
+	csth.fd = fd;
+
+	if (start_spying(spyee, chan, &csth.spy)) {
+		ast_channel_spy_free(&csth.spy);
+		return 0;
+	}
+
+	ast_activate_generator(chan, &spygen, &csth);
+
+	while (csth.spy.status == CHANSPY_RUNNING &&
+	       (res = ast_waitfor(chan, -1) > -1)) {
+		
+		/* Read in frame from channel, break out if no frame */
+		if (!(f = ast_read(chan)))
+			break;
+		
+		/* Now if this is DTMF then we have to handle it as such, otherwise just skip it */
+		res = 0;
+		if (f->frametype == AST_FRAME_DTMF)
+			res = f->subclass;
+		ast_frfree(f);
+		if (!res)
+			continue;
+		
+		if (x == sizeof(inp))
+			x = 0;
+		
+		if (res < 0) {
+			running = -1;
+			break;
+		}
+		
+		/* Process DTMF digits */
+		if (res == '#') {
+			if (!ast_strlen_zero(inp)) {
+				running = x ? atoi(inp) : -1;
+				break;
+			} else {
+				(*volfactor)++;
+				if (*volfactor > 4)
+					*volfactor = -1;
+				if (option_verbose > 2)
+					ast_verbose(VERBOSE_PREFIX_3 "Setting spy volume on %s to %d\n", chan->name, *volfactor);
+				csth.volfactor = *volfactor;
+				set_volume(chan, &csth);
+				if (csth.volfactor) {
+					ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
+					csth.spy.read_vol_adjustment = csth.volfactor;
+					ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
+					csth.spy.write_vol_adjustment = csth.volfactor;
+				} else {
+					ast_clear_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
+					ast_clear_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
 				}
-				ast_frfree(f);
-				if (!res) {
-					continue;
-				}
-			} else {
-				break;
 			}
-			if (x == sizeof(inp)) {
-				x = 0;
-			}
-			if (res < 0) {
-				running = -1;
-			}
-			if (res == 0) {
-				continue;
-			} else if (res == '*') {
-				running = 0; 
-			} else if (res == '#') {
-				if (!ast_strlen_zero(inp)) {
-					running = x ? atoi(inp) : -1;
-					break;
-				} else {
-					(*volfactor)++;
-					if (*volfactor > 4) {
-						*volfactor = -4;
-					}
-					if (option_verbose > 2) {
-						ast_verbose(VERBOSE_PREFIX_3 "Setting spy volume on %s to %d\n", chan->name, *volfactor);
-					}
-					csth.volfactor = *volfactor;
-					set_volume(chan, &csth);
-					csth.spy.read_vol_adjustment = csth.volfactor;
-					csth.spy.write_vol_adjustment = csth.volfactor;
-				}
-			} else if (res >= 48 && res <= 57) {
-				inp[x++] = res;
-			}
-		}
-		ast_deactivate_generator(chan);
-		stop_spying(spyee, &csth.spy);
-
-		if (option_verbose >= 2) {
-			ast_verbose(VERBOSE_PREFIX_2 "Done Spying on channel %s\n", name);
-		}
-	} else {
-		running = 0;
-	}
-
-	ast_mutex_destroy(&csth.spy.lock);
+		} else if (res == '*') {
+			break;
+		} else if (res >= 48 && res <= 57) {
+			inp[x++] = res;
+		}
+	}
+
+	ast_deactivate_generator(chan);
+	
+	ast_mutex_lock(&csth.spy.lock);
+	if (csth.spy.chan) {
+		csth.spy.status = CHANSPY_DONE;
+		ast_mutex_lock(&csth.spy.chan->lock);
+		ast_channel_spy_remove(csth.spy.chan, &csth.spy);
+		ast_mutex_unlock(&csth.spy.chan->lock);
+	}
+	ast_mutex_unlock(&csth.spy.lock);
+
+	if (option_verbose > 1)
+		ast_verbose(VERBOSE_PREFIX_2 "Done Spying on channel %s\n", name);
+
+	ast_channel_spy_free(&csth.spy);
 
 	return running;
 }

Modified: team/oej/jitterbuffer-1.2/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_dial.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_dial.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_dial.c Tue Oct 31 03:16:12 2006
@@ -31,6 +31,7 @@
 #include <stdio.h>
 #include <sys/time.h>
 #include <sys/signal.h>
+#include <sys/stat.h>
 #include <netinet/in.h>
 
 #include "asterisk.h"
@@ -965,7 +966,13 @@
 			   unless it is already there-- this should be done before the 
 			   call is actually dialed  */
 
-			/* make sure the priv-callerintros dir exists? */
+			/* make sure the priv-callerintros dir actually exists */
+			snprintf(privintro, sizeof(privintro), "%s/sounds/priv-callerintros", ast_config_AST_VAR_DIR);
+			if (mkdir(privintro, 0755) && errno != EEXIST) {
+				ast_log(LOG_WARNING, "privacy: can't create directory priv-callerintros: %s\n", strerror(errno));
+				res = -1;
+				goto out;
+			}
 
 			snprintf(privintro,sizeof(privintro),"priv-callerintros/%s", privcid);
 			if( ast_fileexists(privintro,NULL,NULL ) > 0 && strncmp(privcid,"NOCALLERID",10) != 0) {
@@ -1151,7 +1158,7 @@
 			/* Again, keep going even if there's an error */
 			if (option_debug)
 				ast_log(LOG_DEBUG, "ast call on peer returned %d\n", res);
-			else if (option_verbose > 2)
+			if (option_verbose > 2)
 				ast_verbose(VERBOSE_PREFIX_3 "Couldn't call %s\n", numsubst);
 			ast_hangup(tmp->chan);
 			tmp->chan = NULL;

Modified: team/oej/jitterbuffer-1.2/apps/app_directory.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_directory.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_directory.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_directory.c Tue Oct 31 03:16:12 2006
@@ -256,7 +256,7 @@
  *           '1' for selected entry from directory
  *           '*' for skipped entry from directory
  */
-static int play_mailbox_owner(struct ast_channel *chan, char *context, char *dialcontext, char *ext, char *name) {
+static int play_mailbox_owner(struct ast_channel *chan, char *context, char *dialcontext, char *ext, char *name, int fromappvm) {
 	int res = 0;
 	int loop = 3;
 	char fn[256];
@@ -314,12 +314,17 @@
 				case '1':
 					/* Name selected */
 					loop = 0;
-					if (ast_goto_if_exists(chan, dialcontext, ext, 1)) {
-						ast_log(LOG_WARNING,
-							"Can't find extension '%s' in context '%s'.  "
-							"Did you pass the wrong context to Directory?\n",
-							ext, dialcontext);
-						res = -1;
+					if (fromappvm) {
+						/* We still want to set the exten */
+						ast_copy_string(chan->exten, ext, sizeof(chan->exten));
+					} else {
+						if (ast_goto_if_exists(chan, dialcontext, ext, 1)) {
+							ast_log(LOG_WARNING,
+								"Can't find extension '%s' in context '%s'.  "
+								"Did you pass the wrong context to Directory?\n",
+								ext, dialcontext);
+							res = -1;
+						}
 					}
 					break;
 	
@@ -403,7 +408,7 @@
 	return cfg;
 }
 
-static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last)
+static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last, int fromappvm)
 {
 	/* Read in the first three digits..  "digit" is the first digit, already read */
 	char ext[NUMDIGITS + 1];
@@ -421,7 +426,7 @@
 		return -1;
 	}
 	if (digit == '0') {
-		if (!ast_goto_if_exists(chan, chan->context, "o", 1) ||
+		if (!ast_goto_if_exists(chan, dialcontext, "o", 1) ||
 		    (!ast_strlen_zero(chan->macrocontext) &&
 		     !ast_goto_if_exists(chan, chan->macrocontext, "o", 1))) {
 			return 0;
@@ -432,7 +437,7 @@
 		}
 	}	
 	if (digit == '*') {
-		if (!ast_goto_if_exists(chan, chan->context, "a", 1) ||
+		if (!ast_goto_if_exists(chan, dialcontext, "a", 1) ||
 		    (!ast_strlen_zero(chan->macrocontext) &&
 		     !ast_goto_if_exists(chan, chan->macrocontext, "a", 1))) {
 			return 0;
@@ -482,7 +487,7 @@
 
 			if (v) {
 				/* We have a match -- play a greeting if they have it */
-				res = play_mailbox_owner(chan, context, dialcontext, v->name, name);
+				res = play_mailbox_owner(chan, context, dialcontext, v->name, name, fromappvm);
 				switch (res) {
 					case -1:
 						/* user pressed '1' but extension does not exist, or
@@ -529,6 +534,7 @@
 	struct localuser *u;
 	struct ast_config *cfg;
 	int last = 1;
+	int fromappvm = 0;
 	char *context, *dialcontext, *dirintro, *options;
 
 	if (ast_strlen_zero(data)) {
@@ -549,6 +555,8 @@
 			options++; 
 			if (strchr(options, 'f'))
 				last = 0;
+			if (strchr(options, 'v'))
+				fromappvm = 1;
 		}
 	} else	
 		dialcontext = context;
@@ -581,7 +589,7 @@
 		if (!res)
 			res = ast_waitfordigit(chan, 5000);
 		if (res > 0) {
-			res = do_directory(chan, cfg, context, dialcontext, res, last);
+			res = do_directory(chan, cfg, context, dialcontext, res, last, fromappvm);
 			if (res > 0) {
 				res = ast_waitstream(chan, AST_DIGIT_ANY);
 				ast_stopstream(chan);

Modified: team/oej/jitterbuffer-1.2/apps/app_externalivr.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_externalivr.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_externalivr.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_externalivr.c Tue Oct 31 03:16:12 2006
@@ -324,7 +324,7 @@
 			close(i);
 		execv(argv[0], argv);
 		fprintf(stderr, "Failed to execute '%s': %s\n", argv[0], strerror(errno));
-		exit(1);
+		_exit(1);
 	} else {
 		/* parent process */
 		int child_events_fd = child_stdin[1];
@@ -447,7 +447,7 @@
 					continue;
 
 				if (input[0] == 'S') {
-					if (ast_fileexists(&input[2], NULL, NULL) == -1) {
+					if (ast_fileexists(&input[2], NULL, u->chan->language) == -1) {
 						ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
 						send_child_event(child_events, 'Z', NULL, chan);
 						strcpy(&input[2], "exception");
@@ -466,7 +466,7 @@
 						AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
 					AST_LIST_UNLOCK(&u->playlist);
 				} else if (input[0] == 'A') {
-					if (ast_fileexists(&input[2], NULL, NULL) == -1) {
+					if (ast_fileexists(&input[2], NULL, u->chan->language) == -1) {
 						ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
 						send_child_event(child_events, 'Z', NULL, chan);
 						strcpy(&input[2], "exception");

Modified: team/oej/jitterbuffer-1.2/apps/app_festival.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_festival.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_festival.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_festival.c Tue Oct 31 03:16:12 2006
@@ -471,7 +471,7 @@
                         * */
                        if ( read_data == -1 )
                        {
-                               ast_log(LOG_WARNING,"Unable to read from cache/festival fd");
+                               ast_log(LOG_WARNING,"Unable to read from cache/festival fd\n");
 			       close(fd);
 			       ast_config_destroy(cfg);
 			       LOCAL_USER_REMOVE(u);

Modified: team/oej/jitterbuffer-1.2/apps/app_hasnewvoicemail.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_hasnewvoicemail.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_hasnewvoicemail.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_hasnewvoicemail.c Tue Oct 31 03:16:12 2006
@@ -260,7 +260,7 @@
 
 	args = ast_strdupa(data);
 	if (!args) {
-		ast_log(LOG_ERROR, "Out of memory");
+		ast_log(LOG_ERROR, "Out of memory\n");
 		LOCAL_USER_REMOVE(u);
 		return buf;
 	}

Modified: team/oej/jitterbuffer-1.2/apps/app_macro.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_macro.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_macro.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_macro.c Tue Oct 31 03:16:12 2006
@@ -60,7 +60,13 @@
 "If you Goto out of the Macro context, the Macro will terminate and control\n"
 "will be returned at the location of the Goto.\n"
 "If ${MACRO_OFFSET} is set at termination, Macro will attempt to continue\n"
-"at priority MACRO_OFFSET + N + 1 if such a step exists, and N + 1 otherwise.\n";
+"at priority MACRO_OFFSET + N + 1 if such a step exists, and N + 1 otherwise.\n"
+"WARNING: Because of the way Macro is implemented (it executes the priorities\n"
+"         contained within it via sub-engine), and a fixed per-thread\n"
+"         memory stack allowance, macros are limited to 7 levels\n"
+"         of nesting (macro calling macro calling macro, etc.); It\n"
+"         may be possible that stack-intensive applications in deeply nested\n"
+"         macros could cause asterisk to crash earlier than this limit.\n";
 
 static char *if_descrip =
 "  MacroIf(<expr>?macroname_a[|arg1][:macroname_b[|arg1]])\n"
@@ -101,8 +107,8 @@
 	int oldpriority;
 	char pc[80], depthc[12];
 	char oldcontext[AST_MAX_CONTEXT] = "";
-	char *offsets;
-	int offset, depth;
+	char *offsets, *s;
+	int offset, depth = 0, maxdepth = 7;
 	int setmacrocontext=0;
 	int autoloopflag, dead = 0;
   
@@ -119,6 +125,11 @@
 
 	LOCAL_USER_ADD(u);
 
+	/* does the user want a deeper rabbit hole? */
+	s = pbx_builtin_getvar_helper(chan, "MACRO_RECURSION");
+	if (s)
+		sscanf(s, "%d", &maxdepth);
+
 	/* Count how many levels deep the rabbit hole goes */
 	tmp = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
 	if (tmp) {
@@ -127,7 +138,7 @@
 		depth = 0;
 	}
 
-	if (depth >= 7) {
+	if (depth >= maxdepth) {
 		ast_log(LOG_ERROR, "Macro():  possible infinite loop detected.  Returning early.\n");
 		LOCAL_USER_REMOVE(u);
 		return 0;
@@ -222,14 +233,14 @@
 			case AST_PBX_KEEPALIVE:
 				if (option_debug)
 					ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited KEEPALIVE in macro %s on '%s'\n", chan->context, chan->exten, chan->priority, macro, chan->name);
-				else if (option_verbose > 1)
+				if (option_verbose > 1)
 					ast_verbose( VERBOSE_PREFIX_2 "Spawn extension (%s, %s, %d) exited KEEPALIVE in macro '%s' on '%s'\n", chan->context, chan->exten, chan->priority, macro, chan->name);
 				goto out;
 				break;
 			default:
 				if (option_debug)
 					ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited non-zero on '%s' in macro '%s'\n", chan->context, chan->exten, chan->priority, chan->name, macro);
-				else if (option_verbose > 1)
+				if (option_verbose > 1)
 					ast_verbose( VERBOSE_PREFIX_2 "Spawn extension (%s, %s, %d) exited non-zero on '%s' in macro '%s'\n", chan->context, chan->exten, chan->priority, chan->name, macro);
 				dead = 1;
 				goto out;
@@ -241,9 +252,9 @@
 			break;
 		}
 		/* don't stop executing extensions when we're in "h" */
-		if (chan->_softhangup && strcasecmp(oldexten,"h")) {
-			ast_log(LOG_DEBUG, "Extension %s, priority %d returned normally even though call was hung up\n",
-				chan->exten, chan->priority);
+		if (chan->_softhangup && strcasecmp(oldexten,"h") && strcasecmp(chan->macroexten,"h")) {
+			ast_log(LOG_DEBUG, "Extension %s, macroexten %s, priority %d returned normally even though call was hung up\n",
+				chan->exten, chan->macroexten, chan->priority);
 			goto out;
 		}
 		chan->priority++;

Modified: team/oej/jitterbuffer-1.2/apps/app_math.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_math.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_math.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_math.c Tue Oct 31 03:16:12 2006
@@ -69,7 +69,8 @@
 "Perform floating point calculation on number 1 to number 2 and \n"
 "store the result in returnvar.  Valid ops are: \n"
 "    +,-,/,*,%,<,>,>=,<=,==\n"
-"and behave as their C equivalents.\n";
+"and behave as their C equivalents.\n"
+"  This application has been deprecated in favor of the MATH function.\n";
 
 #define ADDFUNCTION 0
 #define DIVIDEFUNCTION 1

Modified: team/oej/jitterbuffer-1.2/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_meetme.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_meetme.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_meetme.c Tue Oct 31 03:16:12 2006
@@ -96,7 +96,8 @@
 "      '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"
-"      'w' -- wait until the marked user enters the conference\n"
+"      'w[(<secs>)]'\n"
+"          -- 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"
 "             digit extension ${MEETME_EXIT_CONTEXT} or the current context\n"
@@ -227,6 +228,10 @@
 #define CONFFLAG_EMPTYNOPIN (1 << 20)
 #define CONFFLAG_ALWAYSPROMPT (1 << 21)
 
+enum {
+	OPT_ARG_WAITMARKED = 0,
+	OPT_ARG_ARRAY_SIZE = 1,
+} meetme_option_args;
 
 AST_APP_OPTIONS(meetme_opts, {
 	AST_APP_OPTION('a', CONFFLAG_ADMIN ),
@@ -243,7 +248,7 @@
 	AST_APP_OPTION('X', CONFFLAG_EXIT_CONTEXT ),
 	AST_APP_OPTION('A', CONFFLAG_MARKEDUSER ),
 	AST_APP_OPTION('b', CONFFLAG_AGI ),
-	AST_APP_OPTION('w', CONFFLAG_WAITMARKED ),
+	AST_APP_OPTION_ARG('w', CONFFLAG_WAITMARKED, OPT_ARG_WAITMARKED ),
 	AST_APP_OPTION('r', CONFFLAG_RECORDCONF ),
 	AST_APP_OPTION('d', CONFFLAG_DYNAMIC ),
 	AST_APP_OPTION('D', CONFFLAG_DYNAMICPIN ),
@@ -790,7 +795,7 @@
 	return 0;
 }
 
-static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags)
+static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags, char *optargs[])
 {
 	struct ast_conf_user *user = calloc(1, sizeof(*user));
 	struct ast_conf_user *usr = NULL;
@@ -822,7 +827,8 @@
 	char meetmesecs[30] = "";
 	char exitcontext[AST_MAX_CONTEXT] = "";
 	char recordingtmp[AST_MAX_EXTENSION] = "";
-	int dtmf;
+	int dtmf, opt_waitmarked_timeout = 0;
+	time_t timeout = 0;
 	ZT_BUFFERINFO bi;
 	char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
 	char *buf = __buf + AST_FRIENDLY_OFFSET;
@@ -830,6 +836,14 @@
 	if (!user) {
 		ast_log(LOG_ERROR, "Out of memory\n");
 		return ret;
+	}
+
+	/* Possible timeout waiting for marked user */
+	if ((confflags & CONFFLAG_WAITMARKED) &&
+		!ast_strlen_zero(optargs[OPT_ARG_WAITMARKED]) &&
+		(sscanf(optargs[OPT_ARG_WAITMARKED], "%d", &opt_waitmarked_timeout) == 1) &&
+		(opt_waitmarked_timeout > 0)) {
+		timeout = time(NULL) + opt_waitmarked_timeout;
 	}
 
 	if (confflags & CONFFLAG_RECORDCONF && conf->recording !=MEETME_RECORD_ACTIVE) {
@@ -922,6 +936,7 @@
 		if (conf->users == 2) { 
 			if (!ast_streamfile(chan,"conf-onlyone",chan->language)) {
 				res = ast_waitstream(chan, AST_DIGIT_ANY);
+				ast_stopstream(chan);
 				if (res > 0)
 					keepplaying=0;
 				else if (res == -1)
@@ -930,6 +945,7 @@
 		} else { 
 			if (!ast_streamfile(chan, "conf-thereare", chan->language)) {
 				res = ast_waitstream(chan, AST_DIGIT_ANY);
+				ast_stopstream(chan);
 				if (res > 0)
 					keepplaying=0;
 				else if (res == -1)
@@ -944,6 +960,7 @@
 			}
 			if (keepplaying && !ast_streamfile(chan, "conf-otherinparty", chan->language)) {
 				res = ast_waitstream(chan, AST_DIGIT_ANY);
+				ast_stopstream(chan);
 				if (res > 0)
 					keepplaying=0;
 				else if (res == -1) 
@@ -1118,7 +1135,10 @@
 
 			outfd = -1;
 			ms = -1;
-			
+
+			if (timeout && time(NULL) >= timeout)
+				break;
+
 			/* if we have just exited from the menu, and the user had a channel-driver
 			   volume adjustment, restore it
 			*/
@@ -1181,6 +1201,8 @@
 						}
 					}
 				} else if(currentmarked >= 1 && lastmarked == 0) {
+					/* Marked user entered, so cancel timeout */
+					timeout = 0;
 					if (confflags & CONFFLAG_MONITOR)
 						ztc.confmode = ZT_CONF_CONFMON | ZT_CONF_LISTENER;
 					else if (confflags & CONFFLAG_TALKER)
@@ -1775,6 +1797,7 @@
 	int empty = 0, empty_no_pin = 0;
 	int always_prompt = 0;
 	char *notdata, *info, *inflags = NULL, *inpin = NULL, the_pin[AST_MAX_EXTENSION] = "";
+	char *optargs[OPT_ARG_ARRAY_SIZE] = { NULL, };
 
 	LOCAL_USER_ADD(u);
 
@@ -1805,7 +1828,7 @@
 		ast_copy_string(the_pin, inpin, sizeof(the_pin));
 
 	if (inflags) {
-		ast_app_parse_options(meetme_opts, &confflags, NULL, inflags);
+		ast_app_parse_options(meetme_opts, &confflags, optargs, inflags);
 		dynamic = ast_test_flag(&confflags, CONFFLAG_DYNAMIC | CONFFLAG_DYNAMICPIN);
 		if (ast_test_flag(&confflags, CONFFLAG_DYNAMICPIN) && !inpin)
 			strcpy(the_pin, "q");
@@ -1962,12 +1985,14 @@
 								if (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin)) 
 									ast_set_flag(&confflags, CONFFLAG_ADMIN);
 								/* Run the conference */
-								res = conf_run(chan, cnf, confflags.flags);
+								res = conf_run(chan, cnf, confflags.flags, optargs);
 								break;
 							} else {
 								/* Pin invalid */
-								if (!ast_streamfile(chan, "conf-invalidpin", chan->language))
+								if (!ast_streamfile(chan, "conf-invalidpin", chan->language)) {
 									res = ast_waitstream(chan, AST_DIGIT_ANY);
+									ast_stopstream(chan);
+								}
 								else {
 									ast_log(LOG_WARNING, "Couldn't play invalid pin msg!\n");
 									break;
@@ -2003,7 +2028,7 @@
 					allowretry = 0;
 
 					/* Run the conference */
-					res = conf_run(chan, cnf, confflags.flags);
+					res = conf_run(chan, cnf, confflags.flags, optargs);
 				}
 			}
 		}

Modified: team/oej/jitterbuffer-1.2/apps/app_mixmonitor.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_mixmonitor.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_mixmonitor.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_mixmonitor.c Tue Oct 31 03:16:12 2006
@@ -109,23 +109,6 @@
 	AST_APP_OPTION_ARG('W', MUXFLAG_VOLUME, OPT_ARG_VOLUME),
 });
 
-static void stopmon(struct ast_channel_spy *spy) 
-{
-	struct ast_channel *chan = spy->chan;
-
-	/* If our status has changed to DONE, then the channel we're spying on is gone....
-	   DON'T TOUCH IT!!!  RUN AWAY!!! */
-	if (spy->status == CHANSPY_DONE)
-		return;
-  
-	if (!chan)
-		return;
-
-	ast_mutex_lock(&chan->lock);
-	ast_channel_spy_remove(chan, spy);
-	ast_mutex_unlock(&chan->lock);
-}
-
 static int startmon(struct ast_channel *chan, struct ast_channel_spy *spy) 
 {
 	struct ast_channel *peer;
@@ -164,9 +147,8 @@
 
 		ast_channel_spy_trigger_wait(&mixmonitor->spy);
 		
-		if (!mixmonitor->spy.chan || mixmonitor->spy.status != CHANSPY_RUNNING) {
+		if (!mixmonitor->spy.chan || mixmonitor->spy.status != CHANSPY_RUNNING)
 			break;
-		}
 		
 		while (1) {
 			if (!(f = ast_channel_spy_read_frame(&mixmonitor->spy, SAMPLES_PER_FRAME)))
@@ -189,7 +171,7 @@
 
 	ast_mutex_unlock(&mixmonitor->spy.lock);
 	
-	stopmon(&mixmonitor->spy);
+	ast_channel_spy_free(&mixmonitor->spy);
 
 	if (option_verbose > 1)
 		ast_verbose(VERBOSE_PREFIX_2 "End MixMonitor Recording %s\n", mixmonitor->name);
@@ -199,8 +181,6 @@
 			ast_verbose(VERBOSE_PREFIX_2 "Executing [%s]\n", mixmonitor->post_process);
 		ast_safe_system(mixmonitor->post_process);
 	}
-
-	ast_mutex_destroy(&mixmonitor->spy.lock);
 		
 	ast_closestream(mixmonitor->fs);
 

Modified: team/oej/jitterbuffer-1.2/apps/app_page.c
URL: http://svn.digium.com/view/asterisk/team/oej/jitterbuffer-1.2/apps/app_page.c?rev=46605&r1=46604&r2=46605&view=diff
==============================================================================
--- team/oej/jitterbuffer-1.2/apps/app_page.c (original)
+++ team/oej/jitterbuffer-1.2/apps/app_page.c Tue Oct 31 03:16:12 2006
@@ -179,7 +179,7 @@
 	if (options)
 		ast_app_parse_options(page_opts, &flags, NULL, options);
 
-	snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%sqxdw", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m");

[... 17355 lines stripped ...]


More information about the asterisk-commits mailing list