Provided a support of variuos URL-schemes for res_musiconhold,
registered by ast_bucket_scheme_register().
ASTERISK-29262 #close
Change-Id: If0ea8697587353dce358a70035d82649fd4632b6
function ast_sip_session_media_state_add.
Check ast_media_type matches when a ast_sip_session_media is found
otherwise when transitioning from say image to audio, the wrong
session is returned in the first if statement.
ASTERISK-29220 #close
Change-Id: I6f6efa9b821ebe8881bb4c8c957f8802ddcb4b5d
The last argument to ast_copy_string() is the buffer size, not the
number of characters, so we add 1 to avoid stamping out the final \n
in the persisted SUBSCRIBE message.
Change-Id: I019b78942836f57965299af15d173911fcead5b2
From https://www.mail-archive.com/bug-autoconf@gnu.org/msg04408.html
> ... the long-obsolete AC_HEADER_STDC, previously used internally by
> AC_INCLUDES_DEFAULT, used AC_EGREP_HEADER. The AC_HEADER_STDC macro
> is now a no-op (and is not used at all within Autoconf anymore), so
> that change is likely what made the first use of AC_EGREP_HEADER the
> one inside the if condition, causing the observed results.
The implication is that the test does nothing anyway, and due to it
being a no-op from 2.70 onwards, results in the required not being set
to yes, resulting in ./configure to fail.
Change-Id: Ic1ff38d87f791fbf1f2a80512f81bb7110392460
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
There are a couple of parameters (datalen and data) that do not get set
in chan_pjsip_indicate which could cause an Invalid message to pop up
for things such as fax. This patch adds them to the frame.
Change-Id: Ia51be086a0708be905e73d1f433572c49c7e38f8
When both a tech subscription and an endpoint subscription exist for a given
endpoint, TextMessageReceived events are dispatched to the tech subscription
only.
ASTERISK-29229
Change-Id: I9eac4cba5f9e27285a282509395347abc58fc2b8
session->channel doesn't exist until chan_pjsip creates it, so intead of
setting a channel variable every new incoming call sets one and the same
global variable.
This patch moves the code to chan_pjsip so that SIPDOMAIN is set on
a newly created channel, it also removes a misleading reference to
channel->session used to fetch call pickup configuraion.
ASTERISK-29240
Change-Id: I90c9bbbed01f5d8863585631a29322ae4e046755
Previously, chan_sip parsed all known media streams in an SDP offer
like video (and text) even when videosupport=no (and textsupport=no).
This wasted processor power. Furthermore, chan_sip accepted SDP offers,
including no audio but just video (or text) streams although
videosupport=no (or textsupport=no). Finally, chan_sip denied the whole
offer instead of individual streams when they had encryption (SDES-sRTP)
unexpectedly enabled.
ASTERISK-29238
ASTERISK-29237
ASTERISK-29222
Change-Id: Ie49e4e2a11f0265f914b684738348ba8c0f89755
The fix for ASTERISK-27902 made chan_pjsip process SIP responses twice.
This resulted in extra noise in logs (for example, "is making progress"
and "is ringing" get logged twice by app_dial), as well as in noise in
signalling: one incoming 183 Session Progress results in 2 outgoing 183-s.
This change splits the response handler into 2 functions:
- one for updating HANGUPCAUSE, which is still called twice,
- another that does the rest, which is called only once as before.
ASTERISK-28016
Reported-by: Alex Hermann
ASTERISK-28549
Reported-by: Gant Liu
ASTERISK-28185
Reported-by: Julien
Change-Id: I0a1874be5bb5ed12d572d17c7f80de6e5e542940
With newer version of linux /var/run/ is a symlink to /run/ that has
been turned into tmpfs.
Added note that if asterisk has to bind to a specific IP that
systemd has to wait until the network is up.
Added note on how to make sure that the environment variable
HOSTNAME is included.
ASTERISK-29216
Reported by: Mark Petersen
Tested by: Mark Petersen
Change-Id: Ib3e560655befd3e99eec743687144f5569533379
This reverts commit 860e40dd80.
Reason for revert: Too many issues reported. Need to research and correct.
ASTERISK-29230
ASTERISK-29231
Reported by: Michael Maier
Change-Id: I9011e2eecda4e91e1cfeeda6d1a7f1a0453eab41
Under contention it becomes possible that multiple channels will be told
they successfully obtained the lock, which is a bug. Please refer
ASTERISK-29217
This introduces a couple of changes.
1. Replaces requesters ao2 container with simple counter (we don't
really care who is waiting for the lock, only how many). This is
updated undex ->mutex to prevent memory access races.
2. Correct semantics for ast_cond_timedwait() as described in
pthread_cond_broadcast(3P) is used (multiple threads can be released
on a single _signal()).
3. Module unload races are taken care of and memory properly cleaned
up.
Change-Id: I6f68b5ec82ff25b2909daf6e4d19ca864a463e29
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
On Gentoo it's possible to have multiple lua versions installed, all
with a path of /usr, so it's not possible to use the current --with-lua
option to determisticly pin to a specific version as is required by the
Gentoo PMS standards.
This environment variable allows to lock to specific versions,
unversioned check will be skipped if this variable is supplied.
Change-Id: I8c403eda05df25ee0193960262ce849c7d2fd088
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
Add channel reference count for PJSIP REFER. The call could be terminated
prior to the result of the transfer. In that scenario, when the SUBSCRIBE/NOTIFY
occurred several minutes later, it would attempt to access a session which was
no longer valid. Terminate event subscription if pjsip_xfer_initiate() or
pjsip_xfer_send_request() fails in transfer_refer().
ASTERISK-29201 #close
Reported-by: Dan Cropp
Change-Id: I3fd92fd14b4e3844d3d7b0f60fe417a4df5f2435
launch_monitor_thread is responsible for creating and initializing
the mixmonitor, and dependent data structures. There was one off
nominal path after the datastore gets created that triggers when
the channel being monitored is hung up prior to monitor starting
itself.
If this happened the monitor thread would not "launch", and the
mixmonitor object and associated objects are freed, including the
underlying datastore data object. However, the datastore itself was
not removed from the channel, so when the channel eventually gets
destroyed it tries to access the previously freed datastore data
and crashes.
This patch removes and frees datastore object itself from the channel
before freeing the mixmonitor object thus ensuring the channel does
not call it when destroyed.
ASTERISK-28947 #close
Change-Id: Id4f9e958956d62473ed5ff06c98ae3436e839ff8
A prior patch segmented channel snapshots, and changed the underlying
data object type associated with ast_channel_snapshot_type stasis
messages. Prior to Asterisk 18 it was a type ast_channel_snapshot, but
now it type ast_channel_snapshot_update.
When publishing ast_channel_snapshot_type in pbx_realtime the
ast_channel_snapshot was being passed in as the message data
object. When a handler, expecting a data object type of
ast_channel_snapshot_update, dereferenced this value a crash
would occur.
This patch makes it so pbx_realtime now uses the expected type, and
channel snapshot publish method when publishing.
ASTERISK-29168 #close
Change-Id: I9a2cfa0ec285169317f4b9146e4027da8a4fe896
Rename check_manager_enabled() and check_webmanager_enabled() to begin
with ast_ so that the symbols are automatically exported by the
linker.
ASTERISK~29184
Change-Id: I85762b9a5d14500c15f6bad6507138c8858644c9
Segfault occurs during outbound UDP registration when all
transport states are being iterated over. The transport object
in the transport is accessed, but flow transports have a NULL
transport object.
Modify to not iterate over any flow transport
ASTERISK-29210 #close
Change-Id: If28dc3a18bdcbd0a49598b09b7fe4404d45c996a
AST_VECTOR_SIZE() returns a size_t. This is not always equivalent to an
unsigned long on all machines.
Change-Id: I0a4189a104e6e3a2e2273de06620eaef19df9338
Add a check to see if the URI is a Tel URI and prevent crashing on
trying to retrieve the reason parameter.
ASTERISK-29191
ASTERISK-29219
Change-Id: I0320aa205f22cda511d60a2edf2b037e8fd6cc37
The documentation in the wiki says there should be spyee-channel
information elements in the ChanSpyStop AMI event.
https://wiki.asterisk.org/wiki/x/Xc5uAg
However, this is not the case in Asterisk <= 16.10.0 Version. We're
using these Spyee* arguments since Asterisk 11.x, so these arguments
vanished in Asterisk 12 or higher.
For maximum compatibility, we still send the ChanSpyStop event even if
we are not able to find any 'Spyee' information.
ASTERISK-28883 #close
Change-Id: I81ce397a3fd614c094d043ffe5b1b1d76188835f
In rewrite_uri asterisk was not making deep copies of strings when
changing the uri. This was in some cases causing garbage in the route
header and in other cases even crashing asterisk when receiving a
message with a record-route header set. Thanks to Ralf Kubis for
pointing out why this happens. A similar problem was found in
res_pjsip_transport_websocket.c. Pjproject needs as well to be patched
to avoid garbage in CANCEL messages.
ASTERISK-29024 #close
Change-Id: Ic5acd7fa2fbda3080f5f36ef12e46804939b198b
Scope tracing allows you to not specify a format string or
variable, in which case it just prints the indent, file,
function, and line number. The trace output automatically
adds a newline to the end in this case. If you also have
debugging turned on for the module, a debug message is
also printed but the standard log functionality which
prints it doesn't add the newline so you have messages
that don't break correctly.
* format_log_message_ap(), which is the common log
message formatter for all channels, now adds a
newline to the end of format strings that don't
already have a newline.
ASTERISK-29209
Reported by: Alexander Traud
Change-Id: I994a7df27f88df343b7d19f3e81a4b562d9d41da
This adds support for both Digium and Sangoma user agent strings
for the Sangoma specific body supplement.
Change-Id: Ib99362b24b91d3cbe888d8b2fce3fad5515d9482
In some circumstances it was possible for an INVITE
session to be destroyed while we were still using it.
This occurred due to the reference on the INVITE session
being released internally as a result of its state
changing to DISCONNECTED.
This change adds a reference to the INVITE session
which is released when our own session is destroyed,
ensuring that the INVITE session remains valid for
the lifetime of our session.
ASTERISK-29022
Change-Id: I300c6d9005ff0e6efbe1132daefc7e47ca6228c9
As described in the issue, /tmp is not a suitable location for a
large amount of cached media files, since most distributions make
/tmp a RAM-based tmpfs mount with limited capacity.
I opted for a location that can be configured separately, as opposed
to using a subdirectory of spooldir, given the different storage
profile (transient files vs files that might stay there indefinitely).
This commit just makes the cache directory configurable, but leaves
it at /tmp by default, to ensure backwards compatibility.
A future commit that only targets master could change the default
location to something more sensible such as /var/tmp/asterisk. At
that point, the cachedir could be created and cleaned up during
uninstall by the Makefile script.
ASTERISK-29143
Change-Id: Ic54e95199405abacd9e509cef5f08fa14c510b5d
By default libcurl does not follow redirects, so we explicitly enable
it by setting CURLOPT_FOLLOWLOCATION. Once that is enabled, libcurl
will follow up to CURLOPT_MAXREDIRS redirects, which by default is
configured to be unlimited.
This patch sets CURLOPT_MAXREDIRS to a more reasonable default (8). If
we determine at some point that this needs to be increased on
configurable it is a trivial change.
ASTERISK-29173 #close
Change-Id: I4925ebbcf0c7d728bb9252b3795b3479ae225b30
the 'J' is missing in module description.
"PSIP STIR/SHAKEN Module for Asterisk" -> "PJSIP STIR/SHAKEN Module for Asterisk"
ASTERISK-29175 #close
Change-Id: I17da008540ee2e8496b644d05f995b320b54ad7a
When using this option, answering the channel is deferred until
all prompts/greetings have been played and the caller is about
to leave their message.
ASTERISK-29118 #close
Change-Id: I41b9f0428783c0bd697c8c994f906d1e75ce9ddb
RFC 3261 says that the Accept-Encoding header should be present
in an options response. Permitted values according to RFC 2616
are only compression algorithms like gzip or the default identity
encoding. Therefore "text/plain" is not a correct value here.
As long as the header is hard coded, it should be set to "identity".
Without this fix an Alcatel OmniPCX periodically logs warnings like
"[sip_acceptIncorrectHeader] Header Accept-Encoding is malformed"
on a SIP Trunk.
ASTERISK-29165 #close
Change-Id: I0aa2211ebf0b4c2ed554ac7cda794523803a3840
12 years ago, with ASTERISK_12115 the last four get/uses of socket.port
vanished. However, the struct member itself and all seven set/uses
remained as dead code.
ASTERISK-28798
Change-Id: Ib90516a49eca3d724a70191278aaf2144fb58c59
Fixed a bug (like a typo) in retransfer_enter()
at main/bridge_basic.c:2641. common_recall_channel_setup() setups
common things on the recalled transfer target, but used same target
as source instead trasfered.
ASTERISK-29161 #close
Change-Id: Ieb549654a621c38b1ad5e9d15b9f18823d9cc31f
Operations that update queues when shared_lastcall is set lock the
queue in question, then have to lock the queues container to find the
other queues with the same member. On the other hand, __queues_show
(which is called by both the CLI and AMI) does the reverse. It locks
the queues container, then iterates over the queues locking each in
turn to display them. This creates a deadlock.
* Moved queue print logic from __queues_show to a separate function
that can be called for a single queue.
* Updated __queues_show so it doesn't need to lock or traverse
the queues container to show a single queue.
* Updated __queues_show to snap a copy of the queues container and iterate
over that instead of locking the queues container and iterating over
it while locked. This prevents us from having to hold both the
container lock and the queue locks at the same time. This also
allows us to sort the queue entries.
ASTERISK-29155
Change-Id: I78d4dc36728c2d7bc187b97d82673fc77f2bcf41
* Instead of using the pjproject timer heap, we now use our own
pjsip_scheduler. This allows us to more easily debug and allows us to
see times in "pjsip show/list registrations" as well as being able to
see the registrations in "pjsip show scheduled_tasks".
* Added the last registration time, registration interval, and the next
registration time to the CLI output.
* Removed calls to pjsip_regc_info() except where absolutely necessary.
Most of the calls were just to get the server and client URIs for log
messages so we now just save them on the client_state object when we
create it.
* Added log messages where needed and updated most of the existong ones
to include the registration object name at the start of the message.
Change-Id: I4534a0fc78c7cb69f23b7b449dda9748c90daca2
* Added a ONESHOT type that never reschedules.
* Added "like" capability to "pjsip show scheduled_tasks" so you can do
the following:
CLI> pjsip show scheduled_tasks like outreg
PJSIP Scheduled Tasks:
Task Name Interval Times Run ...
============================================= ========= ========= ...
pjsip/outreg/testtrunk-reg-0-00000074 50.000 oneshot ...
pjsip/outreg/voipms-reg-0-00000073 110.000 oneshot ...
* Fixed incorrect display of "Next Start".
* Compacted the displays of times in the CLI.
* Added two new functions (ast_sip_sched_task_get_times2,
ast_sip_sched_task_get_times_by_name2) that retrieve the interval,
next start time, and next run time in addition to the times already
returned by ast_sip_sched_task_get_times().
Change-Id: Ie718ca9fd30490b8a167bedf6b0b06d619dc52f3
The data can be freed if the old object '_data' is the same object as
new 'data'. Because at first the object is unreferenced which can lead
to destroying it.
This could happened in res_pjsip_pubsub when the publication is updated
which could lead to segfault in function publish_expire.
Change-Id: I0164f57c387243510bdbd2f8dcf33377b6c202da