[asterisk-commits] file: branch file/bridging r92303 - in /team/file/bridging: ./ apps/ build_to...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Dec 11 09:49:55 CST 2007


Author: file
Date: Tue Dec 11 09:49:54 2007
New Revision: 92303

URL: http://svn.digium.com/view/asterisk?view=rev&rev=92303
Log:
Merged revisions 92082-92084,92103-92104,92122,92140,92159-92160,92199,92201,92203,92205-92206,92243,92267,92285 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r92082 | rizzo | 2007-12-09 23:50:38 -0400 (Sun, 09 Dec 2007) | 23 lines

Put into Makefile.moddir_rules the common instructions used to
generate loadable and embedded module lists.

Individual Makefiles now are a lot simpler, possibly as simple as this:

    -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
    MODULE_PREFIX=cdr_
    all: _all
    include $(ASTTOPDIR)/Makefile.moddir_rules

and also more flexible because in a single directory we can combine
various types of modules (app_, cdr_, func_, ... ) by simply
listing them in the MODULE_PREFIX variable.

The individual Makefiles can also create list of modules to be
excluded by listing them in the variablel MODULE_EXCLUDE (see an
example in channels/Makefile).

With this change it becomes trivial to integrate a directory with
locally created/modified sources into the main build.



................
r92083 | rizzo | 2007-12-10 00:18:07 -0400 (Mon, 10 Dec 2007) | 7 lines

Fix the detection of modules installed from this build.

You can now add the path of local module subdirs from the command line with
   make LOCAL_MOD_SUBDIRS= ....



................
r92084 | rizzo | 2007-12-10 00:38:49 -0400 (Mon, 10 Dec 2007) | 3 lines

add a bit of info on the build infrastructure


................
r92103 | rizzo | 2007-12-10 04:35:35 -0400 (Mon, 10 Dec 2007) | 2 lines

simplify this file

................
r92104 | rizzo | 2007-12-10 04:40:59 -0400 (Mon, 10 Dec 2007) | 12 lines

remove relative paths and use ASTTOPDIR instead.

Give a default value to ASTTOPDIR if unset so we can at least
do a 'make clean' without too much trouble.

The proper fix, however, is to partition the top level
Makefile in a 'setup' and a 'main' part, in a way that the
'setup' part can be included from subdirs' Makefiles and
allow targets to be built without going through the
top level Makefile.


................
r92122 | rizzo | 2007-12-10 05:00:44 -0400 (Mon, 10 Dec 2007) | 2 lines

simplify/cleanup the scripts

................
r92140 | oej | 2007-12-10 09:29:57 -0400 (Mon, 10 Dec 2007) | 8 lines

Add a few extra headers in the voicemail users listing in
manager 1.1. Update documentation too.

