Commit Graph

31568 Commits

Author SHA1 Message Date
George Joseph
e7b1de5150 Merge "core: Disable astobj2 locking for some common objects." into 16 2018-10-03 09:31:18 -05:00
George Joseph
0e93826e64 Merge "Resolve warning about duplicate 'dialplan' CLI." into 16 2018-10-03 09:28:44 -05:00
Corey Farrell
3b2310332d core: Disable astobj2 locking for some common objects.
* ACO options
* Indications
* Module loader ref_debug object
* Media index info and variants
* xmldoc items

These allocation locations were identified using reflocks.py on the
master branch.

Change-Id: Ie999b9941760be3d1946cdb6e30cb85fd97504d8
2018-10-03 03:21:42 -05:00
Corey Farrell
326574d4fc Resolve warning about duplicate 'dialplan' CLI.
Change-Id: I029db1b4a32ccfb38374d6fe944dc430866f4b30
2018-10-02 13:28:23 -05:00
Corey Farrell
f066dbc353 loader: Improve error handling.
* Display list of unavailable dependencies when they cause another
  module to fail loading.
* When a module declines to load find all modules which depend on it so
  they can be declined and listed together.
* Prevent retry of declined modules during startup.
* When a module fails to dlopen try loading it with RTLD_LAZY so we can
  attempt to display the list of missing dependencies.

These changes are meant to reduce logger spam that is caused when a
module has many dependencies and declines to load.  This also fixes some
error paths which failed to recognize required modules.

Module load/start errors are delayed until the end of loader startup.

Change-Id: I046052c71331c556c09d39f47a3b92975f3e1758
2018-10-02 12:21:31 -05:00
Joshua Colp
b351b903b9 Merge "Append CHANGES/UPGRADE.txt for module loader changes." into 16 2018-10-02 08:46:15 -05:00
Joshua Colp
c69e5cd764 Merge "app_queue.c: Fix json ref leak" into 16 2018-10-02 07:59:32 -05:00
Corey Farrell
5a9230eacb app_page: Add dependency against app_confbridge.
Change-Id: I1946509f518961d23fb21229d91676ee3e441921
2018-10-01 12:12:45 -05:00
Richard Mudgett
a2554d5e5a app_queue.c: Fix json ref leak
Declining the queue_member_status_type stasis message in stasis.conf
causes these messages to leak json objects.

* Add missing ast_json_unref() if the type is NULL in
queue_publish_member_blob().

ASTERISK-28084

Change-Id: I691ecf49bd1f7d9c29182e1eee8c4bb7103be9fc
2018-10-01 11:46:28 -05:00
Jenkins2
42b1e197c8 Merge "jansson-bundled: Add patches to improve json_pack error reporting." into 16 2018-10-01 10:17:01 -05:00
Jenkins2
68fe182e4f Merge "astobj2: Reduce memory overhead." into 16 2018-10-01 09:03:07 -05:00
George Joseph
8c72cd8459 Merge "lock: Improve performance of DEBUG_THREADS." into 16 2018-10-01 08:36:47 -05:00
Joshua Colp
339e248524 Merge "configure.ac: Check for unbound version >= 1.5" into 16 2018-10-01 07:18:58 -05:00
Joshua Colp
81fca7f7ac Merge "res_pjsip: improve realtime performance on CLI 'pjsip show contacts'" into 16 2018-10-01 06:51:15 -05:00
Joshua Colp
ddbd902edf Merge "app_confbridge: Use bridge join hook to send join and leave events" into 16 2018-10-01 06:24:10 -05:00
Joshua Colp
c87945c25d Merge "res_stasis: Fix stale data in ARI bridges" into 16 2018-10-01 04:34:59 -05:00
Corey Farrell
266ed3d68b Append CHANGES/UPGRADE.txt for module loader changes.
Change-Id: Ib8db4e14187f5c11ecbff532df17d30c5d36fa3e
2018-10-01 04:18:43 -04:00
Alexei Gradinari
ab90479642 res_pjsip: improve realtime performance on CLI 'pjsip show contacts'
CLI command 'pjsip show contacts' inefficiently make a lot of DB requests.

For example if there are 10k aors then asterisk requests these 10k records
of aor and then does 10k requests of contact - one request per aor.

Even if use 'like <pattern>' the asterisk requests all aor's and contact's
records and then filters them by itself.

