summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--UPGRADE-12.txt2
-rw-r--r--apps/app_agent_pool.c4
-rw-r--r--apps/app_confbridge.c17
-rw-r--r--apps/app_meetme.c6
-rw-r--r--contrib/ast-db-manage/config/versions/de83fac997e2_add_bundle_to_ps_endpoints.py34
-rwxr-xr-xcontrib/scripts/ast_coredumper41
-rw-r--r--main/loader.c8
-rw-r--r--res/res_pjsip_pubsub.c2
9 files changed, 84 insertions, 32 deletions
diff --git a/CHANGES b/CHANGES
index 683a164ab..39b62d05c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3218,7 +3218,7 @@ chan_agent
has also been removed, for the same reason.
* The endcall and enddtmf configuration options are removed. Use the
- dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
+ dialplan function CHANNEL(dtmf_features) to set DTMF features on the agent
channel before calling AgentLogin.
chan_bridge
diff --git a/UPGRADE-12.txt b/UPGRADE-12.txt
index 3d6c00d90..79cafa11f 100644
--- a/UPGRADE-12.txt
+++ b/UPGRADE-12.txt
@@ -94,7 +94,7 @@ AgentLogin and chan_agent:
reason as the updatecdr option.
- The endcall and enddtmf configuration options are removed. Use the
- dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
+ dialplan function CHANNEL(dtmf_features) to set DTMF features on the agent
channel before calling AgentLogin.
AgentMonitorOutgoing
diff --git a/apps/app_agent_pool.c b/apps/app_agent_pool.c
index bf12b291c..6a8c3955b 100644
--- a/apps/app_agent_pool.c
+++ b/apps/app_agent_pool.c
@@ -72,7 +72,7 @@
when a new call comes in for the agent. Login failures will continue in
the dialplan with <variable>AGENT_STATUS</variable> set.</para>
<para>Before logging in, you can setup on the real agent channel the
- CHANNEL(dtmf-features) an agent will have when talking to a caller
+ CHANNEL(dtmf_features) an agent will have when talking to a caller
and you can setup on the channel running this application the
CONNECTEDLINE() information the agent will see while waiting for a
caller.</para>
@@ -92,7 +92,7 @@
<ref type="application">PauseQueueMember</ref>
<ref type="application">UnpauseQueueMember</ref>
<ref type="function">AGENT</ref>
- <ref type="function">CHANNEL(dtmf-features)</ref>
+ <ref type="function">CHANNEL(dtmf_features)</ref>
<ref type="function">CONNECTEDLINE()</ref>
<ref type="filename">agents.conf</ref>
<ref type="filename">queues.conf</ref>
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index d218d0f2e..73dff8634 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -2386,21 +2386,12 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
user.tech_args.drop_silence = 1;
}
- if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER)) {
- char *func_jb;
- if ((func_jb = ast_module_helper("", "func_jitterbuffer", 0, 0, 0, 0))) {
- ast_free(func_jb);
- ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
- }
+ if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER) && ast_module_check("func_jitterbuffer.so")) {
+ ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
}
- if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE)) {
- char *mod_speex;
- /* Reduce background noise from each participant */
- if ((mod_speex = ast_module_helper("", "codec_speex", 0, 0, 0, 0))) {
- ast_free(mod_speex);
- ast_func_write(chan, "DENOISE(rx)", "on");
- }
+ if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE) && ast_module_check("codec_speex.so")) {
+ ast_func_write(chan, "DENOISE(rx)", "on");
}
/* if this user has a intro, play it before entering */
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 7ca9ba39f..5567fe036 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -3198,7 +3198,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
struct timeval now;
struct ast_dsp *dsp = NULL;
struct ast_app *agi_app;
- char *agifile, *mod_speex;
+ char *agifile;
const char *agifiledefault = "conf-background.agi", *tmpvar;
char meetmesecs[30] = "";
char exitcontext[AST_MAX_CONTEXT] = "";
@@ -3588,9 +3588,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
}
/* Reduce background noise from each participant */
- if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) &&
- (mod_speex = ast_module_helper("", "func_speex", 0, 0, 0, 0))) {
- ast_free(mod_speex);
+ if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) && ast_module_check("func_speex.so")) {
ast_func_write(chan, "DENOISE(rx)", "on");
}
diff --git a/contrib/ast-db-manage/config/versions/de83fac997e2_add_bundle_to_ps_endpoints.py b/contrib/ast-db-manage/config/versions/de83fac997e2_add_bundle_to_ps_endpoints.py
new file mode 100644
index 000000000..57b56886c
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/de83fac997e2_add_bundle_to_ps_endpoints.py
@@ -0,0 +1,34 @@
+"""add bundle to ps_endpoints
+
+Revision ID: de83fac997e2
+Revises: 20abce6d1e3c
+Create Date: 2017-10-24 17:10:57.242020
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'de83fac997e2'
+down_revision = '20abce6d1e3c'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+YESNO_NAME = 'yesno_values'
+YESNO_VALUES = ['yes', 'no']
+
+def upgrade():
+ ############################# Enums ##############################
+
+ # yesno_values have already been created, so use postgres enum object
+ # type to get around "already created" issue - works okay with mysql
+ yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
+
+ op.add_column('ps_endpoints', sa.Column('bundle', yesno_values))
+
+def downgrade():
+ context = op.get_context()
+
+ if context.bind.dialect.name == 'mssql':
+ op.drop_constraint('ck_ps_endpoints_bundle_yesno_values', 'ps_endpoints')
+ op.drop_column('ps_endpoints', 'bundle')
diff --git a/contrib/scripts/ast_coredumper b/contrib/scripts/ast_coredumper
index 73c79179d..9b01a4239 100755
--- a/contrib/scripts/ast_coredumper
+++ b/contrib/scripts/ast_coredumper
@@ -64,9 +64,15 @@ DESCRIPTION
from the existing coredumps.
--tarball-coredumps
- Creates a gzipped tarball of all coredumps processed.
- The tarball name will be:
- /tmp/asterisk.<timestamp>.coredumps.tar.gz
+ Creates a gzipped tarball of coredumps processed, their
+ results txt files and copies of /etc/os-release,
+ /usr/sbin/asterisk, /usr/lib(64)/libasterisk* and
+ /usr/lib(64)/asterisk as those files are needed to properly
+ examine the coredump. The file will be named
+ /tmp/asterisk.<timestamp>.coredumps.tar.gz or
+ /tmp/asterisk-<uniqueid>.coredumps.tar.gz if
+ --tarball-uniqueid was specified.
+ WARNING: This file could 1gb in size!
--delete-coredumps-after
Deletes all processed coredumps regardless of whether
@@ -388,12 +394,25 @@ for i in ${!COREDUMPS[@]} ; do
done
if $tarball_coredumps ; then
- tf=/tmp/asterisk-$df.coredumps.tar
- echo "Creating $tf.gz"
+ tf=/tmp/asterisk-$df.coredumps.tar.gz
+ echo "Creating $tf"
+ dest=/tmp/asterisk-$df
+ rm -rf $dest 2>/dev/null || :
+ libdir=usr/lib
+ [ -d /usr/lib64 ] && libdir+=64
+ mkdir -p $dest/tmp $dest/$libdir/asterisk $dest/etc $dest/usr/sbin
for i in ${!COREDUMPS[@]} ; do
- tar -uvf $tf "${COREDUMPS[@]}" 2>/dev/null
+ ln -s "${COREDUMPS[@]}" $dest/"${COREDUMPS[@]}"
+ cp "${COREDUMPS[@]}"*.txt $dest/tmp/
done
- gzip $tf
+ cp /etc/os-release $dest/etc/
+ cp -a /$libdir/libasterisk* $dest/$libdir/
+ cp -a /$libdir/asterisk/* $dest/$libdir/asterisk/
+ cp -a /usr/sbin/asterisk $dest/usr/sbin
+ rm -rf $tf
+ tar -chzf $tf --transform="s/^[.]/$df/" -C $dest .
+ rm -rf $dest
+ echo "Created $tf"
fi
if $delete_coredumps_after ; then
@@ -442,21 +461,29 @@ class DumpAsteriskCommand(gdb.Command):
pass
print("!@!@!@! thread1.txt !@!@!@!\n")
try:
+ gdb.execute("p $_siginfo", from_tty)
+ gdb.execute("info signal $_siginfo.si_signo")
gdb.execute("thread apply 1 bt full", from_tty)
except:
pass
print("!@!@!@! brief.txt !@!@!@!\n")
try:
+ gdb.execute("p $_siginfo", from_tty)
+ gdb.execute("info signal $_siginfo.si_signo")
gdb.execute("thread apply all bt", from_tty)
except:
pass
print("!@!@!@! full.txt !@!@!@!\n")
try:
+ gdb.execute("p $_siginfo", from_tty)
+ gdb.execute("info signal $_siginfo.si_signo")
gdb.execute("thread apply all bt full", from_tty)
except:
pass
print("!@!@!@! locks.txt !@!@!@!\n")
try:
+ gdb.execute("p $_siginfo", from_tty)
+ gdb.execute("info signal $_siginfo.si_signo")
gdb.execute("show_locks", from_tty)
except:
pass
diff --git a/main/loader.c b/main/loader.c
index d5500076b..8250f1ffb 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -708,8 +708,9 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
int i, which=0, l = strlen(word);
char *ret = NULL;
- if (pos != rpos)
+ if (pos != rpos) {
return NULL;
+ }
AST_DLLIST_LOCK(&module_list);
AST_DLLIST_TRAVERSE(&module_list, cur, entry) {
@@ -722,10 +723,11 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
}
AST_DLLIST_UNLOCK(&module_list);
- if (!ret) {
+ if (!ret && needsreload) {
for (i=0; !ret && reload_classes[i].name; i++) {
- if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state)
+ if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state) {
ret = ast_strdup(reload_classes[i].name);
+ }
}
}
diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c
index a1bfbb71f..62b187951 100644
--- a/res/res_pjsip_pubsub.c
+++ b/res/res_pjsip_pubsub.c
@@ -1089,7 +1089,7 @@ static void remove_subscription(struct sip_subscription_tree *obj)
static void destroy_subscription(struct ast_sip_subscription *sub)
{
ast_debug(3, "Destroying SIP subscription from '%s->%s'\n",
- sub->tree->endpoint ? ast_sorcery_object_get_id(sub->tree->endpoint) : "Unknown",
+ sub->tree && sub->tree->endpoint ? ast_sorcery_object_get_id(sub->tree->endpoint) : "Unknown",
sub->resource);
ast_free(sub->body_text);