asterisk/asterisk.git
4 days agores_pjsip_transport_websocket: save the original contact host master
Thomas Guebels [Wed, 4 May 2022 15:37:18 +0000 (17:37 +0200)]
res_pjsip_transport_websocket: save the original contact host

This is needed to be able to restore it in REGISTER responses,
otherwise the client won't be able to find the contact it created.

ASTERISK-30042

Change-Id: I0c5823918199acf09246b3b206fbde66773688f6

4 days agores_pjsip_outbound_registration: Show time until expiration
Naveen Albert [Fri, 7 Jan 2022 16:25:09 +0000 (16:25 +0000)]
res_pjsip_outbound_registration: Show time until expiration

Adjusts the pjsip show registration(s) commands to show
the amount of seconds remaining until a registration
expires.

ASTERISK-29845 #close

Change-Id: Ic4fea15a1a1056c424416def49d1ca8e776c0483

4 days agoapp_confbridge: Add function to retrieve channels.
Naveen Albert [Fri, 29 Apr 2022 16:42:55 +0000 (16:42 +0000)]
app_confbridge: Add function to retrieve channels.

Adds the CONFBRIDGE_CHANNELS function which can be used
to retrieve a comma-separated list of channels, filtered
by a particular type of participant category. This output
can then be used with functions like UNSHIFT, SHIFT, POP,
etc.

ASTERISK-30036 #close

Change-Id: I1950aff932437476dc1abab6f47fb4ac90520b83

8 days agochan_dahdi: Fix broken operator mode clearing.
Naveen Albert [Tue, 26 Apr 2022 19:00:14 +0000 (19:00 +0000)]
chan_dahdi: Fix broken operator mode clearing.

Currently, the operator services mode in DAHDI is broken and unusable.
The actual operator recall functionality works properly; however,
when the operator hangs up (which is the only way that such a call
is allowed to end), both lines are permanently taken out of service
until "dahdi restart" is run. This prevents this feature from being
used.

Operator mode is one of the few factors that can cause the general
analog event handling in sig_analog not to be used. Several years
back, much of the analog handling was moved from chan_dahdi to
sig_analog. However, this was not done fully or consistently at
the time, and when operator mode is active, sig_analog does not
get used. Generally this is correct, but in the case of hangup
it should be using sig_analog regardless of the operator mode;
otherwise, the lines do not properly clear and they become unusable.

This bug is fixed so the operator can now hang up and properly
release the call. It is treated just like any other hangup. The
operator mode functionality continues to work as it did before.

ASTERISK-29993 #close

Change-Id: Ib2e3ddb40d9c71e8801e0b4bb0a12e2b52f51d24

8 days agoGCC12: Fixes for 16+
George Joseph [Tue, 3 May 2022 12:57:58 +0000 (06:57 -0600)]
GCC12: Fixes for 16+

Most issues were in stringfields and had to do with comparing
a pointer to an constant/interned string with NULL.  Since the
string was a constant, a pointer to it could never be NULL so
the comparison was always "true".  gcc now complains about that.

There were also a few issues where determining if there was
enough space for a memcpy or s(n)printf which were fixed
by defining some of the involved variables as "volatile".

There were also a few other miscellaneous fixes.

ASTERISK-30044

Change-Id: Ia081ca1bcfb329df6487c4660aaf1944309eb570

8 days agoGCC12: Fixes for 18+. state_id_by_topic comparing wrong value
George Joseph [Wed, 4 May 2022 18:00:27 +0000 (12:00 -0600)]
GCC12: Fixes for 18+.  state_id_by_topic comparing wrong value

GCC 12 caught an issue in state_id_by_topic where we were
checking a pointer for NULL instead of the contents of
the pointer for '\0'.

ASTERISK-30044

Change-Id: Ia0b04d4fff45c92acb7f07132a33622fa341148e

12 days agocore_unreal: Flip stream direction of second channel.
Maximilian Fridrich [Fri, 29 Apr 2022 08:47:38 +0000 (10:47 +0200)]
core_unreal: Flip stream direction of second channel.

When a new unreal (local) channel is created, a second (;2) channel is
created as a counterpart which clones the topology of the first
channel. This creates issues when an outgoing stream is sendonly or
recvonly as the stream state of the inbound channel will be the same
as the stream state of the outbound channel.

Now the stream state is flipped for the streams of the 2nd channel in
ast_unreal_new_channels if the outgoing stream topology is recvonly or
sendonly.

ASTERISK-29655
Reported by: Michael Auracher

ASTERISK-29638
Reported by: Michael Auracher

Change-Id: I0cea29635bb20b7bf7fd0fb95498cd44dab98fbf

2 weeks agochan_dahdi: Document dial resource options.
Naveen Albert [Sun, 27 Mar 2022 12:33:39 +0000 (12:33 +0000)]
chan_dahdi: Document dial resource options.

Documents the Dial syntax for DAHDI, namely the channel group,
distinctive ring, answer confirmation, and digital call options
that are specified in the resource itself.

ASTERISK-24827 #close

Change-Id: Ib95e78497fb00dc5cbfde1c93a69f034bfd08c30

2 weeks agochan_dahdi: Don't allow MWI FSK if channel not idle.
Naveen Albert [Tue, 29 Mar 2022 23:47:41 +0000 (23:47 +0000)]
chan_dahdi: Don't allow MWI FSK if channel not idle.

For lines that have mailboxes configured on them, with
FSK MWI, DAHDI will periodically try to dispatch FSK
to update MWI. However, this is never supposed to be
done when a channel is not idle.

There is currently an edge case where MWI FSK can
extraneously get spooled for the channel if a caller
hook flashes and hangs up, which triggers a recall ring.
After one ring, the on hook time threshold in this if
condition has been satisfied and an MWI update is spooled.
This means that when the phone is picked up again, the
answerer gets an FSK spill before being reconnected to
the party on hold.

To prevent this, we now explicitly check to ensure that
subchannel 0 has no owner. There is no owner when DAHDI
channels are idle, but if the channel is "in use" in some
way (such as in the aforementioned scenario), then there
is an owner, and we shouldn't process MWI at this time.

ASTERISK-28518 #close

Change-Id: Ia3904434fd81688d71742f7e84358b7e1c38e92a

2 weeks agoapps/confbridge: Added hear_own_join_sound option to control who hears sound_join
Michael Cargile [Wed, 23 Feb 2022 16:29:09 +0000 (11:29 -0500)]
apps/confbridge: Added hear_own_join_sound option to control who hears sound_join

Added the hear_own_join_sound option to the confbridge user profile to
control who hears the sound_join audio file. When set to 'yes' the user
entering the conference and the participants already in the conference
will hear the sound_join audio file. When set to 'no' the user entering
the conference will not hear the sound_join audio file, but the
participants already in the conference will hear the sound_join audio
file.

ASTERISK-29931
Added by Michael Cargile

Change-Id: I856bd66dc0dfa057323860a6418c1371d249abd2

2 weeks agochan_dahdi: Don't append cadences on dahdi restart.
Naveen Albert [Sun, 27 Mar 2022 11:23:12 +0000 (11:23 +0000)]
chan_dahdi: Don't append cadences on dahdi restart.

Currently, if any custom ring cadences are specified, they are
appended to the array of cadences from wherever we left off
last time. This works properly the first time, but on subsequent
dahdi restarts, it means that the existing cadences are left
alone and (most likely) the same cadences are then re-added
afterwards. In short order, the cadence array gets maxed out
and the user begins seeing warnings that the array is full
and no more cadences may be added.

This buggy behavior persists until Asterisk is completely
restarted; however, if and when dahdi restart is run again,
then the same problem is reintroduced.

This fixes this behavior so that cadence parsing is more
idempotent, that is so running dahdi restart multiple times
starts adding cadences from the beginning, rather than from
wherever the last cadence was added.

As before, it is still not possible to revert to the default
cadences by simply removing all cadences in this manner, nor
is it possible to delete existing cadences. However, this
does make it possible to update existing cadences, which
was not possible before, and also ensures that the cadences
remain unchanged if the config remains unchanged.

ASTERISK-29990 #close

Change-Id: Ie32ea3e8a243b766756b1afce684d4a31ee7421d

2 weeks agochan_iax2: Prevent crash if dialing RSA-only call without outkey.
Naveen Albert [Sat, 2 Apr 2022 21:22:14 +0000 (21:22 +0000)]
chan_iax2: Prevent crash if dialing RSA-only call without outkey.