(closes issue #11495)
Reported by: caio1982
Patches: 
      extra_vm_manager_info1.diff uploaded by caio1982 (license 22)

................
r92159 | oej | 2007-12-10 10:10:24 -0400 (Mon, 10 Dec 2007) | 24 lines

Merged revisions 92158 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r92158 | oej | 2007-12-10 15:04:44 +0100 (MÃ¥n, 10 Dec 2007) | 16 lines

Avoid reinvite race situations with two Asterisks trying
to reinvite each other in 1.4 and trunk. 

This patch implements support for the 491 error code that
Asterisk 1.4 generates on situations where we get an 
incoming INVITE and already has one in progress.

Thanks to mavetju for reporting and to Raj Jain for an
excellent explanation of the problem.

Patch by myself. Tested with 8 Asterisk servers connected
to each other in a training network.

Closes issue #10481


........

................
r92160 | oej | 2007-12-10 10:18:21 -0400 (Mon, 10 Dec 2007) | 2 lines

Removing some LOG_DEBUG items

................
r92199 | file | 2007-12-10 12:07:33 -0400 (Mon, 10 Dec 2007) | 4 lines

Only send a SIGHUP if the pid is greater than -1, otherwise all PIDs greater than -1 will get the SIGHUP... and that is bad.
(closes issue #11453)
Reported by: alanmcmillan

................
r92201 | file | 2007-12-10 12:15:06 -0400 (Mon, 10 Dec 2007) | 11 lines

Blocked revisions 92200 via svnmerge

........
r92200 | file | 2007-12-10 12:13:43 -0400 (Mon, 10 Dec 2007) | 4 lines

It is possible for nativeformats to contain more then one codec, so print out multiple ones.
(closes issue #11366)
Reported by: ovi

........

................
r92203 | mmichelson | 2007-12-10 12:30:46 -0400 (Mon, 10 Dec 2007) | 15 lines

Merged revisions 92202 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r92202 | mmichelson | 2007-12-10 10:29:44 -0600 (Mon, 10 Dec 2007) | 7 lines

If there are no members in a queue, then the loop where the datastore for detecting
duplicate dialed numbers will be skipped, meaning the datastore isn't created. This means
that when we try to free it, there's a crash. This stops that crash from occurring.

(closes issue #11499, reported by slavon, patched by eliel)


........

................
r92205 | file | 2007-12-10 12:37:35 -0400 (Mon, 10 Dec 2007) | 14 lines

Merged revisions 92204 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r92204 | file | 2007-12-10 12:36:15 -0400 (Mon, 10 Dec 2007) | 6 lines

Add G729A as another possible payload name for G729. Some devices use this instead of G729, which is perfectly normal since the payload number itself is defined and can't be used by anything else so the name doesn't matter that much.
(closes issue #11483)
Reported by: revolution
Patches:
      rtp.diff uploaded by revolution (license 346)

........

................
r92206 | file | 2007-12-10 12:48:18 -0400 (Mon, 10 Dec 2007) | 4 lines

Add ast_atomic_fetchadd_int_slow to check_expr for platforms that need it.
(closes issue #11484)
Reported by: snuffy

................
r92243 | dbailey | 2007-12-10 16:18:25 -0400 (Mon, 10 Dec 2007) | 2 lines

Add CLI commands to dynamically set hw and sw gains

................
r92267 | oej | 2007-12-11 05:26:25 -0400 (Tue, 11 Dec 2007) | 2 lines

Doxygen updates

................
r92285 | oej | 2007-12-11 10:17:29 -0400 (Tue, 11 Dec 2007) | 2 lines

A lot of doxygen updates

................

Modified:
    team/file/bridging/   (props changed)
    team/file/bridging/Makefile
    team/file/bridging/Makefile.moddir_rules
    team/file/bridging/apps/Makefile
    team/file/bridging/apps/app_queue.c
    team/file/bridging/apps/app_voicemail.c
    team/file/bridging/build_tools/make_version
    team/file/bridging/build_tools/make_version_h
    team/file/bridging/cdr/Makefile
    team/file/bridging/channels/Makefile
    team/file/bridging/channels/chan_sip.c
    team/file/bridging/channels/chan_zap.c
    team/file/bridging/codecs/Makefile
    team/file/bridging/doc/CODING-GUIDELINES
    team/file/bridging/doc/manager_1_1.txt
    team/file/bridging/formats/Makefile
    team/file/bridging/funcs/Makefile
    team/file/bridging/include/asterisk/_private.h
    team/file/bridging/include/asterisk/adsi.h
    team/file/bridging/include/asterisk/ael_structs.h
    team/file/bridging/include/asterisk/aes.h
    team/file/bridging/include/asterisk/agi.h
    team/file/bridging/include/asterisk/alaw.h
    team/file/bridging/include/asterisk/app.h
    team/file/bridging/include/asterisk/ast_expr.h
    team/file/bridging/include/asterisk/astdb.h
    team/file/bridging/include/asterisk/astobj2.h
    team/file/bridging/include/asterisk/callerid.h
    team/file/bridging/include/asterisk/causes.h
    team/file/bridging/include/asterisk/cdr.h
    team/file/bridging/include/asterisk/devicestate.h
    team/file/bridging/include/asterisk/doxyref.h
    team/file/bridging/include/asterisk/dsp.h
    team/file/bridging/include/asterisk/event.h
    team/file/bridging/include/asterisk/extconf.h
    team/file/bridging/include/asterisk/frame.h
    team/file/bridging/include/asterisk/hashtab.h
    team/file/bridging/include/asterisk/io.h
    team/file/bridging/include/asterisk/localtime.h
    team/file/bridging/include/asterisk/logger.h
    team/file/bridging/include/asterisk/mod_format.h
    team/file/bridging/main/rtp.c
    team/file/bridging/pbx/Makefile
    team/file/bridging/res/Makefile
    team/file/bridging/res/res_agi.c
    team/file/bridging/utils/Makefile
    team/file/bridging/utils/check_expr.c
    team/file/bridging/utils/clicompat.c

Propchange: team/file/bridging/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/file/bridging/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/file/bridging/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/file/bridging/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Dec 11 09:49:54 2007
@@ -1,1 +1,1 @@
-/trunk:1-92063
+/trunk:1-92302

Modified: team/file/bridging/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/Makefile (original)
+++ team/file/bridging/Makefile Tue Dec 11 09:49:54 2007
@@ -24,6 +24,9 @@
 # environment when running make, as follows:
 #
 # $ ASTCFLAGS="-Werror" make
+
+# You can add the path of local module subdirs from the command line with
+#   make LOCAL_MOD_SUBDIRS= ....
 
 export ASTTOPDIR		# Top level dir, used in subdirs' Makefiles
 export ASTERISKVERSION
@@ -266,7 +269,7 @@
 #	#ifdef BUSYDETECT in main/dsp.c
 ASTCFLAGS+=$(MALLOC_DEBUG)$(BUSYDETECT)$(OPTIONS)
 
-MOD_SUBDIRS:=channels pbx apps codecs formats cdr bridges funcs main res
+MOD_SUBDIRS:=channels pbx apps codecs formats cdr bridges funcs main res $(LOCAL_MOD_SUBDIRS)
 OTHER_SUBDIRS:=utils agi
 SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
 SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
@@ -506,7 +509,7 @@
 $(SUBDIRS_INSTALL):
 	@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(MAKE) --quiet $(PRINT_DIR) -C $(@:-install=) install
 
-NEWMODS=$(notdir $(wildcard */*.so))
+NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
 
 oldmodcheck:

Modified: team/file/bridging/Makefile.moddir_rules
URL: http://svn.digium.com/view/asterisk/team/file/bridging/Makefile.moddir_rules?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/Makefile.moddir_rules (original)
+++ team/file/bridging/Makefile.moddir_rules Tue Dec 11 09:49:54 2007
@@ -33,6 +33,41 @@
 endif
 
 include $(ASTTOPDIR)/Makefile.rules
+
+# If MODULE_PREFIX is defined, use it to run the standard functions to set
+# C_MODS, CC_MODS, LOADABLE_MODS and EMBEDDED_MODS.
+# Each word of MODULE_PREFIX is a prefix for filenames that we consider
+# valid C or CC modules (eg. app_, func_ ...).
+# Use MODULE_EXCLUDE to specify additional modules to exclude.
+
+ifneq ($(MODULE_PREFIX),)
+    # Compute the lowercase and uppercase directory name. The former
+    # is used as a key in MENUSELECT_EMBED, the latter is part of
+    # the name of the MENUSELECT_* variable containing the exclude list
+    # generated by menuselect.
+    A:=$(notdir $(CURDIR))
+    B:=$(shell echo $A | tr "[a-z]" "[A-Z]")
+    # MENUSELECT_$(L) contains the list of modules excluded by menuselect.
+    # MODULE_EXCLUDE contains the locally generated exclude list
+    L:=$(MENUSELECT_$(B)) $(MODULE_EXCLUDE)
+    # construct the list of C and CC modules from the content of the directory
+    C_MODS:=
+    CC_MODS:=
+    C_MODS+=$(foreach pre,$(MODULE_PREFIX),$(filter-out $(L),$(patsubst %.c,%,$(wildcard $(pre)*.c))))
+    CC_MODS+=$(foreach pre,$(MODULE_PREFIX),$(filter-out $(L),$(patsubst %.cc,%,$(wildcard $(pre)*.cc))))
+
+    # and store in the list of embedded or loadable modules
+    ifneq ($(findstring $(A),$(MENUSELECT_EMBED)),)
+	EMBEDDED_MODS:=$(C_MODS) $(CC_MODS)
+    else
+	LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
+    endif
+endif
+# debugging
+# x:=$(shell echo 'in $(B)' >&2)
+# x:=$(shell echo 'filtered out $(L)' >&2)
+# x:=$(shell echo 'C_MODS= $(C_MODS)' >&2)
+# x:=$(shell sleep 2)
 
 # Both C++ and C++ sources need their module name in AST_MODULE
 # We also pass whatever _INCLUDE list is generated by menuselect

Modified: team/file/bridging/apps/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/apps/Makefile (original)
+++ team/file/bridging/apps/Makefile Tue Dec 11 09:49:54 2007
@@ -11,16 +11,10 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.c,%,$(wildcard app_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.cc,%,$(wildcard app_*.cc)))
+#interesting files in this directory start with app_
+MODULE_PREFIX=app_
 
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring apps,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
-endif
-
+# create extra MENUSELECT_DEPENDS entries.
 MENUSELECT_OPTS_app_directory:=$(MENUSELECT_OPTS_app_voicemail)
 ifneq ($(findstring ODBC_STORAGE,$(MENUSELECT_OPTS_app_voicemail)),)
   MENUSELECT_DEPENDS_app_voicemail+=$(MENUSELECT_DEPENDS_ODBC_STORAGE)

Modified: team/file/bridging/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_queue.c?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/apps/app_queue.c (original)
+++ team/file/bridging/apps/app_queue.c Tue Dec 11 09:49:54 2007
@@ -2912,8 +2912,10 @@
 	if (use_weight)
 		ao2_unlock(queues);
 	lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies, ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT), forwardsallowed);
-	ast_channel_datastore_remove(qe->chan, datastore);
-	ast_channel_datastore_free(datastore);
+	if (datastore) {
+		ast_channel_datastore_remove(qe->chan, datastore);
+		ast_channel_datastore_free(datastore);
+	}
 	ao2_lock(qe->parent);
 	if (qe->parent->strategy == QUEUE_STRATEGY_RRMEMORY) {
 		store_next_rr(qe, outgoing);

Modified: team/file/bridging/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_voicemail.c?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/apps/app_voicemail.c (original)
+++ team/file/bridging/apps/app_voicemail.c Tue Dec 11 09:49:54 2007
@@ -7960,8 +7960,14 @@
 			      "UniqueID: %s\r\n"
 			      "ExitContext: %s\r\n"
 			      "SayDurationMinimum: %d\r\n"
+			      "SayEnvelope: %s\r\n"
+			      "SayCID: %s\r\n"
+			      "AttachMessage: %s\r\n"
 			      "AttachmentFormat: %s\r\n"
+			      "DeleteMessage: %s\r\n"
 			      "VolumeGain: %.2f\r\n"
+			      "CanReview: %s\r\n"
+			      "CallOperator: %s\r\n"
 			      "MaxMessageCount: %d\r\n"
 			      "MaxMessageLength: %d\r\n"
 			      "NewMessageCount: %d\r\n"
@@ -7970,11 +7976,31 @@
 			      "IMAPUser: %s\r\n"
 #endif
 			      "\r\n",
-			      actionid, vmu->context, vmu->mailbox, vmu->fullname, vmu->email,
-			      vmu->pager, vmu->serveremail, vmu->mailcmd, vmu->language,
-			      vmu->zonetag, vmu->callback, vmu->dialout, vmu->uniqueid,
-			      vmu->exit, vmu->saydurationm, vmu->attachfmt, vmu->volgain,
-			      vmu->maxmsg, vmu->maxsecs, 
+			      actionid,
+			      vmu->context,
+			      vmu->mailbox,
+			      vmu->fullname,
+			      vmu->email,
+			      vmu->pager,
+			      vmu->serveremail,
+			      vmu->mailcmd,
+			      vmu->language,
+			      vmu->zonetag,
+			      vmu->callback,
+			      vmu->dialout,
+			      vmu->uniqueid,
+			      vmu->exit,
+			      vmu->saydurationm,
+			      ast_test_flag(vmu, VM_ENVELOPE) ? "Yes" : "No",
+			      ast_test_flag(vmu, VM_SAYCID) ? "Yes" : "No",
+			      ast_test_flag(vmu, VM_ATTACH) ? "Yes" : "No",
+			      vmu->attachfmt,
+			      ast_test_flag(vmu, VM_DELETE) ? "Yes" : "No",
+			      vmu->volgain,
+			      ast_test_flag(vmu, VM_REVIEW) ? "Yes" : "No",
+			      ast_test_flag(vmu, VM_OPERATOR) ? "Yes" : "No",
+			      vmu->maxmsg,
+			      vmu->maxsecs,
 #ifdef IMAP_STORAGE
 				  new, old, vmu->imapuser
 #else

Modified: team/file/bridging/build_tools/make_version
URL: http://svn.digium.com/view/asterisk/team/file/bridging/build_tools/make_version?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/build_tools/make_version (original)
+++ team/file/bridging/build_tools/make_version Tue Dec 11 09:49:54 2007
@@ -7,71 +7,60 @@
     BRANCH=0
     TEAM=0
     TAG=0
-    
+
     REV=`svnversion -c ${1} | cut -d: -f2`
 
     BASE=`LANG=C svn pg svnmerge-integrated ${1} | cut -d: -f1`
-    
-    if [ "${PARTS}" = "trunk" ]
-	then
+
+    if [ "${PARTS}" = "trunk" ] ; then
 	echo SVN-trunk-r${REV}
 	exit 0
     fi
-    
-    for PART in $PARTS
-      do
-      if [ ${TAG} != 0 ]
-	  then
+
+    for PART in $PARTS ; do
+      if [ ${TAG} != 0 ] ; then
 	  RESULT="${PART}"
 	  break
       fi
-      
-      if [ ${BRANCH} != 0 ]
-	  then
-	  if [ -z ${RESULT} ]
-	    then
+
+      if [ ${BRANCH} != 0 ] ; then
+	  if [ -z ${RESULT} ] ; then
 	    RESULT="${PART}"
 	  else
 	    RESULT="${RESULT}-${PART}"
 	  fi
 	  break
       fi
-      
-      if [ ${TEAM} != 0 ]
-	  then
-	  if [ -z ${RESULT} ]
-	    then
+
+      if [ ${TEAM} != 0 ] ; then
+	  if [ -z ${RESULT} ] ; then
 	    RESULT="${PART}"
 	  else
 	    RESULT="${RESULT}-${PART}"
 	  fi
 	  continue
       fi
-      
-      if [ "${PART}" = "branches" ]
-	  then
+
+      if [ "${PART}" = "branches" ] ; then
 	  BRANCH=1
 	  RESULT="branch"
 	  continue
       fi
-      
-      if [ "${PART}" = "tags" ]
-	  then
+
+      if [ "${PART}" = "tags" ] ; then
 	  TAG=1
 	  continue
       fi
-      
-      if [ "${PART}" = "team" ]
-	  then
+
+      if [ "${PART}" = "team" ] ; then
 	  TEAM=1
 	  continue
       fi
     done
-    
-    if [ ${TAG} != 0 ]
-	then
+
+    if [ ${TAG} != 0 ] ; then
 	echo ${RESULT}
-	else
+    else
 	echo SVN-${RESULT}-r${REV}${BASE:+-${BASE}}
     fi
 fi

Modified: team/file/bridging/build_tools/make_version_h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/build_tools/make_version_h?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/build_tools/make_version_h (original)
+++ team/file/bridging/build_tools/make_version_h Tue Dec 11 09:49:54 2007
@@ -1,25 +1,17 @@
 #!/bin/sh
 if [ ! -f ../.flavor ]; then
-    cat << END
+    EXTRA=""
+else
+    aadkver=`cat ../.version`
+    aadkflavor=`cat ../.flavor`
+    EXTRA=" (${aadkflavor} ${aadkver})"
+fi
+cat << END
 /*
  * version.h 
  * Automatically generated
  */
-#define ASTERISK_VERSION "${ASTERISKVERSION}"
+#define ASTERISK_VERSION "${ASTERISKVERSION}${EXTRA}"
 #define ASTERISK_VERSION_NUM ${ASTERISKVERSIONNUM}
 
 END
-else
-    aadkver=`cat ../.version`
-    aadkflavor=`cat ../.flavor`
-    cat << END
-/*
- * version.h 
- * Automatically generated
- */
-#define ASTERISK_VERSION "${ASTERISKVERSION} (${aadkflavor} ${aadkver})"
-#define ASTERISK_VERSION_NUM ${ASTERISKVERSIONNUM}
-
-END
-fi
-

Modified: team/file/bridging/cdr/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/cdr/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/cdr/Makefile (original)
+++ team/file/bridging/cdr/Makefile Tue Dec 11 09:49:54 2007
@@ -11,15 +11,7 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_CDR),$(patsubst %.c,%,$(wildcard cdr_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_CDR),$(patsubst %.cc,%,$(wildcard cdr_*.cc)))
-
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring cdr,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
-endif
+MODULE_PREFIX=cdr_
 
 all: _all
 

Modified: team/file/bridging/channels/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/channels/Makefile (original)
+++ team/file/bridging/channels/Makefile Tue Dec 11 09:49:54 2007
@@ -11,8 +11,7 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_CHANNELS),$(patsubst %.c,%,$(wildcard chan_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_CHANNELS),$(patsubst %.cc,%,$(wildcard chan_*.cc)))
+MODULE_PREFIX=chan_
 
 ifeq ($(OSARCH),OpenBSD)
   PTLIB=-lpt_OpenBSD_x86_r
@@ -36,13 +35,13 @@
   H323LIB=-lh323_NetBSD_x86_r
 endif
 
+MODULE_EXCLUDE:=
 ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
-  C_MODS:=$(filter-out chan_oss,$(C_MODS))
-  C_MODS:=$(filter-out chan_unistim,$(C_MODS))
+  MODULE_EXCLUDE+= chan_oss chan_unistim
 endif
 
 ifeq ($(wildcard h323/libchanh323.a),)
-  CC_MODS:=$(filter-out chan_h323,$(CC_MODS))
+  MODULE_EXCLUDE += chan_h323
 endif
 
 ifndef OPENH323DIR
@@ -51,13 +50,6 @@
 
 ifndef PWLIBDIR
   PWLIBDIR=$(HOME)/pwlib
-endif
-
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring channels,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
 endif
 
 all: _all

Modified: team/file/bridging/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_sip.c?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/channels/chan_sip.c (original)
+++ team/file/bridging/channels/chan_sip.c Tue Dec 11 09:49:54 2007
@@ -1132,6 +1132,7 @@
 						*/
 	
 	int initid;				/*!< Auto-congest ID if appropriate (scheduler) */
+	int waitid;				/*!< Wait ID for scheduler after 491 or other delays */
 	int autokillid;				/*!< Auto-kill ID (scheduler) */
 	enum transfermodes allowtransfer;	/*!< REFER: restriction scheme */
 	struct sip_refer *refer;		/*!< REFER: SIP transfer data structure */
@@ -1691,7 +1692,7 @@
 	Functions for enabling debug per IP or fully, or enabling history logging for
 	a SIP dialog
 */
-static void sip_dump_history(struct sip_pvt *dialog);	/* Dump history to LOG_DEBUG at end of dialog, before destroying data */
+static void sip_dump_history(struct sip_pvt *dialog);	/* Dump history to debuglog at end of dialog, before destroying data */
 static inline int sip_debug_test_addr(const struct sockaddr_in *addr);
 static inline int sip_debug_test_pvt(struct sip_pvt *p);
 static void append_history_full(struct sip_pvt *p, const char *fmt, ...);
@@ -2464,8 +2465,7 @@
 
 	/* If there are packets still waiting for delivery, delay the destruction */
 	if (p->packets) {
-		if (option_debug > 2)
-			ast_log(LOG_DEBUG, "Re-scheduled destruction of SIP call %s\n", p->callid ? p->callid : "<unknown>");
+		ast_debug(3, "Re-scheduled destruction of SIP call %s\n", p->callid ? p->callid : "<unknown>");
 		append_history(p, "ReliableXmit", "timeout");
 		return 10000;
 	}
@@ -3690,6 +3690,8 @@
 		ast_extension_state_del(p->stateid, NULL);
 	if (p->initid > -1)
 		ast_sched_del(sched, p->initid);
+	if (p->waitid > -1)
+		ast_sched_del(sched, p->waitid);
 	if (p->autokillid > -1)
 		ast_sched_del(sched, p->autokillid);
 
@@ -4070,8 +4072,7 @@
 		return 0;
 	}
 	if (ast_test_flag(ast, AST_FLAG_ANSWERED_ELSEWHERE)) {
-		if (option_debug)
-			ast_log(LOG_DEBUG, "This call was answered elsewhere");
+		ast_debug(1, "This call was answered elsewhere");
 		append_history(p, "Cancel", "Call answered elsewhere");
 		p->answered_elsewhere = TRUE;
 	}
@@ -4214,6 +4215,9 @@
 				   but we can't send one while we have "INVITE" outstanding. */
 				ast_set_flag(&p->flags[0], SIP_PENDINGBYE);	
 				ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);	
+				if (p->waitid)
+					ast_sched_del(sched, p->waitid);
+				p->waitid = -1;
 				sip_cancel_destroy(p);
 			}
 		}
@@ -5055,6 +5059,7 @@
 
 	p->method = intended_method;
 	p->initid = -1;
+	p->waitid = -1;
 	p->autokillid = -1;
 	p->subscribed = NONE;
 	p->stateid = -1;
@@ -8474,8 +8479,7 @@
 	}
 	r->regstate = auth ? REG_STATE_AUTHSENT : REG_STATE_REGSENT;
 	r->regattempts++;	/* Another attempt */
-	if (option_debug > 3)
-		ast_verbose("REGISTER attempt %d to %s@%s\n", r->regattempts, r->username, r->hostname);
+	ast_debug(4, "REGISTER attempt %d to %s@%s\n", r->regattempts, r->username, r->hostname);
 	return send_request(p, &req, XMIT_CRITICAL, p->ocseq);
 }
 
