Commit Graph

32436 Commits

Author SHA1 Message Date
Joshua C. Colp
c9cd681261 CHANGES: Change md file extension to txt.
Change-Id: I168e2d3a65d444fb0961bd228257441fe718f6a7
2020-03-26 13:42:01 -03:00
Joshua C. Colp
bdf4d159fd res_pjsip_session: Apply intention behind requested formats.
When an outgoing channel is created a list of formats may
optionally be provided which is used as a request that the
formats be used if possible. If an endpoint is not configured
for any of the formats we ignore this request and use what is
configured. This has the side effect of also including other
stream types (such as video) that were not present in the
requested formats.

This change makes it so that the intention of the request is
preserved - that is if only an audio format is requested then
even if there is no joint audio format between the request and
the configuration we will still only place an audio stream in
the outgoing call.

ASTERISK-28787

Change-Id: Ia54c0c63e94aca176169b9bae4bb8a8380ea245f
2020-03-26 11:34:14 -05:00
Joshua C. Colp
3d22ecb1e2 res_rtp_asterisk: Ensure sufficient space for worst case NACK.
ASTERISK-28790

Change-Id: I10df52f98b19ed62575f25dab36e82d136dccd99
2020-03-26 08:31:47 -05:00
Kevin Harwell
904f6b7c2f ast_coredumper: add Asterisk information dump
This patch makes it so ast_coredumper now outputs the following information to
a *-info.txt file when processing a core file:

  asterisk version and "built by" string
  BUILD_OPTS
  system start, and last reloaded date/time
  taskprocessor list
  equivalent of "bridge show all"
  equivalent of "core show channels verbose"

Also a slight modification was made when trying to obtain the pid(s) of a
running Asterisk. If it fails to retrieve any it now reports an error.

Change-Id: I54f35c19ab69b8f8dc78cc933c3fb7c99cef346b
2020-03-26 07:43:15 -05:00
Joshua C. Colp
aa04c3f49b res_pjsip_session: Don't restrict non-audio default streams to sendrecv.
The state of the default audio stream is used for hold/unhold so we
restrict it to sendrecv as the core does not handle when it changes as
a result of hold/unhold.

This restriction does not apply to other media types though so we now
only restrict it to audio. This allows the other default streams to
store their state at all values, and not just sendrecv and removed.

ASTERISK-28783

Change-Id: I139740f38cea7f7d92a876ec2631ef50681f6625
2020-03-19 11:07:36 -05:00
George Joseph
7ecbcdf22f CI: Create generic jenkinsfile
This is a generic jenkinsfile to build Asterisk and optionally
perform one or more of the following:
 * Publish the API docs to the wiki
 * Run the Unit tests
 * Run Testsuite Tests

This job can be triggered manually from Jenkins or be triggered
automatically on a schedule based on a cron string.

Change-Id: Id9d22a778a1916b666e0e700af2b9f1bacda0852
2020-03-10 08:06:21 -06:00
Asterisk Development Team
d1bb76a27d Update for certified/16.8-cert1-rc3 certified/16.8-cert1-rc3 2020-03-04 10:43:52 -05:00
Asterisk Development Team
b922e387d1 Update CHANGES and UPGRADE.txt for certified/16.8-cert1 2020-03-04 10:41:51 -05:00
George Joseph
444df0ac71 Merge "bridging: Add better support for adding/removing streams." into certified/16.8 2020-03-04 09:31:59 -06:00
George Joseph
b5b52ae386 Merge "res_pjsip_session: Fix off-nominal session refreshes." into certified/16.8 2020-03-04 09:27:46 -06:00
Joshua C. Colp
4458b7a52a res_rtp_asterisk: Improve video performance in certain networks.
The receive buffer will now grow if we end up flushing the
receive queue after not receiving the expected packet in time.
This is done in hopes that if this is encountered again the
extra buffer size will allow more time to pass and any missing
packets to be received.

The send buffer will now grow if we are asked for packets and
can't find them. This is done in hopes that the packets are
from the past and have simply been expired. If so then in
the future with the extra buffer space the packets should be
available.

Sequence number cycling has been handled so that the
correct sequence number is calculated and used in
various places, including for sorting packets and
for determining if a packet is old or not.

NACK sending is now more aggressive. If a substantial number
of missing sequence numbers are added a NACK will be sent
immediately. Afterwards once the receive buffer reaches 25%
a single NACK is sent. If the buffer continues to grow and
reaches 50% or greater a NACK will be sent for each received
future packet to aggressively ask the remote endpoint to
retransmit.