This patch gathers contact's container by
- retrieving all dynamic contacts by regex (filtered by reg_server)
- retrieving all aors with permanent contacts
- finally filters container by regex

ASTERISK-28077 #close

Change-Id: Id0ad65d14952a02fb213273a90f3f680a8149618
2018-09-28 17:09:22 -05:00
Corey Farrell
3337fe85c5 jansson-bundled: Add patches to improve json_pack error reporting.
Change-Id: I045e420d5e73e60639079246e810da6ae21ae22b
2018-09-28 14:56:15 -05:00
Corey Farrell
b3b95c8d36 lock: Improve performance of DEBUG_THREADS.
Add a volatile flag to lock tracking structures so we only need to use
the global lock when first initializing tracking.

Additionally add support for DEBUG_THREADS_LOOSE_ABI.  This is used by
astobj2.c to eliminate storage for tracking fields when DEBUG_THREADS is
not defined.

Change-Id: Iabd650908901843e9fff47ef1c539f0e1b8cb13b
2018-09-28 13:42:27 -05:00
George Joseph
0ad987168e Merge "config.c: Cleanup AST_INCLUDE_GLOB" into 16 2018-09-28 13:16:41 -05:00
Kevin Harwell
2ee1c0cec8 Merge "res_odbc: fix missing SQL error diagnostic" into 16 2018-09-28 10:39:00 -05:00
George Joseph
60754fb806 Merge "astobj2: Fix shutdown order." into 16 2018-09-28 08:34:46 -05:00
George Joseph
15f91a4789 Merge "app_queue: Fix Attended transfer hangup with removing pending member." into 16 2018-09-28 07:48:59 -05:00
George Joseph
b4ab26e72f app_confbridge: Use bridge join hook to send join and leave events
The first attempt at publishing confbridge events to participants
involved publishing them at the same time stasis events were
created.  This caused issues with bridge and channel locks.  The
second attempt involved publishing them when the stasis events
were received by the code that published the confbridge AMI events.
This caused timing issues because, depending on resources available,
the event could be received before channels actually joined the
bridge and would therefore fail to send messages to the participant.

This attempt reverts to the original mechanism with one exception.
The join and leave events are published via bridge join and leave
hooks.  This guarantees the states of the channels and bridge and
provides deterministic timing for event publishing.

Change-Id: I2660074f8a30a5224cb953d5e047ee84484a9036
2018-09-28 06:32:39 -06:00
George Joseph
de43d25716 Merge "res_rtp_asterisk.c: Add "seqno" strictrtp option" into 16 2018-09-28 07:28:39 -05:00
Corey Farrell
33455f8d6f astobj2: Reduce memory overhead.
Reduce options to 2-bit field, magic to 30 bit field.  Move ref_counter
next to options and explicitly use int32_t so the fields will pack.

This reduces memory overhead for every ao2 object by 8 bytes on x86_64.

Change-Id: Idc1baabb35ec3b3d8de463c4fa3011eaf7fcafb5
2018-09-27 18:42:19 -05:00
Sean Bright
d1698b4e0b config.c: Cleanup AST_INCLUDE_GLOB
* In main/config.c, AST_INCLUDE_GLOB is fixed to '1' making the #ifdefs
  pointless.

* In utils/extconf.c, AST_INCLUDE_GLOB is never defined so there is a
  lot of dead code.

Change-Id: I1bad1a46d7466ddf90d52cc724e997195495226c
2018-09-27 15:07:05 -05:00
George Joseph
06fef54b5a Merge "res_rtp_asterisk: Raise event when RTP port is allocated" into 16 2018-09-27 09:21:56 -05:00
Joshua Colp
2e307ee0b7 Merge "CI: Add --test-timeout option to runTestsuite.sh" into 16 2018-09-27 06:22:47 -05:00
Corey Farrell
0fe08c5e79 astobj2: Fix shutdown order.
When REF_DEBUG and AO2_DEBUG are both enabled we closed the refs log
before we shutdown astobj2_container.  This caused the AO2_DEBUG
container registration container to be reported as a leak.