@@ -13338,7 +13342,7 @@
 		sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
 	} else if (ast_test_flag(&p->flags[0], SIP_NEEDREINVITE)) {
 		/* if we can't REINVITE, hold it for later */
-		if (p->pendinginvite || p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA) {
+		if (p->pendinginvite || p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA || p->waitid > 0) {
 			ast_debug(2, "NOT Sending pending reinvite (yet) on '%s'\n", p->callid);
 		} else {
 			ast_debug(2, "Sending pending reinvite on '%s'\n", p->callid);
@@ -13348,6 +13352,20 @@
 		}
 	}
 }
+
+/*! \brief Reset the NEEDREINVITE flag after waiting when we get 491 on a Re-invite
+	to avoid race conditions between asterisk servers.
+	Called from the scheduler.
+*/
+static int sip_reinvite_retry(const void *data) 
+{
+	struct sip_pvt *p = (struct sip_pvt *) data;
+
+	ast_set_flag(&p->flags[0], SIP_NEEDREINVITE);	
+	p->waitid = -1;
+	return 0;
+}
+
 
 /*! \brief Handle SIP response to INVITE dialogue */
 static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, struct sip_request *req, int seqno)
@@ -13639,13 +13657,20 @@
 		}
 		break;
 	case 491: /* Pending */
