Commit Graph

28530 Commits

Author SHA1 Message Date
Corey Farrell 11bc810c86 Fix issues with bundled pjproject cached download.
Previously when testing I had a preexisting makeopts in ASTTOPDIR.  The
ordering of configure.ac causes --with-externals-cache to be processed
after third-party configure.  In cases where the Asterisk clone is
cleaned it would cause pjproject to be downloaded to /tmp.  This
moves processing of the externals cache and sounds cache to happen
before third-party configure.

This also addresses a possible issue with the third-party Makefile.  If
TMPDIR is set by the environment it would override the path given to
--with-externals-cache.

ASTERISK-26416

Change-Id: Ifab7f35bfcd5a31a31a3a4353cc26a68c8c6592d
2016-10-14 07:47:31 -05:00
zuul 8ff4d75e9e Merge "bundled_pjproject: Add tests for programs used by the Makefile, et al." into 14 2016-10-12 11:15:22 -05:00
Torrey Searle 8d2d6361ff res_fax: Fix a tight race condition causing fax to crash in audio fallback
When T.38 gets rejected and G711 failback occurs there is a period of
time where neither AST_FAX_TECH_T38 nor AST_FAX_TECH_AUDIO is set,
leading to a crash.

Change-Id: Icc3f457b2292d48a9d7843dac0028347420cc982
2016-10-12 06:54:02 -05:00
zuul 07a84b39fe Merge "Add text of cdr directory into README.md for ast-db-manage" into 14 2016-10-11 22:10:59 -05:00
zuul 357134fef1 Merge "audiohooks: Remove redundant codec translations when using audiohooks" into 14 2016-10-11 18:09:13 -05:00
zuul 615f911f2d Merge "vector: After remove element recheck index" into 14 2016-10-11 17:39:55 -05:00
Rodrigo Ramírez Norambuena bbbd43924f Add text of cdr directory into README.md for ast-db-manage
Change-Id: I68321c4bea50730c39fdb486e5f23aeadd1ad636
2016-10-11 17:07:07 -05:00
zuul 7a74c649a0 Merge "app_dial: Add the "Q" option to set the cause on unanswered channels" into 14 2016-10-11 15:36:58 -05:00
zuul dd6d6a55fe Merge "astobj2: Add backtrace to log_bad_ao2." into 14 2016-10-11 13:22:39 -05:00
George Joseph 90f8ba8800 app_dial: Add the "Q" option to set the cause on unanswered channels
The "Q" option will set the cause on the unanswered channels when
another channel answers.  It overrides the default of
ANSWERED_ELSEWHERE.

NOTE:  chan_sip does not support setting the cause on a CANCEL to
anything other than ANSWERED_ELSEWHERE.

ASTERISK-26446 #close

Change-Id: I71742e0919aaa16784c30a2b2e73fbeed7672e47
2016-10-11 12:05:48 -05:00
Joshua Colp 1da75f9f78 Merge "res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge" into 14 2016-10-11 07:32:02 -05:00
Badalyan Vyacheslav 012074d46b vector: After remove element recheck index
Small fix. It is necessary to double-check
the index that we just removed because there
is a new element.

ASTERISK-26453 #close

Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7
2016-10-11 06:43:27 -05:00
Joshua Colp 1347384b67 Merge "cel_odbc: Fix memory leak on module unload" into 14 2016-10-11 05:36:29 -05:00
zuul 2f4fa4f545 Merge "logger: Prevent output of verbose messages initiated from rasterisk." into 14 2016-10-10 22:43:23 -05:00
Torrey Searle e193217f1a res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge
If a bridge switched to P2P when a DTMF was in progress it
was possible for the DTMF to continue being sent indefinitely.

