Commit graph

5625 commits

Author SHA1 Message Date
zuul
3fe1d8afba Merge "core: Add stream topology changing primitives with tests." 2017-03-15 17:23:30 -05:00
Matt Jordan
b03b72717f main/stasis_cache: Demote the ERROR message when removing a nonexistent item
This patch demotes the ERROR message that is displayed when a
nonexistent item is removed from the Stasis cache. The genesis of this
demotion is due to chan_sip's realtime peers and their interaction with
Asterisk's core ast_endpoint code, but ostensibly it could happen from
other channel drivers as well.

Since Mark Michelson already did an excellent job of explaining on this
issue, it is quoted here for posterity:

"Internally, when a realtime peer is retrieved, Asterisk creates an
ast_endpoint structure. When that peer is destroyed, the ast_endpoint is
destroyed as well. Part of the destruction of the ast_endpoint involves
clearing the Stasis cache of all information about that endpoint. The
problem here is that the act of creating the ast_endpoint is not enough
to actually put any information in the Stasis cache. Instead, something
has to happen, such as a state change, in order for the Stasis cache to
have any information about that endpoint. When a device registers,
chan_sip creates an ast_endpoint structure, processes the REGISTER, and
then destroys the ast_endpoint. When the ast_endpoint is destroyed,
there is nothing to destroy in the Stasis cache, so an error message is
emitted. When you use rtcachefriends, ast_endpoint structures persist
for the lifetime of the module and so you do not see this error
message."

ASTERISK-25237 #close

Change-Id: I53cebc6b4a897a1ab9564182b75c177780feff70
2017-03-14 08:40:54 -06:00
Sean Bright
35cfd2c0cc media_cache: Prefer ast_file_is_readable() over access()
Change-Id: Icc0dc6e61b2e68d5cdcb74b016b2726a388c7def
2017-03-08 17:26:41 -06:00
Joshua Colp
3ed05badb9 core: Add stream topology changing primitives with tests.
This change adds a few things to facilitate stream topology changing:

1. Control frame types have been added for use by the channel driver
to notify the application that the channel wants to change the stream
topology or that a stream topology change has been accepted. They are
also used by the indicate interface to the channel that the application
uses to indicate it wants to do the same.

2. Legacy behavior has been adopted in ast_read() such that if a
channel requests a stream topology change it is denied automatically
and the current stream topology is preserved if the application is
not capable of handling streams.

Tests have also been written which confirm the multistream and
non-multistream behavior.

ASTERISK-26839

Change-Id: Ia68ef22bca8e8457265ca4f0f9de600cbcc10bc9
2017-03-07 12:08:51 +00:00
Daniel Journo
272259a2c6 Saynumber is trying to get "and" from "digits/" subfolder
* say.c Changed 'digits/and' to 'vm-and' for en_GB

ASTERISK-26598 #close

Change-Id: If1b713e5daea6f952b339f139178d292a6c4fcfe
2017-03-06 15:59:49 -06:00
Richard Mudgett
c9296b23d1 core: Cleanup ast_get_hint() usage.
* manager.c:manager_state_cb() Fix potential use of uninitialized hint[]
if a hint does not exist for the requested extension.  Ran into this when
developing a testsuite test.  The AMI event ExtensionStatus came out with
the hint header value containing garbage.  The AMI event PresenceStatus
also had the same issue.

* manager.c:action_extensionstate() no need to completely initialize the
hint[].  Only initialize the first element.

* pbx.c:ast_add_hint() Remove unnecessary assignment.

* chan_sip.c: Eliminate an unneeded hint[] local variable.  We only care
about the return value of ast_get_hint() there.

Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b
2017-03-02 21:46:51 -06:00
Joshua Colp
fb11f038a3 Merge "stream: Unit tests for stream read and tweaks framework" 2017-03-01 14:58:45 -06:00
George Joseph
0560c32375 stream: Unit tests for stream read and tweaks framework
* Removed the AST_CHAN_TP_MULTISTREAM tech property.  We now rely
  on read_stream being set to indicate a multi stream channel.
* Added ast_channel_is_multistream convenience function.
* Fixed issue where stream and default_stream weren't being set on
  a frame retrieved from the queue.
* Now testing for NULL being returned from the driver's read or
  read_stream callback.
* Fixed issue where the dropnondefault code was crashing on a
  NULL f.
* Now enforcing that if either read_stream or write_stream are
  set when ast_channel_tech_set is called that BOTH are set.