Currently, if attempting to place a call to a peer that only allows
RSA authentication, if we fail to provide an outkey when placing
the call, Asterisk will crash.

This exposes the broader issue that IAX2 is prone to causing a crash
if encryption or decryption is attempted but we never initialized
the encryption and decryption keys. In other words, if the logic
to use encryption in chan_iax2 is not perfectly aligned with the
decision to build keys in the first place, then a crash is not
only possible but probable. This was demonstrated by ASTERISK_29264,
for instance.

This permanently prevents such events from causing a crash by explicitly
checking that keys are initialized properly before setting the flags
to use encryption for the call. Instead of crashing, the call will
now abort.

ASTERISK-30007 #close

Change-Id: If925c3d86099ceac7f621804f2532baac5050c9a

2 weeks agomenuselect: Don't erroneously recompile modules.
Naveen Albert [Sat, 5 Feb 2022 15:03:21 +0000 (15:03 +0000)]
menuselect: Don't erroneously recompile modules.

A bug in menuselect can cause modules that are disabled
by default to be recompiled every time a recompilation
occurs. This occurs for module categories that are NOT
positive output, as for these categories, the modules
contained in the makeopts file indicate modules which
should NOT be selected. The existing procedure of iterating
through these modules to mark modules as present is thus
insufficient. This has led to modules with a default_enabled
tag of "no" to get deleted and recompiled every time, even
when they haven't changed.

To fix this, we now modify the mark as present behavior
for module categories that are not positive output. For
these, we start by iterating through the module tree
and marking all modules as present, then go back and
mark anything contained in the makeopts file as not
present. This ensures that makeopt selections are actually
used properly, regardless of whether a module category
uses positive output or not.

ASTERISK-29728 #close

Change-Id: Idf2974c4ed8d0ba3738a92f08a6082b234277b95

2 weeks agoapp_meetme: Don't erroneously set global variables.
Naveen Albert [Thu, 31 Mar 2022 15:44:23 +0000 (15:44 +0000)]
app_meetme: Don't erroneously set global variables.

The admin_exec function in app_meetme is used by the SLA
applications for internal bridging. However, in these cases,
chan is NULL. Currently, this function will set some status
variables that are intended for a channel, but since channel
is NULL, this is erroneously creating meaningless global
variables, which shouldn't be happening. This sets these
variables only if chan is not NULL.

ASTERISK-30002 #close

Change-Id: I817df6c26f5bda131678e56791b0b61ba64fc6f7

2 weeks agoasterisk.c: Warn of incompatibilities with remote console.
Naveen Albert [Sat, 5 Mar 2022 11:43:13 +0000 (11:43 +0000)]
asterisk.c: Warn of incompatibilities with remote console.

Some command line options to Asterisk only apply when Asterisk
is started and cannot be used with remote console mode. If a
user tries to use any of these, they are currently simply
silently ignored.

This prints out a warning if incompatible options are used,
informing users that an option used cannot be used with remote
console mode. Additionally, some clarifications are added to
the help text and man page.

ASTERISK-22246
ASTERISK-26582

Change-Id: I980a5380ef2c19e8ea348596396d5382893c4337

2 weeks agofunc_db: Add function to return cardinality at prefix
Naveen Albert [Tue, 15 Mar 2022 01:41:29 +0000 (01:41 +0000)]
func_db: Add function to return cardinality at prefix

Adds the DB_KEYCOUNT function, which can be used to retrieve
the number of keys at a given prefix in AstDB.

ASTERISK-29968 #close

Change-Id: Ib2393b77b7e962dbaae6192f8576bc3f6ba92d09

2 weeks agochan_dahdi: Fix insufficient array size for round robin.
Naveen Albert [Wed, 30 Mar 2022 00:22:46 +0000 (00:22 +0000)]
chan_dahdi: Fix insufficient array size for round robin.

According to chan_dahdi.conf, up to 64 groups (numbered
0 through 63) can be used when dialing DAHDI channels.

However, currently dialing round robin with a group number
greater than 31 fails because the array for the round robin
structure is only size 32, instead of 64 as it should be.

This fixes that so the round robin array size is consistent
with the actual groups capacity.

ASTERISK-29994

Change-Id: I4caa08d7025f78ac75a0539f71aaf3eb3e85b3b7

2 weeks agochan_sip.c Session timers get removed on UPDATE
Mark Petersen [Sat, 26 Feb 2022 09:07:53 +0000 (10:07 +0100)]
chan_sip.c Session timers get removed on UPDATE

If Asterisk receives a SIP REFER with Session-Timers UAC
maintain Session-Timers when sending UPDATE"

ASTERISK-29843

Change-Id: I8e9a21c13bf757fa34d778f49ba3cf859b29ae5c

2 weeks agofunc_evalexten: Extension evaluation function.
Naveen Albert [Mon, 21 Jun 2021 12:49:16 +0000 (08:49 -0400)]
func_evalexten: Extension evaluation function.

This adds the EVAL_EXTEN function, which may be used to retrieve
the variable-substituted data at any extension.

ASTERISK-29486

Change-Id: Iad81019689674c9f4ac77d235f5d7234adbb1432

2 weeks agofile.c: Prevent formats from seeking negative offsets.
Naveen Albert [Tue, 1 Mar 2022 01:29:43 +0000 (01:29 +0000)]
file.c: Prevent formats from seeking negative offsets.

Currently, if a user uses an application like ControlPlayback
to try to rewind a file past the beginning, this can throw
warnings when the file format (e.g. PCM) tries to seek to
a negative offset.

Instead of letting file formats try (and fail) to seek a
negative offset, we instead now catch this in the rewind
function to ensure that we never seek an offset less than 0.
This prevents legitimate user actions from triggering warnings
from any particular file formats.

ASTERISK-29943 #close

Change-Id: Ia53f2623f57898f4b8e5c894b968b01e95426967

2 weeks agochan_pjsip: Add ability to send flash events.
Naveen Albert [Sat, 26 Feb 2022 12:37:08 +0000 (12:37 +0000)]
chan_pjsip: Add ability to send flash events.

PJSIP currently is capable of receiving flash events
and converting them to FLASH control frames, but it
currently lacks support for doing the reverse: taking
a FLASH control frame and converting it into a flash
event in the SIP domain.

This adds the ability for PJSIP to process flash control
frames by converting them into the appropriate SIP INFO
message, which can then be sent to the peer. This allows,
for example, flash events to be sent between Asterisk
systems using PJSIP.

ASTERISK-29941 #close

Change-Id: I1590221a4d238597f79672fa5825dd4a920c94dd

2 weeks agocli: Add command to evaluate dialplan functions.
Naveen Albert [Sun, 26 Dec 2021 21:39:12 +0000 (21:39 +0000)]
cli: Add command to evaluate dialplan functions.

Adds the dialplan eval function commands to evaluate a dialplan
function from the CLI. The return value and function result are
printed out and can be used for testing or debugging.

ASTERISK-29820 #close

Change-Id: I833e97ea54c49336aca145330a2adeebfad05209

2 weeks agodocumentation: Adds versioning information.
Naveen Albert [Fri, 25 Feb 2022 20:58:52 +0000 (20:58 +0000)]
documentation: Adds versioning information.

Adds version information for applications, functions,
and manager events/actions.

This is not completely exhaustive by any means but
covers most new things added that have release
versioning information in the issue tracker.

ASTERISK-29940 #close

Change-Id: I506401e93c799715dbbe97c0a8ba18af2bf5e131

2 weeks agosamples: Remove obsolete sample configs.
Naveen Albert [Sat, 2 Apr 2022 22:38:50 +0000 (22:38 +0000)]
samples: Remove obsolete sample configs.

Removes a couple sample config files for modules
which have since been removed from Asterisk.

ASTERISK-30008 #close

Change-Id: I6be89cafc6c575d98a5315e4912b61a833aacf52

2 weeks agochan_pjsip: add allow_sending_180_after_183 option
Mark Petersen [Mon, 21 Feb 2022 13:23:21 +0000 (14:23 +0100)]
chan_pjsip: add allow_sending_180_after_183 option

added new global config option "allow_sending_180_after_183"
that if enabled will preserve 180 after a 183

ASTERISK-29842

Change-Id: I8a53f8c35595b6d16d8e86e241b5f110d92f3d18

2 weeks agochan_sip: SIP route header is missing on UPDATE
Mark Petersen [Mon, 7 Mar 2022 14:11:41 +0000 (15:11 +0100)]
chan_sip: SIP route header is missing on UPDATE