Change-Id: If9111c4c21c68064b22c546d5d7a41fac430430e
2018-09-27 05:42:13 -05:00
Cao Minh Hiep
958727cece app_queue: Fix Attended transfer hangup with removing pending member.
This issue related to setting of holdtime, announcements, member delays.
It works well if we set the member delays to "0" and no announcements
and no holdtime.This issue will happen if we set member delays to "1",
"2"... or announcements or holdtime and hangs up the call during
processing it.

And here is the reason:
(At the step of answering a phone.)
It takes care any holdtime, announcements, member delays,
or other options after a call has been answered if it exists.

Normally, After the call has been aswered,
and we wait for the processing one of the cases of the member delays
or hold time or announcements finished, "if (ast_check_hangup(peer))"
will be not executed, then queue will be updated at update_queue().
Here, pending member will be removed.

However, after the call has been aswered,
if we hangs up the call during one of the cases of the member delays
or hold time or announcements, "if (ast_check_hangup(peer))"
will be executed.
outgoing = NULL and at hangupcalls, pending members will not be removed.

* This fixed patch will remove the pending member from container
before hanging up the call with outgoing is NULL.

ASTERISK-27920

Reported by: Cao Minh Hiep
Tested by: Cao Minh Hiep

Change-Id: Ib780fbf48ace9d2d8eaa1270b9d530a4fc14c855
2018-09-26 20:04:06 -05:00
Moritz Fain
1f68614f3c res_stasis: Fix stale data in ARI bridges
Fixed an issue that resulted in "Allocation failed" each time an ARI
request was made to start playing MOH on a bridge.

In bridge_moh_create() we were attaching the after bridge callbacks to
chan which is the ;1 channel of the unreal channel pair.  We should have
attached them to the ;2 channel which is pushed into the bridge by
ast_unreal_channel_push_to_bridge().  The callbacks are called when the
specific channel leaves the bridging system.  Since the ;1 channel is
never put into a bridge the callbacks never get called.  The callbacks
then never remove the moh_wrapper from the app_bridges_moh container.  As
a result we cannot find the channel associated with the wrapper to start
MOH because it has hungup.  This is the reason causing the reported issue.

* Rather than using after bridge callbacks to cleanup, we now have
moh_channel_thread() doing the cleanup when the channel hangs up.

* Fixed moh_channel_thread() accumulating control frames on the stasis
bridge MOH channel until MOH is stopped.  Control frames are no longer
accumulated while MOH is playing.

* Fixed channel ref counting issue.  stasis_app_bridge_moh_channel() may
or may not return a channel ref.  As a result ast_ari_bridges_start_moh()
wouldn't know it may have a channel ref to release.
stasis_app_bridge_moh_channel() will now return a ref with the channel it
returns.

* Eliminated RAII_VAR in bridge_moh_create().

ASTERISK-26094 #close

Change-Id: Ibff479e167b3320c68aaabfada7e1d0ef7bd548c
2018-09-26 18:50:22 -05:00
Ben Ford
67e1e49e08 res_rtp_asterisk.c: Add "seqno" strictrtp option
When networks experience disruptions, there can be large gaps of time
between receiving packets. When strictrtp is enabled, this created
issues where a flood of packets could come in and be seen as an attack.
Another option - seqno - has been added to the strictrtp option that
ignores the time interval and goes strictly by sequence number for
validity.

Change-Id: I8a42b8d193673899c8fc22fe7f98ea87df89be71
2018-09-26 13:26:54 -05:00
George Joseph
94ef074cc7 Merge "jansson: Backport fixes to bundled, use json_vsprintf if available." into 16 2018-09-26 11:09:32 -05:00
George Joseph
7638366c2f Merge "chan_sip: SipNotify on Chan_Sip vi AMI behave different to CLI" into 16 2018-09-26 09:33:15 -05:00
Alexei Gradinari
e04c49b517 res_odbc: fix missing SQL error diagnostic
On SQL error there is not diagnostic information about this error.
There is only
WARNING res_odbc.c: SQL Execute error -1!

The function ast_odbc_print_errors calls a SQLGetDiagField to get the number
of available diagnostic records, but the SQLGetDiagField returns 0.
However SQLGetDiagRec could return one diagnostic records in this case.

Looking at many example of getting diagnostics error information
I found out that the best way it's to use only SQLGetDiagRec
while it returns SQL_SUCCESS.

Also this patch adds calls of ast_odbc_print_errors on SQL_ERROR
to res_config_odbc.

ASTERISK-28065 #close