Change-Id: I7e2a3efe0d59d4b214ed50cd0b5d0317e2d92e29
2016-10-10 17:00:10 -05:00
Joshua Colp 603a6cdedb Merge "pjproject_bundled: Add MALLOC_DEBUG capability" into 14 2016-10-10 16:44:46 -05:00
Michael Walton 4cf2d9f261 audiohooks: Remove redundant codec translations when using audiohooks
The main frame read and write handlers in main/channel.c don't use the
optimum placement in the processing flow for calling audiohooks
callbacks, as far as codec translation is concerned. This change places
the audiohooks callback code:
 * After the channel read translation if the frame is not linear before
the translation, thereby increasing the chance that the frame is linear
as required by audiohooks
 * Before the channel write translation if the frame is linear at this
point
This prevents the audiohooks code from instantiating additional
translation paths to/from linear where a linear frame format is already
available, saving valuable CPU cycles

ASTERISK-26419

Change-Id: I6edd5771f0740e758e7eb42558b953f046c01f8f
2016-10-10 11:39:54 -05:00
Badalyan Vyacheslav 188237fa82 res_pjsip_config_wizard: Memory leak in module_unload
Fixed a memory leak. It removes only the first element.
Added a useful feature in vector.h to remove all items
under the CMP through a callback function / macro.

ASTERISK-26453 #close

Change-Id: I84508353463456d2495678f125738e20052da950
2016-10-10 11:05:00 -05:00
Badalyan Vyacheslav c3be9f9fa8 cel_odbc: Fix memory leak on module unload
Change-Id: Ic7a1236eba2408090fdabb5f717b5fa455ead715
2016-10-09 22:32:34 -05:00
George Joseph a0d02f3832 bundled_pjproject: Add tests for programs used by the Makefile, et al.
Added tests for bzip2, tar, patch, sed and nm to configure.ac.

Set DOWNLOAD_TO_STDOUT to a working command line regardless of
whether the download program is wget, curl or fetch.

Added a 'configure.m4' file to the third-party directory which takes
care of calling any third-party project setup.  Had to move some
pjproject_bundled stuff up in configure.ac so it was called before
the third-party configure macro.

The pjproject tarball is now downloaded to the externals_cache_dir if
it was specified on the ./configure command line

Removed regeneration of the pjproject aconfigure file.  It was only
needed for an old patch that no longer applies.

Converted the tests for symbols to explicit tests since we know that
they're now available in the bundled version.  Saves a little time
during configure.

ASTERISK-26416 #close
Reported-by: Corey Farrell

Change-Id: Id1d94251c0155f8dd41b7de7067f35cfbaafbb9b
(cherry picked from commit e6b0053d75)
2016-10-09 21:22:00 -06:00
Corey Farrell 2f2ef9b8a6 logger: Prevent output of verbose messages initiated from rasterisk.
Remote asterisk consoles should only display verbose log messages
created by the daemon.  The first patch for ASTERISK-26410 caused
a couple verbose messages to be printed when the rasterisk process
ended.

ASTERISK-26410

Change-Id: Ie2a1bb3753ad2724c0349ec1a336f52f7117b52a
2016-10-09 22:28:52 -04:00
George Joseph b39bbc0c6a pjproject_bundled: Add MALLOC_DEBUG capability
pjproject_bundled will now use the asterisk memory debugging APIs
if MALLOC_DEBUG is turned on in menuselect.

Because this required stubs for the executable programs and the python
bindings, some Makefile reorganization was needed to properly handle
the dependencies.  As a result, the makefile now individually makes
each of the pjproject libraries separately instead of making them all
in 1 shot.  The only visible change is that there are separate status
lines printed for each library instead oif 1 for all libs.  Also, the
making of the pjproject dependency files was eliminated.  They're not
needed for building unless you're actively modifying pjproject source
files and it makes the build process faster.  Finally, any issues with
parallel builds should be resolved again making the build faster.

Change-Id: Icc5e3d658fbfb00e0a46b44c66dcc2522d5171b0
2016-10-09 18:15:04 -05:00
George Joseph 741c2e1570 alembic: Allow cdr, config and voicemail to exist in the same schema
cdr, config and voicemail are all separate alembic trees.  Because
alembic's default is to use a table named 'alembic_version' to store
the current tree revision, the 3 trees can't exist in the same schema
without stepping on each other.