ASTERISK-28764

Change-Id: I97633dfa8a09a7889cef815b2be369f3f0314b41
2020-03-03 04:53:35 -06:00
Joshua C. Colp
d515dea9c6 res_pjsip_session: Fix off-nominal session refreshes.
Given a scenario where session refreshes occur close to
each other while another is finishing it was possible for
the session refreshes to occur out of order. It was
also possible for session refreshes to be delayed for
quite some time if a session refresh did not result in
a topology change.

For the out of order session refreshes the first session
refresh would be queued due to a transaction in progress.
This transaction would then finish. When finished a
separate task to process the delayed requests queue
would be queued for handling. A second refresh would
be requested internally before this delayed request
queued task was processed. As no transaction was in
progress this session refresh would be immediately
handled before the queued session refresh.

The code will now check if any delayed requests exist
before allowing a session refresh to immediately occur.
If any exist then the session refresh is queued.

For the delayed session refreshes if a session refresh
did not result in a topology change the attempt would
be immediately stopped and no other delayed requests would
be processed.

The code will now go through the entire delayed requests
queue until a delayed request results in a request
actually being sent.

ASTERISK-28730

Change-Id: Ied640280133871f77d3f332be62265e754605088
(cherry picked from commit b438d1d9ad)
2020-03-02 05:21:22 -06:00
Joshua C. Colp
5fccf6d1c6 bridging: Add better support for adding/removing streams.
This change adds support to bridge_softmix to allow the addition
and removal of additional video source streams. When such a change
occurs each participant is renegotiated as needed to reflect the
update. If another video source is added then each participant
gets another source. If a video source is removed then it is
removed from each participant. This functionality allows you to
have both your webcam and screenshare providing video if you
desire, or even more streams. Mapping has been changed to use
the topology index on the source channel as a unique identifier
for outgoing participant streams, this will never change and
provides an easy way to establish the mapping.

The bridge_simple and bridge_native_rtp modules have also been
updated to renegotiate when the stream topology of a party changes
allowing the same behavior to occur as added to bridge_softmix.
If a screen share is added then the opposite party is renegotiated.
If that screen share is removed then the opposite party is
renegotiated again.

Some additional fixes are also included in here. Stream state is
now conveyed in SDP so sendonly/recvonly/inactive streams can
be requested. Removed streams now also remove previous state
from themselves so consumers don't get confused.

ASTERISK-28733

Change-Id: I93f41fb41b85646bef71408111c17ccea30cb0c5
2020-03-02 07:14:33 -04:00
Asterisk Development Team
7b8157645f Update for certified/16.8-cert1-rc2 certified/16.8-cert1-rc2 2020-02-19 09:24:32 -05:00
George Joseph
bb19e7feb5 res_pjsip_outbound_registration: Fix SRV failover on timeout
In order to retry outbound registrations for some situations, we
need access to the tdata from the original request.  For instance,
for 401/407 responses we need it to properly construct the
subsequent request with the authentication.  We also need it if
we're iterating over a DNS SRV response record set so we can skip
entries we've already tried.

We've been getting the tdata from the server response rdata and
transaction but that only works for the failures where there was
actually a response (4XX, 5XX, etc).  For timeouts there's no
response and therefore no rdata or transaction from which to get
the tdata.  When processing a single A/AAAA record for a server,
this wasn't an issue as we just retried that same server after the
retry timer expired.  If we got an SRV record set for the server
though, without the state from the tdata, we just kept trying the
first entry in the set repeatedly instead of skipping to the next
one in the list.

* Added a "last_tdata" member to the client state structure to keep
  track of the sent tdata.

* Updated registration_client_send() to save the tdata it used into
  the client_state.

* Updated sip_outbound_registration_response_cb() to use the tdata
  saved in client_state when we don't get a response from the
  server. We still use the tdata from the transaction when we DO
  get a response from the server so we can properly handle 4XX
  responses where our new request depends on it.

General note on timeouts:

Although res_pjsip_outbound_registration skips to the next record
immediately when a timeout occurs during SRV set traversal, it's
pjproject that determines how long to wait before a timeout is
declared.  As with other SIP message types, pjproject will continue
trying the same server at an interval specified by "timer_t1" until
"timer_b" expires.  Both of those timers are set in the pjsip.conf
"system" section.

ASTERISK-28746

