Alexander Traud [Fri, 5 Jan 2018 20:46:51 +0000 (21:46 +0100)]
install_prereq: For PJProject, point users to configure script.
The installation script and the new configure option --with-pjproject-bundled
aimed to accomplish the same. However, the installation script was out of
date. Users should go for the maintained configure option, or the Wiki.
Corey Farrell [Wed, 17 Jan 2018 06:28:57 +0000 (01:28 -0500)]
loader: Miscellaneous fixes.
* Remove comment about lazy load.
* Improve message about module already being loaded and running.
* Handle allocation error in add_to_load_order.
* Dead code elimination from modules_shutdown.
Alexander Traud [Wed, 17 Jan 2018 08:51:29 +0000 (09:51 +0100)]
BuildSystem: Detect external library Lua in version 5.3.
On some platforms, you decide to go for one specific version of Lua, for
example in OpenBSD. On other platforms, you are able to install several versions
side-by-side, for example in Ubuntu and Fedora. Asterisk already works with
Lua 5.3. Asterisk failed to detect Lua 5.3 on those platforms which allow
several versions.
Richard Mudgett [Tue, 16 Jan 2018 14:32:20 +0000 (08:32 -0600)]
taskprocessor.c: Increase the number of tps_singletons container buckets.
Since v12 the number of taskprocessors in the system has increased a lot.
Small systems can easily have over a hundred and larger systems can have
thousands.
Most uses of the tps_singletons container deal with creating and
destroying the taskprocessors. However, the pjsip distributor looks up
taskprocessors/serializers by name frequently. It needs to find the
serializer for incoming SIP responses to distribute them to the
appropriate serializer.
George Joseph [Tue, 16 Jan 2018 14:20:28 +0000 (07:20 -0700)]
pjproject_bundled: Prevent crash on bad outgoing header
We still need to figure out how a bad header is getting into the
outgoing message but this patch to pjproject prevents attempting
to print that header and causing a crash.
For several users, this crash happens when sending 183 progress
messages.
Asterisk's makefile for menuselect has a very simple source file parsing
script that looks for AST_MODULE_INFO lines to extract the quoted string
as a module description. If it does not find a quoted string it uses the
whole line as the description.
Corey Farrell [Sat, 13 Jan 2018 00:37:43 +0000 (19:37 -0500)]
res_stasis_recording: Allow symbolic links in configured recordings dir.
If any component of ast_config_AST_RECORDING_DIR is a symbolic link we
would incorrectly assume the ARI user was trying to escape the recording
path. Create additional check to check the recording directory's
realpath, only deny access if both do not match.
This is needed by the testsuite when run by 'run-local'.
Alexander Traud [Fri, 12 Jan 2018 09:17:04 +0000 (10:17 +0100)]
BuildSystem: Really do not pass unknown-warning options to the compiler.
When an older GCC version is called with a too new warning option, GCC exited
with an error and Asterisk was not built. Therefore, the configure script tests
the installed compiler whether it supports that warning option. If not, Asterisk
does not pass it to the installed compiler. However, some compilers (like clang)
do not exit (error) but give just a warning in such a case. Because the compiler
did not exit, Asterisk passed the unknown-warning option.
Richard Mudgett [Sat, 23 Dec 2017 01:50:34 +0000 (19:50 -0600)]
res_pjsip: Split type=identify to IP address and SIP header matching priorities
The type=identify endpoint identification method can match by IP address
and by SIP header. However, the SIP header matching has limited
usefulness because you cannot specify the SIP header matching priority
relative to the IP address matching. All the matching happens at the same
priority and the order of evaluating the identify sections is
indeterminate. e.g., If you had two type=identify sections where one
matches by IP address for endpoint alice and the other matches by SIP
header for endpoint bob then you couldn't predict which endpoint is
matched when a request comes in that matches both.
* Extract the SIP header matching criteria into its own "header" endpoint
identification method so the user can specify the relative priority of the
SIP header and the IP address matching criteria in the global
endpoint_identifier_order option. The "ip" endpoint identification method
now only matches by IP address.
Tzafrir Cohen [Thu, 11 Jan 2018 14:09:04 +0000 (16:09 +0200)]
Ignore quilt .pc directory, used in deb packaging
Debian packaging uses quilt to manage patches. Book-keeping for them is
done using quilt (either directly, or in a compatible format), and
tracked in the directory .pc .
The requirement that "ip" must be in the endpoint identify_by list to
allow the type=identify method to identify the endpoint is not necessary.
The "ip" identifier method can match one and only one endpoint. To even
work, the "ip" identifier method configuration must explicitly specify the
identified endpoint. Therefore, why bother configuring the type=identify
identifier in the first place? The requirement only adds the potential
for configuration errors for no benefit. Even worse, those configuration
errors cannot be detected when the configuration loads. The requirement
was introduced with the ASTERISK_27206 patch.
* Remove the code change that enforces the requiremnt. Listing the "ip"
method in the identify_by value is simply documentation.
Richard Mudgett [Thu, 4 Jan 2018 23:04:39 +0000 (17:04 -0600)]
res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events.
The AMI PJSIPShowEndpoint action could only list one IdentifyDetail AMI
event per endpoint. However, there is no reason that multiple
type=identify sections cannot identify the same endpoint.
* Reworked format_ami_endpoint_identify() to generate as many
IdentifyDetail AMI events as there are matching identifiers.
Alexander Traud [Fri, 5 Jan 2018 11:51:47 +0000 (12:51 +0100)]
translate: Avoid absolute value on unsigned substraction.
ast_format_get_sample_rate(.) returns an unsigned type. The difference of a
substraction between two unsigned types does not get implicitly converted to a
signed type. Therefore, using abs(.) did not make sense.
Corey Farrell [Tue, 9 Jan 2018 00:47:38 +0000 (19:47 -0500)]
app_confbridge: Fix NULL check in action_kick_last.
The check for last_user == NULL needs to happen before we dereference
the variable, previously it was possible for us to check flags of a NULL
last_user.
Corey Farrell [Sat, 6 Jan 2018 08:17:15 +0000 (03:17 -0500)]
res_stasis: Reduce RAII_VAR usage.
In addition to being a micro-optimization (RAII_VAR has overhead), this
change improves output of REF_DEBUG. Unfortunately when RAII_VAR calls
ao2_cleanup it does so from a generated _dtor_varname function. For
example this caused _dtor_app to release a reference instead of
__stasis_app_unregister.
Corey Farrell [Mon, 8 Jan 2018 02:21:13 +0000 (21:21 -0500)]
res_stasis: Fix app_is_subscribed_bridge_id.
Instead of searching for bridge_id provided in an argument this function
always searched for BRIDGE_ALL first. Rewrite this function to work
like the similar functions for channel and endpoint functions.
Alexander Traud [Fri, 5 Jan 2018 13:58:32 +0000 (14:58 +0100)]
General: Silence modules on (un)load.
Some (normally optional) modules created notices, warnings, and even errors
in normal situations like (un)load. This cluttered the command-line interface
(CLI) on start and while stopping gracefully. However, when an user went for
the script './contrib/scripts/install_prereq', those modules get compiled-in
because their prerequisites were met at compile time. Furthermore, because of
ASTERISK_27475, the former talkative module 'res_curl' is built as side-effect.
Alexander Traud [Sat, 6 Jan 2018 21:40:46 +0000 (22:40 +0100)]
BuildSystem: Really do not pass unknown-warning options to the compiler.
When an older GCC version is called with a too new warning option, GCC exited
with an error and Asterisk was not built. Therefore, the configure script tests
the installed compiler whether it supports that warning option. If not, Asterisk
does not pass it to the installed compiler. However, some compilers (like clang)
do not exit (error) but give just a warning in such a case. Because the compiler
did not exit, Asterisk passed the unknown-warning option.
The ip_identify_apply() did not validate the configuration for simple
static configuration errors or deal well with address resolution errors.
* Added missing configuration validation checks.
* Fixed address resolution error handling.
* Demoted an error message to a warning since it does not fail applying
the identify object configuration.
Richard Mudgett [Thu, 4 Jan 2018 23:42:59 +0000 (17:42 -0600)]
res_pjsip.c: Fix endpoint identifier registration name search.
If an endpoint identifier name in the endpoint_identifier_order list is a
prefix to the identifier we are registering, we could install it in the
wrong position of the list.
Alexander Traud [Fri, 5 Jan 2018 09:33:58 +0000 (10:33 +0100)]
BuildSystem: Find ptlib-config on Debian/Ubuntu.
The current configure script requires that tool when libpt-dev is installed.
libpt-dev was installed by libopenh323-dev, bacause you wanted to go for H.323
based channel drivers.
Corey Farrell [Thu, 4 Jan 2018 22:07:03 +0000 (17:07 -0500)]
pbx: Prevent execution of NULL pointer.
pbx_extension_helper has a check for q->swo.exec == NULL but it doesn't
actually return so we would still run the function. Fix the return.
Move the 'int res' variable into the only scope which uses it.