summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--configs/samples/codecs.conf.sample9
-rwxr-xr-xconfigure211
-rw-r--r--configure.ac20
-rw-r--r--include/asterisk/channel.h54
-rw-r--r--include/asterisk/config.h1
-rw-r--r--include/asterisk/devicestate.h36
-rw-r--r--include/asterisk/logger.h8
-rw-r--r--include/asterisk/options.h13
-rw-r--r--main/Makefile2
-rw-r--r--main/asterisk.c1
-rw-r--r--main/asterisk.exports.in9
-rw-r--r--main/channel.c50
-rw-r--r--main/cli.c5
-rw-r--r--main/config.c5
-rw-r--r--main/devicestate.c23
-rw-r--r--main/named_acl.c22
-rw-r--r--main/plc.c9
-rw-r--r--main/sounds.c32
-rw-r--r--tests/test_amihooks.c3
-rw-r--r--utils/extconf.c7
21 files changed, 278 insertions, 249 deletions
diff --git a/CHANGES b/CHANGES
index 0f4ced2af..09a7659d4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -101,6 +101,13 @@ Core:
--- Functionality changes from Asterisk 15.3.0 to Asterisk 15.4.0 ------------
------------------------------------------------------------------------------
+Core
+------------------
+ * A new configuration option "genericplc_on_equal_codecs" was added to the
+ "plc" section of codecs.conf to allow generic packet loss concealment even
+ if no transcoding was originally needed. Transcoding via SLIN is forced
+ in this case.
+
res_pjproject
------------------
* Added the "cache_pools" option to pjproject.conf. Disabling the option
diff --git a/configs/samples/codecs.conf.sample b/configs/samples/codecs.conf.sample
index 8457fb5ac..8c9ce6631 100644
--- a/configs/samples/codecs.conf.sample
+++ b/configs/samples/codecs.conf.sample
@@ -64,8 +64,15 @@ experimental_rtcp_feedback => false
[plc]
; for all codecs which do not support native PLC
; this determines whether to perform generic PLC
-; there is a minor performance penalty for this
+; there is a minor performance penalty for this.
+; By default plc is applied only when the 2 codecs
+; in a channel are different.
genericplc => true
+; Apply generic plc to channels even if the 2 codecs
+; are the same. This forces transcoding via slin so
+; the performance impact should be considered.
+; Ignored if genericplc is not also enabled.
+genericplc_on_equal_codecs => false
; Generate custom formats for formats requiring attributes.
; After defining the custom format, the name used in defining
diff --git a/configure b/configure
index 5bdf6e2b7..4e07f0e1b 100755
--- a/configure
+++ b/configure
@@ -6820,8 +6820,10 @@ $as_echo "no" >&6; }
fi
-# Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
+for ac_prog in python2 python2.7
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_PYTHON+:} false; then :
@@ -6847,7 +6849,6 @@ done
done
IFS=$as_save_IFS
- test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON=":"
;;
esac
fi
@@ -6861,6 +6862,10 @@ $as_echo "no" >&6; }
fi
+ test -n "$PYTHON" && break
+done
+test -n "$PYTHON" || PYTHON=":"
+
# Extract the first word of "find", so it can be a program name with args.
set dummy find; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -25041,7 +25046,7 @@ if ${ac_cv_lib_pjsip_pjsip_dlg_create_uas_and_inc_lock+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpjsip ${pbxlibdir} $PJPROJECT_LIBS $LIBS"
+LIBS="-lpjsip ${pbxlibdir} $PJPROJECT_LIB $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -25082,7 +25087,7 @@ fi
# now check for the header.
if test "${AST_PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_FOUND}" = "yes"; then
- PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_LIB="${pbxlibdir} -lpjsip $PJPROJECT_LIBS"
+ PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_LIB="${pbxlibdir} -lpjsip $PJPROJECT_LIB"
# if --with-PJSIP_DLG_CREATE_UAS_AND_INC_LOCK=DIR has been specified, use it.
if test "x${PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_DIR}" != "x"; then
PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_INCLUDE="-I${PJSIP_DLG_CREATE_UAS_AND_INC_LOCK_DIR}/include"
@@ -25473,7 +25478,7 @@ if ${ac_cv_lib_pjsip_pjsip_endpt_set_ext_resolver+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpjsip ${pbxlibdir} $PJPROJECT_LIBS $LIBS"
+LIBS="-lpjsip ${pbxlibdir} $PJPROJECT_LIB $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -25514,7 +25519,7 @@ fi
# now check for the header.
if test "${AST_PJSIP_EXTERNAL_RESOLVER_FOUND}" = "yes"; then
- PJSIP_EXTERNAL_RESOLVER_LIB="${pbxlibdir} -lpjsip $PJPROJECT_LIBS"
+ PJSIP_EXTERNAL_RESOLVER_LIB="${pbxlibdir} -lpjsip $PJPROJECT_LIB"
# if --with-PJSIP_EXTERNAL_RESOLVER=DIR has been specified, use it.
if test "x${PJSIP_EXTERNAL_RESOLVER_DIR}" != "x"; then
PJSIP_EXTERNAL_RESOLVER_INCLUDE="-I${PJSIP_EXTERNAL_RESOLVER_DIR}/include"
@@ -26093,12 +26098,188 @@ if test -n "$PYTHONDEV_CFLAGS"; then
pkg_cv_PYTHONDEV_CFLAGS="$PYTHONDEV_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
- ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python >= 3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python >= 3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHONDEV_CFLAGS=`$PKG_CONFIG --cflags "python >= 3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PYTHONDEV_LIBS"; then
+ pkg_cv_PYTHONDEV_LIBS="$PYTHONDEV_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python >= 3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python >= 3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHONDEV_LIBS=`$PKG_CONFIG --libs "python >= 3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python >= 3" 2>&1`
+ else
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python >= 3" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PYTHONDEV_PKG_ERRORS" >&5
+
+
+ PBX_PYTHONDEV=0
+
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ PBX_PYTHONDEV=0
+
+
+else
+ PYTHONDEV_CFLAGS=$pkg_cv_PYTHONDEV_CFLAGS
+ PYTHONDEV_LIBS=$pkg_cv_PYTHONDEV_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ PBX_PYTHONDEV=1
+ PYTHONDEV_INCLUDE="$PYTHONDEV_CFLAGS"
+ PYTHONDEV_LIB="$PYTHONDEV_LIBS"
+
+$as_echo "#define HAVE_PYTHONDEV 1" >>confdefs.h
+
+
+fi
+ fi
+
+
+ if test "x${PBX_PYTHONDEV}" != "x1" -a "${USE_PYTHONDEV}" != "no"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYTHONDEV" >&5
+$as_echo_n "checking for PYTHONDEV... " >&6; }
+
+if test -n "$PYTHONDEV_CFLAGS"; then
+ pkg_cv_PYTHONDEV_CFLAGS="$PYTHONDEV_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHONDEV_CFLAGS=`$PKG_CONFIG --cflags "python3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PYTHONDEV_LIBS"; then
+ pkg_cv_PYTHONDEV_LIBS="$PYTHONDEV_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHONDEV_LIBS=`$PKG_CONFIG --libs "python3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python3" 2>&1`
+ else
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python3" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PYTHONDEV_PKG_ERRORS" >&5
+
+
+ PBX_PYTHONDEV=0
+
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ PBX_PYTHONDEV=0
+
+
+else
+ PYTHONDEV_CFLAGS=$pkg_cv_PYTHONDEV_CFLAGS
+ PYTHONDEV_LIBS=$pkg_cv_PYTHONDEV_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ PBX_PYTHONDEV=1
+ PYTHONDEV_INCLUDE="$PYTHONDEV_CFLAGS"
+ PYTHONDEV_LIB="$PYTHONDEV_LIBS"
+
+$as_echo "#define HAVE_PYTHONDEV 1" >>confdefs.h
+
+
+fi
+ fi
+
+
+ if test "x${PBX_PYTHONDEV}" != "x1" -a "${USE_PYTHONDEV}" != "no"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYTHONDEV" >&5
+$as_echo_n "checking for PYTHONDEV... " >&6; }
+
+if test -n "$PYTHONDEV_CFLAGS"; then
+ pkg_cv_PYTHONDEV_CFLAGS="$PYTHONDEV_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python-3.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python-3.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_PYTHONDEV_CFLAGS=`$PKG_CONFIG --cflags "python" 2>/dev/null`
+ pkg_cv_PYTHONDEV_CFLAGS=`$PKG_CONFIG --cflags "python-3.6" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -26110,12 +26291,12 @@ if test -n "$PYTHONDEV_LIBS"; then
pkg_cv_PYTHONDEV_LIBS="$PYTHONDEV_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
- ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python-3.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python-3.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_PYTHONDEV_LIBS=`$PKG_CONFIG --libs "python" 2>/dev/null`
+ pkg_cv_PYTHONDEV_LIBS=`$PKG_CONFIG --libs "python-3.6" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -26136,9 +26317,9 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python" 2>&1`
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python-3.6" 2>&1`
else
- PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python" 2>&1`
+ PYTHONDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python-3.6" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$PYTHONDEV_PKG_ERRORS" >&5
diff --git a/configure.ac b/configure.ac
index 787c50708..de34c4206 100644
--- a/configure.ac
+++ b/configure.ac
@@ -261,7 +261,7 @@ AC_PATH_PROG([CAT], [cat], :)
AC_PATH_PROG([CUT], [cut], :)
AC_PATH_PROG([FLEX], [flex], :)
AC_PATH_PROG([GREP], [grep], :)
-AC_PATH_PROG([PYTHON], [python], :)
+AC_PATH_PROGS([PYTHON], [python2 python2.7], :)
AC_PATH_PROG([FIND], [find], :)
AC_PATH_PROG([COMPRESS], [compress], :)
AC_PATH_PROG([BASENAME], [basename], :)
@@ -645,12 +645,12 @@ AC_SUBST(EDITLINE_LIB)
# * -luuid on Linux
# * -le2fs-uuid on OpenBSD
# * in libsystem on OS X
-AST_EXT_LIB_CHECK([LIBUUID], [uuid], [uuid_generate_random], [uuid/uuid.h], [])
+AST_EXT_LIB_CHECK([LIBUUID], [uuid], [uuid_generate_random], [uuid/uuid.h])
if test "x$LIBUUID_LIB" != "x" ; then
UUID_INCLUDE="$LIBUUID_INCLUDE"
UUID_LIB="$LIBUUID_LIB"
else
- AST_EXT_LIB_CHECK([E2FSUUID], [e2fs-uuid], [uuid_generate_random], [uuid/uuid.h], [])
+ AST_EXT_LIB_CHECK([E2FSUUID], [e2fs-uuid], [uuid_generate_random], [uuid/uuid.h])
if test "x$E2FSUUID_LIB" != "x" ; then
UUID_INCLUDE="$E2FSUUID_INCLUDE"
UUID_LIB="$E2FSUUID_LIB"
@@ -675,7 +675,7 @@ if test "${PBX_JANSSON}" != 1; then
fi
# See if clock_gettime is in librt
-AST_EXT_LIB_CHECK([RT], [rt], [clock_gettime])
+AST_EXT_LIB_CHECK([RT], [rt], [clock_gettime], [])
AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , ,
[#include <libxml/tree.h>
@@ -2193,10 +2193,10 @@ AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h])
# script bug which does not find the ldns library. The bug is fixed in
# v1.4.22 but that version is not easily detectable.
#
-AST_EXT_LIB_CHECK([UNBOUND], [unbound], [ub_ctx_delete], [unbound.h], [])
+AST_EXT_LIB_CHECK([UNBOUND], [unbound], [ub_ctx_delete], [unbound.h])
AST_C_DECLARE_CHECK([UNBOUND_CONST_PARAMS], [UNBOUND_VERSION_MAJOR], [unbound.h])
-AST_EXT_LIB_CHECK([UNIXODBC], [odbc], [SQLConnect], [sql.h], [])
+AST_EXT_LIB_CHECK([UNIXODBC], [odbc], [SQLConnect], [sql.h])
AST_EXT_LIB_CHECK([OGG], [ogg], [ogg_stream_init], [ogg/ogg.h])
@@ -2277,7 +2277,7 @@ if test "$USE_PJPROJECT" != "no" ; then
if test "$PJPROJECT_BUNDLED" = "no" ; then
AST_PKG_CONFIG_CHECK([PJPROJECT], [libpjproject])
- AST_EXT_LIB_CHECK([PJSIP_DLG_CREATE_UAS_AND_INC_LOCK], [pjsip], [pjsip_dlg_create_uas_and_inc_lock], [pjsip.h], [$PJPROJECT_LIBS], [$PJPROJECT_CFLAGS])
+ AST_EXT_LIB_CHECK([PJSIP_DLG_CREATE_UAS_AND_INC_LOCK], [pjsip], [pjsip_dlg_create_uas_and_inc_lock], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
AST_EXT_LIB_CHECK([PJ_TRANSACTION_GRP_LOCK], [pjsip], [pjsip_tsx_create_uac2], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
saved_cppflags="${CPPFLAGS}"
@@ -2290,7 +2290,7 @@ if test "$USE_PJPROJECT" != "no" ; then
AST_EXT_LIB_CHECK([PJSIP_GET_DEST_INFO], [pjsip], [pjsip_get_dest_info], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
AST_EXT_LIB_CHECK([PJ_SSL_CERT_LOAD_FROM_FILES2], [pj], [pj_ssl_cert_load_from_files2], [pjlib.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
- AST_EXT_LIB_CHECK([PJSIP_EXTERNAL_RESOLVER], [pjsip], [pjsip_endpt_set_ext_resolver], [pjsip.h], [$PJPROJECT_LIBS], [$PJPROJECT_CFLAGS])
+ AST_EXT_LIB_CHECK([PJSIP_EXTERNAL_RESOLVER], [pjsip], [pjsip_endpt_set_ext_resolver], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
saved_cppflags="${CPPFLAGS}"
saved_libs="${LIBS}"
@@ -2310,7 +2310,9 @@ fi
AC_SUBST([PYTHONDEV_LIB])
AC_SUBST([PYTHONDEV_INCLUDE])
-AST_PKG_CONFIG_CHECK([PYTHONDEV], [python])
+AST_PKG_CONFIG_CHECK([PYTHONDEV], [python >= 3])
+AST_PKG_CONFIG_CHECK([PYTHONDEV], [python3])
+AST_PKG_CONFIG_CHECK([PYTHONDEV], [python-3.6])
AST_EXT_LIB_CHECK([POPT], [popt], [poptStrerror], [popt.h])
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 8cb03800e..16f9aa8ae 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -1144,22 +1144,6 @@ enum ama_flags {
* take a channel argument.
*/
-/*!
- * \brief Create a channel data store object
- * \deprecated You should use the ast_datastore_alloc() generic function instead.
- * \version 1.6.1 deprecated
- */
-struct ast_datastore *ast_channel_datastore_alloc(const struct ast_datastore_info *info, const char *uid)
- __attribute__((deprecated));
-
-/*!
- * \brief Free a channel data store object
- * \deprecated You should use the ast_datastore_free() generic function instead.
- * \version 1.6.1 deprecated
- */
-int ast_channel_datastore_free(struct ast_datastore *datastore)
- __attribute__((deprecated));
-
/*! \brief Inherit datastores from a parent to a child. */
int ast_channel_datastore_inherit(struct ast_channel *from, struct ast_channel *to);
@@ -1710,21 +1694,6 @@ void ast_channel_softhangup_withcause_locked(struct ast_channel *chan, int cause
/*!
* \brief Compare a offset with the settings of when to hang a channel up
- * \param chan channel on which to check for hang up
- * \param offset offset in seconds from current time
- * \return 1, 0, or -1
- * \details
- * This function compares a offset from current time with the absolute time
- * out on a channel (when to hang up). If the absolute time out on a channel
- * is earlier than current time plus the offset, it returns 1, if the two
- * time values are equal, it return 0, otherwise, it return -1.
- * \sa ast_channel_cmpwhentohangup_tv()
- * \version 1.6.1 deprecated function (only had seconds precision)
- */
-int ast_channel_cmpwhentohangup(struct ast_channel *chan, time_t offset) __attribute__((deprecated));
-
-/*!
- * \brief Compare a offset with the settings of when to hang a channel up
* \param chan channel on which to check for hangup
* \param offset offset in seconds and microseconds from current time
* \return 1, 0, or -1
@@ -1740,23 +1709,6 @@ int ast_channel_cmpwhentohangup_tv(struct ast_channel *chan, struct timeval offs
* \brief Set when to hang a channel up
*
* \param chan channel on which to check for hang up
- * \param offset offset in seconds relative to the current time of when to hang up
- *
- * \details
- * This function sets the absolute time out on a channel (when to hang up).
- *
- * \pre chan is locked
- *
- * \return Nothing
- * \sa ast_channel_setwhentohangup_tv()
- * \version 1.6.1 deprecated function (only had seconds precision)
- */
-void ast_channel_setwhentohangup(struct ast_channel *chan, time_t offset) __attribute__((deprecated));
-
-/*!
- * \brief Set when to hang a channel up
- *
- * \param chan channel on which to check for hang up
* \param offset offset in seconds and useconds relative to the current time of when to hang up
*
* This function sets the absolute time out on a channel (when to hang up).
@@ -2736,12 +2688,6 @@ int ast_namedgroups_intersect(struct ast_namedgroups *a, struct ast_namedgroups
/*! \brief Print named call groups and named pickup groups */
char *ast_print_namedgroups(struct ast_str **buf, struct ast_namedgroups *groups);
-/*!
- * \brief Convert enum channelreloadreason to text string for manager event
- * \param reason The reason for reload (manager, cli, start etc)
- */
-const char *channelreloadreason2txt(enum channelreloadreason reason);
-
/*! \brief return an ast_variable list of channeltypes */
struct ast_variable *ast_channeltype_list(void);
diff --git a/include/asterisk/config.h b/include/asterisk/config.h
index c1b7dea8d..9908b905b 100644
--- a/include/asterisk/config.h
+++ b/include/asterisk/config.h
@@ -985,7 +985,6 @@ int ast_config_text_file_save2(const char *filename, const struct ast_config *cf
* \return 0 on success or -1 on failure.
*/
int ast_config_text_file_save(const char *filename, const struct ast_config *cfg, const char *generator);
-int config_text_file_save(const char *filename, const struct ast_config *cfg, const char *generator) __attribute__((deprecated));
struct ast_config *ast_config_internal_load(const char *configfile, struct ast_config *cfg, struct ast_flags flags, const char *suggested_incl_file, const char *who_asked);
/*!
diff --git a/include/asterisk/devicestate.h b/include/asterisk/devicestate.h
index 4f9aa739b..5b2f04de4 100644
--- a/include/asterisk/devicestate.h
+++ b/include/asterisk/devicestate.h
@@ -86,7 +86,6 @@ enum ast_device_state ast_state_chan2dev(enum ast_channel_state chanstate);
*
* \param devstate Current device state
*/
-const char *devstate2str(enum ast_device_state devstate) attribute_pure __attribute__((deprecated));
const char *ast_devstate2str(enum ast_device_state devstate) attribute_pure;
/*!
@@ -167,41 +166,6 @@ int ast_devstate_changed(enum ast_device_state state, enum ast_devstate_cache ca
int ast_devstate_changed_literal(enum ast_device_state state, enum ast_devstate_cache cachable, const char *device);
/*!
- * \brief Tells Asterisk the State for Device is changed.
- * (Accept change notification, add it to change queue.)
- *
- * \param fmt device name like a dial string with format parameters
- *
- * Asterisk polls the new extension states and calls the registered
- * callbacks for the changed extensions
- *
- * \retval 0 on success
- * \retval -1 on failure
- *
- * \note This is deprecated in favor of ast_devstate_changed()
- * \version 1.6.1 deprecated
- */
-int ast_device_state_changed(const char *fmt, ...)
- __attribute__((deprecated,format(printf, 1, 2)));
-
-/*!
- * \brief Tells Asterisk the State for Device is changed
- *
- * \param device device name like a dial string
- *
- * Asterisk polls the new extension states and calls the registered
- * callbacks for the changed extensions
- *
- * \retval 0 on success
- * \retval -1 on failure
- *
- * \note This is deprecated in favor of ast_devstate_changed_literal()
- * \version 1.6.1 deprecated
- */
-int ast_device_state_changed_literal(const char *device)
- __attribute__((deprecated));
-
-/*!
* \brief Add device state provider
*
* \param label to use in hint, like label:object
diff --git a/include/asterisk/logger.h b/include/asterisk/logger.h
index df039313c..56dd85985 100644
--- a/include/asterisk/logger.h
+++ b/include/asterisk/logger.h
@@ -307,14 +307,6 @@ void ast_console_toggle_loglevel(int fd, int level, int state);
unsigned int ast_debug_get_by_module(const char *module);
/*!
- * \brief Get the verbose level for a module
- * \param module the name of module
- * \return the verbose level
- * \version 11.0.0 deprecated
- */
-unsigned int ast_verbose_get_by_module(const char *module) __attribute__((deprecated));
-
-/*!
* \brief Register a new logger level
* \param name The name of the level to be registered
* \retval -1 if an error occurs
diff --git a/include/asterisk/options.h b/include/asterisk/options.h
index 78f596a88..6c4e55295 100644
--- a/include/asterisk/options.h
+++ b/include/asterisk/options.h
@@ -74,8 +74,6 @@ enum ast_option_flags {
AST_OPT_FLAG_TRANSMIT_SILENCE = (1 << 17),
/*! Suppress some warnings */
AST_OPT_FLAG_DONT_WARN = (1 << 18),
- /*! End CDRs before the 'h' extension */
- AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN = (1 << 19),
/*! Reference Debugging */
AST_OPT_FLAG_REF_DEBUG = (1 << 20),
/*! Always fork, even if verbose or debug settings are non-zero */
@@ -84,12 +82,8 @@ enum ast_option_flags {
AST_OPT_FLAG_MUTE = (1 << 22),
/*! There is a per-module debug setting */
AST_OPT_FLAG_DEBUG_MODULE = (1 << 23),
- /*! There is a per-module verbose setting */
- AST_OPT_FLAG_VERBOSE_MODULE = (1 << 24),
/*! Terminal colors should be adjusted for a light-colored background */
AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25),
- /*! Count Initiated seconds in CDR's */
- AST_OPT_FLAG_INITIATED_SECONDS = (1 << 26),
/*! Force black background */
AST_OPT_FLAG_FORCE_BLACK_BACKGROUND = (1 << 27),
/*! Hide remote console connect messages on console */
@@ -98,6 +92,8 @@ enum ast_option_flags {
AST_OPT_FLAG_LOCK_CONFIG_DIR = (1 << 29),
/*! Generic PLC */
AST_OPT_FLAG_GENERIC_PLC = (1 << 30),
+ /*! Generic PLC onm equal codecs */
+ AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS = (1 << 31),
};
/*! These are the options that set by default when Asterisk starts */
@@ -123,17 +119,16 @@ enum ast_option_flags {
#define ast_opt_reconnect ast_test_flag(&ast_options, AST_OPT_FLAG_RECONNECT)
#define ast_opt_transmit_silence ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE)
#define ast_opt_dont_warn ast_test_flag(&ast_options, AST_OPT_FLAG_DONT_WARN)
-#define ast_opt_end_cdr_before_h_exten ast_test_flag(&ast_options, AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN)
#define ast_opt_always_fork ast_test_flag(&ast_options, AST_OPT_FLAG_ALWAYS_FORK)
#define ast_opt_mute ast_test_flag(&ast_options, AST_OPT_FLAG_MUTE)
#define ast_opt_dbg_module ast_test_flag(&ast_options, AST_OPT_FLAG_DEBUG_MODULE)
-#define ast_opt_verb_module ast_test_flag(&ast_options, AST_OPT_FLAG_VERBOSE_MODULE)
#define ast_opt_light_background ast_test_flag(&ast_options, AST_OPT_FLAG_LIGHT_BACKGROUND)
#define ast_opt_force_black_background ast_test_flag(&ast_options, AST_OPT_FLAG_FORCE_BLACK_BACKGROUND)
#define ast_opt_hide_connect ast_test_flag(&ast_options, AST_OPT_FLAG_HIDE_CONSOLE_CONNECT)
#define ast_opt_lock_confdir ast_test_flag(&ast_options, AST_OPT_FLAG_LOCK_CONFIG_DIR)
#define ast_opt_generic_plc ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC)
#define ast_opt_ref_debug ast_test_flag(&ast_options, AST_OPT_FLAG_REF_DEBUG)
+#define ast_opt_generic_plc_on_equal_codecs ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS)
/*! Maximum log level defined by PJPROJECT. */
#define MAX_PJ_LOG_MAX_LEVEL 6
@@ -199,8 +194,6 @@ extern struct timeval ast_lastreloadtime;
extern pid_t ast_mainpid;
extern char record_cache_dir[AST_CACHE_DIR_LEN];
-extern char dahdi_chan_name[AST_CHANNEL_NAME];
-extern int dahdi_chan_name_len;
extern int ast_language_is_prefix;
diff --git a/main/Makefile b/main/Makefile
index cd5c08c02..fb985b9b8 100644
--- a/main/Makefile
+++ b/main/Makefile
@@ -294,7 +294,7 @@ ASTPJ_LIB:=libasteriskpj.dylib
# /lib or /usr/lib
$(ASTPJ_LIB): _ASTLDFLAGS+=-dynamiclib -install_name $(ASTLIBDIR)/$(ASTPJ_LIB) $(PJ_LDFLAGS)
$(ASTPJ_LIB): _ASTCFLAGS+=-fPIC -DAST_MODULE=\"asteriskpj\" $(PJ_CFLAGS) -DAST_NOT_MODULE
-$(ASTPJ_LIB): LIBS+=$(PJPROJECT_LIBS) $(OPENSSL_LIB) $(UUID_LIB) -lm -lpthread $(RT_LIB)
+$(ASTPJ_LIB): LIBS+=$(PJPROJECT_LIB) $(OPENSSL_LIB) $(UUID_LIB) -lm -lpthread $(RT_LIB)
$(ASTPJ_LIB): SOLINK=$(DYLINK)
# Special rules for building a shared library (not a dynamically loadable module)
diff --git a/main/asterisk.c b/main/asterisk.c
index 7a4424d22..36b1b54a1 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -599,6 +599,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
ast_cli(a->fd, " Transcode via SLIN: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSCODE_VIA_SLIN) ? "Enabled" : "Disabled");
ast_cli(a->fd, " Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled");
ast_cli(a->fd, " Generic PLC: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled");
+ ast_cli(a->fd, " Generic PLC on equal codecs: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS) ? "Enabled" : "Disabled");
ast_cli(a->fd, " Min DTMF duration:: %u\n", option_dtmfminduration);
#if !defined(LOW_MEMORY)
ast_cli(a->fd, " Cache media frames: %s\n", ast_opt_cache_media_frames ? "Enabled" : "Disabled");
diff --git a/main/asterisk.exports.in b/main/asterisk.exports.in
index f997587c9..f3549e6ca 100644
--- a/main/asterisk.exports.in
+++ b/main/asterisk.exports.in
@@ -13,9 +13,6 @@
LINKER_SYMBOL_PREFIX__ao2_*;
LINKER_SYMBOL_PREFIXoption_debug;
LINKER_SYMBOL_PREFIXoption_verbose;
- LINKER_SYMBOL_PREFIXdahdi_chan_name;
- LINKER_SYMBOL_PREFIXdahdi_chan_name_len;
- LINKER_SYMBOL_PREFIXdahdi_chan_mode;
LINKER_SYMBOL_PREFIXcallerid_*;
LINKER_SYMBOL_PREFIXcid_di;
LINKER_SYMBOL_PREFIXcid_dr;
@@ -25,13 +22,8 @@
LINKER_SYMBOL_PREFIXio_*;
LINKER_SYMBOL_PREFIXjb_*;
LINKER_SYMBOL_PREFIXaes_*;
- LINKER_SYMBOL_PREFIXconfig_*;
LINKER_SYMBOL_PREFIXtdd_*;
LINKER_SYMBOL_PREFIXterm_*;
- LINKER_SYMBOL_PREFIXchannelreloadreason2txt;
- LINKER_SYMBOL_PREFIXdevstate2str;
- LINKER_SYMBOL_PREFIX__manager_event;
- LINKER_SYMBOL_PREFIXdialed_interface_info;
LINKER_SYMBOL_PREFIXstrsep;
LINKER_SYMBOL_PREFIXsetenv;
LINKER_SYMBOL_PREFIXstasis_*;
@@ -49,6 +41,7 @@
LINKER_SYMBOL_PREFIXres_srtp;
LINKER_SYMBOL_PREFIXres_srtp_policy;
LINKER_SYMBOL_PREFIXsecure_call_info;
+ /* __progname and environ are needed by FreeBSD for bundled pjproject. */
LINKER_SYMBOL_PREFIX__progname;
LINKER_SYMBOL_PREFIXenviron;
/*
diff --git a/main/channel.c b/main/channel.c
index c7847cbd4..869b29f5e 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -520,12 +520,6 @@ void ast_channel_setwhentohangup_tv(struct ast_channel *chan, struct timeval off
return;
}
-void ast_channel_setwhentohangup(struct ast_channel *chan, time_t offset)
-{
- struct timeval when = { offset, };
- ast_channel_setwhentohangup_tv(chan, when);
-}
-
/*! \brief Compare a offset with when to hangup channel */
int ast_channel_cmpwhentohangup_tv(struct ast_channel *chan, struct timeval offset)
{
@@ -542,12 +536,6 @@ int ast_channel_cmpwhentohangup_tv(struct ast_channel *chan, struct timeval offs
return ast_tvdiff_ms(whentohangup, *ast_channel_whentohangup(chan));
}
-int ast_channel_cmpwhentohangup(struct ast_channel *chan, time_t offset)
-{
- struct timeval when = { offset, };
- return ast_channel_cmpwhentohangup_tv(chan, when);
-}
-
/*! \brief Register a new telephony channel in Asterisk */
int ast_channel_register(const struct ast_channel_tech *tech)
{
@@ -2389,16 +2377,6 @@ static void ast_dummy_channel_destructor(void *obj)
ast_channel_internal_cleanup(chan);
}
-struct ast_datastore *ast_channel_datastore_alloc(const struct ast_datastore_info *info, const char *uid)
-{
- return ast_datastore_alloc(info, uid);
-}
-
-int ast_channel_datastore_free(struct ast_datastore *datastore)
-{
- return ast_datastore_free(datastore);
-}
-
int ast_channel_datastore_inherit(struct ast_channel *from, struct ast_channel *to)
{
struct ast_datastore *datastore = NULL, *datastore2;
@@ -6485,11 +6463,15 @@ static int ast_channel_make_compatible_helper(struct ast_channel *from, struct a
* to use SLINEAR between channels, but only if there is
* no direct conversion available. If generic PLC is
* desired, then transcoding via SLINEAR is a requirement
+ * even if the formats are the same.
*/
- if (ast_format_cmp(best_dst_fmt, best_src_fmt) == AST_FORMAT_CMP_NOT_EQUAL
- && (ast_opt_generic_plc || ast_opt_transcode_via_slin)) {
+ if (ast_opt_generic_plc_on_equal_codecs
+ || (ast_format_cmp(best_dst_fmt, best_src_fmt) == AST_FORMAT_CMP_NOT_EQUAL
+ && (ast_opt_generic_plc || ast_opt_transcode_via_slin))) {
+
int use_slin = (ast_format_cache_is_slinear(best_src_fmt)
- || ast_format_cache_is_slinear(best_dst_fmt)) ? 1 : 0;
+ || ast_format_cache_is_slinear(best_dst_fmt))
+ ? 1 : ast_opt_generic_plc_on_equal_codecs;
if (use_slin || ast_translate_path_steps(best_dst_fmt, best_src_fmt) != 1) {
int best_sample_rate = (ast_format_get_sample_rate(best_src_fmt) > ast_format_get_sample_rate(best_dst_fmt)) ?
@@ -8009,24 +7991,6 @@ void ast_channel_stop_silence_generator(struct ast_channel *chan, struct ast_sil
}
-/*! \ brief Convert channel reloadreason (ENUM) to text string for manager event */
-const char *channelreloadreason2txt(enum channelreloadreason reason)
-{
- switch (reason) {
- case CHANNEL_MODULE_LOAD:
- return "LOAD (Channel module load)";
-
- case CHANNEL_MODULE_RELOAD:
- return "RELOAD (Channel module reload)";
-
- case CHANNEL_CLI_RELOAD:
- return "CLIRELOAD (Channel module reload by CLI command)";
-
- default:
- return "MANAGERRELOAD (Channel module reload by manager)";
- }
-};
-
/*
* Wrappers for various ast_say_*() functions that call the full version
* of the same functions.
diff --git a/main/cli.c b/main/cli.c
index e46d3427c..5730be17b 100644
--- a/main/cli.c
+++ b/main/cli.c
@@ -148,11 +148,6 @@ unsigned int ast_debug_get_by_module(const char *module)
return res;
}
-unsigned int ast_verbose_get_by_module(const char *module)
-{
- return 0;
-}
-
/*! \internal
* \brief Check if the user with 'uid' and 'gid' is allow to execute 'command',
* if command starts with '_' then not check permissions, just permit
diff --git a/main/config.c b/main/config.c
index 5adcb2386..f7f0d7be1 100644
--- a/main/config.c
+++ b/main/config.c
@@ -2502,11 +2502,6 @@ static void insert_leading_blank_lines(FILE *fp, struct inclfile *fi, struct ast
fi->lineno = lineno + 1; /* Advance the file lineno */
}
-int config_text_file_save(const char *configfile, const struct ast_config *cfg, const char *generator)
-{
- return ast_config_text_file_save2(configfile, cfg, generator, CONFIG_SAVE_FLAG_PRESERVE_EFFECTIVE_CONTEXT);
-}
-
int ast_config_text_file_save(const char *configfile, const struct ast_config *cfg, const char *generator)
{
return ast_config_text_file_save2(configfile, cfg, generator, CONFIG_SAVE_FLAG_PRESERVE_EFFECTIVE_CONTEXT);
diff --git a/main/devicestate.c b/main/devicestate.c
index 5df34497a..637c05b59 100644
--- a/main/devicestate.c
+++ b/main/devicestate.c
@@ -239,12 +239,6 @@ const char *ast_devstate2str(enum ast_device_state devstate)
return devstatestring[devstate][0];
}
-/* Deprecated interface (not prefixed with ast_) */
-const char *devstate2str(enum ast_device_state devstate)
-{
- return devstatestring[devstate][0];
-}
-
enum ast_device_state ast_state_chan2dev(enum ast_channel_state chanstate)
{
int i;
@@ -513,11 +507,6 @@ int ast_devstate_changed_literal(enum ast_device_state state, enum ast_devstate_
return 0;
}
-int ast_device_state_changed_literal(const char *dev)
-{
- return ast_devstate_changed_literal(AST_DEVICE_UNKNOWN, AST_DEVSTATE_CACHABLE, dev);
-}
-
int ast_devstate_changed(enum ast_device_state state, enum ast_devstate_cache cachable, const char *fmt, ...)
{
char buf[AST_MAX_EXTENSION];
@@ -530,18 +519,6 @@ int ast_devstate_changed(enum ast_device_state state, enum ast_devstate_cache ca
return ast_devstate_changed_literal(state, cachable, buf);
}
-int ast_device_state_changed(const char *fmt, ...)
-{
- char buf[AST_MAX_EXTENSION];
- va_list ap;
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
-
- return ast_devstate_changed_literal(AST_DEVICE_UNKNOWN, AST_DEVSTATE_CACHABLE, buf);
-}
-
/*! \brief Go through the dev state change queue and update changes in the dev state thread */
static void *do_devstate_changes(void *data)
{
diff --git a/main/named_acl.c b/main/named_acl.c
index 4f2069a75..c4628216f 100644
--- a/main/named_acl.c
+++ b/main/named_acl.c
@@ -475,12 +475,10 @@ static void cli_display_named_acl_list(int fd)
/* \brief ACL command show <name> */
static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- RAII_VAR(struct named_acl_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup);
+ struct named_acl_config *cfg;
int length;
- int which;
struct ao2_iterator i;
struct named_acl *named_acl;
- char *match = NULL;
switch (cmd) {
case CLI_INIT:
@@ -490,23 +488,29 @@ static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct
" Shows a list of named ACLs or lists all entries in a given named ACL.\n";
return NULL;
case CLI_GENERATE:
+ if (a->pos != 2) {
+ return NULL;
+ }
+
+ cfg = ao2_global_obj_ref(globals);
if (!cfg) {
return NULL;
}
length = strlen(a->word);
- which = 0;
i = ao2_iterator_init(cfg->named_acl_list, 0);
while ((named_acl = ao2_iterator_next(&i))) {
- if (!strncasecmp(a->word, named_acl->name, length) && ++which > a->n) {
- match = ast_strdup(named_acl->name);
- ao2_ref(named_acl, -1);
- break;
+ if (!strncasecmp(a->word, named_acl->name, length)) {
+ if (ast_cli_completion_add(ast_strdup(named_acl->name))) {
+ ao2_ref(named_acl, -1);
+ break;
+ }
}
ao2_ref(named_acl, -1);
}
ao2_iterator_destroy(&i);
- return match;
+ ao2_ref(cfg, -1);
+ return NULL;
}
if (a->argc == 2) {
diff --git a/main/plc.c b/main/plc.c
index 847ce65b0..369d285a5 100644
--- a/main/plc.c
+++ b/main/plc.c
@@ -262,10 +262,19 @@ static int reload_module(void)
for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
if (!strcasecmp(var->name, "genericplc")) {
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC);
+ } else if (!strcasecmp(var->name, "genericplc_on_equal_codecs")) {
+ ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS);
}
}
ast_config_destroy(cfg);
+ /*
+ * Force on_equal_codecs to false if generic_plc is false.
+ */
+ if (!ast_opt_generic_plc) {
+ ast_set2_flag(&ast_options, 0, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS);
+ }
+
return 0;
}
diff --git a/main/sounds.c b/main/sounds.c
index 08e29275e..745b62805 100644
--- a/main/sounds.c
+++ b/main/sounds.c
@@ -219,6 +219,11 @@ static char *handle_cli_sounds_show(struct ast_cli_entry *e, int cmd, struct ast
/*! \brief Show details about a sound available in the system */
static char *handle_cli_sound_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
+ int length;
+ struct ao2_iterator it_sounds;
+ char *filename;
+ struct ao2_container *sound_files;
+
switch (cmd) {
case CLI_INIT:
e->command = "core show sound";
@@ -227,29 +232,30 @@ static char *handle_cli_sound_show(struct ast_cli_entry *e, int cmd, struct ast_
" Shows information about the specified sound.\n";
return NULL;
case CLI_GENERATE:
- {
- int length = strlen(a->word);
- int which = 0;
- struct ao2_iterator it_sounds;
- char *match = NULL;
- char *filename;
- RAII_VAR(struct ao2_container *, sound_files, ast_media_get_media(sounds_index), ao2_cleanup);
+ if (a->pos != 3) {
+ return NULL;
+ }
+
+ sound_files = ast_media_get_media(sounds_index);
if (!sound_files) {
return NULL;
}
+ length = strlen(a->word);
it_sounds = ao2_iterator_init(sound_files, 0);
while ((filename = ao2_iterator_next(&it_sounds))) {
- if (!strncasecmp(a->word, filename, length) && ++which > a->n) {
- match = ast_strdup(filename);
- ao2_ref(filename, -1);
- break;
+ if (!strncasecmp(a->word, filename, length)) {
+ if (ast_cli_completion_add(ast_strdup(filename))) {
+ ao2_ref(filename, -1);
+ break;
+ }
}
ao2_ref(filename, -1);
}
ao2_iterator_destroy(&it_sounds);
- return match;
- }
+ ao2_ref(sound_files, -1);
+
+ return NULL;
}
if (a->argc == 4) {
diff --git a/tests/test_amihooks.c b/tests/test_amihooks.c
index 14cfbdd13..c465a3d86 100644
--- a/tests/test_amihooks.c
+++ b/tests/test_amihooks.c
@@ -90,7 +90,8 @@ AST_TEST_DEFINE(amihook_cli_send)
return wait_for_hook(test) ? AST_TEST_FAIL : AST_TEST_PASS;
}
-/* The helper function is required by struct manager_custom_hook. See __manager_event for details */
+/* The helper function is required by struct manager_custom_hook.
+ * See __ast_manager_event_multichan for details */
static int amihook_helper(int category, const char *event, char *content)
{
ast_log(LOG_NOTICE, "AMI Event: \nCategory: %d Event: %s\n%s\n", category, event, content);
diff --git a/utils/extconf.c b/utils/extconf.c
index 5b3a95be9..6826f4f99 100644
--- a/utils/extconf.c
+++ b/utils/extconf.c
@@ -1570,20 +1570,14 @@ enum ast_option_flags {
AST_OPT_FLAG_TRANSMIT_SILENCE = (1 << 17),
/*! Suppress some warnings */
AST_OPT_FLAG_DONT_WARN = (1 << 18),
- /*! End CDRs before the 'h' extension */
- AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN = (1 << 19),
/*! Always fork, even if verbose or debug settings are non-zero */
AST_OPT_FLAG_ALWAYS_FORK = (1 << 21),
/*! Disable log/verbose output to remote consoles */
AST_OPT_FLAG_MUTE = (1 << 22),
/*! There is a per-file debug setting */
AST_OPT_FLAG_DEBUG_FILE = (1 << 23),
- /*! There is a per-file verbose setting */
- AST_OPT_FLAG_VERBOSE_FILE = (1 << 24),
/*! Terminal colors should be adjusted for a light-colored background */
AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25),
- /*! Count Initiated seconds in CDR's */
- AST_OPT_FLAG_INITIATED_SECONDS = (1 << 26),
/*! Force black background */
AST_OPT_FLAG_FORCE_BLACK_BACKGROUND = (1 << 27),
};
@@ -1616,7 +1610,6 @@ struct ast_flags ast_options = { AST_DEFAULT_OPTIONS };
#define ast_opt_reconnect ast_test_flag(&ast_options, AST_OPT_FLAG_RECONNECT)
#define ast_opt_transmit_silence ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE)
#define ast_opt_dont_warn ast_test_flag(&ast_options, AST_OPT_FLAG_DONT_WARN)
-#define ast_opt_end_cdr_before_h_exten ast_test_flag(&ast_options, AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN)
#define ast_opt_always_fork ast_test_flag(&ast_options, AST_OPT_FLAG_ALWAYS_FORK)
#define ast_opt_mute ast_test_flag(&ast_options, AST_OPT_FLAG_MUTE)