Commit Graph

29135 Commits

Author SHA1 Message Date
zuul 5780492cd7 Merge "chan_pjsip: Multidomain endpoint finding on call" 2017-02-13 09:43:50 -06:00
George Joseph 8b72ec312b stream: Add media stream topology definition and API
This change adds the media stream topology definition and API for
accessing and using it.

Some refactoring of the stream was also done.

ASTERISK-26786

Change-Id: Ic930232d24d5ad66dcabc14e9b359e0ff8e7f568
2017-02-13 07:49:25 -07:00
zuul f9f74f4b75 Merge "manager: Restore Originate failure behavior from Asterisk 11" 2017-02-13 07:11:16 -06:00
Joshua Colp 7e2bbe30fb Merge "stream: Add media stream definition and API with unit tests." 2017-02-13 07:05:07 -06:00
Norbert Varga 75f8167e66 chan_pjsip: Multidomain endpoint finding on call
When PJSIP tries to call an endpoint with a domain (e.g. 1000@test.com),
the user part is stripped down as it would be a trunk with a specified user,
and only the host part is called as a PJSIP endpoint and can't be found.
This is not correct in the case of a multidomain SIP account, so the stripping
after the @ sign is done only if the whole endpoint (in multidomain case
1000@test.com) can't be found.

ASTERISK-26248

Change-Id: I3a2dd6f57f3bd042df46b961eccd81d31ab202e6
2017-02-13 06:05:52 -06:00
Joshua Colp 89871576b9 channel: Protect flags in ast_waitfor_nandfds operation.
The ast_waitfor_nandfds operation will manipulate the flags
of channels passed in. This was previously done without
the channel lock being held. This could result in incorrect
values existing for the flags if another thread manipulated
the flags at the same time.

This change locks the channel during flag manipulation.

ASTERISK-26788

Change-Id: I2c5c8edec17c9bdad4a93291576838cb552ca5ed
2017-02-13 05:09:30 -06:00
Richard Mudgett 07abb39d6a res_pjsip.c: Fix inconsistency between warning and action.
The original return value corresponded to AST_SIP_AUTHENTICATION_CHALLENGE
but we have no authenticator registered to create the challenge.

Change-Id: I62368180d774b497411b80fbaabd0c80841f8512
2017-02-12 15:34:51 -06:00
Richard Mudgett ce810a892b pjsip_distributor.c: Fix off-nominal tdata ref leak.
Change-Id: I571f371d0956a8039b197b4dbd8af6b18843598d
2017-02-12 15:31:50 -06:00
Sean Bright 0910773077 manager: Restore Originate failure behavior from Asterisk 11
In Asterisk 11, if the 'Originate' AMI command failed to connect the provided
Channel while in extension mode, a 'failed' extension would be looked up and
run. This was, I believe, unintentionally removed in 51b6c49. This patch
restores that behavior.

This also adds an enum for the various 'synchronous' modes in an attempt to
make them meaningful.

ASTERISK-26115 #close
Reported by: Nasir Iqbal

Change-Id: I8afbd06725e99610e02adb529137d4800c05345d
2017-02-10 18:04:41 -05:00
Richard Mudgett 16fdb11bc3 core: Cleanup some channel snapshot staging anomalies.
We shouldn't unlock the channel after starting a snapshot staging because
another thread may interfere and do its own snapshot staging.

* app_dial.c:dial_exec_full() made hold the channel lock while setting up
the outgoing channel staging.  Made hold the channel lock after the called
party answers while updating the caller channel staging.

* chan_sip.c:sip_new() completed the channel staging on off-nominal exit.
Also we need to use ast_hangup() instead of ast_channel_unref() at that
location.

* channel.c:__ast_channel_alloc_ap() added a comment about not needing to
complete the channel snapshot staging on off-nominal exit paths.

* rtp_engine.c:ast_rtp_instance_set_stats_vars() made hold the channel
locks while staging the channels for the stats channel variables.