if Asterisk need to send an UPDATE before answer
on a channel that uses Record-Route:
it will not include a Route header

ASTERISK-29955

Change-Id: Id1920ecbfea7739a038b14dc94487ecfe7b57eef

2 weeks agomanager: Terminate session on write error.
Joshua C. Colp [Mon, 25 Apr 2022 23:39:10 +0000 (20:39 -0300)]
manager: Terminate session on write error.

On a write error to an AMI session a flag was set to
indicate that the write error had occurred, with the
expected result being that the session be terminated.
This was not actually happening and instead writing
would continue to be attempted.

This change adds a check for the write error and causes
the session to actually terminate.

ASTERISK-29948

Change-Id: Icaf5d413d4c0d5dc78292a17287fecc8720a31a5

2 weeks agobridge_simple.c: Unhold channels on join simple bridge.
Yury Kirsanov [Thu, 21 Apr 2022 14:10:40 +0000 (10:10 -0400)]
bridge_simple.c: Unhold channels on join simple bridge.

Patch provided inline by Yury Kirsanov on the linked issue and
approved by Josh Colp.

ASTERISK-29253 #close

Change-Id: I5b9ccc67ebf06e875ed061d9e7fc21f47b0a4e1f

2 weeks agores_aeap & res_speech_aeap: Add Asterisk External Application Protocol
Kevin Harwell [Fri, 18 Jun 2021 17:54:10 +0000 (12:54 -0500)]
res_aeap & res_speech_aeap: Add Asterisk External Application Protocol

Add framework to connect to, and read and write protocol based
messages from and to an external application using an Asterisk
External Application Protocol (AEAP). This has been divided into
several abstractions:

 1. transport - base communication layer (currently websocket only)
 2. message - AEAP description and data (currently JSON only)
 3. transaction - links/binds requests and responses
 4. aeap - transport, message, and transaction handler/manager

This patch also adds an AEAP implementation for speech to text.
Existing speech API callbacks for speech to text have been completed
making it possible for Asterisk to connect to a configured external
translator service and provide audio for STT. Results can also be
received from the external translator, and made available as speech
results in Asterisk.

Unit tests have also been created that test the AEAP framework, and
also the speech to text implementation.

ASTERISK-29726 #close

Change-Id: Iaa4b259f84aa63501e5fd2a6fb107f900b4d4ed2

3 weeks agoapp_dial: Flip stream direction of outgoing channel.
Maximilian Fridrich [Wed, 13 Apr 2022 13:12:03 +0000 (15:12 +0200)]
app_dial: Flip stream direction of outgoing channel.

When executing dial, the topology of the incoming channel is cloned and
used for the outgoing channel. This creates issues when an incoming
stream is sendonly or recvonly as the stream state of the outgoing
channel will be the same as the stream state of the incoming channel.

Now the stream state is flipped for the outgoing stream in
dial_exec_full if the incoming stream topology is recvonly or sendonly.

ASTERISK-29655
Reported by: Michael Auracher

ASTERISK-29638
Reported by: Michael Auracher

Change-Id: I294dc834ac9a5f048b101b691669959e9df630e1

3 weeks agores_pjsip_stir_shaken.c: Fix enabled when not configured.
Ben Ford [Thu, 21 Apr 2022 15:26:01 +0000 (10:26 -0500)]
res_pjsip_stir_shaken.c: Fix enabled when not configured.

There was an issue with the conditional where STIR/SHAKEN would be
enabled even when not configured. It has been changed to ensure that if
a profile does not exist and stir_shaken is not set in pjsip.conf, then
the conditional will return from the function without performing
STIR/SHAKEN operations.

ASTERISK-30024

Change-Id: I41286a3d35b033ccbfbe4129427a62cb793a86e6

3 weeks agores_pjsip: Always set async_operations to 1.
Joshua C. Colp [Wed, 6 Apr 2022 10:23:27 +0000 (07:23 -0300)]
res_pjsip: Always set async_operations to 1.

The async_operations setting on a transport configures how
many simultaneous incoming packets the transport can handle
when multiple threads are polling and waiting on the transport.
As we only use a single thread this was needlessly creating
incoming packets when set to a non-default value, wasting memory.

ASTERISK-30006

Change-Id: I1915973ef352862dc2852a6ba4cfce2ed536e68f

3 weeks agoconfig.h: Don't use C++ keywords as argument names.
Sean Bright [Tue, 19 Apr 2022 15:36:12 +0000 (11:36 -0400)]
config.h: Don't use C++ keywords as argument names.

ASTERISK-30021 #close

Change-Id: I70eb59b782a4946b979942e21422746b7563029c

3 weeks agocdr_adaptive_odbc: Add support for SQL_DATETIME field type.
Joshua C. Colp [Wed, 20 Apr 2022 12:40:47 +0000 (09:40 -0300)]
cdr_adaptive_odbc: Add support for SQL_DATETIME field type.

ASTERISK-30023

Change-Id: I0e1697f6af044e9eab7e07bbaeeffd1bb68ac34a

3 weeks agopjsip: Increase maximum number of format attributes.
Joshua C. Colp [Mon, 11 Apr 2022 09:30:33 +0000 (06:30 -0300)]
pjsip: Increase maximum number of format attributes.

Chrome has added more attributes, causing the limit to be
exceeded. This raises it up some more.

ASTERISK-30015

Change-Id: I964957c005c4e6f7871b15ea1ccd9b4659c7ef32

4 weeks agoAST-2022-002 - res_stir_shaken/curl: Add ACL checks for Identity header.
Ben Ford [Mon, 28 Feb 2022 17:19:54 +0000 (11:19 -0600)]
AST-2022-002 - res_stir_shaken/curl: Add ACL checks for Identity header.

Adds a new configuration option, stir_shaken_profile, in pjsip.conf that
can be specified on a per endpoint basis. This option will reference a
stir_shaken_profile that can be configured in stir_shaken.conf. The type
of this option must be 'profile'. The stir_shaken option can be
specified on this object with the same values as before (attest, verify,
on), but it cannot be off since having the profile itself implies wanting
STIR/SHAKEN support. You can also specify an ACL from acl.conf (along
with permit and deny lines in the object itself) that will be used to
limit what interfaces Asterisk will attempt to retrieve information from
when reading the Identity header.

ASTERISK-29476

Change-Id: I87fa61f78a9ea0cd42530691a30da3c781842406

4 weeks agoAST-2022-001 - res_stir_shaken/curl: Limit file size and check start.
Ben Ford [Fri, 7 Jan 2022 14:50:18 +0000 (08:50 -0600)]
AST-2022-001 - res_stir_shaken/curl: Limit file size and check start.

Put checks in place to limit how much we will actually download, as well
as a check for the data we receive at the start to ensure it begins with
what we would expect a certificate to begin with.

ASTERISK-29872

Change-Id: Ifd3c6b8bd52b8b6192a04166ccce4fc8a8000b46

4 weeks agofunc_odbc: Add SQL_ESC_BACKSLASHES dialplan function.
Joshua C. Colp [Thu, 10 Feb 2022 12:02:23 +0000 (08:02 -0400)]
func_odbc: Add SQL_ESC_BACKSLASHES dialplan function.

Some databases depending on their configuration using backslashes
for escaping. When combined with the use of ' this can result in
a broken func_odbc query.

This change adds a SQL_ESC_BACKSLASHES dialplan function which can
be used to escape the backslashes.

This is done as a dialplan function instead of being always done
as some databases do not require this, and always doing it would
result in incorrect data being put into the database.

ASTERISK-29838

Change-Id: I152bf34899b96ddb09cca3e767254d8d78f0c83d

5 weeks agoapp_mf, app_sf: Return -1 if channel hangs up.
Naveen Albert [Sat, 5 Mar 2022 01:41:30 +0000 (01:41 +0000)]
app_mf, app_sf: Return -1 if channel hangs up.

The ReceiveMF and ReceiveSF applications currently always
return 0, even if a channel has hung up. The call will still
end but generally applications are expected to return -1 if
the channel has hung up.

We now return -1 if a hangup occured to bring this behavior
in line with this norm. This has no functional impact, but
merely increases conformity with how these modules interact
with the PBX core.

ASTERISK-29951 #close

Change-Id: I234d755050ab8ed58f197c6925b968ba26b14033

