Compare commits

..

2 Commits

Author SHA1 Message Date
Mike Bradeen
b7c6094e51 CI: additional python venv requirements
ASTERISK-26826

Change-Id: I9b281591e90d661fa9480a3b2b10f6ead0602b0e
2022-08-03 09:05:59 -06:00
Mike Bradeen
ee85895d88 CI: Use virtual environment for testsuite
As part of the move to Python3, the testsuite is now designed
to work with a virtual environment.

This change is to have runTestsuite use the venv method if
possible and fall back if it can't.  If the script is run from
an externally activated virtual enviroment, then use that and
don't try either method.

Change-Id: I9724c446d67a5ee9e550644e4a78739de823536e
2022-06-27 13:44:21 -06:00
26 changed files with 141 additions and 101845 deletions

View File

@@ -1 +0,0 @@
40

View File

@@ -1 +0,0 @@
16.25.1

50
CHANGES
View File

@@ -12,56 +12,6 @@
===
==============================================================================
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.24.0 to Asterisk 16.25.0 ----------
------------------------------------------------------------------------------
ami
------------------
* AMI events can now be globally disabled using
the disabledevents [general] setting.
app_queue
------------------
* Load queues and members from Realtime for
AMI actions: QueuePause, QueueStatus and QueueSummary,
Applications: PauseQueueMember and UnpauseQueueMember.
* Added a new AMI action: QueueWithdrawCaller
This AMI action makes it possible to withdraw a caller from a queue
back to the dialplan. The call will be signaled to leave the queue
whenever it can, hence, it not guaranteed that the call will leave
the queue.
Optional custom data can be passed in the request, in the WithdrawInfo
parameter. If the call successfully withdrawn the queue,
it can be retrieved using the QUEUE_WITHDRAW_INFO variable.
This can be useful for certain uses, such as dispatching the call
to a specific extension.
channel_internal_api
------------------
* CHANNEL(lastcontext) and CHANNEL(lastexten)
are now available for use in the dialplan.
res_pjsip_pubsub
------------------
* A new resource_list option, resource_display_name, indicates
whether display name of resource or the resource name being
provided for RLS entries.
If this option is enabled, the Display Name will be provided.
This option is disabled by default to remain the previous behavior.
If the 'event' set to 'presence' or 'dialog' the non-empty HINT name
will be set as the Display Name.
The 'message-summary' is not supported yet.
* The Resource List Subscriptions (RLS) is dynamic now.
The asterisk now updates current subscriptions to reflect the changes
to the list on subscription refresh. If list items are added,
removed, updated or do not exist anymore, the asterisk regenerates
the resource list.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.23.0 to Asterisk 16.24.0 ----------
------------------------------------------------------------------------------