-		/* we really should have to wait a while, then retransmit */
-			/* We should support the retry-after at some point */
-		/* At this point, we treat this as a congestion */
 		xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
-		if (p->owner && !req->ignore)
-			ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
-		p->needdestroy = 1;
+		if (p->owner && !req->ignore) {
+			if (p->owner->_state != AST_STATE_UP) {
+				ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
+				p->needdestroy = 1;
+			} else {
+				/* This is a re-invite that failed. */
+				/* Reset the flag after a while 
+				 */
+				int wait = 3 + ast_random() % 5;
+				p->waitid = ast_sched_add(sched, wait, sip_reinvite_retry, p); 
+				ast_debug(2, "Reinvite race. Waiting %d secs before retry\n", wait);
+			}
+		}
 		break;
 
 	case 501: /* Not implemented */

Modified: team/file/bridging/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_zap.c?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/channels/chan_zap.c (original)
+++ team/file/bridging/channels/chan_zap.c Tue Dec 11 09:49:54 2007
@@ -11683,6 +11683,151 @@
 	return CLI_SUCCESS;
 }
 
+static char *zap_set_hwgain(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	int channel;
+	int gain;
+	int tx;
+	struct zt_hwgain hwgain;
+	ast_mutex_t *lock;
+	struct zt_pvt *tmp = NULL;
+
+
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "zap set hwgain";
+		e->usage = 
+			"Usage: zap set hwgain <rx|tx> <chan#> <gain>\n"
+			"	Sets the hardware gain on a a given channel, overriding the\n"
+			"   value provided at module loadtime, whether the channel is in\n"
+			"   use or not.  Changes take effect immediately.\n"
+			"   <rx|tx> which direction do you want to change (relative to our module)\n"
+			"   <chan num> is the channel number relative to the device\n"
+			"   <gain> is the gain in dB (e.g. -3.5 for -3.5dB)\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;	
+	}
+
+	lock = &iflock;
+
+	if (a->argc != 6)
+		return CLI_SHOWUSAGE;
+	
+	if (!strcasecmp("rx", a->argv[3]))
+		tx = 0; /* rx */
+	else if (!strcasecmp("tx", a->argv[3]))
+		tx = 1; /* tx */
+	else
+		return CLI_SHOWUSAGE;
+
+	channel = atoi(a->argv[4]);
+	gain = atof(a->argv[5])*10.0;
+
+	ast_mutex_lock(lock);
+	for (tmp = iflist; tmp; tmp = tmp->next) {
+
+		if (tmp->channel != channel)
+			continue;
+
+		if (tmp->subs[SUB_REAL].zfd == -1)
+			break;
+
+		hwgain.newgain = gain;
+		hwgain.tx = tx;
+		if (ioctl(tmp->subs[SUB_REAL].zfd, ZT_SET_HWGAIN, &hwgain) < 0) {
+			ast_cli(a->fd, "Unable to set the hardware gain for channel %d\n", channel);
+			ast_mutex_unlock(lock);
+			return CLI_FAILURE;
+		}
+		ast_cli(a->fd, "hardware %s gain set to %d (%.1f dB) on channel %d\n",
+			tx ? "tx" : "rx", gain, (float)gain/10.0, channel);
+		break;
+	}
+	ast_mutex_unlock(lock);
+
+	if (tmp)
+		return CLI_SUCCESS;
+
+	ast_cli(a->fd, "Unable to find given channel %d\n", channel);
+	return CLI_FAILURE;
+
+}
+
+static char *zap_set_swgain(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	int channel;
+	float gain;
+	int tx;
+	int res;
+	ast_mutex_t *lock;
+	struct zt_pvt *tmp = NULL;
+
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "zap set swgain";
+		e->usage = 
+			"Usage: zap set swgain <rx|tx> <chan#> <gain>\n"
+			"	Sets the software gain on a a given channel, overriding the\n"
+			"   value provided at module loadtime, whether the channel is in\n"
+			"   use or not.  Changes take effect immediately.\n"
+			"   <rx|tx> which direction do you want to change (relative to our module)\n"
+			"   <chan num> is the channel number relative to the device\n"
+			"   <gain> is the gain in dB (e.g. -3.5 for -3.5dB)\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;	
+	}
+
+	lock = &iflock;
+
+	if (a->argc != 6)
+		return CLI_SHOWUSAGE;
+	
+	if (!strcasecmp("rx", a->argv[3]))
+		tx = 0; /* rx */
+	else if (!strcasecmp("tx", a->argv[3]))
+		tx = 1; /* tx */
+	else
+		return CLI_SHOWUSAGE;
+
+	channel = atoi(a->argv[4]);
+	gain = atof(a->argv[5]);
+
+	ast_mutex_lock(lock);
+	for (tmp = iflist; tmp; tmp = tmp->next) {
+
+		if (tmp->channel != channel)
+			continue;
+
+		if (tmp->subs[SUB_REAL].zfd == -1)
+			break;
+
+		if (tx)
+			res = set_actual_txgain(tmp->subs[SUB_REAL].zfd, channel, gain, tmp->law);
+		else
+			res = set_actual_rxgain(tmp->subs[SUB_REAL].zfd, channel, gain, tmp->law);
+
+		if (res) {
+			ast_cli(a->fd, "Unable to set the software gain for channel %d\n", channel);
+			ast_mutex_unlock(lock);
+			return CLI_FAILURE;
+		}
+
+		ast_cli(a->fd, "software %s gain set to %.1f on channel %d\n",
+			tx ? "tx" : "rx", gain, channel);
+		break;
+	}
+	ast_mutex_unlock(lock);
+
+	if (tmp)
+		return CLI_SUCCESS;
+
+	ast_cli(a->fd, "Unable to find given channel %d\n", channel);
+	return CLI_FAILURE;
+
+}
+
 static struct ast_cli_entry zap_cli[] = {
 	AST_CLI_DEFINE(handle_zap_show_cadences, "List cadences"),
 	AST_CLI_DEFINE(zap_show_channels, "Show active zapata channels"),
@@ -11691,6 +11836,8 @@
 	AST_CLI_DEFINE(zap_restart_cmd, "Fully restart zaptel channels"),
 	AST_CLI_DEFINE(zap_show_status, "Show all Zaptel cards status"),
 	AST_CLI_DEFINE(zap_show_version, "Show the Zaptel version in use"),
+	AST_CLI_DEFINE(zap_set_hwgain, "Set hardware gains at the port driver"),
+	AST_CLI_DEFINE(zap_set_swgain, "Set software gain table values"),
 };
 
 #define TRANSFER	0