5 weeks agoapp_queue: Add music on hold option to Queue.
Naveen Albert [Sat, 22 Jan 2022 15:53:27 +0000 (15:53 +0000)]
app_queue: Add music on hold option to Queue.

Adds the m option to the Queue application, which allows a
music on hold class to be specified at runtime which will
override the class configured in queues.conf.

This option functions like the m option to Dial.

ASTERISK-29876 #close

Change-Id: Ie25a48569cf8755c305c9438b1ed292c3adcf8d7

5 weeks agoapp_meetme: Emit warning if conference not found.
Naveen Albert [Sat, 5 Mar 2022 15:40:16 +0000 (15:40 +0000)]
app_meetme: Emit warning if conference not found.

Currently, if a user tries to access a non-dynamic
MeetMe conference and the conference is not found,
the call simply silent hangs up. There is no indication
to the user that anything went wrong at all.

This changes the relevant debug message to a warning
so that the user is notified of this invalidity.

ASTERISK-29954 #close

Change-Id: Iebcfae3755d00f2150d676ee211c57bc59530048

6 weeks agobuild: Remove obsolete leftover build references.
Naveen Albert [Thu, 24 Feb 2022 19:33:05 +0000 (19:33 +0000)]
build: Remove obsolete leftover build references.

Removes some leftover build and config references to
modules that have since been removed from Asterisk.

ASTERISK-29935 #close

Change-Id: Iaefc73a23f4b2de3c6c14d928050135b6d0ef6af

6 weeks agores_pjsip_header_funcs: wrong pool used tdata headers
Kevin Harwell [Wed, 23 Mar 2022 22:45:45 +0000 (17:45 -0500)]
res_pjsip_header_funcs: wrong pool used tdata headers

When adding headers to an outgoing request the headers were cloned using
the dialog's pool when they should have been cloned using tdata's pool.
Under certain circumstances it was possible for the dialog object, and
its pool to be freed while tdata is still active and available. Thus the
cloned header "disappeared", and when tdata tried to later access it a
crash would occur.

This patch makes it so all added headers are cloned appropriately using
tdata's pool.

ASTERISK-29411 #close
ASTERISK-29535 #close

Change-Id: I9852025b5ee93ce1c038209150ee9dba1e0767c5

6 weeks agodeprecation cleanup: remove leftover files
Kevin Harwell [Fri, 25 Mar 2022 15:46:15 +0000 (10:46 -0500)]
deprecation cleanup: remove leftover files

Several modules removal and deprecations occurred in 19.0.0 (initial
19 release), but associated UPGRADE files were not removed from
staging for some reason in the master branch.

This patch removes those files, and also removes a spurious leftover
header, chan_phone.h (associated module removed in 19).

Change-Id: Ib92142c846b45c882d6b2b6caca7225253c83add

6 weeks agopjproject: Update bundled to 2.12 release.
Joshua C. Colp [Thu, 24 Feb 2022 17:48:19 +0000 (13:48 -0400)]
pjproject: Update bundled to 2.12 release.

This change removes patches which have been merged into
upstream and updates some existing ones. It also adds
some additional config_site.h changes to restore previous
behavior, as well as a patch to allow multiple Authorization
headers. There seems to be some confusion or disagreement
on language in RFC 8760 in regards to whether multiple
Authorization headers are supported. The RFC implies it
is allowed, as does some past sipcore discussion. There is
also the catch all of "local policy" to allow it. In
the case of Asterisk we allow it.

ASTERISK-29351

Change-Id: Id39ece02dedb7b9f739e0e37ea47d76854af7191

6 weeks agopbx.c: Warn if there are too many includes in a context.
Naveen Albert [Sat, 5 Mar 2022 16:26:42 +0000 (16:26 +0000)]
pbx.c: Warn if there are too many includes in a context.

The PBX core uses the stack when it comes to includes, which
means that a context can only contain strictly fewer than
AST_PBX_MAX_STACK includes. If this is exceeded, then warnings
will be emitted for each number of includes beyond this if
searching for an extension in the including context, and if
the extension's inclusion is beyond the stack size, it will
simply not be found.

To address this, we now check if there are too many includes
in a context when the dialplan is reloaded so that if there
is an issue, the user is aware of at "compile time" as opposed
to "run time" only. Secondly, more details are printed out
when this message is encountered so it's clear what has happened.

ASTERISK-26719

Change-Id: Ia3700452e75a7af3391b3e82ee69f06a669f8958

7 weeks agoMakefile: Disable XML doc validation
George Joseph [Fri, 25 Mar 2022 19:00:48 +0000 (13:00 -0600)]
Makefile:  Disable XML doc validation

make_xml_documentation was being called with the --validate
flag set when it shouldn't have been.  This was causing
build failures if neither xmllint nor xmlstarlet were installed.
The correct behavior is to simply print a message that either
one of those tools should be installed for validation and
continue with the build.

ASTERISK-29988

Change-Id: Idc6c44114e7dd3fadae183a4e22f4fdba0b8a645

7 weeks agomake_xml_documentation: Remove usage of get_sourceable_makeopts
George Joseph [Fri, 25 Mar 2022 14:33:30 +0000 (08:33 -0600)]
make_xml_documentation: Remove usage of get_sourceable_makeopts

get_sourceable_makeopts wasn't handling variables with embedded
double quotes in them very well.  One example was the DOWNLOAD
variable when curl was being used instead of wget.  Rather than
trying to fix get_sourceable_makeopts, it's just been removed.

ASTERISK-29986
Reported by: Stefan Ruijsenaars

Change-Id: Idf2a90902228c2558daa5be7a4f8327556099cd2

7 weeks agochan_iax2: Fix spacing in netstats command
Naveen Albert [Sat, 5 Feb 2022 00:36:17 +0000 (00:36 +0000)]
chan_iax2: Fix spacing in netstats command

The iax2 show netstats command previously didn't contain
enough spacing in the header to properly align the table
header with the table body. This caused column headers
to not align with the values on longer channel names.

Some spacing is added to account for the longest channel
names that display (before truncation occurs) so that
columns are always properly aligned.

ASTERISK-29895 #close
patches:
  61205_misaligned2.patch submitted by Birger Harzenetter (license 5870)

Change-Id: I450ce6bb81157b9d6d149007e53b749f237b6d9f

7 weeks agoopenssl: Supress deprecation warnings from OpenSSL 3.0
Sean Bright [Fri, 25 Mar 2022 13:19:35 +0000 (09:19 -0400)]
openssl: Supress deprecation warnings from OpenSSL 3.0

There is work going on to update our OpenSSL usage to avoid the
deprecated functions but in the meantime make it possible to compile
in devmode.

Change-Id: Ib082eb8b3751f0185d8aa8fe127da664c93f0726

7 weeks agodocumentation: Add information on running install_prereq script in readme
Marcel Wagner [Wed, 23 Mar 2022 21:04:13 +0000 (22:04 +0100)]
documentation: Add information on running install_prereq script in readme

Adding information in the readme about running the install_preqreq script to install components that the ./configure script might indicate as missing.

ASTERISK-29976 #close

Change-Id: Ic287b46300168729838bddd8f9265e98fc22bce6

7 weeks agochan_iax2: Fix perceived showing host address.
Naveen Albert [Sun, 13 Mar 2022 17:46:36 +0000 (17:46 +0000)]
chan_iax2: Fix perceived showing host address.

ASTERISK_22025 introduced a regression that shows
the host IP and port as the perceived IP and port
again, as opposed to showing the actual perceived
address. This fixes this by showing the correct
information.

ASTERISK-29048 #close

Change-Id: I0ad3e25bc6b449e83ce72ea5d1a1cdba72aa304a

7 weeks agores_pjsip_sdp_rtp: Improve detecting of lack of RTP activity
Boris P. Korzun [Tue, 22 Feb 2022 20:51:02 +0000 (23:51 +0300)]
res_pjsip_sdp_rtp: Improve detecting of lack of RTP activity

Change RTP timer behavior for detecting RTP only after two-way
SDP channel establishment. Ignore detecting after receiving 183
with SDP or while direct media is used.
Make rtp_timeout and rtp_timeout_hold options consistent to rtptimeout
and rtpholdtimeout options in chan_sip.

ASTERISK-26689 #close
ASTERISK-29929 #close

Change-Id: I07326d5b9c40f25db717fd6075f6f3a8d77279eb

7 weeks agoconfigure.ac: Use pkg-config to detect libxml2
Hugh McMaster [Wed, 16 Mar 2022 00:06:44 +0000 (11:06 +1100)]
configure.ac: Use pkg-config to detect libxml2