Change-Id: Iefb6336893163f6447bad65568722ad5d5d8212a
2017-02-10 12:05:56 -06:00
Joshua Colp bab4885f1e stream: Add media stream definition and API with unit tests.
This change adds the media stream definition and API for
accessing and using it. Unit tests have also been written
which exercise aspects of the API.

ASTERISK-26773

Change-Id: I3dbe54065b55aaa51f467e1a3bafd67fb48cac87
2017-02-10 09:58:03 -07:00
George Joseph 648d181d2f configs/samples: Fix placement of 'identify' entry in sorcery.conf
The entry for 'identify' was incorrectly placed in the
res_pjsip section when it should be in
res_pjsip_endpoint_identifier_ip.

ASTERISK-26785 #close

Change-Id: Ia1372b12a952bfe2df6b1b1e0e725ca306a5d41a
2017-02-10 09:48:44 -06:00
Mark Michelson 46147a8f30 Revert "Update qualifies when AOR configuration changes."
This reverts commit 6492e91392.

The change in question was intended to prevent the need to reload in
order to update qualifies on contacts when an AOR changes. However, this
ended up causing a deadlock instead.

Change-Id: I1a835c90a5bb65b6dc3a1e94cddc12a4afc3d71e
2017-02-08 11:54:39 -06:00
zuul c72b4c98e8 Merge "srv: Fix crash when ast_srv_lookup is used and 0 records are returned." 2017-02-08 10:00:05 -06:00
Joshua Colp 5422ec140c srv: Fix crash when ast_srv_lookup is used and 0 records are returned.
When performing an SRV lookup using the ast_srv_lookup function it
did not properly handle the situation where 0 records are returned.
If this happened it would wrongly assume that at least one record
was present.

This change fixes the code so it will exit early if an error occurs
or if 0 records are returned.

ASTERISK-26772
patches:
  srv_lookup.patch submitted by nappsoft (license 6822)

Change-Id: I09b19081c74e0ad11c12bf54a257243b1bcb2351
2017-02-07 12:13:23 -06:00
Joshua Colp b79cc62057 res_stasis_device_state: Protect the adding/removing of subscriptions.
The adding and removing of device state subscriptions did not protect
fully against simultaneous manipulation. In particular the subscribe
case allowed a small window where two subscriptions could be added for
the same device state instead of just one.

This change makes the code hold the subscriptions lock for the entirety
of each operation to ensure that two are not occurring at the same time.

ASTERISK-26770

Change-Id: I3e7f8eb9d09de440c9024d2dd52029f6f20e725b
2017-02-07 10:56:34 -06:00
Richard Mudgett b47cf1a7d6 res_pjsip: Fix some off nominal tdata leaks.
Change-Id: I243a4be5e7fbfe604923764969c4ee04eee89b9d
2017-02-06 11:02:35 -06:00
Sebastien Duthil 7b280e7ccf
res_ari: fix memory leak for channelvars
In ari.conf, when setting the option channelvars, every Stasis channel
snapshot would create a list of variable/value that would not be freed
when the snapshot is freed, resulting in a often-recurring memory
leak.

ASTERISK-26767 #close

Change-Id: Ia37dd9d68063d7f879193df02ede293e5ded716d
2017-02-03 16:42:52 -05:00
Joshua Colp e63635b578 Merge "Update qualifies when AOR configuration changes." 2017-02-03 09:32:53 -06:00
Joshua Colp 9e05379f65 Merge "channel.c: Fix unbalanced read queue deadlocking local channels." 2017-02-03 05:32:26 -06:00
Joshua Colp 69fba55838 Merge "res_agi: Prevent an AGI from eating frames it should not. (Re-do)" 2017-02-03 05:32:12 -06:00
Tzafrir Cohen c6c7f17206 libasteriskssl: do nothing with OpenSSL >= 1.1
OpenSSL 1.1 requires no explicit initialization. The hacks in the
library are not needed. They also happen to fail running Asterisk.

