[asterisk-commits] branch kpfleming/vldtmf r34845 - in /team/kpfleming/vldtmf: ./ apps/ build_to...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon Jun 19 08:25:14 MST 2006


Author: kpfleming
Date: Mon Jun 19 10:25:13 2006
New Revision: 34845

URL: http://svn.digium.com/view/asterisk?rev=34845&view=rev
Log:
update to trunk

Added:
    team/kpfleming/vldtmf/build_tools/get_makeopts
      - copied unchanged from r34844, trunk/build_tools/get_makeopts
    team/kpfleming/vldtmf/build_tools/get_moduleinfo
      - copied unchanged from r34844, trunk/build_tools/get_moduleinfo
    team/kpfleming/vldtmf/pbx/ael/ael-test/ael-test8/
      - copied from r34844, trunk/pbx/ael/ael-test/ael-test8/
    team/kpfleming/vldtmf/pbx/ael/ael-test/ael-test8/extensions.ael
      - copied unchanged from r34844, trunk/pbx/ael/ael-test/ael-test8/extensions.ael
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test8
      - copied unchanged from r34844, trunk/pbx/ael/ael-test/ref.ael-test8
Removed:
    team/kpfleming/vldtmf/build_tools/get_moduledeps
Modified:
    team/kpfleming/vldtmf/   (props changed)
    team/kpfleming/vldtmf/Makefile
    team/kpfleming/vldtmf/apps/Makefile
    team/kpfleming/vldtmf/apps/app_voicemail.c
    team/kpfleming/vldtmf/build_tools/cflags.xml
    team/kpfleming/vldtmf/build_tools/menuselect.c
    team/kpfleming/vldtmf/build_tools/menuselect.h
    team/kpfleming/vldtmf/build_tools/prep_moduledeps
    team/kpfleming/vldtmf/cdr/Makefile
    team/kpfleming/vldtmf/channels/Makefile
    team/kpfleming/vldtmf/channels/chan_iax2.c
    team/kpfleming/vldtmf/channels/chan_jingle.c
    team/kpfleming/vldtmf/channels/chan_misdn.c
    team/kpfleming/vldtmf/channels/chan_skinny.c
    team/kpfleming/vldtmf/channels/misdn/isdn_lib.c
    team/kpfleming/vldtmf/channels/misdn/isdn_lib.h
    team/kpfleming/vldtmf/codecs/Makefile
    team/kpfleming/vldtmf/configs/iax.conf.sample
    team/kpfleming/vldtmf/configs/indications.conf.sample
    team/kpfleming/vldtmf/configs/skinny.conf.sample
    team/kpfleming/vldtmf/db1-ast/Makefile
    team/kpfleming/vldtmf/doc/ael.txt
    team/kpfleming/vldtmf/doc/radius.txt
    team/kpfleming/vldtmf/formats/Makefile
    team/kpfleming/vldtmf/funcs/Makefile
    team/kpfleming/vldtmf/include/asterisk/ael_structs.h
    team/kpfleming/vldtmf/pbx/Makefile
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test1
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test2
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test3
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test4
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test5
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test6
    team/kpfleming/vldtmf/pbx/ael/ael-test/ref.ael-test7
    team/kpfleming/vldtmf/pbx/ael/ael.tab.c
    team/kpfleming/vldtmf/pbx/ael/ael.tab.h
    team/kpfleming/vldtmf/pbx/ael/ael.y
    team/kpfleming/vldtmf/pbx/ael/ael_lex.c
    team/kpfleming/vldtmf/pbx/pbx_ael.c
    team/kpfleming/vldtmf/res/Makefile
    team/kpfleming/vldtmf/res/res_jabber.c
    team/kpfleming/vldtmf/res/res_smdi.c
    team/kpfleming/vldtmf/say.c
    team/kpfleming/vldtmf/sounds/Makefile

Propchange: team/kpfleming/vldtmf/
------------------------------------------------------------------------------
    automerge = yeah

Propchange: team/kpfleming/vldtmf/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.

Propchange: team/kpfleming/vldtmf/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: team/kpfleming/vldtmf/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jun 19 10:25:13 2006
@@ -1,1 +1,1 @@
-/trunk:1-34488
+/trunk:1-34844

Modified: team/kpfleming/vldtmf/Makefile
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/Makefile?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/Makefile (original)
+++ team/kpfleming/vldtmf/Makefile Mon Jun 19 10:25:13 2006
@@ -145,13 +145,13 @@
 OPTIMIZE+=-O6
   else
     # Stack backtraces, while useful for debugging, are incompatible with optimizations
-    ifeq (${OSARCH},Linux)
+    ifeq ($(OSARCH),Linux)
       CFLAGS+=-DSTACK_BACKTRACES
     endif
   endif
 else
   # Stack backtraces, while useful for debugging, are incompatible with optimizations
-  ifeq (${OSARCH},Linux)
+  ifeq ($(OSARCH),Linux)
     CFLAGS+=-DSTACK_BACKTRACES
   endif
 endif
@@ -263,21 +263,14 @@
   RPMVERSION=unknown
 endif
 
-# CVS mirrors of SVN have .svnrevision files showing
-# which SVN revision they are based on, and .svnbranch
-# showing the branch they are made from
-ifneq ($(wildcard .svnrevision),)
+ifneq ($(wildcard .svn),)
   ASTERISKVERSIONNUM=999999
-else
-  ifneq ($(wildcard .svn),)
-    ASTERISKVERSIONNUM=999999
-  endif
 endif
 
 ASTCFLAGS+=$(MALLOC_DEBUG)$(BUSYDETECT)$(OPTIONS)
 
 MOD_SUBDIRS=res channels pbx apps codecs formats cdr funcs
-OTHER_SUBDIRS=utils stdtime agi
+OTHER_SUBDIRS=utils agi
 SUBDIRS:=$(MOD_SUBDIRS) $(OTHER_SUBDIRS)
 
 OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