Use pkg-config to detect libxml2, falling back to xml2-config if the
former is not available.

This patch ensures Asterisk continues to build on systems without
xml2-config installed.

The patch also updates the associated 'configure' files.

ASTERISK-29970 #close

Change-Id: I3c90dfe0b0590486cbb8e6d426a7c5c4199410c0

7 weeks agotime: add support for time64 libcs
Philip Prindeville [Sun, 13 Feb 2022 19:06:37 +0000 (12:06 -0700)]
time: add support for time64 libcs

Treat time_t's as entirely unique and use the POSIX API's for
converting to/from strings.

Lastly, a 64-bit integer formats as 20 digits at most in base10.
Don't need to have any 100 byte buffers to hold that.

ASTERISK-29674 #close

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
Change-Id: Id7b25bdca8f92e34229f6454f6c3e500f2cd6f56

7 weeks agores_pjsip_pubsub: RLS 'uri' list attribute mismatch with SUBSCRIBE request
Alexei Gradinari [Tue, 15 Mar 2022 17:24:18 +0000 (13:24 -0400)]
res_pjsip_pubsub: RLS 'uri' list attribute mismatch with SUBSCRIBE request

When asterisk generates the RLMI part of NOTIFY request,
the asterisk uses the local contact uri instead of the URI to which
the SUBSCRIBE request is sent.
Because of this mismatch some IP phones (for example Cisco 5XX) ignore
this list.

According
https://datatracker.ietf.org/doc/html/rfc4662#section-5.2
  The first mandatory <list> attribute is "uri", which contains the uri
  that corresponds to the list. Typically, this is the URI to which
  the SUBSCRIBE request was sent.
https://datatracker.ietf.org/doc/html/rfc4662#section-5.3
  The "uri" attribute identifies the resource to which the <resource>
  element corresponds. Typically, this will be a SIP URI that, if
  subscribed to, would return the state of the resource.

This patch makes asterisk to generate URI using SUBSCRIBE request URI.

ASTERISK-29961 #close

Change-Id: I1fcfc08fd589677f40608c59a4e143c45ee05f6c

7 weeks agoapp_dial: Document DIALSTATUS return values.
Naveen Albert [Sat, 5 Mar 2022 12:04:57 +0000 (12:04 +0000)]
app_dial: Document DIALSTATUS return values.

Adds documentation for all of the possible return values
for the DIALSTATUS variable in the Dial application.

ASTERISK-25716

Change-Id: Id22593f1f1f7ea86e5734cee49516ec50848e8c0

7 weeks agostasis_recording: Perform a complete match on requested filename.
Sean Bright [Thu, 10 Mar 2022 17:07:40 +0000 (12:07 -0500)]
stasis_recording: Perform a complete match on requested filename.

Using the length of a file found on the filesystem rather than the
file being requested could result in filenames whose names are
substrings of another to be erroneously matched.

We now ensure a complete comparison before returning a positive
result.

ASTERISK-29960 #close

Change-Id: Id3ffc77681b9b75b8569062f3d952a128a21c71a

7 weeks agodownload_externals: Use HTTPS for downloads
Sean Bright [Tue, 22 Mar 2022 14:01:27 +0000 (10:01 -0400)]
download_externals: Use HTTPS for downloads

ASTERISK-29980 #close

Change-Id: I7b347665822ea2774dd322276c09be67914d2065

7 weeks agoconversions.c: Specify that we only want to parse decimal numbers.
Sean Bright [Fri, 4 Mar 2022 20:26:22 +0000 (15:26 -0500)]
conversions.c: Specify that we only want to parse decimal numbers.

Passing 0 as the last argument to strtoimax() or strtoumax() causes
octal and hexadecimal to be accepted which was not originally
intended. So we now force to only accept decimal.

ASTERISK-29950 #close

Change-Id: I93baf0f273441e8280354630a463df263a8c0edd

7 weeks agologger: workaround woefully small BUFSIZ in MUSL
Philip Prindeville [Tue, 22 Feb 2022 01:05:49 +0000 (18:05 -0700)]
logger: workaround woefully small BUFSIZ in MUSL

MUSL defines BUFSIZ as 1024 which is not reasonable for log messages.

More broadly, BUFSIZ is the amount of buffering stdio.h does, which
is arbitrary and largely orthogonal to what logging should accept
as the maximum message size.

ASTERISK-29928

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
Change-Id: Iaa49fbbab029c64ae3d95e4b18270e0442cce170

7 weeks agopbx_builtins: Add missing options documentation
Naveen Albert [Mon, 14 Mar 2022 16:57:29 +0000 (16:57 +0000)]
pbx_builtins: Add missing options documentation

BackGround and WaitExten both accept options that are not
currently documented. This adds documentation for these
options to the xml documentation for each application.

ASTERISK-29967 #close

Change-Id: If812a9f1ccbba3e4d427a0e7a6dea923c2f905f7

2 months agores_pjsip_pubsub: update RLS to reflect the changes to the lists
Alexei Gradinari [Tue, 8 Feb 2022 22:58:30 +0000 (17:58 -0500)]
res_pjsip_pubsub: update RLS to reflect the changes to the lists

This patch makes the Resource List Subscriptions (RLS) dynamic.
The asterisk updates the current subscriptions to reflect the changes
to the list on the subscriptions refresh. If list items are added,
removed, updated or do not exist anymore, the asterisk regenerates
the resource list.

ASTERISK-29906 #close

Change-Id: Icee8c00459a7aaa43c643d77ce6f16fb7ab037d3

2 months agores_agi: Fix xmldocs bug with set music.
Naveen Albert [Fri, 25 Feb 2022 17:01:41 +0000 (17:01 +0000)]
res_agi: Fix xmldocs bug with set music.

The XML documentation for the SET MUSIC AGI
command is invalid, as the parameter does not
have a name and the on/off enum options for
the on/off argument are listed separately, which
is incorrect. The cumulative effect of these currently
is that the Asterisk Wiki documentation for SET MUSIC
is broken and external documentation generators crash
on SET MUSIC due to the malformed documentation.

These issues are corrected so that the documentation
can be successfully parsed as with other similar AGI
commands.

ASTERISK-29939 #close
ASTERISK-28891 #close

Change-Id: I8c3d59897531bcbc401cbc7b00c9e2829dcb35f8

2 months agores_config_pgsql: Add text-type column check in require_pgsql()
Boris P. Korzun [Fri, 18 Feb 2022 09:19:37 +0000 (12:19 +0300)]
res_config_pgsql: Add text-type column check in require_pgsql()

Omit "unsupported column type 'text'" warning in logs while
using text-type column in the PgSQL backend.

ASTERISK-29924 #close

Change-Id: I48061a7d469426859670db07f1ed8af1eb814712

2 months agoapp_queue: Add QueueWithdrawCaller AMI action
Kfir Itzhak [Wed, 9 Feb 2022 10:28:29 +0000 (12:28 +0200)]
app_queue: Add QueueWithdrawCaller AMI action

This adds a new AMI action called QueueWithdrawCaller.
This AMI action makes it possible to withdraw a caller from a queue,
in a safe and a generic manner.
This can be useful for retrieving a specific call and
dispatching it to a specific extension.
It works by signaling the caller to exit the queue application
whenever it can. Therefore, it is not guaranteed
that the call will leave the queue.

ASTERISK-29909 #close

Change-Id: Ic15aa238e23b2884abdcaadff2fda7679e29b7ec

2 months agoami: Improve substring parsing for disabled events.
Naveen Albert [Thu, 24 Feb 2022 16:55:23 +0000 (16:55 +0000)]
ami: Improve substring parsing for disabled events.

ASTERISK_29853 added the ability to selectively disable
AMI events on a global basis, but the logic for this uses
strstr which means that events with names which are the prefix
of another event, if disabled, could disable those events as
well.

Instead, we account for this possibility to prevent this
undesired behavior from occuring.

ASTERISK_29853

Change-Id: Icccd1872602889806740971e4adf932f92466959

2 months agoxml.c, config,c: Add stylesheets and variable list string parsing
George Joseph [Wed, 2 Mar 2022 14:57:26 +0000 (07:57 -0700)]
xml.c, config,c:  Add stylesheets and variable list string parsing

Added functions to open, close, and apply XML Stylesheets
to XML documents.  Although the presence of libxslt was already
being checked by configure, it was only happening if xmldoc was
enabled.  Now it's checked regardless.

