[asterisk-commits] pabelanger: branch pabelanger/issue18183 r298172 - in /team/pabelanger/issue1...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Dec 12 11:10:00 CST 2010


Author: pabelanger
Date: Sun Dec 12 11:09:28 2010
New Revision: 298172

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=298172
Log:
Resync and automerge

Added:
    team/pabelanger/issue18183/contrib/init.d/org.asterisk.muted.plist
      - copied unchanged from r298099, branches/1.8/contrib/init.d/org.asterisk.muted.plist
    team/pabelanger/issue18183/doc/README.txt
      - copied unchanged from r298099, branches/1.8/doc/README.txt
    team/pabelanger/issue18183/tests/test_expr.c
      - copied unchanged from r298099, branches/1.8/tests/test_expr.c
Removed:
    team/pabelanger/issue18183/doc/CCSS_architecture.pdf
    team/pabelanger/issue18183/doc/CODING-GUIDELINES
    team/pabelanger/issue18183/doc/HOWTO_collect_debug_information.txt
    team/pabelanger/issue18183/doc/India-CID.txt
    team/pabelanger/issue18183/doc/PEERING
    team/pabelanger/issue18183/doc/advice_of_charge.txt
    team/pabelanger/issue18183/doc/asterisk-mib.txt
    team/pabelanger/issue18183/doc/backtrace.txt
    team/pabelanger/issue18183/doc/building_queues.txt
    team/pabelanger/issue18183/doc/callfiles.txt
    team/pabelanger/issue18183/doc/chan_sip-perf-testing.txt
    team/pabelanger/issue18183/doc/cli.txt
    team/pabelanger/issue18183/doc/codec-64bit.txt
    team/pabelanger/issue18183/doc/database_transactions.txt
    team/pabelanger/issue18183/doc/datastores.txt
    team/pabelanger/issue18183/doc/digium-mib.txt
    team/pabelanger/issue18183/doc/distributed_devstate-XMPP.txt
    team/pabelanger/issue18183/doc/distributed_devstate.txt
    team/pabelanger/issue18183/doc/externalivr.txt
    team/pabelanger/issue18183/doc/followme.txt
    team/pabelanger/issue18183/doc/google-soc2009-ideas.txt
    team/pabelanger/issue18183/doc/hoard.txt
    team/pabelanger/issue18183/doc/jabber.txt
    team/pabelanger/issue18183/doc/janitor-projects.txt
    team/pabelanger/issue18183/doc/jingle.txt
    team/pabelanger/issue18183/doc/ldap.txt
    team/pabelanger/issue18183/doc/macroexclusive.txt
    team/pabelanger/issue18183/doc/manager_1_1.txt
    team/pabelanger/issue18183/doc/modules.txt
    team/pabelanger/issue18183/doc/osp.txt
    team/pabelanger/issue18183/doc/queue.txt
    team/pabelanger/issue18183/doc/realtimetext.txt
    team/pabelanger/issue18183/doc/res_config_sqlite.txt
    team/pabelanger/issue18183/doc/rtp-packetization.txt
    team/pabelanger/issue18183/doc/sip-retransmit.txt
    team/pabelanger/issue18183/doc/siptls.txt
    team/pabelanger/issue18183/doc/smdi.txt
    team/pabelanger/issue18183/doc/sms.txt
    team/pabelanger/issue18183/doc/snmp.txt
    team/pabelanger/issue18183/doc/speechrec.txt
    team/pabelanger/issue18183/doc/ss7.txt
    team/pabelanger/issue18183/doc/tex/
    team/pabelanger/issue18183/doc/timing.txt
    team/pabelanger/issue18183/doc/unistim.txt
    team/pabelanger/issue18183/doc/valgrind.txt
    team/pabelanger/issue18183/doc/video.txt
    team/pabelanger/issue18183/doc/video_console.txt
    team/pabelanger/issue18183/doc/voicemail_odbc_postgresql.txt
