asterisk/asterisk.git
2 years agochan_pjsip: Fix ability to send UPDATE on COLP
George Joseph [Thu, 29 Jun 2017 19:50:14 +0000 (13:50 -0600)]
chan_pjsip:  Fix ability to send UPDATE on COLP

When connected_line_method is "invite", we're supposed to determine
if the client can support UPDATE and if it can, send UPDATE instead
of INVITE to avoid the SDP renegotiation.  Not only was pjproject
not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing
that invite_tsx wasn't NULL which isn't always the case.

* Updated chan_pjsip/update_connected_line_information to drop the
  requirement that invite_tsx isn't NULL.
* Submitted patch to pjproject sip_inv.c that sets the
  PJSIP_INV_SUPPORT_UPDATE flag correctly.
* Updated pjsip.conf.sample to clarify what happens when "invite"
  is specified.

ASTERISK-27095

Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560

2 years agoMerge "app_voicemail: IMAP connection control"
Jenkins2 [Thu, 29 Jun 2017 14:51:54 +0000 (09:51 -0500)]
Merge "app_voicemail: IMAP connection control"

2 years agochan_pjsip: Add support for multiple streams of the same type.
Mark Michelson [Tue, 30 May 2017 14:12:47 +0000 (09:12 -0500)]
chan_pjsip: Add support for multiple streams of the same type.

The stream topology (list of streams and order) is now stored with the
configured PJSIP endpoints and used during the negotiation process.

Media negotiation state information has been changed to be stored
in a separate object. Two of these objects exist at any one time
on a session. The active media state information is what was previously
negotiated and the pending media state information is what the
media state will become if negotiation succeeds. Streams and other
state information is stored in this object using the index (or
position) of each individual stream for easy lookup.

The ability for a media type handler to specify a callback for
writing has been added as well as the ability to add file
descriptors with a callback which is invoked when data is available
to be read on them. This allows media logic to live outside of
the chan_pjsip module.

Direct media has been changed so that only the first audio and
video stream are directly connected. In the future once the RTP
engine glue API has been updated to know about streams each individual
stream can be directly connected as appropriate.

Media negotiation itself will currently answer all the provided streams
on an offer within configured limits and on an offer will use the
topology created as a result of the disallow/allow codec lines.

If a stream has been removed or declined we will now mark it as such
within the resulting SDP.

Applications can now also request that the stream topology change.
If we are told to do so we will limit any provided formats to the ones
configured on the endpoint and send a re-invite with the new topology.

Two new configuration options have also been added to PJSIP endpoints:

max_audio_streams: determines the maximum number of audio streams to
offer/accept from an endpoint. Defaults to 1.

max_video_streams: determines the maximum number of video streams to
offer/accept from an endpoint. Defaults to 1.

ASTERISK-27076

Change-Id: I8afd8dd2eb538806a39b887af0abd046266e14c7

2 years agores/res_pjsip_t38: fix incorrect increment of media_count
Torrey Searle [Tue, 27 Jun 2017 15:46:43 +0000 (17:46 +0200)]
res/res_pjsip_t38: fix incorrect increment of media_count

The T38 sdp callback incorrectly has a side effect of incrementing
the media_count.  This can lead to core dumps.

Change-Id: I7bb2f4987de4046ec52cfc34e5ea0662dae32af8

2 years agoMerge "res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact"
Jenkins2 [Thu, 22 Jun 2017 21:01:52 +0000 (16:01 -0500)]
Merge "res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact"

2 years agoapp_voicemail: IMAP connection control
Alexei Gradinari [Mon, 19 Jun 2017 22:21:29 +0000 (18:21 -0400)]
app_voicemail: IMAP connection control

A new global option "imap_poll_logout" was added to specify whether need to
disconnect from the IMAP server after polling of mailboxes.

ASTERISK-27068 #close

Closing IMAP connection after loading mailbox from voicemail.conf

ASTERISK-24052 #close

Change-Id: Ib7558ba04516240a32b65f42e9be64372a0ae12a

2 years agores_pjsip_mwi.c: Eliminate RAII_VAR in contact delete observer
Richard Mudgett [Wed, 21 Jun 2017 22:57:11 +0000 (17:57 -0500)]
res_pjsip_mwi.c: Eliminate RAII_VAR in contact delete observer

Change-Id: I0bc97c6608de1d1a4228826b3b3be43f162f05f3

2 years agores_pjsip_mwi: update unsolicited MWI subscriptions on updating contact
Alexei Gradinari [Fri, 16 Jun 2017 23:08:30 +0000 (19:08 -0400)]
res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact

Do not need to unsubscribe/subscribe on creating the ednpoint's contact.
The modified function create_mwi_subscriptions_for_endpoint adds
the subscription only if it does not exist.

The subscriptions aren't added for active contacts
which are retrieved on startup from realtime
if mwi_disable_initial_unsolicited=yes.
Because the mwi_contact_added is not called.
So the subscriptions also should be created on updating contact.

ASTERISK-26230 #close

Change-Id: I47e265af9296ca09aa42a316fdacac104148cee4

2 years agoMerge "bridge: stuck channel(s) after failed attended transfer"
Jenkins2 [Wed, 21 Jun 2017 22:57:21 +0000 (17:57 -0500)]
Merge "bridge: stuck channel(s) after failed attended transfer"

2 years agoMerge "core_local: local channel data not being properly unref'ed and unlocked"
Jenkins2 [Wed, 21 Jun 2017 22:30:01 +0000 (17:30 -0500)]
Merge "core_local: local channel data not being properly unref'ed and unlocked"