Now each tree uses 'alembic_version_<tree_name>' as the version table.
Each tree's env.py script now first checks for 'alembic_version'.  If
it finds it AND its revision is in the tree's history, the script
renames it to 'alembic_version_<tree_name>'.  Regardless, the script
then continues with the migration using 'alembic_version_<tree_name>'
and creates that table if it's not found.  The result is that if an
existing 'alembic_version' table was found but it didn't belong to this
tree, it's left alone and 'alembic_version_<tree_name>' is used or
created.

WARNING:  If multiple trees are using the same schema, they MUST NOT
CRU or D any objects with names that might exist in the other trees.
An example would be 'yesno_values' type.  If two trees perform
operations on it, one tree could pull it out from under the other.
Thankfully we currently don't share any names among cdr, config and
voicemail.

NOTE:  Since the env.py scripts in each tree were identical, a common
env.py has been placed in the ast-db-manage directory and a symlink
to it has been placed in each tree directory.

ASTERISK-24311 #close
Reported-by: Dafi Ni

Change-Id: I4d593f000350deb5d21a14fa1e9bc3896844d898
2016-10-07 07:49:35 -05:00
Corey Farrell d236973657 astobj2: Add backtrace to log_bad_ao2.
* Compile __ast_assert_failed unconditionally.
* Use __ast_assert_failed to log messages from log_bad_ao2
* Remove calls to ast_assert(0) that happen after log_bad_ao2 was run.

Change-Id: I48f1af44b2718ad74a421ff75cb6397b924a9751
2016-10-06 16:20:02 -05:00
Alexander Traud 16d9d67329 chan_sip: Honor support of Symmetric Response (rport) for SIP requests.
In the SIP channel driver chan_sip, the default is "auto_force_rport". When no
NAT was detected, for example in case of IPv6, Asterisk uses the IP address
from the headers within the SIP-REGISTER for subsequent SIP signaling. When
the remote party specifies support for Symmetric Response (RFC 3581) via the
parameter "rport", Asterisk should not extract the port from the SIP headers
but reuse the port of the transport. This did not happen because of a typo.

ASTERISK-26438 #close

Change-Id: If6e7891848aaf96666dee5305695f7c6667cd5a6
2016-10-05 04:35:38 -05:00
Joshua Colp 21ee185f57 Merge "Remove "format_ogg_opus: New format"" into 14 2016-09-29 16:14:24 -05:00
Joshua Colp 79adec5d93 Merge "download_externals: Fix issue with re-install" into 14 2016-09-29 15:53:25 -05:00
Kevin Harwell 65d0cbea1b Remove "format_ogg_opus: New format"
This reverts commit 40aa28131b.

ASTERISK-26426 #close

Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5
2016-09-29 14:31:43 -05:00
George Joseph ea29ff9023 download_externals: Fix issue with re-install
Needed to ignore an xmlstarlet return code for optional element.

Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873
Reported-by: Dan Jenkins
2016-09-27 16:13:05 -05:00
Corey Farrell 013414ca4b logger: Output early verbose messages to console.
Verbose messages should be printed to the console if the sublevel is
less than option_verbose.  This fix ensures the welcome message with
copyright and license are printed at daemon and interactive rasterisk
startup.

ASTERISK-26410 #close

Change-Id: Ia44235e30ec328aba92ea2c8a837b094e65c9a03
2016-09-27 16:40:13 -04:00
zuul 0b62db30ce Merge "chan_sip: Resolve externhost not to IPv6; instead go for IPv4." into 14 2016-09-27 14:30:48 -05:00
George Joseph af399b0cb2 Merge "codec_opus: Add download ability to menuselect" into 14 2016-09-27 14:12:30 -05:00
George Joseph ff35463aba Merge "codec_opus: Replace res_format_attr_opus with the one from codec_opus" into 14 2016-09-27 14:12:18 -05:00
George Joseph 9a1f7dab49 Merge "format_ogg_opus: New format" into 14 2016-09-27 14:12:00 -05:00
George Joseph f243be6a8c codec_opus: Add download ability to menuselect
Updated codecs/codecs.xml to add codec_opus to the external
download list.