Modified:
    team/pabelanger/issue18183/   (props changed)
    team/pabelanger/issue18183/Makefile
    team/pabelanger/issue18183/UPGRADE.txt
    team/pabelanger/issue18183/addons/ooh323c/src/ooGkClient.c
    team/pabelanger/issue18183/apps/app_dial.c
    team/pabelanger/issue18183/apps/app_followme.c
    team/pabelanger/issue18183/apps/app_macro.c
    team/pabelanger/issue18183/apps/app_meetme.c
    team/pabelanger/issue18183/apps/app_queue.c
    team/pabelanger/issue18183/apps/app_voicemail.c
    team/pabelanger/issue18183/build_tools/prep_tarball
    team/pabelanger/issue18183/channels/chan_console.c
    team/pabelanger/issue18183/channels/chan_dahdi.c
    team/pabelanger/issue18183/channels/chan_gtalk.c
    team/pabelanger/issue18183/channels/chan_iax2.c
    team/pabelanger/issue18183/channels/chan_misdn.c
    team/pabelanger/issue18183/channels/chan_sip.c
    team/pabelanger/issue18183/channels/misdn/isdn_msg_parser.c
    team/pabelanger/issue18183/channels/sig_analog.c
    team/pabelanger/issue18183/channels/sig_analog.h
    team/pabelanger/issue18183/channels/sig_pri.c
    team/pabelanger/issue18183/channels/sig_pri.h
    team/pabelanger/issue18183/codecs/codec_dahdi.c
    team/pabelanger/issue18183/configs/calendar.conf.sample
    team/pabelanger/issue18183/configs/chan_dahdi.conf.sample
    team/pabelanger/issue18183/configs/extensions.conf.sample
    team/pabelanger/issue18183/configs/res_curl.conf.sample
    team/pabelanger/issue18183/configs/sip_notify.conf.sample
    team/pabelanger/issue18183/configure
    team/pabelanger/issue18183/configure.ac
    team/pabelanger/issue18183/contrib/init.d/org.asterisk.asterisk.plist
    team/pabelanger/issue18183/contrib/scripts/ast_tls_cert
    team/pabelanger/issue18183/contrib/scripts/install_prereq
    team/pabelanger/issue18183/funcs/func_curl.c
    team/pabelanger/issue18183/include/asterisk.h
    team/pabelanger/issue18183/include/asterisk/autoconfig.h.in
    team/pabelanger/issue18183/include/asterisk/channel.h
    team/pabelanger/issue18183/include/asterisk/event.h
    team/pabelanger/issue18183/include/asterisk/frame.h
    team/pabelanger/issue18183/include/asterisk/jabber.h
    team/pabelanger/issue18183/include/asterisk/res_fax.h
    team/pabelanger/issue18183/include/asterisk/rtp_engine.h
    team/pabelanger/issue18183/include/asterisk/timing.h
    team/pabelanger/issue18183/main/abstract_jb.c
    team/pabelanger/issue18183/main/asterisk.c
    team/pabelanger/issue18183/main/channel.c
    team/pabelanger/issue18183/main/devicestate.c
    team/pabelanger/issue18183/main/event.c
    team/pabelanger/issue18183/main/features.c
    team/pabelanger/issue18183/main/manager.c
    team/pabelanger/issue18183/main/netsock.c
    team/pabelanger/issue18183/main/pbx.c
    team/pabelanger/issue18183/main/rtp_engine.c
    team/pabelanger/issue18183/main/say.c
    team/pabelanger/issue18183/main/timing.c
    team/pabelanger/issue18183/pbx/pbx_spool.c
    team/pabelanger/issue18183/res/ais/clm.c
    team/pabelanger/issue18183/res/ais/evt.c
    team/pabelanger/issue18183/res/res_calendar.c
    team/pabelanger/issue18183/res/res_fax.c
    team/pabelanger/issue18183/res/res_jabber.c
    team/pabelanger/issue18183/res/res_timing_timerfd.c
    team/pabelanger/issue18183/utils/muted.c

Propchange: team/pabelanger/issue18183/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/pabelanger/issue18183/
------------------------------------------------------------------------------
--- automerge-email (original)
+++ automerge-email Sun Dec 12 11:09:28 2010
@@ -1,1 +1,1 @@
-paul.belanger at polybeacon.com
+pabelanger at digium.com

Propchange: team/pabelanger/issue18183/
------------------------------------------------------------------------------
Binary property 'branch-1.6.2-merged' - no diff available.

Propchange: team/pabelanger/issue18183/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Sun Dec 12 11:09:28 2010
@@ -1,1 +1,1 @@
-/branches/1.8:1-293494
+/branches/1.8:1-293494,293496-298099

Modified: team/pabelanger/issue18183/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/Makefile?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/Makefile (original)
+++ team/pabelanger/issue18183/Makefile Sun Dec 12 11:09:28 2010
@@ -231,6 +231,9 @@
 endif
 
 ifeq ($(OSARCH),FreeBSD)
+  ifeq ($(PROC),i386)
+    _ASTCFLAGS+=-march=i686
+  endif
   # -V is understood by BSD Make, not by GNU make.
   BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
   _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
@@ -798,8 +801,17 @@
 			cat contrib/init.d/rc.archlinux.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > contrib/init.d/rc.asterisk.tmp ; \
 			$(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/rc.d/asterisk ; \
 			rm -f contrib/init.d/rc.asterisk.tmp ; \
-		elif [ -d $(DESTDIR)/Library/LaunchDaemons -a ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ] ; then \
-			$(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+		elif [ -d $(DESTDIR)/Library/LaunchDaemons ]; then \
+			if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
+				sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;' < contrib/init.d/org.asterisk.asterisk.plist > asterisk.plist ; \
+				$(INSTALL) -m 644 asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+				rm -f asterisk.plist; \
+			fi; \
+			if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist ]; then \
+				sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;' < contrib/init.d/org.asterisk.muted.plist > muted.plist ; \
+				$(INSTALL) -m 644 muted.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist; \
+				rm -f muted.plist; \
+			fi; \
 		elif [ -f /etc/slackware-version ]; then \
 			echo "Slackware is not currently supported, although an init script does exist for it."; \
 		else \
@@ -922,14 +934,6 @@
 	@cat sounds/sounds.xml >> $@
 	@echo "</menu>" >> $@
 
-pdf: asterisk.pdf
-asterisk.pdf:
-	$(MAKE) -C doc/tex asterisk.pdf
-
-txt: asterisk.txt
-asterisk.txt:
-	$(MAKE) -C doc/tex asterisk.txt
-
 .PHONY: menuselect
 .PHONY: main
 .PHONY: sounds
@@ -942,7 +946,6 @@
 .PHONY: uninstall
 .PHONY: _uninstall
 .PHONY: uninstall-all
-.PHONY: pdf
 .PHONY: dont-optimize
 .PHONY: badshell
 .PHONY: installdirs

Modified: team/pabelanger/issue18183/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/UPGRADE.txt?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/UPGRADE.txt (original)
+++ team/pabelanger/issue18183/UPGRADE.txt Sun Dec 12 11:09:28 2010
@@ -19,6 +19,10 @@
 ===========================================================
 
 From 1.6.2 to 1.8:
+
+* A couple of CLI commands in res_ais were changed back to their original form:
+    "ais show clm members" --> "ais clm show members"
+    "ais show evt event channels" --> "ais evt show event channels"
 
 * The default value for 'autofill' and 'shared_lastcall' in queues.conf has
   been changed to 'yes'.

Modified: team/pabelanger/issue18183/addons/ooh323c/src/ooGkClient.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/addons/ooh323c/src/ooGkClient.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/addons/ooh323c/src/ooGkClient.c (original)
+++ team/pabelanger/issue18183/addons/ooh323c/src/ooGkClient.c Sun Dec 12 11:09:28 2010
@@ -823,10 +823,9 @@
              sizeof(ASN116BITCHAR)* pGkClient->gkId.nchars);
    }
    else{
-      OOTRACEERR1("ERROR:No Gatekeeper ID present in received GKConfirmed "
+      OOTRACEINFO1("ERROR:No Gatekeeper ID present in received GKConfirmed "
                   "message\n");
-      OOTRACEINFO1("Ignoring message and will retransmit GRQ after timeout\n");
-      return OO_FAILED;
+      pGkClient->gkId.nchars = 0;
    }
    
    /* Extract Gatekeeper's RAS address */
@@ -1018,21 +1017,23 @@
      return OO_FAILED;
    }
    