* Added the unit tests.

ASTERISK-26816

Change-Id: If7792b20d782e71e823dabd3124572cf0a4caab2
2017-03-01 07:30:49 -07:00
Mark Michelson
9c55a71798 SDP: Add initial SDP state machine.
This introduces and documents the various states in the state machine.
This also introduces API functions that induce state changes, and places
TODO comments telling what needs to be done in addition to what is
already there. Those TODOs will be replaced with real code in upcoming
changes.

Change-Id: I871c0eb480b4c84d83e91ac5628e7a673e8b89ed
2017-03-01 12:12:46 +00:00
Joshua Colp
26bf1846e2 Merge "media_cache: Mark cache entry stale if cache file is removed" 2017-03-01 04:47:59 -06:00
Sean Bright
60e9e4fcc0 media_cache: Mark cache entry stale if cache file is removed
In the event that a cache file is removed out from under us, we should
treat the cache entry as stale and force a refresh.

ASTERISK-26774 #close
Reported by: Igor Gamayunov

Change-Id: I3b1bd0c999d59d18664ef73a29823bc5b431dc52
2017-02-28 16:09:54 -06:00
George Joseph
4692a32ed7 build: Warn if asterisk is installed in both 32 and 64 bit sys dirs
... and clean them both up on uninstall.

We've fixed the issue where 'make install' was installing to
/usr/lib on 64-bit systems that use /usr/lib64.  Now we need
to clean up the remnants in /usr/lib.

* 'make install' now prints a warning if DESTDIR/ASTLIBDIR
  contains 'lib64' and libasterisk* shared libraries or modules
  are also found in DESTDIR/ASTLIBDIR with 'lib64' transformed
  to 'lib'.

* 'make uninstall' ALWAYS cleans up both DESTDIR/ASTLIBDIR and
  DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'.

ASTERISK-26705

Change-Id: I6edddeb3c07a51e7c7ba7cac3c05e4bf3ec3f01f
2017-02-27 12:57:18 -06:00
George Joseph
df22d297a6 Merge "channel: Add ast_read_stream function for reading frames from all streams." 2017-02-27 08:51:26 -06:00
Joshua Colp
6ac33bfe3e Merge "Binaural synthesis (confbridge): Adds binaural synthesis to bridge_softmix." 2017-02-24 12:49:00 -06:00
zuul
f943ead12e Merge "build: Execute ldconfig to build cache. (take two)" 2017-02-24 12:12:13 -06:00
zuul
461577b23b Merge "channel: Add support for writing to a specific stream." 2017-02-24 11:16:13 -06:00
Joshua Colp
c07c6714f2 channel: Add ast_read_stream function for reading frames from all streams.
This change introduces an ast_read_stream function and callback in
the channel technology which allows reading frames from all streams
and not just the default streams.

The stream number has also been added to frames. This is to allow the
case where frames are queued onto the channel instead of being read
directly from the driver.

This change does impose a restriction on reading though: a chain of
frames can only contain frames from the same stream.

ASTERISK-26816

Change-Id: I5d7dc35e86694df91fd025126f6cfe0453aa38ce
2017-02-24 10:20:33 -06:00
George Joseph
b0067bcf2c build: Execute ldconfig to build cache. (take two)
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.  To make matters worse, options were being passed
to ldconfig on both Linux and FreeBSD that actually prevented
the rebuild of the cache.

 * Fedora has a /usr/share/config.site that automatically tells
   autoconf to use /usr/lib64 but CentOS does not. This logic was
   copied to configure.ac and modified so systems like Ubuntu,
   which still use /usr/lib for 64-bit systems, aren't affected.

Now that we have them in the correct directory...

In order for the system loader to find libasteriskssl and
libasteriskpj, one of 3 things has to happen...

  - The linker cache must be rebuilt including the directory
    where the libasterisk* libraries were installed.  Only root
    can rebuild the cache.  This was busted.
  - We have to link the asterisk binary with an rpath pointing
    to the directrory where the libasterisk* libraries were
    installed.  This makes things very complicated and will happen
    over the collective dead bodies of everyone who's had to
    package a distribution with an rpath.
  - Finally, you can start asterisk with LD_LIBRARY_PATH set to the
    directrory where the libasterisk* libraries were installed.

