[asterisk-commits] branch group/new_loader_completion r25907 - in /team/group/new_loader_complet...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue May 9 01:02:35 MST 2006


Author: kpfleming
Date: Tue May  9 03:02:34 2006
New Revision: 25907

URL: http://svn.digium.com/view/asterisk?rev=25907&view=rev
Log:
update to trunk and re-enable automerge

Added:
    team/group/new_loader_completion/aclocal.m4
      - copied unchanged from r25894, trunk/aclocal.m4
    team/group/new_loader_completion/configure
      - copied unchanged from r25894, trunk/configure
    team/group/new_loader_completion/include/autoconfig.h.in
      - copied unchanged from r25894, trunk/include/autoconfig.h.in
    team/group/new_loader_completion/install-sh
      - copied unchanged from r25894, trunk/install-sh
    team/group/new_loader_completion/missing
      - copied unchanged from r25894, trunk/missing
    team/group/new_loader_completion/mkinstalldirs
      - copied unchanged from r25894, trunk/mkinstalldirs
Modified:
    team/group/new_loader_completion/   (props changed)
    team/group/new_loader_completion/Makefile
    team/group/new_loader_completion/apps/app_festival.c
    team/group/new_loader_completion/apps/app_queue.c
    team/group/new_loader_completion/apps/app_voicemail.c
    team/group/new_loader_completion/build_tools/Makefile
    team/group/new_loader_completion/channel.c
    team/group/new_loader_completion/channels/chan_sip.c
    team/group/new_loader_completion/cli.c
    team/group/new_loader_completion/configs/sip.conf.sample
    team/group/new_loader_completion/configure.ac
    team/group/new_loader_completion/include/   (props changed)
    team/group/new_loader_completion/include/asterisk/ael_structs.h
    team/group/new_loader_completion/indications.c
    team/group/new_loader_completion/makeopts.in
    team/group/new_loader_completion/manager.c
    team/group/new_loader_completion/pbx.c
    team/group/new_loader_completion/res/res_monitor.c
    team/group/new_loader_completion/utils/Makefile

Propchange: team/group/new_loader_completion/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/group/new_loader_completion/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: team/group/new_loader_completion/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue May  9 03:02:34 2006
@@ -19,9 +19,4 @@
 config.status
 config.log
 makeopts.xml
-install-sh
-configure
-mkinstalldirs
 autom4te.cache
-missing
-aclocal.m4

Propchange: team/group/new_loader_completion/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue May  9 03:02:34 2006
@@ -1,1 +1,1 @@
-/trunk:1-25568
+/trunk:1-25894

Modified: team/group/new_loader_completion/Makefile
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/Makefile?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/Makefile (original)
+++ team/group/new_loader_completion/Makefile Tue May  9 03:02:34 2006
@@ -365,9 +365,9 @@
 endif
 
 ifeq ($(OSARCH),Linux)
-  LIBS+=-ldl -lpthread -lncurses -lm -lresolv  #-lnjamd
+  LIBS+=-ldl -lpthread $(EDITLINE_LIBS) -lm -lresolv  #-lnjamd
 else
-  LIBS+=-lncurses -lm
+  LIBS+=$(EDITLINE_LIBS) -lm
 endif
 
 ifeq ($(OSARCH),Darwin)
@@ -395,22 +395,23 @@
 endif
 
 ifeq ($(OSARCH),NetBSD)
-  LIBS+=-lpthread -lcrypto -lm -L$(CROSS_COMPILE_TARGET)/usr/pkg/lib -lncurses
+  LIBS+=-lpthread -lcrypto -lm -L$(CROSS_COMPILE_TARGET)/usr/pkg/lib $(EDITLINE_LIBS)
 endif
 
 ifeq ($(OSARCH),OpenBSD)
-  LIBS+=-lcrypto -lpthread -lm -lncurses
+  LIBS+=-lcrypto -lpthread -lm $(EDITLINE_LIBS)
 endif
 
 ifeq ($(OSARCH),SunOS)
   LIBS+=-lpthread -ldl -lnsl -lsocket -lresolv -L$(CROSS_COMPILE_TARGET)/usr/local/ssl/lib
   OBJS+=strcompat.o
+  MENUSELECT_OBJS+=strcompat.o
   ASTLINK=
   SOLINK=-shared -fpic -L$(CROSS_COMPILE_TARGET)/usr/local/ssl/lib
 endif
 
 ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
-  CFLAGS+=$(ASTCFLAGS) $(TOPDIR_CFLAGS)
+  CFLAGS+=$(TOPDIR_CFLAGS) $(ASTCFLAGS)
 endif
 
 # This is used when generating the doxygen documentation
@@ -431,12 +432,12 @@
 	@echo " +               make install                +"  
 	@echo " +-------------------------------------------+"  
 
-all: include/autoconfig.h menuselect.makeopts cleantest depend asterisk subdirs
+all: config.status menuselect.makeopts cleantest depend asterisk subdirs
 
 configure:
 	- at ./bootstrap.sh
 
-include/autoconfig.h: configure
+config.status: configure
 	@CFLAGS="" ./configure
 	@echo "****"
 	@echo "**** The configure script was just executed, so 'make' needs to be"
@@ -528,7 +529,7 @@
 	rm -f $@.tmp
 
 stdtime/libtime.a:
-	CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C stdtime libtime.a
+	CFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C stdtime libtime.a
 
 asterisk: editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
 	build_tools/make_build_h > include/asterisk/build.h.tmp
@@ -543,16 +544,16 @@
 	$(CC) $(AUDIO_LIBS) -o muted muted.o
 
 subdirs: 
-	for x in $(MOD_SUBDIRS); do CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C $$x || exit 1 ; done
-	CFLAGS="$(ASTCFLAGS) $(OTHER_SUBDIR_CFLAGS)" $(MAKE) -C utils
-	CFLAGS="$(ASTCFLAGS) $(OTHER_SUBDIR_CFLAGS)" $(MAKE) -C agi
+	@for x in $(MOD_SUBDIRS); do CFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C $$x || exit 1 ; done
+	@CFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C utils
+	@CFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" $(MAKE) -C agi
 
 clean-depend:
-	for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
 	rm -f .depend .tags-depend
 
 clean: clean-depend
-	for x in $(SUBDIRS); do $(MAKE) -C $$x clean || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x clean || exit 1 ; done
 	rm -f *.o *.so asterisk
 	rm -f defaults.h
 	rm -f include/asterisk/build.h
@@ -708,7 +709,7 @@
 	if [ -f mpg123-0.59r/mpg123 ]; then $(MAKE) -C mpg123-0.59r install; fi
 
 install-subdirs:
-	for x in $(SUBDIRS); do $(MAKE) -C $$x install || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x install || exit 1 ; done
 
 NEWMODS=$(notdir $(wildcard */*.so))
 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
@@ -914,7 +915,7 @@
 valgrind: dont-optimize
 
 depend: include/asterisk/version.h .depend defaults.h 
-	for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
+	@for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
 
 .depend: include/asterisk/version.h defaults.h
 	build_tools/mkdep $(CFLAGS) $(wildcard *.c)
@@ -999,7 +1000,7 @@
 menuselect: build_tools/menuselect makeopts.xml
 	- at build_tools/menuselect ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!"
 
-build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect_curses.c build_tools/menuselect.h include/autoconfig.h strcompat.o mxml/libmxml.a
+build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect_curses.c build_tools/menuselect.h include/autoconfig.h mxml/libmxml.a $(MENUSELECT_OBJS)
 	$(MAKE) -C build_tools menuselect
 
 mxml/libmxml.a:

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

Modified: team/group/new_loader_completion/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/apps/app_queue.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/apps/app_queue.c (original)
+++ team/group/new_loader_completion/apps/app_queue.c Tue May  9 03:02:34 2006
@@ -93,12 +93,14 @@
 #include "asterisk/devicestate.h"
 #include "asterisk/stringfields.h"
 
-#define QUEUE_STRATEGY_RINGALL		0
-#define QUEUE_STRATEGY_ROUNDROBIN	1
-#define QUEUE_STRATEGY_LEASTRECENT	2
-#define QUEUE_STRATEGY_FEWESTCALLS	3
-#define QUEUE_STRATEGY_RANDOM		4
-#define QUEUE_STRATEGY_RRMEMORY		5
+enum {
+	QUEUE_STRATEGY_RINGALL = 0,
+	QUEUE_STRATEGY_ROUNDROBIN,
+	QUEUE_STRATEGY_LEASTRECENT,
+	QUEUE_STRATEGY_FEWESTCALLS,
+	QUEUE_STRATEGY_RANDOM,
+	QUEUE_STRATEGY_RRMEMORY
+};
 
 static struct strategy {
 	int strategy;
@@ -731,7 +733,7 @@
 		if (q->strategy < 0) {
 			ast_log(LOG_WARNING, "'%s' isn't a valid strategy for queue '%s', using ringall instead\n",
 				val, q->name);
-			q->strategy = 0;
+			q->strategy = QUEUE_STRATEGY_RINGALL;
 		}
 	} else if (!strcasecmp(param, "joinempty")) {
 		if (!strcasecmp(val, "strict"))
@@ -1525,7 +1527,7 @@
 				ast_log(LOG_DEBUG, "Nobody left to try ringing in queue\n");
 			break;
 		}
-		if (!qe->parent->strategy) {
+		if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
 			struct callattempt *cur;
 			/* Ring everyone who shares this best metric (for ringall) */
 			for (cur = outgoing; cur; cur = cur->q_next) {
@@ -1685,7 +1687,7 @@
 				numlines++;
 			}
 			if (pos > 1 /* found */ || !stillgoing /* nobody listening */ ||
-					 qe->parent->strategy /* ring would not be delivered */)
+					 (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) /* ring would not be delivered */)
 				break;
 			/* On "ringall" strategy we only move to the next penalty level
 			   when *all* ringing phones are done in the current penalty level */
@@ -1783,7 +1785,7 @@
 							if (in->cdr)
 								ast_cdr_busy(in->cdr);
 							do_hang(o);
-							if (qe->parent->strategy) {
+							if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 								if (qe->parent->timeoutrestart)
 									*to = orig;
 								ring_one(qe, outgoing, &numbusies);
@@ -1796,7 +1798,7 @@
 							if (in->cdr)
 								ast_cdr_busy(in->cdr);
 							do_hang(o);
-							if (qe->parent->strategy) {
+							if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 								if (qe->parent->timeoutrestart)
 									*to = orig;
 								ring_one(qe, outgoing, &numbusies);
@@ -1823,7 +1825,7 @@
 					ast_frfree(f);
 				} else {
 					do_hang(o);
-					if (qe->parent->strategy) {
+					if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 						if (qe->parent->timeoutrestart)
 							*to = orig;
 						ring_one(qe, outgoing, &numbusies);
@@ -1924,7 +1926,7 @@
 		if (option_debug)
 			ast_log(LOG_DEBUG, "There are %d available members.\n", avl);
 	
-		if (qe->parent->strategy == 1) {
+		if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
 			if (option_debug)
 				ast_log(LOG_DEBUG, "Even though there are %d available members, the strategy is ringall so only the head call is allowed in!\n", avl);
 			avl = 1;

Modified: team/group/new_loader_completion/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/apps/app_voicemail.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/apps/app_voicemail.c (original)
+++ team/group/new_loader_completion/apps/app_voicemail.c Tue May  9 03:02:34 2006
@@ -2046,7 +2046,7 @@
 			odbc_release_obj(obj);
 			goto yuck;
 		}
-		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir LIKE '%%%s/%s/%s'", odbc_table, context, tmp, "INBOX");
+		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir = '%s%s/%s/%s'", odbc_table, VM_SPOOL_DIR, context, tmp, "INBOX");
 		res = SQLPrepare(stmt, sql, SQL_NTS);
 		if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
 			ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);
@@ -2084,7 +2084,7 @@
 			odbc_release_obj(obj);
 			goto yuck;
 		}
-		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir like '%%%s/%s/%s'", odbc_table, context, tmp, "Old");
+		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir = '%s%s/%s/%s'", odbc_table, VM_SPOOL_DIR, context, tmp, "Old");
 		res = SQLPrepare(stmt, sql, SQL_NTS);
 		if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
 			ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);
@@ -2157,7 +2157,7 @@
 			odbc_release_obj(obj);
                         goto yuck;
                 }