-   pRegReq->m.gatekeeperIdentifierPresent=TRUE;
-   pRegReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
-   pRegReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc
+   if (pGkClient->gkId.nchars) {
+    pRegReq->m.gatekeeperIdentifierPresent=TRUE;
+    pRegReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
+    pRegReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc
                          (pctxt, pGkClient->gkId.nchars*sizeof(ASN116BITCHAR));
-   if(!pRegReq->gatekeeperIdentifier.data)
-   {
+    if(!pRegReq->gatekeeperIdentifier.data)
+    {
       OOTRACEERR1("Error: Failed to allocate memory for GKIdentifier in RRQ "
                    "message.\n");
       memReset(pctxt);
       pGkClient->state = GkClientFailed;
       ast_mutex_unlock(&pGkClient->Lock);
       return OO_FAILED;
-   }
-   memcpy(pRegReq->gatekeeperIdentifier.data, pGkClient->gkId.data, 
+    }
+    memcpy(pRegReq->gatekeeperIdentifier.data, pGkClient->gkId.data, 
                                 pGkClient->gkId.nchars*sizeof(ASN116BITCHAR));
+   }
    
    ooGkClientFillVendor(pGkClient, &pRegReq->endpointVendor);
    
@@ -1149,7 +1150,26 @@
    memcpy(pGkClient->endpointId.data, 
           pRegistrationConfirm->endpointIdentifier.data,
           sizeof(ASN116BITCHAR)*pGkClient->endpointId.nchars);
-   
+
+   /* Extract GK Identifier */
+   
+   if(pRegistrationConfirm->m.gatekeeperIdentifierPresent && pGkClient->gkId.nchars == 0)
+   {
+      pGkClient->gkId.nchars = pRegistrationConfirm->gatekeeperIdentifier.nchars;
+      pGkClient->gkId.data = (ASN116BITCHAR*)memAlloc(&pGkClient->ctxt,
+                              sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);
+      if(!pGkClient->gkId.data)
+      {
+         OOTRACEERR1("Error:Failed to allocate memory for GK ID data\n");
+         pGkClient->state = GkClientFailed;
+         return OO_FAILED;
+      }
+
+      memcpy(pGkClient->gkId.data, 
+             pRegistrationConfirm->gatekeeperIdentifier.data,
+             sizeof(ASN116BITCHAR)* pGkClient->gkId.nchars);
+   }
+
    /* Extract CallSignalling Address */
    for(i=0; i<(int)pRegistrationConfirm->callSignalAddress.count; i++)
    {
@@ -1437,21 +1457,23 @@
           sizeof(ASN116BITCHAR)*pGkClient->endpointId.nchars);
 
    /* Populate gatekeeper identifier */
-   pUnregReq->m.gatekeeperIdentifierPresent = TRUE;
-   pUnregReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
-   pUnregReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt,
+   if (pGkClient->gkId.nchars) {
+    pUnregReq->m.gatekeeperIdentifierPresent = TRUE;
+    pUnregReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
+    pUnregReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt,
                                  sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);
-   if(!pUnregReq->gatekeeperIdentifier.data)
-   {
+    if(!pUnregReq->gatekeeperIdentifier.data)
+    {
       OOTRACEERR1("Error:Failed to allocate memory for GKID of URQ message\n");
       memReset(pctxt);
       pGkClient->state = GkClientFailed;
       ast_mutex_unlock(&pGkClient->Lock);
       return OO_FAILED;
-   }
-   memcpy((void*)pUnregReq->gatekeeperIdentifier.data, 
+    }
+    memcpy((void*)pUnregReq->gatekeeperIdentifier.data, 
           (void*)pGkClient->gkId.data, 
           sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);   
+   }
 
    /* Check whether specific aliases are to be unregistered*/
    if(aliases)
@@ -1766,21 +1788,23 @@
                                              sizeof(H225CallIdentifier));
 
    /* Populate Gatekeeper Id */
-   pAdmReq->m.gatekeeperIdentifierPresent = TRUE;
-   pAdmReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
-   pAdmReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt,
+   if (pGkClient->gkId.nchars) {
+    pAdmReq->m.gatekeeperIdentifierPresent = TRUE;
+    pAdmReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
+    pAdmReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt,
                                  sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);