98526
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -101,11 +101,6 @@ export TAR
export PATCH
export SED
export NM
export FIND
export BASENAME
export DIRNAME
export XMLLINT
export XMLSTARLET
# makeopts is required unless the goal is just {dist{-}}clean
ifeq ($(MAKECMDGOALS),clean)
@@ -485,7 +480,7 @@ XML_core_en_US := $(shell build_tools/make_xml_documentation --command=print_dep
# core-en_US.xml is the normal documentation created with asterisk builds.
doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
@build_tools/make_xml_documentation --command=create_xml --source-tree=. --mod-subdirs="$(DOC_MOD_SUBDIRS)" \
--with-moduleinfo --output-file=$@
--with-moduleinfo --validate --output-file=$@
# The full-en_US.xml target is only called by the wiki documentation generation process
# and does special post-processing in preparation for uploading to the wiki.
@@ -497,7 +492,7 @@ ifeq ($(PYTHON),:)
@echo "--------------------------------------------------------------------------"
else
@build_tools/make_xml_documentation --command=create_xml --source-tree=. --mod-subdirs="$(DOC_MOD_SUBDIRS)" \
--for-wiki --output-file=$@ --core-output-file=./doc/core-en_US.xml
--for-wiki --validate --output-file=$@ --core-output-file=./doc/core-en_US.xml
endif
validate-docs: doc/core-en_US.xml

View File

@@ -18,19 +18,6 @@
===
===========================================================
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.24.0 to Asterisk 16.25.0 ----------
------------------------------------------------------------------------------
AMI
------------------
* The XML Manager Event Interface (amxml) now generates attribute names
that are compliant with the XML 1.1 specification. Previously, an
attribute name that started with a digit would be rendered as-is, even
though attribute names must not begin with a digit. We now prefix
attribute names that start with a digit with an underscore ('_') to
prevent XML validation failures.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.22.0 to Asterisk 16.23.0 ----------
------------------------------------------------------------------------------

View File

@@ -290,7 +290,6 @@
<value name="JOINUNAVAIL" />
<value name="LEAVEUNAVAIL" />
<value name="CONTINUE" />
<value name="WITHDRAW" />
</variable>
<variable name="ABANDONED">
<para>If the call was not answered by an agent this variable will be TRUE.</para>
@@ -299,9 +298,6 @@
<variable name="DIALEDPEERNUMBER">
<para>Resource of the agent that was dialed set on the outbound channel.</para>
</variable>
<variable name="QUEUE_WITHDRAW_INFO">
<para>If the call was successfully withdrawn from the queue, and the withdraw request was provided with optional withdraw info, the withdraw info will be stored in this variable.</para>
</variable>
</variablelist>
</description>
<see-also>
@@ -1061,25 +1057,6 @@
<description>
</description>
</manager>
<manager name="QueueWithdrawCaller" language="en_US">
<synopsis>
Request to withdraw a caller from the queue back to the dialplan.
</synopsis>
<syntax>
<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
<parameter name="Queue" required="true">
<para>The name of the queue to take action on.</para>
</parameter>
<parameter name="Caller" required="true">
<para>The caller (channel) to withdraw from the queue.</para>
</parameter>
<parameter name="WithdrawInfo" required="false">
<para>Optional info to store. If the call is successfully withdrawn from the queue, this information will be available in the QUEUE_WITHDRAW_INFO variable.</para>
</parameter>
</syntax>
<description>
</description>
</manager>
<managerEvent language="en_US" name="QueueParams">
<managerEventInstance class="EVENT_FLAG_AGENT">
@@ -1628,7 +1605,6 @@ enum queue_result {
QUEUE_LEAVEUNAVAIL = 5,
QUEUE_FULL = 6,
QUEUE_CONTINUE = 7,
QUEUE_WITHDRAW = 8,
};
static const struct {
@@ -1643,7 +1619,6 @@ static const struct {
{ QUEUE_LEAVEUNAVAIL, "LEAVEUNAVAIL" },
{ QUEUE_FULL, "FULL" },
{ QUEUE_CONTINUE, "CONTINUE" },
{ QUEUE_WITHDRAW, "WITHDRAW" },
};
enum queue_timeout_priority {
@@ -1712,8 +1687,6 @@ struct queue_ent {
time_t start; /*!< When we started holding */
time_t expire; /*!< When this entry should expire (time out of queue) */
int cancel_answered_elsewhere; /*!< Whether we should force the CAE flag on this call (C) option*/
unsigned int withdraw:1; /*!< Should this call exit the queue at its next iteration? Used for QueueWithdrawCaller */
char *withdraw_info; /*!< Optional info passed by the caller of QueueWithdrawCaller */
struct ast_channel *chan; /*!< Our channel */
AST_LIST_HEAD_NOLOCK(,penalty_rule) qe_rules; /*!< Local copy of the queue's penalty rules */
struct penalty_rule *pr; /*!< Pointer to the next penalty rule to implement */
@@ -5832,13 +5805,6 @@ static int wait_our_turn(struct queue_ent *qe, int ringing, enum queue_result *r
/* This is the holding pen for callers 2 through maxlen */
for (;;) {
/* A request to withdraw this call from the queue arrived */
if (qe->withdraw) {
*reason = QUEUE_WITHDRAW;
res = 1;
break;
}
if (is_our_turn(qe)) {
break;
}
@@ -7659,51 +7625,6 @@ static int change_priority_caller_on_queue(const char *queuename, const char *ca
}
/*! \brief Request to withdraw a caller from a queue
* \retval RES_NOSUCHQUEUE queue does not exist
* \retval RES_OKAY withdraw request sent
* \retval RES_NOT_CALLER queue exists but no caller
* \retval RES_EXISTS a withdraw request was already sent for this caller (channel) and queue
*/
static int request_withdraw_caller_from_queue(const char *queuename, const char *caller, const char *withdraw_info)
{
struct call_queue *q;
struct queue_ent *qe;
int res = RES_NOSUCHQUEUE;
/*! \note Ensure the appropriate realtime queue is loaded. Note that this
* short-circuits if the queue is already in memory. */
if (!(q = find_load_queue_rt_friendly(queuename))) {
return res;
}
ao2_lock(q);
res = RES_NOT_CALLER;
for (qe = q->head; qe; qe = qe->next) {
if (!strcmp(ast_channel_name(qe->chan), caller)) {
if (qe->withdraw) {
ast_debug(1, "Ignoring duplicate withdraw request of caller %s from queue %s\n", caller, queuename);
res = RES_EXISTS;
} else {
ast_debug(1, "Requested withdraw of caller %s from queue %s\n", caller, queuename);
/* It is not possible to change the withdraw info by further withdraw requests for this caller (channel)
in this queue, so we do not need to worry about a memory leak here. */
if (withdraw_info) {
qe->withdraw_info = ast_strdup(withdraw_info);
}
qe->withdraw = 1;
res = RES_OKAY;
}
break;
}
}
ao2_unlock(q);
queue_unref(q);
return res;
}
static int publish_queue_member_pause(struct call_queue *q, struct member *member, const char *reason)
{
struct ast_json *json_blob = queue_member_blob_create(q, member);
@@ -8655,13 +8576,6 @@ check_turns:
/* they may dial a digit from the queue context; */
/* or, they may timeout. */
/* A request to withdraw this call from the queue arrived */
if (qe.withdraw) {
reason = QUEUE_WITHDRAW;
res = 1;
break;
}
/* Leave if we have exceeded our queuetimeout */
if (qe.expire && (time(NULL) >= qe.expire)) {
record_abandoned(&qe);
@@ -8689,13 +8603,6 @@ check_turns:
}
}
/* A request to withdraw this call from the queue arrived */
if (qe.withdraw) {
reason = QUEUE_WITHDRAW;
res = 1;
break;
}
/* Leave if we have exceeded our queuetimeout */
if (qe.expire && (time(NULL) >= qe.expire)) {
record_abandoned(&qe);
@@ -8770,14 +8677,7 @@ check_turns:
stop:
if (res) {
if (reason == QUEUE_WITHDRAW) {
record_abandoned(&qe);
ast_queue_log(qe.parent->name, ast_channel_uniqueid(qe.chan), "NONE", "WITHDRAW", "%d|%d|%ld|%.40s", qe.pos, qe.opos, (long) (time(NULL) - qe.start), qe.withdraw_info ? qe.withdraw_info : "");
if (qe.withdraw_info) {
pbx_builtin_setvar_helper(qe.chan, "QUEUE_WITHDRAW_INFO", qe.withdraw_info);
}
res = 0;
} else if (res < 0) {
if (res < 0) {
if (!qe.handled) {
record_abandoned(&qe);
ast_queue_log(args.queuename, ast_channel_uniqueid(chan), "NONE", "ABANDON",
@@ -8797,13 +8697,6 @@ stop:
}
}
/* Free the optional withdraw info if present */
/* This is done here to catch all cases. e.g. if the call eventually wasn't withdrawn, e.g. answered */
if (qe.withdraw_info) {
ast_free(qe.withdraw_info);
qe.withdraw_info = NULL;
}
/* Don't allow return code > 0 */
if (res >= 0) {
res = 0;
@@ -10845,41 +10738,6 @@ static int manager_change_priority_caller_on_queue(struct mansession *s, const s
return 0;
}
static int manager_request_withdraw_caller_from_queue(struct mansession *s, const struct message *m)
{
const char *queuename, *caller, *withdraw_info;
queuename = astman_get_header(m, "Queue");
caller = astman_get_header(m, "Caller");
withdraw_info = astman_get_header(m, "WithdrawInfo");
if (ast_strlen_zero(queuename)) {
astman_send_error(s, m, "'Queue' not specified.");
return 0;
}
if (ast_strlen_zero(caller)) {
astman_send_error(s, m, "'Caller' not specified.");
return 0;
}
switch (request_withdraw_caller_from_queue(queuename, caller, withdraw_info)) {
case RES_OKAY:
astman_send_ack(s, m, "Withdraw requested successfully");
break;
case RES_NOSUCHQUEUE:
astman_send_error(s, m, "Unable to request withdraw from queue: No such queue");
break;
case RES_NOT_CALLER:
astman_send_error(s, m, "Unable to request withdraw from queue: No such caller");
break;
case RES_EXISTS:
astman_send_error(s, m, "Unable to request withdraw from queue: Already requested");
break;
}
return 0;
}
static char *handle_queue_add_member(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
@@ -11609,7 +11467,6 @@ static int unload_module(void)
ast_manager_unregister("QueueReset");
ast_manager_unregister("QueueMemberRingInUse");
ast_manager_unregister("QueueChangePriorityCaller");
ast_manager_unregister("QueueWithdrawCaller");
ast_unregister_application(app_aqm);
ast_unregister_application(app_rqm);
ast_unregister_application(app_pqm);
@@ -11723,7 +11580,6 @@ static int load_module(void)
err |= ast_manager_register_xml("QueueReload", 0, manager_queue_reload);
err |= ast_manager_register_xml("QueueReset", 0, manager_queue_reset);
err |= ast_manager_register_xml("QueueChangePriorityCaller", 0, manager_change_priority_caller_on_queue);
err |= ast_manager_register_xml("QueueWithdrawCaller", 0, manager_request_withdraw_caller_from_queue);
err |= ast_custom_function_register(&queuevar_function);
err |= ast_custom_function_register(&queueexists_function);
err |= ast_custom_function_register(&queuemembercount_function);

View File

@@ -1,16 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Release Summary - asterisk-16.25.1</title><h1 align="center"><a name="top">Release Summary</a></h1><h3 align="center">asterisk-16.25.1</h3><h3 align="center">Date: 2022-03-29</h3><h3 align="center">&lt;asteriskteam@digium.com&gt;</h3><hr><h2 align="center">Table of Contents</h2><ol>
<li><a href="#summary">Summary</a></li>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#closed_issues">Closed Issues</a></li>
<li><a href="#diffstat">Diffstat</a></li>
</ol><hr><a name="summary"><h2 align="center">Summary</h2></a><center><a href="#top">[Back to Top]</a></center><p>This release is a point release of an existing major version. The changes included were made to address problems that have been identified in this release series, or are minor, backwards compatible new features or improvements. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous version are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p><p>The data in this summary reflects changes that have been made since the previous release, asterisk-16.25.0.</p><hr><a name="contributors"><h2 align="center">Contributors</h2></a><center><a href="#top">[Back to Top]</a></center><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were affected by commits that went into this release.</p><table width="100%" border="0">
<tr><th width="33%">Coders</th><th width="33%">Testers</th><th width="33%">Reporters</th></tr>
<tr valign="top"><td width="33%">2 George Joseph <gjoseph@digium.com><br/></td><td width="33%"><td width="33%">1 Stefan Ruijsenaars <stefanr@wave.com><br/>1 Stefan Ruijsenaars<br/>1 George Joseph <gjoseph@digium.com><br/></td></tr>
</table><hr><a name="closed_issues"><h2 align="center">Closed Issues</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p><h3>Bug</h3><h4>Category: Core/BuildSystem</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-29988">ASTERISK-29988</a>: REGRESSION: The build process is requiring xmllint or xmlstarlet ro be installed when it shouldn't<br/>Reported by: George Joseph<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=2944d6834c2b5da62f8769218c02a3898e212a3b">[2944d6834c]</a> George Joseph -- Makefile: Disable XML doc validation</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-29986">ASTERISK-29986</a>: build: Asterisk 18.11.0 doesn't compile when wget isn't available<br/>Reported by: Stefan Ruijsenaars<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=32ccd34191065fe17a25d93e86fbc6739e4e51e8">[32ccd34191]</a> George Joseph -- make_xml_documentation: Remove usage of get_sourceable_makeopts</li>
</ul><br><hr><a name="diffstat"><h2 align="center">Diffstat Results</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p><pre>b/Makefile | 9 ++++-
b/build_tools/make_xml_documentation | 14 ---------
build_tools/get_sourceable_makeopts | 54 -----------------------------------
3 files changed, 7 insertions(+), 70 deletions(-)</pre><br></html>

View File

@@ -1,91 +0,0 @@
Release Summary
asterisk-16.25.1
Date: 2022-03-29
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Closed Issues
4. Diffstat
----------------------------------------------------------------------
Summary
[Back to Top]
This release is a point release of an existing major version. The changes
included were made to address problems that have been identified in this
release series, or are minor, backwards compatible new features or
improvements. Users should be able to safely upgrade to this version if
this release series is already in use. Users considering upgrading from a
previous version are strongly encouraged to review the UPGRADE.txt
document as well as the CHANGES document for information about upgrading
to this release series.
The data in this summary reflects changes that have been made since the
previous release, asterisk-16.25.0.
----------------------------------------------------------------------
Contributors
[Back to Top]
This table lists the people who have submitted code, those that have
tested patches, as well as those that reported issues on the issue tracker
that were resolved in this release. For coders, the number is how many of
their patches (of any size) were committed into this release. For testers,
the number is the number of times their name was listed as assisting with
testing a patch. Finally, for reporters, the number is the number of
issues that they reported that were affected by commits that went into
this release.
Coders Testers Reporters
2 George Joseph 1 Stefan Ruijsenaars
1 Stefan Ruijsenaars
1 George Joseph
----------------------------------------------------------------------
Closed Issues
[Back to Top]
This is a list of all issues from the issue tracker that were closed by
changes that went into this release.
Bug
Category: Core/BuildSystem
ASTERISK-29988: REGRESSION: The build process is requiring xmllint or
xmlstarlet ro be installed when it shouldn't
Reported by: George Joseph
* [2944d6834c] George Joseph -- Makefile: Disable XML doc validation
ASTERISK-29986: build: Asterisk 18.11.0 doesn't compile when wget isn't
available
Reported by: Stefan Ruijsenaars
* [32ccd34191] George Joseph -- make_xml_documentation: Remove usage of
get_sourceable_makeopts
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
b/Makefile | 9 ++++-
b/build_tools/make_xml_documentation | 14 ---------
build_tools/get_sourceable_makeopts | 54 -----------------------------------
3 files changed, 7 insertions(+), 70 deletions(-)

View File

@@ -0,0 +1,54 @@
#!/bin/sh
PROGNAME="${0##*/}"
if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
cat <<-EOF
Usage: ${PROGNAME}: [ <input_file> ] [ <output_file> ]
This script takes an Asterisk makeopts file, or any file containing
"make" style variable assignments, and converts it into a format
that can be directly 'sourced' by shell scripts.
* Any spaces around the equals sign are removed.
* The variable value is quoted.
* The "make" "or" command is evaluated.
Both input and output files are optional and will default to
stdin and stdout respectively.
NOTE: This script relies on NO external commands and only POSIX
constructs. It should be runnable by any shell.
EOF
exit 1
fi
input_file="/dev/stdin"
if [ "$1" != "" ] ; then
input_file="$1"
fi
output_file="/dev/stdout"
if [ "$2" != "" ] ; then
output_file="$2"
fi
# orfunc is a code fragment to be added to the outp[ut file.
# We don't WANT the variables evaluated.
# shellcheck disable=SC2016
orfunc='or (){ before="${1%,*}" ; after="${1#*,}" ; if [ "$before" = "" ] ; then echo "${after}" ; else echo "${before}" ; fi ; }'
echo "${orfunc}" >"${output_file}"
while read -r LINE ; do
var="${LINE%%=*}"
if [ "${var}" != "" ] ; then
val="${LINE#*=}"
if [ "${val}" != "${var}" ] ; then
if [ "${val%% *}" = "" ] ; then
echo "${var% *}=\"${val#* }\""
else
echo "${var% *}=\"${val}\""
fi
fi
fi
done <"${input_file}" >>"${output_file}"

View File

@@ -1,7 +1,10 @@
#!/bin/sh
# The GREP, SED, FIND, etc variables are all set at run time from
# makeopts.
# shellcheck disable=SC2154
PROGNAME="${0##*/}"
PROGDIR="${0%/*}"
# Fail on errors
set -e
@@ -108,25 +111,36 @@ if [ ! -d "${source_tree}" ] ; then
exit 1
fi
if [ ! -f "${source_tree}/Makefile" ] ; then
echo "There's no 'Makefile' in '${source_tree}'."
exit 1
fi
if [ ! -f "${source_tree}/makeopts" ] ; then
echo "There's no 'makeopts' in '${source_tree}'. Maybe you need to run ./configure?"
exit 1
fi
# This script is normally run from the top-level Makefile which
# will set the tools variables to actual paths, or ':' if
# the tool isn't found. If this script is run from the
# command line for testing purposes however, we'll need to
# set some sane defaults.
if [ "${GREP}" = "" ] ; then GREP="grep" ; fi
if [ "${FIND}" = "" ] ; then FIND="find" ; fi
if [ "${AWK}" = "" ] ; then AWK="awk" ; fi
if [ "${DIRNAME}" = "" ] ; then DIRNAME="dirname" ; fi
if [ "${BASENAME}" = "" ] ; then BASENAME="basename" ; fi
if [ "${SED}" = "" ] ; then SED="sed" ; fi
if [ "${CAT}" = "" ] ; then CAT="cat" ; fi
if [ "${XMLLINT}" = "" ] ; then XMLLINT="xmllint" ; fi
if [ "${XMLSTARLET}" = "" ] ; then XMLSTARLET="xmlstarlet" ; fi
# This will get the paths to the utilities we need, all
# of which will be in makeopts. We need to convert the
# format so it's sourceable.
tmpname="/tmp/ast_makeopts.$$.env"
trap 'rm "$tmpname" >/dev/null 2>&1' INT QUIT TERM EXIT
"${PROGDIR}/get_sourceable_makeopts" "${source_tree}/makeopts" >"${tmpname}"
# The file to be sourced is generated at run time and can't be checked.
# shellcheck disable=SC1090
. "${tmpname}"
rm "${tmpname}" > /dev/null 2>&1 || :
trap - INT QUIT TERM EXIT
# Make sure we have everything we need.
for c in GREP FIND AWK DIRNAME BASENAME SED CAT ; do
bin=$(eval "echo \${${c}}")
if [ "${bin}" = "" ] ; then
echo "The '${c}' utility was not found."
exit 1
fi
done
if [ "${for_wiki}" -eq "1" ] || [ "${validate}" -eq "1" ]; then
if [ "${XMLLINT}${XMLSTARLET}" = "::" ] ; then

View File

@@ -1,41 +0,0 @@
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 210693f3123d
CREATE TABLE cdr (
accountcode VARCHAR(20),
src VARCHAR(80),
dst VARCHAR(80),
dcontext VARCHAR(80),
clid VARCHAR(80),
channel VARCHAR(80),
dstchannel VARCHAR(80),
lastapp VARCHAR(80),
lastdata VARCHAR(80),
start DATETIME,
answer DATETIME,
end DATETIME,
duration INTEGER,
billsec INTEGER,
disposition VARCHAR(45),
amaflags VARCHAR(45),
userfield VARCHAR(256),
uniqueid VARCHAR(150),
linkedid VARCHAR(150),
peeraccount VARCHAR(20),
sequence INTEGER
);
INSERT INTO alembic_version (version_num) VALUES ('210693f3123d');
-- Running upgrade 210693f3123d -> 54cde9847798
ALTER TABLE cdr MODIFY accountcode VARCHAR(80) NULL;
ALTER TABLE cdr MODIFY peeraccount VARCHAR(80) NULL;
UPDATE alembic_version SET version_num='54cde9847798' WHERE alembic_version.version_num = '210693f3123d';

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +0,0 @@
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> a2e9769475e
CREATE TABLE voicemail_messages (
dir VARCHAR(255) NOT NULL,
msgnum INTEGER NOT NULL,
context VARCHAR(80),
macrocontext VARCHAR(80),
callerid VARCHAR(80),
origtime INTEGER,
duration INTEGER,
recording BLOB,
flag VARCHAR(30),
category VARCHAR(30),
mailboxuser VARCHAR(30),
mailboxcontext VARCHAR(30),
msg_id VARCHAR(40)
);
ALTER TABLE voicemail_messages ADD CONSTRAINT voicemail_messages_dir_msgnum PRIMARY KEY (dir, msgnum);
CREATE INDEX voicemail_messages_dir ON voicemail_messages (dir);
INSERT INTO alembic_version (version_num) VALUES ('a2e9769475e');
-- Running upgrade a2e9769475e -> 39428242f7f5
ALTER TABLE voicemail_messages MODIFY recording BLOB(4294967295) NULL;
UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';

View File

@@ -1,45 +0,0 @@
BEGIN;
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 210693f3123d
CREATE TABLE cdr (
accountcode VARCHAR(20),
src VARCHAR(80),
dst VARCHAR(80),
dcontext VARCHAR(80),
clid VARCHAR(80),
channel VARCHAR(80),
dstchannel VARCHAR(80),
lastapp VARCHAR(80),
lastdata VARCHAR(80),
start TIMESTAMP WITHOUT TIME ZONE,
answer TIMESTAMP WITHOUT TIME ZONE,
"end" TIMESTAMP WITHOUT TIME ZONE,
duration INTEGER,
billsec INTEGER,
disposition VARCHAR(45),
amaflags VARCHAR(45),
userfield VARCHAR(256),
uniqueid VARCHAR(150),
linkedid VARCHAR(150),
peeraccount VARCHAR(20),
sequence INTEGER
);
INSERT INTO alembic_version (version_num) VALUES ('210693f3123d');
-- Running upgrade 210693f3123d -> 54cde9847798
ALTER TABLE cdr ALTER COLUMN accountcode TYPE VARCHAR(80);
ALTER TABLE cdr ALTER COLUMN peeraccount TYPE VARCHAR(80);
UPDATE alembic_version SET version_num='54cde9847798' WHERE alembic_version.version_num = '210693f3123d';
COMMIT;

File diff suppressed because it is too large Load Diff

View File

@@ -1,39 +0,0 @@
BEGIN;
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> a2e9769475e
CREATE TABLE voicemail_messages (
dir VARCHAR(255) NOT NULL,
msgnum INTEGER NOT NULL,
context VARCHAR(80),
macrocontext VARCHAR(80),
callerid VARCHAR(80),
origtime INTEGER,
duration INTEGER,
recording BYTEA,
flag VARCHAR(30),
category VARCHAR(30),
mailboxuser VARCHAR(30),
mailboxcontext VARCHAR(30),
msg_id VARCHAR(40)
);
ALTER TABLE voicemail_messages ADD CONSTRAINT voicemail_messages_dir_msgnum PRIMARY KEY (dir, msgnum);
CREATE INDEX voicemail_messages_dir ON voicemail_messages (dir);
INSERT INTO alembic_version (version_num) VALUES ('a2e9769475e');
-- Running upgrade a2e9769475e -> 39428242f7f5
ALTER TABLE voicemail_messages ALTER COLUMN recording TYPE BYTEA;
UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';
COMMIT;

View File

@@ -0,0 +1,4 @@
Subject: channel_internal_api
CHANNEL(lastcontext) and CHANNEL(lastexten)
are now available for use in the dialplan.

View File

@@ -0,0 +1,5 @@
Subject: app_queue
Load queues and members from Realtime for
AMI actions: QueuePause, QueueStatus and QueueSummary,
Applications: PauseQueueMember and UnpauseQueueMember.

View File

@@ -0,0 +1,4 @@
Subject: ami
AMI events can now be globally disabled using
the disabledevents [general] setting.

View File

@@ -0,0 +1,10 @@
Subject: res_pjsip_pubsub
A new resource_list option, resource_display_name, indicates
whether display name of resource or the resource name being
provided for RLS entries.
If this option is enabled, the Display Name will be provided.
This option is disabled by default to remain the previous behavior.
If the 'event' set to 'presence' or 'dialog' the non-empty HINT name
will be set as the Display Name.
The 'message-summary' is not supported yet.

View File

@@ -0,0 +1,8 @@
Subject: AMI
The XML Manager Event Interface (amxml) now generates attribute names
that are compliant with the XML 1.1 specification. Previously, an
attribute name that started with a digit would be rendered as-is, even
though attribute names must not begin with a digit. We now prefix
attribute names that start with a digit with an underscore ('_') to
prevent XML validation failures.

View File

@@ -54,7 +54,7 @@
- \ref manager.c Main manager code file
*/
#define AMI_VERSION "5.0.4"
#define AMI_VERSION "5.0.3"
#define DEFAULT_MANAGER_PORT 5038 /* Default port for Asterisk management via TCP */
#define DEFAULT_MANAGER_TLS_PORT 5039 /* Default port for Asterisk management via TCP */

View File

@@ -1234,8 +1234,8 @@ static int require_pgsql(const char *database, const char *tablename, va_list ap
AST_LIST_TRAVERSE(&table->columns, column, list) {
if (strcmp(column->name, elm) == 0) {
/* Char can hold anything, as long as it is large enough */
if ((strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0 || strcmp(column->type, "bpchar") == 0 || strncmp(column->type, "text", 4) == 0)) {
if (column->len != -1 && (size > column->len)) {
if ((strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0 || strcmp(column->type, "bpchar") == 0)) {
if ((size > column->len) && column->len != -1) {
ast_log(LOG_WARNING, "Column '%s' should be at least %d long, but is only %d long.\n", column->name, size, column->len);
res = -1;
}

View File

@@ -475,10 +475,6 @@ struct sip_subscription_tree {
* Only used for reliable transports.
*/
pjsip_transport *transport;
/*! Indicator if initial notify should be generated.
* Used to refresh modified RLS.
*/
unsigned int generate_initial_notify;
};
/*!
@@ -3906,15 +3902,6 @@ static int pubsub_on_refresh_timeout(void *userdata)
set_state_terminated(sub_tree->root);
}
if (sub_tree->generate_initial_notify) {
sub_tree->generate_initial_notify = 0;
if (generate_initial_notify(sub_tree->root)) {
pjsip_evsub_terminate(sub_tree->evsub, PJ_TRUE);
pjsip_dlg_dec_lock(dlg);
return 0;
}
}
send_notify(sub_tree, 1);
ast_test_suite_event_notify(sub_tree->root->subscription_state == PJSIP_EVSUB_STATE_TERMINATED ?
@@ -3939,52 +3926,6 @@ static int serialized_pubsub_on_refresh_timeout(void *userdata)
return 0;
}
/*!
* \brief Compare strings for equality checking for NULL.
*
* This function considers NULL values as empty strings.
* This means NULL or empty strings are equal.
*
* \retval 0 The strings are equal
* \retval 1 The strings are not equal
*/
static int cmp_strings(char *s1, char *s2)
{
if (!ast_strlen_zero(s1) && !ast_strlen_zero(s2)) {
return strcmp(s1, s2);
}
return ast_strlen_zero(s1) == ast_strlen_zero(s2) ? 0 : 1;
}
/*!
* \brief compares the childrens of two ast_sip_subscription s1 and s2
*
* \retval 0 The s1 childrens match the s2 childrens
* \retval 1 The s1 childrens do not match the s2 childrens
*/
static int cmp_subscription_childrens(struct ast_sip_subscription *s1, struct ast_sip_subscription *s2)
{
int i;
if (AST_VECTOR_SIZE(&s1->children) != AST_VECTOR_SIZE(&s2->children)) {
return 1;
}
for (i = 0; i < AST_VECTOR_SIZE(&s1->children); ++i) {
struct ast_sip_subscription *c1 = AST_VECTOR_GET(&s1->children, i);
struct ast_sip_subscription *c2 = AST_VECTOR_GET(&s2->children, i);
if (cmp_strings(c1->resource, c2->resource)
|| cmp_strings(c1->display_name, c2->display_name)) {
return 1;
}
}
return 0;
}
/*!
* \brief Called whenever an in-dialog SUBSCRIBE is received
*
@@ -4025,48 +3966,6 @@ static void pubsub_on_rx_refresh(pjsip_evsub *evsub, pjsip_rx_data *rdata,
sub_tree->state = SIP_SUB_TREE_TERMINATE_PENDING;
}
if (sub_tree->state == SIP_SUB_TREE_NORMAL && sub_tree->is_list) {
/* update RLS */
const char *resource = sub_tree->root->resource;
struct ast_sip_subscription *old_root = sub_tree->root;
struct ast_sip_subscription *new_root = NULL;
RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
struct ast_sip_subscription_handler *handler = NULL;
struct ast_sip_pubsub_body_generator *generator = NULL;
if ((endpoint = ast_pjsip_rdata_get_endpoint(rdata))
&& (handler = subscription_get_handler_from_rdata(rdata, ast_sorcery_object_get_id(endpoint)))
&& (generator = subscription_get_generator_from_rdata(rdata, handler))) {
struct resource_tree tree;
int resp;
memset(&tree, 0, sizeof(tree));
resp = build_resource_tree(endpoint, handler, resource, &tree,
ast_sip_pubsub_has_eventlist_support(rdata));
if (PJSIP_IS_STATUS_IN_CLASS(resp, 200)) {
new_root = create_virtual_subscriptions(handler, resource, generator, sub_tree, tree.root);
if (new_root) {
if (cmp_subscription_childrens(old_root, new_root)) {
ast_debug(1, "RLS '%s->%s' was modified, regenerate it\n", ast_sorcery_object_get_id(endpoint), old_root->resource);
new_root->version = old_root->version;
sub_tree->root = new_root;
sub_tree->generate_initial_notify = 1;
shutdown_subscriptions(old_root);
destroy_subscriptions(old_root);
} else {
destroy_subscriptions(new_root);
}
}
} else {
sub_tree->state = SIP_SUB_TREE_TERMINATE_PENDING;
pjsip_evsub_terminate(sub_tree->evsub, PJ_TRUE);
}
resource_tree_destroy(&tree);
}
}
subscription_persistence_update(sub_tree, rdata, SUBSCRIPTION_PERSISTENCE_REFRESHED);
if (ast_sip_push_task(sub_tree->serializer, serialized_pubsub_on_refresh_timeout, ao2_bump(sub_tree))) {

View File

@@ -12,13 +12,34 @@ fi
pushd $TESTSUITE_DIR
if [[ "$VIRTUAL_ENV" != "" ]]
then
echo "Detected activated virtual environment:"
echo $VIRTUAL_ENV
echo "Skipping creation of new environment"
else
python3 -m venv ${TESTSUITE_DIR}/.venv
source ${TESTSUITE_DIR}/.venv/bin/activate
if [[ "$VIRTUAL_ENV" != "" ]]
then
echo "Successfully activated virtual environment:"
echo $VIRTUAL_ENV
python -m pip install --upgrade pip
python -m pip install wheel setuptools build
python -m pip install -r ./requirements.txt
python -m pip install -r ./extras.txt
else
echo "Virtual environment failed, attempting fall-back method"
export PYTHONPATH=./lib/python/
fi
fi
./cleanup-test-remnants.sh
if [ $REALTIME -eq 1 ] ; then
$CIDIR/setupRealtime.sh --initialize-db=${INITIALIZE_DB:?0}
fi
export PYTHONPATH=./lib/python/
echo "Running tests ${TESTSUITE_COMMAND} ${AST_WORK_DIR:+with work directory ${AST_WORK_DIR}}"
./runtests.py --cleanup --timeout=${TEST_TIMEOUT} ${TESTSUITE_COMMAND} | contrib/scripts/pretty_print --no-color --no-timer --term-width=120 --show-errors || :