2 years agopbx_dundi: added IPv4/IPv6 dual bind support to DUNDi
Kirsty Tyerman [Tue, 8 Jan 2019 06:14:07 +0000 (16:14 +1000)]
pbx_dundi: added IPv4/IPv6 dual bind support to DUNDi

Reported-by: Kirsty Tyerman

Change-Id: I5d6e6b52dbe51415046bb3953fd16f5b421bc2e1

2 years agoMerge "res_fax: fix segfault on inactive "reserved" fax session"
Friendly Automation [Tue, 4 Jun 2019 10:07:14 +0000 (05:07 -0500)]
Merge "res_fax: fix segfault on inactive "reserved" fax session"

2 years agoMerge "app_readexten: new option 'p' to stop reading on '#' key"
Friendly Automation [Mon, 3 Jun 2019 15:05:11 +0000 (10:05 -0500)]
Merge "app_readexten: new option 'p' to stop reading on '#' key"

2 years agoMerge "pjsip: replace 180 by 183 if SDP negotiation has completed"
George Joseph [Mon, 3 Jun 2019 14:36:43 +0000 (09:36 -0500)]
Merge "pjsip: replace 180 by 183 if SDP negotiation has completed"

2 years agoMerge "res_fax: add channel name to CLI 'fax show session'"
Friendly Automation [Mon, 3 Jun 2019 14:29:12 +0000 (09:29 -0500)]
Merge "res_fax: add channel name to CLI 'fax show session'"

2 years agores_fax: fix segfault on inactive "reserved" fax session
Alexei Gradinari [Tue, 28 May 2019 20:35:17 +0000 (16:35 -0400)]
res_fax: fix segfault on inactive "reserved" fax session

The change #10017 "Handle fax gateway being started more than once"
introdiced a bug which leads to segfault in res_fax_spandsp.

The res_fax_spandsp module does not support reserving sessions, so
fax_session_reserve returns a fax session with state AST_FAX_STATE_INACTIVE.

The fax_gateway_start does not create a real fax session if the fax session
is already present and the state is not AST_FAX_STATE_RESERVED.
But the "reserved" session created for res_fax_spandsp has state
AST_FAX_STATE_INACTIVE, so fax_gateway_start not starting.

Then when fax_gateway_framehook is called and gateway T.38 state is
NEGOTIATED the call of gateway->s->tech->write(gateway->s, f) leads to
segfault, because session tech_pvt is not set, i.e. the tech session
was not initialized/started.

This patch adds check also on AST_FAX_STATE_INACTIVE to the "reserved"
session created for res_fax_spandsp will start.

This patch also adds extra check and log ERROR if tech_pvt is not set
before call tech->write.

ASTERISK-27981 #close

Change-Id: Ife3e65e5f18c902db2ff0538fccf7d28f88fa803

2 years agores_fax: add channel name to CLI 'fax show session'
Alexei Gradinari [Tue, 28 May 2019 22:15:40 +0000 (18:15 -0400)]
res_fax: add channel name to CLI 'fax show session'

This patch adds a channel name to output of CLI 'fax show session'
and also expands the channel name field up to 30 characters on
CLI 'fax show sessions'

Change-Id: Id059c43ff41811f5e76712b83fb63b8f246da953

2 years agobuild: Fix file format in CHANGES-staging.
Ben Ford [Fri, 24 May 2019 14:01:14 +0000 (09:01 -0500)]
build: Fix file format in CHANGES-staging.

One of the change files doesn't conform to the format that the release
scripts need in order to parse it.

Change-Id: Ie0b634cf27e4cbc671b9fe92993b6f2ecf60254c

2 years agochan_dahdi: add missing include.
Guido Falsi [Thu, 23 May 2019 14:44:07 +0000 (16:44 +0200)]
chan_dahdi: add missing include.

After some definitions have been moved to asterisk/mwi.h the files
channels/chan_dahdi.h channels/sig_pri.c are missing this new

ASTERISK-28427 #close

Change-Id: Ia8cc595eeda653324643f40dcd9799d4c3f0ac91

2 years agoapp_readexten: new option 'p' to stop reading on '#' key
Alexei Gradinari [Fri, 17 May 2019 22:45:25 +0000 (18:45 -0400)]
app_readexten: new option 'p' to stop reading on '#' key

This patch adds the 'p' option.
The extension entered will be considered complete when a # is entered.

Change-Id: If77c40c9c8b525885730821e768f5dea71cf04c1

2 years agoMerge "res_rtp_asterisk: timestamp should be unsigned instead of signed int"
Friendly Automation [Thu, 23 May 2019 14:03:49 +0000 (09:03 -0500)]
Merge "res_rtp_asterisk: timestamp should be unsigned instead of signed int"

2 years agoMerge "pjproject-bundled: Add upstream timer fixes"
Friendly Automation [Wed, 22 May 2019 17:07:50 +0000 (12:07 -0500)]
Merge "pjproject-bundled:  Add upstream timer fixes"

2 years agoMerge "res_rtp_asterisk: Add ability to propose local address in ICE"
Friendly Automation [Wed, 22 May 2019 16:28:18 +0000 (11:28 -0500)]
Merge "res_rtp_asterisk:  Add ability to propose local address in ICE"

2 years agores_prometheus: Add metrics for PJSIP outbound registrations
Matt Jordan [Fri, 10 May 2019 14:36:01 +0000 (09:36 -0500)]
res_prometheus: Add metrics for PJSIP outbound registrations

When monitoring Asterisk instances, it's often useful to know when an
outbound registration fails, as this often maps to the notion of a trunk
and having a trunk fail is usually a "bad thing". As such, this patch
adds monitoring metrics that track the state of PJSIP outbound registrations.
It does this by looking for the Registry events coming across the Stasis
system topic, and publishing those as metrics to Prometheus. Note that
while this may support other outbound registration types (IAX2, SIP, etc.)
those haven't been tested. Your mileage may vary.