-   if(!pAdmReq->gatekeeperIdentifier.data)
-   {
+    if(!pAdmReq->gatekeeperIdentifier.data)
+    {
       OOTRACEERR1("Error:Failed to allocate memory for GKID of ARQ message\n");
       memReset(pctxt);
       pGkClient->state = GkClientFailed;
       ast_mutex_unlock(&pGkClient->Lock);
       return OO_FAILED;
-   }
-   memcpy((void*)pAdmReq->gatekeeperIdentifier.data, 
+    }
+    memcpy((void*)pAdmReq->gatekeeperIdentifier.data, 
           (void*)pGkClient->gkId.data, 
           sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);
+   }
 
    pAdmReq->m.willSupplyUUIEsPresent = 1;
    pAdmReq->willSupplyUUIEs = FALSE;
@@ -2416,20 +2440,22 @@
    pDRQ->m.callIdentifierPresent = 1;
    memcpy((void*)&pDRQ->callIdentifier, (void*)&call->callIdentifier,
                                              sizeof(H225CallIdentifier));
-   pDRQ->m.gatekeeperIdentifierPresent = 1;
-   pDRQ->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
-   pDRQ->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc
+   if (pGkClient->gkId.nchars) {
+    pDRQ->m.gatekeeperIdentifierPresent = 1;
+    pDRQ->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars;
+    pDRQ->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc
                        (pctxt, pGkClient->gkId.nchars*sizeof(ASN116BITCHAR));
-   if(!pDRQ->gatekeeperIdentifier.data)
-   {
+    if(!pDRQ->gatekeeperIdentifier.data)
+    {
       OOTRACEERR1("Error:Failed to allocate memory for GKId in DRQ.\n");
       memReset(pctxt);
       pGkClient->state = GkClientFailed;
       ast_mutex_unlock(&pGkClient->Lock);
       return OO_FAILED;
-   }
-   memcpy(pDRQ->gatekeeperIdentifier.data, pGkClient->gkId.data, 
+    }
+    memcpy(pDRQ->gatekeeperIdentifier.data, pGkClient->gkId.data, 
                                 pGkClient->gkId.nchars*sizeof(ASN116BITCHAR));
+   }
 
    pDRQ->m.terminationCausePresent = 1;
    pDRQ->terminationCause.t = T_H225CallTerminationCause_releaseCompleteCauseIE;

Modified: team/pabelanger/issue18183/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_dial.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_dial.c (original)
+++ team/pabelanger/issue18183/apps/app_dial.c Sun Dec 12 11:09:28 2010
@@ -984,7 +984,16 @@
 			ast_deactivate_generator(in);
 			/* If we are calling a single channel, and not providing ringback or music, */
 			/* then, make them compatible for in-band tone purpose */
-			ast_channel_make_compatible(outgoing->chan, in);
+			if (ast_channel_make_compatible(outgoing->chan, in) < 0) {
+				/* If these channels can not be made compatible, 
+				 * there is no point in continuing.  The bridge
+				 * will just fail if it gets that far.
+				 */
+				*to = -1;
+				strcpy(pa->status, "CONGESTION");
+				ast_cdr_failed(in->cdr);
+				return NULL;
+			}
 		}
 
 		if (!ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE) && !ast_test_flag64(outgoing, DIAL_CALLERID_ABSENT)) {

Modified: team/pabelanger/issue18183/apps/app_followme.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_followme.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_followme.c (original)
+++ team/pabelanger/issue18183/apps/app_followme.c Sun Dec 12 11:09:28 2010
@@ -811,7 +811,6 @@
 			break;
 
 	while (nm) {
-
 		ast_debug(2, "Number %s timeout %ld\n", nm->number,nm->timeout);
 
 		number = ast_strdupa(nm->number);
@@ -823,6 +822,14 @@
 				rest++;
 			}
 
+			/* We check if that context exists, before creating the ast_channel struct needed */
+			if (!ast_exists_extension(caller, tpargs->context, number, 1, S_COR(caller->caller.id.number.valid, caller->caller.id.number.str, NULL))) {
+				/* XXX Should probably restructure to simply skip this item, instead of returning. XXX */
+				ast_log(LOG_ERROR, "Extension '%s@%s' doesn't exist\n", number, tpargs->context);
+				free(findme_user_list);
+				return;
+			}
+
 			if (!strcmp(tpargs->context, ""))
 				snprintf(dialarg, sizeof(dialarg), "%s", number);
 			else
@@ -830,7 +837,6 @@
 
 			tmpuser = ast_calloc(1, sizeof(*tmpuser));
 			if (!tmpuser) {
-				ast_log(LOG_WARNING, "Out of memory!\n");
 				ast_free(findme_user_list);
 				return;
 			}

Modified: team/pabelanger/issue18183/apps/app_macro.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_macro.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_macro.c (original)
+++ team/pabelanger/issue18183/apps/app_macro.c Sun Dec 12 11:09:28 2010
@@ -539,22 +539,20 @@
 	}
 
 	if (!strcasecmp(chan->context, fullmacro)) {
+		const char *offsets;
+
   		/* If we're leaving the macro normally, restore original information */
 		chan->priority = oldpriority;
 		ast_copy_string(chan->context, oldcontext, sizeof(chan->context));
-		if (!(ast_check_hangup(chan) & AST_SOFTHANGUP_ASYNCGOTO)) {
-			/* Copy the extension, so long as we're not in softhangup, where we could be given an asyncgoto */
-			const char *offsets;
-			ast_copy_string(chan->exten, oldexten, sizeof(chan->exten));
-			if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) {
-				/* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue
-			   	normally if there is any problem */
-				if (sscanf(offsets, "%30d", &offset) == 1) {
-					if (ast_exists_extension(chan, chan->context, chan->exten,
-						chan->priority + offset + 1,
-						S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
-						chan->priority += offset;
-					}
+		ast_copy_string(chan->exten, oldexten, sizeof(chan->exten));
+		if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) {
+			/* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue
+			normally if there is any problem */
+			if (sscanf(offsets, "%30d", &offset) == 1) {
+				if (ast_exists_extension(chan, chan->context, chan->exten,
+					chan->priority + offset + 1,
+					S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
+					chan->priority += offset;
 				}
 			}
 		}

Modified: team/pabelanger/issue18183/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_meetme.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_meetme.c (original)
+++ team/pabelanger/issue18183/apps/app_meetme.c Sun Dec 12 11:09:28 2010
@@ -492,7 +492,7 @@
 		</synopsis>
 		<syntax>
 			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
-			<parameter name="Conference" required="true">
+			<parameter name="Conference" required="false">
 				<para>Conference number.</para>
 			</parameter>
 		</syntax>
@@ -1215,9 +1215,9 @@
 			/* if we are creating a conference for a unit test, it is not neccesary
 			 * to open a pseudo channel, so, if we fail continue creating
 			 * the conference. */
-			ast_test_status_update(test, "Unable to open pseudo device\n");
+			ast_test_status_update(test, "Unable to open DAHDI pseudo device\n");
 		} else {
-			ast_log(LOG_WARNING, "Unable to open pseudo device\n");
+			ast_log(LOG_WARNING, "Unable to open DAHDI pseudo device\n");
 			if (cnf->fd >= 0)
 				close(cnf->fd);
 			ast_free(cnf);
@@ -2571,7 +2571,7 @@
 		/* open pseudo in non-blocking mode */
 		fd = open("/dev/dahdi/pseudo", O_RDWR | O_NONBLOCK);
 		if (fd < 0) {
-			ast_log(LOG_WARNING, "Unable to open pseudo channel: %s\n", strerror(errno));
+			ast_log(LOG_WARNING, "Unable to open DAHDI pseudo channel: %s\n", strerror(errno));
 			goto outrun;
 		}
 		using_pseudo = 1;
@@ -3783,8 +3783,8 @@
 		struct timeval now;
 		char recordingfilename[256] = "";
 		char recordingformat[11] = "";
-		char currenttime[19] = "";
-		char eatime[19] = "";
+		char currenttime[32] = "";
+		char eatime[32] = "";
 		char bookid[51] = "";
 		char recordingtmp[AST_MAX_EXTENSION] = "";
 		char useropts[OPTIONS_LEN + 1]; /* Used for RealTime conferences */

Modified: team/pabelanger/issue18183/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_queue.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_queue.c (original)
+++ team/pabelanger/issue18183/apps/app_queue.c Sun Dec 12 11:09:28 2010
@@ -1134,6 +1134,8 @@
 	char interfacevar[256]="";
 	float sl = 0;
 
+	ao2_lock(q);
+
 	if (q->setqueuevar) {
 		sl = 0;
 		if (q->callscompleted > 0) 
@@ -1142,8 +1144,12 @@
 		snprintf(interfacevar, sizeof(interfacevar),
 			"QUEUENAME=%s,QUEUEMAX=%d,QUEUESTRATEGY=%s,QUEUECALLS=%d,QUEUEHOLDTIME=%d,QUEUETALKTIME=%d,QUEUECOMPLETED=%d,QUEUEABANDONED=%d,QUEUESRVLEVEL=%d,QUEUESRVLEVELPERF=%2.1f",
 			q->name, q->maxlen, int2strat(q->strategy), q->count, q->holdtime, q->talktime, q->callscompleted, q->callsabandoned,  q->servicelevel, sl);
+
+		ao2_unlock(q);
 	
 		pbx_builtin_setvar_multiple(chan, interfacevar); 
+	} else {
+		ao2_unlock(q);
 	}
 }
 
@@ -3173,8 +3179,8 @@
 /*! \brief Record that a caller gave up on waiting in queue */
 static void record_abandoned(struct queue_ent *qe)
 {
+	set_queue_variables(qe->parent, qe->chan);
 	ao2_lock(qe->parent);
-	set_queue_variables(qe->parent, qe->chan);
 	manager_event(EVENT_FLAG_AGENT, "QueueCallerAbandon",
 		"Queue: %s\r\n"
 		"Uniqueid: %s\r\n"
@@ -4096,9 +4102,7 @@
 	struct ast_channel *chan = qeb->chan;
 
 	if (ao2_ref(qeb, -1) == 1) {
-		ao2_lock(q);
 		set_queue_variables(q, chan);
-		ao2_unlock(q);
 		/* This unrefs the reference we made in try_calling when we allocated qeb */
 		queue_t_unref(q, "Expire bridge_config reference");
 	}
@@ -4568,10 +4572,11 @@
 			pbx_builtin_setvar_multiple(peer, interfacevar);
 		}
 	
+		ao2_unlock(qe->parent);
+
 		/* try to set queue variables if configured to do so*/
 		set_queue_variables(qe->parent, qe->chan);
 		set_queue_variables(qe->parent, peer);
-		ao2_unlock(qe->parent);
 		
 		ast_channel_lock(qe->chan);
 		if ((monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME"))) {

Modified: team/pabelanger/issue18183/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/apps/app_voicemail.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/apps/app_voicemail.c (original)
+++ team/pabelanger/issue18183/apps/app_voicemail.c Sun Dec 12 11:09:28 2010
@@ -2623,6 +2623,7 @@
 		ast_log(LOG_WARNING, "The code expects the old messages to be checked first, fix the code.\n");
 	}
 	if (vm_allocate_dh(vms, vmu, box == 0 ? vms->vmArrayIndex + vms->oldmessages : vms->lastmsg)) {
+		ast_mutex_unlock(&vms->lock);
 		return -1;
 	}
 
@@ -7228,6 +7229,16 @@
 #endif
 		}
 		DISPOSE(dir, curmsg);
+#ifndef IMAP_STORAGE
+		if (cmd) { /* assuming hangup, cleanup backup file */
+			make_file(msgfile, sizeof(msgfile), dir, curmsg);
+			strcpy(textfile, msgfile);
+			strcpy(backup_textfile, msgfile);
+			strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1);
+			strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1);
+			rename(backup_textfile, textfile);
+		}
+#endif
 	}
 
 	/* If anything failed above, we still have this list to free */
@@ -7703,14 +7714,14 @@
 
 	if (vm_lock_path(vms->curdir)) {
 		ast_log(AST_LOG_ERROR, "Could not open mailbox %s:  mailbox is locked\n", vms->curdir);
-		return -1;
+		return ERROR_LOCK_PATH;
 	}
 
 	/* for local storage, checks directory for messages up to maxmsg limit */
 	last_msg = last_message_index(vmu, vms->curdir);
 	ast_unlock_path(vms->curdir);
 
-	if (last_msg < 0) {
+	if (last_msg < -1) {
 		return last_msg;
 	} else if (vms->lastmsg != last_msg) {
 		ast_log(LOG_NOTICE, "Mailbox: %s, expected %d but found %d message(s) in box with max threshold of %d.\n", vms->curdir, last_msg + 1, vms->lastmsg + 1, vmu->maxmsg);

Modified: team/pabelanger/issue18183/build_tools/prep_tarball
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/build_tools/prep_tarball?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/build_tools/prep_tarball (original)
+++ team/pabelanger/issue18183/build_tools/prep_tarball Sun Dec 12 11:09:28 2010
@@ -8,18 +8,27 @@
 make -C sounds MENUSELECT_CORE_SOUNDS=CORE-SOUNDS-EN-GSM MENUSELECT_MOH=MOH-OPSOUND-WAV WGET=wget DOWNLOAD=wget all
 make AWK=awk GREP=grep menuselect-tree
 
-make_tex_docs() {
-    # make backup of asterisk.tex because we are going to alter it
-    cp asterisk.tex asterisk.tex.orig
-    sed -e "s/ASTERISKVERSION/${VERSION}/" asterisk.tex > asterisk_local.tex
-    mv asterisk_local.tex asterisk.tex
-    rubber --pdf asterisk.tex
-    latex2html asterisk.tex
-    latex asterisk.tex
-    catdvi -e 1 -U asterisk.dvi | sed -re "s/\[U\+2022\]/*/g" | sed -re "s/\[U\+02C6\]/^/g" | sed -re "s/([^^[:space:]])\s+/\1 /g" > asterisk.txt
-    # restore backup of asterisk.tex
-    mv asterisk.tex.orig asterisk.tex
-}
+if ! which wikiexport.py 2>&1 > /dev/null ; then
+	echo
+	echo "wikiexport.py not found in \${PATH}."
+	echo
+	echo "Please add repotools into PATH."
+	echo "    $ svn co http://svn.asterisk.org/svn/repotools"
+	echo
+	exit 1
+fi
 
-VERSION=`cat .version`
-cd doc/tex && make_tex_docs
+if ! which pdftotext 2>&1 > /dev/null ; then
+	echo
+	echo "pdftotext not found.  Please install it."
+	echo
+	echo "On Debian/Ubuntu/Fedora/CentOS, install the poppler-utils package."
+	echo
+	exit 1
+fi
+
+cd doc
+echo "Exporting Asterisk wiki to a PDF (this will take a minute) ..."
+wikiexport.py
+echo "Converting wiki export PDF to plain text ..."
+pdftotext AST.pdf

Modified: team/pabelanger/issue18183/channels/chan_console.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/channels/chan_console.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/channels/chan_console.c (original)
+++ team/pabelanger/issue18183/channels/chan_console.c Sun Dec 12 11:09:28 2010
@@ -1155,7 +1155,7 @@
 
 	switch (cmd) {
 	case CLI_INIT:
-		e->command = "console {set|show} active [<device>]";
+		e->command = "console {set|show} active";
 		e->usage =
 			"Usage: console {set|show} active [<device>]\n"
 			"       Set or show the active console device for the Asterisk CLI.\n";

Modified: team/pabelanger/issue18183/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/pabelanger/issue18183/channels/chan_dahdi.c?view=diff&rev=298172&r1=298171&r2=298172
==============================================================================
--- team/pabelanger/issue18183/channels/chan_dahdi.c (original)
+++ team/pabelanger/issue18183/channels/chan_dahdi.c Sun Dec 12 11:09:28 2010
@@ -492,11 +492,12 @@
 #define MASK_AVAIL		(1 << 0)	/*!< Channel available for PRI use */
 #define MASK_INUSE		(1 << 1)	/*!< Channel currently in use */
 
-#define CALLWAITING_SILENT_SAMPLES	( (300 * 8) / READ_SIZE) /*!< 300 ms */
-#define CALLWAITING_REPEAT_SAMPLES	( (10000 * 8) / READ_SIZE) /*!< 10,000 ms */
-#define CIDCW_EXPIRE_SAMPLES		( (500 * 8) / READ_SIZE) /*!< 500 ms */
-#define MIN_MS_SINCE_FLASH			( (2000) )	/*!< 2000 ms */
-#define DEFAULT_RINGT 				( (8000 * 8) / READ_SIZE) /*!< 8,000 ms */
+#define CALLWAITING_SILENT_SAMPLES		((300 * 8) / READ_SIZE) /*!< 300 ms */
+#define CALLWAITING_REPEAT_SAMPLES		((10000 * 8) / READ_SIZE) /*!< 10,000 ms */
+#define CALLWAITING_SUPPRESS_SAMPLES	((100 * 8) / READ_SIZE) /*!< 100 ms */
+#define CIDCW_EXPIRE_SAMPLES			((500 * 8) / READ_SIZE) /*!< 500 ms */
+#define MIN_MS_SINCE_FLASH				((2000) )	/*!< 2000 ms */
+#define DEFAULT_RINGT 					((8000 * 8) / READ_SIZE) /*!< 8,000 ms */
 
 struct dahdi_pvt;
 
@@ -955,7 +956,7 @@
 	 */
 	unsigned int use_smdi:1;
 	struct mwisend_info mwisend_data;
-	/*! \brief The serial port to listen for SMDI data on */
+	/*! \brief The SMDI interface to get SMDI messages from. */
 	struct ast_smdi_interface *smdi_iface;
 
 	/*! \brief Distinctive Ring data */
@@ -1053,7 +1054,8 @@
 	struct timeval	dtmfcid_delay;  /*!< Time value used for allow line to settle */
 	int callingpres;				/*!< The value of calling presentation that we're going to use when placing a PRI call */
 	int callwaitingrepeat;				/*!< How many samples to wait before repeating call waiting */
-	int cidcwexpire;				/*!< When to expire our muting for CID/CW */
+	int cidcwexpire;				/*!< When to stop waiting for CID/CW CAS response (In samples) */
+	int cid_suppress_expire;		/*!< How many samples to suppress after a CID spill. */
 	/*! \brief Analog caller ID waveform sample buffer */
 	unsigned char *cidspill;
 	/*! \brief Position in the cidspill buffer to send out next. */
@@ -1074,7 +1076,12 @@
 	 * characters are processed.
 	 */
 	int stripmsd;
-	/*! \brief BOOLEAN. XXX Meaning what?? */
+	/*!
+	 * \brief TRUE if Call Waiting (CW) CPE Alert Signal (CAS) is being sent.
+	 * \note
+	 * After CAS is sent, the call waiting caller id will be sent if the phone
+	 * gives a positive reply.
+	 */
 	int callwaitcas;
 	/*! \brief Number of call waiting rings. */
 	int callwaitrings;
@@ -1839,18 +1846,19 @@
 	return 0;
 }
 
-static int send_callerid(struct dahdi_pvt *p);
-
 static int my_stop_callwait(void *pvt)
 {
 	struct dahdi_pvt *p = pvt;
 	p->callwaitingrepeat = 0;
 	p->cidcwexpire = 0;
+	p->cid_suppress_expire = 0;
 
 	return 0;
 }
 
+static int send_callerid(struct dahdi_pvt *p);
 static int save_conference(struct dahdi_pvt *p);
+static int restore_conference(struct dahdi_pvt *p);
 
 static int my_callwait(void *pvt)
 {
@@ -1860,6 +1868,11 @@
 		ast_log(LOG_WARNING, "Spill already exists?!?\n");
 		ast_free(p->cidspill);
 	}
+
+	/*
+	 * SAS: Subscriber Alert Signal, 440Hz for 300ms
+	 * CAS: CPE Alert Signal, 2130Hz * 2750Hz sine waves
+	 */
 	if (!(p->cidspill = ast_malloc(2400 /* SAS */ + 680 /* CAS */ + READ_SIZE * 4)))
 		return -1;
 	save_conference(p);
@@ -1898,6 +1911,8 @@
 				caller->id.number.str,
 				AST_LAW(p));
 		} else {
+			ast_verb(3, "CPE supports Call Waiting Caller*ID.  Sending '%s/%s'\n",
+				caller->id.name.str, caller->id.number.str);
 			p->callwaitcas = 0;
 			p->cidcwexpire = 0;
 			p->cidlen = ast_callerid_callwaiting_generate(p->cidspill,
@@ -1907,6 +1922,7 @@
 			p->cidlen += READ_SIZE * 4;
 		}
 		p->cidpos = 0;
+		p->cid_suppress_expire = 0;
 		send_callerid(p);
 	}
 	return 0;
@@ -1978,68 +1994,72 @@
 
 static inline int dahdi_confmute(struct dahdi_pvt *p, int muted);
 
-static void my_handle_dtmfup(void *pvt, struct ast_channel *ast, enum analog_sub analog_index, struct ast_frame **dest)
+static void my_handle_dtmf(void *pvt, struct ast_channel *ast, enum analog_sub analog_index, struct ast_frame **dest)
 {
 	struct ast_frame *f = *dest;
 	struct dahdi_pvt *p = pvt;
 	int idx = analogsub_to_dahdisub(analog_index);
 
-	ast_debug(1, "DTMF digit: %c on %s\n", f->subclass.integer, ast->name);
+	ast_debug(1, "%s DTMF digit: 0x%02X '%c' on %s\n",
+		f->frametype == AST_FRAME_DTMF_BEGIN ? "Begin" : "End",
+		f->subclass.integer, f->subclass.integer, ast->name);
 
 	if (f->subclass.integer == 'f') {
-		/* Fax tone -- Handle and return NULL */
-		if ((p->callprogress & CALLPROGRESS_FAX) && !p->faxhandled) {
-			/* If faxbuffers are configured, use them for the fax transmission */
-			if (p->usefaxbuffers && !p->bufferoverrideinuse) {
-				struct dahdi_bufferinfo bi = {
-					.txbufpolicy = p->faxbuf_policy,
-					.bufsize = p->bufsize,
-					.numbufs = p->faxbuf_no
-				};
-				int res;
-
-				if ((res = ioctl(p->subs[idx].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
-					ast_log(LOG_WARNING, "Channel '%s' unable to set buffer policy, reason: %s\n", ast->name, strerror(errno));
+		if (f->frametype == AST_FRAME_DTMF_END) {
+			/* Fax tone -- Handle and return NULL */
+			if ((p->callprogress & CALLPROGRESS_FAX) && !p->faxhandled) {
+				/* If faxbuffers are configured, use them for the fax transmission */
+				if (p->usefaxbuffers && !p->bufferoverrideinuse) {
+					struct dahdi_bufferinfo bi = {
+						.txbufpolicy = p->faxbuf_policy,
+						.bufsize = p->bufsize,
+						.numbufs = p->faxbuf_no
+					};
+					int res;
+
+					if ((res = ioctl(p->subs[idx].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
+						ast_log(LOG_WARNING, "Channel '%s' unable to set buffer policy, reason: %s\n", ast->name, strerror(errno));
+					} else {
+						p->bufferoverrideinuse = 1;
+					}
+				}
+				p->faxhandled = 1;
+				if (p->dsp) {
+					p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
+					ast_dsp_set_features(p->dsp, p->dsp_features);
+					ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+				}
+				if (strcmp(ast->exten, "fax")) {
+					const char *target_context = S_OR(ast->macrocontext, ast->context);
+
+					/* We need to unlock 'ast' here because ast_exists_extension has the
+					 * potential to start autoservice on the channel. Such action is prone
+					 * to deadlock.
+					 */
+					ast_mutex_unlock(&p->lock);
+					ast_channel_unlock(ast);
+					if (ast_exists_extension(ast, target_context, "fax", 1,
+						S_COR(ast->caller.id.number.valid, ast->caller.id.number.str, NULL))) {
+						ast_channel_lock(ast);
+						ast_mutex_lock(&p->lock);
+						ast_verb(3, "Redirecting %s to fax extension\n", ast->name);
+						/* Save the DID/DNIS when we transfer the fax call to a "fax" extension */
+						pbx_builtin_setvar_helper(ast, "FAXEXTEN", ast->exten);
+						if (ast_async_goto(ast, target_context, "fax", 1))
+							ast_log(LOG_WARNING, "Failed to async goto '%s' into fax of '%s'\n", ast->name, target_context);
+					} else {
+						ast_channel_lock(ast);
+						ast_mutex_lock(&p->lock);
+						ast_log(LOG_NOTICE, "Fax detected, but no fax extension\n");
+					}
 				} else {
-					p->bufferoverrideinuse = 1;
-				}
-			}
-			p->faxhandled = 1;
-			if (p->dsp) {
-				p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
-				ast_dsp_set_features(p->dsp, p->dsp_features);
-				ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
-			}
-			if (strcmp(ast->exten, "fax")) {
-				const char *target_context = S_OR(ast->macrocontext, ast->context);
-
-				/* We need to unlock 'ast' here because ast_exists_extension has the
-				 * potential to start autoservice on the channel. Such action is prone
-				 * to deadlock.
-				 */
-				ast_mutex_unlock(&p->lock);
-				ast_channel_unlock(ast);
-				if (ast_exists_extension(ast, target_context, "fax", 1,
-					S_COR(ast->caller.id.number.valid, ast->caller.id.number.str, NULL))) {
-					ast_channel_lock(ast);
-					ast_mutex_lock(&p->lock);
-					ast_verb(3, "Redirecting %s to fax extension\n", ast->name);
-					/* Save the DID/DNIS when we transfer the fax call to a "fax" extension */
-					pbx_builtin_setvar_helper(ast, "FAXEXTEN", ast->exten);
-					if (ast_async_goto(ast, target_context, "fax", 1))
-						ast_log(LOG_WARNING, "Failed to async goto '%s' into fax of '%s'\n", ast->name, target_context);
-				} else {
-					ast_channel_lock(ast);
-					ast_mutex_lock(&p->lock);
-					ast_log(LOG_NOTICE, "Fax detected, but no fax extension\n");
+					ast_debug(1, "Already in a fax extension, not redirecting\n");
 				}
 			} else {
-				ast_debug(1, "Already in a fax extension, not redirecting\n");
-			}
-		} else {
-			ast_debug(1, "Fax already handled\n");
-		}
-		dahdi_confmute(p, 0);
+				ast_debug(1, "Fax already handled\n");
+			}
+			dahdi_confmute(p, 0);
+		}
 		p->subs[idx].f.frametype = AST_FRAME_NULL;
 		p->subs[idx].f.subclass.integer = 0;
 		*dest = &p->subs[idx].f;
@@ -2068,17 +2088,24 @@
 /* linear_mode = 0 - turn linear mode off, >0 - turn linear mode on
 * 	returns the last value of the linear setting 
 */ 

[... 8914 lines stripped ...]



More information about the asterisk-commits mailing list