ASTERISK-26409

Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4
(cherry picked from commit 2cdab0e36eec4997ca3bd85aa09efc477038e31c)
2016-09-27 09:56:30 -05:00
George Joseph 550608db04 codec_opus: Replace res_format_attr_opus with the one from codec_opus
Preparation

ASTERISK-26409

Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3
2016-09-27 09:56:30 -05:00
George Joseph b4642fd6a6 format_ogg_opus: New format
Add Ogg/Opus playback support.

This uses libopusfile in order to be able to read .opus files and play
them back.

Writing/recording support is not present at this time.

ASTERISK-26409

Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955
2016-09-27 09:56:30 -05:00
George Joseph ce6405a234 build_tools: Add ability to download variants to download_externals
Some external packages have multiple variants that apply to different
builds of asterisk.  The DPMA for instance has a "bundled" variant that
needs to be downloaded if asterisk was configured with
--with-pjproject-bundled.

There are 2 ways to specify variants:

If you need the user to make the decision about which variant to
download, simply create multiple menuselect "member" entries like so...

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

<member name="res_digium_phone-bundled" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

Note that the second entry has "-<variant>" appended to the name.
You can then use the existing menuselect facilities to restrict which
members to enable or disable.  Youy probably don't want the user to
enable multiple at the same time.

If you want to hide the details of the variants, the better way to
do it is to create 1 member with "variant" elements.

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
  <member_data>
    <downloader>
      <variants>
        <variant tag="bundled"
          condition='[[ "$PJPROJECT_BUNDLED" = "yes" ]]'/>
      </variants>
    </downloader>
  </member_data>
</member>

The condition must be a bash expression suitable for use with an "if"
statement.  Any environment variable can be used plus those available
in makeopts.

In this case, if asterisk was configured with --with-pjproject-bundled
the bundled variant will be automatically downloaded.  Otherwise the
normal version will be downloaded.

Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e
2016-09-25 12:25:01 -06:00
zuul f029ba6564 Merge "channels/chan_pjsip: fix HANGUPCAUSE function bug." into 14 2016-09-23 18:53:10 -05:00
Aaron An 7bcb1fc940 channels/chan_pjsip: fix HANGUPCAUSE function bug.
HANGUPCAUSE not return 'SIP 200 Ok' when dialed channel answered.
This patch change the call order of ast_queue_control_data
and ast_queue_control in chan_pjsip_incoming_response.

ASTERISK-26396 #close
Reported by: AaronAn
Tested by: AaronAn

Change-Id: Ide2d31723d8d425961e985de7de625694580be61
2016-09-23 14:11:15 -05:00
Alexander Traud 175975e994 chan_sip: Resolve externhost not to IPv6; instead go for IPv4.
For the channel driver chan_sip, you specify externhost=example.com in sip.conf
when your Asterisk is behind a NAT and your IP address is assigned dynamically.
Or stated differently: You do not have a static IP address to use "externaddr"
directly. This NAT support is quite handy but just about IPv4. Previously,
Asterisk resolved "externhost" to any IP version. When the first DNS answer
resolved to an IPv6, Asterisk sent an IPv6 in SIP/SDP for origin (o=) and
connection (c=). This happened in outgoing SIP-REGISTER and while answering
SIP-INVITE. If the remote peer is IPv4-only, it might not handle o=/c= with an
IPv6. This change makes sure, no IPv6 is resolved anymore for "externhost".

ASTERISK-18232 #close
Reported by: Jacek Kowalski
Tested by: Alexander Traud
patches:
 changes.patch submitted by Alessandro Crespi