Change-Id: I3b3efd5d80234a4c45a8ee58dcfe25b15d9ad100
2017-02-03 10:28:14 +02:00
Tzafrir Cohen bc041ca14a tcptls: use TLS_client_method with OpenSSL 1.1
OpenSSL 1.1 introduced TLS_client_method() and deprecated the previous
version-specific methods (such as TLSv1_client_method(). Other than
being simpler to use and more correct (gain support for TLS newer that
TLS1, in our case), the older ones produce a deprecation warning that
fails the build in dev-mode.

Change-Id: I257b1c8afd09dcb0d96cda3a41cb9f7a15d0ba07
2017-02-03 10:28:14 +02:00
Tzafrir Cohen 2c8d0764de openssl 1.1 support: use OPENSSL_VERSION_NUMBER
Use OPENSSL_VERSION_NUMBER instead of OPENSSL_API_COMPAT to detect
the openssl 1.1 API.

Change-Id: I4e448f55ef516aedf6ad154037c35577a421a458
2017-02-03 10:28:14 +02:00
George Joseph 0478c1f76a Merge "Add reload options to CLI/AMI stale object commands." 2017-02-02 18:34:03 -06:00
Joshua Colp 5ca45117df Merge "Frame deferral: Revert API refactoring." 2017-02-02 18:08:43 -06:00
zuul 2b62015e78 Merge "res_odbc: Remove deprecated settings from sample configuration file" 2017-02-02 16:40:03 -06:00
Richard Mudgett 50029f585e channel.c: Fix unbalanced read queue deadlocking local channels.
Using the timerfd timing module can cause channel freezing, lingering, or
deadlock issues.  The problem is because this is the only timing module
that uses an associated alert-pipe.  When the alert-pipe becomes
unbalanced with respect to the number of frames in the read queue bad
things can happen.  If the alert-pipe has fewer alerts queued than the
read queue then nothing might wake up the thread to handle received frames
from the channel driver.  For local channels this is the only way to wake
up the thread to handle received frames.  Being unbalanced in the other
direction is less of an issue as it will cause unnecessary reads into the
channel driver.

ASTERISK-26716 is an example of this deadlock which was indirectly fixed
by the change that found the need for this patch.

* In channel.c:__ast_queue_frame(): Adding frame lists to the read queue
did not add the same number of alerts to the alert-pipe.  Correspondingly,
when there is an exceptionally long queue event, any removed frames did
not also remove the corresponding number of alerts from the alert-pipe.

ASTERISK-26632 #close

Change-Id: Ia98137c5bf6e9d6d202ce0eb36441851875863f6
2017-02-02 13:02:03 -06:00
Richard Mudgett 97c308471d res_agi: Prevent an AGI from eating frames it should not. (Re-do)
A dialplan intercept routine is equivalent to an interrupt routine.  As
such, the routine must be done quickly and you do not have access to the
media stream.  These restrictions are necessary because the media stream
is the responsibility of some other code and interfering with or delaying
that processing is bad.  A possible future dialplan processing
architecture change may allow the interception routine to run in a
different thread from the main thread handling the media and remove the
execution time restriction.

* Made res_agi.c:run_agi() running an AGI in an interception routine run
in DeadAGI mode.  No touchy channel frames.

ASTERISK-25951

ASTERISK-26343

ASTERISK-26716

Change-Id: I638f147ca7a7f2590d7194a8ef4090eb191e4e43
2017-02-02 13:02:03 -06:00
Richard Mudgett 72e3fc5845 Frame deferral: Revert API refactoring.
There are several issues with deferring frames that are caused by the
refactoring.

1) The code deferring frames mishandles adding a deferred frame to the
deferred queue.  As a result the deferred queue can only be one frame
long.

2) Deferrable frames can come directly from the channel driver as well as
the read queue.  These frames need to be added to the deferred queue.

3) Whoever is deferring frames is really only doing the __ast_read() to
collect deferred frames and doesn't care about the returned frames except
to detect a hangup event.  When frame deferral is completed we must make
the normal frame processing see the hangup as a frame anyway.  As such,
there is no need to have varying hangup frame deferral methods.  We also
need to be aware of the AST_SOFTHANGUP_ASYNCGOTO hangup that isn't real.
That fake hangup is to cause the PBX thread to break out of loops to go
execute a new dialplan location.