@@ -458,36 +451,33 @@
 
 defaults.h: makeopts
 	@build_tools/make_defaults_h > $@.tmp
-	@if cmp -s $@.tmp $@ ; then echo ; else \
+	@if cmp -s $@.tmp $@ ; then : ; else \
 		mv $@.tmp $@ ; \
 	fi
 	@rm -f $@.tmp
 
 include/asterisk/version.h:
 	@build_tools/make_version_h > $@.tmp
-	@if cmp -s $@.tmp $@ ; then echo; else \
+	@if cmp -s $@.tmp $@ ; then : ; else \
 		mv $@.tmp $@ ; \
 	fi
 	@rm -f $@.tmp
 
 include/asterisk/buildopts.h: menuselect.makeopts
 	@build_tools/make_buildopts_h > $@.tmp
-	@if cmp -s $@.tmp $@ ; then echo; else \
+	@if cmp -s $@.tmp $@ ; then : ; else \
 		mv $@.tmp $@ ; \
 	fi
 	@rm -f $@.tmp
 
-stdtime/libtime.a:
-	CFLAGS="$(MOD_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C stdtime libtime.a
-
-asterisk: include/asterisk/buildopts.h editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
+asterisk: include/asterisk/buildopts.h editline/libedit.a db1-ast/libdb1.a $(OBJS)
 	build_tools/make_build_h > include/asterisk/build.h.tmp
 	if cmp -s include/asterisk/build.h.tmp include/asterisk/build.h ; then echo ; else \
 		mv include/asterisk/build.h.tmp include/asterisk/build.h ; \
 	fi
 	rm -f include/asterisk/build.h.tmp
 	$(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
-	$(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LIBS)
+	$(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a $(LIBS)
 
 muted: muted.o
 	$(CC) $(AUDIO_LIBS) -o muted muted.o
@@ -547,16 +537,6 @@
 		if [ `grep -c ^C update.out` -gt 0 ]; then \
 			echo ; echo "The following files have conflicts:" ; \
 			grep ^C update.out | cut -b4- ; \
-		fi ; \
-		rm -f update.out; \
-		$(MAKE) clean-depend; \
-	elif [ -d CVS ]; then \
-		echo "Updating from CVS..." ; \
-		cvs -q -z3 update -Pd | tee update.out; \
-		rm -f .version; \
-		if [ `grep -c ^C update.out` -gt 0 ]; then \
-			echo ; echo "The following files have conflicts:" ; \
-			grep ^C update.out | cut -d' ' -f2- ; \
 		fi ; \
 		rm -f update.out; \
 		$(MAKE) clean-depend; \
@@ -606,11 +586,7 @@
 	$(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
 	$(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
 	$(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
-	if [ -d contrib/firmware/iax ]; then \
-		$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
-	else \
-		echo "You need to do cvs update -d not just cvs update" ; \
-	fi 
+	$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
 
 install-subdirs:
 	@for x in $(SUBDIRS); do $(MAKE) -C $$x install || exit 1 ; done
@@ -668,7 +644,7 @@
 adsi:
 	mkdir -p $(DESTDIR)$(ASTETCDIR)
 	for x in configs/*.adsi; do \
-		if [ ! -f $(DESTDIR)$(ASTETCDIRX)/$$x ]; then \
+		if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \
 			$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`basename $$x` ; \
 		fi ; \
 	done

Modified: team/kpfleming/vldtmf/apps/Makefile
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/apps/Makefile?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/apps/Makefile (original)
+++ team/kpfleming/vldtmf/apps/Makefile Mon Jun 19 10:25:13 2006
@@ -11,20 +11,15 @@
 # the GNU General Public License
 #
 
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+  include ../menuselect.makeopts
+endif
 
 SELECTED_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.c,%,$(wildcard app_*.c)))
 
-# If you have UnixODBC you can use ODBC voicemail
-# storage
-#
-# Uncomment to use ODBC storage
-#CFLAGS+=-DUSE_ODBC_STORAGE
-# Uncomment for extended ODBC voicemail storage
-#CFLAGS+=-DEXTENDED_ODBC_STORAGE
-# See doc/README.odbcstorage for more information
+MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
 
-MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
+app_voicemail.o: CFLAGS+=$(patsubst %,-D%,$(MENUSELECT_app_voicemail))
 
 all: $(MODS)
 

Modified: team/kpfleming/vldtmf/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/apps/app_voicemail.c?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/apps/app_voicemail.c (original)
+++ team/kpfleming/vldtmf/apps/app_voicemail.c Mon Jun 19 10:25:13 2006
@@ -40,6 +40,19 @@
  * 12-04-2006 : Support for Polish added by DIR (www.dir.pl)
  *				 Bartosz Supczinski <Bartosz.Supczinski at dir.pl>
  */
+
+/*** MAKEOPTS
+<category name="MENUSELECT_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o">
+	<member name="ODBC_STORAGE" displayname="Storage of Voicemail using ODBC">
+		<depend>unixodbc</depend>
+		<defaultenabled>no</defaultenabled>
+	</member>
+	<member name="EXTENDED_ODBC_STORAGE" displayname="Storage of Voicemail using ODBC (extended)">
+		<depend>unixodbc</depend>
+		<defaultenabled>no</defaultenabled>
+	</member>
+</category>
+ ***/
 
 #include "asterisk.h"
 
@@ -77,7 +90,7 @@
 #include "asterisk/stringfields.h"
 #include "asterisk/smdi.h"
 #define SMDI_MWI_WAIT_TIMEOUT 1000 /* 1 second */
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
 #include "asterisk/res_odbc.h"
 #endif
 
@@ -289,7 +302,7 @@
 
 static void apply_options(struct ast_vm_user *vmu, const char *options);
 
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
 static char odbc_database[80];
 static char odbc_table[80];
 #define RETRIEVE(a,b) retrieve_file(a,b)
@@ -838,7 +851,7 @@
 }
 
 
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
 static int retrieve_file(char *dir, int msgnum)
 {
 	int x = 0;
@@ -1290,7 +1303,7 @@
 		}
 		fdlen = lseek(fd, 0, SEEK_END);
 		lseek(fd, 0, SEEK_SET);
-		printf("Length is %d\n", fdlen);
+		printf("Length is %zd\n", fdlen);
 		fdm = mmap(NULL, fdlen, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0);
 		if (!fdm) {
 			ast_log(LOG_WARNING, "Memory map failed!\n");
@@ -2015,7 +2028,7 @@
 	return (id >= 0 && id < (sizeof(msgs)/sizeof(msgs[0]))) ? msgs[id] : "Unknown";
 }
 
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
 static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
 {
 	int x = -1;
@@ -6183,7 +6196,7 @@
 			astsearch = "no";
 		ast_set2_flag((&globalflags), ast_true(astsearch), VM_SEARCH);
 
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
 		strcpy(odbc_database, "asterisk");
 		if ((thresholdstr = ast_variable_retrieve(cfg, "general", "odbcstorage"))) {
 			ast_copy_string(odbc_database, thresholdstr, sizeof(odbc_database));
@@ -6614,7 +6627,7 @@
 
 	ast_install_vm_functions(has_voicemail, inboxcount, messagecount);
 
-#if defined(USE_ODBC_STORAGE) && !defined(EXTENDED_ODBC_STORAGE)
+#if defined(ODBC_STORAGE) && !defined(EXTENDED_ODBC_STORAGE)
 	ast_log(LOG_WARNING, "The current ODBC storage table format will be changed soon."
 				"Please update your tables as per the README and edit the apps/Makefile "
 				"and uncomment the line containing EXTENDED_ODBC_STORAGE to enable the "

Modified: team/kpfleming/vldtmf/build_tools/cflags.xml
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/build_tools/cflags.xml?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/build_tools/cflags.xml (original)
+++ team/kpfleming/vldtmf/build_tools/cflags.xml Mon Jun 19 10:25:13 2006
@@ -1,4 +1,4 @@
-	<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" force_clean_on_change="yes">
+	<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" remove_on_change=".lastclean">
 		<member name="DEBUG_CHANNEL_LOCKS" displayname="Debug Channel Locking">
 		</member>
 		<member name="DEBUG_SCHEDULER" displayname="Enable Scheduler Debugging Output">

Modified: team/kpfleming/vldtmf/build_tools/menuselect.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/build_tools/menuselect.c?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/build_tools/menuselect.c (original)
+++ team/kpfleming/vldtmf/build_tools/menuselect.c Mon Jun 19 10:25:13 2006
@@ -70,20 +70,17 @@
 /*! This is set when the --check-deps argument is provided. */
 static int check_deps = 0;
 
-/*! Force a clean of the source tree */
-static int force_clean = 0;
-
-static int add_category(struct category *cat);
-static int add_member(struct member *mem, struct category *cat);
-static int parse_makeopts_xml(const char *makeopts_xml);
-static int process_deps(void);
-static int build_member_list(void);
-static void mark_as_present(const char *member, const char *category);
-static void process_prev_failed_deps(char *buf);
-static int parse_existing_config(const char *infile);
-static int generate_makeopts_file(void);
-static void free_member_list(void);
-static void free_trees(void);
+#if !defined(ast_strdupa) && defined(__GNUC__)
+#define ast_strdupa(s)                                                    \
+	(__extension__                                                    \
+	({                                                                \
+		const char *__old = (s);                                  \
+		size_t __len = strlen(__old) + 1;                         \
+		char *__new = __builtin_alloca(__len);                    \
+		memcpy (__new, __old, __len);                             \
+		__new;                                                    \
+	}))
+#endif
 
 /*! \brief return a pointer to the first non-whitespace character */
 static inline char *skip_blanks(char *str)
@@ -127,6 +124,19 @@
 	AST_LIST_INSERT_TAIL(&cat->members, mem, list);
 
 	return 0;
+}
+
+/*! \brief Free a member structure and all of its members */
+static void free_member(struct member *mem)
+{
+	struct depend *dep;
+	struct conflict *cnf;
+
+	while ((dep = AST_LIST_REMOVE_HEAD(&mem->deps, list)))
+		free(dep);
+	while ((cnf = AST_LIST_REMOVE_HEAD(&mem->conflicts, list)))
+		free(cnf);
+	free(mem);
 }
 
 /*! \brief Parse an input makeopts file */
@@ -174,8 +184,7 @@
 		cat->displayname = mxmlElementGetAttr(cur, "displayname");
 		if ((tmp = mxmlElementGetAttr(cur, "positive_output")))
 			cat->positive_output = !strcasecmp(tmp, "yes");
-		if ((tmp = mxmlElementGetAttr(cur, "force_clean_on_change")))
-			cat->force_clean_on_change = !strcasecmp(tmp, "yes");
+		cat->remove_on_change = mxmlElementGetAttr(cur, "remove_on_change");
 
 		if (add_category(cat)) {
 			free(cat);
@@ -192,8 +201,10 @@
 			mem->name = mxmlElementGetAttr(cur2, "name");
 			mem->displayname = mxmlElementGetAttr(cur2, "displayname");
 		
+			mem->remove_on_change = mxmlElementGetAttr(cur2, "remove_on_change");
+
 			if (!cat->positive_output)
-				mem->enabled = 1;
+				mem->was_enabled = mem->enabled = 1;
 	
 			cur3 = mxmlFindElement(cur2, cur2, "defaultenabled", NULL, NULL, MXML_DESCEND);
 			if (cur3 && cur3->child)
@@ -203,8 +214,10 @@
 			     cur3 && cur3->child;
 			     cur3 = mxmlFindElement(cur3, cur2, "depend", NULL, NULL, MXML_DESCEND))
 			{
-				if (!(dep = calloc(1, sizeof(*dep))))
+				if (!(dep = calloc(1, sizeof(*dep)))) {
+					free_member(mem);
 					return -1;
+				}
 				if (!strlen_zero(cur3->child->value.opaque)) {
 					dep->name = cur3->child->value.opaque;
 					AST_LIST_INSERT_HEAD(&mem->deps, dep, list);
@@ -216,8 +229,10 @@
 			     cur3 && cur3->child;
 			     cur3 = mxmlFindElement(cur3, cur2, "conflict", NULL, NULL, MXML_DESCEND))
 			{
-				if (!(cnf = calloc(1, sizeof(*cnf))))
+				if (!(cnf = calloc(1, sizeof(*cnf)))) {
+					free_member(mem);
 					return -1;
+				}
 				if (!strlen_zero(cur3->child->value.opaque)) {
 					cnf->name = cur3->child->value.opaque;
 					AST_LIST_INSERT_HEAD(&mem->conflicts, cnf, list);
@@ -226,7 +241,7 @@
 			}
 
 			if (add_member(mem, cat))
-				free(mem);
+				free_member(mem);
 		}
 	}
 
@@ -343,7 +358,7 @@
 			continue;
 		AST_LIST_TRAVERSE(&cat->members, mem, list) {
 			if (!strcmp(member, mem->name)) {
-				mem->enabled = cat->positive_output;
+				mem->was_enabled = mem->enabled = cat->positive_output;
 				break;
 			}
 		}
@@ -369,8 +384,6 @@
 
 	if (mem && !(mem->depsfailed || mem->conflictsfailed)) {
 		mem->enabled = !mem->enabled;
-		if (cat->force_clean_on_change)
-			force_clean = 1;
 	}
 }
 
@@ -502,6 +515,34 @@
 
 	fclose(f);
 
+	/* Traverse all categories and members and remove any files that are supposed
+	   to be removed when an item has been changed */
+	AST_LIST_TRAVERSE(&categories, cat, list) {
+		unsigned int had_changes = 0;
+		char *file, *buf;
+
+		AST_LIST_TRAVERSE(&cat->members, mem, list) {
+			if (mem->enabled == mem->was_enabled)
+				continue;
+
+			had_changes = 1;
+
+			if (mem->remove_on_change) {
+				for (buf = ast_strdupa(mem->remove_on_change), file = strsep(&buf, " ");
+				     file;
+				     file = strsep(&buf, " "))
+					unlink(file);
+			}
+		}
+
+		if (cat->remove_on_change && had_changes) {
+			for (buf = ast_strdupa(cat->remove_on_change), file = strsep(&buf, " ");
+			     file;
+			     file = strsep(&buf, " "))
+				unlink(file);
+		}
+	}
+
 	return 0;
 }
 
@@ -517,7 +558,8 @@
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		fprintf(stderr, "Category: '%s'\n", cat->name);
 		AST_LIST_TRAVERSE(&cat->members, mem, list) {
-			fprintf(stderr, "   ==>> Member: '%s'  (%s)\n", mem->name, mem->enabled ? "Enabled" : "Disabled");
+			fprintf(stderr, "   ==>> Member: '%s'  (%s)", mem->name, mem->enabled ? "Enabled" : "Disabled");
+			fprintf(stderr, "        Was %s\n", mem->was_enabled ? "Enabled" : "Disabled");
 			AST_LIST_TRAVERSE(&mem->deps, dep, list)
 				fprintf(stderr, "      --> Depends on: '%s'\n", dep->name);
 			if (!AST_LIST_EMPTY(&mem->deps))
@@ -696,11 +738,5 @@
 	free_trees();
 	free_member_list();
 
-	/* In some cases, such as modifying the CFLAGS for the build,
-	 * a "make clean" needs to be forced.  Removing the .lastclean 
-	 * file does this. */
-	if (force_clean)
-		unlink(".lastclean");
-
 	exit(res);
 }

Modified: team/kpfleming/vldtmf/build_tools/menuselect.h
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/build_tools/menuselect.h?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/build_tools/menuselect.h (original)
+++ team/kpfleming/vldtmf/build_tools/menuselect.h Mon Jun 19 10:25:13 2006
@@ -52,8 +52,12 @@
 	const char *displayname;
 	/*! Default setting */
 	const char *defaultenabled;
+	/*! Delete these file(s) if this member changes */
+	const char *remove_on_change;
 	/*! This module is currently selected */
 	unsigned int enabled:1;
+	/*! This module was enabled when the config was loaded */
+	unsigned int was_enabled:1;
 	/*! This module has failed dependencies */
 	unsigned int depsfailed:1;
 	/*! This module has failed conflicts */
@@ -71,10 +75,10 @@
 	const char *name;
 	/*! the name displayed in the menu */
 	const char *displayname;
-	/*! Display what is selected, as opposed to not selected */
+	/*! Delete these file(s) if anything in this category changes */
+	const char *remove_on_change;
+	/*! Output what is selected, as opposed to not selected */
 	unsigned int positive_output:1;
-	/*! Force a clean of the source tree if anything in this category changes */
-	unsigned int force_clean_on_change:1;
 	/*! the list of possible values to be set in this variable */
 	AST_LIST_HEAD_NOLOCK(, member) members;
 	/*! for linking */

Modified: team/kpfleming/vldtmf/build_tools/prep_moduledeps
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/build_tools/prep_moduledeps?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/build_tools/prep_moduledeps (original)
+++ team/kpfleming/vldtmf/build_tools/prep_moduledeps Mon Jun 19 10:25:13 2006
@@ -38,16 +38,22 @@
 		fname=${file##${dir}/}
 		get_description ${file}
 		desc=${TDESC}
-		echo -e "\t\t<member name=\"${fname%%.c}\" displayname=\"${desc}\">"
-		awk -f build_tools/get_moduledeps ${file}
+		echo -e "\t\t<member name=\"${fname%%.c}\" displayname=\"${desc}\" remove_on_change=\"${dir}/${fname%%.c}.o ${dir}/${fname%%.c}.so\">"
+		awk -f build_tools/get_moduleinfo ${file}
 		echo -e "\t\t</member>"
 	done
 	echo -e "\t</category>"
+
+	for file in ${dir}/${prefix}*.c
+	do
+		awk -f build_tools/get_makeopts ${file} >> .makeoptstmp
+	done
 }
 
 echo "<?xml version="1.0"?>"
 echo
 echo "<menu>"
+rm -f .makeoptstmp
 process_dir apps app APPS Applications
 process_dir cdr cdr CDR "Call Detail Recording"
 process_dir channels chan CHANNELS "Channel Drivers"
@@ -58,4 +64,6 @@
 process_dir res res RES "Resource Modules"
 cat build_tools/cflags.xml
 cat sounds/sounds.xml
+cat .makeoptstmp
+rm -f .makeoptstmp
 echo "</menu>"

Modified: team/kpfleming/vldtmf/cdr/Makefile
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/cdr/Makefile?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/cdr/Makefile (original)
+++ team/kpfleming/vldtmf/cdr/Makefile Mon Jun 19 10:25:13 2006
@@ -11,7 +11,9 @@
 # the GNU General Public License
 #
 
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+  include ../menuselect.makeopts
+endif
 
 SELECTED_MODS:=$(filter-out $(MENUSELECT_CDR),$(patsubst %.c,%,$(wildcard cdr_*.c)))
 
@@ -39,7 +41,7 @@
 
 MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
 
-all: depend $(MODS)
+all: $(MODS)
 
 install: all
 	for x in $(MODS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done

Modified: team/kpfleming/vldtmf/channels/Makefile
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/channels/Makefile?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/channels/Makefile (original)
+++ team/kpfleming/vldtmf/channels/Makefile Mon Jun 19 10:25:13 2006
@@ -11,7 +11,9 @@
 # the GNU General Public License
 #
 
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+  include ../menuselect.makeopts
+endif
 
 SELECTED_MODS:=$(filter-out $(MENUSELECT_CHANNELS),$(patsubst %.c,%,$(wildcard chan_*.c)))
 
@@ -66,7 +68,7 @@
 
 MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
 
-all: depend $(MODS) 
+all: $(MODS) 
 
 clean-depend:
 	rm -f .depend

Modified: team/kpfleming/vldtmf/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/channels/chan_iax2.c?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/channels/chan_iax2.c (original)
+++ team/kpfleming/vldtmf/channels/chan_iax2.c Mon Jun 19 10:25:13 2006
@@ -8351,11 +8351,7 @@
 		peer->peercontext[0] = '\0';
 		while(v) {
 			if (!strcasecmp(v->name, "secret")) {
-				if (!ast_strlen_zero(peer->secret)) {
-					strncpy(peer->secret + strlen(peer->secret), ";", sizeof(peer->secret)-strlen(peer->secret) - 1);
-					strncpy(peer->secret + strlen(peer->secret), v->value, sizeof(peer->secret)-strlen(peer->secret) - 1);
-				} else
-					ast_copy_string(peer->secret, v->value, sizeof(peer->secret));
+				ast_copy_string(peer->secret, v->value, sizeof(peer->secret));
 			} else if (!strcasecmp(v->name, "mailbox")) {
 				ast_copy_string(peer->mailbox, v->value, sizeof(peer->mailbox));
 			} else if (!strcasecmp(v->name, "dbsecret")) {

Modified: team/kpfleming/vldtmf/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/channels/chan_jingle.c?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/channels/chan_jingle.c (original)
+++ team/kpfleming/vldtmf/channels/chan_jingle.c Mon Jun 19 10:25:13 2006
@@ -479,13 +479,10 @@
 	struct jingle_pvt *tmp;
 
 	ast_log(LOG_DEBUG, "The client is %s\n", client->name);
-	tmp = client->p;
 	/* Make sure our new call doesn't exist yet */
-	while (tmp) {
-		if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
+	for (tmp = client->p; tmp; tmp = tmp->next) {
+		if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid))
 			break;
-		}
-		tmp = tmp->next;
 	}
 
 	if (tmp) {
@@ -502,13 +499,10 @@
 	struct jingle_pvt *tmp;
 
 	ast_log(LOG_DEBUG, "The client is %s\n", client->name);
-	tmp = client->p;
 	/* Make sure our new call doesn't exist yet */
-	while (tmp) {
-		if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
+	for (tmp = client->p; tmp; tmp = tmp->next) {
+		if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid))
 			break;
-		}
-		tmp = tmp->next;
 	}
 
 	if (tmp) {
@@ -536,21 +530,20 @@
 	iq = iks_new("iq");
 	jingle = iks_new(GOOGLE_NODE);
 	candidate = iks_new("candidate");
-	ours1 = (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
-	ours2 = (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
-	if (!iq || !jingle || !candidate || !ours1 || !ours2) {
-		ast_log(LOG_WARNING, "out of memory!\n");
+	if (!iq || !jingle || !candidate) {
+		ast_log(LOG_ERROR, "Memory allocation error\n");
 		goto safeout;
 	}
-
+	ours1 = ast_calloc(1, sizeof(*ours1));
+	ours2 = ast_calloc(1, sizeof(*ours2));
+	if (!ours1 || !ours2)
+		goto safeout;
 	iks_insert_node(iq, jingle);
 	iks_insert_node(jingle, candidate);
 
-	while (p) {
-		if (!strcasecmp(p->sid, sid)) {
+	for (; p; p = p->next) {
+		if (!strcasecmp(p->sid, sid))
 			break;
-		}
-		p = p->next;
 	}
 
 	if (!p) {
@@ -596,8 +589,7 @@
 	dest.sin_port = sin.sin_port;
 
 
-	tmp = p->ourcandidates;
-	while (tmp) {				/*send standard candidates */
+	for (tmp = p->ourcandidates; tmp; tmp = tmp->next) {
 		snprintf(port, sizeof(port), "%d", tmp->port);
 		snprintf(preference, sizeof(preference), "%.2f", tmp->preference);
 		iks_insert_attrib(iq, "from", c->jid->full);
@@ -628,7 +620,6 @@
 		iks_insert_attrib(candidate, "network", "0");
 		iks_insert_attrib(candidate, "generation", "0");
 		iks_send(c->p, iq);
-		tmp = tmp->next;
 	}
 	p->laststun = 0;
 
@@ -958,23 +949,18 @@
 	struct aji_client *c = client->connection;
 	struct jingle_candidate *newcandidate = NULL;
 	iks  *traversenodes = NULL, *receipt = NULL;
-	newcandidate =
-		(struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
+	newcandidate = ast_calloc(1, sizeof(*newcandidate));
 	if (!newcandidate)
 		return 0;
-	memset(newcandidate, 0, sizeof(struct jingle_candidate));
-	tmp = client->p;
-	while (tmp) {
+	for (tmp = client->p; tmp; tmp = tmp->next) {
 		if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
 			p = tmp;
 			break;
 		}
-		tmp = tmp->next;
-	}
-
-	if (!p) {
+	}
+
+	if (!p)
 		return -1;
-	}
 
 	traversenodes = pak->query;
 	while(traversenodes) {
@@ -983,11 +969,9 @@
 			continue;
 		}
 		if(!strcasecmp(iks_name(traversenodes), "candidate")) {
-			newcandidate =
-				(struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
+			newcandidate = ast_calloc(1, sizeof(*newcandidate));
 			if (!newcandidate)
 				return 0;
-			memset(newcandidate, 0, sizeof(struct jingle_candidate));
 			ast_copy_string(newcandidate->name, iks_find_attrib(traversenodes, "name"),
 							sizeof(newcandidate->name));
 			ast_copy_string(newcandidate->ip, iks_find_attrib(traversenodes, "address"),

Modified: team/kpfleming/vldtmf/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/channels/chan_misdn.c?rev=34845&r1=34844&r2=34845&view=diff
==============================================================================
--- team/kpfleming/vldtmf/channels/chan_misdn.c (original)
+++ team/kpfleming/vldtmf/channels/chan_misdn.c Mon Jun 19 10:25:13 2006
@@ -88,8 +88,6 @@
 	ast_mutex_t mutexjb;
 };
 
-void export_ies(struct ast_channel *chan, struct misdn_bchannel *bc);
-void import_ies(struct ast_channel *chan, struct misdn_bchannel *bc);
 
 
 /* allocates the jb-structure and initialise the elements*/
@@ -112,16 +110,6 @@
 
 /* BEGIN: chan_misdn.h */
 
-
-enum tone_e {
-	TONE_NONE=0,
-	TONE_DIAL,
-	TONE_ALERTING,
-	TONE_FAR_ALERTING,
-	TONE_BUSY,
-	TONE_CUSTOM,
-	TONE_FILE
-};
 
 
 enum misdn_chan_state {
@@ -185,6 +173,8 @@
 	struct ast_trans_pvt *trans;
   
 	struct ast_channel * ast;
+
+	int dummy;
   
 	struct misdn_bchannel *bc;
 	struct misdn_bchannel *holded_bc;
@@ -198,6 +188,8 @@
 	int dropped_frame_cnt;
 
 	int far_alerting;
+	int other_pid;
+	struct chan_list *other_ch;
 
 	const struct tone_zone_sound *ts;
 	
@@ -206,6 +198,11 @@
 	struct chan_list *prev;
 	struct chan_list *first;
 };
+
+
+
+void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
+void import_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
 
 struct robin_list {
 	char *group;
@@ -306,6 +303,7 @@
 static void cl_queue_chan(struct chan_list **list, struct chan_list *chan);
 static void cl_dequeue_chan(struct chan_list **list, struct chan_list *chan);
 static struct chan_list *find_chan_by_bc(struct chan_list *list, struct misdn_bchannel *bc);
+static struct chan_list *find_chan_by_pid(struct chan_list *list, int pid);
 
 
 
@@ -1638,7 +1636,7 @@
 		update_config(ch,ORG_AST);
 		
 		/* fill in some ies from channel vary*/
-		import_ies(ast, newbc);
+		import_ch(ast, newbc, ch);
 		
 		/* Finally The Options Override Everything */
 		if (opts)
@@ -1854,7 +1852,12 @@
 				p->state=MISDN_ALERTING;
 				chan_misdn_log(1, p->bc->port, " --> * IND :\tringing pid:%d\n",p->bc?p->bc->pid:-1);
 				misdn_lib_send_event( p->bc, EVENT_ALERTING);
-				
+			
+				if (p->other_ch && p->other_ch->bc && misdn_inband_avail(p->other_ch->bc)) {
+					chan_misdn_log(1,p->bc->port, " --> other End is mISDN and has inband info available\n");
+					break;
+				}
+			
 				if ( !p->bc->nt && (p->orginator==ORG_MISDN) && !p->incoming_early_audio ) 
 					chan_misdn_log(1,p->bc->port, " --> incoming_early_audio off\n");
 				 else 
@@ -1902,10 +1905,11 @@
 	case -1 :
 		chan_misdn_log(1, p->bc->port, " --> * IND :\t-1! (stop indication) pid:%d\n",p->bc?p->bc->pid:-1);
 		
-		if (p->state == MISDN_CONNECTED)
+		tone_indicate(p, TONE_NONE);
+
+		if (p->state == MISDN_CONNECTED) 
 			start_bc_tones(p);
-		else 
-			tone_indicate(p, TONE_NONE);
+
 		break;
 
 	case AST_CONTROL_HOLD:
@@ -1967,7 +1971,9 @@
 		return 0;
 	}
 
-	stop_bc_tones(p);
+	if (!p->bc->nt) 
+		stop_bc_tones(p);
+
 	
 	release_unlock;
 	
@@ -1994,10 +2000,13 @@
 		case MISDN_HOLDED:
 		case MISDN_DIALING:
 			start_bc_tones(p);
-			tone_indicate(p, TONE_BUSY);
+			tone_indicate(p, TONE_HANGUP);
 			p->state=MISDN_CLEANING;
-			
-			misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
+		
+			if (bc->nt)
+				misdn_lib_send_event( bc, EVENT_DISCONNECT);
+			else
+				misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
       
 			break;
       
@@ -2007,7 +2016,7 @@
 			chan_misdn_log(2, bc->port, " --> * State Alerting\n");
 
 			if (p->orginator != ORG_AST) 
-				tone_indicate(p, TONE_BUSY);
+				tone_indicate(p, TONE_HANGUP);
       
 			p->state=MISDN_CLEANING;
 			misdn_lib_send_event( bc, EVENT_DISCONNECT);
@@ -2016,7 +2025,7 @@
 			/*  Alerting or Disconect */
 			chan_misdn_log(2, bc->port, " --> * State Connected\n");
 			start_bc_tones(p);
-			tone_indicate(p, TONE_BUSY);
+			tone_indicate(p, TONE_HANGUP);
 			misdn_lib_send_event( bc, EVENT_DISCONNECT);
       
 			p->state=MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
@@ -2112,7 +2121,7 @@
 	if (!ast) return NULL;
 	if (! (tmp=MISDN_ASTERISK_TECH_PVT(ast)) ) return NULL;
 	if (!tmp->bc) return NULL;
-	
+
 	len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
 
 	if (len<=0) {
@@ -2349,6 +2358,9 @@
 	chan_misdn_log(3,cl->bc->port,"Tone Indicate:\n");
 	
 	if (!cl->ast) {
+		chan_misdn_log(-1,cl->bc->port,"Ast Ptr Not existing anymore.. we need to generate tones ourselves now (tbd)\n");
+		
+		misdn_lib_send_tone(cl->bc,tone);
 		return 0;
 	}
 	
@@ -2361,7 +2373,7 @@
 	case TONE_ALERTING:
 		chan_misdn_log(3,cl->bc->port," --> Ring\n");
 		ts=ast_get_indication_tone(ast->zone,"ring");
-		misdn_lib_tone_generator_stop(cl->bc);
+		misdn_lib_tone_generator_start(cl->bc);
 		break;
 	case TONE_FAR_ALERTING:
 	/* VERY UGLY HACK, BECAUSE CHAN_SIP DOES NOT GENERATE TONES */
@@ -2373,7 +2385,7 @@
 	case TONE_BUSY:
 		chan_misdn_log(3,cl->bc->port," --> Busy\n");
 		ts=ast_get_indication_tone(ast->zone,"busy");
-		misdn_lib_tone_generator_stop(cl->bc);
+		misdn_lib_tone_generator_start(cl->bc);
 		break;
 	case TONE_FILE:
 		break;
@@ -2460,7 +2472,7 @@
 			chan_misdn_log(2, 0, " --> Group Call group: %s\n",group);
 		} 
 		else if ((p = strchr(port_str, ':'))) {
-			// we have a preselected channel
+			/* we have a preselected channel */
 			*p = 0;
 			channel = atoi(++p);
 			port = atoi(port_str);
@@ -2748,6 +2760,17 @@
 	return NULL;
 }
 
+static struct chan_list *find_chan_by_pid(struct chan_list *list, int pid)
+{
+	struct chan_list *help=list;
+	for (;help; help=help->next) {
+		if (help->bc->pid == pid) return help;
+	}
+  
+	chan_misdn_log(6, 0, "$$$ find_chan: No channel found for pid:%d\n",pid);
+  
+	return NULL;
+}
 
 static struct chan_list *find_holded(struct chan_list *list, struct misdn_bchannel *bc)
 {
@@ -2839,8 +2862,15 @@
 		release_unlock;
 		
 		chan_misdn_log(1, bc->port, "release_chan: bc with l3id: %x\n",bc->l3_id);
-		
-		//releaseing jitterbuffer
+#if 0
+		if (ch->dummy) {
+			ast_hangup(ast);
+			ch->ast=NULL;
+			ast=NULL;
+		}
+#endif
+		
+		/*releaseing jitterbuffer*/
 		if (ch->jb ) {
 			misdn_jb_destroy(ch->jb);
 			ch->jb=NULL;
@@ -3042,46 +3072,30 @@
 	}
 }
 
-void import_ies(struct ast_channel *chan, struct misdn_bchannel *bc)
-{
-	const char *tmp;
-
-	tmp=pbx_builtin_getvar_helper(chan,"PRI_MODE");
-	if (tmp) bc->mode=atoi(tmp);
-
-	tmp=pbx_builtin_getvar_helper(chan,"PRI_URATE");
-	if (tmp) bc->urate=atoi(tmp);
-
-	tmp=pbx_builtin_getvar_helper(chan,"PRI_RATE");
-	if (tmp) bc->rate=atoi(tmp);
-
-	tmp=pbx_builtin_getvar_helper(chan,"PRI_USER1");
-	if (tmp) bc->user1=atoi(tmp);
-
-	tmp=pbx_builtin_getvar_helper(chan,"PRI_PROGRESS_INDICATOR");
-	if (tmp) bc->progress_indicator=atoi(tmp);
-}
-
-void export_ies(struct ast_channel *chan, struct misdn_bchannel *bc)
+
+
+
+void import_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
+{
+	char *tmp;
+	tmp=pbx_builtin_getvar_helper(chan,"MISDN_PID");
+	if (tmp) {
+		ch->other_pid=atoi(tmp);
+		chan_misdn_log(1,bc->port,"IMPORT_PID: importing pid:%s\n",tmp);
+		if (ch->other_pid >0) {
+			ch->other_ch=find_chan_by_pid(cl_te,ch->other_pid);
+			if (ch->other_ch) ch->other_ch->other_ch=ch;
+		}
+	}
+}
+
+void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
 {
 	char tmp[32];
-	
-	sprintf(tmp,"%d",bc->mode);
-	pbx_builtin_setvar_helper(chan,"_PRI_MODE",tmp);
-
-	sprintf(tmp,"%d",bc->urate);
-	pbx_builtin_setvar_helper(chan,"_PRI_URATE",tmp);
-
-	sprintf(tmp,"%d",bc->rate);
-	pbx_builtin_setvar_helper(chan,"_PRI_RATE",tmp);
-	
-	sprintf(tmp,"%d",bc->user1);
-	pbx_builtin_setvar_helper(chan,"_PRI_USER1",tmp);
-	
-	sprintf(tmp,"%d",bc->progress_indicator);
-	pbx_builtin_setvar_helper(chan,"_PRI_PROGRESS_INDICATOR",tmp);
-}
-
+	chan_misdn_log(1,bc->port,"EXPORT_PID: pid:%d\n",bc->pid);
+	sprintf(tmp,"%d",bc->pid);
+	pbx_builtin_setvar_helper(chan,"_MISDN_PID",tmp);
+}
 
 int add_in_calls(int port)
 {
@@ -3145,9 +3159,12 @@
 	
 	if (ch ) {
 		switch (event) {
+		case EVENT_DISCONNECT:
 		case EVENT_RELEASE:
 		case EVENT_RELEASE_COMPLETE:
 		case EVENT_CLEANUP:
+		case EVENT_TIMEOUT:
+			chan_misdn_log(3,bc->port,"ast_hangup already called, so we have no ast ptr anymore in event(%s)\n",manager_isdn_get_info(event));
 			break;
 		default:
 			if ( !ch->ast  || !MISDN_ASTERISK_PVT(ch->ast) || !MISDN_ASTERISK_TECH_PVT(ch->ast)) {
@@ -3357,8 +3374,8 @@
 
 		read_config(ch, ORG_MISDN);
 		
-		export_ies(chan, bc);
-		
+		export_ch(chan, bc, ch);
+
 		ch->ast->rings=1;
 		ast_setstate(ch->ast, AST_STATE_RINGING);
 
@@ -3483,10 +3500,18 @@
 			}
 		} else {
 
-
 			if (bc->sending_complete) {
+				ch->state=MISDN_EXTCANTMATCH;
 				bc->out_cause=1;
-				misdn_lib_send_event(bc, EVENT_RELEASE);
+
+				if (bc->nt)  {
+					chan_misdn_log(0,bc->port," --> sending_complete so we never match ..\n");
+					misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
+				} else {
+					chan_misdn_log(0,bc->port," --> sending_complete so we never match ..\n");
+					misdn_lib_send_event(bc, EVENT_RELEASE);
+				}
+
 			} else {
 				
 				int ret= misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
@@ -3633,12 +3658,12 @@
 	}
 	break;
 	case EVENT_DISCONNECT:
+	/*we might not have an ch->ast ptr here anymore*/
 	{
-		
 		struct chan_list *holded_ch=find_holded(cl_te, bc);
 		
-		
-		send_cause2ast(ch->ast,bc);
+		if (ch->ast)	
+			send_cause2ast(ch->ast,bc);
 
 
 		chan_misdn_log(3,bc->port," --> org:%d nt:%d, inbandavail:%d state:%d\n", ch->orginator, bc->nt, misdn_inband_avail(bc), ch->state);
@@ -3655,7 +3680,7 @@
 		}
 		
 		/*Check for holded channel, to implement transfer*/
-		if (holded_ch ) {
+		if (holded_ch && ch->ast ) {
 			if  (ch->state == MISDN_CONNECTED ) {
 				misdn_transfer_bc(ch, holded_ch) ;
 				misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
@@ -3722,10 +3747,18 @@
 		chan_misdn_log(9,bc->port,"TONE_GEN: len:%d\n");
 
 		if (!ast->generator) break;
-		
+	
+		
+	
 		tmp = ast->generatordata;
 		ast->generatordata = NULL;
 		generate = ast->generator->generate;
+
+		if (tone_len <0 || tone_len > 512 ) {
+			ast_log(LOG_WARNING, "TONE_GEN: len was %d, set to 128\n",tone_len);
+			tone_len=128;
+		}
+
 		res = generate(ast, tmp, tone_len, tone_len);
 		ast->generatordata = tmp;
 		
@@ -3788,18 +3821,28 @@
 	}
 	break;
 	case EVENT_TIMEOUT:
-
-		misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
-		break;
 		{
-			switch (ch->state) {
+		switch (ch->state) {
+			case MISDN_WAITING4DIGS:
 			case MISDN_CALLING:
-
-				chan_misdn_log(-1, bc?bc->port:0, "GOT TIMOUT AT CALING pid:%d\n", bc?bc->pid:-1);
-					break;
 			case MISDN_DIALING:
 			case MISDN_PROGRESS:
-				break;
+			case MISDN_ALERTING:
+			case MISDN_PROCEEDING:
+			case MISDN_CALLING_ACKNOWLEDGE:
+				if (bc->nt) {
+					bc->progress_indicator=8;
+					tone_indicate(ch, TONE_BUSY);
+				}
+				
+				bc->out_cause=1;
+				misdn_lib_send_event(bc,EVENT_DISCONNECT);
+			break;
+
+			case MISDN_CLEANING: 
+				chan_misdn_log(1,bc->port," --> in state cleaning .. so ingoring, the stack should clean it for us\n");
+			break;
+
 			default:
 				misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
 			}
@@ -3883,7 +3926,7 @@
 			

[... 9221 lines stripped ...]


More information about the asterisk-commits mailing list