Change-Id: If68eedbeff65bd1c1d8a9ed921c02ba464b32dac
2016-09-23 09:58:45 -05:00
George Joseph d64edafa63 chan_sip: Address runaway when realtime peers subscribe to mailboxes
Users upgrading from asterisk 13.5 to a later version and who use
realtime with peers that have mailboxes were experiencing runaway
situations that manifested as a continuous stream of taskprocessor
congestion errors, memory leaks and an unresponsive chan_sip.

A related issue was that setting rtcachefriends=no NEVER worked in
asterisk 13 (since the move to stasis).  In 13.5 and earlier, when a
peer tried to register, all of the stasis threads would block and
chan_sip would again become unresponsive.  After 13.5, the runaway
would happen.

There were a number of causes...
* mwi_event_cb was (indirectly) calling build_peer even though calls to
  mwi_event_cb are often caused by build_peer.
* In an effort to prevent chan_sip from being unloaded while messages
  were still in flight, destroy_mailboxes was calling
  stasis_unsubscribe_and_join but in some cases waited forever for the
  final message.
* add_peer_mailboxes wasn't properly marking the existing mailboxes
  on a peer as "keep" so build_peer would always delete them all.
* add_peer_mwi_subs was unsubscribing existing mailbox subscriptions
  then just creating them again.

All of this was causing a flood of subscribes and unsubscribes on
multiple threads all for the same peer and mailbox.

Fixes...
* add_peer_mailboxes now marks mailboxes correctly and build_peer only
  deletes the ones that really are no longer needed by the peer.
* add_peer_mwi_subs now only adds subscriptions marked as "new" instead
  of unsubscribing and resubscribing everything.  It also adds the peer
  object's address to the mailbox instead of its name to the subscription
  userdata so mwi_event_cb doesn't have to call build_peer.

With these changes, with rtcachefriends=yes (the most common setting),
there are no leaks, locks, loops or crashes at shutdown.

rtcachefriends=no still causes leaks but at least it doesn't lock, loop
or crash.  Since making rtcachefriends=no work wasnt in scope for this
issue, further work will have to be deferred to a separate patch.

Side fixes...
 * The ast_lock_track structure had a member named "thread" which gdb
   doesn't like since it conflicts with it's "thread" command.  That
   member was renamed to "thread_id".

ASTERISK-25468 #close

Change-Id: I07519ef7f092629e1e844f855abd279d6475cdd0
2016-09-23 07:53:23 -05:00
zuul d4422a2253 Merge "core: Ensure presencestate subtype and message are NULL." into 14 2016-09-22 10:06:37 -05:00
Joshua Colp 94b655ab05 Merge "res_odbc: Make pooling option deprecation notice more useful." into 14 2016-09-22 07:10:42 -05:00
zuul 5b27d064af Merge "cdr_mysql: fix UTC support" into 14 2016-09-21 17:11:56 -05:00
zuul c526e3d94c Merge "logger: Simplify ast_callid handling code." into 14 2016-09-21 15:15:12 -05:00
Joshua Colp 64df75b02c core: Ensure presencestate subtype and message are NULL.
When retrieving presence state information there is no
guarantee that the subtype and message passed in are
set to NULL. This change ensures they are.

ASTERISK-26397 #close

Change-Id: If38cd730e409e9a9b6eb9adef6591d15a9e61f86
2016-09-21 19:24:08 +00:00
zuul 79070e486d Merge "logger: Always enable verbose for console channel." into 14 2016-09-21 14:19:03 -05:00
zuul 6b8de13946 Merge "logger: Fix default console settings." into 14 2016-09-21 12:25:09 -05:00
Joshua Colp f63ff293eb res_odbc: Make pooling option deprecation notice more useful.
This changes the notice for the deprecation of the old
pooling options to point to the new option for doing
pooling. This gives a clearer direction as to what to
look into.

ASTERISK-26389 #close

Change-Id: I2ca9cdfdcd75aec170a7db9d5ff69a4cd25b7c10
2016-09-21 11:05:42 -05:00