Commit Graph

28879 Commits

Author SHA1 Message Date
Richard Mudgett
d23fed8f2a 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 12:38:18 -06:00
Richard Mudgett
4c4be0e0be 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 12:38:05 -06:00
zuul
cd48b8044e Merge "audiohooks: Muting a hook can mute underlying frames" into 14 2017-02-02 11:51:18 -06:00
Joshua Colp
4220378d58 Merge "res_pjsip: Handle invocation of callback on outgoing request when error occurs." into 14 2017-02-02 09:35:32 -06:00
Richard Mudgett
b918bd858f res_resolver_unbound.c: Fix frequent ref leak caught by excessive ref trap.
ASTERISK-26765

Change-Id: I27eb97df7f8d7e624b0b9a61c0fcee4718c86d8d
2017-02-01 17:30:50 -06:00
Sean Bright
6e0d7e653b 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:56:24 -05:00
Joshua Colp
d6502d3cbd Merge "res_rtp_asterisk: Swap byte-order when sending signed linear" into 14 2017-02-01 14:59:20 -06:00
Joshua Colp
dcea8f13ce 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:18 -06:00
Sean Bright
3273ea7384 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:39:31 -05:00
George Joseph
6cc7ee85df 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:03 -06:00
Joshua Colp
9882639f37 Merge "make_build_h: handle backslashes in external strings" into 14 2017-01-31 08:36:26 -06:00
Joshua Colp
5b42dd7ae3 Merge "ast_careful_fwrite to support EPIPE gracefully" into 14 2017-01-30 12:50:05 -06:00
zuul
bb1e9e1b58 Merge "app_queue: Fix queues randomly disappearing on reload" into 14 2017-01-30 11:28:57 -06:00
zuul
c390bfc645 Merge "libastssl/pj: libastssl/pj should have an so_version" into 14 2017-01-29 11:22:07 -06:00
zuul
de7ac8b596 Merge "debug_utilities: Add ast_logescalator" into 14 2017-01-27 18:30:26 -06:00
George Joseph
b28d0f8bc2 Merge "test_voicemail_api: order of params to VERIFY macros" into 14 2017-01-27 15:52:21 -06:00
George Joseph
140e453afc 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:09:54 -06:00
zuul
cb113eb0c0 Merge "tests: use datadir for sound files" into 14 2017-01-27 14:50:26 -06:00
Torrey Searle
86f668fc0b 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 07:17:48 -07:00
George Joseph
4178f5aee6 Merge "res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving." into 14 2017-01-27 07:02:14 -06:00
kkm
e12fb3ffc1 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:11 -06:00
kkm
7eaaa8bedc ast_careful_fwrite to support EPIPE gracefully
When a reading end of the network socket is closed by an AMI manager,
the EPIPE is signaled when writing to our end, resulting in the
spurious log error message

  ast_careful_fwrite: fwrite() returned error: Broken pipe

Previously EPIPE was handled in ast_carefulwrite() a few lines above,
but not in this function.

ASTERISK-26753

Change-Id: I6a67335cd6526608bb9b78f796c626b1677664b8
2017-01-26 21:08:54 -06:00
kkm
4ae2ff5f21 app_queue: Fix queues randomly disappearing on reload
With 500+ queues and a reload every minute, a random queue disappears
upon reload. The cause is mususe of the 'dead' flag. Namely, all queues
were marked dead up front, and then "resurrected" by dropping this flag
for those found in the configuration. But a queue marked dead can be
removed also when control leaves the app entry point on a PBX thread.

With this change, the queue is marked only not found, and at the end of
reload only the queues that are still not found are actually marked as
dead, so the dead flag is never reset, and set only on positively dead
queues.

ASTERISK-26755

Change-Id: I3a4537aec9eb8d8aeeaa0193407e3523feb004bf
2017-01-26 20:20:55 -06:00
zuul
75ef430f2f Merge "PJPROJECT logging: Fix detection of max supported log level." into 14 2017-01-26 18:49:44 -06:00
zuul
cac5ee2517 Merge "ari: Implement 'debug all' and request/response logging" into 14 2017-01-26 18:46:19 -06:00
George Joseph
23e5fd709a Merge "Add notes about embedded ast_frame structs holding a format ref." into 14 2017-01-26 16:07:29 -06:00
George Joseph
3985126a53 Merge "T.140: Fix format ref and memory leaks." into 14 2017-01-26 16:07:02 -06:00
George Joseph
420b10b00e Merge "res_musiconhold.c: Fix format ref leak when parsing MOH config class." into 14 2017-01-26 16:05:31 -06:00
George Joseph
1dd2920ec8 Merge "frame.c: Fix off-nominal format ref leaks." into 14 2017-01-26 16:04:53 -06:00
Joshua Colp
66bed4cc84 res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving.
This change adds a missing unreference of the hostname when resolving and
also cleans up the iterator.

ASTERISK-26735

Change-Id: Ic012ebaf3d89e714eec340b7b0c5e63c66af857a
2017-01-26 10:59:06 -06:00
Joshua Colp
b331cb84d5 Merge "res_pjsip_endpoint_identifier_ip: Ensure error defaults to 0." into 14 2017-01-26 07:48:25 -06:00
George Joseph
0cdd2f120e Merge "astobj2.c: Add excessive ref count trap." into 14 2017-01-26 07:28:11 -06:00
zuul
4a6f5fa595 Merge "main/app.c: Memory corruption from early format destruction." into 14 2017-01-25 15:01:37 -06:00
George Joseph
37a4260ffe Merge "chan_oss.c: Fix format ref leak in oss_read()." into 14 2017-01-25 13:50:34 -06:00
Richard Mudgett
89221a6628 T.140: Fix format ref and memory leaks.
* channel.c:ast_sendtext(): Fix T.140 SendText memory leak.