Added ability to parse a string consisting of comma separated
name/value pairs into an ast_variable list.  The reverse of
ast_variable_list_join().

Change-Id: I1e1d149be22165a1fb8e88e2903a36bba1a6cf2e

2 months agoxmldoc: Fix issue with xmlstarlet validation
George Joseph [Tue, 1 Mar 2022 16:58:44 +0000 (09:58 -0700)]
xmldoc: Fix issue with xmlstarlet validation

Added the missing xml-stylesheet and Xinclude namespace
declarations in pjsip_config.xml and pjsip_manager.xml.

Updated make_xml_documentation to show detailed errors when
xmlstarlet is the validator.  It's now run once with the '-q'
option to suppress harmless/expected messages and if it actually
fails, it's run again without '-q' but with '-e' to show
the actual errors.

Change-Id: I4bdc9d2ea6741e8d2e5eb82df60c68ccc59e1f5e

2 months agocore: Config and XML tweaks needed for geolocation
George Joseph [Sun, 20 Feb 2022 20:16:22 +0000 (13:16 -0700)]
core: Config and XML tweaks needed for geolocation

Added:

Replace a variable in a list:
int ast_variable_list_replace_variable(struct ast_variable **head,
    struct ast_variable *old, struct ast_variable *new);
Added test as well.

Create a "name=value" string from a variable list:
'name1="val1",name2="val2"', etc.
struct ast_str *ast_variable_list_join(
    const struct ast_variable *head, const char *item_separator,
    const char *name_value_separator, const char *quote_char,
    struct ast_str **str);
Added test as well.

Allow the name of an XML element to be changed.
void ast_xml_set_name(struct ast_xml_node *node, const char *name);

Change-Id: I330a5f63dc0c218e0d8dfc0745948d2812141ccb

2 months agoMakefile: Allow XML documentation to exist outside source files
George Joseph [Mon, 14 Feb 2022 13:31:25 +0000 (06:31 -0700)]
Makefile: Allow XML documentation to exist outside source files

Moved the xmldoc build logic from the top-level Makefile into
its own script "make_xml_documentation" in the build_tools
directory.

Created a new utility script "get_sourceable_makeopts", also in
the build_tools directory, that dumps the top-level "makeopts"
file in a format that can be "sourced" from shell sscripts.
This allows scripts to easily get the values of common make
build variables such as the location of the GREP, SED, AWK, etc.
utilities as well as the AST* and library *_LIB and *_INCLUDE
variables.

Besides moving logic out of the Makefile, some optimizations
were done like removing "third-party" from the list of
subdirectories to be searched for documentation and changing some
assignments from "=" to ":=" so they're only evaluated once.
The speed increase is noticeable.

The makeopts.in file was updated to include the paths to
REALPATH and DIRNAME.  The ./conifgure script was setting them
but makeopts.in wasn't including them.

So...

With this change, you can now place documentation in any"c"
source file AND you can now place it in a separate XML file
altogether.  The following are examples of valid locations:

res/res_pjsip.c
    Using the existing /*** DOCUMENTATION ***/ fragment.

res/res_pjsip/pjsip_configuration.c
    Using the existing /*** DOCUMENTATION ***/ fragment.

res/res_pjsip/pjsip_doc.xml
    A fully-formed XML file.  The "configInfo", "manager",
    "managerEvent", etc. elements that would be in the "c"
    file DOCUMENTATION fragment should be wrapped in proper
    XML.  Example for "somemodule.xml":

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE docs SYSTEM "appdocsxml.dtd">
    <docs>
        <configInfo>
        ...
        </configInfo>
    </docs>

It's the "appdocsxml.dtd" that tells make_xml_documentation
that this is a documentation XML file and not some other XML file.
It also allows many XML-capable editors to do formatting and
validation.

Other than the ".xml" suffix, the name of the file is not
significant.

As a start... This change also moves the documentation that was
in res_pjsip.c to 2 new XML files in res/res_pjsip:
pjsip_config.xml and pjsip_manager.xml.  This cut the number of
lines in res_pjsip.c in half. :)

Change-Id: I486c16c0b5a44d7a8870008e10c941fb19b71ade

2 months agobuild: Refactor the earlier "basebranch" commit
George Joseph [Thu, 17 Feb 2022 16:26:46 +0000 (09:26 -0700)]
build: Refactor the earlier "basebranch" commit

Recap from earlier commit:  If you have a development branch for a
major project that will receive gerrit reviews it'll probably be
named something like "development/16/newproject" or a work branch
based on that "development" branch.  That will necessitate
setting "defaultbranch=development/16/newproject" in .gitreview.
The make_version script uses that variable to construct the
asterisk version however, which results in versions
like "GIT-development/16/newproject-ee582a8c7b" which is probably
not what you want.  It also constructs the URLs for downloading
external modules with that version, which will fail.

Fast-forward:

The earlier attempt at adding a "basebranch" variable to
.gitreview didn't work out too well in practice because changes
were made to .gitreview, which is a checked-in file.  So, if
you wanted to rebase your work branch on the base branch, rebase
would attempt to overwrite your .gitreview with the one from
the base branch and complain about a conflict.

This is a slighltly different approach that adds three methods to
determine the mainline branch:

1.  --- MAINLINE_BRANCH from the environment

If MAINLINE_BRANCH is already set in the environment, that will
be used.  This is primarily for the Jenkins jobs.

2.  --- .develvars

Instead of storing the basebranch in .gitreview, it can now be
stored in a non-checked-in ".develvars" file and keyed by the
current branch.  So, if you were working on a branch named
"new-feature-work" based on "development/16/new-feature" and wanted
 to push to that branch in Gerrit but wanted to pull the external
 modules for 16, you'd create the following .develvars file:

[branch "new-feature-work"]
    mainline-branch = 16

The .gitreview file would still look like:

[gerrit]
defaultbranch=development/16/new-feature

...which would cause any reviews pushed from "new-feature-work" to
go to the "development/16/new-feature" branch in Gerrit.

The key is that the .develvars file is NEVER checked in (it's been
added to .gitignore).

3.  --- Well Known Development Branch

If you're actually working in a branch named like
"development/<mainline_branch>/some-feature", the mainline branch
will be parsed from it.

4.  --- .gitreview

If none of the earlier conditions exist, the .gitreview
"defaultbranch" variable will be used just as before.

Change-Id: I1cdeeaa0944bba3f2e01d7a2039559d0c266f8c9

2 months agojansson: Update bundled to 2.14 version.
Joshua C. Colp [Wed, 23 Feb 2022 13:58:25 +0000 (09:58 -0400)]
jansson: Update bundled to 2.14 version.

ASTERISK-29353

Change-Id: I4ea43eda1691565563a4c03ef37166952d211b2b

2 months agofunc_channel: Add lastcontext and lastexten.
Naveen Albert [Thu, 6 Jan 2022 13:57:01 +0000 (13:57 +0000)]
func_channel: Add lastcontext and lastexten.

Adds the lastcontext and lastexten channel fields to allow users
to access previous dialplan execution locations.

ASTERISK-29840 #close

Change-Id: Ib455fe300cc8e9a127686896ee2d0bd11e900307

2 months agochannel.c: Clean up debug level 1.
Naveen Albert [Sat, 5 Feb 2022 01:27:27 +0000 (01:27 +0000)]
channel.c: Clean up debug level 1.

Although there are 10 debugs levels, over time,
many current debug calls have come to use
inappropriately low debug levels. In particular,
a select few debug calls (currently all debug 1)
can result in thousands of debug messages per minute
for a single call.

This can adds a lot of noise to core debug
which dilutes the value in having different
debug levels in the first place, as these
log messages are from the core internals are
are better suited for higher debug levels.

Some debugs levels are thus adjusted so that
debug level 1 is not inappropriately overloaded
with these extremely high-volume and general
debug messages.

ASTERISK-29897 #close

Change-Id: I55a71598993552d3d64a401a35ee99474770d4b4

2 months agoconfigs, LICENSE: remove pbx.digium.com.
Naveen Albert [Thu, 17 Feb 2022 19:47:59 +0000 (19:47 +0000)]
configs, LICENSE: remove pbx.digium.com.

pbx.digium.com no longer accepts IAX2 calls and
there are no plans for it to come back.

Accordingly, nonworking IAX2 URIs are removed from
both the LICENSE file and the sample config.

ASTERISK-29923 #close

