[asterisk-commits] oej: branch oej/adb-appleraision-1.8-mark-2 r369423 - in /team/oej/adb-appler...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jun 27 03:09:23 CDT 2012


Author: oej
Date: Wed Jun 27 03:09:18 2012
New Revision: 369423

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369423
Log:
Cleaning up

Added:
    team/oej/adb-appleraision-1.8-mark-2/build_tools/find_missing_support_level
      - copied unchanged from r369390, branches/1.8/build_tools/find_missing_support_level
    team/oej/adb-appleraision-1.8-mark-2/main/adsi.c
      - copied unchanged from r369390, branches/1.8/main/adsi.c
Removed:
    team/oej/adb-appleraision-1.8-mark-2/res/res_adsi.exports.in
Modified:
    team/oej/adb-appleraision-1.8-mark-2/   (props changed)
    team/oej/adb-appleraision-1.8-mark-2/Makefile
    team/oej/adb-appleraision-1.8-mark-2/UPGRADE.txt
    team/oej/adb-appleraision-1.8-mark-2/addons/chan_ooh323.c
    team/oej/adb-appleraision-1.8-mark-2/addons/format_mp3.c
    team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooCalls.c
    team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooq931.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_dial.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_directory.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_meetme.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_minivm.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_page.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_queue.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_record.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_stack.c
    team/oej/adb-appleraision-1.8-mark-2/apps/app_voicemail.c
    team/oej/adb-appleraision-1.8-mark-2/build_tools/make_version
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_agent.c
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_dahdi.c
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_iax2.c
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_misdn.c
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_sip.c
    team/oej/adb-appleraision-1.8-mark-2/channels/chan_skinny.c
    team/oej/adb-appleraision-1.8-mark-2/channels/console_board.c
    team/oej/adb-appleraision-1.8-mark-2/channels/console_gui.c
    team/oej/adb-appleraision-1.8-mark-2/channels/console_video.c
    team/oej/adb-appleraision-1.8-mark-2/channels/iax2-parser.c
    team/oej/adb-appleraision-1.8-mark-2/channels/iax2-provision.c
    team/oej/adb-appleraision-1.8-mark-2/channels/misdn/ie.c
    team/oej/adb-appleraision-1.8-mark-2/channels/misdn/isdn_lib.c
    team/oej/adb-appleraision-1.8-mark-2/channels/misdn/isdn_msg_parser.c
    team/oej/adb-appleraision-1.8-mark-2/channels/misdn/portinfo.c
    team/oej/adb-appleraision-1.8-mark-2/channels/misdn_config.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sig_analog.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sig_pri.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sig_ss7.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/config_parser.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/dialplan_functions.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/include/sip.h
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/reqresp_parser.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/sdp_crypto.c
    team/oej/adb-appleraision-1.8-mark-2/channels/sip/srtp.c
    team/oej/adb-appleraision-1.8-mark-2/channels/vcodecs.c
    team/oej/adb-appleraision-1.8-mark-2/channels/vgrabbers.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_channel.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_devstate.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_dialgroup.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_lock.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_math.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_odbc.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_speex.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_strings.c
    team/oej/adb-appleraision-1.8-mark-2/funcs/func_volume.c
    team/oej/adb-appleraision-1.8-mark-2/include/asterisk/adsi.h
    team/oej/adb-appleraision-1.8-mark-2/include/asterisk/cel.h
    team/oej/adb-appleraision-1.8-mark-2/include/asterisk/channel.h
    team/oej/adb-appleraision-1.8-mark-2/include/asterisk/netsock2.h
    team/oej/adb-appleraision-1.8-mark-2/include/asterisk/tcptls.h
    team/oej/adb-appleraision-1.8-mark-2/main/Makefile
    team/oej/adb-appleraision-1.8-mark-2/main/abstract_jb.c
    team/oej/adb-appleraision-1.8-mark-2/main/acl.c
    team/oej/adb-appleraision-1.8-mark-2/main/alaw.c
    team/oej/adb-appleraision-1.8-mark-2/main/aoc.c
    team/oej/adb-appleraision-1.8-mark-2/main/app.c
    team/oej/adb-appleraision-1.8-mark-2/main/asterisk.c
    team/oej/adb-appleraision-1.8-mark-2/main/astfd.c
    team/oej/adb-appleraision-1.8-mark-2/main/astmm.c
    team/oej/adb-appleraision-1.8-mark-2/main/astobj2.c
    team/oej/adb-appleraision-1.8-mark-2/main/audiohook.c
    team/oej/adb-appleraision-1.8-mark-2/main/autochan.c
    team/oej/adb-appleraision-1.8-mark-2/main/autoservice.c
    team/oej/adb-appleraision-1.8-mark-2/main/bridging.c
    team/oej/adb-appleraision-1.8-mark-2/main/callerid.c
    team/oej/adb-appleraision-1.8-mark-2/main/ccss.c
    team/oej/adb-appleraision-1.8-mark-2/main/cdr.c
    team/oej/adb-appleraision-1.8-mark-2/main/cel.c
    team/oej/adb-appleraision-1.8-mark-2/main/channel.c
    team/oej/adb-appleraision-1.8-mark-2/main/chanvars.c
    team/oej/adb-appleraision-1.8-mark-2/main/cli.c
    team/oej/adb-appleraision-1.8-mark-2/main/config.c
    team/oej/adb-appleraision-1.8-mark-2/main/data.c
    team/oej/adb-appleraision-1.8-mark-2/main/datastore.c
    team/oej/adb-appleraision-1.8-mark-2/main/db.c
    team/oej/adb-appleraision-1.8-mark-2/main/db1-ast/btree/bt_open.c
    team/oej/adb-appleraision-1.8-mark-2/main/devicestate.c
    team/oej/adb-appleraision-1.8-mark-2/main/dial.c
    team/oej/adb-appleraision-1.8-mark-2/main/dns.c
    team/oej/adb-appleraision-1.8-mark-2/main/dnsmgr.c
    team/oej/adb-appleraision-1.8-mark-2/main/dsp.c
    team/oej/adb-appleraision-1.8-mark-2/main/editline/readline.c
    team/oej/adb-appleraision-1.8-mark-2/main/editline/term.c
    team/oej/adb-appleraision-1.8-mark-2/main/editline/tokenizer.c
    team/oej/adb-appleraision-1.8-mark-2/main/enum.c
    team/oej/adb-appleraision-1.8-mark-2/main/event.c
    team/oej/adb-appleraision-1.8-mark-2/main/features.c
    team/oej/adb-appleraision-1.8-mark-2/main/file.c
    team/oej/adb-appleraision-1.8-mark-2/main/fixedjitterbuf.c
    team/oej/adb-appleraision-1.8-mark-2/main/frame.c
    team/oej/adb-appleraision-1.8-mark-2/main/framehook.c
    team/oej/adb-appleraision-1.8-mark-2/main/fskmodem.c
    team/oej/adb-appleraision-1.8-mark-2/main/fskmodem_float.c
    team/oej/adb-appleraision-1.8-mark-2/main/fskmodem_int.c
    team/oej/adb-appleraision-1.8-mark-2/main/global_datastores.c
    team/oej/adb-appleraision-1.8-mark-2/main/hashtab.c
    team/oej/adb-appleraision-1.8-mark-2/main/heap.c
    team/oej/adb-appleraision-1.8-mark-2/main/http.c
    team/oej/adb-appleraision-1.8-mark-2/main/image.c
    team/oej/adb-appleraision-1.8-mark-2/main/indications.c
    team/oej/adb-appleraision-1.8-mark-2/main/io.c
    team/oej/adb-appleraision-1.8-mark-2/main/jitterbuf.c
    team/oej/adb-appleraision-1.8-mark-2/main/loader.c
    team/oej/adb-appleraision-1.8-mark-2/main/lock.c
    team/oej/adb-appleraision-1.8-mark-2/main/logger.c
    team/oej/adb-appleraision-1.8-mark-2/main/manager.c
    team/oej/adb-appleraision-1.8-mark-2/main/md5.c
    team/oej/adb-appleraision-1.8-mark-2/main/netsock.c
    team/oej/adb-appleraision-1.8-mark-2/main/netsock2.c
    team/oej/adb-appleraision-1.8-mark-2/main/pbx.c
    team/oej/adb-appleraision-1.8-mark-2/main/plc.c
    team/oej/adb-appleraision-1.8-mark-2/main/privacy.c
    team/oej/adb-appleraision-1.8-mark-2/main/rtp_engine.c
    team/oej/adb-appleraision-1.8-mark-2/main/say.c
    team/oej/adb-appleraision-1.8-mark-2/main/sched.c
    team/oej/adb-appleraision-1.8-mark-2/main/security_events.c
    team/oej/adb-appleraision-1.8-mark-2/main/slinfactory.c
    team/oej/adb-appleraision-1.8-mark-2/main/srv.c
    team/oej/adb-appleraision-1.8-mark-2/main/ssl.c
    team/oej/adb-appleraision-1.8-mark-2/main/stdtime/localtime.c
    team/oej/adb-appleraision-1.8-mark-2/main/strcompat.c
    team/oej/adb-appleraision-1.8-mark-2/main/strings.c
    team/oej/adb-appleraision-1.8-mark-2/main/stun.c
    team/oej/adb-appleraision-1.8-mark-2/main/syslog.c
    team/oej/adb-appleraision-1.8-mark-2/main/taskprocessor.c
    team/oej/adb-appleraision-1.8-mark-2/main/tcptls.c
    team/oej/adb-appleraision-1.8-mark-2/main/tdd.c
    team/oej/adb-appleraision-1.8-mark-2/main/term.c
    team/oej/adb-appleraision-1.8-mark-2/main/test.c
    team/oej/adb-appleraision-1.8-mark-2/main/threadstorage.c
    team/oej/adb-appleraision-1.8-mark-2/main/timing.c
    team/oej/adb-appleraision-1.8-mark-2/main/translate.c
    team/oej/adb-appleraision-1.8-mark-2/main/udptl.c
    team/oej/adb-appleraision-1.8-mark-2/main/ulaw.c
    team/oej/adb-appleraision-1.8-mark-2/main/utils.c
    team/oej/adb-appleraision-1.8-mark-2/main/xml.c
    team/oej/adb-appleraision-1.8-mark-2/main/xmldoc.c
    team/oej/adb-appleraision-1.8-mark-2/pbx/dundi-parser.c
    team/oej/adb-appleraision-1.8-mark-2/pbx/pbx_config.c
    team/oej/adb-appleraision-1.8-mark-2/pbx/pbx_dundi.c
    team/oej/adb-appleraision-1.8-mark-2/res/ael/ael.flex
    team/oej/adb-appleraision-1.8-mark-2/res/ael/pval.c
    team/oej/adb-appleraision-1.8-mark-2/res/ais/clm.c
    team/oej/adb-appleraision-1.8-mark-2/res/ais/evt.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_adsi.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_calendar.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_calendar_caldav.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_calendar_ews.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_calendar_exchange.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_calendar_icalendar.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_config_odbc.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_fax.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_jabber.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_monitor.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_odbc.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_rtp_asterisk.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_smdi.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_speech.c
    team/oej/adb-appleraision-1.8-mark-2/res/res_srtp.c