Change-Id: Iba5ae5470ac49ecd911dd084effbe9efac68ccc1
2018-09-26 09:24:53 -05:00
George Joseph
227d9719da CI: Add --test-timeout option to runTestsuite.sh
The default is 600 seconds.
Also added timeouts to the *TestGroups.json files.

Change-Id: I8ab6a69e704b6a10f06a0e52ede02312a2b72fe0
2018-09-26 08:15:02 -05:00
George Joseph
a6c3984175 Merge "rtp_engine: rtcp_report_to_json can overflow the ssrc integer value" into 16 2018-09-26 08:08:06 -05:00
pk16208
681e115ff1 chan_sip: SipNotify on Chan_Sip vi AMI behave different to CLI
With tls and udp enabled asterisk generates a warning about sending
message via udp instead of tls.
sip notify command via cli works as expected and without warning.

asterisk has to set the connection information accordingly to connection
and not on presumption

ASTERISK-28057 #close

Change-Id: Ib43315aba1f2c14ba077b52d8c5b00be0006656e
2018-09-26 07:27:58 -05:00
George Joseph
cc8e0dfabd configure.ac: Check for unbound version >= 1.5
In order to do this and provide good feedback, a new macro was
created (AST_EXT_LIB_EXTRA_CHECK) which does the normal check and
path setups for the library then compiles, links and runs a supplied
code fragment to do the final determination.  In this case, the
final code fragment compares UNBOUND_VERSION_MAJOR
and UNBOUND_VERSION_MINOR to determine if they're greater than or
equal to 1.5.

Since we require version 1.5, some code in res_resolver_unbound
was also simplified.

ASTERISK-28045
Reported by: Samuel Galarneau

Change-Id: Iee94ad543cd6f8b118df8c4c7afd9c4e2ca1fa72
2018-09-25 14:32:12 -05:00
Joshua Colp
7c49ea7cff res_rtp_asterisk: Raise event when RTP port is allocated
This change raises a testsuite event to provide what port
Asterisk has actually allocated for RTP. This ensures that
testsuite tests can remove any assumption of ports and instead
use the actual port in use.

ASTERISK-28070

Change-Id: I91bd45782e84284e01c89acf4b2da352e14ae044
2018-09-25 05:35:02 -05:00
Corey Farrell
ede59966d9 jansson: Backport fixes to bundled, use json_vsprintf if available.
Use json_vsprintf from versions which contain fix for va_copy leak.

Apply fixes from jansson master:
* va_copy leak fix.
* Avoid potential invalid memory read in json_pack.
* Rename variable that shadowed another.

Change-Id: I7522e462d2a52f53010ffa1e7d705c666ec35539
2018-09-24 18:00:19 -05:00
Corey Farrell
7b0dbda936 json: Take advantage of new API's.
* Use "o*" format specifier for optional fields in ast_json_party_id.
* Stop using ast_json_deep_copy on immutable objects, it is now thread
  safe to just use ast_json_ref.

Additional changes to ast_json_pack calls in the vicinity:
* Use "O" when an object needs to be bumped.  This was previously
  avoided as it was not thread safe.
* Use "o?" and "O?" to replace NULL with ast_json_null().  The
  "?" is a new feature of ast_json_pack starting with Asterisk 16.

Change-Id: I8382d28d7d83ee0ce13334e51ae45dbc0bdaef48
2018-09-24 14:50:50 -05:00
George Joseph
3ddfeccf35 Merge "app_voicemail: Fix stack overrun in append_mailbox" into 16 2018-09-24 13:49:42 -05:00
George Joseph
685abce1d0 Merge "chan_sip.c: chan_sip unstable with TLS after asterisk start or reloads" into 16 2018-09-24 10:44:10 -05:00
George Joseph
6a0dc87b97 Merge "res_remb_modifier: Add module for controlling REMB from CLI." into 16 2018-09-24 10:12:01 -05:00
George Joseph
82f28106df Merge "app_voicemail: Cleanup mailbox topic and cache" into 16 2018-09-24 10:08:41 -05:00
George Joseph
64e3ed75ab Merge "stasis: Add function to delete topic from pool" into 16 2018-09-24 09:28:50 -05:00
George Joseph
a389b020de Merge "res_rtp_asterisk: Fix crash on ast_rtp_new failure." into 16 2018-09-24 09:26:01 -05:00