4) To properly deal with deferrable frames from the channel driver as
pointed out by (2) above, means that it is possible to process a dialplan
interception routine while frames are deferred because of the
AST_CONTROL_READ_ACTION control frame.  Deferring frames is not
implemented as a re-entrant operation so you could have the unsupported
case of two sections of code thinking they have control of the media
stream.

A worse problem is because of the bad implementation of the AMI PlayDTMF
action.  It can cause two threads to be deferring frames on the same
channel at the same time.  (ASTERISK_25940)

* Rather than fix all these problems simply revert the API refactoring as
there is going to be only autoservice and safe_sleep deferring frames
anyway.

ASTERISK-26343

ASTERISK-26716 #close

Change-Id: I45069c779aa3a35b6c863f65245a6df2c7865496
2017-02-02 13:02:03 -06:00
zuul 3c558b4b4a Merge "audiohooks: Muting a hook can mute underlying frames" 2017-02-02 11:51:21 -06:00
Sean Bright 4c51ad158d res_odbc: Remove deprecated settings from sample configuration file
ASTERISK-26704 #close
Reported by: Anthony Messina

Change-Id: I976a1f94cf79c5f31e76174c61f5c6a65fd6354f
2017-02-02 11:28:05 -06:00
zuul 5504dd3cdd Merge "res_pjsip: Handle invocation of callback on outgoing request when error occurs." 2017-02-02 10:44:58 -06:00
Richard Mudgett 7d9b50a7b2 res_resolver_unbound.c: Fix frequent ref leak caught by excessive ref trap.
ASTERISK-26765

Change-Id: I27eb97df7f8d7e624b0b9a61c0fcee4718c86d8d
2017-02-01 17:33:41 -06:00
Sean Bright 2849b726b6 audiohooks: Muting a hook can mute underlying frames
If an audiohook is placed on a channel that does not require transcoding,
muting that hook will cause the underlying frames to be muted as well.

The original patch is from David Woolley but I have modified slightly.