Change-Id: I199b8274392d17661dd3ce3b4d69a3968368fa06
2020-02-18 13:09:23 -06:00
Kevin Harwell
43ca35b831 res_rtp_asterisk: bad audio (static) due to incomplete dtls/srtp setup
There was a race condition between client initiated DTLS setup, and handling
of server side ice completion that caused the underlying SSL object to get
cleared during DTLS initialization. If this happened Asterisk would be left
in a partial DTLS setup state. RTP packets were sent and received, but were
not being encrypted and decrypted. This resulted in no audio, or static.

Specifically, this occurred when '__rtp_recvfrom' was processing the handshake
sequence from the client to the server, and then 'ast_rtp_on_ice_complete'
gets called from another thread and clears the SSL object when calling the
'dtls_perform_setup' function. The timing had to be just right in the sense
that from the external SSL library perspective SSL initialization completed
(rtp recv), Asterisk clears/resets the SSL object (ice done), and then checks
to see if SSL is intialized (rtp recv). Since it was cleared, Asterisk thinks
it is not finished, thus not completing 'dtls_srtp_setup'.

This patch removes calls to 'dtls_perform_setup', which clears the SSL object,
in 'ast_rtp_on_ice_complete'. When ice completes, there is no reason to clear
the underlying SSL object. If an ice candidate changes a full protocol level
renegotiation occurs. Also, in the case of bundled ICE candidates are reused
when a stream is added. So no real reason to have to clear, and reset in this
instance.

Also, this patch adds a bit of extra logging to aid in diagnosis of any future
problems.

ASTERISK-28742 #close

Change-Id: I34c9e6bad5a39b087164646e2836e3e48fe6892f
2020-02-14 10:52:39 -06:00
Asterisk Development Team
476bbcf3a3 Update for certified/16.8-cert1-rc1 certified/16.8-cert1-rc1 2020-02-07 15:42:37 -05:00
Asterisk Development Team
b3a0387fc0 Update CHANGES and UPGRADE.txt for certified/16.8-cert1 2020-02-07 15:22:59 -05:00
George Joseph
7416703f04 doc: Fix CHANGES entries to have .txt suffix and update READMEs
Although the wiki page for the new CHANGES and UPGRADE scheme
states that the files must have the ".txt" suffix, the READMEs
didn't.

Change-Id: I490306aa2cc24d6f014738e9ebbc78592efe0f05
2020-02-07 12:46:17 -07:00
George Joseph
443230f5d5 Asterisk Certified 16.8 Preparation
* Updated .gitreview default branch to certified/16.8
* Updated .version to certified/16.8
* Set all extended support modules to be disabled by default

Change-Id: I11c9b5f33865fb541192a786dc25dddf8558e09b
2020-02-05 09:37:17 -07:00
Friendly Automation
e8539e8d5d Merge "res_rtp_asterisk: Don't produce transport-cc if no packets." into certified/16.8 2020-02-05 10:01:25 -06:00
Joshua C. Colp
40e331ff90 res_rtp_asterisk: Don't produce transport-cc if no packets.
The code assumed that when the transport-cc feedback
function was called at least one packet will have been
received. In practice this isn't always true, so now
we just reschedule the sending and do nothing.

Change-Id: Iabe7b358704da446fc3b0596b847bff8b8a0da6a
2020-02-05 08:35:49 -06:00
George Joseph
8b0922a101 message.c: Add option to suppress the Message channel AMI and ARI events
In order to reduce the amount of AMI and ARI events generated,
the global "Message/ast_msg_queue" channel can be set to suppress
it's normal channel housekeeping events such as "Newexten",
"VarSet", etc. This can greatly reduce load on the manager
and ARI applications when the Digium Phone Module for Asterisk
is in use.  To enable, set "hide_messaging_ami_events" in
asterisk.conf to "yes"  In Asterisk versions <18, the default
is "no" preserving existing behavior.  Beginning with
Asterisk 18, the option will default to "yes".

NOTE:  This change does not affect UserEvents or the ARI
TextMessageReceived events.

* Added the "hide_messaging_ami_events" option to asterisk.conf.

* Changed message.c to set the AST_CHAN_TP_INTERNAL property on
  the "Message/ast_msg_queue" channel if the option is set in
  asterisk.conf.  This suppresses the reporting of the events.