Modified: team/file/bridging/codecs/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/codecs/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/codecs/Makefile (original)
+++ team/file/bridging/codecs/Makefile Tue Dec 11 09:49:54 2007
@@ -13,15 +13,7 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_CODECS),$(patsubst %.c,%,$(wildcard codec_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_CODECS),$(patsubst %.cc,%,$(wildcard codec_*.cc)))
-
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring codecs,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
-endif
+MODULE_PREFIX=codec_
 
 LIBILBC:=ilbc/libilbc.a
 LIBLPC10:=lpc10/liblpc10.a

Modified: team/file/bridging/doc/CODING-GUIDELINES
URL: http://svn.digium.com/view/asterisk/team/file/bridging/doc/CODING-GUIDELINES?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/doc/CODING-GUIDELINES (original)
+++ team/file/bridging/doc/CODING-GUIDELINES Tue Dec 11 09:49:54 2007
@@ -628,7 +628,48 @@
 	    ==  PART TWO: BUILD ARCHITECTURE  ==
 	    ------------------------------------
 
+The asterisk build architecture relies on 'autoconf' to detect the
+system configuration, and on a locally developed tool (menuselect) to
+select build options and modules list, and on gmake to do the build.
+
+autoconf will store its findings in two files:
+
+    + include/asterisk/autoconfig.h
+	contains C macros, normally #define HAVE_FOO or HAVE_FOO_H ,
+	for all functions and headers that have been detected at build time.
+	These are meant to be used by C or C++ source files.
+
+    + makeopts
+	contains variables that can be used by Makefiles.
+	In addition to the usual CC, LD, ... variables pointing to
+	the various build tools, and prefix, includedir ... which are
+	useful for generic compiler flags, there are variables
+	for each package detected.
+	These are normally of the form FOO_INCLUDE=... FOO_LIB=...
+	FOO_DIR=... indicating, for each package, the useful libraries
+	and header files. 
+
+menuselect produces two files, both to be read by the Makefile:
+    + menuselect.makeopts
+	contains for each subdirectory a list of modules that must be
+	excluded from the build, plus some additional informatiom.
+    + menuselect.makedeps
+	contains, for each module, a list of packages it depends on.
+	For each of these packages, we can collect the relevant INCLUDE
+	and LIB files from makeopts
+
+The top level Makefile is in charge of setting up the build environment,
+creating header files with build options, and recursively invoking the
+subdir Makefiles to produce modules and the main executable.
+
+The sources are split in multiple directories, more or less divided by
+module type (apps/ channels/ funcs/ res/ ...) or by function, for the main
+binary (main/ pbx/).
+
+
 TO BE COMPLETED
