pjsip_msg_find_hdr(), pjsip_msg_find_hdr_by_name(), and
pjsip_msg_find_hdr_by_names() require a pjsip_msg to be passed in
so if you need to search a header list that's not in a pjsip_msg,
you have to do it yourself. This commit adds generic versions of
those 3 functions that take in the actual header list head instead
of a pjsip_msg so if you need to search a list of headers in
something like a pjsip_multipart_part, you can do so easily.
Sean Bright [Wed, 12 Jan 2022 19:20:34 +0000 (14:20 -0500)]
say.c: Prevent erroneous failures with 'say' family of functions.
A regression was introduced in ASTERISK~29531 that caused 'say'
functions to fail with file lists that would previously have
succeeded. This caused affected channels to hang up where previously
they would have continued.
We now explicitly check for the empty string to restore the previous
behavior.
Naveen Albert [Sat, 8 Jan 2022 20:35:09 +0000 (20:35 +0000)]
documentation: Document built-in system and channel vars
Documentation for built-in special system and channel
vars is currently outdated, and updating is a manual
process since there is no XML documentation for these
anywhere.
This adds documentation for system vars to func_env
and for channel vars to func_channel so that they
appear along with the corresponding fields that would
be accessed using a function.
Naveen Albert [Sat, 8 Jan 2022 15:09:13 +0000 (15:09 +0000)]
pbx_variables: add missing ASTSBINDIR variable
Every config variable in the directories
section of asterisk.conf currently has a
counterpart built-in variable containing
the value of the config option, except
for the last one, astsbindir, which should
have an ASTSBINDIR variable.
However, the actual corresponding ASTSBINDIR
variable is missing in pbx_variables.c.
This adds the missing variable so that all
the config options have their corresponding
variable.
George Joseph [Tue, 30 Nov 2021 22:35:27 +0000 (15:35 -0700)]
bundled_pjproject: Make it easier to hack
There are times when you need to troubleshoot issues with bundled
pjproject or add new features that need to be pushed upstream
but...
* The source directory created by extracting the pjproject tarball
is not scanned for code changes so you have to keep forcing
rebuilds.
* The source directory isn't a git repo so you can't easily create
patches, do git bisects, etc.
* Accidentally doing a make distclean will ruin your day by wiping
out the source directory, and your changes.
* etc.
This commit makes that easier.
See third-party/pjproject/README-hacking.md for the details.
Naveen Albert [Wed, 15 Dec 2021 14:23:06 +0000 (14:23 +0000)]
cli: Add module refresh command
Adds a command to the CLI to unload and then
load a module. This makes it easier to perform
these operations which are often done
subsequently to load a new version of a module.
"module reload" already refers to reloading of
configuration, so the name "refresh" is chosen
instead.
Naveen Albert [Mon, 3 Jan 2022 01:13:33 +0000 (01:13 +0000)]
app_mp3: Throw warning on nonexistent stream
Currently, the MP3Player application doesn't
emit a warning if attempting to play a stream
which no longer exists. This can be a common
scenario as many mp3 streams are valid at some
point but can disappear at any time.
Now a warning is thrown if attempting to play
a nonexistent MP3 stream, instead of silently
exiting.
Kevin Harwell [Mon, 15 Nov 2021 22:13:19 +0000 (16:13 -0600)]
tcptls.c: refactor client connection to be more robust
The current TCP client connect code, blocks and does not handle EINTR
error case.
This patch makes the client socket non-blocking while connecting,
ensures a connect does not immediately fail due to EINTR "errors",
and adds a connect timeout option.
The original client start call sets the new timeout option to
"infinite", thus making sure old, orginal behavior is retained.
Steve Davies [Wed, 15 Dec 2021 12:23:45 +0000 (12:23 +0000)]
app_queue: Fix hint updates, allow dup. hints
A previous patch for ASTERISK_29578 caused a 'leak' of
extension state information across queues, causing the
state of the first member of unrelated queues to be
updated in addition to the correct member. Which queues
and members depended on the order of queues in the
iterator.
Additionally, it is possible to use the same 'hint:' on
multiple queue members, so the update cannot break out
of the update loop early when a match is found.
Sean Bright [Thu, 23 Dec 2021 21:57:59 +0000 (16:57 -0500)]
say.c: Honor requests for DTMF interruption.
SayAlpha, SayAlphaCase, SayDigits, SayMoney, SayNumber, SayOrdinal,
and SayPhonetic all claim to allow DTMF interruption if the
SAY_DTMF_INTERRUPT channel variable is set to a truthy value, but we
are failing to break out of a given 'say' application if DTMF actually
occurs.
Florentin Mayer [Tue, 16 Nov 2021 12:32:43 +0000 (13:32 +0100)]
res_pjsip_sdp_rtp: Preserve order of RTP codecs
The ast_rtp_codecs_payloads functions do not preserve the order in which
the payloads were specified on an incoming SDP media line. This leads to
a problem with the codec negotiation functionality, as the format
capabilities of the stream are extracted from the ast_rtp_codecs. This
commit moves the ast_rtp_codec to ast_format conversion to the place
where the order is still known.
Josh Soref [Sun, 7 Nov 2021 15:32:17 +0000 (10:32 -0500)]
test_time.c: Tolerate DST transitions
When test_timezone_watch runs very near a DST transition,
two time zones that would otherwise be expected to report the same
time can differ because of the DST transition.
Instead of having the test fail when this happens, report the
times, time zones, and dst flags.
George Joseph [Tue, 14 Dec 2021 17:39:16 +0000 (10:39 -0700)]
bundled_pjproject: Add more support for multipart bodies
Adding upstream patch for pull request...
https://github.com/pjsip/pjproject/pull/2920
---------------------------------------------------------------
sip_inv: Additional multipart support (#2919)
sip_inv.c:inv_check_sdp_in_incoming_msg() deals with multipart
message bodies in rdata correctly. In the case where early media is
involved though, the existing sdp has to be retrieved from the last
tdata sent in this transaction. This, however, always assumes that
the sdp sent is in a non-multipart body. While there's a function
to retrieve the sdp from multipart and non-multpart rdata bodies,
no similar function for tdata exists. So...
* The existing pjsip_rdata_get_sdp_info2 was refactored to
find the sdp in any body, multipart or non-multipart, and
from either an rdata or tdata. The new function is
pjsip_get_sdp_info. This new function detects whether the
pjsip_msg->body->data is the text representation of the sdp
from an rdata or an existing pjmedia_sdp_session object
from a tdata, or whether pjsip_msg->body is a multipart
body containing either of the two sdp formats.
* The exsting pjsip_rdata_get_sdp_info and pjsip_rdata_get_sdp_info2
functions are now wrappers that get the body and Content-Type
header from the rdata and call pjsip_get_sdp_info.
* Two new wrappers named pjsip_tdata_get_sdp_info and
pjsip_tdata_get_sdp_info2 have been created that get the body
from the tdata and call pjsip_get_sdp_info.
* inv_offer_answer_test.c was updated to test multipart scenarios.
Naveen Albert [Mon, 13 Dec 2021 22:49:52 +0000 (22:49 +0000)]
pbx_variables: initialize uninitialized variable
The variable cp4 in a variable substitution function
can potentially be used without being initialized
currently. This causes Asterisk to no longer compile.
This initializes cp4 to NULL to make the compiler
happy.
Kevin Harwell [Mon, 15 Nov 2021 21:35:05 +0000 (15:35 -0600)]
http.c: Add ability to create multiple HTTP servers
Previously, it was only possible to have one HTTP server in Asterisk.
With this patch it is now possible to have multiple HTTP servers
listening on different addresses.
Note, this behavior has only been made available through an API call
from within the TEST_FRAMEWORK. Specifically, this feature has been
added in order to allow unit test to create/start and stop servers,
if one has not been enabled through configuration.
Naveen Albert [Mon, 13 Dec 2021 00:08:26 +0000 (00:08 +0000)]
app.c: Throw warnings for nonexistent options
Currently, Asterisk doesn't throw warnings if options
are passed into applications that don't accept them.
This can confuse users if they're unaware that they
are doing something wrong.
This adds an additional check to parse_options so that
a warning is thrown anytime an option is parsed that
doesn't exist in the parsing application, so that users
are notified of the invalid usage.
Naveen Albert [Sun, 12 Dec 2021 02:11:21 +0000 (02:11 +0000)]
strings: Fix enum names in comment examples
The enum values for ast_strsep_flags includes
AST_STRSEP_STRIP. However, some comments reference
AST_SEP_STRIP, which doesn't exist. This fixes
these comments to use the correct value.
Naveen Albert [Wed, 17 Nov 2021 21:16:56 +0000 (21:16 +0000)]
configs: Updates to sample configs
Includes some minor updates to extensions.conf
and iax.conf. In particular, the demonstration
of macros in extensions.conf is removed, as
Macro is deprecated and will be removed soon.
These examples have been replaced with examples
demonstrating the usage of Gosub instead.
The older exten => ...,n syntax is also mostly
replaced with the same keyword to demonstrate the
newer, more concise way of defining extensions.
IAXTEL no longer exists, so this example is replaced
with something more generic.
Some documentation is also added to extensions.conf
and iax.conf to clarify some of the new expanded
encryption capabilities with IAX2.
Naveen Albert [Wed, 17 Nov 2021 21:39:34 +0000 (21:39 +0000)]
app_sendtext: Add ReceiveText application
Adds a ReceiveText application that can be used in
conjunction with SendText. Currently, there is no
way in Asterisk to receive text in the dialplan
(or anywhere else, really). This allows for Asterisk
to be the recipient of text instead of just the sender.
Naveen Albert [Sat, 20 Nov 2021 20:37:16 +0000 (20:37 +0000)]
pbx_variables: Increase parsing capabilities of MSet
Currently MSet can only parse a maximum of 24 variables.
If more variables are provided to MSet, the 24th variable
will simply contain the remainder of the string and the
remaining variables thereafter will never get set.
This increases the number of variables that can be parsed
in one go from 24 to 99. Additionally, documentation is added
since this limitation is currently undocumented and is
confusing to users who encounter this limitation.
Naveen Albert [Wed, 24 Nov 2021 02:21:23 +0000 (02:21 +0000)]
chan_sip: Fix crash when accessing RURI before initiating outgoing call
Attempting to access ${CHANNEL(ruri)} in a pre-dial handler before
initiating an outgoing call will cause Asterisk to crash. This is
because a null field is accessed, resulting in an offset from null and
subsequent memory access violation.
Since RURI is not guaranteed to exist, we now check if the base
pointer is non-null before calculating an offset.
Naveen Albert [Mon, 25 Oct 2021 21:19:49 +0000 (21:19 +0000)]
func_json: Adds JSON_DECODE function
Adds the JSON_DECODE function for parsing JSON in the
dialplan. JSON parsing already exists in the Asterisk
core and is used for many different things. This
function exposes the basic parsing capability to
the user in the dialplan, for instance, in conjunction
with CURL for using API responses.
Naveen Albert [Mon, 15 Nov 2021 21:08:11 +0000 (21:08 +0000)]
pbx: Add variable substitution API for extensions
Currently, variable substitution involving dialplan
extensions is quite clunky since it entails obtaining
the current dialplan location, backing it up, storing
the desired variables for substitution on the channel,
performing substitution, then restoring the original
location.
In addition to being clunky, things could also go wrong
if an async goto were to occur and change the dialplan
location during a substitution.
Fundamentally, there's no reason it needs to be done this
way, so new API is added to allow for directly passing in
the dialplan location for the purposes of variable
substitution so we don't need to mess with the channel
information anymore. Existing API is not changed.
Alexander Traud [Mon, 6 Dec 2021 10:25:20 +0000 (11:25 +0100)]
xmldoc: Avoid whitespace around value for parameter/required.
Otherwise, the value 'false' was not found in the enumerated set of
the XML DTD for the XML attribute 'required' in the XML element
'parameter'. Therefore, DTD validation of the runtime XML failed.
Alexander Traud [Tue, 23 Nov 2021 14:05:55 +0000 (15:05 +0100)]
progdocs: Update Makefile.
In developer mode, use internal documentation as well.
This should produce no warnings. Fix yours!
In noisy mode, output all possible warnings of Doxygen.
This creates zillion of warnings. Double-check your current module!
Any warnings are in the file './doxygen.log'. Beside that, this change
avoids deprecated parameters because the configuration file for Doxygen
contains only those parameters which differ from the default. This
avoids the need to update the file on each run. Furthermore, it adds
AST_VECTOR to be expanded. Finally, the default name for that file is
Doxyfile. Therefore, let us use that!
Sean Bright [Tue, 30 Nov 2021 20:16:45 +0000 (15:16 -0500)]
channel: Short-circuit ast_channel_get_by_name() on empty arg.
We know that passing a NULL or empty argument to
ast_channel_get_by_name() will never result in a matching channel and
will always result in an error being emitted, so just short-circuit
out in that case.
Mike Bradeen [Tue, 26 Oct 2021 21:12:18 +0000 (15:12 -0600)]
res_rtp_asterisk: Addressing possible rtp range issues
res/res_rtp_asterisk.c: Adding 1 to rtpstart if it is deteremined
that rtpstart was configured to be an odd value. Also adding a loop
counter to prevent a possible infinite loop when looking for a free
port.
Dustin Marquess [Tue, 9 Nov 2021 00:30:00 +0000 (18:30 -0600)]
res_fax_spandsp: Add spandsp 3.0.0+ compatibility
Newer versions of spandsp did refactoring of code to add new features
like color FAXing. This refactoring broke backwards compatibility.
Add support for the new version while retaining support for 0.0.6.
Alexander Traud [Fri, 12 Nov 2021 16:05:05 +0000 (17:05 +0100)]
progdocs: Fix grouping for latest Doxygen.
Since Doxygen 1.8.16, a special comment block is required. Otherwise
(pure C comment), the group command is ignored. Additionally, several
unbalanced group commands were fixed.
Naveen Albert [Thu, 25 Nov 2021 18:41:18 +0000 (18:41 +0000)]
documentation: Standardize examples
Most examples in the XML documentation use the
example tag to demonstrate examples, which gets
parsed specially in the Wiki to make it easier
to follow for users.
This fixes a few modules to use the example
tag instead of vanilla para tags to bring them
in line with the standard syntax.
Sean Bright [Sun, 28 Nov 2021 20:52:24 +0000 (15:52 -0500)]
config.c: Prevent UB in ast_realtime_require_field.
A backend's implementation of the realtime 'require' function may call
va_arg() and then fail, leaving the va_list in an undefined
state. Pass a copy of the va_list instead.
Refactors generic functions used for email generation
into utils.c so that they can be used by multiple
modules, including app_voicemail and app_minivm,
to avoid code duplication.
Jaco Kroon [Thu, 28 Oct 2021 07:28:57 +0000 (09:28 +0200)]
logger: use __FUNCTION__ instead of __PRETTY_FUNCTION__
This avoids a few long-name overflows, at the cost of less instructive
names in the case of C++ (specifically overloaded functions and class
methods). This in turn is offset against the fact that we're logging
the filename and line numbers in any case.
Mike Bradeen [Tue, 16 Nov 2021 22:34:28 +0000 (15:34 -0700)]
astobj2.c: Fix core when ref_log enabled
In the AO2_ALLOC_OPT_LOCK_NOLOCK case the referenced obj
structure is freed, but is then referenced later if ref_log is
enabled. The change is to store the obj->priv_data.options value
locally and reference it instead of the value from the freed obj
Joshua C. Colp [Tue, 16 Nov 2021 10:06:26 +0000 (06:06 -0400)]
bridge: Deny full Local channel pair in bridge.
Local channels are made up of two pairs - the 1 and 2
sides. When a frame goes in one side, it comes out the
other. Back and forth. When both halves are in a
bridge this creates an infinite loop of frames.
This change makes it so that bridging no longer
allows both of these sides to exist in the same
bridge.
Naveen Albert [Sat, 6 Nov 2021 23:35:16 +0000 (23:35 +0000)]
res_tonedetect: Add call progress tone detection
Makes basic call progress tone detection available
in a tech-agnostic manner with the addition of the
ToneScan application. This can determine if the channel
has encountered a busy signal, SIT tones, dial tone,
modem, fax machine, etc. A few basic async progress
tone detect options are also added to the TONE_DETECT
function.
Alexander Traud [Fri, 12 Nov 2021 18:41:09 +0000 (19:41 +0100)]
progdocs: Avoid 'name' with Doxygen \file.
Fixes four misuses of the parameter 'name'. Additionally, for
consistency and to avoid such an issue in future, those few other
places, which used '\file name', were changed just to '\file'. Then,
Doxygen uses the name of the current file.
Currently, when the t option is specified with no arguments,
the # character is still treated as a terminator, even though
no character should be treated as a terminator.
This is because a previous regression fix was modified to
remove the use of NULL as a default altogether. However,
NULL and an empty string actually refer to different
arrangements and should be treated differently. NULL is the
default terminator (#), while an empty string removes the
terminator altogether. This is the behavior being used by
the rest of the core.
Additionally, since S_OR catches empty strings as well as
NULL (not intended), this is changed to a ternary operator
instead, which fixes the behavior.
Naveen Albert [Sun, 24 Oct 2021 18:38:13 +0000 (18:38 +0000)]
res_pjsip_callerid: Fix OLI parsing
Fix parsing of ANI2/OLI information, since it was previously
parsing the user, when it should have been parsing other_param.
Also improves the parsing by using pjproject native functions
rather than trying to parse the parameters ourselves like
chan_sip did. A previous attempt at this caused a crash, but
this works correctly now.