2 years agocore_local: local channel data not being properly unref'ed and unlocked
Kevin Harwell [Tue, 20 Jun 2017 21:05:08 +0000 (16:05 -0500)]
core_local: local channel data not being properly unref'ed and unlocked

In an earlier version of Asterisk a local channel [un]lock all functions were
added in order to keep a crash from occurring when a channel hung up too early
during an attended transfer. Unfortunately, when a transfer failure occurs and
depending on the timing, the local channels sometime do not get properly
unlocked and deref'ed after being locked and ref'ed. This happens because the
underlying local channel structure gets NULLed out before unlocking.

This patch reworks those [un]lock functions and makes sure the values that get
locked and ref'ed later get unlocked and deref'ed.

ASTERISK-27074 #close

Change-Id: Ice96653e29bd9d6674ed5f95feb6b448ab148b09

2 years agobridge: stuck channel(s) after failed attended transfer
Kevin Harwell [Tue, 20 Jun 2017 21:01:48 +0000 (16:01 -0500)]
bridge: stuck channel(s) after failed attended transfer

If an attended transfer failed it was possible for some of the channels
involved to get "stuck" because Asterisk was not hanging up the transfer target.

This patch ensures Asterisk hangs up the transfer target when an attended
transfer failure occurs.

ASTERISK-27075 #close

Change-Id: I98a6ecd92d3461ab98c36f0d9451d23adaf3e5f9

2 years agoMerge "res_corosync: Change thread stack size"
Jenkins2 [Tue, 20 Jun 2017 23:18:19 +0000 (18:18 -0500)]
Merge "res_corosync: Change thread stack size"

2 years agoMerge "cdr: fix mistake spelling of a word for Unanswered."
Jenkins2 [Tue, 20 Jun 2017 14:25:17 +0000 (09:25 -0500)]
Merge "cdr: fix mistake spelling of a word for Unanswered."

2 years agoMerge "res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact"
Joshua Colp [Tue, 20 Jun 2017 10:47:46 +0000 (05:47 -0500)]
Merge "res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact"

2 years agoMerge "res_stasis: Plug reference leak on stolen channels"
Joshua Colp [Mon, 19 Jun 2017 21:49:39 +0000 (16:49 -0500)]
Merge "res_stasis:  Plug reference leak on stolen channels"

2 years agocdr: fix mistake spelling of a word for Unanswered.
Rodrigo Ramírez Norambuena [Mon, 19 Jun 2017 16:28:18 +0000 (12:28 -0400)]
cdr: fix mistake spelling of a word for Unanswered.

Change-Id: I7a610bef369924523a445c7e849ee88cc45dc5df

2 years agoMerge "SDP: Add get/set option calls for RTP sched context per type."
George Joseph [Mon, 19 Jun 2017 14:27:43 +0000 (09:27 -0500)]
Merge "SDP: Add get/set option calls for RTP sched context per type."

2 years agoMerge "res_pjsip: New endpoint option "notify_early_inuse_ringing""
Jenkins2 [Mon, 19 Jun 2017 14:09:58 +0000 (09:09 -0500)]
Merge "res_pjsip: New endpoint option "notify_early_inuse_ringing""

2 years agoMerge "app_voicemail: IMAP logout on reload/unload"
Jenkins2 [Mon, 19 Jun 2017 13:52:12 +0000 (08:52 -0500)]
Merge "app_voicemail: IMAP logout on reload/unload"

2 years agores_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact
Alexei Gradinari [Mon, 12 Jun 2017 21:17:38 +0000 (17:17 -0400)]
res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact

If the endpoint's last contact is deleted unsolicited MWI has to be
unsubscribed.

ASTERISK-27051 #close

Change-Id: I33e174e0b9dba0998927d16d6d100fda5c7254e0

2 years agoMerge "formats/format_g729: Fix typo in comment"
Joshua Colp [Fri, 16 Jun 2017 21:37:18 +0000 (16:37 -0500)]
Merge "formats/format_g729: Fix typo in comment"

2 years agores_stasis: Plug reference leak on stolen channels
George Joseph [Fri, 16 Jun 2017 14:31:04 +0000 (08:31 -0600)]
res_stasis:  Plug reference leak on stolen channels

When a stasis channel is stolen by another app, the control
structure is unreffed but never unlinked from the app_controls
container.  This causes the channel reference to leak.

Added OBJ_UNLINK to the callback in channel_stolen_cb.

Also added some additional channel lifecycle debug messages to
channel.c.

ASTERISK-27059 #close
Repoorted-by: George Joseph

Change-Id: Ib820936cd49453f20156971785e7f4f182c56e14

2 years agoformats/format_g729: Fix typo in comment
Matthew Fredrickson [Fri, 16 Jun 2017 19:56:37 +0000 (14:56 -0500)]
formats/format_g729: Fix typo in comment

There was a typo in a comment.  This commit is to fix the typo.

ASTERISK-27060 #close

Change-Id: Ic2699f8dbeaacd58ccb6ec3203e853e1babe3235

2 years agoCore/PBX: Deadlock between dialplan execution and application unregistration.
Frederic LE FOLL [Thu, 8 Jun 2017 17:28:12 +0000 (19:28 +0200)]
Core/PBX: Deadlock between dialplan execution and application unregistration.

Not easy to reproduce, but we have noticed deadlocks when unloading a module
while dialplan is handling a request.

The deadlock is between :
1) Dialplan execution: pbx_extension_helper() first taking conlock,
then pbx_findapp() [when called] asking for lock on apps list.
2) Application unregistration: ast_unregister_application() first taking lock
on apps list, then unreference_cached_app() [when called] asking for conlock.