There are no other options. So...

 * The invokation of ldconfig has been moved from main/Makefile
   to ASTTOPDIR/Makefile, the options have been removed, and
   DESTDIR/ASTLIBDIR appended.  If you aren't root, you will be
   warned after the "Asterisk Installation Compete" banner that
   you must re-run 'make install' as root, manually run
   'ldconfig DESTDIR/ASTLIBDIR' as root, or run asterisk with
   LD_LIBRARY_PATH.

ASTERISK-26705

Change-Id: I2a64b7c33a7d3e9bde20f47e3d3ab771977af982
2017-02-23 16:07:29 -06:00
Joshua Colp
6cc890b880 channel: Add support for writing to a specific stream.
This change adds an ast_write_stream function which allows
writing a frame to a specific media stream. It also moves
ast_write() to using this underneath by writing media
frames provided to it to the default streams of the channel.
Existing functionality (such as audiohooks, framehooks, etc)
are limited to being applied to the default stream only.

Unit tests have also been added which test the behavior of
both non-multistream and multistream channels to confirm that
the write() and write_stream() callbacks are invoked
appropriately.

ASTERISK-26793

Change-Id: I4df20d1b65bd4d787fce0b4b478e19d2dfea245c
2017-02-23 18:31:15 +00:00
frahaase
094c26aa68 Binaural synthesis (confbridge): Adds binaural synthesis to bridge_softmix.
Adds binaural synthesis to bridge_softmix (via convolution using libfftw3).
Binaural synthesis is conducted at 48kHz.
For a conference, only one spatial representation is rendered.
The default rendering is applied for mono-capable channels.

ASTERISK-26292

Change-Id: Iecdb381b6adc17c961049658678f6219adae1ddf
2017-02-23 10:34:58 -07:00
zuul
9ad1df71b3 Merge "Revert "build: Execute ldconfig to build cache."" 2017-02-22 13:56:48 -06:00
zuul
6c22d4b320 Merge "core: Show streams in "core show channel"." 2017-02-22 11:40:02 -06:00
Joshua Colp
ced73d5b79 Revert "build: Execute ldconfig to build cache."
This reverts commit 28c8e4f58f.

Change-Id: Ie2e1aaf61fd49045994974a4581545ac8348fe4c
2017-02-22 11:12:54 -06:00
Joshua Colp
10302fa63f Merge "Add initial SDP state code." 2017-02-22 10:56:02 -06:00
Joshua Colp
f58aefba5b core: Show streams in "core show channel".
The "core show channel" CLI command will now output the streams
present on the channel with their details.

ASTERISK-26811

Change-Id: I9c95b57aa09415005f0677a1949a0feb07e4987a
2017-02-22 14:32:23 +00:00
Mark Michelson
a738772edd Add initial SDP state code.
This establishes the basic allocation/destruction of an SDP state
object, plus some of the simpler getter methods involved. Subsequent
tasks will deal with adding a state machine, creating SDPs from
capabilities and options, and merging SDPs into a joint SDP.

Change-Id: Ie3757ce186f04b65e9d1883f5aace53f24e53709
2017-02-21 15:14:34 -06:00
Joshua Colp
16b0bb39c1 Merge changes from topic 'sdp_state_beginnings'
* changes:
  Add SDP translator and PJMEDIA implementation.
  Add initial SDP options.
2017-02-21 13:37:03 -06:00
Joshua Colp
28c8e4f58f build: Execute ldconfig to build cache.
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.

This change does the minimally invasive thing and executes
ldconfig so that the libraries in the lib directory are found
and their location cached. By doing so Asterisk starts up fine.

If DESTDIR is specified, however, the old logic is executed as
the install process may not have permission to alter the ldconfig
cache.

ASTERISK-26705

Change-Id: If4eca46ac510c6fea5568256280ffdb3888d7bb4
2017-02-21 05:25:13 -06:00
zuul
8dde33d184 Merge "tcptls.c: Add some missing allocation failure checks." 2017-02-20 17:43:27 -06:00
zuul
496a7b0b4c Merge "Revert "build: Execute ldconfig to build cache."" 2017-02-20 14:09:27 -06:00
Joshua Colp
7739b0b3ae Revert "build: Execute ldconfig to build cache."
This reverts commit 8851c3e088.