-		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir like '%%%s/%s/%s'", odbc_table, context, tmp, "INBOX");
+		snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir = '%s%s/%s/%s'", odbc_table, VM_SPOOL_DIR, context, tmp, "INBOX");
                 res = SQLPrepare(stmt, sql, SQL_NTS);
                 if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {  
                         ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);
@@ -2234,7 +2234,7 @@
 		context++;
 	} else
 		context = "default";
-	snprintf(fn, sizeof(fn), "%s/%s/%s/%s", VM_SPOOL_DIR, context, tmp, folder);
+	snprintf(fn, sizeof(fn), "%s%s/%s/%s", VM_SPOOL_DIR, context, tmp, folder);
 	dir = opendir(fn);
 	if (!dir)
 		return 0;
@@ -2292,7 +2292,7 @@
 	} else
 		context = "default";
 	if (newmsgs) {
-		snprintf(fn, sizeof(fn), "%s/%s/%s/INBOX", VM_SPOOL_DIR, context, tmp);
+		snprintf(fn, sizeof(fn), "%s%s/%s/INBOX", VM_SPOOL_DIR, context, tmp);
 		dir = opendir(fn);
 		if (dir) {
 			while ((de = readdir(dir))) {
@@ -2305,7 +2305,7 @@
 		}
 	}
 	if (oldmsgs) {
-		snprintf(fn, sizeof(fn), "%s/%s/%s/Old", VM_SPOOL_DIR, context, tmp);
+		snprintf(fn, sizeof(fn), "%s%s/%s/Old", VM_SPOOL_DIR, context, tmp);
 		dir = opendir(fn);
 		if (dir) {
 			while ((de = readdir(dir))) {
@@ -3358,7 +3358,11 @@
 	snprintf(ext_context, sizeof(ext_context), "%s@%s", vmu->mailbox, vmu->context);
 
 	if (!ast_strlen_zero(vmu->attachfmt)) {
-		fmt = vmu->attachfmt;
+		if (strstr(fmt, vmu->attachfmt)) {
+			fmt = vmu->attachfmt;
+		} else {
+			ast_log(LOG_WARNING, "Attachment format '%s' is not one of the recorded formats '%s'.  Falling back to default format for '%s@%s'.\n", vmu->attachfmt, fmt, vmu->mailbox, vmu->context);
+		}
 	}
 
 	/* Attach only the first format */

Modified: team/group/new_loader_completion/build_tools/Makefile
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/build_tools/Makefile?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/build_tools/Makefile (original)
+++ team/group/new_loader_completion/build_tools/Makefile Tue May  9 03:02:34 2006
@@ -1,6 +1,10 @@
 MENUSELECT_OBJS=menuselect.o menuselect_curses.o
 MENUSELECT_CFLAGS=-g -c -D_GNU_SOURCE -I../ -I../include/
 MENUSELECT_LIBS=../mxml/libmxml.a
+
+ifeq ($(OSARCH),SunOS)
+  MENUSELECT_OBJS+=../strcompat.o
+endif
 
 ifneq ($(NCURSES_LIB),)
   MENUSELECT_LIBS+=$(NCURSES_LIB)
@@ -11,7 +15,7 @@
 endif
 
 menuselect: $(MENUSELECT_OBJS)
-	$(CC) -g -o $@ ../strcompat.o $(MENUSELECT_OBJS) $(MENUSELECT_LIBS)
+	$(CC) -g -o $@ $(MENUSELECT_OBJS) $(MENUSELECT_LIBS)
 
 menuselect.o: menuselect.c menuselect.h
 	$(CC) -o $@ $(MENUSELECT_CFLAGS) $<

Modified: team/group/new_loader_completion/channel.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/channel.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/channel.c (original)
+++ team/group/new_loader_completion/channel.c Tue May  9 03:02:34 2006
@@ -1904,6 +1904,7 @@
 		chan->readq = f->next;
 		f->next = NULL;
 		/* Interpret hangup and return NULL */
+		/* XXX why not the same for frames from the channel ? */
 		if (f->frametype == AST_FRAME_CONTROL && f->subclass == AST_CONTROL_HANGUP) {
 			ast_frfree(f);
 			f = NULL;
@@ -1978,6 +1979,7 @@
 					queue_frame_to_spies(chan, f, SPY_READ);
 				
 				if (chan->monitor && chan->monitor->read_stream ) {
+					/* XXX what does this do ? */
 #ifndef MONITOR_CONSTANT_DELAY
 					int jump = chan->outsmpl - chan->insmpl - 4 * f->samples;
 					if (jump >= 0) {

Modified: team/group/new_loader_completion/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/channels/chan_sip.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/channels/chan_sip.c (original)
+++ team/group/new_loader_completion/channels/chan_sip.c Tue May  9 03:02:34 2006
@@ -5236,7 +5236,7 @@
 	other end knows and replace the current call with this new call */
 	if (p->options && p->options->replaces && !ast_strlen_zero(p->options->replaces)) {
 		add_header(&req, "Replaces", p->options->replaces);
-		add_header(&req, "Required", "replaces");
+		add_header(&req, "Require", "replaces");
 	}
 
 	if (p->options && !ast_strlen_zero(p->options->distinctive_ring)) {
@@ -10986,7 +10986,7 @@
 	}
 
 	/* Find out what they require */
-	required = get_header(req, "Required");
+	required = get_header(req, "Require");
 	if (!ast_strlen_zero(required)) {
 		required_profile = parse_sip_options(NULL, required);
 		if (required_profile) { 	/* They require something */
@@ -11808,7 +11808,7 @@
 			if (!ast_test_flag(req, SIP_PKT_IGNORE) && req->method == SIP_INVITE) {
 				transmit_response_reliable(p, "481 Call/Transaction Does Not Exist", req);
 				/* Will cease to exist after ACK */
-			} else {
+			} else if (req->method != SIP_ACK) {
 				transmit_response(p, "481 Call/Transaction Does Not Exist", req);
 				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
 			}

Modified: team/group/new_loader_completion/cli.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/cli.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/cli.c (original)
+++ team/group/new_loader_completion/cli.c Tue May  9 03:02:34 2006
@@ -421,15 +421,21 @@
 		}
 		if (concise) {
 			ast_cli(fd, CONCISE_FORMAT_STRING, c->name, c->context, c->exten, c->priority, ast_state2str(c->_state),
-			        c->appl ? c->appl : "(None)", c->data ? c->data : "",
+			        c->appl ? c->appl : "(None)",
+				S_OR(c->data, ""),	/* XXX different from verbose ? */
 			        S_OR(c->cid.cid_num, ""),
-			        c->accountcode ? c->accountcode : "", c->amaflags, 
-			        durbuf, bc ? bc->name : "(None)");
+			        S_OR(c->accountcode, ""),
+				c->amaflags, 
+			        durbuf,
+				bc ? bc->name : "(None)");
 		} else if (verbose) {
 			ast_cli(fd, VERBOSE_FORMAT_STRING, c->name, c->context, c->exten, c->priority, ast_state2str(c->_state),
-			        c->appl ? c->appl : "(None)", c->data ? S_OR(c->data, "(Empty)" ): "(None)",
-			        S_OR(c->cid.cid_num, ""), durbuf,
-			        c->accountcode ? c->accountcode : "", bc ? bc->name : "(None)");
+			        c->appl ? c->appl : "(None)",
+				c->data ? S_OR(c->data, "(Empty)" ): "(None)",
+			        S_OR(c->cid.cid_num, ""),
+				durbuf,
+			        S_OR(c->accountcode, ""),
+				bc ? bc->name : "(None)");
 		} else {
 			if (!ast_strlen_zero(c->context) && !ast_strlen_zero(c->exten)) 
 				snprintf(locbuf, sizeof(locbuf), "%s@%s:%d", c->exten, c->context, c->priority);

Modified: team/group/new_loader_completion/configs/sip.conf.sample
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/configs/sip.conf.sample?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/configs/sip.conf.sample (original)
+++ team/group/new_loader_completion/configs/sip.conf.sample Tue May  9 03:02:34 2006
@@ -29,6 +29,8 @@
 				; this can also be set to 'osp'
 				; if asterisk was compiled with OSP support.)
 allowoverlap=no			; Disable overlap dialing support. (Default is yes)
+;allowtransfer=no		; Disable all transfers (unless enabled in peers or users)
+				; Default is enabled
 ;realm=mydomain.tld		; Realm for digest authentication
 				; defaults to "asterisk"
 				; Realms MUST be globally unique according to RFC 3261
@@ -334,6 +336,7 @@
 ; restrictcid		      restrictcid
 ; allowoverlap		      allowoverlap
 ; allowsubscribe	      allowsubscribe
+; allowtransfer	      	      allowtransfer
 ; subscribecontext	      subscribecontext
 ; videosupport		      videosupport
 ; maxcallbitrate	      maxcallbitrate

Modified: team/group/new_loader_completion/configure.ac
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/configure.ac?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/configure.ac (original)
+++ team/group/new_loader_completion/configure.ac Tue May  9 03:02:34 2006
@@ -171,8 +171,25 @@
 AST_EXT_LIB([sqlite], [sqlite_exec], [sqlite.h], [SQLITE], [SQLite])
 AST_EXT_LIB([ssl], [ssl2_connect], [openssl/ssl.h], [OPENSSL], [OpenSSL], [-lcrypto])
 AST_EXT_LIB([tds], [tds_version], [tds.h], [FREETDS], [FreeTDS])
+AST_EXT_LIB([termcap], [tgetent], [], [TERMCAP], [Termcap])
+AST_EXT_LIB([tinfo], [tgetent], [], [TINFO], [Term Info])
 AST_EXT_LIB([vorbis], [vorbis_info_init], [vorbis/codec.h], [VORBIS], [Vorbis], [-lm -lvorbisenc])
 AST_EXT_LIB([z], [compress], [zlib.h], [ZLIB], [zlib])
+
+EDITLINE_LIBS=""
+if test "x$termcap_LIB" != "x" ; then
+  EDITLINE_LIBS="$termcap_LIB"
+elif test "x$tinfo_LIB" != "x" ; then
+  EDITLINE_LIBS="$tinfo_LIB"
+elif test "x$curses_LIB" != "x" ; then
+  EDITLINE_LIBS="$curses_LIB"
+elif test "x$ncurses_LIB" != "x" ; then
+  EDITLINE_LIBS="$ncurses_LIB"
+else
+  echo "*** termcap support not found"
+  exit 1
+fi
+AC_SUBST(EDITLINE_LIBS)
 
 PBX_LIBossaudio=0
 AC_CHECK_HEADER([linux/soundcard.h],
@@ -339,7 +356,7 @@
 esac
 ])
 if test "${USE_VPB}" != "no"; then
-   echo -n "checking for vpb_open in -lvpb..."
+   echo -n "checking for vpb_open in -lvpb... "
    saved_libs="${LIBS}"
    saved_cppflags="${CPPFLAGS}"
    if test "x${VPB_DIR}" != "x"; then
@@ -401,7 +418,7 @@
 
 PBX_QT=0
 if test "${USE_QT}" != "no"; then
-   echo -n "checking for QDate in -lqt..."
+   echo -n "checking for QDate in -lqt... "
    saved_libs="${LIBS}"
    saved_cppflags="${CPPFLAGS}"
    if test "x${QT_DIR}" != "x"; then
@@ -487,7 +504,7 @@
 
 PBX_KDE=0
 if test "${USE_KDE}" != "no"; then
-   echo -n "checking for crashHandler in -lkdecore..."
+   echo -n "checking for crashHandler in -lkdecore... "
    saved_ldflags="${LDFLAGS}"
    LDFLAGS="-I${KDE_DIR}/include ${LDFLAGS} -L${KDE_DIR}/lib -lkdecore"
 	AC_LINK_IFELSE(
@@ -566,7 +583,7 @@
 esac
 ])
 if test "${USE_PWLIB}" != "no"; then
-	echo -n "checking for existence of pwlib..."
+	echo -n "checking for existence of pwlib... "
 	
 	saved_ldflags="${LDFLAGS}"
 	LDFLAGS="${LDFLAGS} -L${PWLIB_DIR} -l${PLATFORM_PTLIB}"
@@ -696,7 +713,7 @@
 
 echo "Package configured for: "
 echo " OS type  : $PBX_OSTYPE"
-echo " host cpu : $host_cpu"
+echo " Host CPU : $host_cpu"
 if test "x${crossCompile}" = xYes; then
    echo ""
    echo " Cross Compilation = YES"

Propchange: team/group/new_loader_completion/include/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue May  9 03:02:34 2006
@@ -1,2 +1,1 @@
 autoconfig.h
-autoconfig.h.in

Modified: team/group/new_loader_completion/include/asterisk/ael_structs.h
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/include/asterisk/ael_structs.h?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/include/asterisk/ael_structs.h (original)
+++ team/group/new_loader_completion/include/asterisk/ael_structs.h Tue May  9 03:02:34 2006
@@ -7,10 +7,10 @@
 #define quad_t int64_t
 #endif
 
-#ifdef LONG_LONG_MIN
+#if defined(LONG_LONG_MIN) && !defined(QUAD_MIN)
 #define QUAD_MIN LONG_LONG_MIN
 #endif
-#ifdef LONG_LONG_MAX
+#if defined(LONG_LONG_MAX) && !defined(QUAD_MAX)
 #define QUAD_MAX LONG_LONG_MAX
 #endif
 

Modified: team/group/new_loader_completion/indications.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/indications.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/indications.c (original)
+++ team/group/new_loader_completion/indications.c Tue May  9 03:02:34 2006
@@ -382,10 +382,7 @@
 	if (country == NULL)
 		return 0;	/* not a single country insight */
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return 0;
-	}
+	ast_mutex_lock(&tzlock);
 	do {
 		for (tz=tone_zones; tz; tz=tz->next) {
 			if (strcasecmp(country,tz->country)==0) {
@@ -419,10 +416,7 @@
 	if (zone == NULL)
 		return 0;	/* not a single country insight */
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return 0;
-	}
+	ast_mutex_lock(&tzlock);
 	for (ts=zone->tones; ts; ts=ts->next) {
 		if (strcasecmp(indication,ts->name)==0) {
 			/* found indication! */
@@ -457,10 +451,7 @@
 {
 	struct tone_zone *tz,*pz;
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return -1;
-	}
+	ast_mutex_lock(&tzlock);
 	for (pz=NULL,tz=tone_zones; tz; pz=tz,tz=tz->next) {
 		if (strcasecmp(zone->country,tz->country)==0) {
 			/* tone_zone already there, replace */
@@ -498,10 +489,7 @@
 	struct tone_zone *tz, *pz = NULL, *tmp;
 	int res = -1;
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return -1;
-	}
+	ast_mutex_lock(&tzlock);
 	tz = tone_zones;
 	while (tz) {
 		if (country==NULL ||
@@ -546,10 +534,7 @@
 	if (zone->alias[0])
 		return -1;
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return -2;
-	}
+	ast_mutex_lock(&tzlock);
 	for (ps=NULL,ts=zone->tones; ts; ps=ts,ts=ts->next) {
 		if (strcasecmp(indication,ts->name)==0) {
 			/* indication already there, replace */
@@ -588,10 +573,7 @@
 	if (zone->alias[0])
 		return -1;
 
-	if (ast_mutex_lock(&tzlock)) {
-		ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
-		return -1;
-	}
+	ast_mutex_lock(&tzlock);
 	ts = zone->tones;
 	while (ts) {
 		if (strcasecmp(indication,ts->name)==0) {

Modified: team/group/new_loader_completion/makeopts.in
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/makeopts.in?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/makeopts.in (original)
+++ team/group/new_loader_completion/makeopts.in Tue May  9 03:02:34 2006
@@ -101,3 +101,6 @@
 
 NCURSES_LIB=@ncurses_LIB@
 NCURSES_INCLUDE=@ncurses_INCLUDE@
+
+EDITLINE_LIBS=@EDITLINE_LIBS@
+

Modified: team/group/new_loader_completion/manager.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/manager.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/manager.c (original)
+++ team/group/new_loader_completion/manager.c Tue May  9 03:02:34 2006
@@ -1312,7 +1312,7 @@
 	
 	/* Tell the manager what happened with the channel */
 	manager_event(EVENT_FLAG_CALL,
-		res ? "OriginateSuccess" : "OriginateFailure",
+		res ? "OriginateFailure" : "OriginateSuccess",
 		"%s"
 		"Channel: %s/%s\r\n"
 		"Context: %s\r\n"

Modified: team/group/new_loader_completion/pbx.c
URL: http://svn.digium.com/view/asterisk/team/group/new_loader_completion/pbx.c?rev=25907&r1=25906&r2=25907&view=diff
==============================================================================
--- team/group/new_loader_completion/pbx.c (original)
+++ team/group/new_loader_completion/pbx.c Tue May  9 03:02:34 2006
@@ -700,23 +700,37 @@
 
 static int matchcid(const char *cidpattern, const char *callerid)
 {
-	int failresult;
-	
 	/* If the Caller*ID pattern is empty, then we're matching NO Caller*ID, so
 	   failing to get a number should count as a match, otherwise not */
 
-	if (!ast_strlen_zero(cidpattern))
-		failresult = 0;
-	else
-		failresult = 1;
-
-	if (!callerid)
-		return failresult;
+	if (ast_strlen_zero(callerid))
+		return ast_strlen_zero(cidpattern) ? 1 : 0;
 
 	return ast_extension_match(cidpattern, callerid);
 }
 
-static struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast_context *bypass, const char *context, const char *exten, int priority, const char *label, const char *callerid, int action, char *incstack[], int *stacklen, int *status, struct ast_switch **swo, char **data, const char **foundcontext)
+/* request and result for pbx_find_extension */
+struct pbx_find_info {
+#if 0
+	const char *context;
+	const char *exten;
+	int priority;
+#endif
+
+	char *incstack[AST_PBX_MAX_STACK];      /* filled during the search */
+	int stacklen;                   /* modified during the search */
+	int status;                     /* set on return */
+	struct ast_switch *swo;         /* set on return */
+	const char *data;               /* set on return */
+	const char *foundcontext;       /* set on return */
+};
+
+static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
+	struct ast_context *bypass,
+	const char *context, const char *exten, int priority,
+	const char *label, const char *callerid, int action,
+	char *incstack[], int *stacklen, int *status, struct ast_switch **swo,
+	char **data, const char **foundcontext)
 {
 	int x, res;
 	struct ast_context *tmp;
@@ -725,6 +739,8 @@
 	struct ast_sw *sw;
 	struct ast_switch *asw;
 
+	struct ast_exten *earlymatch = NULL;
+
 	/* Initialize status if appropriate */
 	if (!*stacklen) {
 		*status = STATUS_NO_CONTEXT;
@@ -741,96 +757,96 @@
 		if (!strcasecmp(incstack[x], context))
 			return NULL;
 	}
-	if (bypass)
+	if (bypass)	/* bypass means we only look there */
 		tmp = bypass;
-	else
-		tmp = contexts;
-	for (; tmp; tmp = tmp->next) {
-		/* Match context */
-		if (bypass || !strcmp(tmp->name, context)) {
-			struct ast_exten *earlymatch = NULL;
-
-			if (*status < STATUS_NO_EXTENSION)
-				*status = STATUS_NO_EXTENSION;
-			for (eroot = tmp->root; eroot; eroot = eroot->next) {
-				int match = 0;
-				/* Match extension */
-				if ((((action != HELPER_MATCHMORE) && ast_extension_match(eroot->exten, exten)) ||
-				     ((action == HELPER_CANMATCH) && (ast_extension_close(eroot->exten, exten, 0))) ||
-				     ((action == HELPER_MATCHMORE) && (match = ast_extension_close(eroot->exten, exten, 1)))) &&
-				     (!eroot->matchcid || matchcid(eroot->cidmatch, callerid))) {
-
-					if (action == HELPER_MATCHMORE && match == 2 && !earlymatch) {
-						/* It matched an extension ending in a '!' wildcard
-						   So ignore it for now, unless there's a better match */
-						earlymatch = eroot;
-					} else {
-						if (*status < STATUS_NO_PRIORITY)
-							*status = STATUS_NO_PRIORITY;
-						for (e = eroot; e; e = e->peer) {
-							/* Match priority */
-							if (action == HELPER_FINDLABEL) {
-								if (*status < STATUS_NO_LABEL)
-									*status = STATUS_NO_LABEL;
-							 	if (label && e->label && !strcmp(label, e->label)) {
-									*status = STATUS_SUCCESS;
-									*foundcontext = context;
-									return e;
-								}
-							} else if (e->priority == priority) {
-								*status = STATUS_SUCCESS;
-								*foundcontext = context;
-								return e;
-							}
+	else {	/* look in contexts */
+		for (tmp = contexts; tmp; tmp = tmp->next) {
+			if (!strcmp(tmp->name, context))
+				break;
+		}
+		if (!tmp)
+			return NULL;
+	}
+
+	if (*status < STATUS_NO_EXTENSION)
+		*status = STATUS_NO_EXTENSION;
+	for (eroot = tmp->root; eroot; eroot = eroot->next) {
+		int match = 0;
+		/* Match extension */
+		if ((((action != HELPER_MATCHMORE) && ast_extension_match(eroot->exten, exten)) ||
+		     ((action == HELPER_CANMATCH) && (ast_extension_close(eroot->exten, exten, 0))) ||
+		     ((action == HELPER_MATCHMORE) && (match = ast_extension_close(eroot->exten, exten, 1)))) &&
+		     (!eroot->matchcid || matchcid(eroot->cidmatch, callerid))) {
+
+			if (action == HELPER_MATCHMORE && match == 2 && !earlymatch) {
+				/* It matched an extension ending in a '!' wildcard
+				   So ignore it for now, unless there's a better match */
+				earlymatch = eroot;
+			} else {
+				if (*status < STATUS_NO_PRIORITY)
+					*status = STATUS_NO_PRIORITY;
+				for (e = eroot; e; e = e->peer) {
+					/* Match priority */
+					if (action == HELPER_FINDLABEL) {
+						if (*status < STATUS_NO_LABEL)
+							*status = STATUS_NO_LABEL;
+						if (label && e->label && !strcmp(label, e->label)) {
+							*status = STATUS_SUCCESS;
+							*foundcontext = context;
+							return e;
 						}
+					} else if (e->priority == priority) {
+						*status = STATUS_SUCCESS;
+						*foundcontext = context;
+						return e;
 					}
 				}
 			}
-			if (earlymatch) {
-				/* Bizarre logic for HELPER_MATCHMORE. We return zero to break out 
-				   of the loop waiting for more digits, and _then_ match (normally)
-				   the extension we ended up with. We got an early-matching wildcard
-				   pattern, so return NULL to break out of the loop. */
+		}
+	}
+	if (earlymatch) {
+		/* Bizarre logic for HELPER_MATCHMORE. We return zero to break out 
+		   of the loop waiting for more digits, and _then_ match (normally)
+		   the extension we ended up with. We got an early-matching wildcard
+		   pattern, so return NULL to break out of the loop. */
+		return NULL;
+	}
+	/* Check alternative switches */
+	AST_LIST_TRAVERSE(&tmp->alts, sw, list) {
+		if ((asw = pbx_findswitch(sw->name))) {
+			/* Substitute variables now */
+			if (sw->eval) 
+				pbx_substitute_variables_helper(chan, sw->data, sw->tmpdata, SWITCH_DATA_LENGTH - 1);
+			if (action == HELPER_CANMATCH)
+				res = asw->canmatch ? asw->canmatch(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
+			else if (action == HELPER_MATCHMORE)
+				res = asw->matchmore ? asw->matchmore(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
+			else
+				res = asw->exists ? asw->exists(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
+			if (res) {
+				/* Got a match */
+				*swo = asw;
+				*data = sw->eval ? sw->tmpdata : sw->data;
+				*foundcontext = context;
 				return NULL;
 			}
-			/* Check alternative switches */
-			AST_LIST_TRAVERSE(&tmp->alts, sw, list) {
-				if ((asw = pbx_findswitch(sw->name))) {
-					/* Substitute variables now */
-					if (sw->eval) 
-						pbx_substitute_variables_helper(chan, sw->data, sw->tmpdata, SWITCH_DATA_LENGTH - 1);
-					if (action == HELPER_CANMATCH)
-						res = asw->canmatch ? asw->canmatch(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
-					else if (action == HELPER_MATCHMORE)
-						res = asw->matchmore ? asw->matchmore(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
-					else
-						res = asw->exists ? asw->exists(chan, context, exten, priority, callerid, sw->eval ? sw->tmpdata : sw->data) : 0;
-					if (res) {
-						/* Got a match */
-						*swo = asw;
-						*data = sw->eval ? sw->tmpdata : sw->data;
-						*foundcontext = context;
-						return NULL;
-					}
-				} else {
-					ast_log(LOG_WARNING, "No such switch '%s'\n", sw->name);
-				}
-			}
-			/* Setup the stack */
-			incstack[*stacklen] = tmp->name;
-			(*stacklen)++;
-			/* Now try any includes we have in this context */
-			for (i = tmp->includes; i; i = i->next) {
-				if (include_valid(i)) {
-					if ((e = pbx_find_extension(chan, bypass, i->rname, exten, priority, label, callerid, action, incstack, stacklen, status, swo, data, foundcontext))) 
-						return e;
-					if (*swo) 
-						return NULL;
-				}
-			}
-			break;
-		}
-	}
+		} else {
+			ast_log(LOG_WARNING, "No such switch '%s'\n", sw->name);
+		}
+	}
+	/* Setup the stack */
+	incstack[*stacklen] = tmp->name;
+	(*stacklen)++;
+	/* Now try any includes we have in this context */
+	for (i = tmp->includes; i; i = i->next) {
+		if (include_valid(i)) {
+			if ((e = pbx_find_extension(chan, bypass, i->rname, exten, priority, label, callerid, action, incstack, stacklen, status, swo, data, foundcontext))) 
+				return e;
+			if (*swo) 
+				return NULL;
+		}
+	}
+
 	return NULL;
 }
 
@@ -878,6 +894,7 @@
 
 	ast_copy_string(workspace, value, workspace_len); /* always make a copy */
 
+	/* Quick check if no need to do anything */
 	if (offset == 0 && length < 0)	/* take the whole string */
 		return ret;
 
@@ -1189,58 +1206,51 @@
 	return 0;
 }
 
-int ast_func_read(struct ast_channel *chan, char *function, char *workspace, size_t len)
-{
-	char *args = NULL, *p;
-	struct ast_custom_function *acfptr;
-
-	if ((args = strchr(function, '('))) {
+/*! \brief return a pointer to the arguments of the function,
+ * and terminates the function name with '\0'
+ */
+static char *func_args(char *function)
+{
+	char *args = strchr(function, '(');
+
+	if (!args)
+		ast_log(LOG_WARNING, "Function doesn't contain parentheses.  Assuming null argument.\n");
+	else {
+		char *p;
 		*args++ = '\0';
-		if ((p = strrchr(args, ')')))
+		if ((p = strrchr(args, ')')) )
 			*p = '\0';
 		else
 			ast_log(LOG_WARNING, "Can't find trailing parenthesis?\n");
-	} else {
-		ast_log(LOG_WARNING, "Function doesn't contain parentheses.  Assuming null argument.\n");
-	}
-
-	if ((acfptr = ast_custom_function_find(function))) {
-		/* run the custom function */
-		if (acfptr->read)
-			return acfptr->read(chan, function, args, workspace, len);
-		else
-			ast_log(LOG_ERROR, "Function %s cannot be read\n", function);
-	} else {
+	}
+	return args;
+}
+
+int ast_func_read(struct ast_channel *chan, char *function, char *workspace, size_t len)
+{
+	char *args = func_args(function);
+	struct ast_custom_function *acfptr = ast_custom_function_find(function);
+
+	if (acfptr == NULL)
 		ast_log(LOG_ERROR, "Function %s not registered\n", function);
-	}
-
+	else if (!acfptr->read)
+		ast_log(LOG_ERROR, "Function %s cannot be read\n", function);
+	else
+		return acfptr->read(chan, function, args, workspace, len);
 	return -1;
 }
 
 int ast_func_write(struct ast_channel *chan, char *function, const char *value)
 {
-	char *args = NULL, *p;
-	struct ast_custom_function *acfptr;
-
-	if ((args = strchr(function, '('))) {
-		*args++ = '\0';
-		if ((p = strrchr(args, ')')))
-			*p = '\0';
-		else
-			ast_log(LOG_WARNING, "Can't find trailing parenthesis?\n");
-	} else {
-		ast_log(LOG_WARNING, "Function doesn't contain parentheses.  Assuming null argument.\n");
-	}
-

[... 944 lines stripped ...]


More information about the asterisk-commits mailing list