* format_compatibility.c: T.140 RED and T.140 were swapped.

* res_rtp_asterisk.c:rtp_red_init(): Fix ast_format_t140_red ref leak.

* res_rtp_asterisk.c:rtp_red_init(): Fix data race after starting periodic
scheduled red_write().

* res_rtp_asterisk.c: Some other minor misc tweaks.

Change-Id: Ifa27a2e0f8a966b1cf628607c86fc4374b0b88cb
2017-01-25 13:46:34 -06:00
zuul
3837e994d9 Merge "stasis_bridge.c: Fix off-nominal stasis control ref leak." into 14 2017-01-25 13:39:21 -06:00
George Joseph
330d468e55 Merge "pjproject_bundled: Fix setting max log level" into 14 2017-01-24 22:29:45 -06:00
George Joseph
e6957f561c Merge "res_pjsip_pubsub.c: Implement "pjsip show subscriptions" commands." into 14 2017-01-24 15:47:25 -06:00
Joshua Colp
60e54d69b9 res_pjsip_endpoint_identifier_ip: Ensure error defaults to 0.
When configuring a match using a netmask the error variable was
not defaulting to 0. For some people this would cause the code
to think an error occurred when adding the match when in reality
it added perfectly fine.

ASTERISK-26693

Change-Id: I850c250813742bddde65c84e739093c9e01dfe56
2017-01-24 15:41:27 -06:00
Richard Mudgett
ebb78c5b24 astobj2.c: Add excessive ref count trap.
Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a
2017-01-24 14:15:03 -06:00
Richard Mudgett
5db078273d main/app.c: Memory corruption from early format destruction.
* make_silence() created a malloced silence slin frame without adding a
slin format ref.  When the frame is destroyed it will unref the slin
format that never had a ref added.  Memory corruption is expected to
follow.

* Simplified and fixed counting the number of samples in a frame list for
make_silence().

* Eliminated an unnecessary RAII_VAR associated with the make_silence()
frame.

Change-Id: I47de3f9b92635b7f8b4d72309444d6c0aee6f747
2017-01-24 14:04:51 -06:00
Richard Mudgett
d73fed119d frame.c: Fix off-nominal format ref leaks.
* ast_frisolate() could leak frame format refs on allocation
failures.

* Similified code in ast_frisolate() and code used by
ast_frisolate().

Change-Id: I79566d4d36b3d7801bf0c8294fcd3e9a86a2ed6d
2017-01-24 14:02:39 -06:00
Richard Mudgett
7206f5acd8 stasis_bridge.c: Fix off-nominal stasis control ref leak.
Change-Id: Ib17218343a6596832060180e19386da9df150ac8
2017-01-24 13:59:20 -06:00
Richard Mudgett
c5713081f4 res_musiconhold.c: Fix format ref leak when parsing MOH config class.
Change-Id: Ica8e8e2ce7604c2c61ec55bef07dc675361d2ea5
2017-01-24 13:55:12 -06:00
Richard Mudgett
7f21d12d2d chan_oss.c: Fix format ref leak in oss_read().
Change-Id: I0a5d56c7dcf327d60f86a4c25a23571733709fd0
2017-01-24 13:39:15 -06:00
Richard Mudgett
890bd1febf Add notes about embedded ast_frame structs holding a format ref.
mod_format.h: Note ast_filestream.fr holds a format ref.

translate.h: Note ast_trans_pvt.f holds a format ref.

Change-Id: I86bda354d725207b41e08920355d7c31b2d7f749
2017-01-24 13:37:36 -06:00
Joshua Colp
3ddf7da3a7 Merge "Free endpoint ACLs when destroying PJSIP endpoints." into 14 2017-01-24 12:45:11 -06:00
Richard Mudgett
b43cb30d7b PJPROJECT logging: Fix detection of max supported log level.
The mechanism used for detecting the maximum log level compiled into the
linked pjproject did not work.  The API call simply stores the requested
level into an integer and does no range checking.  Asterisk was assuming
that there was range checking and limited the new value to the allowable
range.  To get the actual maximum log level compiled into the linked
pjproject we need to get and save off the initial set log level from
pjproject.  This is the maximum log level supported.

* Get and save off the initial log level setting before altering it to the
desired level on startup.  This has to be done by a macro rather than
calling a core function to avoid incorrectly linking pjproject.

* Split the initial log level warning messages to warn if the linked
pjproject cannot support the requested startup level and if it is too low
to get the pjproject buildopts for "pjproject show buildopts".

* Adjust the CLI "pjproject set log level" to check the saved max log
level and to generate normal output messages instead of a warning message.

ASTERISK-26743 #close

Change-Id: I40aa76653e2a1dece66c3f8734594b4f0471cfb4
2017-01-24 11:25:11 -06:00
Tzafrir Cohen
c06d9d7717 tests: use datadir for sound files
Some (voicemail-related) tests API symlinks beep.gsm and other files
from ast_config_AST_VAR_DIR. It should use ast_config_AST_DATA_DIR.

ASTERISK-26740 #close

Change-Id: Id49c56fb9e16df64b1a2b829693ca7601252df89
2017-01-24 08:35:07 -06:00
Tzafrir Cohen
568b349930 test_voicemail_api: order of params to VERIFY macros
Fix order of parameters in calls to VM_API_INT_VERIFY and
VM_API_STRING_VERIFY

ASTERISK-26739 #close

Change-Id: I30dc6b36893aadad6012be3f16f93aa5720870d6
Note: status: builds. Not tested any further.
2017-01-24 08:34:28 -06:00