Change-Id: I124380be5e3bd57da978428a2a93604336ccd0db
2017-02-20 11:19:55 -06:00
zuul
c227745bc7 Merge "Remove extra ast_iostream_close() calls." 2017-02-17 17:41:06 -06:00
Richard Mudgett
0b427f9b59 tcptls.c: Add some missing allocation failure checks.
* Fix tcptls_session ref and fd leak in ast_tcptls_server_root().

Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb
2017-02-17 17:00:24 -06:00
Mark Michelson
dbc3598014 Remove extra ast_iostream_close() calls.
When AMI encounters an error at the beginning of a session, it would
explicitly call ast_iostream_close() on its tcptls session's iostream.
It then would jump to a label where it would shut down the tcptls
session instance. The tcptls session instance would again attempt to
close the iostream.

Under normal circumstances, this might go by unnoticed. However, when
MALLOC_DEBUG is enabled, all fields on the iostream get set to
0xdeaddead when the iostream is freed. Thus a second call to
ast_iostream_close() after the iostream has been freed would reslt in an
attempt to call SSL_shutdown on 0xdeaddead, which would crash and burn
horribly.

The fix here is to not directly close the iostream from the dangerous
scenarios. The specific scenarios are:
* Exceeding the configured authlimit
* Failing to build a mansession on a new connection

Change-Id: I908f98d516afd5a263bd36b072221008a4731acd
2017-02-17 15:12:30 -06:00
Mark Michelson
5a130b2e17 Add SDP translator and PJMEDIA implementation.
This creates the following:
* Asterisk's internal representation of an SDP
* An API for translating SDPs from one format to another
* An implementation of a translator for PJMEDIA

Change-Id: Ie2ecd3cbebe76756577be9b133e84d2ee356d46b
2017-02-17 09:47:47 -06:00
Mark Michelson
8af6342555 Add initial SDP options.
This is step one of adding an SDP API: defining some
configurable settings for SDPs. This is based on options
that are currently supported in Asterisk.

Change-Id: I1ede91aafed403b12a9ccdfb91a88389baa7e5d7
2017-02-17 09:23:12 -06:00
Joshua Colp
8851c3e088 build: Execute ldconfig to build cache.
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.

This change does the minimally invasive thing and executes
ldconfig so that the libraries in the lib directory are found
and their location cached. By doing so Asterisk starts up fine.

ASTERISK-26705

Change-Id: I6d30b6427e9d5e69470e11327c7ff203fa7da519
2017-02-16 14:21:14 -06:00
zuul
ab34e46b3a Merge "stream: Rename creates/destroys to allocs/frees" 2017-02-16 13:24:30 -06:00
George Joseph
f8f513d363 stream: Rename creates/destroys to allocs/frees
To be consistent with sdp implementation.

Change-Id: I714e300939b4188f58ca66ce9d1e84b287009500
2017-02-16 09:10:02 -06:00
Joshua Elson
ac7a34c531 http: Ensure capath is defined on all http creations
ASTERISK-26794 #close

Change-Id: I9cbc3b6b6a8aab590f5ccde9c262a98e4d5253a1
2017-02-16 05:48:41 -06:00
George Joseph
ca7fa7bbd2 Merge "stream: Add stream topology to channel" 2017-02-15 19:29:52 -06:00
George Joseph
bf2f091bbb stream: Add stream topology to channel
Adds topology set and get to channel.

ASTERISK-26790

Change-Id: Ic379ea82a9486fc79dbd8c4d95c29fa3b46424f4
2017-02-14 14:09:37 -07:00
zuul
182c737353 Merge "cli: Fix various CLI documentation and completion issues" 2017-02-14 14:34:03 -06:00
zuul
cea835e565 Merge "channel: Protect flags in ast_waitfor_nandfds operation." 2017-02-14 13:31:01 -06:00
zuul
b1e0b26145 Merge "stream: Add stream topology unit tests and fix uncovered bugs." 2017-02-14 13:26:44 -06:00
Joshua Colp
84a232ffb3 Merge "libasteriskssl: do nothing with OpenSSL >= 1.1" 2017-02-14 12:49:42 -06:00
zuul
2f0a036e4b Merge "tcptls: use TLS_client_method with OpenSSL 1.1" 2017-02-14 12:41:06 -06:00
zuul
d4f512e7d9 Merge "openssl 1.1 support: use OPENSSL_VERSION_NUMBER" 2017-02-14 12:33:01 -06:00
Joshua Colp
72845bd4b5 Merge "core: Cleanup some channel snapshot staging anomalies." 2017-02-14 07:14:51 -06:00
zuul
09fcfb26fa Merge "stream: Add media stream topology definition and API" 2017-02-13 13:02:20 -06:00