Change-Id: I257c54d4d812ed6b4bd4cbec2cd7ebe2b87b5bad

2 months agodocumentation: Add since tag to xmldocs DTD
Naveen Albert [Sat, 5 Feb 2022 01:11:43 +0000 (01:11 +0000)]
documentation: Add since tag to xmldocs DTD

Adds the since tag to the documentation DTD so
that individual applications, functions, etc.
can now specify when they were added to Asterisk.

This tag is added at the individual application,
function, etc. level as opposed to at the module
level because modules can expand over time as new
functionality is added, and granularity only
to the module level would generally not be useful.

This enables the ability to more easily determine
when new functionality was added to Asterisk, down
to minor version as opposed to just by major version.
This makes it easier for users to write more portable
dialplan if desired to not use functionality that may
not be widely available yet.

ASTERISK-29896 #close

Change-Id: Ibbb35c702d8038bdc3fd0a944fbfa69384cc15d5

2 months agoasterisk: Add macro for curl user agent.
Naveen Albert [Thu, 13 Jan 2022 14:37:16 +0000 (14:37 +0000)]
asterisk: Add macro for curl user agent.

Currently, each module that uses libcurl duplicates the standard
Asterisk curl user agent.

This adds a global macro for the Asterisk user agent used for
curl requests to eliminate this duplication.

ASTERISK-29861 #close

Change-Id: I9fc37935980384b4daf96ae54fa3c9adb962ed2d

2 months agores_stir_shaken: refactor utility function
Naveen Albert [Thu, 16 Dec 2021 19:41:56 +0000 (19:41 +0000)]
res_stir_shaken: refactor utility function

Refactors temp file utility function into file.c.

ASTERISK-29809 #close

Change-Id: Ife478708c8f2b127239cb73c1755ef18c0bf431b

2 months agoapp_voicemail: Emit warning if asking for nonexistent mailbox.
Naveen Albert [Wed, 16 Feb 2022 11:34:34 +0000 (11:34 +0000)]
app_voicemail: Emit warning if asking for nonexistent mailbox.

Currently, if VoiceMailMain is called with a mailbox, if that
mailbox doesn't exist, then the application silently falls back
to prompting the user for the mailbox, as if no arguments were
provided.

However, if a specific mailbox is requested and it doesn't exist,
then no warning at all is emitted.

This fixes this behavior to now warn if a specifically
requested mailbox could not be accessed, before falling back to
prompting the user for the correct mailbox.

ASTERISK-29920 #close

Change-Id: Ib4093b88cd661a2cabc5d685777d4e2f0ebd20a4

2 months agores_pjsip_pubsub: fix Batched Notifications stop working
Alexei Gradinari [Mon, 7 Feb 2022 22:31:19 +0000 (17:31 -0500)]
res_pjsip_pubsub: fix Batched Notifications stop working

If Subscription refresh occurred between when the batched notification
was scheduled and the serialized notification was to be sent,
then new schedule notification task would never be added.

There are 2 threads:

thread #1. ast_sip_subscription_notify is called,
if notification_batch_interval then call schedule_notification.
1.1. The schedule_notification checks notify_sched_id > -1
not true, then
send_scheduled_notify = 1
notify_sched_id =
  ast_sched_add(sched, sub_tree->notification_batch_interval, sched_cb....
1.2. The sched_cb pushes task serialized_send_notify to serializer
and returns 0 which means no reschedule.
1.3. The serialized_send_notify checks send_scheduled_notify if it's false
the just returns. BUT notify_sched_id is still set, so no more ast_sched_add.

thread #2. pubsub_on_rx_refresh is called
2.1 it pushes serialized_pubsub_on_refresh_timeout to serializer
2.2. The serialized_pubsub_on_refresh_timeout calls pubsub_on_refresh_timeout
which calls send_notify
2.3. The send_notify set send_scheduled_notify = 0;

The serialized_send_notify should always unset notify_sched_id.

ASTERISK-29904 #close

Change-Id: Ifc50c00b213c396509e10326a1ed89d8cf8c7875

2 months agores_pjsip_pubsub: provide a display name for RLS subscriptions
Alexei Gradinari [Tue, 1 Feb 2022 15:59:02 +0000 (10:59 -0500)]
res_pjsip_pubsub: provide a display name for RLS subscriptions

Whereas BLFs allow to show a display name for each RLS entry,
the asterisk provides only the extension now.
This is not end user friendly.

This commit adds a new resource_list option, resource_display_name,
to indicate whether display name of resource or the resource name being
provided for RLS entries.
If this option is enabled, the Display Name will be provided.
This option is disabled by default to remain the previous behavior.
If the 'event' set to 'presence' or 'dialog' the non-empty HINT name
will be set as the Display Name.
The 'message-summary' is not supported yet.

ASTERISK-29891 #close

Change-Id: Ic5306bd5a7c73d03f5477fe235e9b0f41c69c681

2 months agofunc_db: Add validity check for key names when writing.
Naveen Albert [Fri, 18 Feb 2022 12:09:47 +0000 (12:09 +0000)]
func_db: Add validity check for key names when writing.

Adds a simple sanity check for key names when users are
writing data to AstDB. This captures four cases indicating
malformed keynames that generally result in bad data going
into the DB that the user didn't intend: an empty key name,
a key name beginning or ending with a slash, and a key name
containing two slashes in a row. Generally, this is the
result of a variable being used in the key name being empty.

If a malformed key name is detected, a warning is emitted
to indicate the bug in the dialplan.

ASTERISK-29925 #close

Change-Id: Ifc08a9fe532a519b1b80caca1aafed7611d573bf

2 months agocli: Add core dump info to core show settings.
Naveen Albert [Fri, 14 Jan 2022 01:37:57 +0000 (01:37 +0000)]
cli: Add core dump info to core show settings.

Adds two pieces of information to the core show settings command
which are useful in the context of getting backtraces.

The first is to display whether or not Asterisk would generate
a core dump if it were to crash.

The second is to show the current running directory of Asterisk.

ASTERISK-29866 #close

Change-Id: Ic42c0a9ecc233381aad274d86c62808d1ebb4d83

2 months agodocumentation: Adds missing default attributes.
Naveen Albert [Sat, 5 Feb 2022 01:46:27 +0000 (01:46 +0000)]
documentation: Adds missing default attributes.

The configObject tag contains a default attribute which
allows the default value to be specified, if applicable.
This allows for the default value to show up specially on
the wiki in a way that is clear to users.

There are a couple places in the tree where default values
are included in the description as opposed to as attributes,
which means these can't be parsed specially for the wiki.
These are changed to use the attribute instead of being
included in the text description.

ASTERISK-29898 #close

Change-Id: I9d7ea08f50075f41459ea7b76654906b674ec755

2 months agoapp_mp3: Document and warn about HTTPS incompatibility.
Naveen Albert [Sat, 5 Feb 2022 12:39:42 +0000 (12:39 +0000)]
app_mp3: Document and warn about HTTPS incompatibility.

mpg123 doesn't support HTTPS, but the MP3Player application
doesn't document this or warn the user about this. HTTPS
streams have become more common nowadays and users could
reasonably try to play them without being aware they should
use the HTTP stream instead.

This adds documentation to note this limitation. It also
throws a warning if users try to use the HTTPS stream to
tell them to use the HTTP stream instead.

ASTERISK-29900 #close

Change-Id: Ie3b029be5258c5a701f71ed3b1a7a80d1e03b827

2 months agoapp_mf: Add max digits option to ReceiveMF.
Naveen Albert [Sat, 22 Jan 2022 22:52:45 +0000 (22:52 +0000)]
app_mf: Add max digits option to ReceiveMF.

Adds an option to the ReceiveMF application to allow specifying a
maximum number of digits.

Originally, this capability was not added to ReceiveMF as it was
with ReceiveSF because typically a ST digit is used to denote that
sending of digits is complete. However, there are certain signaling
protocols which simply transmit a digit (such as Expanded In-Band
Signaling) and for these, it's necessary to be able to read a
certain number of digits, as opposed to until receiving a ST digit.

This capability is added as an option, as opposed to as a parameter,
to remain compatible with existing usage (and not shift the
parameters).

ASTERISK-29877 #close

Change-Id: I4229167c9aa69b87402c3c2a9065bd8dfa973a0b

2 months agoami: Allow events to be globally disabled.
Naveen Albert [Sun, 9 Jan 2022 13:32:48 +0000 (13:32 +0000)]
ami: Allow events to be globally disabled.

The disabledevents setting has been added to the general section
in manager.conf, which allows users to specify events that
should be globally disabled and not sent to any AMI listeners.

This allows for processing of these AMI events to end sooner and,
for frequent AMI events such as Newexten which users may not have
any need for, allows them to not be processed. Additionally, it also
cleans up core debug as previously when debug was 3 or higher,
the debug was constantly spammed by "Analyzing AMI event" messages
along with a complete dump of the event contents (often for Newexten).

ASTERISK-29853 #close

Change-Id: Id42b9a3722a1f460d745cad1ebc47c537fd4f205

3 months agotaskprocessor.c: Prevent crash on graceful shutdown
Mike Bradeen [Thu, 3 Feb 2022 01:18:06 +0000 (18:18 -0700)]
taskprocessor.c: Prevent crash on graceful shutdown

When tps_shutdown is called as part of the cleanup process there is a
chance that one of the taskprocessors that references the
tps_singletons object is still running.  The change is to allow for
tps_shutdown to check tps_singleton's container count and give the
running taskprocessors a chance to finish.  If after
AST_TASKPROCESSOR_SHUTDOWN_MAX_WAIT (10) seconds there are still
container references we shutdown anyway as this is most likely a bug
due to a taskprocessor not being unreferenced.

ASTERISK-29365

Change-Id: Ia932fc003d316389b9c4fd15ad6594458c9727f1

3 months agoapp_queue: load queues and members from Realtime when needed
Alexei Gradinari [Fri, 21 Jan 2022 19:00:53 +0000 (14:00 -0500)]
app_queue: load queues and members from Realtime when needed

There are a lot of Queue AMI actions and Queue applications
which do not load queue and queue members from Realtime.

AMI actions
QueuePause - if queue not in memory - response "Interface not found".
QueueStatus/QueueSummary - if queue not in memory - empty response.

Applications:
PauseQueueMember - if queue not in memory
Attempt to pause interface %s, not found
UnpauseQueueMember - if queue not in memory
Attempt to unpause interface xxxxx, not found

This patch adds a new function load_realtime_queues
which loads queue and queue members for desired queue
or all queues and all members if param 'queuename' is NULL or empty.
Calls the function load_realtime_queues when needed.

Also this patch fixes leak of ast_config in function set_member_value.

Also this patch fixes incorrect LOG_WARNING when pausing/unpausing
already paused/unpaused member.
The function ast_update_realtime returns 0 when no record modified.
So 0 is not an error to warn about.

ASTERISK-29873 #close
ASTERISK-18416 #close
ASTERISK-27597 #close

Change-Id: I554ee0eebde93bd8f49df7f84b74acb21edcb99c

3 months agomanager.c: Simplify AMI ModuleCheck handling
Sean Bright [Mon, 7 Feb 2022 16:55:51 +0000 (11:55 -0500)]
manager.c: Simplify AMI ModuleCheck handling

This code was needlessly complex and would fail to properly delimit
the response message if LOW_MEMORY was defined.

Change-Id: Iae50bf09ef4bc34f9dc4b49435daa76f8b2c5b6e

3 months agores_prometheus.c: missing module dependency
Mark Petersen [Fri, 21 Jan 2022 13:52:23 +0000 (14:52 +0100)]
res_prometheus.c: missing module dependency

added res_pjsip_outbound_registration to .requires in AST_MODULE_INFO
which fixes issue with module crashes on load "FRACK!, Failed assertion"

ASTERISK-29871

Change-Id: Ia0f49d048427a40e1b763296b834a52a03610096

3 months agores_pjsip.c: Correct minor typos in 'realm' documentation.
Sean Bright [Thu, 3 Feb 2022 21:48:49 +0000 (16:48 -0500)]
res_pjsip.c: Correct minor typos in 'realm' documentation.

Change-Id: I886936b808def5540d40071321e72f6bfa19063a

3 months agomanager.c: Generate valid XML if attribute names have leading digits.
Sean Bright [Mon, 31 Jan 2022 18:52:26 +0000 (13:52 -0500)]
manager.c: Generate valid XML if attribute names have leading digits.

The XML Manager Event Interface (amxml) now generates attribute names
that are compliant with the XML 1.1 specification. Previously, an
attribute name that started with a digit would be rendered as-is, even
though attribute names must not begin with a digit. We now prefix
attribute names that start with a digit with an underscore ('_') to
prevent XML validation failures.

This is not backwards compatible but my assumption is that compliant
XML parsers would already have been complaining about this.

ASTERISK-29886 #close

Change-Id: Icfaa56a131a082d803e9b7db5093806d455a0523

3 months agobuild_tools/make_version: Fix bashism in comparison.
Sean Bright [Tue, 1 Feb 2022 16:09:58 +0000 (11:09 -0500)]
build_tools/make_version: Fix bashism in comparison.

In POSIX sh (which we indicate in the shebang), there is no ==
operator.

Change-Id: Ic03d38214d14cdf329b0ba272279a815bb532965

3 months agobundled_pjproject: Add additional multipart search utils
George Joseph [Fri, 21 Jan 2022 20:08:11 +0000 (13:08 -0700)]
bundled_pjproject:  Add additional multipart search utils

Added the following APIs:
pjsip_multipart_find_part_by_header()
pjsip_multipart_find_part_by_header_str()
pjsip_multipart_find_part_by_cid_str()
pjsip_multipart_find_part_by_cid_uri()

Change-Id: I6aee3dcf59eb171f93aae0f0564ff907262ef40d

3 months agochan_sip.c Fix pickup on channel that are in AST_STATE_DOWN
Mark Petersen [Fri, 7 Jan 2022 10:01:27 +0000 (11:01 +0100)]
chan_sip.c Fix pickup on channel that are in AST_STATE_DOWN

resolve issue with pickup on device that uses "183" and not "180"

ASTERISK-29832

Change-Id: I4c7d223870f8ce9a7354e0f73d4e4cb2e8b58841

3 months agobuild: Add "basebranch" to .gitreview
George Joseph [Wed, 26 Jan 2022 13:56:15 +0000 (06:56 -0700)]
build: Add "basebranch" to .gitreview

If you have a development branch for a major project that
will receive gerrit reviews it'll probably be named something
like "development/16/newproject".  That will necessitate setting
"defaultbranch=development/16/newproject" in .gitreview.  The
make_version script uses that variable to construct the asterisk
version however, which results in versions like
"GIT-development/16/newproject-ee582a8c7b" which is probably not
what you want.  Worse, since the download_externals script uses
make_version to construct the URL to download the binary codecs
or DPMA.  Since it's expecting a simple numeric version, the
downloads will fail.

To get this to work, a new variable "basebranch" has been added
to .gitreview and make_version has been updated to use that instead
of defaultversion:

.gitreview:
defaultbranch=development/16/myproject
basebranch=16

Now git-review will send the reviews to the proper branch
(development/16/myproject) but the version will still be
constructed using the simple branch number (16).

If "basebranch" is missing from .gitreview, make_version will
fall back to using "defaultbranch".

Change-Id: I2941a3b21e668febeb6cfbc1a7bb51a67726fcc4

3 months agores_pjsip_outbound_authenticator_digest: Prevent ABRT on cleanup
George Joseph [Mon, 31 Jan 2022 13:09:09 +0000 (06:09 -0700)]
res_pjsip_outbound_authenticator_digest: Prevent ABRT on cleanup

In dev mode, if you call pjsip_auth_clt_deinit() with an auth_sess
that hasn't been initialized, it'll assert and abort.  If
digest_create_request_with_auth() fails to find the proper
auth object however, it jumps to its cleanup which does exactly
that.  So now we no longer attempt to call pjsip_auth_clt_deinit()
if we never actually initialized it.

ASTERISK-29888

Change-Id: Ib6171c25c9fe8e61cc8d11129e324c021bc30b62

3 months agocdr: allow disabling CDR by default on new channels
Naveen Albert [Wed, 15 Dec 2021 18:36:42 +0000 (18:36 +0000)]
cdr: allow disabling CDR by default on new channels

Adds a new option, defaultenabled, to the CDR core to
control whether or not CDR is enabled on a newly created
channel. This allows CDR to be disabled by default on
new channels and require the user to explicitly enable
CDR if desired. Existing behavior remains unchanged.

ASTERISK-29808 #close

Change-Id: Ibb78c11974bda229bbb7004b64761980e0b2c6d1