ASTERISK-21094 #close
Reported by: David Woolley
Patches:
      ASTERISK-21094-Patch-1.8-1.txt (license #5737) patch uploaded
      by David Woolley

Change-Id: Ib2b68c6283e227cbeb5fa478b2d0f625dae338ed
2017-02-01 17:00:26 -06:00
Joshua Colp 97d58add32 Merge "res_rtp_asterisk: Swap byte-order when sending signed linear" 2017-02-01 15:36:23 -06:00
Mark Michelson bbed75c3ba Update qualifies when AOR configuration changes.
Prior to this change, qualifies would only update in the following
cases:
* A reload of res_pjsip.so was issued.
* A dynamic contact was re-registered after its AOR's qualify_frequency
  had been changed
This does not work well if you are using realtime for your AORs. You can
update your database to have a new qualify_frequency, but the permanent
contacts on that AOR will not have their qualifies updated. And the
dynamic contacts on that AOR will not have their qualifies updated until
the next registration, which could be a long time.

This change seeks to fix this problem by making it so that whenever AOR
configuration is applied, the contacts pertaining to that AOR have their
qualifies updated.

Additions from this patch:
* AOR sorcery objects now have an apply handler that calls into a newly
  added function in the OPTIONS code. This causes all contacts
  associated with that AOR to re-schedule qualifies.
* When it is time to qualify a contact, the OPTIONS code checks to see
  if the AOR can still be retrieved. If not, then qualification is
  canceled on the contact.

Alterations from this patch:
* The registrar code no longer updates contact's qualify_frequence and
  qualify_timeout. There is no point to this since those values already
  get updated when the AOR changes.
* Reloading res_pjsip.so no longer calls the OPTIONS initialization
  function. Reloading res_pjsip.so results in re-loading AORs, which
  results in re-scheduling qualifies.

Change-Id: I2e7c3316da28f389c45954f24c4e9389abac1121
2017-02-01 14:21:04 -06:00
Joshua Colp aeea634bc0 res_pjsip: Handle invocation of callback on outgoing request when error occurs.
There are some error cases in PJSIP when sending a request that will
result in the callback for the request being invoked.  The code did not
handle this case and assumed on every error case that the callback was not
invoked.

The code has been changed to check whether the callback has been invoked
and if so to absorb the error and treat it as a success.

ASTERISK-26679
ASTERISK-26699

Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91
2017-02-01 13:15:26 -06:00
Sean Bright 7a16524a83 res_rtp_asterisk: Swap byte-order when sending signed linear
Before Asterisk 13, signed linear was converted into network byte order by a
smoother before being sent over the network. We restore this behavior by
forcing the creation of a smoother when slinear is in use and setting the
appropriate flags so that the byte order conversion is always done.

ASTERISK-24858 #close
Reported-by: Frankie Chin

Change-Id: I868449617d1a7819578f218c8c6b2111ad84f5a9
2017-02-01 10:42:42 -05:00
George Joseph e252aff9ad debug_utilities: Install ast_logescalator to /var/lib/asterisk/scripts
Forgot to install it with the original patch

Change-Id: I8bdb540a6694971ae5fe21f48d532332c6482e4c
2017-01-31 12:48:14 -06:00
zuul b814343538 Merge "make_build_h: handle backslashes in external strings" 2017-01-31 09:43:51 -06:00
zuul ada0032305 Merge "app_queue: Fix queues randomly disappearing on reload" 2017-01-30 11:39:26 -06:00
zuul 6cbe894828 Merge "debug_utilities: Add ast_logescalator" 2017-01-29 11:22:05 -06:00
zuul 940c395110 Merge "libastssl/pj: libastssl/pj should have an so_version" 2017-01-27 19:18:14 -06:00
George Joseph ef4deb8ecd debug_utilities: Add ast_logescalator
The escalator works by creating a set of startup commands in cli.conf
that set up logger channels and issue the debug commands for the
subsystems specified.  If asterisk is running when it is executed,
the same commands will be issued to the running instance.  The original
cli.conf is saved before any changes are made and can be restored by
executing '$prog --reset'.

The log output will be stored in...
$astlogdir/message.$uniqueid
$astlogdir/debug.$uniqueid
$astlogdir/dtmf.$uniqueid
$astlogdir/fax.$uniqueid
$astlogdir/security.$uniqueid
$astlogdir/pjsip_history.$uniqueid
$astlogdir/sip_history.$uniqueid

Some minor tweaks were made to chan_sip, and res_pjsip_history
so their history output could be send to a log channel as packets
are captured.

A minor tweak was also made to manager so events are output to verbose
when "manager set debug on" is issued.

Change-Id: I799f8e5013b86dc5282961b27383d134bf09e543
2017-01-27 15:10:02 -06:00
zuul 3eabae43c4 Merge "tests: use datadir for sound files" 2017-01-27 12:44:05 -06:00
Torrey Searle 178b90af02 libastssl/pj: libastssl/pj should have an so_version
Issue introduced in b59956a87.  In the non-darwin case libastssl/pj
should be versioned.  This causes the symbol file for this lib
to not be generated.

Change-Id: Ib07ae8c40252813c488e2c1ac6204fd42816dd4c
(cherry picked from commit 54b027916a)
2017-01-27 08:21:01 -06:00
George Joseph 6f645a6d4e Merge "media: Add experimental support for RTCP feedback." 2017-01-27 07:04:52 -06:00
zuul 08bc42201d Merge "res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving." 2017-01-26 22:11:37 -06:00
kkm 138cd8d019 make_build_h: handle backslashes in external strings
LikewiseOpen creates user names with a backslash in them. A gentle
massage with sed(1) allows such strings to be inserted into build.h
properly quoted. I am also adding the same for host name and other
strings used in the script that are more or less user-controlled.

ASTERISK-26754

Change-Id: Iac5ef2b67a68ee58f35ddbf86bb818ba6eabecae
2017-01-26 21:17:20 -06:00