Change-Id: Ia2e3516d43f4e0df994fc6598565d6bba2d7018b
(cherry picked from commit bfe9e1b2e7)
2020-02-05 08:30:28 -06:00
Asterisk Development Team
d436f56858 Update for 16.8.0 16.8.0 2020-02-04 10:03:05 -05:00
Joshua Colp
126beb3e6c REVERT: Add option to suppress the Message channel AMI and ARI events
This reverts commit bfe9e1b2e7.

Reason for revert: Per discussion on IRC we're sticking to policy.

Change-Id: I61691a9ffa1bc30807cbe618a4a72b4d214481aa
2020-02-04 08:18:52 -06:00
George Joseph
bfe9e1b2e7 message.c: Add option to suppress the Message channel AMI and ARI events
In order to reduce the amount of AMI and ARI events generated,
the global "Message/ast_msg_queue" channel can be set to suppress
it's normal channel housekeeping events such as "Newexten",
"VarSet", etc. This can greatly reduce load on the manager
and ARI applications when the Digium Phone Module for Asterisk
is in use.  To enable, set "hide_messaging_ami_events" in
asterisk.conf to "yes"  In Asterisk versions <18, the default
is "no" preserving existing behavior.  Beginning with
Asterisk 18, the option will default to "yes".

NOTE:  This change does not affect UserEvents or the ARI
TextMessageReceived events.

* Added the "hide_messaging_ami_events" option to asterisk.conf.

* Changed message.c to set the AST_CHAN_TP_INTERNAL property on
  the "Message/ast_msg_queue" channel if the option is set in
  asterisk.conf.  This suppresses the reporting of the events.

Change-Id: Ia2e3516d43f4e0df994fc6598565d6bba2d7018b
2020-02-03 14:22:43 -06:00
Asterisk Development Team
c92e2bb09f Update for 16.8.0-rc2 16.8.0-rc2 2020-01-30 11:36:41 -05:00
Kevin Harwell
1627e8eddc res_stasis: trigger cleanup after update
The cleanup code in stasis shuts down applications if they are in a deactivated
state, and no longer have explicit subscriptions. When registering an app the
cleanup code was running before calling 'update'. When it should be executed
after 'update' since a call to register may re-activate the app. We don't want
it to shutdown before the 'update' otherwise the app won't be re-activated,
or registered.

This patch makes it so the cleanup code is executed post 'update'.

ASTERISK-28679 #close

Change-Id: I8f2c0b17e33bb8128441567b97fd4c7bf74a327b
(cherry picked from commit dc9875815c)
2020-01-30 10:21:26 -06:00
Kevin Harwell
42c51263b9 stasis/app: don't lock an app before a call to send
Calling 'app_send' eventually calls the app's message handler. It's possible
for a handler to obtain a lock on another object, and then need/want to lock
the app object. If the caller of 'app_send' locks the app object prior to
calling then there's a potential for a deadlock, if another thread calls
'app_send' without locking.

This patch makes it so 'app_send' is not called with the app object locked in
the section of code doing such.

ASTERISK-28423 #close

Change-Id: I6767c6d0933c7db1b984018966eefca4c0638a27
(cherry picked from commit e103339f02)
2020-01-30 09:41:59 -06:00
Joshua C. Colp
939e18d63e res_pjsip_pubsub: Increment persistence data ref when recreating.
Each subscription needs to have a reference to the persisted data
for it, as well as the main JSON contained within the tree. When
recreating a subscription this did not occur and they both shared
the same reference.

ASTERISK-28714

Change-Id: I706abd49ea182ea367a4ac3feca2706460ae9f4a
(cherry picked from commit 4d32f5747c)
2020-01-30 09:37:07 -06:00
Asterisk Development Team
b7b813eb34 Update for 16.8.0-rc1 16.8.0-rc1 2020-01-23 11:40:43 -05:00
Asterisk Development Team
eb1ec0498d Update CHANGES and UPGRADE.txt for 16.8.0 2020-01-23 11:12:30 -05:00
Joshua Colp
60d4230eec Merge "http: Add ability to disable /httpstatus URI" into 16 2020-01-23 08:47:38 -06:00
George Joseph
1b452ebb51 cdr.c: Set event time on party b when leaving a parking bridge
When Alice calls Bob and Bob does a blind transfer to Charlie,
Bob's bridge leave event generates a finalize on both the party_a
and party_b CDRs but while the party_a CDR has the correct end time
set from the event time, party_b's leg did not. This caused that
CDR's end time to be equal to the answered time and resulted in a
billsec of 0.