As a protection, I suggest to modify ast_unregister_application(), so that it
anticipates the need of conlock, before taking the lock on apps list.
The side effect is a longer unavailability of conlock when unregistering an
application.

ASTERISK-27041

Change-Id: I0db0f1eb320da6a5758cce3a47d765be1face8e2

2 years agoMerge "SDP: Search for the ice-lite attribute in the right place."
Joshua Colp [Fri, 16 Jun 2017 17:00:38 +0000 (12:00 -0500)]
Merge "SDP: Search for the ice-lite attribute in the right place."

2 years agoMerge changes from topic 'sdp_api_adjustments'
Jenkins2 [Fri, 16 Jun 2017 16:51:41 +0000 (11:51 -0500)]
Merge changes from topic 'sdp_api_adjustments'

* changes:
  SDP: Set the remote c= line in RTP instance.
  SDP: Add t= line in sdp_create_from_state()
  stream: Ignore declined streams for some topology calls.

2 years agoMerge "stream: Add ast_stream_topology_del_stream() and unit test."
Jenkins2 [Fri, 16 Jun 2017 16:50:32 +0000 (11:50 -0500)]
Merge "stream: Add ast_stream_topology_del_stream() and unit test."

2 years agores_pjsip: New endpoint option "notify_early_inuse_ringing"
Alexei Gradinari [Mon, 12 Jun 2017 14:23:56 +0000 (10:23 -0400)]
res_pjsip: New endpoint option "notify_early_inuse_ringing"

This option was added to control whether to notify dialog-info state
'early' or 'confirmed' on Ringing when already INUSE.
The value "yes" is useful for some SIP phones (Cisco SPA)
to be able to indicate and pick up ringing devices.

ASTERISK-26919 #close

Change-Id: Ie050bc30023543c7dfb4365c5be3ce58c738c711

2 years agoMerge "res_ari: Add "module loaded" check to ari stubs"
Jenkins2 [Fri, 16 Jun 2017 16:12:48 +0000 (11:12 -0500)]
Merge "res_ari:  Add "module loaded" check to ari stubs"

2 years agoapp_voicemail: IMAP logout on reload/unload
Alexei Gradinari [Thu, 15 Jun 2017 18:48:13 +0000 (14:48 -0400)]
app_voicemail: IMAP logout on reload/unload

Closing IMAP connection on module reload or unload.

ASTERISK-24052 #close

Change-Id: I2a40182aa9ef249fa6865d33570430e9ada68525

2 years agores_corosync: Change thread stack size
Jan Friesse [Thu, 30 Mar 2017 14:33:51 +0000 (16:33 +0200)]
res_corosync: Change thread stack size

In Corosync 2.x libraries were changed to use LibQB IPC.
Sadly LibQB IPC doesn't support copy-free access to received buffer, so
Corosync libraries were rewritten to use stack as buffer. Mostly the
needed stack size is quite small, but for all *_dispatch functions, 1MiB
is needed.

Asterisk function ast_pthread_create_background set stack size for new
thread to much smaller AST_BACKGROUND_STACKSIZE (~500KiB).

This results in Asterisk crash when running with Corosync 2.x.