+
+    
 
 
 -----------------------------------------------

Modified: team/file/bridging/doc/manager_1_1.txt
URL: http://svn.digium.com/view/asterisk/team/file/bridging/doc/manager_1_1.txt?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/doc/manager_1_1.txt (original)
+++ team/file/bridging/doc/manager_1_1.txt Tue Dec 11 09:49:54 2007
@@ -107,6 +107,10 @@
 	New header
 	- (new)		-> Items: 	Reports number of channels reported
 
+- Action VoicemailUsersList
+	Added new headers for SayEnvelope, SayCID, AttachMessage, CanReview
+        and CallOperator voicemail configuration settings.
+
 * NEW ACTIONS
 -------------
 - Action: ModuleLoad

Modified: team/file/bridging/formats/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/formats/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/formats/Makefile (original)
+++ team/file/bridging/formats/Makefile Tue Dec 11 09:49:54 2007
@@ -11,15 +11,7 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_FORMATS),$(patsubst %.c,%,$(wildcard format_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_FORMATS),$(patsubst %.cc,%,$(wildcard format_*.cc)))
-
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring formats,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
-endif
+MODULE_PREFIX=format_
 
 all: _all
 

Modified: team/file/bridging/funcs/Makefile
URL: http://svn.digium.com/view/asterisk/team/file/bridging/funcs/Makefile?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/funcs/Makefile (original)
+++ team/file/bridging/funcs/Makefile Tue Dec 11 09:49:54 2007
@@ -11,15 +11,7 @@
 
 -include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
 