Propchange: team/oej/adb-appleraision-1.8-mark-2/
            ('svnmerge-integrated' removed)

Modified: team/oej/adb-appleraision-1.8-mark-2/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/Makefile?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/Makefile (original)
+++ team/oej/adb-appleraision-1.8-mark-2/Makefile Wed Jun 27 03:09:18 2012
@@ -466,39 +466,23 @@
 
 NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h))
 OLDHEADERS=$(filter-out $(NEWHEADERS) $(notdir $(DESTDIR)$(ASTHEADERDIR)),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h)))
+INSTALLDIRS="$(ASTLIBDIR)" "$(MODULES_DIR)" "$(ASTSBINDIR)" "$(ASTETCDIR)" "$(ASTVARRUNDIR)" \
+	"$(ASTSPOOLDIR)" "$(ASTSPOOLDIR)/dictate" "$(ASTSPOOLDIR)/meetme" \
+	"$(ASTSPOOLDIR)/monitor" "$(ASTSPOOLDIR)/system" "$(ASTSPOOLDIR)/tmp" \
+	"$(ASTSPOOLDIR)/voicemail" "$(ASTHEADERDIR)" "$(ASTHEADERDIR)/doxygen" \
+	"$(ASTLOGDIR)" "$(ASTLOGDIR)/cdr-csv" "$(ASTLOGDIR)/cdr-custom" \
+	"$(ASTLOGDIR)/cel-custom" "$(ASTDATADIR)" "$(ASTDATADIR)/documentation" \
+	"$(ASTDATADIR)/documentation/thirdparty" "$(ASTDATADIR)/firmware" \
+	"$(ASTDATADIR)/firmware/iax" "$(ASTDATADIR)/images" "$(ASTDATADIR)/keys" \
+	"$(ASTDATADIR)/phoneprov" "$(ASTDATADIR)/static-http" "$(ASTDATADIR)/sounds" \
+	"$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)"
 
 installdirs:
-	$(INSTALL) -d "$(DESTDIR)$(MODULES_DIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSBINDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTETCDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTVARRUNDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/dictate"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/meetme"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/monitor"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/system"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/tmp"
-	$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail"
-	$(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
-	$(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cdr-csv"
-	$(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cdr-custom"
-	$(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cel-custom"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/documentation"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/documentation/thirdparty"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/firmware"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/firmware/iax"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/images"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/keys"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/phoneprov"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/sounds"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/moh"
-	$(INSTALL) -d "$(DESTDIR)$(ASTMANDIR)/man8"
-	$(INSTALL) -d "$(DESTDIR)$(AGI_DIR)"
-	$(INSTALL) -d "$(DESTDIR)$(ASTDBDIR)"
+	@for i in $(INSTALLDIRS); do \
+		if [ ! -z "$${i}" -a ! -d "$(DESTDIR)$${i}" ]; then \
+			$(INSTALL) -d "$(DESTDIR)$${i}"; \
+		fi; \
+	done
 
 bininstall: _all installdirs $(SUBDIRS_INSTALL)
 	$(INSTALL) -m 755 main/asterisk "$(DESTDIR)$(ASTSBINDIR)/"

Modified: team/oej/adb-appleraision-1.8-mark-2/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/UPGRADE.txt?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/UPGRADE.txt (original)
+++ team/oej/adb-appleraision-1.8-mark-2/UPGRADE.txt Wed Jun 27 03:09:18 2012
@@ -29,6 +29,12 @@
 
 From 1.8.10 to 1.8.11:
 
+* The BLINDTRANSFER channel variable is deleted from a channel when it is
+  bridged to prevent subtle bugs in the parking feature.  The channel
+  variable is used by Asterisk internally for the Park application to work
+  properly.  If you were using it for your own purposes, copy it to your
+  own channel variable before the channel is bridged.
+
 * If no transport is specified in sip.conf, transport will default to UDP.
   Also, if multiple transport= lines are used, only the last will be used.
 

Modified: team/oej/adb-appleraision-1.8-mark-2/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/addons/chan_ooh323.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/addons/chan_ooh323.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/addons/chan_ooh323.c Wed Jun 27 03:09:18 2012
@@ -1154,6 +1154,8 @@
 
 	if (p) {
 		ast_mutex_lock(&p->lock);
+
+		p->lastrtptx = time(NULL);
 
 		if (f->frametype == AST_FRAME_MODEM) {
 			ast_debug(1, "Send UDPTL %d/%d len %d for %s\n",
@@ -3451,6 +3453,24 @@
 			h323_next = h323->next;
 
 			/* TODO: Need to add rtptimeout keepalive support */
+
+			if (h323->rtp && h323->rtptimeout && h323->lastrtptx &&
+				h323->lastrtptx + h323->rtptimeout < t) {
+				ast_rtp_instance_sendcng(h323->rtp, 0);
+				h323->lastrtptx = time(NULL);
+			}
+
+			if (h323->rtp && h323->owner && h323->rtptimeout &&
+				h323->lastrtprx &&
+				h323->lastrtprx + h323->rtptimeout < t) {
+				if (!ast_channel_trylock(h323->owner)) {
+					ast_softhangup_nolock(h323->owner, AST_SOFTHANGUP_DEV);
+					ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n", h323->owner->name, (long) (t - h323->lastrtprx));
+					ast_channel_unlock(h323->owner);
+				}
+				
+			}
+
 			if (ast_test_flag(h323, H323_NEEDDESTROY)) {
 				ooh323_destroy (h323);
          } /* else if (ast_test_flag(h323, H323_NEEDSTART) && h323->owner) {
@@ -4277,12 +4297,14 @@
 	switch (ast->fdno) {
 	case 0:
 		f = ast_rtp_instance_read(p->rtp, 0);	/* RTP Audio */
+		p->lastrtprx = time(NULL);
 		break;
 	case 1:
 		f = ast_rtp_instance_read(p->rtp, 1);	/* RTCP Control Channel */
 		break;
 	case 2:
 		f = ast_rtp_instance_read(p->vrtp, 0);	/* RTP Video */
+		p->lastrtprx = time(NULL);
 		break;
 	case 3:
 		f = ast_rtp_instance_read(p->vrtp, 1);	/* RTCP Control Channel for video */
@@ -4291,6 +4313,7 @@
 		f = ast_udptl_read(p->udptl);		/* UDPTL t.38 data */
 		if (gH323Debug) ast_debug(1, "Got UDPTL %d/%d len %d for %s\n",
 				f->frametype, f->subclass.integer, f->datalen, ast->name);
+		p->lastrtprx = time(NULL);
 		break;
 
 	default:

Modified: team/oej/adb-appleraision-1.8-mark-2/addons/format_mp3.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/addons/format_mp3.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/addons/format_mp3.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/addons/format_mp3.c Wed Jun 27 03:09:18 2012
@@ -9,7 +9,7 @@
  * Thanks to mpglib from http://www.mpg123.org/
  * and Chris Stenton [jacs at gnome.co.uk]
  * for coding the ability to play stereo and non-8khz files
- 
+
  * See http://www.asterisk.org for more information about
  * the Asterisk project. Please do not directly contact
  * any of the maintainers of this project for assistance;
@@ -48,20 +48,20 @@
 #define MP3_DCACHE 8192
 
 struct mp3_private {
-	char waste[AST_FRIENDLY_OFFSET];	/* Buffer for sending frames, etc */
-	char empty;				/* Empty character */
-	int lasttimeout;
-	int maxlen;
-	struct timeval last;
+	/*! state for the mp3 decoder */
 	struct mpstr mp;
+	/*! buffer to hold mp3 data after read from disk */
 	char sbuf[MP3_SCACHE];
+	/*! buffer for slinear audio after being decoded out of sbuf */
 	char dbuf[MP3_DCACHE];
+	/*! how much data has been written to the output buffer in the ast_filestream */
 	int buflen;
+	/*! how much data has been written to sbuf */
 	int sbuflen;
+	/*! how much data is left to be read out of dbuf, starting at dbufoffset */
 	int dbuflen;
+	/*! current offset for reading data out of dbuf */
 	int dbufoffset;
-	int sbufoffset;
-	int lastseek;
 	int offset;
 	long seek;
 };
@@ -107,17 +107,17 @@
 static void mp3_close(struct ast_filestream *s)
 {
 	struct mp3_private *p = s->_private;
-	
+
 	ExitMP3(&p->mp);
 	return;
 }
 
-static int mp3_squeue(struct ast_filestream *s) 
+static int mp3_squeue(struct ast_filestream *s)
 {
 	struct mp3_private *p = s->_private;
 	int res=0;
-	
-	p->lastseek = ftell(s->f);
+
+	res = ftell(s->f);
 	p->sbuflen = fread(p->sbuf, 1, MP3_SCACHE, s->f);
 	if(p->sbuflen < 0) {
 		ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", p->sbuflen, strerror(errno));
@@ -131,11 +131,11 @@
 	return 0;
 }
 
-static int mp3_dqueue(struct ast_filestream *s) 
+static int mp3_dqueue(struct ast_filestream *s)
 {
 	struct mp3_private *p = s->_private;
 	int res=0;
-	
+
 	if((res = decodeMP3(&p->mp,NULL,0,p->dbuf,MP3_DCACHE,&p->dbuflen)) == MP3_OK) {
 		p->sbuflen -= p->dbuflen;
 		p->dbufoffset = 0;
@@ -147,7 +147,7 @@
 {
 	struct mp3_private *p = s->_private;
 	int res = 0, bytes = 0;
-	
+
 	if(p->seek) {
 		ExitMP3(&p->mp);
 		InitMP3(&p->mp, OUTSCALE);
@@ -167,7 +167,7 @@
 			if(res == MP3_ERR)
 				return -1;
 		}
-		
+
 		p->seek = 0;
 		return 0;
 	}
@@ -181,7 +181,7 @@
 			if(mp3_squeue(s))
 				return -1;
 		}
-		
+
 	}
 
 	return 0;
@@ -194,36 +194,41 @@
 	int delay =0;
 	int save=0;
 
-	/* Send a frame from the file to the appropriate channel */
-
-	if(mp3_queue(s))
+	/* Pre-populate the buffer that holds audio to be returned (dbuf) */
+	if (mp3_queue(s)) {
 		return NULL;
-
-	if(p->dbuflen) {
-		for(p->buflen=0; p->buflen < MP3_BUFLEN && p->buflen < p->dbuflen; p->buflen++) {
-			s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[p->buflen+p->dbufoffset];
-			p->sbufoffset++;
+	}
+
+	if (p->dbuflen) {
+		/* Read out what's waiting in dbuf */
+		for (p->buflen = 0; p->buflen < MP3_BUFLEN && p->buflen < p->dbuflen; p->buflen++) {
+			s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[p->buflen + p->dbufoffset];
 		}
 		p->dbufoffset += p->buflen;
 		p->dbuflen -= p->buflen;
-
-		if(p->buflen < MP3_BUFLEN) {
-			if(mp3_queue(s))
-				return NULL;
-
-			for(save = p->buflen; p->buflen < MP3_BUFLEN; p->buflen++) {
-				s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[(p->buflen-save)+p->dbufoffset];
-				p->sbufoffset++;
+	}
+
+	if (p->buflen < MP3_BUFLEN) {
+		/* dbuf didn't have enough, so reset dbuf, fill it back up and continue */
+		p->dbuflen = p->dbufoffset = 0;
+
+		if (mp3_queue(s)) {
+			return NULL;
+		}
+
+		/* Make sure dbuf has enough to complete this read attempt */
+		if (p->dbuflen >= (MP3_BUFLEN - p->buflen)) {
+			for (save = p->buflen; p->buflen < MP3_BUFLEN; p->buflen++) {
+				s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[(p->buflen - save) + p->dbufoffset];
 			}
 			p->dbufoffset += (MP3_BUFLEN - save);
 			p->dbuflen -= (MP3_BUFLEN - save);
-
-		} 
-
-	}
-	
+		}
+
+	}
+
 	p->offset += p->buflen;
-	delay = p->buflen/2;
+	delay = p->buflen / 2;
 	s->fr.frametype = AST_FRAME_VOICE;
 	s->fr.subclass.codec = AST_FORMAT_SLINEAR;
 	AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, p->buflen);
@@ -266,16 +271,16 @@
 
 	p->seek = offset;
 	return fseek(s->f, offset, SEEK_SET);
-	
-}
-
-static int mp3_rewrite(struct ast_filestream *s, const char *comment) 
+
+}
+
+static int mp3_rewrite(struct ast_filestream *s, const char *comment)
 {
 	ast_log(LOG_ERROR,"I Can't write MP3 only read them.\n");
 	return -1;
 }
 
-static int mp3_trunc(struct ast_filestream *s) 
+static int mp3_trunc(struct ast_filestream *s)
 {
 
 	ast_log(LOG_ERROR,"I Can't write MP3 only read them.\n");
@@ -285,7 +290,7 @@
 static off_t mp3_tell(struct ast_filestream *s)
 {
 	struct mp3_private *p = s->_private;
-	
+
 	return p->offset/2;
 }
 
@@ -321,6 +326,6 @@
 static int unload_module(void)
 {
 	return ast_format_unregister(name);
-}	
+}
 
 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "MP3 format [Any rate but 8000hz mono is optimal]");

Modified: team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooCalls.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooCalls.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooCalls.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooCalls.c Wed Jun 27 03:09:18 2012
@@ -265,14 +265,13 @@
 
 int ooRemoveCallFromList (OOH323CallData *call)
 {
-   if(!call)
+   if(!call || !gH323ep.callList)
       return OO_OK;
 
    ast_mutex_lock(&callListLock);
 
    OOTRACEINFO3("Removing call %lx: %s\n", call, call->callToken);
 
-   if (!gH323ep.callList) return OO_OK;
    if(call == gH323ep.callList)
    {
       if(!call->next)

Modified: team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooq931.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooq931.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooq931.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/addons/ooh323c/src/ooq931.c Wed Jun 27 03:09:18 2012
@@ -2316,7 +2316,7 @@
       else
          OO_CLRFLAG(call->flags, OO_M_TUNNELING);
 
-      if(opts->disableGk)
+      if(opts->disableGk || gH323ep.gkClient == NULL)
          OO_SETFLAG(call->flags, OO_M_DISABLEGK);
       else
          OO_CLRFLAG(call->flags, OO_M_DISABLEGK);

Modified: team/oej/adb-appleraision-1.8-mark-2/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/apps/app_dial.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/apps/app_dial.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/apps/app_dial.c Wed Jun 27 03:09:18 2012
@@ -823,7 +823,8 @@
  * \param o Outgoing call channel list.
  * \param num Incoming call channel cause accumulation
  * \param peerflags Dial option flags
- * \param single_caller_bored From wait_for_answer: single && !caller_entertained
+ * \param single TRUE if there is only one outgoing call.
+ * \param caller_entertained TRUE if the caller is being entertained by MOH or ringback.
  * \param to Remaining call timeout time.
  * \param forced_clid OPT_FORCECLID caller id to send
  * \param stored_clid Caller id representing the called party if needed
@@ -833,8 +834,8 @@
  *
  * \todo eventually this function should be intergrated into and replaced by ast_call_forward()
  */
-static void do_forward(struct chanlist *o,
-	struct cause_args *num, struct ast_flags64 *peerflags, int single_caller_bored, int *to,
+static void do_forward(struct chanlist *o, struct cause_args *num,
+	struct ast_flags64 *peerflags, int single, int caller_entertained, int *to,
 	struct ast_party_id *forced_clid, struct ast_party_id *stored_clid)
 {
 	char tmpchan[256];
@@ -861,6 +862,14 @@
 		ast_channel_unlock(c);
 		stuff = tmpchan;
 		tech = "Local";
+	}
+	if (!strcasecmp(tech, "Local")) {
+		/*
+		 * Drop the connected line update block for local channels since
+		 * this is going to run dialplan and the user can change his
+		 * mind about what connected line information he wants to send.
+		 */
+		ast_clear_flag64(o, OPT_IGNORE_CONNECTEDLINE);
 	}
 
 	ast_cel_report_event(in, AST_CEL_FORWARD, NULL, c->call_forward, NULL);
@@ -876,11 +885,14 @@
 		/* Setup parameters */
 		c = o->chan = ast_request(tech, in->nativeformats, in, stuff, &cause);
 		if (c) {
-			if (single_caller_bored) {
+			if (single && !caller_entertained) {
 				ast_channel_make_compatible(o->chan, in);
 			}
+			ast_channel_lock_both(in, o->chan);
 			ast_channel_inherit_variables(in, o->chan);
 			ast_channel_datastore_inherit(in, o->chan);
+			ast_channel_unlock(in);
+			ast_channel_unlock(o->chan);
 			/* When a call is forwarded, we don't want to track new interfaces
 			 * dialed for CC purposes. Setting the done flag will ensure that
 			 * any Dial operations that happen later won't record CC interfaces.
@@ -897,17 +909,17 @@
 		handle_cause(cause, num);
 		ast_hangup(original);
 	} else {
-		struct ast_party_redirecting redirecting;
-
-		if (single_caller_bored && CAN_EARLY_BRIDGE(peerflags, c, in)) {
+		ast_channel_lock_both(c, original);
+		ast_party_redirecting_copy(&c->redirecting, &original->redirecting);
+		ast_channel_unlock(c);
+		ast_channel_unlock(original);
+
+		ast_channel_lock_both(c, in);
+
+		if (single && !caller_entertained && CAN_EARLY_BRIDGE(peerflags, c, in)) {
 			ast_rtp_instance_early_bridge_make_compatible(c, in);
 		}
 
-		ast_channel_set_redirecting(c, &original->redirecting, NULL);
-		ast_channel_lock(c);
-		while (ast_channel_trylock(in)) {
-			CHANNEL_DEADLOCK_AVOIDANCE(c);
-		}
 		if (!c->redirecting.from.number.valid
 			|| ast_strlen_zero(c->redirecting.from.number.str)) {
 			/*
@@ -928,6 +940,7 @@
 		if (ast_test_flag64(peerflags, OPT_ORIGINAL_CLID)) {
 			caller.id = *stored_clid;
 			ast_channel_set_caller_event(c, &caller, NULL);
+			ast_set_flag64(o, DIAL_CALLERID_ABSENT);
 		} else if (ast_strlen_zero(S_COR(c->caller.id.number.valid,
 			c->caller.id.number.str, NULL))) {
 			/*
@@ -936,6 +949,9 @@
 			 */
 			caller.id = *stored_clid;
 			ast_channel_set_caller_event(c, &caller, NULL);
+			ast_set_flag64(o, DIAL_CALLERID_ABSENT);
+		} else {
+			ast_clear_flag64(o, DIAL_CALLERID_ABSENT);
 		}
 
 		/* Determine CallerID for outgoing channel to send. */
@@ -953,22 +969,32 @@
 
 		c->appl = "AppDial";
 		c->data = "(Outgoing Line)";
-		/*
-		 * We must unlock c before calling ast_channel_redirecting_macro, because
-		 * we put c into autoservice there. That is pretty much a guaranteed
-		 * deadlock. This is why the handling of c's lock may seem a bit unusual
-		 * here.
-		 */
-		ast_party_redirecting_init(&redirecting);
-		ast_party_redirecting_copy(&redirecting, &c->redirecting);
-		ast_channel_unlock(c);
-		if (ast_channel_redirecting_macro(c, in, &redirecting, 1, 0)) {
-			ast_channel_update_redirecting(in, &redirecting, NULL);
-		}
-		ast_party_redirecting_free(&redirecting);
+
 		ast_channel_unlock(in);
-
-		ast_clear_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE);
+		if (single && !ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
+			struct ast_party_redirecting redirecting;
+
+			/*
+			 * Redirecting updates to the caller make sense only on single
+			 * calls.
+			 *
+			 * We must unlock c before calling
+			 * ast_channel_redirecting_macro, because we put c into
+			 * autoservice there.  That is pretty much a guaranteed
+			 * deadlock.  This is why the handling of c's lock may seem a
+			 * bit unusual here.
+			 */
+			ast_party_redirecting_init(&redirecting);
+			ast_party_redirecting_copy(&redirecting, &c->redirecting);
+			ast_channel_unlock(c);
+			if (ast_channel_redirecting_macro(c, in, &redirecting, 1, 0)) {
+				ast_channel_update_redirecting(in, &redirecting, NULL);
+			}
+			ast_party_redirecting_free(&redirecting);
+		} else {
+			ast_channel_unlock(c);
+		}
+
 		if (ast_test_flag64(peerflags, OPT_CANCEL_TIMEOUT)) {
 			*to = -1;
 		}
@@ -982,17 +1008,14 @@
 			c = o->chan = NULL;
 			num->nochan++;
 		} else {
-			ast_channel_lock(c);
-			while (ast_channel_trylock(in)) {
-				CHANNEL_DEADLOCK_AVOIDANCE(c);
-			}
+			ast_channel_lock_both(c, in);
 			senddialevent(in, c, stuff);
 			ast_channel_unlock(in);
 			ast_channel_unlock(c);
 			/* Hangup the original channel now, in case we needed it */
 			ast_hangup(original);
 		}
-		if (single_caller_bored) {
+		if (single && !caller_entertained) {
 			ast_indicate(in, -1);
 		}
 	}
@@ -1052,7 +1075,8 @@
 			}
 		}
 
-		if (!ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE) && !ast_test_flag64(outgoing, DIAL_CALLERID_ABSENT)) {
+		if (!ast_test_flag64(outgoing, OPT_IGNORE_CONNECTEDLINE)
+			&& !ast_test_flag64(outgoing, DIAL_CALLERID_ABSENT)) {
 			ast_channel_lock(outgoing->chan);
 			ast_connected_line_copy_from_caller(&connected_caller, &outgoing->chan->caller);
 			ast_channel_unlock(outgoing->chan);
@@ -1113,7 +1137,7 @@
 			if (ast_test_flag64(o, DIAL_STILLGOING) && c->_state == AST_STATE_UP) {
 				if (!peer) {
 					ast_verb(3, "%s answered %s\n", c->name, in->name);
-					if (!single && !ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
+					if (!single && !ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
 						if (o->pending_connected_update) {
 							if (ast_channel_connected_line_macro(c, in, &o->connected, 1, 0)) {
 								ast_channel_update_connected_line(in, &o->connected, NULL);
@@ -1164,8 +1188,35 @@
 					}
 					ast_frfree(f);
 				}
-				do_forward(o, &num, peerflags, single && !caller_entertained, to,
+
+				if (o->pending_connected_update) {
+					/*
+					 * Re-seed the chanlist's connected line information with
+					 * previously acquired connected line info from the incoming
+					 * channel.  The previously acquired connected line info could
+					 * have been set through the CONNECTED_LINE dialplan function.
+					 */
+					o->pending_connected_update = 0;
+					ast_channel_lock(in);
+					ast_party_connected_line_copy(&o->connected, &in->connected);
+					ast_channel_unlock(in);
+				}
+
+				do_forward(o, &num, peerflags, single, caller_entertained, to,
 					forced_clid, stored_clid);
+
+				if (single && o->chan
+					&& !ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)
+					&& !ast_test_flag64(o, DIAL_CALLERID_ABSENT)) {
+					ast_channel_lock(o->chan);
+					ast_connected_line_copy_from_caller(&connected_caller, &o->chan->caller);
+					ast_channel_unlock(o->chan);
+					connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+					if (ast_channel_connected_line_macro(o->chan, in, &connected_caller, 1, 0)) {
+						ast_channel_update_connected_line(in, &connected_caller, NULL);
+					}
+					ast_party_connected_line_free(&connected_caller);
+				}
 				continue;
 			}
 			f = ast_read(winner);
@@ -1187,7 +1238,7 @@
 					/* This is our guy if someone answered. */
 					if (!peer) {
 						ast_verb(3, "%s answered %s\n", c->name, in->name);
-						if (!single && !ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
+						if (!single && !ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
 							if (o->pending_connected_update) {
 								if (ast_channel_connected_line_macro(c, in, &o->connected, 1, 0)) {
 									ast_channel_update_connected_line(in, &o->connected, NULL);
@@ -1319,20 +1370,24 @@
 					ast_indicate(in, f->subclass.integer);
 					break;
 				case AST_CONTROL_CONNECTED_LINE:
-					if (ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
+					if (ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
 						ast_verb(3, "Connected line update to %s prevented.\n", in->name);
-					} else if (!single) {
+						break;
+					}
+					if (!single) {
 						struct ast_party_connected_line connected;
-						ast_verb(3, "%s connected line has changed. Saving it until answer for %s\n", c->name, in->name);
+
+						ast_verb(3, "%s connected line has changed. Saving it until answer for %s\n",
+							c->name, in->name);
 						ast_party_connected_line_set_init(&connected, &o->connected);
 						ast_connected_line_parse_data(f->data.ptr, f->datalen, &connected);
 						ast_party_connected_line_set(&o->connected, &connected, NULL);
 						ast_party_connected_line_free(&connected);
 						o->pending_connected_update = 1;
-					} else {
-						if (ast_channel_connected_line_macro(c, in, f, 1, 1)) {
-							ast_indicate_data(in, AST_CONTROL_CONNECTED_LINE, f->data.ptr, f->datalen);
-						}
+						break;
+					}
+					if (ast_channel_connected_line_macro(c, in, f, 1, 1)) {
+						ast_indicate_data(in, AST_CONTROL_CONNECTED_LINE, f->data.ptr, f->datalen);
 					}
 					break;
 				case AST_CONTROL_AOC:
@@ -1347,15 +1402,23 @@
 					}
 					break;
 				case AST_CONTROL_REDIRECTING:
-					if (ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
+					if (!single) {
+						/*
+						 * Redirecting updates to the caller make sense only on single
+						 * calls.
+						 */
+						break;
+					}
+					if (ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
 						ast_verb(3, "Redirecting update to %s prevented.\n", in->name);
-					} else if (single) {
-						ast_verb(3, "%s redirecting info has changed, passing it to %s\n", c->name, in->name);
-						if (ast_channel_redirecting_macro(c, in, f, 1, 1)) {
-							ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);
-						}
-						pa->sentringing = 0;
-					}
+						break;
+					}
+					ast_verb(3, "%s redirecting info has changed, passing it to %s\n",
+						c->name, in->name);
+					if (ast_channel_redirecting_macro(c, in, f, 1, 1)) {
+						ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);
+					}
+					pa->sentringing = 0;
 					break;
 				case AST_CONTROL_PROCEEDING:
 					ast_verb(3, "%s is proceeding passing it to %s\n", c->name, in->name);
@@ -2162,9 +2225,12 @@
 	} else if ((outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP"))) {
 		outbound_group = ast_strdupa(outbound_group);
 	}
-	ast_channel_unlock(chan);	
-	ast_copy_flags64(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID | OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING | OPT_IGNORE_CONNECTEDLINE |
-			 OPT_CANCEL_TIMEOUT | OPT_ANNOUNCE | OPT_CALLEE_MACRO | OPT_CALLEE_GOSUB | OPT_FORCECLID);
+	ast_channel_unlock(chan);
+
+	/* Set per dial instance flags.  These flags are also passed back to RetryDial. */
+	ast_copy_flags64(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID
+		| OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING | OPT_CANCEL_TIMEOUT
+		| OPT_ANNOUNCE | OPT_CALLEE_MACRO | OPT_CALLEE_GOSUB | OPT_FORCECLID);
 
 	/* loop through the list of dial destinations */
 	rest = args.peers;
@@ -2186,6 +2252,7 @@
 		if (!(tmp = ast_calloc(1, sizeof(*tmp))))
 			goto out;
 		if (opts.flags) {
+			/* Set per outgoing call leg options. */
 			ast_copy_flags64(tmp, &opts,
 				OPT_CANCEL_ELSEWHERE |
 				OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER |
@@ -2193,7 +2260,7 @@
 				OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR |
 				OPT_CALLEE_PARK | OPT_CALLER_PARK |
 				OPT_CALLEE_MIXMONITOR | OPT_CALLER_MIXMONITOR |
-				OPT_RINGBACK | OPT_MUSICBACK | OPT_FORCECLID);
+				OPT_RINGBACK | OPT_MUSICBACK | OPT_FORCECLID | OPT_IGNORE_CONNECTEDLINE);
 			ast_set2_flag64(tmp, args.url, DIAL_NOFORWARDHTML);
 		}
 		ast_copy_string(numsubst, number, sizeof(numsubst));
@@ -2621,7 +2688,9 @@
 			ast_copy_string(peer->context, chan->context, sizeof(peer->context));
 			ast_copy_string(peer->exten, chan->exten, sizeof(peer->exten));
 			peer->priority = chan->priority + 2;
-			ast_pbx_start(peer);
+			if (ast_pbx_start(peer)) {
+				ast_hangup(peer);
+			}
 			hanguptree(outgoing, NULL, ast_test_flag64(&opts, OPT_CANCEL_ELSEWHERE) ? 1 : 0);
 			if (continue_exec)
 				*continue_exec = 1;
@@ -2912,24 +2981,26 @@
 			}
 			ast_set2_flag(peer, autoloopflag, AST_FLAG_IN_AUTOLOOP);  /* set it back the way it was */
 		}
-		if (!ast_check_hangup(peer) && ast_test_flag64(&opts, OPT_CALLEE_GO_ON)) {
-			if(!ast_strlen_zero(opt_args[OPT_ARG_CALLEE_GO_ON])) {
-				replace_macro_delimiter(opt_args[OPT_ARG_CALLEE_GO_ON]);
-				ast_parseable_goto(peer, opt_args[OPT_ARG_CALLEE_GO_ON]);
-			} else { /* F() */
-				int res;
-				res = ast_goto_if_exists(peer, chan->context, chan->exten, (chan->priority) + 1); 
-				if (res == AST_PBX_GOTO_FAILED) {
-					ast_hangup(peer);
+		if (!ast_check_hangup(peer)) {
+			if (ast_test_flag64(&opts, OPT_CALLEE_GO_ON)) {
+				int goto_res;
+
+				if (!ast_strlen_zero(opt_args[OPT_ARG_CALLEE_GO_ON])) {
+					replace_macro_delimiter(opt_args[OPT_ARG_CALLEE_GO_ON]);
+					goto_res = ast_parseable_goto(peer, opt_args[OPT_ARG_CALLEE_GO_ON]);
+				} else { /* F() */
+					goto_res = ast_goto_if_exists(peer, chan->context,
+						chan->exten, chan->priority + 1);
+				}
+				if (!goto_res && !ast_pbx_start(peer)) {
+					/* The peer is now running its own PBX. */
 					goto out;
 				}
-			}
-			ast_pbx_start(peer);
-		} else {
-			if (!ast_check_hangup(chan))
+			} else {
 				chan->hangupcause = peer->hangupcause;
-			ast_hangup(peer);
-		}
+			}
+		}
+		ast_hangup(peer);
 	}
 out:
 	if (moh) {

Modified: team/oej/adb-appleraision-1.8-mark-2/apps/app_directory.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/apps/app_directory.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/apps/app_directory.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/apps/app_directory.c Wed Jun 27 03:09:18 2012
@@ -475,7 +475,8 @@
 		const char *context = ast_variable_retrieve(rtdata, mailbox, "context");
 
 		fullname = ast_variable_retrieve(rtdata, mailbox, "fullname");
-		if (ast_true((hidefromdir = ast_variable_retrieve(rtdata, mailbox, "hidefromdir")))) {
+		hidefromdir = ast_variable_retrieve(rtdata, mailbox, "hidefromdir");
+		if (ast_true(hidefromdir)) {
 			/* Skip hidden */
 			continue;
 		}

Modified: team/oej/adb-appleraision-1.8-mark-2/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/adb-appleraision-1.8-mark-2/apps/app_meetme.c?view=diff&rev=369423&r1=369422&r2=369423
==============================================================================
--- team/oej/adb-appleraision-1.8-mark-2/apps/app_meetme.c (original)
+++ team/oej/adb-appleraision-1.8-mark-2/apps/app_meetme.c Wed Jun 27 03:09:18 2012

[... 9896 lines stripped ...]



More information about the asterisk-commits mailing list