sched: Avoid a double deref when AST_SCHED_DEL_UNREF is called on an
executing call-back. This is done by adding a new variable 'rescheduled'
to the struct sched which is set in ast_sched_runq and checked in
ast_sched_del_nonrunning. ast_sched_del_nonrunning is a replacement for
now deprecated ast_sched_del which returns a new possible value -2
if called on an executing call-back with rescheduled set. ast_sched_del
is modified to call ast_sched_del_nonrunning to maintain existing code.
AST_SCHED_DEL_UNREF is also updated to look for the -2 in which case it
will not throw a warning or invoke refcall.
test_sched: Add a new unit test sched_test_freebird that will check the
reference count in the resolved scenario.
ASTERISK-29698
Change-Id: Icfb16b3acbc29cf5b4cef74183f7531caaefe21d
if holdtime is (0 min, 0 sec) there is no hold time announcements
we should then also not playing queue-thankyou
ASTERISK-29831
Change-Id: Ic7e51dcde526b23f1cd8d24e1d1e2d81e10f9d2c
Fix the sed(1) invocation used to process git-svn-id not to use "\s"
that is a GNU-ism and is not supported by NetBSD sed. As a result,
this call did not work properly and make_version did output the full
git-svn-id line rather than the revision.
ASTERISK-29852
Change-Id: Ie4b406e2748920643446851a0a252a4ca7245772
Implement the ast_get_tid() function for NetBSD system. NetBSD supports
getting the TID via _lwp_self().
ASTERISK-29850
Change-Id: If57fd3f9ea15ef5d010bfbdcbbbae9b379f72f8c
Enable the Linux rdtsc implementation on NetBSD as well. The assembly
works correctly there.
ASTERISK-29851
Change-Id: I460ad9b4d971913420ecb84186f5ba5ab03f6f37
Fix the configure script not to detect the presence of gethostbyname_r()
on NetBSD incorrectly. NetBSD includes it as an internal libc symbol
that is not exposed in system headers and that is incompatible with
other implementations. In order to avoid misdetecting it, perform
the symbol check only if the declaration is found in the public header
first.
ASTERISK-29817
Change-Id: Iafa359b09908251bcd299ff54be003ea129b9eda
Remove the HMAC declarations from the includes. They are
not implemented nor used anywhere, and their presence breaks the build
on NetBSD that delivers an incompatible hmac() function in <stdlib.h>.
ASTERISK-29818
Change-Id: I0c4b88645e30174b1b63846a6b328625b69c2ea7
The code currently checks to see if an RFC3389
warning flag is set, except if it is, it merely
sets the flag again, the logic of which doesn't
make any sense.
This adjusts the if comparison to check if the
flag has NOT been set, and if so, emit a notice
log event and set the flag so that future frames
do not cause an event to be logged.
ASTERISK-29856 #close
Change-Id: Ib7098c947c63537d087a03b4646199fbb963f8e1
Reverted recent change that set '--with-external-srtp' instead
of '--without-external-srtp'. Since Asterisk handles all SRTP,
we don't need it enabled in pjproject at all.
ASTERISK-29867
Change-Id: I2ce1bdd30abd21c062eac8f8fefe9b898787b801
Neither pjsip_message_filter's filter_on_tx_message() nor
res_pjsip_session's session_outgoing_nat_hook() were multipart
aware and just assumed that an SDP would be the only thing in
a message body. Both were changed to use the new
pjsip_get_sdp_info() function which searches for an sdp in
both single- and multi- part message bodies.
ASTERISK-29813
Change-Id: I8f5b8cfdc27f1d4bd3e7491ea9090951a4525c56
The change to allow easier hacking on bundled pjproject created
a few issues:
* The new Makefile was trying to run the bundled make even if
PJPROJECT_BUNDLED=no. third-party/Makefile now checks for
PJPROJECT_BUNDLED and JANSSON_BUNDLED and skips them if they
are "no".
* When building with bundled, config_site.h was being copied
only if a full make or a "make main" was done. A "make res"
would fail all the pjsip modules because they couldn't find
config_site.h. The Makefile now copies config_site.h and
asterisk_malloc_debug.h into the pjproject source tree
when it's "configure" is performed. This is how it used
to be before the big change.
ASTERISK-29858
Change-Id: I9427264fa3cb8b3f59a95e5f9693eac236a6f76d
Added two new functions to assist checking media types...
* ast_sip_are_media_types_equal compares two pjsip_media_types.
* ast_sip_is_media_type_in tests if one media type is in a list
of others.
Added static definitions for commonly used media types to
res_pjsip.h.
Changed several modules to use the new functions and static
definitions.
ASTERISK_29813
(not ready to close)
Change-Id: Ief77675235bd3bf00a6b095d4673fd878d0801b9
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.
Change-Id: I6f2c127170eafda48e5e0d5d4d187bcd52b4df07
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.
ASTERISK-29859 #close
Change-Id: Ia2e5769868e2792313c2d7c07996efe009c6f8d5
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.
ASTERISK-29848 #close
Change-Id: I6997f925c4a45fffe71321861f5898a8b7182fa9
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.
ASTERISK-29847 #close
Change-Id: I36006faf471825b36ebc8aa5e87a3bcb38d446fc
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.
ASTERISK-29824
Change-Id: Idb1251040affdab31d27cd272dda68676da9b268
gethostbyname() and gethostbyname_r() are deprecated in favor of
getaddrinfo() which we use in the ast_sockaddr family of functions.
ASTERISK-29819 #close
Change-Id: Ie277c0ef768d753b169c121ef570a71665692ab7
Fixes 12pm noon incorrectly returning 0/a.m.
Also fixes a misspelling typo in the config.
ASTERISK-29695 #close
Change-Id: Ie40f9618636eb4c483b449bd707a5dcffca5c406
adding support for playing the correct en/et for nordic languages
by adding 'n' for neuter gender in the relevant ast_say_number
ASTERISK-29827
Change-Id: I03ebc827d2f0dc95132ab2f42799893c70edc5b1
Adds the macro DTMF_MATRIX_SIZE to replace
the magic number 4 sprinkled throughout
dsp.c.
ASTERISK-29815 #close
Change-Id: Ie3bddb92c6b16204ece0f758009e9490eb33b9ba
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.
ASTERISK-29807 #close
Change-Id: I595f6f11774a0de2565a1fba38da22309ce93a2c
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.
ASTERISK-29829 #close
Change-Id: I53a0bf1ed1740166655eb66fe7675f6f808bf535
Adds missing documentation for some channel,
bridge, and queue events.
ASTERISK-24427
ASTERISK-29515
Change-Id: I92b06b88c8cadc0155f95ebe3e870b3e795a8c64
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.
ASTERISK-29746 #close
Change-Id: I907571843a83e43c0742b95a64785f4411f02671
Adds tech-agnostic support for SF signaling
by adding SF sender and receiver applications
as well as Dial integration.
ASTERISK-29802 #close
Change-Id: I7ec50752e9a661af639425e5d1e339f17411bcad
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.
ASTERISK-29806 #close
Change-Id: If2c1d1cc2a752afd9286d79710fc818596e7a7ad
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.
ASTERISK-29816 #close
Change-Id: I6a96e0130560831d2cb45164919862b9bcb6287e
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.
ASTERISK-28863
ASTERISK-29320
Change-Id: I3aabcfed3f379c36654f59c1872c313d0cb57e25
It's not safe to keep the channel locked while locking
the peer Local channel, as it can result in a deadlock.
This change unlocks it during this time but keeps the
bridge locked to ensure nothing changes about the bridge.
ASTERISK-29821
Change-Id: Ib68eb7037e5a479bcc2aceee77337cdde1fbdde6
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.
ASTERISK-29722
Change-Id: Id59bdac8b277e14343ccdf0c99b89e92f79f316a
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.
ASTERISK-29804
Change-Id: I483c7c3d413280c9e247a96ad581278347f9c71b
When OUTPUTDIR is set to another directory and the
--delete-results-after is set, the resulting txt files are
not deleted.
ASTERISK-29794 #close
Change-Id: I1c0071f6809a1e3f5cfc455d6eb08378bc0d7286
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.
ASTERISK-29803 #close
Change-Id: I392579cbb76db2795d5820c9427cf55fbcee9e72
added that we set DIALEDPEERNUMBER on the outgoing channels
so it is avalible in b(content^extension^line)
this add the same behaviour as Dial
ASTERISK-29795
Change-Id: Icbc589ea2066f0c401a892bf478f6b2fd44e62f6
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.
Change-Id: Ic5fb5f11e62c019a1c51310f4667b32a4dae52f5
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.
ASTERISK-29801 #close
Change-Id: Id029274a57135caca193c913307a63fd75e24679
added support for playing the correct plural sound file
dependen on where you have 1 or multipe messages
based on the existing SE/NO code
ASTERISK-29797
Change-Id: I88aa814d02f3772bb80b474204b1ffb26fe438c2
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.
ASTERISK-29759 #close
Change-Id: Ica2c354a42bff69f323a0493d3a7cd0fb129d52d
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.
ASTERISK-29800 #close
Change-Id: If7bbd0c0e6226a211d25ddf9d1629347e2674943
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.
ASTERISK-29766 #close
Change-Id: I3fe35b462dedec0a452fd9ea7f92c920a3939f16
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.
ASTERISK-29772
Change-Id: Icd3b02f07256bbe6615854af5717074087b95a83
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.
ASTERISK-29706 #close
Change-Id: Iea60c49a7358dfdc2db60803cdc9a742f808ba2c
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.
ASTERISK-29758 #close
Change-Id: I04fba9671aa1ee9ba1bd5027061f80bbe38e7b46
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.
ASTERISK-29745 #close
Change-Id: I23273bf27fa0efb64a606eebf9aa8e2f41a065e4