-C_MODS:=$(filter-out $(MENUSELECT_FUNCS),$(patsubst %.c,%,$(wildcard func_*.c)))
-CC_MODS:=$(filter-out $(MENUSELECT_FUNCS),$(patsubst %.cc,%,$(wildcard func_*.cc)))
-
-LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
-
-ifneq ($(findstring funcs,$(MENUSELECT_EMBED)),)
-  EMBEDDED_MODS:=$(LOADABLE_MODS)
-  LOADABLE_MODS:=
-endif
+MODULE_PREFIX=func_
 
 all: _all
 

Modified: team/file/bridging/include/asterisk/_private.h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/_private.h?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/include/asterisk/_private.h (original)
+++ team/file/bridging/include/asterisk/_private.h Tue Dec 11 09:49:54 2007
@@ -3,6 +3,14 @@
  * normally not used by modules.
  * What goes here are typically *_init() routines.
  */
+
+/*! \file
+ *
+ * \brief
+ * Prototypes for public functions only of internal interest,
+ * 
+ */
+
 
 #ifndef _ASTERISK__PRIVATE_H
 #define _ASTERISK__PRIVATE_H

Modified: team/file/bridging/include/asterisk/adsi.h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/adsi.h?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/include/asterisk/adsi.h (original)
+++ team/file/bridging/include/asterisk/adsi.h Tue Dec 11 09:49:54 2007
@@ -24,6 +24,8 @@
 #define _ASTERISK_ADSI_H
 
 #include "asterisk/callerid.h"