(And why are you still using IAX2 and SIP? It's 2019 folks. Get with the

This patch also adds Sorcery observers to handle modifications to the
underlying PJSIP outbound registration objects. This is useful when a
reload is triggered that modifies the properties of an outbound registration,
or when ARI push configuration is used and an object is updated or
deleted. Because we rely on properties of the registration object to
define the metric (label key/value pairs), we delete the relevant metric when
we notice that something has changed and wait for a new Stasis message to
arrive to re-create the metric.


Change-Id: If01420e38530fc20b6dd4aa15cd281d94cd2b87e

2 years agores_prometheus: Add CLI commands
Matt Jordan [Thu, 3 Jan 2019 16:28:28 +0000 (10:28 -0600)]
res_prometheus: Add CLI commands

This patch adds a few CLI commands to the res_prometheus module to aid
system administrators setting up and configuring the module. This includes:

* prometheus show status: Display basic statistics about the Prometheus
  module, including its essential configuration, when it was last scraped,
  and how long the scrape took. The last two bits of information are useful
  when Prometheus isn't generating metrics appropriately, as it will at
  least tell you if Asterisk has had its HTTP route hit by the remote

* prometheus show metrics: Dump the current metrics to the CLI. Useful for
  system administrators to see what metrics are currently available without
  having to cURL or go to Prometheus itself.


Change-Id: Ic09813e5e14b901571c5c96ebeae2a02566c5172

2 years agores_prometheus: Add Asterisk bridge metrics
Matt Jordan [Thu, 9 May 2019 14:41:49 +0000 (09:41 -0500)]
res_prometheus: Add Asterisk bridge metrics

This patch adds basic Asterisk bridge statistics to the res_prometheus
module. This includes:

* asterisk_bridges_count: The current number of bridges active on the

* asterisk_bridges_channels_count: The number of channels active in a

In all cases, enough information is provided with each bridge metric
to determine a unique instance of Asterisk that provided the data, along
with the technology, subclass, and creator of the bridge.


Change-Id: Ie27417dd72c5bc7624eb2a7a6a8829d7551788dc

2 years agores_prometheus: Add Asterisk endpoint metrics
Matt Jordan [Thu, 9 May 2019 14:41:02 +0000 (09:41 -0500)]
res_prometheus: Add Asterisk endpoint metrics

This patch adds basic Asterisk endpoint statistics to the res_prometheus
module. This includes:

* asterisk_endpoints_state: The current state (unknown, online, offline)
  for each defined endpoint.

* asterisk_endpoints_channels_count: The current number of channels
  associated with a given endpoint.

* asterisk_endpoints_count: The current number of defined endpoints.

In all cases, enough information is provided with each endpoint metric
to determine a unique instance of Asterisk that provided the data, as well
as the underlying technology and resource definition.


Change-Id: I46443963330c206a7d12722d08dcaabef672310e

2 years agores_rtp_asterisk: timestamp should be unsigned instead of signed int
Morten Tryfoss [Tue, 21 May 2019 16:29:05 +0000 (18:29 +0200)]
res_rtp_asterisk: timestamp should be unsigned instead of signed int

Using timestamp with signed int will cause timestamps exceeding max value
to be negative.
This causes the jitterbuffer to do passthrough of the packet.


Change-Id: I9dabd0718180f2978856c50f43aac4e52dc3cde9

2 years agores_prometheus: Add Asterisk channel metrics
Matt Jordan [Fri, 3 May 2019 00:45:27 +0000 (19:45 -0500)]
res_prometheus: Add Asterisk channel metrics

This patch adds basic Asterisk channel statistics to the res_prometheus
module. This includes:

* asterisk_calls_sum: A running sum of the total number of
  processed calls

* asterisk_calls_count: The current number of calls

* asterisk_channels_count: The current number of channels

* asterisk_channels_state: The state of any particular channel

* asterisk_channels_duration_seconds: How long a channel has existed,
  in seconds

In all cases, enough information is provided with each channel metric
to determine a unique instance of Asterisk that provided the data, as
well as the name, type, unique ID, and - if present - linked ID of each


Change-Id: I0db306ec94205d4f58d1e7fbabfe04b185869f59

2 years agopjproject/Makefile: Updates for Darwin compatible builds
Matt Jordan [Mon, 29 Apr 2019 15:10:35 +0000 (10:10 -0500)]
pjproject/Makefile: Updates for Darwin compatible builds

This patch fixes three compatibility issues for Darwin compatible builds:

(1) Use BSD compatible command line option for sed

For some versions of BSD sed, the -r command line option is unknown.
Both GNU and BSD sed support the -E command line option for enabling
extended regular expressions; as such, this patch replaces the -r
option with -E.

(2) Look for '_' in pjproject generated symbols

In Darwin comaptible systems, the symbols generated for pjproject may be
prefixed with an '_'. When exporting these to a symbol file, the invocation
to sed has to optionally look for a prefix of said '_' character.

(3) Use -all_load/-noall_load when linking

The flags -whole-archive/-no-whole-archive are not supported by the
linker, and must instead be replaced with -all_load/-noall_load.

Change-Id: I58121756de6a0560a6e49ca9d6bf9566a333cde3

2 years agoMerge "Add core Prometheus support to Asterisk"
Friendly Automation [Tue, 21 May 2019 15:11:04 +0000 (10:11 -0500)]
Merge "Add core Prometheus support to Asterisk"

2 years agoAdd core Prometheus support to Asterisk
Matt Jordan [Thu, 3 Jan 2019 16:28:28 +0000 (10:28 -0600)]
Add core Prometheus support to Asterisk

Prometheus is the defacto monitoring tool for containerized applications.
This patch adds native support to Asterisk for serving up Prometheus
compatible metrics, such that a Prometheus server can scrape an Asterisk
instance in the same fashion as it does other HTTP services.

The core module in this patch provides an API that future work can build
on top of. The API manages metrics in one of two ways:
(1) Registered metrics. In this particular case, the API assumes that
    the metric (either allocated on the stack or on the heap) will have
    its value updated by the module registering it at will, and not
    just when Prometheus scrapes Asterisk. When a scrape does occur,
    the metrics are locked so that the current value can be retrieved.
(2) Scrape callbacks. In this case, the API allows consumers to be
    called via a callback function when a Prometheus initiated scrape
    occurs. The consumers of the API are responsible for populating
    the response to Prometheus themselves, typically using stack
    allocated metrics that are then formatted properly into strings
    via this module's convenience functions.

These two mechanisms balance the different ways in which information is
generated within Asterisk: some information is generated in a fashion
that makes it appropriate to update the relevant metrics immediately;
some information is better to defer until a Prometheus server asks for

Note that some care has been taken in how metrics are defined to
minimize the impact on performance. Prometheus's metric definition
and its support for nesting metrics based on labels - which are
effectively key/value pairs - can make storage and managing of metrics
somewhat tricky. While a naive approach, where we allow for any number
of labels and perform a lot of heap allocations to manage the information,
would absolutely have worked, this patch instead opts to try to place
as much information in length limited arrays, stack allocations, and
vectors to minimize the performance impacts of scrapes. The author of
this patch has worked on enough systems that were driven to their knees
by poor monitoring implementations to be a bit cautious.

Additionally, this patch only adds support for gauges and counters.
Additional work to add summaries, histograms, and other Prometheus
metric types may add value in the future. This would be of particular
interest if someone wanted to track SIP response types.

Finally, this patch includes unit tests for the core APIs.


Change-Id: I891433a272c92fd11c705a2c36d65479a415ec42

2 years agopjproject-bundled: Add upstream timer fixes
Joshua Colp [Mon, 20 May 2019 17:45:57 +0000 (14:45 -0300)]
pjproject-bundled:  Add upstream timer fixes

Fixed #2191:
  - Stricter double timer entry scheduling prevention.
  - Integrate group lock in SIP transport, e.g: for add/dec ref,
    for timer scheduling.

Reported-by: Ross Beer

Change-Id: I2e09aa66de0dda9414d8a8259a649c4d2d96a9f5

2 years agores_rtp_asterisk: Add ability to propose local address in ICE
George Joseph [Fri, 17 May 2019 23:44:37 +0000 (17:44 -0600)]
res_rtp_asterisk:  Add ability to propose local address in ICE

You can now add the "include_local_address" flag to an entry in
rtp.conf "[ice_host_candidates]" to include both the advertized
address and the local address in ICE negotiation:

[ice_host_candidates] =,include_local_address

This causes both and to be advertized.

Change-Id: Ide492cd45ce84546175ca7d557de80d9770513db

2 years agopjsip: replace 180 by 183 if SDP negotiation has completed
Alexei Gradinari [Mon, 13 May 2019 20:37:50 +0000 (16:37 -0400)]
pjsip: replace 180 by 183 if SDP negotiation has completed

The caller endpoint hears dead silence if a callee replies 180 (without SDP)
and the caller already received 183 (with SDP).
It happens because Asterisk sends 180 (WITH SDP) to the caller,
there are not incoming RTP packets from the callee
and Asterisk does not generate inband ringing,
so there are not any outgoing RTP packets to the caller.

This patch replaces 180 by 183 if SDP negotiation has completed,
as if the caller endpoint is configured with "inband_progress=yes".

In this case Asterisk will generate inband ringing untill Asterisk receive
incoming RTP packets from the callee.

ASTERISK-27994 #close

Change-Id: I7450b751083ec30d68d6abffe922215a15ae5a73

2 years agoMerge "res_rtp_asterisk: Fix sequence number cycling and packet loss count."
Friendly Automation [Wed, 15 May 2019 22:45:56 +0000 (17:45 -0500)]
Merge "res_rtp_asterisk: Fix sequence number cycling and packet loss count."

2 years agoMerge "conversions.c: Add conversions for largest max sized integer"
Friendly Automation [Wed, 15 May 2019 12:04:37 +0000 (07:04 -0500)]
Merge "conversions.c: Add conversions for largest max sized integer"

2 years agoMerge "Fixes for GCC 9"
Friendly Automation [Wed, 15 May 2019 11:29:03 +0000 (06:29 -0500)]
Merge "Fixes for GCC 9"

2 years agoMerge "build: Pass --fno-partial-inlining to third-party when appropriate"
Friendly Automation [Wed, 15 May 2019 10:45:36 +0000 (05:45 -0500)]
Merge "build: Pass --fno-partial-inlining to third-party when appropriate"

2 years agoMerge "pjsip_options.c: Allow immediate qualifies for new contacts."
Friendly Automation [Mon, 13 May 2019 19:11:08 +0000 (14:11 -0500)]
Merge "pjsip_options.c: Allow immediate qualifies for new contacts."

2 years agoFixes for GCC 9
George Joseph [Fri, 10 May 2019 15:48:28 +0000 (09:48 -0600)]
Fixes for GCC 9

Various fixes for issues caught by gcc 9.  Mostly snprintf
trying to copy to a buffer potentially too small.


Change-Id: I9e85a60f3c81d46df16cfdd1c329ce63432cf32e

2 years agores_rtp_asterisk: Fix sequence number cycling and packet loss count.
Joshua Colp [Wed, 8 May 2019 15:41:43 +0000 (15:41 +0000)]
res_rtp_asterisk: Fix sequence number cycling and packet loss count.

This change fixes two bugs which both resulted in the packet loss
count exceeding 65,000.

The first issue is that the sequence number check to determine if
cycling had occurred was using the wrong variable resulting in the
check never seeing that cycling has occurred, throwing off the
packet loss calculation. It now uses the correct variable.

The second issue is that the packet loss calculation assumed that
the received number of packets in an interval could never exceed
the expected number. In practice this isn't true due to delayed
or retransmitted packets. The expected will now be updated to
the received number if the received exceeds it.


Change-Id: If888ebc194ab69ac3194113a808c414b014ce0f6

2 years agopjsip_options.c: Allow immediate qualifies for new contacts.
Ben Ford [Tue, 7 May 2019 16:08:33 +0000 (11:08 -0500)]
pjsip_options.c: Allow immediate qualifies for new contacts.

When multiple endpoints try to register close together using the same
AOR with qualify_frequency set, one contact would qualify immediately
while the other contacts would have to wait out the duration of the
timer before being able to qualify. Changing the conditional to check
the contact container count for a non-zero value allows all contacts to
qualify immediately.

Change-Id: I79478118ee7e0d6e76af7c354d66684220db9415

2 years agoconversions.c: Add conversions for largest max sized integer
Kevin Harwell [Mon, 6 May 2019 21:26:46 +0000 (16:26 -0500)]
conversions.c: Add conversions for largest max sized integer

Added a conversion for umax (largest maximum sized integer allowed). Adjusted
the other current conversion functions (uint and ulong) to be derivatives of
the umax conversion since they are simply subsets of umax.

Also made the negative check move the pointer on spaces since strtoumax does it

Change-Id: I56c2ef2629d49b524c8df58af12951c181f81f08

2 years agostasis: Hangup channel for Local channel No such extension error
agupta [Fri, 3 May 2019 15:49:31 +0000 (21:19 +0530)]
stasis: Hangup channel for Local channel No such extension error

When we use early bridge with create and dial from stasis using Local channel
and the dialplan does not any entry the it is returned from core_local.c with
No such extension .

In such case asterisk locks up till the channel is not hangup with the error
Exceptionally long voice queue length

* Found that in such case app_control_dial fails on ast_call method and
  return -1
* Since it is called from stasis_app_send_command_async and return -1 does
  not cause resources to be freed and since no PBX exist it is not able to
  read from channel causing exceptionally long queue
* After putting this code found that the channel was releasing immediately
  and resources were freed.

Reported by: Abhay Gupta
Tested by: Abhay Gupta

Change-Id: I0a55c923fc6995559f808d63b9488762b4489318

2 years agobuild: Pass --fno-partial-inlining to third-party when appropriate
George Joseph [Fri, 3 May 2019 18:31:06 +0000 (12:31 -0600)]
build: Pass --fno-partial-inlining to third-party when appropriate

When the gcc version is >= 8.2.1, we were already setting the
--fno-partial-inlining flag for Asterisk source files to get around
a gcc bug but we weren't passing the flag down to the bundled
builds of pjproject and jansson.


Change-Id: I99ede9bc35408ecd096f7d5369e8192d3dc75704

2 years agoMerge "app_confbridge: Add "all" variants of REMB behavior."
Friendly Automation [Fri, 3 May 2019 15:54:13 +0000 (10:54 -0500)]
Merge "app_confbridge: Add "all" variants of REMB behavior."

2 years agoMerge "stasis: Only place stasis created and dialed channels into dial bridge."
Joshua Colp [Fri, 3 May 2019 15:50:38 +0000 (10:50 -0500)]
Merge "stasis: Only place stasis created and dialed channels into dial bridge."

2 years agoMerge "stasis: Call callbacks when imparting fails"
Friendly Automation [Fri, 3 May 2019 15:13:33 +0000 (10:13 -0500)]
Merge "stasis: Call callbacks when imparting fails"

2 years agoMerge "rtp: Add support for transport-cc in receiver direction."
Friendly Automation [Fri, 3 May 2019 15:06:43 +0000 (10:06 -0500)]
Merge "rtp: Add support for transport-cc in receiver direction."

2 years agores_pjsip: Check return from pjsip_parse_uri calls
George Joseph [Thu, 2 May 2019 18:29:49 +0000 (12:29 -0600)]
res_pjsip:  Check return from pjsip_parse_uri calls

Updated ast_sip_create_rdata_with_contact and registrar_find_contact
to check the return from pjsip_parse_uri before attempting to
use the uri returned.

Reported-by: Ross Beer

Change-Id: I9810b3b163c45ed5a56ec743586e5ce107f13ba7

2 years agostasis: Only place stasis created and dialed channels into dial bridge.
agupta [Tue, 30 Apr 2019 14:21:46 +0000 (19:51 +0530)]
stasis: Only place stasis created and dialed channels into dial bridge.

The dial bridge is meant to hold channels which have been created
and dialed in stasis. It handles the frames coming from them and raises
the appropriate events.

It was possible for the code to mistakenly place calls which came
from the dialplan into the dial bridge if they were not in an
answered state. These channels are not outgoing channels and
should not be placed into the dial bridge.

The code now checks to ensure that only stasis created channels are
placed into the dial bridge by checking that a PBX does not exist
on the channel.


Change-Id: Ideee69ff06c9a0b31f7ed61165f5c055f51d21b6

2 years agostasis: Call callbacks when imparting fails
Holger Hans Peter Freyther [Wed, 10 Apr 2019 04:30:25 +0000 (05:30 +0100)]
stasis: Call callbacks when imparting fails

After a bridge has been deleted the stasis control will depart
the channel and might attempt to re-add it to the dial bridge.

The later can fail and this can lead to a situation that the stasis
control is unlinked but the after_bridge_cb_failed cb is executed trying
to access a dangling control object.

Fix it by calling the after_cb's before bridge_channel_impart_signal.


Change-Id: Ib4e8f70d7a21bd54afe3cb51cc6717ef7c355496

2 years agoapp_confbridge: Add "all" variants of REMB behavior.
Joshua Colp [Tue, 30 Apr 2019 11:22:44 +0000 (11:22 +0000)]
app_confbridge: Add "all" variants of REMB behavior.

When producing a combined REMB value the normal behavior
is to have a REMB value which is unique for each sender
based on all of their receivers. This can result in one
sender having low bitrate while all the rest are high.

This change adds "all" variants which produces a bridge
level REMB value instead. All REMB reports are combined
together into a single REMB value that is the same for
each sender.


Change-Id: I883e6cc26003b497c8180b346111c79a131ba88c

2 years agortp: Add support for transport-cc in receiver direction.
Joshua Colp [Tue, 23 Apr 2019 10:00:43 +0000 (10:00 +0000)]
rtp: Add support for transport-cc in receiver direction.

The transport-cc draft is a mechanism by which additional information
about packet reception can be provided to the sender of packets so
they can do sender side bandwidth estimation. This is accomplished
by having a transport specific sequence number and an RTCP feedback
message. This change implements this in the receiver direction.

For each received RTP packet where transport-cc is negotiated we store
the time at which the RTP packet was received and its sequence number.
At a 1 second interval we go through all packets in that period of time
and use the stored time of each in comparison to its preceding packet to
calculate its delta. This delta information is placed in the RTCP
feedback message, along with indicators for any packets which were not

The browser then uses this information to better estimate available
bandwidth and adjust accordingly. This may result in it lowering the
available send bandwidth or adjusting how "bursty" it can be.


Change-Id: I654a2cff5bd5554ab94457a14f70adb71f574afc

2 years agoMerge "app_queue: Set correct value by default for shared_lastcall"
Friendly Automation [Tue, 30 Apr 2019 21:45:48 +0000 (16:45 -0500)]
Merge "app_queue: Set correct value by default for shared_lastcall"

2 years agoMerge "mwi core: Move core MWI functionality into its own files"
Friendly Automation [Tue, 30 Apr 2019 15:41:10 +0000 (10:41 -0500)]
Merge "mwi core: Move core MWI functionality into its own files"

2 years agoMerge "app_amd: Fix infinite loop on silent calls"
Friendly Automation [Tue, 30 Apr 2019 15:07:30 +0000 (10:07 -0500)]
Merge "app_amd: Fix infinite loop on silent calls"

2 years agoMerge "stasis: Fix crash at shutdown."
Friendly Automation [Tue, 30 Apr 2019 10:44:53 +0000 (05:44 -0500)]
Merge "stasis: Fix crash at shutdown."

2 years agoapp_amd: Fix infinite loop on silent calls
agupta [Tue, 4 Dec 2018 08:10:15 +0000 (13:40 +0530)]
app_amd: Fix infinite loop on silent calls

The total time logic will now be executed on calls which
do not pass any media.


Change-Id: I24726bd29d7e467fc721ca265363417234b22855

2 years agoapp_queue: Set correct value by default for shared_lastcall
Rodrigo Ramírez Norambuena [Mon, 29 Apr 2019 16:13:07 +0000 (12:13 -0400)]
app_queue: Set correct value by default for shared_lastcall

There a long history here:

In commit dd1e62c095c has introduce by default shared_lastcall = true by
default but this now only happen is there not [general] directive in

After that, the commit 4b50e3f1ee84ae29da6d9eb3cfd9896a49d2394b fix the
sample file.

We'll need to keep the same setting if there a general or not section in
configuration file since the shared_lastcall is by a long time in
sample files as default value to 'no'.

Change-Id: Id44faec370136df8d57902b453ad4059ed21b94c

2 years agostasis: Fix crash at shutdown.
Ben Ford [Tue, 23 Apr 2019 14:47:45 +0000 (09:47 -0500)]
stasis: Fix crash at shutdown.

When compiling in dev mode, stasis statistics are enabled and can cause
a crash at shutdown due to the following:
- Containers are freed
- Topics and subscriptions remain
- When those topics and subscriptions are deallocated, they go to do
  things with the container

This changes the containers to global ao2 objects, and whenever needed
in the code, a reference must be obtained and checked before any
operations can be done.

ASTERISK-28353 #close

Change-Id: Ie7d5e907fcfcb4d65bd36d5e4eb923126fde8d33

2 years agoapp_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings
Antoni Goldstein [Fri, 29 Mar 2019 14:04:46 +0000 (14:04 +0000)]
app_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings

at the earliest received PROGRESS or RINGING.
Added millisecond versions of DIALEDTIME and ANSWEREDTIME.

Added millisecond versions of ast_channel_get_up_time and
ast_channel_get_duration in channel.c.


Change-Id: If95f1a7d8c4acbac740037de0c6e3109ff6620b1

2 years agomwi core: Move core MWI functionality into its own files
Kevin Harwell [Tue, 9 Apr 2019 19:48:22 +0000 (14:48 -0500)]
mwi core: Move core MWI functionality into its own files

There is enough MWI functionality to warrant it having its own 'c' and header
files. This patch moves all current core MWI data structures, and functions
into the following files:


Note, code was simply moved, and not modified. However, this patch is also in
preparation for core MWI changes, and additions to come.

Change-Id: I9dde8bfae1e7ec254fa63166e090f77e4d3097e0

2 years agoMerge "core/buildsystem: check the actual compiler being version"
Friendly Automation [Tue, 23 Apr 2019 20:23:55 +0000 (15:23 -0500)]
Merge "core/buildsystem: check the actual compiler being version"

2 years agoMerge "main/stasis.c: Added detail info for stasis show app cli"
Friendly Automation [Tue, 23 Apr 2019 18:18:07 +0000 (13:18 -0500)]
Merge "main/stasis.c: Added detail info for stasis show app cli"

2 years agocore/buildsystem: check the actual compiler being version
Guido Falsi [Sun, 7 Apr 2019 16:36:55 +0000 (18:36 +0200)]
core/buildsystem: check the actual compiler being version

Make compiler check use the output of the actual compiler being
used as reported by the CC variable, instead of unconditionally
running the "gcc" binary.  Also only run the check if the compiler
is gcc or a cross-compile gcc.


Change-Id: Icaacf6d93686ad21076878aa1504a23b4fc9d0f4

2 years agores_indications: Fix indications remove command autocomplete
Lucas Mendes [Fri, 19 Apr 2019 14:33:49 +0000 (16:33 +0200)]
res_indications: Fix indications remove command autocomplete

We changed the validation of autocomplete parameter in the "indications
remove" command to avoid continue the execution of the command after
asking for autocomplete out of range parameters.

Reported by: lmendes86

Change-Id: I92b24131fd02f2e3c7fec966eea6f7a663310d40

2 years agoMerge "loader: support for permanent dlopen()"
Friendly Automation [Fri, 19 Apr 2019 14:06:03 +0000 (09:06 -0500)]
Merge "loader: support for permanent dlopen()"

2 years agoMerge "res_pjsip: Added a norefersub configuration setting"
Joshua Colp [Fri, 19 Apr 2019 13:30:14 +0000 (08:30 -0500)]
Merge "res_pjsip:  Added a norefersub configuration setting"

2 years agores_remb_modifier: Propertly initialize bitrate to 0.0
George Joseph [Wed, 17 Apr 2019 19:45:26 +0000 (13:45 -0600)]
res_remb_modifier:  Propertly initialize bitrate to 0.0

...and return the frame unaltered if bitrate can't be determined.

Change-Id: Ib2175ab84f85a3d7060d31625f5a2c7fbcc2ba4c

2 years agoMerge "res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority"
Friendly Automation [Thu, 18 Apr 2019 10:44:01 +0000 (05:44 -0500)]
Merge "res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority"

2 years agores_pjsip: Added a norefersub configuration setting
Dan Cropp [Mon, 8 Apr 2019 22:04:48 +0000 (17:04 -0500)]
res_pjsip:  Added a norefersub configuration setting

Added a new PJSIP global setting called norefersub.
Default is true to keep support working as before.

res_pjsip_refer:  Configures PJSIP norefersub capability accordingly.

Checks the PJSIP global setting value.
If it is true (default) it adds the norefersub capability to PJSIP.
If it is false (disabled) it does not add the norefersub capability

This is useful for Cisco switches that do not follow RFC4488.

ASTERISK-28375 #close
Reported-by: Dan Cropp

Change-Id: I0b1c28ebc905d881f4a16e752715487a688b30e9

2 years agomain/stasis.c: Added detail info for stasis show app cli
sungtae kim [Wed, 10 Apr 2019 00:09:10 +0000 (02:09 +0200)]
main/stasis.c: Added detail info for stasis show app cli

Currently, the "stasis show app" cli doesn't give detail
of subscription/subscriber information.
Added more printings to show details.


Change-Id: If25a6f14fe4f622bfb37462e891333da1fdf875f

2 years agoMerge "pbx.c: Ignore dashes in extensions when using extenpatternmatchnew"
Friendly Automation [Tue, 16 Apr 2019 16:38:52 +0000 (11:38 -0500)]
Merge "pbx.c: Ignore dashes in extensions when using extenpatternmatchnew"

2 years agoMerge "app_voicemail: Don't split mailbox options on comma"
Friendly Automation [Tue, 16 Apr 2019 16:37:09 +0000 (11:37 -0500)]
Merge "app_voicemail: Don't split mailbox options on comma"

2 years agores_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority
Sean Bright [Tue, 16 Apr 2019 15:58:40 +0000 (11:58 -0400)]
res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority

Suggested by abelbeck on the issue tracker.

Reported by: abelbeck

Change-Id: Icee0fff2b58dbfaa80f2b68270fe69dfb0463fc0

2 years agoMerge "build: Revise CHANGES and UPGRADE.txt handling."
Benjamin Keith Ford [Tue, 16 Apr 2019 15:52:51 +0000 (10:52 -0500)]
Merge "build: Revise CHANGES and UPGRADE.txt handling."

2 years agoMerge "res_ael: Use Gosub in for loop expressions"
Joshua Colp [Tue, 16 Apr 2019 13:11:28 +0000 (08:11 -0500)]
Merge "res_ael: Use Gosub in for loop expressions"

2 years agoMerge "ARI: Run 'make ari-stubs'"
Joshua Colp [Tue, 16 Apr 2019 12:29:45 +0000 (07:29 -0500)]
Merge "ARI:  Run 'make ari-stubs'"

2 years agoMerge "res_ael: Fix pattern matching against literal '+'"
Joshua Colp [Tue, 16 Apr 2019 12:25:40 +0000 (07:25 -0500)]
Merge "res_ael: Fix pattern matching against literal '+'"

2 years agoCI: Move test group config files to Jenkins
George Joseph [Fri, 12 Apr 2019 16:32:44 +0000 (10:32 -0600)]
CI: Move test group config files to Jenkins

One of the downaides of having things like test configuration
in the git repo is that it can't be changed at runtime.  You have
to create a review for the changes and merge it mefore it will
take effect.

This review moves the data currently held in
tests/CI/periodic-dailyTestGroups.json and
tests/CI/gateTestGroups.json into a Jenkins Config File attached
to the job definitions.  This allows us to alter it from the
Jenkins UI at runtime.  The original files stay in the repo
as documentation.

Change-Id: I14b9702f6285ce1fb2420287ba0e7d3b59109763

2 years agoapp_voicemail: Don't split mailbox options on comma
Sean Bright [Sat, 13 Apr 2019 18:36:56 +0000 (14:36 -0400)]
app_voicemail: Don't split mailbox options on comma

Because the per-mailbox options are the last thing on a line, don't look
for or stomp on any subsequent commas.

ASTERISK-27935 #close
Reported by: Sébastien Duthil

Change-Id: I07b2eb4a33c303d0c7114d5b906f8c067c60a153

2 years agoMerge "res_ael: Create consistent label names across reloads"
George Joseph [Fri, 12 Apr 2019 19:16:31 +0000 (14:16 -0500)]
Merge "res_ael: Create consistent label names across reloads"

2 years agoMerge "pbx.c: Properly parse labels with leading digits"
George Joseph [Fri, 12 Apr 2019 19:16:10 +0000 (14:16 -0500)]
Merge "pbx.c: Properly parse labels with leading digits"

2 years agopbx.c: Ignore dashes in extensions when using extenpatternmatchnew
Sean Bright [Fri, 12 Apr 2019 14:33:57 +0000 (10:33 -0400)]
pbx.c: Ignore dashes in extensions when using extenpatternmatchnew

Because hyphens are not matched literally in Asterisk dialplan, we need
to ignore them in our candidate extensions as well.

ASTERISK-17695 #close
Reported by: test011

Change-Id: I227f02301577b1633e8a55b9fe9dc149935c03f0

2 years agoMerge "app_voicemail: Cleanup stale lock files on module load"
Friendly Automation [Fri, 12 Apr 2019 15:00:40 +0000 (10:00 -0500)]
Merge "app_voicemail: Cleanup stale lock files on module load"

2 years agoMerge "chan_ooh323: fix h323 log file path"
Friendly Automation [Fri, 12 Apr 2019 14:19:15 +0000 (09:19 -0500)]
Merge "chan_ooh323: fix h323 log file path"

2 years agoapp_voicemail: Cleanup stale lock files on module load
Sean Bright [Tue, 9 Apr 2019 15:10:12 +0000 (11:10 -0400)]
app_voicemail: Cleanup stale lock files on module load

If Asterisk crashes while a VM directory is locked, lock files in the VM
spool directory will not get properly cleaned up. We now clear them on
module load.

ASTERISK-20207 #close
Reported by: Steven Wheeler

Change-Id: If40ccd508e2f6e5ade94dde2f0bcef99056d0aaf

2 years agoARI: Run 'make ari-stubs'
George Joseph [Fri, 12 Apr 2019 12:33:10 +0000 (06:33 -0600)]
ARI:  Run 'make ari-stubs'

An earlier contributor apparently forgot to run 'make ari-stubs'
before committing after making ARI model changes.

Change-Id: I7813e5638e2821d11f4b968dc2aeab4f725190a6

2 years agores_ael: Create consistent label names across reloads
Sean Bright [Thu, 11 Apr 2019 20:48:49 +0000 (16:48 -0400)]
res_ael: Create consistent label names across reloads

Reset the internal counter that the AEL2 compiler uses for unique label
names before compiling. This keeps dialplan labels consistent across
reloads assuming the AEL2 has not changed.

ASTERISK-17799 #close
Reported by: Kirill Katsnelson

Change-Id: I30b3cc887d1ee0644d3f341e2fef16f525d7fae5

2 years agores_ael: Use Gosub in for loop expressions
Sean Bright [Thu, 11 Apr 2019 20:29:20 +0000 (16:29 -0400)]
res_ael: Use Gosub in for loop expressions

In AEL2, if a 'for' statement contains macro* calls, like:

    for (&iterator(${TRY},A); "${A}" != ""; &iterate(A)) {

The AEL2 parser will translate these into calls to the deprecated Macro
dialplan application and use the antiquated pipe delimiter.

Instead, convert these into calls to the Gosub dialplan application and
use commas as argument separators.

ASTERISK-18593 #close
Reported by: Luke-Jr

* 'macro' in this context means AEL2 macros, not the 'Macro' application

Change-Id: I3d73716033b8e3e42e0209d355bf5f10c97045fc

2 years agores_ael: Fix pattern matching against literal '+'
Sean Bright [Thu, 11 Apr 2019 16:03:07 +0000 (12:03 -0400)]
res_ael: Fix pattern matching against literal '+'

When generating the regular expression that matches against existing
extensions, we need to escape literal characters that can also be
regular expression metacharacters. This was already being done for '*'
but we need to do the same for '+'.

In passing, remove some unreachable code - strcmp() is already run
immediately when entering extension_matches().

ASTERISK-14939 #close
Reported by: klaus3000

Change-Id: I8d2cccb3479168fba1b0a6704c52198b396468f1

2 years agoMerge "res_pjsip: Fix transport_states ref leak"
Friendly Automation [Thu, 11 Apr 2019 19:58:41 +0000 (14:58 -0500)]
Merge "res_pjsip: Fix transport_states ref leak"

2 years agopbx.c: Properly parse labels with leading digits
Sean Bright [Thu, 11 Apr 2019 17:49:38 +0000 (13:49 -0400)]
pbx.c: Properly parse labels with leading digits

If the target of a Goto is a label that starts with a number, we
erroneously treat the leading digits as a priority.

ASTERISK-20182 #close
Reported by: Janu

Change-Id: Ia78408c0805a729103917247ecfc802f6fafc94b

2 years agochan_ooh323: fix h323 log file path
Alexander Anikin [Wed, 10 Apr 2019 23:07:18 +0000 (02:07 +0300)]
chan_ooh323: fix h323 log file path

Change h323 log path relative to AST_LOG_DIR instead of
/var/log/asterisk hardcoded
Add return back error message from OOH323EP initialize

ASTERISK-28348 #close

Reported by: Dmitry Shubin

Change-Id: Ib102dd36bbe6c2a7a4ce6870ae9110d9000d7e98

2 years agoMerge "chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info"
George Joseph [Wed, 10 Apr 2019 17:42:56 +0000 (12:42 -0500)]
Merge "chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info"

2 years agores_pjsip: Fix transport_states ref leak
Alexei Gradinari [Tue, 9 Apr 2019 21:47:59 +0000 (17:47 -0400)]
res_pjsip: Fix transport_states ref leak

Add missing ao2_ref(transport_state, -1) while iterate on a transport_states

Change-Id: I40e35b5a339121300c80075c30db47201a6c374e

2 years agoMerge "config.c: Fix a crash in extconfig parsing"
Joshua Colp [Wed, 10 Apr 2019 11:40:54 +0000 (06:40 -0500)]
Merge "config.c: Fix a crash in extconfig parsing"

2 years agobuild: Revise CHANGES and UPGRADE.txt handling.
Ben Ford [Mon, 1 Apr 2019 20:38:04 +0000 (15:38 -0500)]
build: Revise CHANGES and UPGRADE.txt handling.

This changes the way that we handle adding changes to CHANGES and
UPGRADE.txt. The reason for this is because whenever someone needed to
make a change to one of these files and someone else had already done
so, you would run into merge conflicts. With this new setup, there will
never be merge conflicts since all changes will be documented in the
doc/<file>-staging directory. The release script is now responsible for
merging all of these changes into the appropriate files.

There is a special format that these files have to follow in order to be
parsed. The files do not need to have a meaningful name, but it is
strongly recommended. For example, if you made a change to pjsip, you
may have something like this "res_pjsip_relative_title", where
"relative_title" is something more descriptive than that. Inside each
file, you will need a subject line for your change, followed by a
description. There can be multiple subject lines. The file may look
something like this:

   Subject: res_pjsip
   Subject: Core

   A description that explains the changes made and why. The release
   script will handle the bulleting and section separators!

   You can still separate with new lines within your

The headers ("Subject" and "Master-Only") are case sensative, but the
value for "Master-Only" ("true" or "True") is not.

For more information, check out the wiki page:

ASTERISK-28111 #close

Change-Id: I19cf4b569321c88155a65e9b0b80f6d58075dd47

2 years agoMerge "CI: Add --no-dev-mode option to"
Friendly Automation [Mon, 8 Apr 2019 15:59:54 +0000 (10:59 -0500)]
Merge "CI:  Add --no-dev-mode option to"

2 years agoMerge "stasis.c: Added topic_all container"
George Joseph [Mon, 8 Apr 2019 15:53:18 +0000 (10:53 -0500)]
Merge "stasis.c: Added topic_all container"

2 years agoMerge "res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics"
George Joseph [Mon, 8 Apr 2019 15:51:45 +0000 (10:51 -0500)]
Merge "res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics"

2 years agoMerge "main/json.c: Added app_name, app_data to channel type"
Friendly Automation [Mon, 8 Apr 2019 15:32:16 +0000 (10:32 -0500)]
Merge "main/json.c: Added app_name, app_data to channel type"

2 years agoconfig.c: Fix a crash in extconfig parsing
Chris-Savinovich [Thu, 4 Apr 2019 21:02:42 +0000 (16:02 -0500)]
config.c: Fix a crash in extconfig parsing

When extconfig.conf file is parsed, the code previously searched for
character comma without verifying if error (null or blank).  This caused
a segmentation error.

Change-Id: Id76b452d8f330d11c2742c37232761ad71472a8b

2 years agochan_pjsip: DTMF Mode auto_info fallback lead to both inband and info
Salah Ahmed [Wed, 3 Apr 2019 15:55:07 +0000 (10:55 -0500)]
chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info

When the dtmf_mode on an endpoint is configured as "auto_info"
Asterisk will produce an inband DTMF tone alongside an INFO
message when sending DTMF.


Change-Id: I1380b82f006e110a1b83fbb50c9873edd13a5d9a

2 years agoloader: support for permanent dlopen()
Sebastian Kemper [Tue, 2 Apr 2019 20:49:52 +0000 (22:49 +0200)]
loader: support for permanent dlopen()

Asterisk assumes that dlopen() will always run the constructor of a
shared library and every dlclose() will run its destructor. But dlopen()
may be permanent, meaning the constructor will only be run once, as is
the case with musl libc.

With a permanent dlopen() the Asterisk module loader does not work
correctly, because it's expectations regarding when the constructors and
destructors are run are not met. In fact a segmentation fault will occur
when the first module is "re-opened" that has AST_MODFLAG_GLOBAL_SYMBOLS
set (the dlopen() does not call the constructor, resource_being_loaded
is not set to NULL, then strlen is called with NULL instead of a string,
see issue ASTERISK-28319).

This commit adds code to the loader that will manually run the
constructors/destructors of the (non-builtin) modules where needed. To
achieve this a new ao2 container (linked list) is started and filled
with objects that contain the names of the modules and the pointers to
their respective info structs.

This behavior can be activated when configuring Asterisk
(--enable-permanent-dlopen). By default this is disabled, of course.

ASTERISK-28319 #close

Signed-off-by: Sebastian Kemper <>
Change-Id: I86693a0ecf25d5ba81c73773a03df4abc3426875

2 years agoMerge "bridge_softmix: use a float type to store the internal REMB bitrate"
Joshua Colp [Thu, 4 Apr 2019 13:52:47 +0000 (08:52 -0500)]
Merge "bridge_softmix: use a float type to store the internal REMB bitrate"

2 years agoMerge "res/res_rtp_asterisk: Enable rxjitter calculation for video"
Joshua Colp [Thu, 4 Apr 2019 13:32:07 +0000 (08:32 -0500)]
Merge "res/res_rtp_asterisk: Enable rxjitter calculation for video"

2 years agoCI: Add --no-dev-mode option to
George Joseph [Wed, 3 Apr 2019 22:55:00 +0000 (16:55 -0600)]
CI:  Add --no-dev-mode option to

The new option disables dev mode, TEST_FRAMEWORK and
MALLOC_DEBUG making the build more production-like.

Change-Id: Ieb72497d4d91d5416684aaed702cc3f532099738