Patch solves this issue by creating it's own version of
ast_pthread_create_background which sets stack size to much higher value
(actually it's AST_BACKGROUND_STACKSIZE + 3MiB).

Another problem may appear when "corosync show members" netconsole
command is executed. It is also executed in thread and also has only
500KiB stack size. Sadly it calls corosync_cfg_get_node_addrs which
again needs at least 1MiB stack.

Solution is to use HAVE_COROSYNC_CFG_STATE_TRACK as a discriminator
between Corosync 1.x and 2.x. If 1.x is found, nothing changes. If 2.x
is found, NodeID is displayed instead of IP address.

ASTERISK-25370 #close
Reported by: mdu113

Change-Id: Id95b0d21ab6e708e7d74ad8786c587211676fa08

2 years agoMerge "chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read."
Jenkins2 [Fri, 16 Jun 2017 12:51:17 +0000 (07:51 -0500)]
Merge "chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read."

2 years agores_ari: Add "module loaded" check to ari stubs
George Joseph [Tue, 13 Jun 2017 16:33:34 +0000 (10:33 -0600)]
res_ari:  Add "module loaded" check to ari stubs

The recent change to make the use of LOAD_DECLINE more consistent
caused res_ari to unload itself before declining if the ari.conf
file wasn't found.  The ari stubs though still tried to use the
configuration resulting in segfaults.

This patch creates a new CHECK_ARI_MODULE_LOADED macro which tests
to see if res_ari is actually loaded and causes the stubs to also
decline if it isn't.  The macro was then added to the mustache
template's "load_module" function.

ASTERISK-27026 #close
Reported-by: Ronald Raikes

Change-Id: I263d56efa628ee3c411bdcd16d49af6260c6c91d

2 years agoMerge "channel: Fix reference counting in ast_channel_suppress."
Joshua Colp [Thu, 15 Jun 2017 21:24:55 +0000 (16:24 -0500)]
Merge "channel: Fix reference counting in ast_channel_suppress."

2 years agoMerge "res_pjsip_pubsub: Fix reference to released endpoint"
Jenkins2 [Thu, 15 Jun 2017 20:24:25 +0000 (15:24 -0500)]
Merge "res_pjsip_pubsub:  Fix reference to released endpoint"

2 years agoMerge "bridge: Add a deferred queue."
Joshua Colp [Thu, 15 Jun 2017 20:02:26 +0000 (15:02 -0500)]
Merge "bridge: Add a deferred queue."

2 years agochan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read.
Richard Mudgett [Thu, 15 Jun 2017 17:33:22 +0000 (12:33 -0500)]
chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read.

The construction of the returned string assumed incorrectly that the
supplied buffer would always be initialized as an empty string.  If it is
not an empty string we could overrun the supplied buffer by the length of
the non-empty buffer string plus one.  It is also theoreticaly possible
for the supplied buffer to be overrun by a string terminator during a read
operation even if the supplied buffer is an empty string.

* Fix the assumption that the supplied buffer would already be an empty
string.  The buffer is not guaranteed to contain an empty string by all
possible callers.

* Fix string terminator buffer overrun potential.

Change-Id: If6a0806806527678c8554b1dcb34fd7808aa95c9

2 years agoSDP: Add get/set option calls for RTP sched context per type.
Richard Mudgett [Thu, 8 Jun 2017 16:38:33 +0000 (11:38 -0500)]
SDP: Add get/set option calls for RTP sched context per type.

Change-Id: I82dc75c63c48904e9e5a49e2205dcc06e88487e4

2 years agoSDP: Search for the ice-lite attribute in the right place.
Richard Mudgett [Thu, 11 May 2017 23:49:09 +0000 (18:49 -0500)]
SDP: Search for the ice-lite attribute in the right place.

* Pulled finding the rtcp-mux attribute flag out of the ICE candidate for
loop.  Also ordered the RTCP ICE candidate skip test to fail earlier.

Change-Id: I8905d9c68563027a46cd3ae14dbcc27e9c814809

2 years agoSDP: Set the remote c= line in RTP instance.
Richard Mudgett [Thu, 11 May 2017 23:46:52 +0000 (18:46 -0500)]
SDP: Set the remote c= line in RTP instance.

Change-Id: I23b646392082deab65bedeb19b12dcbcb9216d0c

2 years agostream: Add ast_stream_topology_del_stream() and unit test.
Richard Mudgett [Sat, 10 Jun 2017 00:03:05 +0000 (19:03 -0500)]
stream: Add ast_stream_topology_del_stream() and unit test.

Change-Id: If07e3c716a2e3ff85ae905c17572ea6ec3cdc1f9

2 years agoSDP: Add t= line in sdp_create_from_state()
Richard Mudgett [Thu, 11 May 2017 19:09:06 +0000 (14:09 -0500)]
SDP: Add t= line in sdp_create_from_state()

Change-Id: I4060391328a893101ed87d0d9bacbbab4fd8b141

2 years agostream: Ignore declined streams for some topology calls.
Richard Mudgett [Wed, 14 Jun 2017 18:07:17 +0000 (13:07 -0500)]
stream: Ignore declined streams for some topology calls.

* Made ast_format_cap_from_stream_topology() not include any formats from
declined streams.

* Made ast_stream_topology_get_first_stream_by_type() ignore declined
streams to return the first active stream of the type.

* Updated unit tests to check these changes have the expected effect.

Change-Id: Iabbc6a3e8edf263a25fd3056c3c614407c7897df

2 years agoMerge "app_voicemail.c: Fix compile error when IMAP enabled."
George Joseph [Thu, 15 Jun 2017 14:06:23 +0000 (09:06 -0500)]
Merge "app_voicemail.c: Fix compile error when IMAP enabled."

2 years agoMerge "app_voicemail: IMAP logout on MWI unsubscribe"
George Joseph [Thu, 15 Jun 2017 14:05:57 +0000 (09:05 -0500)]
Merge "app_voicemail: IMAP logout on MWI unsubscribe"

2 years agoMerge "res_pjsip_refer/session: Calls dropped during transfer"
Jenkins2 [Thu, 15 Jun 2017 13:12:43 +0000 (08:12 -0500)]
Merge "res_pjsip_refer/session: Calls dropped during transfer"

2 years agochannel: Fix reference counting in ast_channel_suppress.
Joshua Colp [Thu, 15 Jun 2017 12:32:32 +0000 (12:32 +0000)]
channel: Fix reference counting in ast_channel_suppress.

The ast_channel_suppress function wrongly decremented the
reference count of the underlying structure used to keep
track of what should be suppressed on a channel if the
function was called multiple times on the same channel.

This change cleans up the reference counting a bit so
this no longer occurs.

ASTERISK-27016

Change-Id: I2eed4077cb4916e6626f9f120b63b963acc5c136

2 years agoMerge "res_rtp_asterisk: Fix ssrc change for rtcp srtp"
George Joseph [Wed, 14 Jun 2017 21:05:37 +0000 (16:05 -0500)]
Merge "res_rtp_asterisk:  Fix ssrc change for rtcp srtp"

2 years agoMerge "res_pjsip_session: Correct inverted test in session_outgoing_nat_hook"
Jenkins2 [Wed, 14 Jun 2017 20:54:22 +0000 (15:54 -0500)]
Merge "res_pjsip_session:  Correct inverted test in session_outgoing_nat_hook"

2 years agoMerge "res_pjsip_transport_websocket: Add NULL check in get_write_timeout"
Jenkins2 [Wed, 14 Jun 2017 20:24:32 +0000 (15:24 -0500)]
Merge "res_pjsip_transport_websocket: Add NULL check in get_write_timeout"

2 years agoMerge "pjproject_bundled: Use the asterisk github mirror for download"
George Joseph [Wed, 14 Jun 2017 19:42:32 +0000 (14:42 -0500)]
Merge "pjproject_bundled:  Use the asterisk github mirror for download"

2 years agoapp_voicemail.c: Fix compile error when IMAP enabled.
Richard Mudgett [Wed, 14 Jun 2017 17:34:06 +0000 (12:34 -0500)]
app_voicemail.c: Fix compile error when IMAP enabled.

Change-Id: I2703f15b4099b4210c68eccf293105d1975c1fc1

2 years agoapp_voicemail: IMAP logout on MWI unsubscribe
Alexei Gradinari [Mon, 12 Jun 2017 22:55:15 +0000 (18:55 -0400)]
app_voicemail: IMAP logout on MWI unsubscribe

Closing IMAP connection on MWI unsubscribe.

ASTERISK-24052 #close

Change-Id: I4ff964026002b2817b48c20fb4239f0a880228fd

2 years agores_pjsip_pubsub: Fix reference to released endpoint
George Joseph [Wed, 14 Jun 2017 16:12:21 +0000 (10:12 -0600)]
res_pjsip_pubsub:  Fix reference to released endpoint

destroy_subscription was attempting to get the id of the
subscription tree's endpoint after we'd already called ao2_cleanup
on it causing a segfault.

Moved the cleanup until after the debug statement and since
endpoint could also be NULL at this point, check for that as well.

ASTERISK-27057 #close
Reported-by: Ryan Smith

Change-Id: Ice0a7727f560cf204d870a774c6df71e159b1678

2 years agores_pjsip_session: Correct inverted test in session_outgoing_nat_hook
George Joseph [Wed, 14 Jun 2017 13:29:00 +0000 (07:29 -0600)]
res_pjsip_session:  Correct inverted test in session_outgoing_nat_hook

There was a typo introduced in commit 776ffd77 which was preventing
the transport's external media address from being used.

ASTERISK-27024 #close
Reported-by: Christopher van de Sande
patches:
patch.diff submitted by Florian Floimair (license 6892)

Change-Id: I7ec617171eaa2d86d2680b00cf37d5088adafc27

2 years agoMerge "CFLAGS for BIND8 support"
Joshua Colp [Wed, 14 Jun 2017 16:07:04 +0000 (11:07 -0500)]
Merge "CFLAGS for BIND8 support"

2 years agores_rtp_asterisk: Fix ssrc change for rtcp srtp
George Joseph [Wed, 14 Jun 2017 13:54:45 +0000 (07:54 -0600)]
res_rtp_asterisk:  Fix ssrc change for rtcp srtp

It looks like there was a copy/paste error in ast_rtp_change_source
where if there was a rtcp srtp instance, instead of updating its
ssrc we were updating the srtp instance ssrc twice.

ASTERISK-27022 #close
Reported-by: Michael Walton

Change-Id: Ic88f3aee7227b401c58745ac265ff92c19620095

2 years agobridge: Add a deferred queue.
Joshua Colp [Thu, 8 Jun 2017 19:38:51 +0000 (19:38 +0000)]
bridge: Add a deferred queue.

This change adds a deferred queue to bridging. If a bridge
technology determines that a frame can not be written and
should be deferred it can indicate back to bridging to do so.
Bridging will then requeue any deferred frames upon a new
channel joining the bridge.

This change has been leveraged for T.38 request negotiate
control frames. Without the deferred queue there is a race
condition between the bridge receiving the T.38 request
negotiate and the second channel joining and being in the
bridge. If the channel is not yet in the bridge then the T.38
negotiation fails.

A unit test has also been added that confirms that a T.38
request negotiate control frame is deferred when no other
channel is in the bridge and that it is requeued when a new
channel joins the bridge.

ASTERISK-26923

Change-Id: Ie05b08523f399eae579130f4a5f562a344d2e415

2 years agores_pjsip_refer/session: Calls dropped during transfer
Kevin Harwell [Tue, 13 Jun 2017 19:17:29 +0000 (14:17 -0500)]
res_pjsip_refer/session: Calls dropped during transfer

When doing an attended transfer it's possible for the transferer, after
receiving an accepted response from Asterisk, to send a BYE to Asterisk,
which can then be processed before Asterisk has time to start and/or
complete the transfer process. This of course causes the transfer to not
complete successfully, thus dropping the call.

This patch makes it so any BYEs received from the transferer, after the REFER,
that initiate a session end are deferred until the transfer is complete. This
allows the channel that would have otherwise been hung up by Asterisk to
remain available throughout the transfer process.

ASTERISK-27053 #close

Change-Id: I43586db79079457d92d71f1fd993be9a3b409d5a

2 years agopjproject_bundled: Use the asterisk github mirror for download
George Joseph [Tue, 13 Jun 2017 15:47:43 +0000 (09:47 -0600)]
pjproject_bundled:  Use the asterisk github mirror for download

We now mirror the pjproject tarball and md5 at
https://github.com/asterisk/third-party/tree/master/pjproject

To improve download reliability, we now get the tarball from
our mirror instead of from pjsip.org.

ASTERISK-27052 #close
Reported-by: 'alex'

Change-Id: I60236587a8935bfa71fcc391f4e2ecb31918c08a

2 years agores_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled
Alexei Gradinari [Mon, 12 Jun 2017 14:57:24 +0000 (10:57 -0400)]
res_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled

If sending unsolicited mwi to all endpoints on startup is disabled
(mwi_disable_initial_unsolicited=yes) do not need to create subscriptions.
If there are many (thousands) realtime endpoints configured with unsolicited mwi
and Vociemail Storage configured as ODBC or IMAP there will be huge number of
DB/IMAP requests on startup.

ASTERISK-26230 #close

Change-Id: I50ae909639e3ee298b931a54def4b2b9e0fb86c5

2 years agoMerge "pjsip: Extend 'asymmetric_rtp_codec' option to include us changing."
Jenkins2 [Tue, 13 Jun 2017 14:17:10 +0000 (09:17 -0500)]
Merge "pjsip: Extend 'asymmetric_rtp_codec' option to include us changing."

2 years agoMerge "BuildSystem: Add patches to allow building with recent LibreSSL"
Jenkins2 [Tue, 13 Jun 2017 10:47:10 +0000 (05:47 -0500)]
Merge "BuildSystem: Add patches to allow building with recent LibreSSL"

2 years agoMerge "BuildSystem: Fix build on FreeBSD due to missing crypt.h"
Jenkins2 [Mon, 12 Jun 2017 21:33:58 +0000 (16:33 -0500)]
Merge "BuildSystem: Fix build on FreeBSD due to missing crypt.h"

2 years agoMerge "codecs.conf.sample: Fix max_bandwidth speling error"
Jenkins2 [Mon, 12 Jun 2017 21:07:50 +0000 (16:07 -0500)]
Merge "codecs.conf.sample: Fix max_bandwidth speling error"

2 years agoMerge "eventfd: Disable during cross compilation"
Joshua Colp [Mon, 12 Jun 2017 20:32:12 +0000 (15:32 -0500)]
Merge "eventfd: Disable during cross compilation"

2 years agocodecs.conf.sample: Fix max_bandwidth speling error
Sean Bright [Sun, 11 Jun 2017 17:06:17 +0000 (13:06 -0400)]
codecs.conf.sample: Fix max_bandwidth speling error

Reported by Sylvain Boily via asterisk-dev mailing list.

Change-Id: Idc7623f335aea3e144dd369ba383b9a757480a9d

2 years agores_pjsip_transport_websocket: Add NULL check in get_write_timeout
Jørgen H [Thu, 8 Jun 2017 22:31:47 +0000 (22:31 +0000)]
res_pjsip_transport_websocket: Add NULL check in get_write_timeout

Added check for NULL return value when calling
ast_sorcery_retrieve_by_id in function get_write_timeout

ASTERISK-27046

Change-Id: I9357717278da631c3a1cb502c412693929b0cb41

2 years agoBuildSystem: Add patches to allow building with recent LibreSSL
Guido Falsi [Thu, 8 Jun 2017 15:54:46 +0000 (17:54 +0200)]
BuildSystem: Add patches to allow building with recent LibreSSL

Add some #if defined checks which allow building against LibreSSL.
These patchess come from OpenBSD ports:
https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/telephony/asterisk/patches/

ASTERISK-27043 #close
Reported by: OpenBSD ports

Change-Id: I2f6c08a5840b85ad4d2b75370b947ddde7a9a572

2 years agoCFLAGS for BIND8 support
David M. Lee [Tue, 6 Jun 2017 19:54:43 +0000 (14:54 -0500)]
CFLAGS for BIND8 support

Some systems (like macOS) require BIND_8_COMPAT to be defined so that
the nameser libraries are, well, BIND8 compatible.

Change-Id: If79fc27a64f90de1835b5aa3aadfa9be22bd16b0

2 years agoMerge "CHANGES: correct version for a new option 'refer_blind_progress'"
Jenkins2 [Thu, 8 Jun 2017 16:18:18 +0000 (11:18 -0500)]
Merge "CHANGES: correct version for a new option 'refer_blind_progress'"

2 years agoBuildSystem: Fix build on FreeBSD due to missing crypt.h
Guido Falsi [Thu, 8 Jun 2017 15:36:00 +0000 (17:36 +0200)]
BuildSystem: Fix build on FreeBSD due to missing crypt.h

FreeBSD does not include a crypt.h include file. Definitions for
crypt() and crypt_r() are in unistd.h

ASTERISK-27042 #close

Change-Id: Ib307ee5e384870c6af50efa89fb73722dd0c3a7e

2 years agochan_pjsip: Update device state when in early media.
Joshua Colp [Wed, 7 Jun 2017 20:19:05 +0000 (20:19 +0000)]
chan_pjsip: Update device state when in early media.

The chan_pjsip module uses a calculation approach for
determining device state. This means that in situations
where we would expect device state to change we need to
tell the core to query. A scenario that was missed is
when early media was signaled.

This change adds the notification for the core to
query device state when we are told that early media
is being provided.

ASTERISK-27039

Change-Id: Iafebfd152894966344ff2e950a3cee9f59a3eb6f

2 years agoeventfd: Disable during cross compilation
Sean Bright [Wed, 7 Jun 2017 19:32:57 +0000 (15:32 -0400)]
eventfd: Disable during cross compilation

Reported by Lonnie Abelbeck <lonnie@abelbeck.com> via private e-mail.

Change-Id: Icc80f12b8d8d591e14a8e0ed9f1c02cbd193a89b

2 years agoCHANGES: correct version for a new option 'refer_blind_progress'
Alexei Gradinari [Wed, 7 Jun 2017 16:21:10 +0000 (12:21 -0400)]
CHANGES: correct version for a new option 'refer_blind_progress'

Change-Id: If4817d26a8974610827624fb8a4e56d681d6bf97

2 years agopjsip: Extend 'asymmetric_rtp_codec' option to include us changing.
Joshua Colp [Tue, 6 Jun 2017 12:04:21 +0000 (12:04 +0000)]
pjsip: Extend 'asymmetric_rtp_codec' option to include us changing.

PJSIP support in Asterisk differs from chan_sip in that it
allows media to be sent as-is without transcoding provided
the codecs were negotiated in the SDP. This is allowed
according to the RFC. Support for this differs quite a lot
though and some endpoints do not handle it well.

This change extends the 'asymmetric_rtp_codec' option to
also cover this case. When set to no (the default) the code
behaves as chan_sip does - the best codec is selected and
we will only ever send that, unless we change what we are
sending if the remote side changes. When set to yes we
will send media as-is without transcoding if the codec
has been negotiated in the SDP.

ASTERISK-26996

Change-Id: Ib1647f6902a0843e8c435946f831c2159e8d1d51

2 years agoMerge "res_pjsip: Add support for returning only reachable contacts and use it."
Joshua Colp [Wed, 7 Jun 2017 13:33:53 +0000 (08:33 -0500)]
Merge "res_pjsip: Add support for returning only reachable contacts and use it."

2 years agoMerge "channel: ast_write frame wrongly freed after call to audiohooks"
Jenkins2 [Wed, 7 Jun 2017 13:07:10 +0000 (08:07 -0500)]
Merge "channel: ast_write frame wrongly freed after call to audiohooks"

2 years agores_rtp_multicast: Use consistent timestamps when possible
Sean Bright [Tue, 6 Jun 2017 15:04:44 +0000 (11:04 -0400)]
res_rtp_multicast: Use consistent timestamps when possible

When a frame destined for a MulticastRTP channel does not have timing
information (such as when an 'originate' is done), we generate the RTP
timestamps ourselves without regard to the number of samples we are
about to send.

Instead, use the same method as res_rtp_asterisk and 'predict' a
timestamp given the number of samples. If the difference between the
timestamp that we generate and the one we predict is within a specific
threshold, use the predicted timestamp so that we end up with timestamps
that are consistent with the number of samples we are actually sending.

Change-Id: I2bf0db3541b1573043330421cbb114ff0f22ec1f

2 years agores_pjsip: Add support for returning only reachable contacts and use it.
Joshua Colp [Wed, 31 May 2017 15:41:45 +0000 (15:41 +0000)]
res_pjsip: Add support for returning only reachable contacts and use it.

This introduces the ability for PJSIP code to specify filtering flags
when retrieving PJSIP contacts. The first flag for use causes the
query code to only retrieve contacts that are not unreachable. This
change has been leveraged by both the Dial() process and the
PJSIP_DIAL_CONTACTS dialplan function so they will now only attempt
calls to contacts which are not unreachable.

ASTERISK-26281

Change-Id: I8233b4faa21ba3db114f5a42e946e4b191446f6c

2 years agoMerge "format: Reintroduce smoother flags"
Jenkins2 [Tue, 6 Jun 2017 13:59:37 +0000 (08:59 -0500)]
Merge "format: Reintroduce smoother flags"

2 years agoMerge "Confbridge: Add "sfu" video mode to bridge profile options."
Joshua Colp [Tue, 6 Jun 2017 12:05:13 +0000 (07:05 -0500)]
Merge "Confbridge: Add "sfu" video mode to bridge profile options."

2 years agoMerge "Add primitive SFU support to bridge_softmix."
Jenkins2 [Tue, 6 Jun 2017 11:57:24 +0000 (06:57 -0500)]
Merge "Add primitive SFU support to bridge_softmix."

2 years agoMerge "res_srtp: Add support for libsrtp2"
Joshua Colp [Tue, 6 Jun 2017 10:01:17 +0000 (05:01 -0500)]
Merge "res_srtp: Add support for libsrtp2"

2 years agochannel: ast_write frame wrongly freed after call to audiohooks
Kevin Harwell [Mon, 5 Jun 2017 16:27:32 +0000 (11:27 -0500)]
channel: ast_write frame wrongly freed after call to audiohooks

ASTERISK-26419 introduced a bug when calling ast_audiohook_write_list in
ast_write. It would free the frame given to ast_write if the frame returned
by ast_audiohook_write_list was different than the given one. The frame give
to ast_write should never be freed within that function. It is the caller's
resposibility to free the frame after writing (or when it its done with it).
By freeing it within ast_write this of course led to some memory corruption
problems.

This patch makes it so the frame given to ast_write is no longer freed within
the function. The frame returned by ast_audiohook_write_list is now subsequently
used in ast_write and is freed later. It is freed either after translate if the
frame returned by translate is different, or near the end of ast_write prior to
function exit.

ASTERISK-26973 #close

Change-Id: Ic9085ba5f555eeed12f6e565a638c3649695988b

2 years agoMerge "pbx_builtin: Properly handle hangup during Background"
Joshua Colp [Mon, 5 Jun 2017 13:07:39 +0000 (08:07 -0500)]
Merge "pbx_builtin: Properly handle hangup during Background"

2 years agoMerge "app_confbridge: Race between removing and playing name recording while leaving"
George Joseph [Thu, 1 Jun 2017 19:43:21 +0000 (14:43 -0500)]
Merge "app_confbridge: Race between removing and playing name recording while leaving"

2 years agoMerge "stasis_recording: Correct ast_asprintf error checking"
Jenkins2 [Thu, 1 Jun 2017 16:06:16 +0000 (11:06 -0500)]
Merge "stasis_recording: Correct ast_asprintf error checking"

2 years agoMerge "format_mp3: Re-work menuselect/build issues"
Joshua Colp [Thu, 1 Jun 2017 15:40:51 +0000 (10:40 -0500)]
Merge "format_mp3: Re-work menuselect/build issues"

2 years agoMerge "res_pjsip: New endpoint option "refer_blind_progress""
Jenkins2 [Thu, 1 Jun 2017 15:05:53 +0000 (10:05 -0500)]
Merge "res_pjsip: New endpoint option "refer_blind_progress""

2 years agoMerge "Sqlite3: make busy_timeout configurable."
Jenkins2 [Thu, 1 Jun 2017 14:31:24 +0000 (09:31 -0500)]
Merge "Sqlite3: make busy_timeout configurable."

2 years agoMerge "test_json: Fix test names with reserved words"
Jenkins2 [Wed, 31 May 2017 19:05:59 +0000 (14:05 -0500)]
Merge "test_json:  Fix test names with reserved words"

2 years agopbx_builtin: Properly handle hangup during Background
Sean Bright [Wed, 31 May 2017 16:45:45 +0000 (12:45 -0400)]
pbx_builtin: Properly handle hangup during Background

Before this patch, when a user hung up during a Background, we would
stuff 0xff into a char and attempt a dialplan lookup of it. This caused
problems for some realtime engines which interpreted the value as the
beginning of an invalid UTF-8 sequence.

ASTERISK-19291 #close
Reported by: Andrew Nowrot

Change-Id: I8ca6da93252d61c76ebdb46a4aa65e73ca985358

2 years agochannel / app_meetme: Fix parentheses.
Joshua Colp [Wed, 31 May 2017 09:25:02 +0000 (09:25 +0000)]
channel / app_meetme: Fix parentheses.

ASTERISK-27025

Change-Id: Id736b0aa4ec6b6b0f04663d64fa8d151f81fdbed

2 years agostasis_recording: Correct ast_asprintf error checking
Sean Bright [Tue, 30 May 2017 21:07:56 +0000 (17:07 -0400)]
stasis_recording: Correct ast_asprintf error checking

ASTERISK-27021 #close
Reported by: Tim Morgan

Change-Id: I0ac061f040093e806c3b1f4e2340864f3ce4dd75

2 years agoformat: Reintroduce smoother flags
Sean Bright [Sun, 28 May 2017 20:43:12 +0000 (16:43 -0400)]
format: Reintroduce smoother flags

In review 4843 (ASTERISK-24858), we added a hack that forced a smoother
creation when sending signed linear so that the byte order was adjusted
during transmission. This was needed because smoother flags were lost
during the new format work that was done in Asterisk 13.

Rather than rolling that same hack into res_rtp_multicast, re-introduce
smoother flags so that formats can dictate their own options.

Change-Id: I77b835fba0e539c6ce50014a984766f63cab2c16

2 years agoConfbridge: Add "sfu" video mode to bridge profile options.
Mark Michelson [Wed, 24 May 2017 15:09:22 +0000 (10:09 -0500)]
Confbridge: Add "sfu" video mode to bridge profile options.

A previous commit added plumbing to bridge_softmix to allow for an SFU
experience with Asterisk. This commit adds an option to app_confbridge
that allows for a confbridge to actually make use of the SFU video mode.

SFU mode is implemented in a "set it and forget it" kind of way. That
is, when the bridge is created, if SFU mode is enabled, then the video
mode gets set to SFU and cannot be changed. Future improvements may
allow for a hybrid experience (e.g. forward multiple video streams,
specifically those of the most recent talkers), but for this addition,
no such capability is present.

Change-Id: I87bbcb63dec6dbbb42488f894871b86f112b2020

2 years agoAdd primitive SFU support to bridge_softmix.
Mark Michelson [Fri, 5 May 2017 16:56:34 +0000 (11:56 -0500)]
Add primitive SFU support to bridge_softmix.

This sets up the "plumbing" in bridge_softmix to
be able to accommodate Asterisk asking as an SFU
(selective forwarding unit) for conferences.

The way this works is that whenever a channel enters or leaves a
conference, all participants in the bridge get sent a stream topology
change request. The topologies consist of the channels' original
topology, along with video destination streams corresponding to each
participants' source video streams. So for instance, if Alice, Bob, and
Carol are in the conference, and each supplies one video stream, then
the topologies for each would look like so:

Alice:
Audio,
Source video(Alice),
Destination Video(Bob),
Destination video (Carol)

Bob:
Audio,
Source video(Bob)
Destination Video(Alice),
Destination video (Carol)

Carol:
Audio,
Source video(Carol)
Destination Video(Alice),
Destination video (Bob)

This way, video that arrives from a source video stream can then be
copied out to the destination video streams on the other participants'
channels.

Once the bridge gets told that a topology on a channel has changed, the
bridge constructs a map in order to get the video frames routed to the
proper destination streams. This is done using the bridge channel's
stream_map.

This change is bare-bones with regards to SFU support. Some key features
are missing at this point:

* Stream limits. This commit makes no effort to limit the number of
  streams on a specific channel. This means that if there were 50 video
  callers in a conference, bridge_softmix will happily send out topology
  change requests to every channel in the bridge, requesting 50+
  streams.

* Configuration. The plumbing has been added to bridge_softmix, but
  there has been nothing added as of yet to app_confbridge to enable SFU
  video mode.

* Testing. Some functions included here have unit tests.
  However, the functionality as a whole has only been verified by
  hand-tracing the code.

* Selectivenss. For a "selective" forwarding unit, this does not
  currently have any means of being selective.

* Features. Presumably, someone might wish to only receive video from
  specific sources. There are no external-facing functions at the moment
  that allow for users to select who they receive video from.

* Efficiency. The current scheme treats all video streams as being
  unidirectional. We could be re-using a source video stream as a
  desetnation, too. But to simplify things on this first round, I did it
  this way.

Change-Id: I7c44a829cc63acf8b596a337b2dc3c13898a6c4d

2 years agoformat_mp3: Re-work menuselect/build issues
Sean Bright [Tue, 30 May 2017 14:34:34 +0000 (10:34 -0400)]
format_mp3: Re-work menuselect/build issues

Rather than removing format_mp3 from ALL_C_MODS (which caused format_mp3
to not show up in menuselect), use .PHONY targets when the necessary
source files are not present.

ASTERISK-23951
Reported by: Tzafrir Cohen

Change-Id: I0a7512c51acc9e86043671795020b0de725bd9e8