+/*! \name ADSI parameters */
+/*@{ */
 
 /* ADSI Message types */
 #define ADSI_MSG_DISPLAY	132
@@ -117,6 +119,8 @@
 #define ADSI_DIR_FROM_LEFT (0)
 #define ADSI_DIR_FROM_RIGHT (1)
 
+/*@} */
+
 /*! Perform Asterisk ADSI initialization (for channel drivers that want 
  *    to support ADSI when the handset is first lifted) 
  * \param chan Channel to initialize for ADSI (if supported)

Modified: team/file/bridging/include/asterisk/ael_structs.h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/ael_structs.h?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/include/asterisk/ael_structs.h (original)
+++ team/file/bridging/include/asterisk/ael_structs.h Tue Dec 11 09:49:54 2007
@@ -20,6 +20,7 @@
  * \brief Structures for AEL - the Asterisk extension language
  *
  * \ref pbx_ael.c
+ * \todo document this file (ael.h)
  */
 
 #ifndef _ASTERISK_AEL_STRUCTS_H
@@ -113,8 +114,8 @@
 	struct ael_priority *plist_last;
 	struct ael_extension *next_exten;
 
-	struct ael_priority *loop_break;  /* set by latest loop for breaks */
-	struct ael_priority *loop_continue; /* set by lastest loop for continuing */
+	struct ael_priority *loop_break;  /*!< set by latest loop for breaks */
+	struct ael_priority *loop_continue; /*!< set by lastest loop for continuing */
 	struct ael_priority *return_target;
 	int return_needed;
 };

Modified: team/file/bridging/include/asterisk/aes.h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/aes.h?view=diff&rev=92303&r1=92302&r2=92303
==============================================================================
--- team/file/bridging/include/asterisk/aes.h (original)
+++ team/file/bridging/include/asterisk/aes.h Tue Dec 11 09:49:54 2007
@@ -17,7 +17,9 @@
  */
 
 /*! \file

[... 1278 lines stripped ...]



More information about the asterisk-commits mailing list