* We now pass the bridge leave message event time to
cdr_object_party_b_left_bridge_cb() and set it on that CDR before
calling cdr_object_finalize() on it.

NOTE:  This issue affected transfers using chan_sip most of the
time but also occasionally affected chan_pjsip probably due to
message timing.

ASTERISK-28677
Reported by: Maciej Michno

Change-Id: I790720f1e7326f9b8ce8293028743b0ef0fb2cca
2020-01-22 13:08:36 -06:00
Sean Bright
a2a4e1026c http: Add ability to disable /httpstatus URI
Add a new configuration option 'enable_status' which allows the
/httpstatus URI handler to be administratively disabled.

We also no longer unconditionally register the /static and /httpstatus
URI handlers, but instead do it based upon configuration.

Behavior change: If enable_static was turned off, the URI handler was
still installed but returned a 403 when it was accessed. Because we
now register/unregister the URI handlers as appropriate, if the
/static URI is disabled we will return a 404 instead.

Additionally:

* Change 'enablestatic' to 'enable_static' but keep the former for
  backwards compatibility.
* Improve some internal variable names

ASTERISK-28710 #close

Change-Id: I647510f796473793b1d3ce1beb32659813be69e1
2020-01-22 10:09:54 -06:00
Friendly Automation
1b2d305178 Merge "func_odbc.conf.sample: Add example lookup" into 16 2020-01-22 08:44:18 -06:00
Friendly Automation
479781a582 Merge "res_statsd: Document that res_statsd does nothing on its own" into 16 2020-01-22 08:38:15 -06:00
Friendly Automation
567d572b98 Merge "chan_dahdi: Change 999999 to INT_MAX to better reflect "no timeout"" into 16 2020-01-22 07:48:38 -06:00
Joshua Colp
fe18c83296 Merge "translate.c: Fix silk 24kHz truncation in 'core show translation'" into 16 2020-01-22 07:45:41 -06:00
Friendly Automation
cfaf8dfc4d Merge "chan_sip.c: Stop handling continuation lines after reading headers" into 16 2020-01-21 08:27:26 -06:00
Andrew Siplas
9895e94dba chan_dahdi: Change 999999 to INT_MAX to better reflect "no timeout"
The no-entry timeout set to 999999 == 16⅔ minutes, change to INT_MAX
to match behavior of "no timeout" defined in comment.

ASTERISK-28702 #close

Change-Id: I4ea015986e061374385dba247b272f7aac60bf11
2020-01-21 09:08:37 -05:00
Sean Bright
efecc9d139 translate.c: Fix silk 24kHz truncation in 'core show translation'
SILK @ 24kHz is not shown in the 'core show translation' output because of an
off-by-one-error. Discovered while looking into ASTERISK~19871.

ASTERISK-28706
Reported by: Sean Bright

Change-Id: Ie1a551a8a484e07b45c8699cc0c90f1061029510
2020-01-20 15:58:08 -06:00
Sean Bright
a7aaca9eaa func_odbc.conf.sample: Add example lookup
Change-Id: Ia05aab1f579597963d2ea23920d2210cfcb97c84
2020-01-20 15:26:29 -06:00
Sean Bright
04c81f9748 res_statsd: Document that res_statsd does nothing on its own
ASTERISK-24484 #close
Reported by: Dan Jenkins

Change-Id: I05f298904511d6739aefb1486b6fcbee27efa9ec
2020-01-20 11:58:51 -06:00
Joshua Colp
c67de25d6c Merge "queue_log: Add alembic script for generate db table for queue_log" into 16 2020-01-20 11:32:32 -06:00
Joshua Colp
5166088628 Merge "app_voicemail, say: Fix various leading whitespace problems" into 16 2020-01-20 09:32:36 -06:00
Friendly Automation
f66885225a Merge "app_voicemail: Prevent crash when saving message with realtime voicemail" into 16 2020-01-20 09:20:49 -06:00
Rodrigo Ramírez Norambuena
f49517efb9 queue_log: Add alembic script for generate db table for queue_log
Change-Id: I35b928a6251f9da9a1742b2cd14c63a00c3d0f0c
2020-01-20 09:16:39 -06:00
Joshua Colp
766342eedc Merge "pbx.c: Include filesystem cache in free memory calculation" into 16 2020-01-20 07:11:04 -06:00
Friendly Automation
23515dea5c Merge "app_voicemail: Set globals to default values when voicemail.conf missing" into 16 2020-01-17 08:37:51 -06:00