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.
Kevin Harwell [Wed, 3 Jan 2018 16:41:46 +0000 (10:41 -0600)]
res_pjsip_session: Check if sequence header is missing
The pjsip_msg_find_hdr function can return NULL. This patch adds a check
when searching for the sequence header to make sure a NULL pointer is never
de-referenced.
Corey Farrell [Sat, 30 Dec 2017 04:59:00 +0000 (23:59 -0500)]
core: Use macros to generate ao2_container callbacks where possible.
This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where
possible in the Asterisk core.
This removes CMP_STOP from the result of CMP_FN callbacks for the
following structure types:
* ast_bucket_metadata
* ast_bucket_scheme
* generic_monitor_instance_list (ccss.c)
* named_acl
Richard Mudgett [Thu, 28 Dec 2017 19:27:43 +0000 (13:27 -0600)]
stasis_channels.c: Misc cleanup.
* Use current OBJ_SEARCH_xxx defines instead of the deprecated versions.
* Fix hash_cb and cmp_cb container functions to correctly use the
OBJ_SEARCH_xxx values.
* Remove incorrect usage of CMP_STOP. Most uses in the system have no
effect. This allows the collapse of channel_role_single_cmp_cb() and
channel_role_multi_cmp_cb() into channel_role_cmp_cb().
Sean Bright [Wed, 13 Dec 2017 21:43:18 +0000 (16:43 -0500)]
cdr_mysql: Make sure connection charset is always set
When the MYSQL_OPT_RECONNECT option is enabled, the MySQL client API
will transparently reconnect when it needs to. Ideally this simplifies
our code, but when this reconnection occurs all connection state is
lost. Because we are not notified that this has happened, we don't know
to set our character set again (with "SET NAMES 'xyz'").
Rather than calling SET NAMES, we instead set the MYSQL_SET_CHARSET_NAME
option which will do it for us under the hood on each connect. This
option has been present in the MySQL C API for at least 15 years, so it
should be safe for most installations.
I also snuck a few other changes into this patch:
* Default the MySQL port to MYSQL_PORT (3306) instead of 0 if it's not
defined.
* Fix some erroneous and/or silly checks on the contents of the
configuration ast_str values.
ASTERISK-27366 #close
Reported by: Halil İbrahim YILDIZ
Richard Mudgett [Thu, 28 Dec 2017 02:48:40 +0000 (20:48 -0600)]
manager.c: Update AMI Status event documentation
The AMI Status event had linkedid listed twice and was missing the
effective connected line name and number headers.
NOTE: The linkedid and other standard channel snapshot fields in the XML
documentation are part of the <channel_snapshot/> XML template defined in
doc/appdocsxml.xslt.
* Cached the effective connected line party id so it doesn't get
calculated four times.
If two channels enter different native rtp bridges at the same time it is
possible that the framehook interface data pointer can be corrupted
because the struct variable was declared static.
* Fixed the reentrancy corruption by changing the framehook interface
struct static variable to a stack local variable.
* Moved the hook.data assignment outside of the channel lock. It did not
need the lock's protection. It probably was giving a false sense of
security.
The testsuite
channels/pjsip/basic_calls/two_parties/nominal/alice_initiated/bob_hangs_up
test caught this with MALLOC_DEBUG and DO_CRASH enabled.
Corey Farrell [Thu, 28 Dec 2017 01:27:18 +0000 (20:27 -0500)]
menuselect: Fix check for running configure.
menuselect/Makefile checks that autoconfig.h and makeopts were newer
than the '.in' files. Unfortunately running ./configure does not touch
autoconfig.h unless the contents will change.
Instead of looking at autoconfig.h we just need to ensure that makeopts
is newer than configure.
Also make change to configure.ac so bootstrap.sh doesn't re-add the
extra trailing line-feed.
Corey Farrell [Sun, 24 Dec 2017 04:51:13 +0000 (23:51 -0500)]
loader: Add volatile to resource_being_loaded.
Some compiler optimizers seem to assume that dlopen will not use
__attribute__((constructor)) functions to call back to the program.
This was causing resource_being_loaded to be optimized away completely.
Kevin Harwell [Wed, 20 Dec 2017 22:17:40 +0000 (16:17 -0600)]
AST-2017-014: res_pjsip - Missing contact header can cause crash
Those SIP messages that create dialogs require a contact header to be present.
If the contact header was missing from the message it could cause Asterisk to
crash.
This patch checks to make sure SIP messages that create a dialog contain the
contact header. If the message does not and it is required Asterisk now returns
a "400 Missing Contact header" response. Also added NULL checks when retrieving
the contact header that were missing as a "just in case".