Compare commits

...

5800 Commits

Author SHA1 Message Date
Asterisk Development Team fe79ea813f Update for 13.34.0 2020-06-11 03:42:48 -05:00
Asterisk Development Team 23f9f9154e Update for 13.34.0-rc3 2020-06-09 03:59:43 -05:00
Pirmin Walthert 5337667d38 res_pjsip_logger: use the correct pointer when logging tx_messages to pcap
When writing tx messages to pcap files, Asterisk is using the wrong
pointer resulting in lots of wasted space. This patch fixes it to use
the correct pointer.

ASTERISK-28932 #close

Change-Id: I5b8253dd59a083a2ca2c81f232f1d14d33c6fd23
2020-06-04 03:57:33 -05:00
Asterisk Development Team 7a9a2241ad Update for 13.34.0-rc2 2020-06-02 03:55:24 -05:00
Pirmin Walthert 4075ae5957 res_pjsip_logger.c: correct the return value checks when writing to pcap
files

fwrite() does return the number of elements written and not the
number of bytes. However asterisk is currently comparing the return
value to the size of the written element what means that asterisk logs
five WARNING messages on every packet written to the pcap file.

This patch changes the code to check for the correct value, which will
always be 1.

ASTERISK-28921 #close

Change-Id: I2455032d9cb4c5a500692923f9e2a22e68b08fc2
2020-06-01 07:06:13 -05:00
Asterisk Development Team d00cf806ee Update for 13.34.0-rc1 2020-05-28 07:10:12 -05:00
Asterisk Development Team 07bf7890dc Update CHANGES and UPGRADE.txt for 13.34.0 2020-05-28 07:05:36 -05:00
Joshua C. Colp c8cabb08aa res_pjsip: Use correct pool for storing the contact_user value.
When replacing the user portion of the Contact URI the code
was using the ephemeral pool instead of the tdata pool. This
could cause the Contact user value to become invalid after a
period of time.

The code will now use the tdata pool which persists for the
lifetime of the message instead.

ASTERISK-28794

Change-Id: I31e7b958e397cbdaeedd0ebb70bcf8dd2ed3c4d5
2020-05-27 11:35:42 -03:00
Pirmin Walthert 4b7293f44e res_pjsip_nat.c: remove x-ast-orig-host from request URI and To header
While asterisk is filtering out the x-ast-orig-host parameter from the
contact on response messages, it is not filtering it out from the
request URI and the to header on SIP requests (for example INVITE).

ASTERISK-28884 #close

Change-Id: Id032b33098a1befea9b243ca994184baecccc59e
2020-05-22 07:47:48 -05:00
Joshua C. Colp 0d86f49f7f res_sorcery_config: Always reload configuration on errors.
When a configuration file in Asterisk is loaded
information about it is stored such that on a
reload it is not reloaded if nothing has changed.
This can be problematic when an error exists in
a configuration file in PJSIP since the error
will be output at start and not subsequently on
reload if the file is unchanged.

This change makes it so that if an error is
encountered when res_sorcery_config is loading
a configuration file a reload will always read
in the configuration file, allowing the error
to be seen easier.

Change-Id: If2e05a017570f1f5f4f49120da09601e9ecdf9ed
2020-05-20 10:02:00 -05:00
Joshua C. Colp 17a878dd99 bridge_softmix: Always remove audio from mixed frame.
When receiving audio from a channel we determine if it
is talking or silence based on a threshold value. If
this threshold is met we always mix the audio into the
conference bridge. If this threshold is not met we also
mix the audio into the conference bridge UNLESS the
drop silence option is enabled.

The code that removed the audio from the mixed frame
assumed that it was always not present if it did not
meet the threshold to be considered talking. This is
incorrect. If it has been stated that the audio was
mixed into the mixed frame then it has been mixed into
the mixed frame. By not removing audio that was
considered non-talking it was possible for a channel
to receive a slight echo of audio of itself at times.

This change ensures that the audio is always removed
from the mixed frame going back to the channel so it
no longer receives the slight echo.

ASTERISK-28898

Change-Id: I7b1b582cc1bcdb318ecc60c9d2e3d87ae31d55cb
2020-05-20 09:15:37 -05:00
Joshua C. Colp 4fba0f678b res_pjsip_logger: Expand functionality to improve logging.
The PJSIP packet logger now has the following CLI commands:

pjsip set logger pcap <filename>

When used this will create a pcap file containing the incoming
and outgoing SIP packets, in unencrypted form.

pjsip set logger verbose <on / off>

This allows you to toggle logging to verbose on and off.

pjsip set logger host <IP/subnet mask> add

This allows you to add an additional IP address or subnet
mask to logging, allowing you to log multiple instead of
just a single IP address or all traffic.

The normal "pjsip set logger host" CLI command has also been
expanded to allow subnet masks as well.

ASTERISK-28895

Change-Id: If5859161a72b0d7dd2d1f92d45bed88e0cd07d0e
2020-05-20 09:14:05 -05:00
sungtae kim 5de3f22ee0 res_rtp_asterisk.c: Fixed memory leak
Added freeifaddrs() for memory releasing.

ASTERISK-28904

Change-Id: I109403866e85a30659351946903a679de9727a8f
2020-05-18 11:41:50 -05:00
Guido Falsi 683f0b269e pjproject: Fix race condition when building with parallel make
Pjproject makefiles miss some dependencies which can cause race
conditions when building with parallel make processes. This patch
adds such dependencies correctly.

ASTERISK-28879 #close
Reported-by: Dmitry Wagin <dmitry.wagin@ya.ru>

Change-Id: Ie1b0dc365dafe4a84c5248097fe8d73804043c22
2020-05-11 17:37:06 -05:00
Roger James 3df1b65dd0 res_pjsip_history.c: Fix to stop SIGSEGV when IPv6 addresses are encountered.
Changed source and destination address fields in struct
pjsip_history_entry so that they are long enough to hold an IPv6
address.

ASTERISK-28854

Change-Id: Id65bb9aa961e9ecbcb500815e18170f774e34d3e
2020-05-11 16:48:48 -05:00
traud 377f5b6992 tcptls: Fix notice when TLS is enabled but not supported.
ASTERISK-28797

Change-Id: Iab364a2c2519fd9d11d1c28293fda43d61b64c28
2020-05-11 05:47:49 -05:00
traud 103b789e56 app_osplookup: Avoid a format truncation.
Ensure that output buffers for the osp_convert_inout
function have sufficient space for additional data
such as brackets and ports.

ASTERISK-28804

Change-Id: Ie54c8241ff0cc653910539c2db00ff2a4869750b
2020-05-11 05:22:21 -05:00
Pirmin Walthert 146e7c54f1 app.c: make sure that no non-async-signal-safe syscalls are used after
fork before exec

Posix does only allow async-signal-safe syscalls after fork before exec.
As asterisk ignores this, functions like TrySystem or System sometimes
end up in a deadlocked child process. The patch prevents the use of
non-async-signal-safe syscalls.

ASTERISK-28776

Change-Id: Idc76365c0592ee3f3b3bd72a4f48f7a098978e8e
2020-05-06 06:40:12 -05:00
Nathan Bruning 10292dc663 app_queue: track masquerades in app_queue to avoid leaked stasis subscriptions
Add a new "masquarade" channel event, and use it in app_queue to track unique id's.

Testcase is submitted as https://gerrit.asterisk.org/c/testsuite/+/14210

ASTERISK-28829 #close
ASTERISK-25844 #close

Change-Id: Ifc5f9f9fd70903f3c6e49738d3bc632b085d2df6
2020-05-05 10:09:27 -05:00
Guido Falsi 77837059ac pjproject: Remove bashism from configure.m4 script
The configure.m4 script for pjproject contains some += syntax, which
is specific to bash, replacing it with string substitutions makes
the script compatible with traditional Bourne shells.

ASTERISK-28866 #close
Reported-by: Christoph Moench-Tegeder <cmt@FreeBSD.org>

Change-Id: I382a78160e028044598b7da83ec7e1ff42b91c05
2020-05-05 09:23:41 -05:00
Jaco Kroon f5a1a91b03 Remove #include <sys/cdefs.h>
These are not provided by standards, and as a result causes failure to
compile on musl.

https://wiki.musl-libc.org/faq.html#Q:-When-compiling-something-against-musl,-I-get-error-messages-about-%3Ccode%3Esys/cdefs.h%3C/code%3E

Change-Id: I6a357cefd106c72cfecafd898638f6b5692c2e05
2020-05-05 09:22:51 -05:00
George Joseph 2d1713395b app_voicemail: Add workaround for a gcc 10 issue with -Wrestrict
The gcc 10 -Wrestrict option was causing "overlap" errors when
snprintf was copying one char[256] structure member to another
char[256] member in the same structure.

Using ast_alloca instead of declaring the structure inline
solves the issue.

Here's a link to the "enhancement":
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-10/msg00570.html

We may follow up with a gcc bug report.

Change-Id: Ie0099adcb0a9727bd9aa99e024dd912a67eaf534
2020-04-30 09:56:03 -06:00
Alexander Traud 18cc090761 core_local: Local calls are always secure.
In a Dialplan, the channel drivers 'chan_sip' and 'chan_iax2' support
the channel items 'secure_bridge_media' and 'secure_bridge_signaling'.
That way, a channel can be forced to use encryption even if not
specified in its configuration.

However, when the Local Proxy kicks in, for example, in case of a
forwarding (SIP status 302), Local Proxy stated it does not know those
items. Consequently, such a call could not be proxied how clever your
Dialplan was. Because local calls within Asterisk are always secure,
Local Proxy accepts such a request now.

ASTERISK-22920

Change-Id: I4c143bb70f686790953cc04c5a4b810bbb03636c
2020-04-29 13:04:55 -05:00
Joshua C. Colp 35f7e24ebc pjsip: Increase maximum ICE candidate count.
In practice it has been seen that some users come
close to our maximum ICE candidate count of 32.
In case people have gone over this increases the
count to 64, giving ample room.

ASTERISK-28859

Change-Id: I35cd68948ec0ada86c14eb53092cdaf8b62996cf
2020-04-29 13:04:13 -05:00
Guido Falsi 5c74f22977 res_rtp_asterisk: Protect access to nochecksums with #ifdef
Recently code accessing nochecksums variable has been added without including #ifdef SO_NO_CHECK protection, while the variable is created only when such constant is defined.

ASTERISK-28852 #close

Change-Id: I381718893b80599ab8635f2b594a10c1000d595e
2020-04-28 13:05:25 -05:00
Peter Turczak 7714bbfeaa chan_mobile: Add smoother to make SIP/RTP endpoints happy.
In contrast to RFC 3551, section 4.2, several SIP/RTP clients misbehave
severly (up to crashing). This patch adds another smoother for the audio
received via bt. Therefore the audio frames sent to the core will be
CHANNEL_FRAME_SIZE.

ASTERISK-28832 #close

Change-Id: Ic5f9e2f35868ae59cc9356afbd1388b779a1267f
2020-04-27 09:40:02 -05:00
Asterisk Development Team 074d766fb3 Update CHANGES and UPGRADE.txt for 13.33.0 2020-04-23 11:01:09 -05:00
sungtae kim f2d9d31ef5 res_ari_channels: Fixed endpoint 80 characters limit
Fixed it to copy the entire string from the requested endpoint body except tech-prefix.

ASTERISK-28847

Change-Id: I91b5f6708a1200363f3267b847dd6a0915222c25
2020-04-22 08:06:56 -05:00
DanielYK e4508fcc6e res_pjsip: Fixed format of IPv6 addresses for external media addresses
ASTERISK-28835

Change-Id: I66289afd164c5cdd6c5caa39e79d629a467e7a26
2020-04-21 17:44:34 -05:00
Alexander Traud 91ce91dbc6 chan_sip: externhost/externaddr with non-default TCP/TLS ports.
ASTERISK-28372
Reported by: Anton Satskiy

ASTERISK-24428
Reported by: sstream

Change-Id: I2b7432a9bf3b09dc8515297ff955636db7a6224c
2020-04-20 13:44:29 -05:00
Alexander Traud f91dc188dd curl: Add build-time dependency.
ASTERISK-28838

Change-Id: I34724e799e1ffaf723eb2c358abe8934dbadcd52
2020-04-20 11:02:33 -05:00
Alexander Traud bb5c0f30c4 res_pjsip_refer: Add build-time dependency.
ASTERISK-28838

Change-Id: Ic693c3f464e35ec0db242afdb0a1415806af4e25
2020-04-20 10:43:11 -05:00
Alexander Traud 7124850d3c app_getcpeid: Add build-time dependency.
ASTERISK-28838

Change-Id: I68b78e7e4718be82507247433127ce3992a5ba96
2020-04-20 10:01:34 -05:00
Alexander Traud 59f2ad2019 res_pjsip: Add build-time dependency.
ASTERISK-28838

Change-Id: Icb08304744ae3f34dce6ccb76f94379b8382a074
2020-04-20 09:21:43 -05:00
Alexander Traud 1edf0047a1 pjproject_bundled: Honor --without-pjproject.
ASTERISK-28837

Change-Id: Id057324912a3cfe6f50af372675626bb515907d9
2020-04-17 06:06:41 -05:00
Alexander Traud dac20ce461 chan_sip: DiffServ/ToS not only on UDP but also on TCP and TLS sockets.
ASTERISK-27195
Reported by: Joshua Roys

Change-Id: I6e72ecb874200dec7a3865c7babaf5ac0d3101de
2020-04-16 10:35:35 -05:00
Alexander Traud 65598af3ff install_prereq: Add libcap for high bits in DiffServ/ToS.
works automatically; see Mantis 7047 (now ASTERISK-6863)

Change-Id: I27d2c109180bd857b6757fd532de48eddb78aee6
2020-04-16 10:20:51 -05:00
Alexander Traud 47e887dbf6 BuildSystem: Only if found LibPRI, check its optional parts.
Change-Id: If8445f899ee4ce0c606c484943d4ce0c8e43b5da
2020-04-16 09:52:55 -05:00
Alexander Traud 007a6ab05a BuildSystem: Only if found external PJProject, check its optional parts.
Change-Id: I11d5693d25c166c99d8cebffc16184d58f6362de
2020-04-15 02:39:52 -05:00
bernard merindol 43dfd0d300 res_rtp_asterisk.c: Check for first DTMF having timestamp set to 0
When the first DTMF receive in RF2833 codec have TimeStamp at 0
is not processed.

ASTERISK-28812

Change-Id: I3196803a062dd2daee4938c9a778c3810cb7e504
2020-04-14 10:49:45 -05:00
Jean Aunis 947a6e8674 func_volume: Accept decimal number as argument
Allow voice volume to be multiplied or divided by a floating point number.

ASTERISK-28813

Change-Id: I5b42b890ec4e1f6b0b3400cb44ff16522b021c8c
2020-04-14 09:36:54 -05:00
Jaco Kroon ce1213e72f res_rtp_asterisk: iterate all local addresses looking to populate ICE.
By using pjproject to give us a list of candidates, and then filtering,
if the host has >32 addresses configured, then it is possible that we
end up filtering out all 32 of those, and ending up with no candidates
at all.  Instead, get getifaddrs (which pjsip is using underlying
anyway) to retrieve all local addresses, and iterate those, adding the
first 32 addresses not excluded by the ICE ACL.

In our setup at any point in time We've got between 6 and 328 addresses
on any given system.  The lower limit is the lower limit but the upper
limit is growing on a near daily basis currently.

Change-Id: I109eaffc3e2b432f00bf958e3caa0f38cacb4edb
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2020-04-13 19:43:42 -05:00
Alexander Traud 64427c667b pjproject_bundled: Repair ./configure --with-ssl without ARG.
ASTERISK-28758
Reported by: Patrick Wakano
Reported by: Dmitriy Serov

Change-Id: Ifb6b85c559d116739af00bc48d1f547caa85efac
2020-04-13 18:20:46 -05:00
Jaco Kroon a142a1455c res_pjsip: document legal dtls_verify endpoint options.
Change-Id: I7fa7c5c8a7ddb0bd525982f58bff3264ebbd9a1b
2020-04-13 17:27:33 -05:00
Alexander Traud 23211669a7 BuildSystem: Search for Python/C API when possibly needed only.
The Python/C API is used only if the Test Framework was enabled in Asterisk
'make menuselect'. The Test Framework is available only if the Developer Mode
was enabled in Asterisk './configure --enable-dev-mode'. And that Python/C API
is used only if the PJProject was found and not disabled in Asterisk; the user
did not go for './configure --without-pjproject'.

Furthermore, because version 2 of that Python/C API is required (currently) and
because some platforms do not offer a generic version 2, the script searches
for 2.7 explicitly as well.

To avoid version mismatch between the Python/C API and the Python environment,
the script searches for the latter in the same versions, in the same the order
as well. Because this Python/C API is just for (some) Asterisk contributors,
the script also goes for the Python 3 environment as a last resort for all
other Asterisk users. This allows 'make full' even on minimal installations of
Ubuntu 18.04 LTS and newer.

Because the Python/C API is Asterisk contributor specific, the Python packages
are removed from the script './contrib/scripts/install_prereq' as this script
is intended for Asterisk users. Asterisk contributors have to install much more
packages in any case, like:
sudo apt install autoconf automake git git-review python2.7-dev

ASTERISK-28824
ASTERISK-27717

Change-Id: Id46d357e18869f64dcc217b8fdba821b63eeb876
2020-04-13 16:51:28 -05:00
traud 2bcc3df533 chan_sip: TCP/TLS client without server.
It is possible to configure a TCP/TLS client without having a TCP/TLS
server. In that case, no error or warning was printed but the headers
Contact and Via in SIP REGISTER were "(null)".

ASTERISK-28798

Change-Id: I387ca5cb6a65f1eb675a29c5e41df8ec6c242ab2
2020-04-13 16:32:24 -05:00
Alexander Traud a0d5f7ccff _pjsua: Build even with Clang.
Change-Id: Iebf7687613aa0295ea3c82256460b337f1595be2
2020-04-13 15:01:37 -05:00
Alexander Traud 92efcc9047 res_rtp_asterisk: Build without PJProject.
Change-Id: Ifc5059cd867e77b9c92ed9f4b895a9a91200d3ec
2020-04-13 11:35:20 -05:00
Kevin Harwell b2e7fc6972 chan_pjsip: digit_begin - constant DTMF tone if RTP is not setup yet
If chan_pjsip is configured for DTMF_RFC_4733, and the core triggers a
digit begin before media, or rtp has been setup then it's possible the
outgoing channel will hear a constant DTMF tone upon answering.

This happens because when there is no media, or rtp chan_pjsip notifies
the core to initiate inband DTMF. However, upon digit end if media, and
rtp become available then chan_pjsip does not notify the core to stop
inband DTMF. Thus the tone continues playing.

This patch makes it so chan_pjsip only notifies the core to start
inband DTMF in only the required cases. Now if there is no media, or
rtp availabe upon digit begin chan_pjsip does nothing, but tells the
core it handled it.

ASTERISK-28817 #close

Change-Id: I0dbea9fff444a2595fb18c64b89653e90d2f6eb5
2020-04-13 10:54:07 -05:00
traud 9b259c6514 BuildSystem: Remove doc/tex and doc/pdf leftovers.
Furthermore, the nowhere used compress is removed.

ASTERISK-28816

Change-Id: I77daab80cfabb56d51c3ea6b1d14bd9b9fbc577c
2020-04-13 10:22:17 -05:00
Alexander Traud 785225c5a0 BuildSystem: Allow space in path.
ASTERISK-28818

Change-Id: Ib7f246896457d9e3b14d7f5199136d6545ce0b6f
2020-04-09 07:08:11 -05:00
traud 9082f90217 stasis: Avoid always true warnings with clang.
ASTERISK-28801

Change-Id: I63ba125226b9fe8a018bd28825c877603eb8f398
2020-04-08 09:22:18 -05:00
Sebastien Duthil bb974877fa func_channel: allow reading 4 fields from dialplan
The following fields return an error when read from dialplan:

- exten
- context
- userfield
- channame

ASTERISK-28796 #close

Change-Id: Ieacaac629490f8710fdacc9de80ed5916c5f6ee2
2020-04-08 09:13:39 -05:00
traud 05440f3ef6 chan_unistim: Avoid tautological warnings with clang.
ASTERISK-28803

Change-Id: I15449621b68d0ad4d57b7c337c1167adb15135af
2020-04-08 08:32:34 -05:00
Sean Bright b92bd5783b Revert "res_config_odbc: Preserve empty strings returned by the database"
This reverts commit a3a2fbaec6.

Reason for revert: There is a lot of code that relies on the broken
behavior that this fixes.

Change-Id: I410c395a0168acbdaf89e616e3cb5e1312d190cb
2020-04-08 08:32:27 -05:00
traud 55dacdce56 test_stasis: Avoid always true warning with clang.
ASTERISK-28808

Change-Id: I5e76831373532d7b8065d024e66cd1fb75dedd80
2020-04-07 18:59:56 -05:00
Jaco Kroon 42989a285b main/backtrace: binutils-2.34 fix.
My tester missed this one previously, have confirmed a positive build
this time round.

Change-Id: Id06853375954a200f03f9a1b9c97fe0b10d31fbf
2020-04-06 10:58:11 -05:00
Joshua C. Colp 69805a772e res_pjsip: Don't set endpoint to unavailable in all cases.
When an AOR is modified endpoints are updated that reference
the AOR so they can start receiving updates and reflect the
correct state. If this is the case then we shouldn't change
the endpoint to be offline if it does not reference the AOR
but instead only when the endpoint is completely updated for
all its AORs.

ASTERISK-28056
patches:
  pjsip_options-aor.diff submitted by jhord (license 6978)

Change-Id: I3ee00023be2393113cd4e056599f23f3499ef164
2020-04-06 09:15:51 -05:00
traud b338da8a19 test_utils: Avoid incorrect error message on load.
In case of no OpenSSL headers, the module was built but did not load.

ASTERISK-28789

Change-Id: Ie007e84296bcf2bd4237f19d68ba5f932b84cd02
2020-03-31 12:32:15 -05:00
traud 151a27fa81 func_aes: Avoid incorrect error message on load.
In case of no OpenSSL headers, the module func_aes was built but did not load.

ASTERISK-28788

Change-Id: I0b99b8468cbeb3b0eab23069cbd64062ef885ffc
2020-03-31 12:08:04 -05:00
sungtae kim 59e193b295 dial.c: Removed dial string 80 character limitation
The dial application had 80 characters of destination length
limitation. But this limitation causes unexpected dial string
cut if the dial string is long.

Removed unnecessary limited buffer to support longer dial
destination.

ASTERISK-27946

Change-Id: I72c8f0319a4b47e8180817a66a7e9bde063cb330
2020-03-31 12:07:00 -05:00
Torrey Searle ad7be12f0d res_pjsip_session: implement processing of Content-Disposition
RFC5621 requires any content type with a Content-Disposition
with handling=required to be rejected with a 415 response

ASTERISK-28782 #close

Change-Id: Iad969df75936730254b95c1a8bc3b48497070bb4
2020-03-31 11:06:03 -05:00
Jaco Kroon 5ddac396f0 acl: implement a centralized ACL output mechanism for HAs and ACLs.
named_acl.c (which is really a named_ha) now uses ast_ha_output.

I've also updated main/manager.c to output the actual ACL on "manager
show user <username>" if one is set.  If this works then we can add
similar to other modules as required.

Change-Id: I0ec9876a90dddd379c80ec078d48e3ee6991eb0f
2020-03-31 10:45:04 -05:00
Joshua C. Colp 305227dd38 chan_sip: Send 403 when ACL fails.
Change-Id: I0910c79196f2b7c7e5ad6f1db95e83800ac737a2
2020-03-26 10:52:22 -03:00
Kevin Harwell e96e5cc3d4 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:49 -05:00
Jaco Kroon 6b2aea9ce2 netsock2: compile fixes.
This fixes ast_addressfamily_to_sockaddrsize to reference the
provided argument, and ast_sockaddr_from_sockaddr to not use the name of
a structure as argument.

Change-Id: Ibf5db469c47c3b4214edf8456326086174e8edd7
2020-03-26 07:39:06 -05:00
Jaco Kroon 96efd52460 dahdiras: Only set plugin dahdi.so to pppd if we're running as root.
Users of this should set plugin dahdi.so in their options file.

ASTERISK-16676

Change-Id: I6d01ad0a10e9fea477876d0941c3f38aac357e91
2020-03-25 17:23:54 -05:00
Jaco Kroon 9065d95254 dundi: fix NULL dereference.
If a negative (error) return is received from dundi_lookup_internal,
this is not handled correctly when assigning the result to the buffer.
As such, use a signed integer in the assignment and do a proper
comparison.

ASTERISK-21205

Change-Id: I5214ebb6491e2bd14f90c7d3ce229da86888f739
2020-03-25 17:21:36 -05:00
Sungtae Kim 0daf62f501 res_pjsip_session: Fixed wrong session termination
When the Asterisk receives 200 OK with invalid SDP,
the Asterisk/PJPROJECT terminating the session.
But if the channel was in the Bridge, Asterisk tries send
the Re-Invite before terminating the session.
And when the Asterisk sending the Re-Invite, it doesn't check
the SDP is NULL or not. This crashes the Asterisk.

Fixed it to close the session correctly if the UAS sends the
200 OK with wrong SDP.

ASTERISK-28743

Change-Id: Ifa864e0e125b1a7ed2f3abd4164187e1dddc56da
2020-03-25 07:30:31 -05:00
Jaco Kroon 18b058d65b build: enable building with uClibc
This patch has been included in Gentoo distribution for at least since
asterisk 1.8, but there are references in the logs going back as far as
1.0.0 - not sure if this is still required in any way, it does apply,
and it doesn't (as far as we can determine) cause build failures.

Change-Id: I46d8845e30200205e80580680bf060aa3012ba54
2020-03-25 07:09:39 -05:00
Jaco Kroon 5d5f05ab61 build: search from newest to oldest for gmime.
We (Gentoo distribution) reckon that in the case of multiple versions of
gmime installed we should prefer the newest one.

Change-Id: Idf7be613230232eb1d573d93c4a5a8297f4ecd2d
2020-03-20 10:27:22 -05:00
Michael Neuhauser 0bd1420064 chan_psip, res_pjsip_sdp_rtp: ignore rtptimeout if direct-media is active
Do not hang up a PJSIP channel on RTP timeout if that channel is in
a direct-media bridge. Also reset the time of the last received RTP packet when
direct-media ends (wait full rtp_timeout period before checking first time after
audio came back to Asterisk).

ASTERISK-28774
Reported-by: Michael Neuhauser

Change-Id: I8b62012be7685849e8fb2b1c5dd39d35313ca2d1
2020-03-20 10:17:00 -05:00
Jaco Kroon f4a8c71dc2 res_rtp_asterisk: implement ACL mechanism for ICE and STUN addresses.
A pure blacklist is not good enough, we need a whitelist mechanism as
well, and the simplest way to do that is to re-use existing ACL
infrastructure.

This makes it simpler to blacklist say an entire block (/24) except a
smaller block (eg, a /29 or even a /32).  Normally you'd need to
recursively split the block, so if you want to blacklist a /24 except
for a /29 you'd end up with a blacklit for a /25, /26, /27 and /28.  I
feel that having an ACL instead of a blacklist only is clearer.

Change-Id: Id57a8df51fcfd3bd85ea67c489c85c6c3ecd7b30
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2020-03-20 08:40:09 -05:00
Jaco Kroon 345e072a6d Update main/backtrace.c to deal with changes in binutils 2.34.
binutils 2.34 merged this commit:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;\
	h=fd3619828e94a24a92cddec42cbc0ab33352eeb4

Which effectively does things like:

-#define bfd_section_size(bfd, ptr) ((ptr)->size)
-#define bfd_get_section_size(ptr) ((ptr)->size)

+#define bfd_section_size(sec) ((sec)->size)

So in order to remain backwards compatible we need to detect this API
change, and adjust accordingly.  The simplest is to notice that the
bfd_get_section_size and bfd_get_section_vma MACROs are no longer
defined, and define then onto the new API.  The alternative is to litter
the code with a number of #ifdef #else #endif splatters right through
the code.

Change-Id: I3efe0f8e8f3e338d16fcbc2b26a505367b6e172f
2020-03-17 09:13:53 -05:00
Sean Bright 8b7071994e func_odbc.conf.sample: Clarify sample documentation
ASTERISK-20325 #close

Change-Id: I06cb9b467b0fd06c8af2a5aee049f872c09cc4b6
2020-03-17 08:18:51 -05:00
Sean Bright 3e4e016a6c chan_vpb: Fix 'catching polymorphic type ... by value' error
Fixes the following compile error:

    chan_vpb.cc:2688:26: error: catching polymorphic type
        ‘class std::exception’ by value

Change-Id: Ic87bc357d72427d77626735c83200fd278a7a649
2020-03-13 14:44:30 -04:00
Joshua C. Colp 6636fff2cf audiohook: Don't allow audiohooks to attach to hung up channels.
Given a scenario where MixMonitor was initiated over AMI it
was possible for the channel and MixMonitor thread to remain
alive past hang up of the channel. This scenario required
the AMI initiated MixMonitor to retrieve the channel, a
hangup to occur on the channel in another thread, and then
for MixMonitor to actually start. If this occurred the
MixMonitor thread would remain alive indefinitely and
the channel reference would remain.

This change ensures that audiohooks are never able to
be attached to channels that have been hung up. An
additional fix has also been done in app_mixmonitor to
properly release the channel reference if this occurs.

ASTERISK-28780

Change-Id: I8044c06daa06f0f16607788c596f55623be26f58
2020-03-13 09:56:11 -05:00
George Joseph 4990a6e2fb 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-13 08:37:30 -05:00
Torrey Searle 85786d75c7 res_rtp_asterisk: Send correct sender SSRC when p2p bridge in use
bridge_p2p_rtp_write will forward rtp to the bridged rtp instance
without modifying the ssrc.  However, it is not updating the SSRC
in the bridged rtp.  Thus, when SSRC packets are generated, they
have the correct SSRC for the sender.

ASTERISK-28773 #close

Change-Id: I39f923bde28ebb4f0fddc926b92494aed294a478
2020-03-12 10:32:02 -05:00
Joshua C. Colp 793f312199 res_rtp_asterisk: Fix unused warning for "ice".
Change-Id: I31e022f722509214cd600c428939c91ace0c59fd
2020-03-11 11:55:06 -03:00
George Joseph 348819093d Merge "res_pjsip_sdp_rtp: Don't wait for ICE if not negotiated" into 13 2020-03-10 13:36:26 -05:00
George Joseph 6dc064b84f Merge "chan_pjsip: Check audio frame when remote SSRC changes." into 13 2020-03-10 11:58:56 -05:00
George Joseph 8f33d14d00 Merge "enum.c: Make ast_get_txt() actually do something." into 13 2020-03-09 10:04:08 -05:00
George Joseph 8943624bf7 Merge "enum.c: Add support for regular expression flag in NAPTR record" into 13 2020-03-09 10:02:06 -05:00
Joshua Colp d6248d5f5c Merge "res_rtp_asterisk: Add 'rtp show settings' cli command" into 13 2020-03-09 08:56:57 -05:00
Paulo Vicentini f0b6d24704 chan_pjsip: Check audio frame when remote SSRC changes.
If the SSRC of a received RTP packet differed from the previous SSRC
an SSRC change control frame would be queued ahead of the media
frame. In the case of audio this would result in the format of the
audio frame not being checked, and if it differed or was not allowed
then it could cause the call to drop due to failure to set up a
translation path.

The chan_pjsip module will now no longer assume the first frame
will be the audio frame and instead goes through the complete list
to find it.

ASTERISK-28759

Change-Id: I6d854cc523f343e299a615636fc65bdbd5f809ec
2020-03-09 04:09:30 -05:00
Sean Bright 58b8c24c40 enum.c: Add support for regular expression flag in NAPTR record
A regular expression in a NAPTR response record can have a trailing
'i' flag to indicate that the expression should be evaluated in a
case-insensitive way. We were not checking for that flag which caused
the record parsing to fail on otherwise valid input.

Although this change will initially go into Asterisk 13, 16, and 17,
it is my intention to replace the majority of this code in 16 and up -
including this fix - by changing enum.c to consume the new DNS API
which duplicates most of this logic already. Asterisk 13 doesn't have
the DNS API, so this fix will be as good as it gets.

ASTERISK-26711 #close
Reported by: Vitold

Change-Id: I33943a5b3e7539c6dca3a5079982ee15a08186f0
2020-03-06 15:59:37 -05:00
Jared Smith 74718010d0 indications.conf.sample: Add indication tones for Indonesia
These tones come from http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf

ASTERISK-23407

Change-Id: I48e2285f1e5bb29b3335f762006f66c423d0fcb8
2020-03-06 08:41:29 -06:00
Rodrigo Ramírez Norambuena b999447494 res_rtp_asterisk: Add 'rtp show settings' cli command
This change introduce a CLI command for the RTP to display the general
configuration.

In the first step add the follow fields of the configurations:
  - rtpstart
  - rtpend
  - dtmftimeout
  - rtpchecksum
  - strictrtp
  - learning_min_sequential
  - icesupport

Change-Id: Ibe5450898e2c3e1ed68c10993aa1ac6bf09b821f
2020-03-05 14:16:38 -06:00
Asterisk Development Team 077cc24d66 Update CHANGES and UPGRADE.txt for 13.32.0 2020-03-05 12:20:48 -05:00
Torrey Searle 04f2fad021 res_pjsip_sdp_rtp: Don't wait for ICE if not negotiated
If ICE support is enabled but not negotiated, the rtp->ice structure is
not being destroyed. This leads to Asterisk waiting for ICE to complete
instead of immediately starting the DTLS handshake, resulting in the
call leg having no RTP.

ASTERISK-28769 #close

Change-Id: I17c137546dc9ecfb9583c24dcf4c2ced8bbd7a27
2020-03-05 10:27:23 -06:00
Sean Bright 0ee0134cc9 enum.c: Make ast_get_txt() actually do something.
The ast_get_txt() API function (and by extension, the TXTCIDNAME
dialplan function) were broken in
65b8381550 such that we would never
actually make a DNS TXT query as described.

This patch restores the documented behavior.

ASTERISK-19460 #close
Reported by: George Joseph

Change-Id: I1b19aea711488cb1ecd63843cddce05010e39376
2020-03-04 18:00:34 -05:00
lvl 4b242d4280 res_pjsip_refer: ensure refer progress is still sent after Proceeding()
ASTERISK-28766 #close

Change-Id: I5ce2210062f9325db762edbf6e46075079bb2cd1
2020-03-04 13:04:02 -06:00
Joshua Colp 30f718a598 Merge "check_expr2: fix cross-compile/hardening issues" into 13 2020-03-04 06:27:20 -06:00
Joshua Colp 994853658b Merge "message & stasis/messaging: make text message variables work in ARI" into 13 2020-03-04 06:09:41 -06:00
Sebastian Kemper d6b5a18111 check_expr2: fix cross-compile/hardening issues
When building check_expr2 with ASLR PIE hardening enabled the linker
fails. This is resolved by adding the regular compiler flags when
building the object files from ast_expr2f.c and ast_expr2.c.

Note: The STANDALONE define is removed because it is already defined in
_ASTCFLAGS. YY_NO_INPUT is defined so that the compile survives
'--enable-dev-mode'.

Also, a Makefile variable "CROSS_COMPILING" is added so that the
build system doesn't try to run check_expr2 when cross-compiling,
because that will fail the build as will.

ASTERISK-28685 #close

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
Change-Id: If435b7db9f9ad8266245bda51c81c220f9658915
2020-03-03 08:17:41 -06:00
Kevin Harwell c5ababbd2b Merge "res/res_pjsip_sdp_rtp: Fix MOH transitions" into 13 2020-03-02 14:16:52 -06:00
Kevin Harwell 0fb06121cb message & stasis/messaging: make text message variables work in ARI
When a text message was received any associated variable was not written to
the ARI TextMessageReceived event. This occurred because Asterisk only wrote
out "send" variables. However, even those "send" variables would fail ARI
validation due to a TextMessageVariable formatting bug.

Since it seems the TextMessageReceived event has never been able to include
actual variables it was decided to remove the TextMessageVariable object type
from ARI, and simply return a JSON object of key/value pairs for variables.
This aligns more with how the ARI sendMessage handles variables, and other
places in ARI.

That being the case, and since this is technically an API breaking change (no
one should really be affected since things never really worked) the ARI version
was updated to reflect that.

ASTERISK-28755 #close

Change-Id: Ia6051c01a53b30cf7edef84c27df4ed4479b8b6f
2020-03-02 12:11:59 -06:00
Kevin Harwell 5685254418 Merge "addons/res_config_mysql: silense warnings about printf format errors." into 13 2020-02-27 14:44:14 -06:00
Kevin Harwell d49adf8033 Merge "app_queue: Refactor odd placement of if's around say_position" into 13 2020-02-27 14:41:54 -06:00
Torrey Searle ed670ca0c6 res/res_pjsip_sdp_rtp: Fix MOH transitions
Update the state of remote_hold immediately on receipt of remote
SDP so that the information is available when building the SDP
answer

ASTERISK-28754 #close

Change-Id: I7026032a807e9c95081cb8f060400b05deb4836f
2020-02-27 14:20:37 -06:00
Kevin Harwell 6af57d5750 Merge "say: Remove unused "plural" option from main/say" into 13 2020-02-27 13:42:39 -06:00
Kevin Harwell 2241f828ca Merge "format_cap: make function parameters 'const'" into 13 2020-02-27 13:15:51 -06:00
Kevin Harwell ff87627140 Merge "pjsip: Update ACLs on named ACL changes." into 13 2020-02-27 12:52:45 -06:00
Walter Doekes c3e9d37ce7 say: Remove unused "plural" option from main/say
There are exceptions for plural objects, but they are detected using the
supplied NUMBER, not using an extra option.

Change-Id: I95d1d1b2796b1aba92048a2dbae8a3856ed8a113
2020-02-25 17:09:55 +01:00
Walter Doekes 6995b0a8fa app_queue: Refactor odd placement of if's around say_position
Change-Id: Icba97905e331812f129e5966e91a59b104c7a748
2020-02-25 17:05:28 +01:00
Kevin Harwell d13cd25d4c format_cap: make function parameters 'const'
There were a couple places where the format cap function parameter was not
'const' when it should have been. This patch makes them 'const'.

Change-Id: Ife753fb16a962d842a6b44f45363a61a66bfdb2e
2020-02-24 13:37:21 -06:00
Jaco Kroon 2ff7057287 addons/res_config_mysql: silense warnings about printf format errors.
Warnings without this:

res_config_mysql.c: In function 'update2_mysql':
res_config_mysql.c:741:15: warning: format '%llu' expects argument of type
    'long long unsigned int', but argument 6 has type 'my_ulonglong'
    {aka 'long unsigned int'} [-Wformat=]
ast_debug(1, "MySQL RealTime: Updated %llu rows on table: %s\n",
    numrows, tablename);

(reformatted for readability within line-wrap)

Change-Id: I2af4d419a37c1a7eeee750cf9ae4a9a2b3a37fd3
2020-02-24 08:21:30 -06:00
George Joseph f2fa99f124 Merge "tcptls.c: Log more informative OpenSSL errors" into 13 2020-02-21 09:01:00 -06:00
George Joseph 8fb06b30b2 Merge "ast_tls_cert: Allow private key size to be set on command line" into 13 2020-02-20 10:51:29 -06:00
George Joseph 2df95ab6d6 Merge "app_mixmonitor: Set MIXMONITOR_FILENAME to correct value when wav49 is used" into 13 2020-02-20 09:24:53 -06:00
George Joseph 66f2c78513 Merge "RTP/ICE: Send on first valid pair." into 13 2020-02-20 09:23:07 -06:00
Sean Bright cbbf192f0a tcptls.c: Log more informative OpenSSL errors
Dump OpenSSL's error stack to the error log when things fail.

ASTERISK-28750 #close
Reported by: Martin Zeh

Change-Id: Ib63cd0df20275586e68ac4c2ddad222ed7bd9c0a
2020-02-19 14:20:18 -05:00
Sean Bright 66388abbb1 ast_tls_cert: Allow private key size to be set on command line
The default size in release branches will be 1024 but we'll use 2048 in master.

ASTERISK~28750

Change-Id: I435cea18bdd58824ed2b55259575c7ec7133842a
2020-02-19 09:38:31 -05:00
George Joseph 31dea3d7d9 Merge "res_pjsip_sdp_rtp: implement hold state handling on moh_passthrough" into 13 2020-02-18 10:07:54 -06:00
Ben Ford f928600a98 RTP/ICE: Send on first valid pair.
When handling ICE negotiations, it's possible that there can be a delay
between STUN binding requests which in turn will cause a delay in ICE
completion, preventing media from flowing. It should be possible to send
media when there is at least one valid pair, preventing this scenario
from occurring.

A change was added to PJPROJECT that adds an optional callback
(on_valid_pair) that will be called when the first valid pair is found
during ICE negotiation. Asterisk uses this to start the DTLS handshake,
allowing media to flow. It will only be called once, either on the first
valid pair, or when ICE negotiation is complete.

ASTERISK-28716

Change-Id: Ia7b68c34f06d2a1d91c5ed51627b66fd0363d867
2020-02-18 09:53:46 -06:00
Joshua C. Colp a60071610c pjsip: Update ACLs on named ACL changes.
This change extends the Sorcery API to allow a wizard to be
told to explicitly reload objects or a specific object type
even if the wizard believes that nothing has changed.

This has been leveraged by res_pjsip and res_pjsip_acl to
reload endpoints and PJSIP ACLs when a named ACL changes.

ASTERISK-28697

Change-Id: Ib8fee9bd9dd490db635132c479127a4114c1ca0b
2020-02-18 13:24:32 +00:00
Sean Bright 0246bca581 app_mixmonitor: Set MIXMONITOR_FILENAME to correct value when wav49 is used
When opening a file for writing, Asterisk silently converts filenames
ending with 'wav49' to 'WAV.' We aren't taking that in to account when
setting the MIXMONITOR_FILENAME variable in MixMonitor.

* If the user wants to write to a wav49 file, make sure that it is
  reflected properly in MIXMONITOR_FILENAME.

* Add a note to the documentation describing this behavior.

* Add a note in main/file.c indicating that app_mixmonitor needs to be
  changed if the logic in build_filename was changed.

ASTERISK-24798 #close
Reported by: xrobau

Change-Id: I384691ce624eb55c80a125b9ca206d2d691c574c
2020-02-17 11:56:45 -05:00
Torrey Searle 21ed671893 res_pjsip_sdp_rtp: implement hold state handling on moh_passthrough
When moh_passthrough is used, asterisk is only generating invites
of type sendonly and sendrecv instead of taking fully into account
the on hold state of the local and remote parties

ASTERISK-28738 #close

Change-Id: Iaaad9fbc033cb14803d433b8a4071bc337047761
2020-02-17 08:35:26 +01:00
Joshua Colp 10632beb50 Merge "res_musiconhold: Avoid spurious warning when 'format' is the empty string" into 13 2020-02-13 19:00:55 -06:00
George Joseph 796680cc57 Merge "doc: Fix CHANGES entries to have .txt suffix and update READMEs" into 13 2020-02-13 08:30:13 -06:00
Sean Bright 7687d1bda5 res_musiconhold: Avoid spurious warning when 'format' is the empty string
The change to res_config_odbc that allowed empty strings to be
returned to realtime consumers¹ causes a warning to be emitted when
loading MoH classes. So we need to treat an empty 'format' as if it
was not specified to avoid the warning.

ASTERISK-28735 #close
Reported by: Ross Beer

[1] https://gerrit.asterisk.org/c/asterisk/+/13722

Change-Id: I9a271d721e1a0973e80ebe7d75b46a0d8fa0e5a5
2020-02-11 08:51:10 -05:00
Sean Bright ea1f318534 func_odbc: Prevent snprintf() truncation warning
For reasons that are not clear to me - this only appears for me when
_not_ building in dev-mode.

Change-Id: Ib45c54daaea8e0d571cb470cab1daaae2edba968
2020-02-10 16:40:16 -05:00
George Joseph 74d0244dc3 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
(cherry picked from commit 7416703f04)
2020-02-07 14:08:09 -06:00
Joshua Colp 40ef98e959 Merge "pjproject_bundled: Allow brackets in via parameters" into 13 2020-02-07 07:05:04 -06:00
Joshua Colp c95192e7ac Merge "chan_sip: Return 503 if we're out of RTP ports" into 13 2020-02-06 07:16:30 -06:00
Joshua Colp 4f93e1427d Merge "install_prereq: Install aptitude non-interactively" into 13 2020-02-06 07:14:32 -06:00
Sean Bright d5fa23e72a pjproject_bundled: Allow brackets in via parameters
ASTERISK-26955 #close
Reported by: Peter Sokolov

Change-Id: Ib2803640905a77b65d0cee2d0ed2c7b310d470ac
2020-02-06 06:35:03 -06:00
Friendly Automation bf1d5faea4 Merge "chan_sip: Clarify in sample docs how directmediapermit/-acl should be used" into 13 2020-02-05 10:27:23 -06:00
Friendly Automation 169922e5ee Merge "res_config_odbc: Preserve empty strings returned by the database" into 13 2020-02-05 09:40:35 -06:00
Sylvain Afchain 9419295aee install_prereq: Install aptitude non-interactively
Currently aptitude is installed using interactive mode. This patch
changes this to use the non-interactive mode as it can block
automatic dependencies installation, ex: CI, Docker build.

ASTERISK-28726 #close

Change-Id: I271ee00d230513a6f044810351a32d83b2181133
(cherry picked from commit 0c02d0a450)
2020-02-05 14:19:59 +01:00
Walter Doekes 44e1c7d93f chan_sip: Return 503 if we're out of RTP ports
If you're for some reason out of RTP ports, chan_sip would previously
responde to an INVITE with a 403, which will fail the call.

Now, it returns a 503, allowing the device/proxy to retry the call on a
different machine.

ASTERISK-28718

Change-Id: I968dcf6c1e30ecddcce397dcda36db727c83ca90
2020-02-05 06:32:48 -06:00
Walter Doekes cea6cad343 chan_sip: Clarify in sample docs how directmediapermit/-acl should be used
It said "restrict [...] which peers should be able to pass [audio]
to each other".

However, these settings are not global (for which you would expect
signaling IPs to be checked). These settings are available per peer
only, and the IPs being checked, are the RTP IPs.

Change-Id: I2a6c6cd7c2f5f30d1df4844e3e0308a077021660
2020-02-05 06:26:57 -06:00
Joshua Colp 08ba741a8e Merge "res_pjsip_messaging: Allow Content-Type to be overridden" into 13 2020-02-03 06:11:23 -06:00
George Joseph a02f14ab9f Merge "res_stasis: trigger cleanup after update" into 13 2020-01-30 10:19:26 -06:00
George Joseph 104e72e588 Merge "stasis/app: don't lock an app before a call to send" into 13 2020-01-30 09:25:00 -06:00
George Joseph 8855b1b63c Merge "res_pjsip_pubsub: Increment persistence data ref when recreating." into 13 2020-01-30 09:22:04 -06:00
Sean Bright a3a2fbaec6 res_config_odbc: Preserve empty strings returned by the database
When res_config_odbc (and perhaps other realtime backends) reads a SQL
NULL from the database, it coalesces the value to the empty string
which prevents it from being returned to the realtime core.

However, if it instead reads the empty string from the database, it
needs a way to encode that fact without having the value omitted
entirely. It does this by changing the value to a string with a single
space. The realtime code in main/config.c recognizes this special case
and _turns the string back into the empty string_ before passing it to
realtime API consumers.

For all of this to work, we need to ensure that we actually pass the
single-space-string back to the realtime core, which is currently
failing because we are trimming the value before checking its
content. So instead we now special case the single-space-string case
so that empty values are returned properly.

ASTERISK-28719 #close
Reported by: EDV O-TON

Change-Id: I673ed8c31ad037aa224e80c78c7a1dc4e4a4e3de
2020-01-29 10:14:12 -05:00
Friendly Automation 95c0072a5b Merge "res_pjsip_messaging: Ensure MESSAGE_SEND_STATUS is set properly" into 13 2020-01-28 10:19:10 -06:00
Joshua C. Colp e14fd3b22a 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
2020-01-28 09:24:24 -06:00
Sean Bright dafdcc623c res_pjsip_messaging: Allow Content-Type to be overridden
ASTERISK-26082 #close
Reported by: Alex

Change-Id: I6549e90932016349bc72b0f053432dc25286f4fb
2020-01-28 09:16:17 -05:00
Friendly Automation 67ed0db0da Merge "chan_sip: Always process updated SDP on media source change" into 13 2020-01-27 18:21:41 -06:00
Kevin Harwell 78d9bc8ef6 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
2020-01-27 12:11:12 -06:00
Kevin Harwell 1051227dd9 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
2020-01-27 11:59:02 -06:00
Sean Bright d99580ae69 res_pjsip_messaging: Ensure MESSAGE_SEND_STATUS is set properly
We need to wait for the message sending callback to finish to know if
we succeeded or failed.

ASTERISK-25421 #close
Reported by:  Dmitriy Serov

Change-Id: I22b954398821d2caf4c6fe58f0607c8cfa378059
2020-01-27 12:07:25 -05:00
Friendly Automation 017a33c649 Merge "chan_pjsip: Ignore RTP that we haven't negotiated" into 13 2020-01-24 10:02:23 -06:00
Asterisk Development Team fe72f4e216 Update CHANGES and UPGRADE.txt for 13.31.0 2020-01-23 11:06:54 -05:00
Friendly Automation b0b229f63c Merge "http: Add ability to disable /httpstatus URI" into 13 2020-01-23 08:43:26 -06:00
George Joseph 4eb2ad5e17 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 11:56:38 -07:00
Sean Bright b6ebdabd9c 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 11:10:08 -05:00
Friendly Automation 9d6c4f437d Merge "func_odbc.conf.sample: Add example lookup" into 13 2020-01-22 08:37:49 -06:00
Friendly Automation 0d9173974e Merge "res_statsd: Document that res_statsd does nothing on its own" into 13 2020-01-22 08:27:49 -06:00
Joshua Colp 63a629c360 Merge "chan_dahdi: Change 999999 to INT_MAX to better reflect "no timeout"" into 13 2020-01-22 07:46:16 -06:00
Joshua Colp eb78eec8ed Merge "translate.c: Fix silk 24kHz truncation in 'core show translation'" into 13 2020-01-22 07:45:59 -06:00
Friendly Automation f5128d610d Merge "chan_sip.c: Stop handling continuation lines after reading headers" into 13 2020-01-21 08:20:21 -06:00
Sean Bright ca7309fd29 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:57:58 -06:00
Sean Bright 14de6b9ba7 func_odbc.conf.sample: Add example lookup
Change-Id: Ia05aab1f579597963d2ea23920d2210cfcb97c84
2020-01-20 16:26:14 -05:00
Sean Bright 9382718f50 res_statsd: Document that res_statsd does nothing on its own
ASTERISK-24484 #close
Reported by: Dan Jenkins

Change-Id: I05f298904511d6739aefb1486b6fcbee27efa9ec
2020-01-20 12:59:06 -05:00
Friendly Automation 537645d28c Merge "queue_log: Add alembic script for generate db table for queue_log" into 13 2020-01-20 11:23:49 -06:00
Joshua Colp 073d67ece0 Merge "app_voicemail, say: Fix various leading whitespace problems" into 13 2020-01-20 09:32:18 -06:00
Rodrigo Ramírez Norambuena 5c5bf49cb1 queue_log: Add alembic script for generate db table for queue_log
Change-Id: I35b928a6251f9da9a1742b2cd14c63a00c3d0f0c
2020-01-20 09:16:23 -06:00
Friendly Automation 46dc85f207 Merge "app_voicemail: Prevent crash when saving message with realtime voicemail" into 13 2020-01-20 09:10:58 -06:00
Joshua Colp 84670cd9aa Merge "pbx.c: Include filesystem cache in free memory calculation" into 13 2020-01-20 07:09:53 -06:00
Andrew Siplas 419fd1da11 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-18 16:54:01 -05:00
Friendly Automation 0f89e6e4c0 Merge "res_realtime: Fix 'realtime update2' argument handling" into 13 2020-01-17 08:33:23 -06:00
Joshua Colp 5e30a3e7ee Merge "app_voicemail: Set globals to default values when voicemail.conf missing" into 13 2020-01-17 08:32:07 -06:00
Sean Bright bfc93cc954 chan_pjsip: Ignore RTP that we haven't negotiated
If chan_pjsip receives an RTP packet whose payload differs from the
channel's native format, and asymmetric_rtp_codec is disabled (the
default), Asterisk will switch the channel's native format to match
that of the incoming packet without regard to the negotiated payloads.

We now keep track of the formats that have been negotiated and check
before switching payloads which results in these packets being dropped
instead of causing the session to terminate.

ASTERISK-28139 #close
Reported by: Paul Brooks

Change-Id: Icc3b85cee1772026cee5dc1b68459bf9431c14a3
2020-01-17 08:59:22 -05:00
Sean Bright ee05a43951 app_voicemail, say: Fix various leading whitespace problems
In af90afd90c, Japanese language support
was added to app_voicemail and main/say.c, but the leading whitespace
is not consistent with Asterisk coding guidelines. This patch fixes
that.

Whitespace only, no functional change.

ASTERISK~23324
Reported by: Kevin McCoy

Change-Id: I72c725f5930084673749bd7c9cc426a987f08e87
2020-01-16 14:55:18 -05:00
Sean Bright 884b86e7c0 pbx.c: Include filesystem cache in free memory calculation
ASTERISK-28695 #close
Reported by: Kevin Flyn

Change-Id: Ief098bb6eb77378daeace8f97ba30701c8de55b8
2020-01-16 13:37:44 -05:00
Sean Bright d514fa3300 chan_sip.c: Stop handling continuation lines after reading headers
lws2sws() does not stop trying to handle header continuation lines
even after all headers have been found. This is problematic if the
first character of a SIP message body is a space or tab character, so
we update to recognize the end of the message header.

ASTERISK-28693 #close
Reported by: Frank Matano

Change-Id: Idec8fa58545cd3fd898cbe0075d76c223f8d33df
2020-01-16 10:16:23 -05:00
Sean Bright 6906e0aa3c app_voicemail: Prevent crash when saving message with realtime voicemail
ast_store_realtime() is not NULL tolerant, so we need to initialize
the field values we pass to it to the empty string to avoid a crash.

ASTERISK-23739 #close
Reported by: Stas Kobzar

Change-Id: I756c5dd0299c77f4274368f7c99eb0464367466c
2020-01-15 16:52:00 -05:00
Joshua Colp 9ba3bddd37 Merge "res_pjsip_notify: Only allow a single Event header to be added to a NOTIFY" into 13 2020-01-15 06:44:23 -06:00
Joshua Colp 3a135e5827 Merge "app_queue: Deprecate the QueueMemberPause.Reason field" into 13 2020-01-15 06:43:56 -06:00
Sean Bright d0a412fced app_voicemail: Set globals to default values when voicemail.conf missing
If voicemail.conf exists but is empty, the config parsing process will
default a number of global variables to non-zero values. On the other
hand, if voicemail.conf is missing (arguably semantically equivalent
to an empty file), this process is skipped and the globals are
defaulted to 0.

Set the globals to the same values they would be set to if a
configuration were present. This allows voicemail configuration to be
done completely by Realtime without the need to create an empty
voicemail.conf file.

ASTERISK-27622 #close
Reported by: Jim Van Meggelen

Change-Id: Id907d280f310f12e542ca527e6a025432b9fb409
2020-01-14 17:30:34 -05:00
Sean Bright 1a4fcaadb2 app_queue: Deprecate the QueueMemberPause.Reason field
The QueueMemberPause AMI event includes two fields that return the
reason a member was paused.

* In release branches, deprecate Reason in favor of PausedReason.
* In master, remove the Reason field entirely.

ASTERISK-28349 #close
Reported by: Niksa Baldun

Change-Id: I01da58f2b0ab927baeee754870f62b51b7b3d296
2020-01-14 13:51:18 -06:00
Joshua Colp 9b22061e2c Merge "res_pjsip_endpoint_identifier_ip: Document support for hostnames" into 13 2020-01-14 12:44:30 -06:00
Joshua Colp a902641833 Merge "func_curl: Add 'followlocation' option to CURLOPT()" into 13 2020-01-14 12:29:48 -06:00
Sean Bright 5e868fc11f res_realtime: Fix 'realtime update2' argument handling
The change in 9b99ef50b5 updated the
syntax of the 'realtime update2' CLI command but did not correctly
update the calls to ast_update2_realtime().

The issue this addresses was originally opened because we aren't
allowing a SQL NULL to be set as part of the update, but this is a
limitation of the Realtime API and is not a bug.

Additionally, this patch:

* Corrects the example in the command documentation to reflect
  'update2' instead of 'update.'

* Fixes the leading spacing of the command documentation.

* Checks that the required 'NULL' literal argument is present where we
  expect it to be.

ASTERISK-21794 #close
Reported by: Cédric Bassaget

Change-Id: Idda63a5dc50d5f9bcb34c27ea3238d90f733b2cd
2020-01-14 11:05:29 -05:00
Joshua Colp 8bf22b8abb Merge "app_record: Do not hang up if beep audio is missing" into 13 2020-01-14 09:10:16 -06:00
Joshua Colp 0d1fcf0626 Merge "netsock2: ast_addressfamily_to_sockaddrsize and ast_sockaddr_from_sockaddr." into 13 2020-01-14 09:08:13 -06:00
Sean Bright 53967ebd0f func_curl: Add 'followlocation' option to CURLOPT()
We allow for 'maxredirs' to be set, but this value is ignored when
followlocation is not enabled which, by default, it is not.

ASTERISK-17491 #close
Reported by: candrews

Change-Id: I96a4ab0142f2fb7d2e96ff976f6cf7b2982c761a
2020-01-13 08:25:03 -06:00
Walter Doekes e99f70f112 chan_sip: Always process updated SDP on media source change
Fixes no-audio issues when the media source is changed and
strictrtp is enabled (default).

If the peer media source changes, the SDP session version also changes.
If it is lower than the one we had stored, chan_sip would ignore it.

This changeset keeps track of the remote media origin identifier,
comparing that as well. If it changes, the session version needn't be
higher for us to accept the SDP.

Common scenario where this would've caused problems: a separate media
gateway that informs the caller about premium rates before handing off
the call to the final destination.

(An alternative fix would be to set ignoresdpversion=yes on the peer.)

ASTERISK-28686

Change-Id: I88fdbc5aeb777b583e7738c084254c482a7776ee
2020-01-13 11:13:56 +01:00
Sean Bright b8963987a6 res_pjsip_endpoint_identifier_ip: Document support for hostnames
ASTERISK-25429 #close
Reported by: Joshua C. Colp

Change-Id: I7cdfc6026821636acc2465094b7fcde8471a3824
2020-01-10 16:13:49 -05:00
Sean Bright 6648472a28 res_pjsip_notify: Only allow a single Event header to be added to a NOTIFY
ASTERISK-27775 #close
Reported by: AvayaXAsterisk

Change-Id: Iad158e908e34675ad98f74d09c5e73024e50c257
2020-01-10 15:49:44 -05:00
Friendly Automation 3e446508b4 Merge "netsock2: backport ast_sockaddr_copy_sockaddr to asterisk 13." into 13 2020-01-10 08:45:48 -06:00
Jaco Kroon e7d2ab666b netsock2: ast_addressfamily_to_sockaddrsize and ast_sockaddr_from_sockaddr.
ast_addressfamily_to_sockaddrize will determine the size that's
required, and ast_sockaddr_from_sockaddr then wraps this new function
and ast_sockaddr_copy_sockaddr to copy arbitrary sockaddr's (without
knowing the address family) into the ast_sockaddr structure.

Change-Id: Iee604e96e9096c79b477d6e5ff310cf0b06dae86
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2020-01-10 08:28:55 +02:00
Kevin Harwell fa700acf39 Merge "res_pjsip_pubsub: Add ability to persist generator state information." into 13 2020-01-09 17:28:49 -06:00
Joshua Colp 4cefb2f3cb Merge "res_pjsip_endpoint_identifier_ip.c: Add port matching support" into 13 2020-01-09 15:07:45 -06:00
Joshua Colp 81899e71e7 Merge "app_agent_pool: Update XML docs for AgentLogin" into 13 2020-01-09 15:06:21 -06:00
Corey Farrell 7601a5f0f8
app_record: Do not hang up if beep audio is missing
Additionally alter the warning to mention that it was "beep" which could
not be streamed to give admins a better clue about what the warning
means.

ASTERISK-28682

Change-Id: If5aed21226a173117ed17589f44826dd1ba6576e
2020-01-09 06:14:53 -05:00
Kevin Harwell ba5b0c5c36 app_agent_pool: Update XML docs for AgentLogin
This patch fixes some wrongly formatted documentation for the AgentLogin
application. A couple of "see also" links should contain only the function
name, and no parameters.

Change-Id: I3f788b47dce3292e311f8a9856938d59a0bd0661
2020-01-08 13:54:44 -06:00
George Joseph 83077366de CI: Update buildAsterisk.sh to do a "make full"
If you do a "make all" when building Asterisk the xml documentation
produced will be missing certain AMI events where their
documentation is located not at the top of the c source file but
embedded further down next to the event's manager_event()
registration call.  See main/manager_mwi.c for an example.

"make full" does produce the correct documentation so we're changing
it in the build script.  A separate commit/issue will address the
problem with "make all".

ASTERISK-28507
Reported by: David Lee

Change-Id: I4a22635d6eef99eacecc0efb69e28360eebdb86c
2020-01-08 11:11:26 -07:00
Joshua Colp 379050504d Merge "stasis.c: Use correct topic name in stasis_topic_pool_delete_topic" into 13 2020-01-08 09:41:02 -06:00
Joshua C. Colp 9720b29d8e res_pjsip_pubsub: Add ability to persist generator state information.
Some body generators, such as dialog-info+xml, require storing state
information which is then conveyed in the NOTIFY request itself. Up
until now there was no way for such body generators to persist this
information.

Two new API calls have been added to allow body generators to set and
get persisted data. This data is persisted out alongside the normal
persistence information and allows the body generator to restore
state information or to simply use this for normal storage of state.
State is stored in the form of JSON and it is up to the body
generator to interpret this as needed.

The dialog-info+xml body generator has been updated to take advantage
of this to persist the version number.

ASTERISK-27759

Change-Id: I5fda56c624fd13c17b3c48e0319b77079e9e27de
2020-01-08 15:19:41 +00:00
Friendly Automation 1d3739fcbd Merge "sig_pri: Fix deadlock caused by sig_pri_queue_hangup" into 13 2020-01-08 08:57:10 -06:00
Sean Bright 49bb7d85cd res_pjsip_endpoint_identifier_ip.c: Add port matching support
Adds source port matching support when IP matching is used:

  [example]
  type = identify
  match = 1.2.3.4:5060/32, 1.2.3.4:6000/32, asterisk.org:4444

If the IP matches but the source port does not, we reject and search for
alternatives. SRV lookups are still performed if enabled (srv_lookups = yes),
unless the configured FQDN includes a port number in which case just a host
lookup is performed.

ASTERISK-28639 #close
Reported by: Mitch Claborn

Change-Id: I256d5bd5d478b95f526e2f80ace31b690eebba92
2020-01-08 09:34:50 -05:00
George Joseph aa84bc31e2 Merge "app_chanisavail.c: Simplify dialplan using ChanIsAvail." into 13 2020-01-07 14:28:13 -06:00
Friendly Automation 0b7569a977 Merge "res_pjsip_config_wizard: Fix change detection for wizard settings" into 13 2020-01-07 12:38:14 -06:00
Friendly Automation 1577f6d923 Merge "features.c: Make Bridge application tolerate unspecified channel." into 13 2020-01-07 11:51:37 -06:00
Friendly Automation b929ac2c64 Merge "app_dial.c: Simplify dialplan using Dial." into 13 2020-01-07 11:35:59 -06:00
Friendly Automation beb7987fed Merge "app_page.c: Simplify dialplan using Page." into 13 2020-01-07 10:54:04 -06:00
Friendly Automation 4db92ee97e Merge "app_softhangup.c: Reduce unnecessary warning to verbose message." into 13 2020-01-07 10:50:29 -06:00
Friendly Automation 3a86c176a6 Merge "app_chanspy.c: Reduce log message level from notice to verbose." into 13 2020-01-07 09:59:28 -06:00
George Joseph e642d46b05 Merge "contrib/valgrind: Fix use of frame-level suppression" into 13 2020-01-07 09:56:49 -06:00
George Joseph 9249c30b87 sig_pri: Fix deadlock caused by sig_pri_queue_hangup
The change to add setting hangupsource to sig_pri_queue_hangup()
made in https://gerrit.asterisk.org/c/asterisk/+/12857 casued
deadlocks when a hangup request was received from the core at the
same time a hanguprequest was received from the remote end via the
D channel.

Although the PRI's channel private structure was being unlocked
before setting the hangupsource, the PRI's own lock was still being
held during the process.  If channel actions were also coming from
the core, a deadlock on the PRI could result.  This deadlock could
then escalate to the entire DAHDI subsystem via DAHDI's global
interface list lock, especially if someone used the PRI CLI commands.

Fix:

* We now unlock the PRI as well as the PRI's channel private
  structure before setting the hangupsource, then relock both
  afterwards.

ASTERISK-28605
Reported by: Dirk Wendland

Change-Id: Id74aaa5d4e3746063dbe9deed188eb65193cb9c9
2020-01-07 07:19:54 -06:00
Richard Mudgett 3a8290d1f2 app_chanisavail.c: Simplify dialplan using ChanIsAvail.
Dialplan has to be careful about passing an empty device list or empty
positions in the list.  As a result, dialplan has to check for these
conditions before using ChanIsAvail.  Simplify dialplan by making
ChanIsAvail handle these conditions gracefully.

* Made tolerate empty positions in the device list.

* Simplified the code and eliminated some unnecessary indention.

ASTERISK-28638

Change-Id: I9e4b67e2cbf26b2417c2d03485b8568e898931d3
2020-01-06 19:11:23 -06:00
George Joseph e4e5e07e3d stasis.c: Use correct topic name in stasis_topic_pool_delete_topic
When a topic is created for an object, its name is only
<object>:<uniqueid>
For example:
bridge:cb68b3a8-fce7-4738-8a17-d7847562f020

When a topic is added to a pool, its name has the pool's topic
name prepended.  For example:
bridge:all/bridge:cb68b3a8-fce7-4738-8a17-d7847562f020

The topic_pool_entry's name however, is only what was passed
in to stasis_topic_pool_get_topic which is
bridge:cb68b3a8-fce7-4738-8a17-d7847562f020
That's actually correct because the entry is qualified by the
pool that's in.

When you're ready to delete the entry from the pool, you retrieve
the tropic name from the object but since it now has the pool's
topic name prepended, it won't be found in the pool container.

Fix:

* Modified stasis_topic_pool_delete_topic() to skip past the
pool topic's name, if it was prepended to the topic name,
before searching the container for a pool entry.

ASTERISK-28633
Reported by: Joeran Vinzens

Change-Id: I4396aa69dd83e4ab84c5b91b39293cfdbcf483e6
2020-01-06 09:52:23 -06:00
Richard Mudgett f6f25601a4 app_dial.c: Simplify dialplan using Dial.
Dialplan has to be careful about passing an empty destination list or
empty positions in the list.  As a result, dialplan has to check for
these conditions before using Dial.  Simplify dialplan by making Dial
handle these conditions gracefully.

* Made tolerate empty positions in the dialed device list.

* Reduced some message log levels from notice to verbose.

ASTERISK-28638

Change-Id: I6edc731aff451f8bdfaee5498078dd18c3a11ab9
2020-01-05 21:23:49 -06:00
Richard Mudgett 4414def9f9 app_page.c: Simplify dialplan using Page.
Dialplan has to be careful about passing an empty destination list or
empty positions in the list.  As a result, dialplan has to check for
these conditions before using Page.  Simplify dialplan by making Page
handle these conditions gracefully.

* Made tolerate empty positions in the paged device list.

* Reduced some warnings associated with the 's' option to verbose
messages.  The warning level for those messages really serves no purpose
as that is why the 's' option exists.

ASTERISK-28638

Change-Id: I95b64a6d6800cd1a25279c88889314ae60fc21e3
2020-01-05 21:20:44 -06:00
Richard Mudgett 9997710f8f features.c: Make Bridge application tolerate unspecified channel.
The Bridge application was inconsistent if the channel to bridge with is
not specified.  If no parameters are given then a warning is issued and
the current channel is hung up.  If options are given but no channel is
specified then a warning is issued and the current channel is not hung up.

* Made the Bridge application give a verbose message instead of a warning
if the channel to bridge with is not specified and made not hang up the
current channel.  As a result dialplan no longer needs to check if a
channel name is passed before calling Bridge and simply needs to check the
BRIDGERESULT channel variable instead.  This is something you likely want
your dialplan to do anyway.

* Fixed up L() option warning message.  It is up to the caller to
determine if the channel is hung up because of the warning.  Dial() hangs
up the current channel while Bridge() does not.

Change-Id: I44349a8dc3912397f28852777de04f19e7bb9c73
2020-01-05 21:17:06 -06:00
Richard Mudgett aed10616e5 app_chanspy.c: Reduce log message level from notice to verbose.
Change-Id: Ica5f38ccd8cdc077aef14d0c50425e0b29ac7e0a
2020-01-05 21:12:27 -06:00
Richard Mudgett 1cd2e340e0 app_softhangup.c: Reduce unnecessary warning to verbose message.
Why log a warning for something your dialplan explicitly asked for?

Change-Id: I167b90daf4c7d75dd4b7ef94849f6cef05aa43a7
2020-01-05 21:08:12 -06:00
Sean Bright 430350ed53 res_pjsip_config_wizard: Fix change detection for wizard settings
ast_sorcery_changeset_create() is not commutative and will fail to detect
differences between two variable lists depending on what changed, so switch to
ast_variable_lists_match().

ASTERISK-28492 #close
Reported by: Jean-Denis Girard

Change-Id: I7b3256983ddfaa2138d3de92a444a53b5193a4e1
2020-01-05 11:12:03 -05:00
Sean Bright 0d252feab6 res_agi: Improve GET FULL VARIABLE documentation
ASTERISK-28673 #close
Reported by: Jonathan Harris

Change-Id: I591afdec669622bfa19243aabec31b579652c92f
2020-01-03 11:27:23 -05:00
Snuffy c00c448c05 contrib/valgrind: Fix use of frame-level suppression
Fix use of frame-level wildcard usage in suppression file.

ASTERISK-27243 #close
Reported-by: Richard Kenner

Change-Id: I1c0c64c5f305d2c9aa124e11f1f64a2eec52dc51
2020-01-02 09:44:21 -06:00
Friendly Automation 20c411065b Merge "func_odbc: acf_odbc_read() and cli_odbc_read() unicode support" into 13 2020-01-02 09:34:10 -06:00
Joshua Colp 5a3826e334 Merge "res_fax: wrap v21 detected Asterisk initiated negotiation with config option" into 13 2020-01-02 08:43:59 -06:00
Boris P. Korzun d95b719891 func_odbc: acf_odbc_read() and cli_odbc_read() unicode support
Added ast_odbc_ast_str_SQLGetData() considers SQL_DESC_OCTET_LENGTH
column attribute for correct allocating the buffer.

ASTERISK-28497 #close

Change-Id: I50e86c8a277996f13d4a4b9b318ece0d60b279bf
2020-01-02 08:28:56 -06:00
George Joseph 7e66d2578e Merge "db: Initialize condition primitive before use" into 13 2019-12-31 08:36:14 -06:00
Jean Aunis 72548ca9e5 chan_sip: voice frames are no longer transmitted after emitting a COLP
The SIP transaction state was reset when emitting an UPDATE or a re-INVITE
related to a COLP, preventing RTP packets to be emitted.

ASTERISK-28647

Change-Id: Ie7a30fa7a97f711e7ba6cc17f221a0993d48bd8b
2019-12-30 01:43:35 -06:00
Sean Bright 401056fd27 db: Initialize condition primitive before use
The db_init() function ultimately calls db_sync() which signals the
condition before it is initialized.

Change-Id: Id4a4e025b637bc4ac7d90557fcb71d56598892ab
2019-12-27 18:29:45 -05:00
Friendly Automation 1a96383e29 Merge "config.c: Skip UTF-8 BOMs if present when reading config files" into 13 2019-12-27 10:08:57 -06:00
Jaco Kroon e8ca2af820 netsock2: backport ast_sockaddr_copy_sockaddr to asterisk 13.
This function is already present in 15, 16 and master.

Change-Id: I491ddecdccc87620c264567c549217e48f3d4ff1
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2019-12-22 18:07:50 +02:00
Joshua C. Colp 49520c0ec6 Merge "chan_sip: in case of tcp/tls, be less annoying about tx errors." into 13 2019-12-19 18:39:01 -06:00
Friendly Automation 1254747497 Merge "app_chanisavail/cdr: ChanIsAvail sometimes fails to deactivate CDR." into 13 2019-12-19 10:49:37 -06:00
Friendly Automation 66970af0d3 Merge "confbridge: Add support for specifying maximum sample rate." into 13 2019-12-19 09:55:22 -06:00
Sean Bright 6ceb4c25fb config.c: Skip UTF-8 BOMs if present when reading config files
ASTERISK-28667 #close

Change-Id: I4767ed365c98f3e1587b7653321048a31d8a53b2
2019-12-19 05:48:37 -05:00
Friendly Automation b9d465935b Merge "sip_to_pjsip.py: Fix trustrpid typo" into 13 2019-12-18 07:12:09 -06:00
Friendly Automation a451aafae0 Merge "configure: Add check for MySQL client bool and my_bool type usage." into 13 2019-12-18 06:26:31 -06:00
Friendly Automation f7fcb601ab Merge "json: Support older jansson versions." into 13 2019-12-18 06:18:41 -06:00
Pascal Cadotte Michaud 8654d6cb20
sip_to_pjsip.py: Fix trustrpid typo
ASTERISK-28664 #close

Change-Id: I6c28b1002fd7075ae0ed36f026f8c1855c9418a6
2019-12-17 13:15:56 -05:00
Friendly Automation 172e2f651b Merge "app_voicemail: warning when is compiling" into 13 2019-12-17 11:55:07 -06:00
Joshua C. Colp c1faa9ecda json: Support older jansson versions.
The use of '?' is a fairly new addition to jansson and is not
supported in the version of jansson that can be used by 13.
This change returns to previous supported behavior and removes
usage of '?'.

ASTERISK-28663

Change-Id: I6d596007ae85e8724d928865d99968f679be1142
2019-12-17 14:11:52 +00:00
Frederic LE FOLL b07bccd0bd app_chanisavail/cdr: ChanIsAvail sometimes fails to deactivate CDR.
Temporary channel lifespan is very short and CDR deactivation request
through ast_cdr_set_property() may happen when CDR is not available
yet. Use CDR_PROP() dialplan function instead, it will first wait
for pending CDR insertion requests to be processed.

ASTERISK-28636

Change-Id: I1cbe09e8d2169c0962c1195133ff260d291f2074
2019-12-16 22:43:01 +01:00
George Joseph 028a2f2d9a Merge "res_pjsip_nat: Restore original contact for REGISTER responses" into 13 2019-12-16 11:02:34 -06:00
Joshua C. Colp 7cea1c4306 configure: Add check for MySQL client bool and my_bool type usage.
Instead of trying to use the defined MySQL client version from the
header use a configure check to determine whether the bool or my_bool
type should be used for defining a boolean.

ASTERISK-28604

Change-Id: Id2225b3785115de074c50c123ff1a68005b4a9c7
2019-12-16 12:39:20 -04:00
Joshua C. Colp ca35de4282 confbridge: Add support for specifying maximum sample rate.
ConfBridge has the ability to move between different sample
rates for mixing the conference bridge. Up until now there has
only been the ability to set the conference bridge to mix at
a specific sample rate, or to let it move between sample rates
as necessary. This change adds the ability to configure a
conference bridge with a maximum sample rate so it can move
between sample rates but only up to the configured maximum.

ASTERISK-28658

Change-Id: Idff80896ccfb8a58a816e4ce9ac4ebde785963ee
2019-12-16 15:53:40 +00:00
Friendly Automation 7004fb6175 Merge "PJSIP_CONTACT: add missing argument documentation" into 13 2019-12-16 06:52:37 -06:00
Joshua Colp 089b7529df Merge "ACL: ast_apply_acl_nolog - identical to ast_apply_acl but without logging." into 13 2019-12-16 06:04:29 -06:00
Kevin Harwell 754fca9297 res_fax: wrap v21 detected Asterisk initiated negotiation with config option
A previous patch:

Gerrit Change-Id: I73bb24799bfe1a48adae9c034a2edbae54cc2a39

made it so a T.38 Gateway tries to negotiate with both sides by sending T.38
negotiation request to both endpoints supported T.38 versus the previous
behavior of forwarding negotiation to the "other" channel once a preamble
was detected.

This had the unfortunate side effect of breaking some setups. Specifically
ones that set the max datagram option on an endpoint configuration (configured
max datagram was not propagated since Asterisk now initiates negotiations).

This patch adds a configuration option, "negotiate_both", that when enabled
makes it so Asterisk initiates the negotiation requests to both endpoints vs.
the previous behavior of waiting, and forwarding the request.

The default is disabled keeping with the old behavior.

ASTERISK-28660

Change-Id: I5deb875f3485e20bc75119ec743090655d864a1a
2019-12-13 14:23:51 -06:00
Stanislav 22f9c57f43 app_voicemail: warning when is compiling
Change-Id: Ib53eba1a66e25fbeba61c620bd3edd462f699ada

ASTERISK-28628

Change-Id: Ib53eba1a66e25fbeba61c620bd3edd462f699ada
2019-12-12 13:29:30 -06:00
Asterisk Development Team 51482dec75 Update CHANGES and UPGRADE.txt for 13.30.0 2019-12-12 06:01:37 -05:00
Pascal Cadotte Michaud 644ae311bb PJSIP_CONTACT: add missing argument documentation
add missing argument "rtt" and "status" to the documentation

The change to the dtd file allow an enumlist to contain one or many
configOptionToEnum or enum.

This is different from the previous patch I submitted when you could have a
configOptionToEnum or (a configOptionToEnum followed by one or manu enums) or
(one or many enums)

ASTERISK-28626

Change-Id: Ia71743ee7ec813f40297b0ddefeee7909db63b6d
2019-12-11 11:16:26 -06:00
George Joseph d4df66dc8a Merge "Revert "PJSIP_CONTACT: add missing argument documentation"" into 13 2019-12-11 10:35:45 -06:00
Joshua Colp c1cfca5ef1 Revert "PJSIP_CONTACT: add missing argument documentation"
This reverts commit 3778e1abcd.

Reason for revert: Regression in XML validation.

validity error : Content model of enumlist is not determinist:
(configOptionToEnum | (configOptionToEnum , enum+) | enum+)

As we are preparing to do releases and this is not critical
I am reverting this for now until resolved.

Change-Id: I07b539d0406e8af08934a91223e850444bde1b75
2019-12-11 07:01:01 -06:00
Friendly Automation 815d0f8e5a Merge "res_pjsip_registrar.c: Prevent potential double free if AOR is not found" into 13 2019-12-09 10:24:11 -06:00
Jaco Kroon 72d51ab8f5 chan_sip: in case of tcp/tls, be less annoying about tx errors.
chan_sip.c:3782 __sip_xmit: sip_xmit of 0x7f1478069230 (len 600) to
213.150.203.60:1492 returned -2: Interrupted system call

returned -2 implies this wasn't actually an OS error, so errno makes no
sense either.  Internal error was already logged higher up, and -2
generally means that either there isn't a valid connection available, or
the pipe notification failed, and that is already correctly logged.

ASTERISK-28651 #close

Change-Id: I46eb82924beeff9dfd86fa6c7eb87d2651b950f2
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2019-12-07 14:08:04 +02:00
Friendly Automation 40b1fdbba4 Merge "app_queue: Fix old confusing comment about when the members are called" into 13 2019-12-06 13:29:35 -06:00
George Joseph 02576bfef7 res_pjsip_nat: Restore original contact for REGISTER responses
RFC3261 Section 10 "Registrations", specifically paragraph
"10.2.4: Refreshing Bindings", states that a user agent compares
each contact address (in a 200 REGISTER response) to see if it
created the contact.  If the Asterisk endpoint has the
rewrite_contact option set however, the contact host and port sent
back in the 200 response will be the rewritten one and not the
one sent by the user agent.  This prevents the user agent from
matching its own contact.  Some user agents get very upset when
this happens and will not consider the registration successful.
While this is rare, it is acceptable behavior especially if more
than 1 user agent is allowed to register to a single endpoint/aor.

This commit updates res_pjsip_nat (where rewrite_contact is
implemented) to store the original incoming Contact header in
a new "x-ast-orig-host" URI parameter before rewriting it, and to
restore the original host and port to the Contact headers in the
outgoing response.

This is only done if the request is a REGISTER and rewrite_contact
is enabled.

pjsip_message_filter was also updated to ensure that if a request
comes in with any existing x-ast-* URI parameters, we remove them
so they don't conflict.  Asterisk will never send a request
with those headers in it but someone might just decide to add them
to a request they craft and send to Asterisk.

NOTE: If a device changes its contact address and registers again,
it's a NEW registration.  If the device didn't unregister the
original registration then all existing behavior based
on aor/remove_existing and aor/max_contacts apply.

ASTERISK-28502
Reported-by: Ross Beer

Change-Id: Idc263ad2d2d7bd8faa047e5804d96a5fe1cd282e
2019-12-06 11:47:54 -07:00
Friendly Automation bf179634c0 Merge "res_pjsip_registrar.c: Prevent possible buffer overflow with domain aliases" into 13 2019-12-06 08:44:54 -06:00
Friendly Automation 4df3b39e10 Merge "channel.c: Resolve issue with receiving SIP INFO packets for DTMF" into 13 2019-12-06 08:35:01 -06:00
Jaco Kroon 6e79028020 ACL: ast_apply_acl_nolog - identical to ast_apply_acl but without logging.
Due to use in res_rtp_asterisk there is a need to be able to apply an
ACL without logging any invalid/denies.  It's probably sensible to at
least validate the ACL once directly after load and report invalid ACLs.

Change-Id: I256169229d945ca7c1bbf228fc492d91df345843
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
2019-12-05 18:05:50 +02:00
Friendly Automation 5386b674e1 Merge "PJSIP_CONTACT: add missing argument documentation" into 13 2019-12-04 18:27:10 -06:00
Friendly Automation 575f4d9639 Merge "chan_sip+native_bridge_rtp: no directmedia for ptime other than default ptime." into 13 2019-12-04 18:03:59 -06:00
Friendly Automation 1e200cf2b2 Merge "res_pjsip_session.c: Prevent use-after-free with TEST_FRAMEWORK enabled" into 13 2019-12-04 17:18:21 -06:00
Friendly Automation f9b10259e5 Merge "parking: Fall back to parker channel name even if it matches parkee." into 13 2019-12-04 17:11:05 -06:00
Sean Bright 1750847fc0 res_pjsip_registrar.c: Prevent potential double free if AOR is not found
The simple fix here is simply to NULL out username and password after we call
ast_free on them. Unfortunately, I noticed that we weren't checking for
allocation failures for username and password, and adding those checks made
things noisy and cumbersome.

So instead we partially rollback the recent LGTM patch, and move the alloca
calls into find_aor_name().

ASTERISK-28641 #close
Reported by: Ross Beer

Change-Id: Ic9d01624e717a020be0b0aee31f0814e7f1ffbe2
2019-12-04 16:17:57 -06:00
Sean Bright 890f8a79d4 res_pjsip_registrar.c: Prevent possible buffer overflow with domain aliases
We're appropriately sizing the id_domain_alias buffer, but then copying the data
into the id_domain one. We were then using the uninitialized id_domain_alias
buffer we just allocated.

This is ASTERISK~28641 adjacent, but significant enough to warrant its own
patch.

Change-Id: I81c38724d18deab8c6573153e2b99dbb6e2f33d9
2019-12-04 16:14:37 -06:00
Walter Doekes d8063c1cf9 app_queue: Fix old confusing comment about when the members are called
ASTERISK-28644

Change-Id: I2771a931d00a8fc2b9f9a4d1a33ea8f1ad24e06b
2019-12-04 11:38:29 -06:00
Frederic LE FOLL 3a32b75c33 chan_sip+native_bridge_rtp: no directmedia for ptime other than default ptime.
During capabilities selection (joint capabilities of us and peer,
configured capability for this peer, or general configured
capabilities), if sip_new() does not keep framing information,
then directmedia activation will fail for any framing different
from default framing.

ASTERISK-28637

Change-Id: I99257502788653c2816fc991cac7946453082466
2019-12-04 04:52:19 -06:00
Sean Bright 2b5259b7e8 res_pjsip_session.c: Prevent use-after-free with TEST_FRAMEWORK enabled
We need to copy the endpoint name before we call ao2_cleanup() on it,
otherwise we might try to access memory that has been reclaimed.

ASTERISK-28445 #close
Reported by: Bernhard Schmidt

Change-Id: I404b952608aa606e0babd3c4108346721fb726b3
2019-12-03 15:44:32 -06:00
George Joseph 5aee4f7655 channel.c: Resolve issue with receiving SIP INFO packets for DTMF
The problem is essentially the same as in ASTERISK~28245. Besides
the direct media scenario we have an additional scenario where a
special client is involved. This device mutes audio by default in
transmit direction (no rtp frames) and activates audio only by a
foot switch. In this situation dtmf input (pin for conferences,
transfer features codes , etc) using SIP INFO mode is not
understood properly especially when SIP INFO messages are sent
quickly.

This patch ensures that SIP INFO frames are properly queued and
processed in the above scenario. The patch also corrects situations
where successive dtmf events are received quicker than the
signalled event duration (plus minimum gap/pause) allows, i.e. DTMF
events have to be buffered in the ast channel read queue and
emulation has to be processed asynchronously at slower speed.

Reported by: Thomas Arimont
patches:
  trigger_dtmf_emulation.patch submitted by Thomas Arimont (license 5525)

Change-Id: I309bf61dd065c9978c8e48f5b9a936ab47de64c2
2019-12-02 07:16:06 -07:00
Friendly Automation 5554082d88 Merge "CI: Turn off shallow cloning altogether" into 13 2019-12-02 07:08:31 -06:00
George Joseph cec947525b CI: Turn off shallow cloning altogether
Change-Id: I73ed4aef33a92f20080128aafc34e19fd4457196
2019-12-02 05:48:01 -07:00
Joshua Colp 032f5d8971 Merge "res_pjsip_t38: T.38 error correction mode selection at 200 ok received" into 13 2019-12-02 06:47:34 -06:00
Joshua Colp e401f725d1 parking: Fall back to parker channel name even if it matches parkee.
ASTERISK-28631

Change-Id: Ia74d084799fbb9bee3403e30d2391aacd46243cc
2019-11-25 12:55:27 +00:00
Benjamin Keith Ford 2652720df4 Merge "res_pjsip_session.c: Check for port of zero on incoming SDP." into 13 2019-11-21 13:42:39 -06:00
Friendly Automation 80e9e986ad Merge "manager.c: Prevent the Originate action from running the Originate app" into 13 2019-11-21 12:17:47 -06:00
Ben Ford c2279540ba chan_sip.c: Prevent address change on unauthenticated SIP request.
If the name of a peer is known and a SIP request is sent using that
peer's name, the address of the peer will change even if the request
fails the authentication challenge. This means that an endpoint can
be altered and even rendered unusuable, even if it was in a working
state previously. This can only occur when the nat option is set to the
default, or auto_force_rport.

This change checks the result of authentication first to ensure it is
successful before setting the address and the nat option.

ASTERISK-28589 #close

Change-Id: I581c5ed1da60ca89f590bd70872de2b660de02df
2019-11-21 09:45:35 -06:00
George Joseph 1b9281a5de manager.c: Prevent the Originate action from running the Originate app
If an AMI user without the "system" authorization calls the
Originate AMI command with the Originate application,
the second Originate could run the "System" command.

Action: Originate
Channel: Local/1111
Application: Originate
Data: Local/2222,app,System,touch /tmp/owned

If the "system" authorization isn't set, we now block the
Originate app as well as the System, Exec, etc. apps.

ASTERISK-28580
Reported by: Eliel Sardañons

Change-Id: Ic4c9dedc34c426f03c8c14fce334a71386d8a5fa
2019-11-21 09:40:28 -06:00
Ben Ford c257794330 res_pjsip_session.c: Check for port of zero on incoming SDP.
If a re-invite comes in initiating T.38, but there is no c line in the
SDP and the port is also 0, a crash can occur. A check is now done on
the port to see if the steam is already declined, preventing the crash.
The logic was moved to res_pjsip_session.c because it is handled in a
similar manner in later versions of Asterisk.

ASTERISK-28612
Reported by: Salah Ahmed

Change-Id: Ifc4a0d05b32c7f2156e77fc8435a6ecaa6abada0
2019-11-21 09:35:00 -06:00
George Joseph bb732e4292 Merge "app_senddtmf: Add receive mode to AMI Action PlayDTMF" into 13 2019-11-21 09:20:10 -06:00
Friendly Automation 955e331174 Merge "chan_dahdi: PRI span status may stay "Down, Active" after a short alarm" into 13 2019-11-21 08:44:55 -06:00
Pascal Cadotte Michaud 3778e1abcd PJSIP_CONTACT: add missing argument documentation
add missing argument "rtt" and "status" to the documentation

ASTERISK-28626
Change-Id: I8419e4c8203e411b87d93dc395acdbcf7526dedf
2019-11-21 09:23:49 -05:00
Kevin Harwell e00381d8d0 Merge "res_pjsip_registrar: Fix uninitlized variable warning" into 13 2019-11-20 16:13:23 -06:00
Friendly Automation 7bcfcd3433 Merge "app_amd: Fixed timeout issue" into 13 2019-11-20 10:34:25 -06:00
Friendly Automation 243c1af2b9 Merge "func_curl.c: Support custom http headers" into 13 2019-11-20 09:55:01 -06:00
Salah Ahmed 9c586e5be7 res_pjsip_t38: T.38 error correction mode selection at 200 ok received
if asterisk offer T38 SDP with none error correction scheme and
the endpoint respond with redundancy EC scheme, asterisk switch
to that mode. Since we configure the endpoint as none EC mode
we should not switch to any other mode except none.
following logic implemented in code.

1. If asterisk offer none, and anything except none in answer
   will be ignored.
2. If asterisk offer fec, answer with fec, redundancy and none will
   be accepted.
3. If asterisk offer redundancy, answer with redundancy and none
   will be accepted.

ASTERISK-28621

Change-Id: I343c62253ea4c8b7ee17abbfb377a4d484a14b19
2019-11-20 09:44:39 -06:00
George Joseph 95213b01d2 CI: Fix missing script block in jenkinsfiles
Change-Id: I9f44a3d5085ea7880fad1a3883a4820907e29ea3
2019-11-19 11:11:06 -07:00
Sean Bright b03af8ba3c res_pjsip_registrar: Fix uninitlized variable warning
Fixes: error: ‘domain_name’ may be used uninitialized in this function

Found with gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008

Change-Id: I44413b49ea1205aa25538142161deb73883c79e8
2019-11-19 11:41:47 -06:00
George Joseph d60f23ecbd CI: Fix missing script block in jenkinsfiles
Change-Id: Ib4b6e4887695f230ea7a5b0c879b29fc5a13be4f
2019-11-19 10:41:22 -07:00
George Joseph 7702ea986e CI: Increase clone depth and do better cleanup
The original clone depth of 10 was causing the need to rebase
changes whose parent was older than the 10 commits.  The clone
depth has been increased to 100.

Workspace cleanup was only happening for successful builds which
wasn't enough to keep the 8G workspace in-memory drives on the
docker slaves from filling up.  Now the workspaces are cleaned up
after every build regardless of success/failure.  If you need to
preserve builds temporarily, you can log into Jenkins/Manage
Jenkins/Configure System and change the CLEANUP_WS_* environment
variable for the job type you're troubleshooting to "FALSE".

Change-Id: I0d7366e87cea714e5dbc9488caf718802fce75ca
2019-11-19 11:58:41 -05:00
Friendly Automation 8508a06706 Merge "serializer: set high/low alert levels on whole pool" into 13 2019-11-19 10:10:23 -06:00
George Joseph c79db42573 Merge "parking: Fix case where we can't get the parker." into 13 2019-11-19 09:23:05 -06:00
Frederic LE FOLL ad50410568 chan_dahdi: PRI span status may stay "Down, Active" after a short alarm
Upon a short PRI disconnection, libpri may maintain Q.921 layer 'up' and
may thus not send PRI_EVENT_DCHAN_DOWN / PRI_EVENT_DCHAN_UP events.
If pri_event_alarm() clears DCHAN_UP status bit upon alarm detection
and no Q.921 reconnection sequence occurs, chan_dahdi will keep
seeing span status "Down" at the end of alarm.

This patch modifies pri_event_alarm() in order to keep DCHAN_UP bit
unchanged. libpri will send a PRI_EVENT_DCHAN_DOWN event if it detects
a disconnection of Q.921 layer and this will clear DCHAN_UP if required.

ASTERISK-28615

Change-Id: Ibe27df4971fd4c82cc6850020bce4a8b2692c996
2019-11-19 02:19:10 -05:00
lvl 17c393377e app_senddtmf: Add receive mode to AMI Action PlayDTMF
ASTERISK-28614

Change-Id: I183501297ae1dc294ae56b34acac9b0343eb2664
2019-11-18 18:09:57 -05:00
Alexei Gradinari 26fc3a3127 serializer: set high/low alert levels on whole pool
The current code sets alert levels starting from index 1.
Need to set on whole pool starting from index 0.

Change-Id: I5decbb43160954fb9a512f04302637fc666b6f5d
2019-11-18 11:06:20 -05:00
George Joseph ab28da7c9d Merge "func_env: Prevent FILE() from reading garbage at end-of-file" into 13 2019-11-18 09:54:16 -06:00
Friendly Automation a42f3ff3b7 Merge "res_rtp_asterisk: Always return provided DTLS packet length." into 13 2019-11-18 09:13:10 -06:00
Friendly Automation 803bc786f6 Merge "various files - fix some alerts raised by lgtm code analysis" into 13 2019-11-18 09:12:57 -06:00
Friendly Automation e82a91ee1c Merge "bridge_softmix: clear hold when joining a softmix bridge" into 13 2019-11-18 09:12:17 -06:00
Martin Tomec f032b8c158 func_curl.c: Support custom http headers
When user wants to send json data, the default Content-Type header
is incorect (application/x-www-form-urlencoded). This patch allows
to set any custom headers so the Content-Type header can be
overriden. User can set multiple headers by multiple calls of
curlopt(). This approach is not consistent with other parameters,
but is more readable in dialplan than one call with multiple
headers.

ASTERISK-28613

Change-Id: I4dd68c3f4e25362ef941d73a3861f58348dcfbf9
2019-11-15 13:54:52 +00:00
Joshua Colp eb3b49928e parking: Fix case where we can't get the parker.
ASTERISK-28616

Change-Id: Iabe31ae38d01604284fcc5c2438d44e29a32ea4d
2019-11-15 06:46:37 -04:00
George Joseph 7a236ed20d stasis: Don't hold app_registry and session locks unnecessarily
resource_events:app_handler() was locking the session, then
attempting to determine if the app had debug enabled which
locked the app_registry container.  res_stasis:__stasis_app_register
was locking the app_registry container then calling app_update
which caused app_handler (which locks the session) to run.
The result was a deadlock.

* Updated resource_events:app_handler() to determine if debug was
  set (which locks the app_registry) before obtaining the session lock.

* Updated res_stasis:__stasis_app_register to release the app_registry
  container lock before calling app_update (which locks the sesison).

ASTERISK-28423
Reported by Ross Beer

Change-Id: I58c69d08cb372852a63933608e4d6c3e456247b4
2019-11-14 17:22:58 -06:00
Michael Cargile 9361e32bed app_amd: Fixed timeout issue
ASTERISK_28143 attempted to fix an issue where calls with no audio would never
timeout. It did so by adding AST_FRAME_NULL as a frame type to process in its
calculations. Unfortunately these frames seem to show up at irregular time
intervals. This resulted in app_amd returning prematurely most of the time.

* Removed AST_FRAME_NULL from the calculations
* Added a check to see how much time has actually passed since app_amd began

ASTERISK-28608

Change-Id: I642a21b02d389b17e40ccd5357754b034c3daa42
2019-11-14 11:03:05 -05:00
Joshua Colp 6856cdc6ba res_rtp_asterisk: Always return provided DTLS packet length.
OpenSSL can not tolerate if the packet sent out does not
match the length that it provided to the sender. This change
lies and says that each time the full packet was sent. If
a problem does occur then a retransmission will occur as
appropriate.

ASTERISK-28576

Change-Id: Id42455b15c9dc4eb987c8c023ece6fbf3c22a449
2019-11-14 06:20:17 -04:00
Kevin Harwell 300e21662c bridge_softmix: clear hold when joining a softmix bridge
MOH continues to play to a channel if that channel was on hold prior to
entering a softmix bridge. MOH will not stop even if the original "holder"
attempts an unhold.

For the most part a softmix bridge ignores holds, so a participating channel
shouldn't join while on hold. This patch checks to see if the channel joining
the softmix bridge is currently on hold. If so then it indicates an unhold.

ASTERISK-28618

Change-Id: I66ccd4efc80f5b4c3dd68186b379eb442916392b
2019-11-13 18:54:26 -05:00
Joshua Colp 3b94982b4f parking: Use channel snapshot instead of channel.
There exists a scenario where a thread can hold a lock on the
channels container while trying to lock a bridge. At the same
time another thread can hold the lock for said bridge while
attempting to retrieve a channel. This causes a deadlock.

This change fixes this scenario by retrieving a channel snapshot
instead of a channel, as information present in the snapshot
is all that is needed.

ASTERISK-28616

Change-Id: I68ceb1d62c7378addcd286e21be08a660a7cecf2
2019-11-13 19:17:43 -04:00
Sean Bright e5d0add8c6 func_env: Prevent FILE() from reading garbage at end-of-file
If the last line of a file does not have a terminating EOL sequence, we
potentially add garbage to the value returned from the FILE() function.

There is no overflow potential here as we are reading from a buffer of a
known size, we are just reading too much of it.

ASTERISK-26481 #close

Change-Id: I50dd4fcf416fb3c83150040a1a79a59d9eb1ae01
2019-11-13 15:38:40 -05:00
Kevin Harwell 6ca76798e1 various files - fix some alerts raised by lgtm code analysis
This patch fixes several issues reported by the lgtm code analysis tool:

https://lgtm.com/projects/g/asterisk/asterisk

Not all reported issues were addressed in this patch. This patch mostly fixes
confirmed reported errors, potential problematic code points, and a few other
"low hanging" warnings or recommendations found in core supported modules.
These include, but are not limited to the following:

* innapropriate stack allocation in loops
* buffer overflows
* variable declaration "hiding" another variable declaration
* comparisons results that are always the same
* ambiguously signed bit-field members
* missing header guards

Change-Id: Id4a881686605d26c94ab5409bc70fcc21efacc25
2019-11-11 18:11:27 -06:00
George Joseph 7a85a947af cdr_mysql: Fix missing use of 'my_bool' with MySql >= 8.0.1
MySql 8.0.1 replaced the "my_bool" type with "bool" so an #if
was added to use "bool" with MYSQL_VERSION_ID >= 80001.

ASTERISK-28604

Change-Id: I66a28d8f0011e33774edee13a6f8efd2302bb920
2019-11-07 07:30:36 -06:00
Joshua Colp 9c8424a97b res_pjsip_outbound_registration: Extend documentation for "max_retries".
If the "max_retries" option is set to 0 then upon failure no
further attemps are made, so explicitly document the behavior.

ASTERISK-28602

Change-Id: I1e30daae9dd6c49ce18744164214d3def505acbf
2019-10-31 11:52:43 -05:00
Friendly Automation 854a8014ce Merge "res_calendar: Resolve memory leak on calendar destruction" into 13 2019-10-29 09:37:27 -05:00
Sean Bright 27fc662cf2 res_calendar: Resolve memory leak on calendar destruction
Calling ne_uri_parse allocates memory that needs to be freed with a
corresponding call to ne_uri_free.

ASTERISK-28572 #close

Change-Id: I8a6834da27000a6807d89cb7a157b2a88fcb5e61
2019-10-24 10:15:14 -04:00
Joshua Colp 50feafe9b8 res_ari_events: Add module reference when a WebSocket is open.
This change ensures that the module isn't unloaded when a
WebSocket is open. Previously it was possible to unload the
module manually or during shutdown which could cause a crash
when any active WebSockets were terminated.

ASTERISK-28585

Change-Id: I85c71ab112f99875b586419a34c08c8b34c14c5c
2019-10-24 07:21:31 -03:00
Friendly Automation 6f2431cb13 Merge "utils.h: Set lower bound for thread stack size to PTHREAD_STACK_MIN" into 13 2019-10-21 13:21:30 -05:00
Sean Bright f1e3a13579 utils.h: Set lower bound for thread stack size to PTHREAD_STACK_MIN
ASTERISK-28590 #close

Change-Id: I51abce00c04d0a06550bda5205580705185b9c1c
2019-10-21 08:04:48 -05:00
Friendly Automation 8e42a55ebd Merge "app_voicemail.c: Support multiple file formats for forwarded messages." into 13 2019-10-21 07:19:41 -05:00
Friendly Automation c56663b2cf Merge "Crash during "pjsip show channelstats" execution" into 13 2019-10-21 07:18:16 -05:00
Sean Bright 0cccfcba9e README-SERIOUSLY.bestpractices.md: Speling correetions.
ASTERISK-28586 #close

Change-Id: I43dc4e8bd9dc685b17695b215a5360314074734f
2019-10-16 17:07:15 -04:00
Salah Ahmed 414eebcbc9 Crash during "pjsip show channelstats" execution
During execution "pjsip show channelstats" cli command by an
external module asterisk crashed. It seems this is a separate
thread running to fetch and print rtp stats. The crash happened on
the ao2_lock method, just before it going to read the rtp stats on
a rtp instance. According to gdb backtrace log, it seems the
session media was already cleaned up at that moment.

ASTERISK-28578

Change-Id: Ia918bfa3c8119060633e39b14852e8d983e0417e
2019-10-16 13:33:03 -05:00
cmaj c8e38f8550 app_voicemail.c: Support multiple file formats for forwarded messages.
If you specify multiple formats in voicemail.conf, eg. "format = gsm|wav"
and are using realtime ODBC backend, only the first format gets stored
in the database. So when you forward a message later on, there is a bug
generating the email, related to the stored format (GSM) being different
than the desired email format (WAV) specified for the user. Sox can
handle this, but Asterisk needs to tell sox exactly what to do.

ASTERISK-22192

Change-Id: I7321e7f7e7c58adbf41dd4fd7191c887b9b2eafd
2019-10-14 16:18:08 -06:00
Friendly Automation 78ad383837 Merge "res_pjsip_mwi: potential double unref, and potential unwanted double link" into 13 2019-10-14 10:18:23 -05:00
Friendly Automation 59487acfb8 Merge "pbx: deadlock when outgoing dialed channel hangs up too quickly" into 13 2019-10-14 06:49:02 -05:00
Joshua Colp 337e4ed671 Merge "cdr_pgsql cel_pgsql res_config_pgsql: compatibility with PostgreSQL 12" into 13 2019-10-14 06:28:41 -05:00
Christoph Moench-Tegeder a7749f4fcd cdr_pgsql cel_pgsql res_config_pgsql: compatibility with PostgreSQL 12
PostgreSQL 12 finally removed column adsrc from table pg_catalog.pg_attrdef
(column default values), which has been deprecated since version 8.0.
Since then, the official/correct/supported way to retrieve the column
default value from the catalog is function pg_catalog.pg_get_expr().

This change breaks compatibility with pre-8.0 PostgreSQL servers,
but has reached end-of-support more than a decade ago.
cdr_pgsql and res_config_pgsql still have support for pre-7.3
servers, but cleaning that up is perhaps a topic for a major release,
not this bugfix.

ASTERISK-28571

Change-Id: I834cb3addf1937e19e87ede140bdd16cea531ebe
2019-10-14 05:06:42 -05:00
George Joseph 91d5094464 Merge "pjproject_bundled: Replace earlier reverts with official fixes." into 13 2019-10-11 09:32:04 -05:00
csavinovich c3a1f2ce91 test_taskprocessor.c: Fix test failure on Ubuntu
Fixes a failure in /main/taskprocesor unit test, only occurring in Ubuntu.
Newer versions of GCC require variable initialization.

Change-Id: I2994d8aab9307a8c2c7330584f287a27144a580c
2019-10-10 17:31:31 -05:00
Kevin Harwell e34651d62c res_pjsip_mwi: potential double unref, and potential unwanted double link
When creating an unsolicited MWI aggregate subscription it was possible for
the subscription object to be double unref'ed. This patch removes the explicit
unref as it is not needed since the RAII_VAR will handle it at function end.

Less concerning there was also a bug that could potentially allow the aggregate
subscription object to be added to the unsolicited container twice. This patch
ensures it is added only once.

ASTERISK-28575

Change-Id: I9ccfdb5ea788bc0c3618db183aae235e53c12763
2019-10-10 15:30:06 -05:00
George Joseph ba55298891 Merge "Revert "app_voicemail: Cleanup stale lock files on module load"" into 13 2019-10-10 13:45:12 -05:00
George Joseph 6ff5432a07 Merge "res_pjsip_mwi: use an ao2_global object for mwi containers" into 13 2019-10-10 09:12:09 -05:00
George Joseph 1bb0e60e55 Merge "res_pjsip/res_pjsip_mwi: use centralized serializer pools" into 13 2019-10-10 09:11:54 -05:00
George Joseph 46c70c67f9 Merge "serializer: move/add asterisk serializer pool functionality" into 13 2019-10-10 09:11:25 -05:00
George Joseph 164e5372a2 pjproject_bundled: Replace earlier reverts with official fixes.
Issues in pjproject 2.9 caused us to revert some of their changes
as a work around.  This introduced another issue where pjproject
wouldn't build with older gcc versions such as that found on
CentOS 6.  This commit replaces the reverts with the official
fixes for the original issues and allows pjproject to be built
on CentOS 6 again.

ASTERISK-28574
Reported-by: Niklas Larsson

Change-Id: I06f8507bea553d1a01b0b8874197d35b9d47ec4c
2019-10-10 05:34:58 -06:00
Kevin Harwell a2ddaaac32 pbx: deadlock when outgoing dialed channel hangs up too quickly
Here's the basic scenario that occurred when executing an AMI fast originate
while at the same time something else locks the channels container, and also
wants a lock on the dialed channel:

1. pbx_outgoing_attempt obtains a lock on a dialed channel
2. concurrently another thread obtains a lock on the channels container, and
   subsequently requests a lock on the dialed channel. It waits on #1. For
   instance, "core show channel <dialed channel"
3. the outgoing call does not fail, but ends before the pbx_outgoing_attempt
   function exits
4. pbx_outgoing_attempt function exits, the outgoing structure destructs, and
   attempts to hang up the dialed channel
5. hang up tries to obtain the channels container lock, but can't due to #2.
6. Asterisk is deadlocked.

The solution was to allow the pbx_outgoing_exec function to "steal" ownership
of the dialed channel, and handle hanging it up. The channel now is either hung
up prior to it being potentially locked by the initiating thread, or if locked
the hang up takes place in a different thread, thus alleviating the deadlock.

ASTERISK-28561
patches:
  iliketrains.diff submitted by Joshua Colp (license 5000)

Change-Id: I51b42b92dde8f2215b69bb509e28667ee3a3853a
2019-10-09 16:06:53 -05:00
lvl bc8d56816d chan_pjsip: Prevent segfault when running PlayDTMF on hungup channel
ASTERISK-28086 #close

Change-Id: Ib3baadc89b9f0477a6f25a63861433812368c5ea
2019-10-09 05:47:09 -06:00
George Joseph 32c52b7dda Merge "cdr_mysql: Don't clean up on unload unless we can unregister from CDRs" into 13 2019-10-08 08:24:15 -05:00
Sean Bright 0834e06673 Revert "app_voicemail: Cleanup stale lock files on module load"
This reverts commit fd2e8d0da7.

Reason for revert: Problematic for users who store their voicemail
on network storage devices, or share voicemail storage between
multiple Asterisk instances.

ASTERISK-28567 #close

Change-Id: I3ff4ca983d8e753fe2971f3439bd154705693c41
2019-10-08 06:34:27 -05:00
Kevin Harwell 3f7f376a68 res_pjsip_mwi: use an ao2_global object for mwi containers
On shutdown it's possible for the unsolicited mwi container to be freed before
other dependent threads are done using it. This patch ensures this can no
longer happen by wrapping the container in an ao2_global object. The solicited
container was also changed too.

ASTERISK-28552

Change-Id: I8f812286dc19a34916acacd71ce2ec26e1042047
2019-10-07 16:48:26 -05:00
Kevin Harwell 2042020abf res_pjsip/res_pjsip_mwi: use centralized serializer pools
Both res_pjsip and res_pjsip_mwi made use of serializer pools. However, they
both implemented their own serializer pool functionality that was pretty much
identical in each of the source files. This patch removes the duplicated code,
and uses the new 'ast_serializer_pool' object instead.

Additionally res_pjsip_mwi enables a shutdown group on the pool since if the
timing was right the module could be unloaded while taskprocessor threads still
needed to execute, thus causing a crash.

Change-Id: I959b0805ad024585bbb6276593118be34fbf6e1d
2019-10-07 16:48:26 -05:00
Kevin Harwell 0b7efc1687 serializer: move/add asterisk serializer pool functionality
Serializer pools have previously existed in Asterisk. However, for the most
part the code has been duplicated across modules. This patch abstracts the
code into an 'ast_serializer_pool' object. As well the code is now centralized
in serializer.c/h.

In addition serializer pools can now optionally be monitored by a shutdown
group. This will prevent the pool from being destroyed until all serializers
have completed.

Change-Id: Ib1e906144b90ffd4d5ed9826f0b719ca9c6d2971
2019-10-07 16:48:26 -05:00
Friendly Automation a3ef4d22d4 Merge "channel/chan_pjsip: add dialplan function for music on hold" into 13 2019-10-07 07:53:35 -05:00
Sean Bright fa897059a5 cdr_mysql: Don't clean up on unload unless we can unregister from CDRs
ASTERISK-28566 #close

Change-Id: I6daa4e5128e9406d04d3aed670c3bae98d38d40c
2019-10-04 16:59:33 -04:00
George Joseph 1b29d0a7ed Merge "res_pjsip_transport_websocket: Don't put brackets around local_name if IPv6" into 13 2019-10-01 06:31:31 -05:00
Torrey Searle 6fd195ca91 channel/chan_pjsip: add dialplan function for music on hold
Add a new dialplan function PJSIP_MOH_PASSTHROUGH that allows
the on-hold behavior to be controlled on a per-call basis

ASTERISK-28542 #close

Change-Id: Iebe905b2ad6dbaa87ab330267147180b05a3c3a8
2019-10-01 09:03:04 +02:00
Alexei Gradinari c1d82f73a3 res_pjsip_pubsub: add endpoint to some warning
There are some warning messages which are not informative without endpoint:
"No registered subscribe handler for event presence.winfo"
"No registered publish handler for event presence"

This patch adds an endpoint name to these messages.

Change-Id: Ia2811ec226d8a12659b4f9d4d224b48289650827
2019-09-27 17:12:35 -05:00
Sean Bright 438085f10e res_pjsip_transport_websocket: Don't put brackets around local_name if IPv6
ASTERISK-28544 #close

Change-Id: I8e62c444d107674c298f472e3545661de8a80dce
2019-09-27 10:54:53 -04:00
George Joseph c6f81a7ba4 Merge "taskprocessor.c: Added "like" support to 'core show taskprocessors'" into 13 2019-09-27 08:56:06 -05:00
Friendly Automation 88dea7a111 Merge "pbx: Prevent Realtime switch crash on invalid priority" into 13 2019-09-27 08:32:28 -05:00
Friendly Automation ac64659b33 Merge "res_pjsip_registrar: Validate Contact URI before adding to responses" into 13 2019-09-26 04:45:32 -05:00
Joshua Colp b60bf27881 Merge "chan_pjsip: Add support for passing hold and unhold requests through." into 13 2019-09-26 04:24:07 -05:00
Ben Ford 67bd02d08d taskprocessor.c: Added "like" support to 'core show taskprocessors'
Added "like" support for 'core show taskprocessors'. Now you
can specify a specific set of taskprocessors (or just one) by
adding the keyword "like" to the above command, followed by
your search criteria.

Change-Id: I021e740201e9ba487204b5451e46feb0e3222464
2019-09-25 14:01:37 -05:00
Asterisk Development Team 0dc1ba17b8 Update CHANGES and UPGRADE.txt for 13.29.0-rc2 2019-09-25 12:47:24 -05:00
Sean Bright 7280e2ec51 pbx: Prevent Realtime switch crash on invalid priority
pbx_extension_helper takes two 'context' arguments. One (con) is a
pointer directly to a 'struct ast_context' and the other (context) is
the name of the context. In all cases, one of these arguments is NULL
and the other is non-NULL.

Functions that are ultimately called by pbx_extension_helper expect that
'context' will be non-NULL, so we set it unconditionally on entry into
this function.

ASTERISK-28534 #close

Change-Id: Ifbbc5e71440afd80efd441f7a9d72e8b10b6f47d
2019-09-25 12:08:37 -04:00
Friendly Automation fde6ed7d91 Merge "core: Fix ABI mismatch of ao2_global_obj." into 13 2019-09-25 07:27:32 -05:00
George Joseph 85f47022e0 Merge "res_pjsip_pubsub: change warning to debug" into 13 2019-09-25 07:04:04 -05:00
George Joseph c5a9c039ba Merge "taskprocessor.c: Add CLI commands to reset taskprocessor stats." into 13 2019-09-25 06:26:39 -05:00
Sean Bright 22fb0f286d res_pjsip_registrar: Validate Contact URI before adding to responses
If a permanent contact URI associated with an AOR is invalid, we add a
Contact header to REGISTER responses with a NULL URI, causing a crash.

ASTERISK-28463 #close

Change-Id: Id2b643e58b975bc560aab1c111e6669d54db9102
2019-09-25 07:20:35 -04:00
Joshua Colp d775bc5add chan_pjsip: Add support for passing hold and unhold requests through.
This change adds an option, moh_passthrough, that when enabled will pass
hold and unhold requests through using a SIP re-invite. When placing on
hold a re-invite with sendonly will be sent and when taking off hold a
re-invite with sendrecv will be sent. This allows remote servers to handle
the musiconhold instead of the local Asterisk instance being responsible.

Review: https://reviewboard.asterisk.org/r/4103/

Change-Id: Ib6294e906e577e1a4245cb1f058d3976ff484c52
2019-09-25 08:18:15 +02:00
George Joseph 6991a944c0 Merge "pjproject_bundled: Revert pjproject 2.9 commits causing leaks" into 13 2019-09-24 15:37:11 -05:00
Kevin Harwell 9384639953 res_pjsip_pubsub: change warning to debug
The following message:

"Subscription request from endpoint <blah> rejected. Expiration of 0 is invalid"

Would sometimes spam the log with warnings if Asterisk restarted and a bunch
of clients sent unsubscribes. This patch changes it from a warning to a debug
message.

Change-Id: I841ec42f65559f3135e037df0e55f89b6447a467
2019-09-24 11:24:20 -05:00
Corey Farrell c881d36319
core: Fix ABI mismatch of ao2_global_obj.
astobj2.c declares DEBUG_THREADS_LOOSE_ABI to avoid overhead of debug
threads tracking information in the internal structures of astobj2.
Unfortunately this means that ao2_global_obj contains the statically
allocated debug threads tracking fields which are used by initialization
and cleanup but main/astobj2.c believed those fields and associated
space did not exist.

Change-Id: Icef41ad97d88a8c1d1515e034ec8133cab3b1527
2019-09-24 12:24:15 -04:00
Ben Ford 3069153bdf taskprocessor.c: Add CLI commands to reset taskprocessor stats.
Added two new CLI commands to reset stats for taskprocessors. You can
reset stats for a single, specific taskprocessor ('core reset
taskprocessor <taskprocessor>'), or you can reset all taskprocessors
('core reset taskprocessors'). These commands will reset the counter for
the number of tasks processed as well as the max queue size.

Change-Id: Iaf17fc4ae29396ab0c6ac92408fc7bdc2f12362d
2019-09-24 10:41:25 -05:00
George Joseph e8a9cc21ab pjproject_bundled: Revert pjproject 2.9 commits causing leaks
We've found a connection re-use regression in pjproject 2.9
introduced by commit
"Close #1019: Support for multiple listeners."
https://trac.pjsip.org/repos/changeset/6002
https://trac.pjsip.org/repos/ticket/1019

Normally, multiple SSL requests should reuse the same connection
if one already exists to the remote server.  When a transport
error occurs, the next request should establish a new connection
and any following requests should use that same one.  With this
patch, when a transport error occurs, every new request creates
a new connection so you can wind up with thousands of open tcp
sockets, possibly exhausting file handles, and increasing memory
usage.

Reverting pjproject commit 6002 (and related 6021) restores the
expected behavior.

We also found a memory leak in SSL processing that was introduced by
commit
"Fixed #2204: Add OpenSSL remote certificate chain info"
https://trac.pjsip.org/repos/changeset/6014
https://trac.pjsip.org/repos/ticket/2204

Apparently the remote certificate chain is continually recreated
causing the leak.

Reverting pjproject commit 6014 (and related 6022) restores the
expected behavior.

Both of these issues have been acknowledged by Teluu.

ASTERISK-28521

Change-Id: I8ae7233c3ac4ec29a3b991f738e655dabcaba9f1
2019-09-24 07:14:17 -06:00
Friendly Automation 6320b86d89 Merge "res_sorcery_memory_cache: stale item update leak" into 13 2019-09-24 08:08:44 -05:00
Friendly Automation d6c52479a4 Merge "astmm.c: Display backtrace with memory show allocations" into 13 2019-09-24 08:04:38 -05:00
Kevin Harwell f5dda8d796 Merge "res_pjsip_mwi: Remove inappropriate topic unreference." into 13 2019-09-23 15:18:52 -05:00
Kevin Harwell 6517690168 res_sorcery_memory_cache: stale item update leak
When a stale item was being updated the object was being retrieved, but its
reference was not being decremented after the update. This patch makes it so
the object is now appropriately de-referenced.

ASTERISK-28523

Change-Id: I9d8173d3a0416a242f4eba92fa0853279c500ec7
2019-09-23 11:05:17 -05:00
George Joseph afd6b98757 astmm.c: Display backtrace with memory show allocations
You can currently capture backtraces of memory allocations but they
only get displayed when you stop asterisk and the atexit hooks
are enabled.  Now, if memory backtrace is on and you issue a
"memory show allocations" CLI command for a specific file, then
a backtrace will show for each allocation that occurred after
you turned "memory backtrace on".  The backtrace display is shown
only when a specific file's allocations are displayed to prevent
a massive CLI dump of every file's allocations.

Change-Id: Ic657afc1fc6ec7205e16eb36a97a611d235a2b4f
2019-09-23 06:20:23 -06:00
Corey Farrell 48fd773743
res_pjsip_mwi: Remove inappropriate topic unreference.
ast_mwi_topic() returns a borrowed reference which should not be
unreferenced, doing so leads to a FRACK.  This was hidden by the fact
that stasis_cache.c leaked the result of cache_remove in
caching_topic_exec.

Change-Id: I51101bf7d07b8dc8ce8fc46b6cb31fbbd213fbc7
2019-09-19 16:17:47 -04:00
Corey Farrell 25918f2837
app_voicemail: Fix module unload leak.
Change-Id: Ib9a06565b9a178822d3bbb67eccf51432e12d84a
2019-09-19 11:53:19 -04:00
Joshua Colp 16790d6029 Merge "chan_pjsip: Relock correct channel during "fax" redirect." into 13 2019-09-18 15:12:47 -05:00
Joshua Colp a97bd89f84 chan_pjsip: Relock correct channel during "fax" redirect.
When fax detection occurs on an outbound PJSIP channel the
redirect operation will result in a masquerade occurring and
the underlying channel on the session changing. The code
incorrectly relocked the new channel instead of the old
channel when returning. This resulted in the new channel
being locked indefinitely. The code now always acts on the
expected channel.

ASTERISK-28538

Change-Id: I2b2e60d07e74383ae7e90d752c036c4b02d6b3a3
2019-09-16 13:40:55 +00:00
Guido Falsi ae70c2a428 chan_dahdi: Fix build with clang/llvm
On FreeBSD using the clang/llvm compiler build fails to build due
to the switch statement argument being a non integer type expression.
Switch to an if/else if/else construct to sidestep the issue.

ASTERISK-28536 #close

Change-Id: Idf4a82cc1e94580a2d017fe9e351c226f23e20c8
2019-09-14 17:05:23 +02:00
Friendly Automation a1b371603f Merge "channels: Allow updating variable value" into 13 2019-09-13 07:45:40 -05:00
Sean Bright 622e487cd4 channels: Allow updating variable value
When modifying an already defined variable in some channel drivers they
add a new variable with the same name to the list, but that value is
never used, only the first one found.

Introduce ast_variable_list_replace() and use it where appropriate.

ASTERISK-23756 #close
Patches:
  setvar-multiplie.patch submitted by Michael Goryainov

Change-Id: Ie1897a96c82b8945e752733612ee963686f32839
2019-09-12 15:58:17 -05:00
Asterisk Development Team 18fbd8d8c3 Update CHANGES and UPGRADE.txt for 13.29.0 2019-09-12 15:20:14 -05:00
Asterisk Development Team 2a7cec9051 Update CHANGES and UPGRADE.txt for 13.29.0 2019-09-12 13:36:41 -05:00
Friendly Automation 5bb71c4c1d Merge "ChanIsAvail() generates a CDR when unanswered=yes in cdr.conf." into 13 2019-09-11 09:02:11 -05:00
George Joseph a0f13c1e22 Merge "res_musiconhold: Added unregister realtime moh class" into 13 2019-09-11 09:02:08 -05:00
Joshua Colp 0bf277e8f6 Merge "chan_dahdi: set CHANNEL(hangupsource) when a PRI channel hangs up" into 13 2019-09-11 07:09:33 -05:00
Joshua Colp 228682501a Merge "codec_resample: Ensure OUTSIDE_SPEEX is defined when necessary" into 13 2019-09-11 06:19:15 -05:00
sungtae kim 2705652152 res_musiconhold: Added unregister realtime moh class
This fix allows a realtime moh class to be unregistered from the command
line. This is useful when the contents of a directory referenced by a
realtime moh class have changed.
The realtime moh class is then reloaded on the next request and uses the
new directory contents.

ASTERISK-17808

Change-Id: Ibc4c6834592257c4bb90601ee299682d15befbce
2019-09-11 02:30:44 -05:00
Frederic LE FOLL 9462722b17 ChanIsAvail() generates a CDR when unanswered=yes in cdr.conf.
ChanIsAvail() creates a temporary channel with ast_request() to test
resource availability. It should not generate a CDR when it hangs up
this temporary channel.

This patch disables CDR generation for the temporary channel with
ast_cdr_set_property().

ASTERISK-28527

Change-Id: I7b0555c6909c7d322e452dde97c9ea5b111552d1
2019-09-10 11:44:42 -05:00
Frederic LE FOLL 2b563368df chan_dahdi: set CHANNEL(hangupsource) when a PRI channel hangs up
When the remote ISDN party ends an ISDN call on a PRI link
(DISCONNECT), CHANNEL(hangupsource) information is not available.

chan_dahdi already contains an ast_set_hangupsource() in
__dahdi_exception() function but it seems that ISDN message processing
does not use this part of code.

Two other channel modules associate ast_queue_hangup() and
ast_set_hangupsource() functions calls:
- chan_pjsip in chan_pjsip_session_end() function,
- chan_sip in sip_queue_hangup_cause() function.
chan_iax2 separates them, in iax2_queue_hangup()/iax2_destroy() and
set_hangup_source_and_cause().

Thus, I propose to add ast_set_hangupsource() beside
ast_queue_hangup() in sig_pri_queue_hangup(), like chan_pjsip and
chan_sip already do.

ASTERISK-28525

Change-Id: I0f588a4bcf15ccd0648fd69830d1b801c3f21b7c
2019-09-10 10:58:18 -05:00
George Joseph e6f74e94f6 Merge "chan_unistim: Fix clang warning: variable sized type not at end of a struct" into 13 2019-09-10 08:41:28 -05:00
Sean Bright 060495ed86 codec_resample: Ensure OUTSIDE_SPEEX is defined when necessary
ASTERISK-28511

Change-Id: If0d58598ce14aad3c786a1c0127b5f7b200b737d
2019-09-08 11:39:55 -04:00
Joshua Colp c711546559 AST-2019-005 - translate: Don't assume all frames will have a src.
This change removes the assumption that a frame will always have
a src set on it. This assumption is incorrect.

Given a scenario where an RTP packet is received with no payload
the resulting audio frame will have no samples. If this frame goes
through a signed linear translation path an interpolated frame can
be created (if generic packet loss concealment is enabled) that has
minimal data on it, including no src. If this frame is given to a
translation path a crash will occur due to the lack of src.

ASTERISK-28499

Change-Id: I024d10dd98207eb8a6b35b59880bcdf1090538f8
2019-09-05 05:27:01 -05:00
Igor Goncharovsky 8e07fcc30d chan_unistim: Fix clang warning: variable sized type not at end of a struct
On reading information about initial client packet unistim use dirty
implementation of destination ip address retrieval. This fix uses
CMSG_*(..) to get ip address and make clang compile without warning.

ASTERISK-25592 #close
Reported-by: Alexander Traud

Change-Id: Ic1fd34c2c2bcc951da65bf62e3f7a8adff8351b1
2019-09-04 09:46:52 +06:00
George Joseph 92876e8f0b Merge "res_pjsip_mwi: add better handling of solicited vs unsolicited subscriptions" into 13 2019-09-03 05:34:04 -05:00
Friendly Automation 8b3cee9068 Merge "chan_unistim: Fix code, causing all incoming DTMF sent back to asterisk" into 13 2019-08-30 09:50:42 -05:00
George Joseph 5632bcc126 Merge "codec_resample: Upgrade speex_resample to fix up-sampling bug" into 13 2019-08-30 07:44:27 -05:00
Kevin Harwell af12d36f7e res_pjsip_mwi: add better handling of solicited vs unsolicited subscriptions
res_pjsip_mwi allows both solicited and unsolicited MWI subscription types.
While both can be set in the configuration for a given endpoint/aor, only
one is allowed. Precedence is given to unsolicited. Meaning if an endpoint/aor
is configured to allow both types then the solicited subscription is rejected
when it comes in. However, there is a configuration option to override that
behavior:

mwi_subscribe_replaces_unsolicited

When set to "yes" then when a solicited subscription comes in instead of
rejecting it Asterisk is suppose to replace the unsolicited one if it exists.
Prior to this patch there was a bug in Asterisk that allowed the solicted one
to be added, but did not remove the unsolicited. As a matter of fact a new
unsolicited subscription got added everytime a SIP register was received.
Over time this eventually could "flood" a phone with SIP notifies.

This patch fixes that behavior to now make it work as expected. If configured
to do so a solicited subscription now properly replaces the unsolicited one.
As well when an unsubscribe is received the unsolicited subscription is
restored. Logic was also put in to handle reloads, and any configuration changes
that might result from that. For instance, if a solicited subscription had
previously replaced an unsolicited one, but after reload it was configured to
not allow that then the solicited one needs to be shutdown, and the unsolicited
one added.

ASTERISK-28488

Change-Id: Iec2ec12d9431097e97ed5f37119963aee41af7b1
2019-08-28 18:21:44 -05:00
George Joseph 0e747da168 Merge "chan_unistim: Fix RTP port byte order for big-endian arch" into 13 2019-08-28 06:40:45 -05:00
Igor Goncharovsky 7f1a574ce7 chan_unistim: Fix code, causing all incoming DTMF sent back to asterisk
Current implementation of ast_channel_tech send_digit_begin hook uses
same function for tone playback as key press handler. This cause every
incoming dtmf send back to asterisk. In case of two unistim phones
connected to each other, it'll cause indefinite DTMF loop. Fix add
separate function for dtmf tone phone play.

Change-Id: I5795db468df552f0c89c7576b6b3858b26c4eab4
2019-08-27 11:49:46 +06:00
Igor Goncharovsky b003c9b3ae chan_unistim: Fix RTP port byte order for big-endian arch
This patch fixes one-way oudio that users expirienced on
big-endian architechtires. RTP port number bytes was stored
in improper order and phone sent RTP to wrong RTP port.

Reported-by: Andrey Ionov
Change-Id: I9a9ca7f26e31a67bbbceff12923baa10dfb8a3be
2019-08-26 00:29:21 +06:00
Sean Bright 5154e7f359 codec_resample: Upgrade speex_resample to fix up-sampling bug
ASTERISK-28511 #close

Change-Id: Idd07bf341e89ac999c7f5701d9b72b8a9cb11e82
2019-08-23 17:15:13 -04:00
Joshua Colp 4d4a430128 Merge "Fix misname 'res_external_mwi' to 'res_mwi_external' in comments." into 13 2019-08-23 07:48:56 -05:00
Joshua Colp f0bc74a291 Merge "pjproject: Configurable setting for cnonce to include hyphens or not" into 13 2019-08-23 06:55:34 -05:00
Alexei Gradinari e6a4cca4aa Fix misname 'res_external_mwi' to 'res_mwi_external' in comments.
Change-Id: Ic784be8500e5cb75dcb34bae9f03cfd93b6b34fb
2019-08-22 19:04:27 -05:00
George Joseph b02f53463c Merge "res_pjsip: Channel variable SIPFROMDOMAIN" into 13 2019-08-21 18:41:43 -05:00
Dan Cropp 1a86b2499a pjproject: Configurable setting for cnonce to include hyphens or not
NEC SIP Station interface with authenticated registration only supports cnonce
up to 32 characters.  In Linux, PJSIP would generate 36 character cnonce
which included hyphens.  Teluu developed this patch adding a compile time
setting to default to not include the hyphens.  They felt it best to still
generate the UUID and strip the hyphens.
They have indicated it will be part of PJSIP 2.10.

ASTERISK-28509
Reported-by: Dan Cropp

Change-Id: Ibdfcf845d4f8c0a14df09fd983b11f2d72c5f470
2019-08-21 11:34:56 -05:00
Friendly Automation 8bc51928c1 Merge "res_ari.c: Prefer exact handler match over wildcard" into 13 2019-08-21 07:46:19 -05:00
Stas Kobzar 06e5c11589 res_pjsip: Channel variable SIPFROMDOMAIN
In chan_sip, there was variable SIPFROMDOMAIN that allows to set
From header URI domain per channel. This patch introduces res_pjsip
variable SIPFROMDOMAIN for backward compatibility with chan_sip.

ASTERISK-28489

Change-Id: I715133e43172ce2a1e82093538dc39f9e99e5f2e
2019-08-21 07:04:29 -05:00
George Joseph 22372d5d2b res_ari.c: Prefer exact handler match over wildcard
Given the following request path and 2 handler paths...
Request: /channels/externalMedia
Handler: /channels/{channelId}      "wildcard"
Handler: /channels/externalmedia    "non-wildcard"

...if /channels/externalMedia was registered as a handler after
/channels/{channelId} as shown above, the request would automatically
match the wildcard handler and attempt to parse "externalMedia" into
the channelId variable which isn't what was intended.  It'd work
if the non-wildard entry was defined in rest-api/api-docs/channels.json
before the wildcard entry but that makes the json files
order-dependent which isn't a good thing.

To combat this issue, the search loop saves any wildcard match but
continues looking for exact matches at the same level.  If it finds
one, it's used.  If it hasn't found an exact match at the end of
the current level, the wildcard is used.  Regardless, after
searching the current level, the wildcard is cleared so it won't
accidentally match for a different object or a higher level.

BTW, it's currently not possible for more than 1 wildcard entry
to be defined for a level.  For instance, there couldn't be:
Handler: /channels/{channelId}
Handler: /channels/{channelName}
We wouldn't know which one to match.

Change-Id: I574aa3cbe4249c92c30f74b9b40e750e9002f925
2019-08-20 12:04:56 -06:00
Sean Bright ddc64ca059 audiohook.c: Substitute silence for unavailable audio frames
There are 4 scenarios to consider when capturing audio from a channel
with an audiohook:

 1. There is no rx and no tx audio, so return nothing.
 2. There is rx but no tx audio, so return rx.
 3. There is tx but no rx audio, so return tx.
 4. There is rx and tx audio, so mix them and return.

The file passed as the primary argument to MixMonitor will be written to
in scenarios 2, 3, and 4. However, if you pass the r() and t() options
to MixMonitor, a frame will only be written to the r() file if there was
rx audio and a frame will only be written to the t() file if there was
tx audio.

If you subsequently take the r() and t() files and try to mix them, the
sides of the conversation will 'drift' and be non-representative of the
user experience.

This patch adds a new 'S' option to MixMonitor that injects a frame of
silence on either the r() side or the t() side of the channel so that
when later mixed, there is no such drift.

Change-Id: Ibf5ed73a811087727bd561a89a59f4447b4ee20e
2019-08-20 09:39:53 -04:00
Alexei Gradinari 16bc4ed93c app_voicemail/IMAP: check mailstream not NULL in leave_voicemail
The function leave_voicemail checks if expungeonhangup is set,
but does not check if IMAP stream is closed,
so it could call imap function with NULL stream.
This leads to segfault.

ASTERISK-28505 #close

Change-Id: Ib66c57c1f1ba97774e447b36349198e2626a8d7c
2019-08-15 09:47:03 -05:00
Sean Bright 8a96746994 menuselect: Fix curses build on Gentoo Linux
Because keypad() is exported by libtinfo, it needs to be explicitly
added to the linker options.

ASTERISK-28487 #close

Change-Id: I6c2ad5b95f422c263d078b5c0e84c111807dffc6
2019-08-09 11:07:04 -04:00
George Joseph 7251b76c62 Merge "srtp: Fix possible race condition, and add NULL checks" into 13 2019-08-09 07:51:10 -05:00
Friendly Automation 5598dc045b Merge "cdr / cel: Use event time at event creation instead of processing." into 13 2019-08-08 13:11:46 -05:00
George Joseph c6558e09af CI: Escape backslashes in printenv/sort/tr
Change-Id: I52be64c8f6af2bbe15148a856d1f10cb113e1e94
2019-08-08 11:10:11 -06:00
Kevin Harwell feaadbd250 srtp: Fix possible race condition, and add NULL checks
Somehow it's possible for the srtp session object to be NULL even though the
Asterisk srtp object itself is valid. When this happened it would cause a
crash down in the srtp code when attempting to protect or unprotect data.

After looking at the code there is at least one spot that makes this situation
possible. If Asterisk fails to unprotect the data, and after several retries
it still can't then the srtp->session gets freed, and set to NULL while still
leaving the Asterisk srtp object around. However, according to the original
issue reporter this does not appear to be their situation since they found
no errors logged stating the above happened (which Asterisk does for that
situation).

An issue was found however, where a possible race condition could occur between
the pjsip incoming negotiation, and the receiving of RTP packets. Both places
could attempt to create/setup srtp for the same rtp instance at the same time.
This potentially could be the cause of the problem as well.

Given the above this patch adds locking around srtp setup for a given rtp, or
rtcp instance. NULL checks for the session have also been added within the
protect and unprotect functions as a precaution. These checks should at least
stop Asterisk from crashing if it gets in this situation again.

This patch also fixes one other issue noticed during investigation. When doing
a replace the old object was freed before creating the replacement. If the new
replacement object failed to create then the rtp/rtcp instance would now point
to freed srtp data which could potentially cause a crash as well when the next
attempt to reference it was made. This is now fixed so the old srtp object is
kept upon replacement failure.

Lastly, more logging has been added to help diagnose future issues.

ASTERISK-28472

Change-Id: I240e11cbb1e9ea8083d59d50db069891228fe5cc
2019-08-08 11:30:47 -05:00
George Joseph 17908cb76e CI: Add "throttle" label and "skip_gate" capability
To make throttling by label fully active, the "throttle" option
has to be specified with a specific label.

You can now specify "skip_gate" in the Gerrit comments when you
do a +2 code review to tell Jenkins not to actually run the
gate.  You'd do this if you plan to manually merge the change.

Also updated the "printenv" debug output to better sort multi-line
comments.

Change-Id: I4c0b1085acec4805f2ca207eebac50aad81f27e2
2019-08-08 08:47:34 -06:00
Friendly Automation 6d174e4ef2 Merge "CI: Make node labels job-specific" into 13 2019-08-07 11:19:22 -05:00
Joshua Colp 1496aef51b cdr / cel: Use event time at event creation instead of processing.
When updating times on CDR or CEL records using the time at which
it is done can result in times being incorrect if the system is
heavily loaded and stasis message processing is delayed.

This change instead makes it so CDR and CEL use the time at which
the stasis messages that drive the systems are created. This allows
them to be backed up while still producing correct records.

ASTERISK-28498

Change-Id: I6829227e67aefa318efe5e183a94d4a1b4e8500a
2019-08-07 07:47:17 -03:00
George Joseph a57b59c959 Merge "various modules: json integer overflow" into 13 2019-08-06 11:07:07 -05:00
George Joseph 018c278c72 Merge "res_musiconhold: Use a vector instead of custom array allocation" into 13 2019-08-06 11:05:19 -05:00
George Joseph 1a051fcf5a CI: Make node labels job-specific
Originally, the eligible nodes for a job were labelled only by
"swdev-docker".  So basically any node could run any job.  We had
found that allowing a node to run more than 1 gate at a time was
problematic so we limited the nodes to processing 1 job at a time.
With the creation of the Asterisk 17 branches however, we now have
so many active branches that getting checks and gates through in
a timely manner is problematic when a node can run only 1 job
at a time.

Now the nodes are also labelled by the job type they can run.
For instance: "asterisk-check", "asterisk-gate", etc.  With the
"Throttle Concurrent Builds" plugin, we can now allow a node to
run more than 1 job BUT throttle by job type.  For instance:
  Allow 2 jobs but only 1 asterisk-gate at a time.
Now a node can run 2 checks or 1 check and 1 gate or 1 gate but
not 2 gates at a time.

Change-Id: I2032bf6afbcec5c341d9b852214c0c812d3d6db5
2019-08-06 09:40:54 -06:00
Torrey Searle 6f77e12f21 main/udptl.c: correctly handle udptl sequence wrap around
incorrect handling of UDPTL squence number wrap arounds causes
loss of packets every time the wrap around occurs

ASTERISK-28483 #close

Change-Id: I33caeb2bf13c574a1ebb81714b58907091d64234
2019-08-06 08:54:36 -05:00
Kevin Harwell f145b58542 various modules: json integer overflow
There were still a few places in the code that could overflow when "packing"
a json object with a value outside the base type integer's range. For instance:

unsigned int value = INT_MAX + 1
ast_json_pack("{s: i}", value);

would result in a negative number being "packed". In those situations this patch
alters those values to a ast_json_int_t, which widens the value up to a long or
long long.

ASTERISK-28480

Change-Id: Ied530780d83e6f1772adba0e28d8938ef30c49a1
2019-08-01 16:22:01 -05:00
Sean Bright bb74c691ce res_musiconhold: Use a vector instead of custom array allocation
Change-Id: Ic476a56608b1820ca93dcf68d10cd76fc0b94141
2019-08-01 15:31:12 -04:00
Joshua Colp c6a34ddbf4 res_pjsip: Fix multiple of the same contact in "pjsip show contacts".
The code for gathering contacts could result in the same contact
being retrieved and added to the list multiple times. The container
which stores the contacts to display will now only allow a contact
to be added to it once instead of multiple times.

ASTERISK-28228

Change-Id: I805185cfcec03340f57d2b9e6cc43c49401812df
2019-08-01 04:11:40 -06:00
George Joseph 46beb0fa1a Merge "manager: Send fewer packets" into 13 2019-07-31 08:55:26 -05:00
Sean Bright 5096a5ddf7 manager: Send fewer packets
The functions that build manager message headers do so in a way that
results in a single messages being split across multiple packets. While
this doesn't matter to the remote end, it makes network captures noisier
and harder to follow, and also means additional system calls.

With this patch, we build up more of the message content into the TLS
buffer before flushing to the network. This change is completely
internal to the manager code and does not affect any of the existing
API's consumers.

Change-Id: I50128b0769060ca5272dbbb5e60242d131eaddf9
2019-07-30 07:15:00 -06:00
Sean Bright 2982138d2b res_musiconhold: Use ast_pipe_nonblock() wrapper
Change-Id: Ib0a4b41e5ececbe633079e2d8c2b66c031d2d1f2
2019-07-29 11:04:00 -04:00
George Joseph 5f020b1825 Merge "CI: Don't enable non-core modules in Certified branches" into 13 2019-07-26 09:47:32 -05:00
George Joseph 16fe80d8da Merge "res_config_sqlite3: Only join threads that we started" into 13 2019-07-25 06:59:24 -05:00
George Joseph e51e2cae58 CI: Don't enable non-core modules in Certified branches
We don't support non-core modules for Certified releases but we
were enabling them for CI builds which was causing lots of test
failures.  Now we don't.

Change-Id: I0b3254c08a2479f3d39151690350cce5ce5ad766
2019-07-24 14:22:18 -06:00
Leonid Fainshtein 8e09fbb4e9 openr2(6/6): Set hangup cause
Change-Id: I94dc38920e6e77cc73062648f62fdd613d0d1452
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-23 14:27:43 -05:00
Tzafrir Cohen fdaefbb20a openr2(5/6): added cli command -- mfcr2 destroy link <index>
Change-Id: I452d6a853bcd8c6e194455b19e5e017713e9c0fe
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-23 14:27:27 -05:00
Tzafrir Cohen effca9917d openr2(4/6): added new cli command -- mfcr2 show links
* This command show the MFC/R2 links

Change-Id: I213822e1b7ef9c05bd89a2ba62df8e0856ce9f84
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-23 14:27:12 -05:00
Tzafrir Cohen b3de2c0e1e openr2(3/6): Convert r2links to standard Asterisk AST_LIST*
Change-Id: Ibcb2401515a58782a1488c0b9efbed201c3f3a17
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-23 14:26:41 -05:00
Tzafrir Cohen 4b779a59e4 openr2(2/6): Stop polling channels when DAHDI returns -ENODEV (e.g: plug-out)
Otherwise, OpenR2 threads go crazy and consume almost all CPU resources

Change-Id: I10a41f617613fe7399c5bdced5c64a2751173f28
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-23 14:24:42 -05:00
Sean Bright 202fdc88dd res_config_sqlite3: Only join threads that we started
ASTERISK-28477 #close
Reported by: Dennis

ASTERISK-28478 #close
Reported by: Dennis

Change-Id: I77347ad46a86dc5b35ed68270cee56acefb4f475
2019-07-23 14:09:36 -04:00
George Joseph 0cded803ec Merge "openr2(1/6): bugfix in configuration saving" into 13 2019-07-23 13:02:13 -05:00
George Joseph b63425f469 CI: Add cleanWs to cleanup steps in jenkinsfiles
We're at the point where there are enough Jenkins jobs for
Asterisk branches than even cleaned checkouts of Asterisk
will add up to more disk space than is available on the
in-memory workspace mount.  Since we archive all relevent
artifacts anyway, there's no need to keep the workspace
around after the job finishes, whether it succeeds or fails.

Change-Id: I1cd3b73ebb045a987df0f62526d152a510210c39
2019-07-19 10:24:23 -06:00
George Joseph 51b1111eaf Merge "CI: Add install-headers to the install make targets" into 13 2019-07-19 11:04:59 -05:00
Friendly Automation 7b33cef82a Merge "README.md: Update year" into 13 2019-07-19 09:27:24 -05:00
George Joseph 8d1acc27d5 Merge "sched: Don't allow ast_sched_del to deadlock ast_sched_runq from same thread" into 13 2019-07-19 08:46:29 -05:00
Rodrigo Ramírez Norambuena 5c87fa6a0e README.md: Update year
Change-Id: I746fb94d112c7d797e206bca0fd1e13fcd26bae3
2019-07-19 07:45:17 -06:00
George Joseph 51504432a7 CI: Add install-headers to the install make targets
The testsuite actually needs the headers installed to run
it's self_test.

Change-Id: Ice41d331131b876ad4a9c056085fe6aac34b32b2
2019-07-19 07:41:05 -06:00
George Joseph 284b657539 Merge "Build: Add separate header install/uninstall targets" into 13 2019-07-19 07:34:39 -05:00
Friendly Automation 976f884a24 Merge "manager: Log AMI actions" into 13 2019-07-19 07:25:10 -05:00
Asterisk Development Team b3d0754f82 Update CHANGES and UPGRADE.txt for 13.28.0 2019-07-18 06:05:29 -05:00
Walter Doekes 3449240130 sched: Don't allow ast_sched_del to deadlock ast_sched_runq from same thread
When fixing ASTERISK~24212, a change was done so a scheduled callback could not
be removed while it was running. The caller of ast_sched_del would have to wait.

However, when the caller of ast_sched_del is the callback itself (however wrong
this might be), this new check would cause a deadlock: it would wait forever
for itself.

This changeset introduces an additional check: if ast_sched_del is called
by the callback itself, it is immediately rejected (along with an ERROR log and
a backtrace). Additionally, the AST_SCHED_DEL_UNREF macro is adjusted so the
after-ast_sched_del-refcall function is only run if ast_sched_del returned
success.

This should fix the following spurious race condition found in chan_sip:
- thread 1: schedule sip_poke_peer_now (using AST_SCHED_REPLACE)
- thread 2: run sip_poke_peer_now
- thread 2: blank out sched-ID (too soon!)
- thread 1: set sched-ID (too late!)
- thread 2: try to delete the currently running sched-ID

After this fix, an ERROR would be logged, but no deadlocks (in do_monitor) nor
excess calls to sip_unref_peer(peer) (causing double frees of rtp_instances and
other madness) should occur.

(Thanks Richard Mudgett for reviewing/improving this "scary" change.)

Note that this change does not fix the observed race condition: unlocked
access to peer->pokeexpire (and potentially other scheduled items in chan_sip),
causing AST_SCHED_DEL_UNREF to look at a changing id. But it will make the
deadlock go away. And in the observed case, it will not have adverse affects
(like memory leaks) because the scheduled item is removed through a different
path.

ASTERISK-28282

Change-Id: Ic26777fa0732725e6ca7010df17af77a012aa856
2019-07-18 09:20:35 +02:00
George Joseph aaafe8a108 Build: Add separate header install/uninstall targets
Two new Makefile targets have been added... "install-headers" and
"uninstall-headers" to separately control header installation.
The existing behavior has not changed so "make install" and
"make uninstall" will continue to also install/uninstall the headers.
The new targets were added for forward compatibility with Asterisk 17
in which the headers are no longer installed/uninstalled with the
"install" and "uninstall" targets.

Also corrects an issue where /usr/include/asterisk.h was never
being removed at all.

Change-Id: Ia7399f3a0203a4825fc4a9f43b9034dae9a2b643
2019-07-16 08:16:38 -06:00
Kevin Harwell d2eaba4853 manager: Log AMI actions
When manager debugging is turned on, this patch makes it so incoming AMI actions
are now also logged.

Change-Id: I8047524510e7ac97d99482b2448f8e368f29cd47
2019-07-15 10:10:46 -06:00
Joshua Colp 3cb839d111 res_rtp_asterisk: Move where DTLS MTU variable is defined.
The DTLS MTU variable is not dependent on pjproject and should
not exist in its block.

Change-Id: I7e97d64dc192f2ac81bfe2b72b8229d321c7d026
2019-07-14 15:26:41 -03:00
Friendly Automation a7bb02ae34 Merge "res_pjsip_messaging: Check for body in in-dialog message" into 13 2019-07-11 15:10:42 -05:00
George Joseph 41d6492de0 res_pjsip_messaging: Check for body in in-dialog message
We now check that a body exists and it has a length > 0 before
attempting to process it.

ASTERISK-28447
Reported-by: Gil Richard

Change-Id: Ic469544b22ab848734636588d4c93426cc6f4b1f
2019-07-11 11:31:08 -05:00
Francesco Castellano 1318a3a2b7 chan_sip: Handle invalid SDP answer to T.38 re-invite
The chan_sip module performs a T.38 re-invite using a single media
stream of udptl, and expects the SDP answer to be the same.

If an SDP answer is received instead that contains an additional
media stream with no joint codec a crash will occur as the code
assumes that at least one joint codec will exist in this
scenario.

This change removes this assumption.

ASTERISK-28465

Change-Id: I8b02845b53344c6babe867a3f0a5231045c7ac87
2019-07-11 11:28:03 -05:00
Tzafrir Cohen d8bf4b1608 openr2(1/6): bugfix in configuration saving
Details:
  - The memcpy() call copied part of "dahdi_conf" and not "dahdi_conf.mfcr2"
  - As a result, the memcmp() in dahdi_r2_get_link() always fails
  - This cause dahdi_r2_get_link() to create new link for every channel
    (instead of a new link for every ~30 channels)
  - With the fix, far less links are generated -- so we use far less threads

Change-Id: I7259dd6272f5e46e8a6c7f5bf3e8c2ec01b8c132
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
2019-07-09 02:40:14 +03:00
Chris-Savinovich e206a54d59 chan_dahdi.c: crash in chan_dahdi
Fixes a crash in chan_dahdi occurring on 32-bit systems. A previous
patch introduced a variable of type unassigned long long which is 64-bits.
Casting it as 'ast_json_int_t' along with JSON type 'I' makes it work
with 32-bit systems.

ASTERISK-28457

Change-Id: I9cef6b5f2d826fc5c93f2f6a1c997c4e3e6c93fe
2019-07-01 17:04:47 -05:00
George Joseph 72f001d558 Merge "pjproject_bundled: Add peer information to most SSL/TLS errors" into 13 2019-07-01 10:19:17 -05:00
Friendly Automation 6ac6218f73 Merge "tcptls.c: Add peer hostname and port to some error messages" into 13 2019-07-01 10:04:30 -05:00
Kevin Harwell 8ef52e8a19 Merge "pjproject: Update to 2.9 release" into 13 2019-06-27 16:52:35 -05:00
George Joseph be54e94773 tcptls.c: Add peer hostname and port to some error messages
Where possble, hostname and port has been added to error
messages, mostly on the server side.

ASTERISK-26006
Reported by: Oleksandr Natalenko

Change-Id: Iff4f897277bc36ce8c5b493b71d0a4a7b74e62f0
2019-06-27 14:04:27 -06:00
George Joseph 493268a938 pjproject_bundled: Add peer information to most SSL/TLS errors
Most SSL/TLS error messages coming from pjproject now have either
the peer address:port or peer hostname, depending on what was
available at the time and code location where the error was
generated.

ASTERISK-28444
Reported by: Bernhard Schmidt

Change-Id: I41770e8a1ea5e96f6e16b236692c4269ce1ba91e
2019-06-27 11:46:44 -06:00
Kevin Harwell a302d46dd8 Merge "app_amd: issue with silence suppression fixed" into 13 2019-06-27 11:33:37 -05:00
Sean Bright ba57b004c4 pjproject: Update to 2.9 release
Relies on https://github.com/asterisk/third-party/pull/4

Change-Id: Iec9cad42cb4ae109a86a3d4dae61e8bce4424ce3
2019-06-27 10:10:24 -06:00
George Joseph 94e0e26c2a Merge "CI: New way to determnine libdir" into 13 2019-06-25 09:07:49 -05:00
George Joseph 44e65b92c1 Merge "sig_pri: Address gcc9 issues" into 13 2019-06-25 09:06:18 -05:00
George Joseph dd20beedb9 Merge "res_pjsip_sdp_rtp: Fix ICE candidates leak." into 13 2019-06-25 09:05:38 -05:00
George Joseph e39dbc4909 Merge "res_fax: gateway sends T.38 request to both endpoints if V.21 detected" into 13 2019-06-24 15:16:43 -05:00
George Joseph 79087b6aeb sig_pri: Address gcc9 issues
A few more format truncation issues addressed.

Change-Id: I047f373169caaca0eec4889d3c0e5e10f130017a
2019-06-24 07:30:19 -06:00
Joshua Colp 9721f3908d res_pjsip_sdp_rtp: Fix ICE candidates leak.
Given the non-default configuration of enabling ICE support on an
endpoint that does not result in an ICE negotiation occurring the
ICE candidates would be leaked.

This change makes it so that the ICE candidates are only retrieved
if ICE negotiation is occurring.

ASTERISK-28460

Change-Id: I7b3f76f031c41fb8a3dc3ef1a84b77e2a8cb969f
2019-06-24 10:08:06 +00:00
George Joseph f22dedc597 Merge "app_confbridge: Attended transfer event fixup" into 13 2019-06-21 13:41:40 -05:00
George Joseph 5d45686c28 Merge "translate.c do not log WARNING on empty audio frame" into 13 2019-06-21 10:52:13 -05:00
Alexei Gradinari d5db7473e7 res_fax: gateway sends T.38 request to both endpoints if V.21 detected
According T.38 Gateway 'Use case 3'
https://wiki.asterisk.org/wiki/display/AST/T.38+Gateway
T.38 Gateway should send T.38 negotiation request to called endpoint
if FAX preamble (using V.21 detector) generated by called endpoint.
But it does not, because fax_gateway_detect_v21 constructs T.38
negotiation request, but forwards it only to other channel,
not to the channel on which FAX preamble is detected.

Some SIP endpoints could be improperly configured to rely on the other side
to initiate T.38 re-INVITEs.

With this patch the T.38 Gateway tries to negotiate with both sides
by sending T.38 negotiation request to both endpoints supported T.38.

Change-Id: I73bb24799bfe1a48adae9c034a2edbae54cc2a39
2019-06-20 16:57:33 -06:00
George Joseph e4ee209bfe CI: New way to determnine libdir
We were using the presence of /usr/lib64 to determine where
shared libraries should be installed.  This only existed on
Redhat based systems and was safe.  If it existed, use it,
otherwise use /usr/lib.

Unfortunately, Ubuntu 19 decided to create a /usr/lib64 BUT
NOT INCLUDE IT IN THE DEFAULT ld.so.conf.  So if anything is
installed there, it won't work.

The new method, just looks for $ID in /etc/os-release and if it's
centos or fedora, uses /usr/lib64 and if ubuntu, uses /usr/lib.

NOTE:  This applies only to the CI scripts.  Normal asterisk
build and install is not affected.

Change-Id: Iad66374b550fd89349bedbbf2b93f8edd195a7c3
2019-06-19 10:58:39 -06:00
Alexei Gradinari 3bfe1f3a1b translate.c do not log WARNING on empty audio frame
There is WARNING "no samples for ..." on each Playtones.
The function ast_playtones_start calls ast_activate_generator,
which calls ast_prod.
The function ast_prod calls ast_write with empty audio frame.
In this case it's spam log.

Change-Id: Id4ac309489d9ff281bad02abdef341cecdede660
2019-06-18 10:40:57 -06:00
George Joseph d0f01af913 chan_dahdi: Address gcc9 issues
Fixed format-truncation issues in chan_dahdi.c and
sig_analog.c.  Since they're related to fields provided
by dahdi-tools we can't change the buffer sizes so we're just
checking the return from snprintf and printing an errior if we
overflow.

Change-Id: Idc1f3c1565b88a7d145332a0196074b5832864e5
2019-06-17 12:51:55 -06:00
Joshua Colp d5fed38ab5 Merge "res_rtp_asterisk: Add support for DTLS packet fragmentation." into 13 2019-06-17 08:39:11 -05:00
George Joseph 41f5d15763 app_confbridge: Attended transfer event fixup
When a channel already in a conference bridge is attended transfered
to another extension, or when an existing call is attended
transferred into a conference bridge, we now generate ConfbridgeJoin
and ConfbridgeLeave events for the entering and departing channels.

Change-Id: Id7709cfbceb26fbcb828b2d0d2a6b2fbeaf028e1
2019-06-13 14:05:12 -06:00
Joshua Colp 1ea9bad34d res_rtp_asterisk: Add support for DTLS packet fragmentation.
This change adds support for larger TLS certificates by allowing
OpenSSL to fragment the DTLS packets according to the configured
MTU. By default this is set to 1200.

This is accomplished by implementing our own BIO method that
supports MTU querying. The configured MTU is returned to OpenSSL
which fragments the packet accordingly. When a packet is to be
sent it is done directly out the RTP instance.

ASTERISK-28018

Change-Id: If2d5032019a28ffd48f43e9e93ed71dbdbf39c06
2019-06-13 13:49:07 +00:00
George Joseph 83c353c650 Merge "app_attended_transfer: new application AttendedTransfer" into 13 2019-06-12 10:44:36 -05:00
George Joseph dd4f0c94e8 Merge "app_blind_transfer: new application BlindTransfer" into 13 2019-06-12 10:42:57 -05:00
George Joseph 0e30d17293 Merge "chan_pjsip.c: Check for channel and session to not be NULL in hangup" into 13 2019-06-12 08:49:51 -05:00
Alexei Gradinari 45a9ee4c53 app_attended_transfer: new application AttendedTransfer
AttendedTransfer queues up attended transfer to the given extension.

This application can be useful with Custom Dynamic Features.
For example to make attended transfer to a predefined number.

features.conf
;;;
[applicationmap]
my_atxfer => *7,self,GoSub,"my_atxfer,s,1",default
;;;

extensions.conf
;;;
[globals]
DYNAMIC_FEATURES=my_atxfer
TRANSFER_CONTEXT=my_transfer

[my_atxfer]
exten => s,1,AttendedTransfer(1234567890)
   same => n,Return()

[my_transfer]
include => default
;;;

This application also can be used to completly redefine Attended transfer
feature using dialplan. For example:

features.conf
;;;
[featuremap]
atxfer => *7

[applicationmap]
custom_atxfer => *2,self,GoSub,"custom_atxfer,s,1",default
;;;

extensions.conf
;;;
[globals]
DYNAMIC_FEATURES=custom_atxfer
TRANSFER_CONTEXT=my_transfer

[custom_atxfer]
exten => s,1,
   same => n,Playback(pbx-transfer)
   same => n,Read(dest,dial,10,i,3,3)
   same => n,AttendedTransfer(${dest})
   same => n,Return()

[my_transfer]
include => default
;;;

Change-Id: Ie5cfa455d0813cffd5c85a6fb117f07d8f0b903b
2019-06-11 08:16:52 -06:00
agupta 67841b8f55 chan_pjsip.c: Check for channel and session to not be NULL in hangup
We have seen some rare case of segmentation fault in hangup function
and we could notice that channel pointer was NULL.  Debug log shows
that there is a 200 OK answer and SIP timeout at the same time.  It
looks that while the SIP session was being destroyed due to timeout
call hangup due to answer event lead to race condition and channel
is being destroyed from two different places.  The check ensures we
check it not to be NULL before freeing it.

ASTERISK-25371

Change-Id: I19f6566830640625e08f7b87bfe15758ad33a778
2019-06-10 06:47:24 -06:00
Alexei Gradinari dd12e1cbd3 app_blind_transfer: new application BlindTransfer
BlindTransfer redirects all channels currently bridged to the
caller channel to the specified destination.

This application can be useful with Custom Dynamic Features.
For example to make blind transfer to a predefined number.

features.conf
;;;
[applicationmap]
my_blindxfer => *6,self,GoSub,"my_blindxfer,s,1",default
;;;

extensions.conf
;;;
[globals]
DYNAMIC_FEATURES=my_blindxfer

[my_blindxfer]
exten => s,1,BlindTransfer(1234567890,default)
   same => n,Return()
;;;

This application also can be used to completly redefine Blind transfer
feature using dialplan. For example:

features.conf
;;;
[featuremap]
blindxfer =>

[applicationmap]
custom_blindxfer => ##,self,GoSub,"custom_blindxfer,s,1",default
;;;

extensions.conf
;;;
[globals]
DYNAMIC_FEATURES=custom_blindxfer

[custom_blindxfer]
exten => s,1,
   same => n,Playback(pbx-transfer)
   same => n,Read(dest,dial,10,i,3,3)
   same => n,BlindTransfer(${dest},default)
   same => n,Return()
;;;

Change-Id: I9d55e7f69ccfd4472dec00d62771d6de8803215a
2019-06-07 08:26:21 -06:00
Chris-Savinovich 45c1159c62 cdr_pgsql: fix error in connection string
Fixes an error occurring in function pgsql_reconnect() caused when value of
hostname is blank. Which in turn will cause the connection string to look
like this: "host= port=xx", which creates a sintax error. This fix now checks
if the corresponding values for host, port, dbname, and user are blank. Note
that since this is a reconnect function the database library will replace any
missing value pairs with default ones.

ASTERISK-28435

Change-Id: I0a921f99bbd265768be08cd492f04b30855b8423
2019-06-04 12:38:19 -06:00
Joshua Colp 1c665ae39b Merge "res_fax: fix segfault on inactive "reserved" fax session" into 13 2019-06-04 05:29:07 -05:00
Friendly Automation 6df25921ca Merge "app_readexten: new option 'p' to stop reading on '#' key" into 13 2019-06-03 09:54:45 -05:00
Friendly Automation 066ff4d3a8 Merge "res_fax: add channel name to CLI 'fax show session'" into 13 2019-06-03 09:34:59 -05:00
Friendly Automation e4d91ab4b2 Merge "pjsip: replace 180 by 183 if SDP negotiation has completed" into 13 2019-06-03 08:52:49 -05:00
Alexei Gradinari e306c62ff1 res_fax: fix segfault on inactive "reserved" fax session
The change #10017 "Handle fax gateway being started more than once"
introdiced a bug which leads to segfault in res_fax_spandsp.

The res_fax_spandsp module does not support reserving sessions, so
fax_session_reserve returns a fax session with state AST_FAX_STATE_INACTIVE.

The fax_gateway_start does not create a real fax session if the fax session
is already present and the state is not AST_FAX_STATE_RESERVED.
But the "reserved" session created for res_fax_spandsp has state
AST_FAX_STATE_INACTIVE, so fax_gateway_start not starting.

Then when fax_gateway_framehook is called and gateway T.38 state is
NEGOTIATED the call of gateway->s->tech->write(gateway->s, f) leads to
segfault, because session tech_pvt is not set, i.e. the tech session
was not initialized/started.

This patch adds check also on AST_FAX_STATE_INACTIVE to the "reserved"
session created for res_fax_spandsp will start.

This patch also adds extra check and log ERROR if tech_pvt is not set
before call tech->write.

ASTERISK-27981 #close

Change-Id: Ife3e65e5f18c902db2ff0538fccf7d28f88fa803
2019-06-03 07:30:07 -06:00
Asterisk Development Team fba341af8b Update CHANGES and UPGRADE.txt for 13.27.0 2019-05-30 11:59:20 -05:00
Friendly Automation 7dd93bfe9a Merge "build: Fix file format in CHANGES-staging." into 13 2019-05-30 05:17:46 -05:00
Nasir Iqbal f7527921b6 app_amd: issue with silence suppression fixed
Now AMD algorithm will not ignore AST_FRAME_NULL, As I think using manual
wait time instead of `framelength` is enough to fix timeout / TOOLONG issue.

ASTERISK-28419 #close

Change-Id: I16ea2d6295bc99b975e8c092e5f9fbd9214debdb
2019-05-30 09:56:03 +00:00
Alexei Gradinari dfa513c565 res_fax: add channel name to CLI 'fax show session'
This patch adds a channel name to output of CLI 'fax show session'
and also expands the channel name field up to 30 characters on
CLI 'fax show sessions'

Change-Id: Id059c43ff41811f5e76712b83fb63b8f246da953
2019-05-29 11:13:33 -06:00
Ben Ford 6aeab9d5e7 build: Fix file format in CHANGES-staging.
One of the change files doesn't conform to the format that the release
scripts need in order to parse it.

Change-Id: Ie0b634cf27e4cbc671b9fe92993b6f2ecf60254c
2019-05-24 09:01:14 -05:00
Guido Falsi ac4921c373 chan_dahdi: add missing include.
After some definitions have been moved to asterisk/mwi.h the files
channels/chan_dahdi.h channels/sig_pri.c are missing this new
include.

ASTERISK-28427 #close

Change-Id: Ia8cc595eeda653324643f40dcd9799d4c3f0ac91
2019-05-23 16:44:07 +02:00
Alexei Gradinari 6ded762dbf app_readexten: new option 'p' to stop reading on '#' key
This patch adds the 'p' option.
The extension entered will be considered complete when a # is entered.

Change-Id: If77c40c9c8b525885730821e768f5dea71cf04c1
2019-05-23 08:37:18 -06:00
George Joseph d6fb8abd84 Merge "res_rtp_asterisk: Add ability to propose local address in ICE" into 13 2019-05-22 12:46:41 -05:00
Joshua Colp fc49632bbc pjproject-bundled: Add upstream timer fixes
Fixed #2191:
  - Stricter double timer entry scheduling prevention.
  - Integrate group lock in SIP transport, e.g: for add/dec ref,
    for timer scheduling.

ASTERISK-28161
Reported-by: Ross Beer

Change-Id: I2e09aa66de0dda9414d8a8259a649c4d2d96a9f5
2019-05-20 12:36:56 -06:00
George Joseph 90fe830a77 res_rtp_asterisk: Add ability to propose local address in ICE
You can now add the "include_local_address" flag to an entry in
rtp.conf "[ice_host_candidates]" to include both the advertized
address and the local address in ICE negotiation:

[ice_host_candidates]
192.168.1.1 = 1.2.3.4,include_local_address

This causes both 192.168.1.1 and 1.2.3.4 to be advertized.

Change-Id: Ide492cd45ce84546175ca7d557de80d9770513db
2019-05-17 17:49:51 -06:00
Alexei Gradinari 595d60846a pjsip: replace 180 by 183 if SDP negotiation has completed
The caller endpoint hears dead silence if a callee replies 180 (without SDP)
and the caller already received 183 (with SDP).
It happens because Asterisk sends 180 (WITH SDP) to the caller,
there are not incoming RTP packets from the callee
and Asterisk does not generate inband ringing,
so there are not any outgoing RTP packets to the caller.

This patch replaces 180 by 183 if SDP negotiation has completed,
as if the caller endpoint is configured with "inband_progress=yes".

In this case Asterisk will generate inband ringing untill Asterisk receive
incoming RTP packets from the callee.

ASTERISK-27994 #close

Change-Id: I7450b751083ec30d68d6abffe922215a15ae5a73
2019-05-16 08:47:28 -06:00
Friendly Automation fa98e8cacb Merge "Fixes for GCC 9" into 13 2019-05-15 06:21:57 -05:00
Friendly Automation 7067177be4 Merge "build: Pass --fno-partial-inlining to third-party when appropriate" into 13 2019-05-15 05:47:36 -05:00
Joshua Colp e6cedc77a4 Merge "pjsip_options.c: Allow immediate qualifies for new contacts." into 13 2019-05-13 14:11:32 -05:00
George Joseph 4337895aee Fixes for GCC 9
Various fixes for issues caught by gcc 9.  Mostly snprintf
trying to copy to a buffer potentially too small.

ASTERISK-28412

Change-Id: I9e85a60f3c81d46df16cfdd1c329ce63432cf32e
2019-05-10 10:19:50 -06:00
Friendly Automation 92832bf176 Merge "Revert "pjproject-bundled: Add upstream timer fixes"" into 13 2019-05-08 12:22:12 -05:00
George Joseph c41e3184e3 Revert "pjproject-bundled: Add upstream timer fixes"
This reverts commit cfeb8a59eb.

The fixes in question cause assert failures when pjproject
asserts are enabled.  Reverting in 13 until a solution is
found for all branches.

Change-Id: Iae5bd340e0543613185fecb63f9c86fa985fe664
2019-05-07 14:24:15 -05:00
Ben Ford f71a0e3f60 pjsip_options.c: Allow immediate qualifies for new contacts.
When multiple endpoints try to register close together using the same
AOR with qualify_frequency set, one contact would qualify immediately
while the other contacts would have to wait out the duration of the
timer before being able to qualify. Changing the conditional to check
the contact container count for a non-zero value allows all contacts to
qualify immediately.

Change-Id: I79478118ee7e0d6e76af7c354d66684220db9415
2019-05-07 11:25:55 -05:00
Friendly Automation 8b0029692f Merge "pjproject-bundled: Add upstream timer fixes" into 13 2019-05-06 05:43:28 -05:00
George Joseph 7646e2257f build: Pass --fno-partial-inlining to third-party when appropriate
When the gcc version is >= 8.2.1, we were already setting the
--fno-partial-inlining flag for Asterisk source files to get around
a gcc bug but we weren't passing the flag down to the bundled
builds of pjproject and jansson.

ASTERISK-28392

Change-Id: I99ede9bc35408ecd096f7d5369e8192d3dc75704
2019-05-03 12:31:06 -06:00
George Joseph cfeb8a59eb pjproject-bundled: Add upstream timer fixes
Fixed #2191:
  - Stricter double timer entry scheduling prevention.
  - Integrate group lock in SIP transport, e.g: for add/dec ref,
    for timer scheduling.

ASTERISK-28161
Reported-by: Ross Beer

Change-Id: I02a791fd1570a1e594a132b36c4ff72441108c17
2019-05-03 07:52:09 -06:00
George Joseph 9d8a093a94 res_pjsip: Check return from pjsip_parse_uri calls
Updated ast_sip_create_rdata_with_contact and registrar_find_contact
to check the return from pjsip_parse_uri before attempting to
use the uri returned.

ASTERISK-28402
Reported-by: Ross Beer

Change-Id: I9810b3b163c45ed5a56ec743586e5ce107f13ba7
2019-05-02 12:29:49 -06:00
George Joseph 6edef49525 Merge "mwi core: Move core MWI functionality into its own files" into 13 2019-04-30 10:42:13 -05:00
Friendly Automation 66aa081bb3 Merge "app_amd: Fix infinite loop on silent calls" into 13 2019-04-30 10:03:43 -05:00
Friendly Automation 57a9935ae0 Merge "stasis: Fix crash at shutdown." into 13 2019-04-30 05:45:13 -05:00
agupta 188b1d3e68 app_amd: Fix infinite loop on silent calls
The total time logic will now be executed on calls which
do not pass any media.

ASTERISK-28143

Change-Id: I24726bd29d7e467fc721ca265363417234b22855
2019-04-30 04:15:26 -06:00
Friendly Automation 10b46eea9e Merge "app_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings" into 13 2019-04-25 14:06:05 -05:00
Ben Ford 4589260961 stasis: Fix crash at shutdown.
When compiling in dev mode, stasis statistics are enabled and can cause
a crash at shutdown due to the following:
- Containers are freed
- Topics and subscriptions remain
- When those topics and subscriptions are deallocated, they go to do
  things with the container

This changes the containers to global ao2 objects, and whenever needed
in the code, a reference must be obtained and checked before any
operations can be done.

ASTERISK-28353 #close

Change-Id: Ie7d5e907fcfcb4d65bd36d5e4eb923126fde8d33
2019-04-24 08:47:35 -05:00
Antoni Goldstein 001e7762e4 app_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings
Added RINGTIME, RINGTIME_MS, PROGRESSTIME, PROGRESSTIME_MS variables filled
at the earliest received PROGRESS or RINGING.
Added millisecond versions of DIALEDTIME and ANSWEREDTIME.

Added millisecond versions of ast_channel_get_up_time and
ast_channel_get_duration in channel.c.

ASTERISK-28363

Change-Id: If95f1a7d8c4acbac740037de0c6e3109ff6620b1
2019-04-24 08:27:28 -04:00
Kevin Harwell 4ea20c9c85 mwi core: Move core MWI functionality into its own files
There is enough MWI functionality to warrant it having its own 'c' and header
files. This patch moves all current core MWI data structures, and functions
into the following files:

main/mwi.h
main/mwi.c

Note, code was simply moved, and not modified. However, this patch is also in
preparation for core MWI changes, and additions to come.

Change-Id: I9dde8bfae1e7ec254fa63166e090f77e4d3097e0
2019-04-23 17:39:40 -05:00
Friendly Automation e1e9274c57 Merge "ARI: Bump non-breaking version number to 1.10.2" into 13 2019-04-23 16:42:00 -05:00
Friendly Automation 72170f73e4 Merge "core/buildsystem: check the actual compiler being version" into 13 2019-04-23 15:23:41 -05:00
George Joseph 6d4023e3a6 ARI: Bump non-breaking version number to 1.10.2
main/json.c: Added app_name, app_data to channel type
res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics
res/res_ari: Added timestamp as a requirement for all ARI events

Change-Id: Ie0da5b0cf0623b0d0fddbb864f73cb676c2b55cd
2019-04-22 14:45:01 -06:00
Friendly Automation dcd26ce6ac Merge "res_indications: Fix indications remove command autocomplete" into 13 2019-04-22 08:48:50 -05:00
Guido Falsi 8ee69fbdd0 core/buildsystem: check the actual compiler being version
Make compiler check use the output of the actual compiler being
used as reported by the CC variable, instead of unconditionally
running the "gcc" binary.  Also only run the check if the compiler
is gcc or a cross-compile gcc.

ASTERISK-28374

Change-Id: Icaacf6d93686ad21076878aa1504a23b4fc9d0f4
2019-04-22 07:04:40 -06:00
Lucas Mendes aaee0fa6f5 res_indications: Fix indications remove command autocomplete
We changed the validation of autocomplete parameter in the "indications
remove" command to avoid continue the execution of the command after
asking for autocomplete out of range parameters.

ASTERISK-28391
Reported by: lmendes86

Change-Id: I92b24131fd02f2e3c7fec966eea6f7a663310d40
2019-04-19 16:33:49 +02:00
Dan Cropp 00588226c6 res_pjsip: Added a norefersub configuration setting
Added a new PJSIP global setting called norefersub.
Default is true to keep support working as before.

res_pjsip_refer:  Configures PJSIP norefersub capability accordingly.

Checks the PJSIP global setting value.
If it is true (default) it adds the norefersub capability to PJSIP.
If it is false (disabled) it does not add the norefersub capability
to PJSIP.

This is useful for Cisco switches that do not follow RFC4488.

ASTERISK-28375 #close
Reported-by: Dan Cropp

Change-Id: I0b1c28ebc905d881f4a16e752715487a688b30e9
2019-04-18 08:05:39 -06:00
Friendly Automation 94bbd75745 Merge "res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority" into 13 2019-04-18 05:40:54 -05:00
Friendly Automation bb1280b8c1 Merge "pbx.c: Ignore dashes in extensions when using extenpatternmatchnew" into 13 2019-04-16 12:09:24 -05:00
Friendly Automation 57f4bbf61f Merge "app_voicemail: Don't split mailbox options on comma" into 13 2019-04-16 11:32:19 -05:00
Sean Bright 33ed8fdadc res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority
Suggested by abelbeck on the issue tracker.

ASTERISK~28384
Reported by: abelbeck

Change-Id: Icee0fff2b58dbfaa80f2b68270fe69dfb0463fc0
2019-04-16 12:03:52 -04:00
Benjamin Keith Ford d15f01b294 Merge "build: Revise CHANGES and UPGRADE.txt handling." into 13 2019-04-16 10:52:21 -05:00
Joshua Colp 4cde7de0f0 Merge "res_ael: Use Gosub in for loop expressions" into 13 2019-04-16 08:08:51 -05:00
Joshua Colp 2a0e47e9cb Merge "res_ael: Fix pattern matching against literal '+'" into 13 2019-04-16 07:25:32 -05:00
George Joseph e61e436b38 Merge "CI: Move test group config files to Jenkins" into 13 2019-04-15 08:06:21 -05:00
George Joseph 2fe9fd5cf9 CI: Move test group config files to Jenkins
One of the downaides of having things like test configuration
in the git repo is that it can't be changed at runtime.  You have
to create a review for the changes and merge it mefore it will
take effect.

This review moves the data currently held in
tests/CI/periodic-dailyTestGroups.json and
tests/CI/gateTestGroups.json into a Jenkins Config File attached
to the job definitions.  This allows us to alter it from the
Jenkins UI at runtime.  The original files stay in the repo
as documentation.

Change-Id: I14b9702f6285ce1fb2420287ba0e7d3b59109763
2019-04-15 06:48:18 -06:00
Sean Bright d2f519dcfa app_voicemail: Don't split mailbox options on comma
Because the per-mailbox options are the last thing on a line, don't look
for or stomp on any subsequent commas.

ASTERISK-27935 #close
Reported by: Sébastien Duthil

Change-Id: I07b2eb4a33c303d0c7114d5b906f8c067c60a153
2019-04-13 14:37:46 -04:00
George Joseph 52b956e3eb Merge "res_ael: Create consistent label names across reloads" into 13 2019-04-12 14:16:19 -05:00
George Joseph 0eebc70592 Merge "pbx.c: Properly parse labels with leading digits" into 13 2019-04-12 14:15:59 -05:00
Sean Bright 79a620080c pbx.c: Ignore dashes in extensions when using extenpatternmatchnew
Because hyphens are not matched literally in Asterisk dialplan, we need
to ignore them in our candidate extensions as well.

ASTERISK-17695 #close
Reported by: test011

Change-Id: I227f02301577b1633e8a55b9fe9dc149935c03f0
2019-04-12 11:21:58 -04:00
Friendly Automation 13af11b495 Merge "app_voicemail: Cleanup stale lock files on module load" into 13 2019-04-12 09:59:42 -05:00
Friendly Automation ce92860995 Merge "chan_ooh323: fix h323 log file path" into 13 2019-04-12 09:18:16 -05:00
Sean Bright fd2e8d0da7 app_voicemail: Cleanup stale lock files on module load
If Asterisk crashes while a VM directory is locked, lock files in the VM
spool directory will not get properly cleaned up. We now clear them on
module load.

ASTERISK-20207 #close
Reported by: Steven Wheeler

Change-Id: If40ccd508e2f6e5ade94dde2f0bcef99056d0aaf
2019-04-12 07:13:20 -06:00
Sean Bright 9051e62523 res_ael: Create consistent label names across reloads
Reset the internal counter that the AEL2 compiler uses for unique label
names before compiling. This keeps dialplan labels consistent across
reloads assuming the AEL2 has not changed.

ASTERISK-17799 #close
Reported by: Kirill Katsnelson

Change-Id: I30b3cc887d1ee0644d3f341e2fef16f525d7fae5
2019-04-11 16:49:36 -04:00
Sean Bright 237989a5e8 res_ael: Use Gosub in for loop expressions
In AEL2, if a 'for' statement contains macro* calls, like:

    for (&iterator(${TRY},A); "${A}" != ""; &iterate(A)) {

The AEL2 parser will translate these into calls to the deprecated Macro
dialplan application and use the antiquated pipe delimiter.

Instead, convert these into calls to the Gosub dialplan application and
use commas as argument separators.

ASTERISK-18593 #close
Reported by: Luke-Jr

* 'macro' in this context means AEL2 macros, not the 'Macro' application

Change-Id: I3d73716033b8e3e42e0209d355bf5f10c97045fc
2019-04-11 16:36:49 -04:00
Sean Bright f66f21895f res_ael: Fix pattern matching against literal '+'
When generating the regular expression that matches against existing
extensions, we need to escape literal characters that can also be
regular expression metacharacters. This was already being done for '*'
but we need to do the same for '+'.

In passing, remove some unreachable code - strcmp() is already run
immediately when entering extension_matches().

ASTERISK-14939 #close
Reported by: klaus3000

Change-Id: I8d2cccb3479168fba1b0a6704c52198b396468f1
2019-04-11 14:10:25 -06:00
George Joseph a981ec141d Merge "res_pjsip: Fix transport_states ref leak" into 13 2019-04-11 15:00:29 -05:00
Sean Bright 7666fdc394 pbx.c: Properly parse labels with leading digits
If the target of a Goto is a label that starts with a number, we
erroneously treat the leading digits as a priority.

ASTERISK-20182 #close
Reported by: Janu

Change-Id: Ia78408c0805a729103917247ecfc802f6fafc94b
2019-04-11 14:37:34 -04:00
Alexander Anikin 9a1e8090c3 chan_ooh323: fix h323 log file path
Change h323 log path relative to AST_LOG_DIR instead of
/var/log/asterisk hardcoded
Add return back error message from OOH323EP initialize

ASTERISK-28348 #close

Reported by: Dmitry Shubin

Change-Id: Ib102dd36bbe6c2a7a4ce6870ae9110d9000d7e98
2019-04-11 02:12:16 +03:00
George Joseph 1a4fbaa52e Merge "chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info" into 13 2019-04-10 12:43:15 -05:00
Alexei Gradinari cb24eb4cc2 res_pjsip: Fix transport_states ref leak
Add missing ao2_ref(transport_state, -1) while iterate on a transport_states
container.

Change-Id: I40e35b5a339121300c80075c30db47201a6c374e
2019-04-10 08:37:59 -06:00
Joshua Colp cef62d4ffc Merge "config.c: Fix a crash in extconfig parsing" into 13 2019-04-10 06:40:46 -05:00
Ben Ford 251348cbbb build: Revise CHANGES and UPGRADE.txt handling.
This changes the way that we handle adding changes to CHANGES and
UPGRADE.txt. The reason for this is because whenever someone needed to
make a change to one of these files and someone else had already done
so, you would run into merge conflicts. With this new setup, there will
never be merge conflicts since all changes will be documented in the
doc/<file>-staging directory. The release script is now responsible for
merging all of these changes into the appropriate files.

There is a special format that these files have to follow in order to be
parsed. The files do not need to have a meaningful name, but it is
strongly recommended. For example, if you made a change to pjsip, you
may have something like this "res_pjsip_relative_title", where
"relative_title" is something more descriptive than that. Inside each
file, you will need a subject line for your change, followed by a
description. There can be multiple subject lines. The file may look
something like this:

   Subject: res_pjsip
   Subject: Core

   A description that explains the changes made and why. The release
   script will handle the bulleting and section separators!

   You can still separate with new lines within your description.

The headers ("Subject" and "Master-Only") are case sensative, but the
value for "Master-Only" ("true" or "True") is not.

For more information, check out the wiki page:
https://wiki.asterisk.org/wiki/display/AST/CHANGES+and+UPGRADE.txt

ASTERISK-28111 #close

Change-Id: I19cf4b569321c88155a65e9b0b80f6d58075dd47
2019-04-09 09:39:37 -05:00
Friendly Automation 6531f8b2ea Merge "CI: Add --no-dev-mode option to buildAsterisk.sh" into 13 2019-04-08 10:53:20 -05:00
Friendly Automation e7de71ee24 Merge "main/json.c: Added app_name, app_data to channel type" into 13 2019-04-08 10:34:56 -05:00
Friendly Automation 7b64432c4e Merge "res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics" into 13 2019-04-08 10:27:07 -05:00
Chris-Savinovich f9bb53a1dd config.c: Fix a crash in extconfig parsing
When extconfig.conf file is parsed, the code previously searched for
character comma without verifying if error (null or blank).  This caused
a segmentation error.

Change-Id: Id76b452d8f330d11c2742c37232761ad71472a8b
2019-04-05 15:41:50 -06:00
Salah Ahmed a9a0303544 chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info
When the dtmf_mode on an endpoint is configured as "auto_info"
Asterisk will produce an inband DTMF tone alongside an INFO
message when sending DTMF.

ASTERISK-28371

Change-Id: I1380b82f006e110a1b83fbb50c9873edd13a5d9a
2019-04-05 08:29:12 -03:00
sungtae kim 707897e5f7 main/json.c: Added app_name, app_data to channel type
It was difficult to check the channel's current application and
parameters using ARI for current channels. Added app_name, app_data
items to show the current application information.

ASTERISK-28343

Change-Id: Ia48972b3850e5099deab0faeaaf51223a1f2f38c
2019-04-05 02:28:25 +02:00
Friendly Automation a5b463cabf Merge "res/res_rtp_asterisk: Enable rxjitter calculation for video" into 13 2019-04-04 08:29:18 -05:00
George Joseph b3faf7311a CI: Add --no-dev-mode option to buildAsterisk.sh
The new option disables dev mode, TEST_FRAMEWORK and
MALLOC_DEBUG making the build more production-like.

Change-Id: Ieb72497d4d91d5416684aaed702cc3f532099738
2019-04-03 16:55:00 -06:00
Ben Ford 4853fc2218 build: Fix compiler warnings/errors.
The compiler complained about a couple of variables that weren't
initialized but were being used. Initializing them to NULL resolves the
warnings/errors.

ASTERISK-28362 #close

Change-Id: I6243afc5459b416edff6bbf571b0489f6b852e4b
2019-04-03 09:36:28 -06:00
Matthew Fredrickson 1c7bc63cff res/res_rtp_asterisk: Enable rxjitter calculation for video
It looks like we're not properly calculating jitter values on received
video streams.  This patch enables the code that does jitter calculations
for those streams.

Change-Id: Iaac985808829c8f034db8c57318789c4c8c11392
2019-04-02 15:48:27 +00:00
George Joseph d049155303 Merge "pjproject: Add timer patch from pjproject r5934" into 13 2019-04-02 10:28:15 -05:00
Friendly Automation 664f706771 Merge "alembic: Fix errors during upgrade head." into 13 2019-03-28 14:46:35 -05:00
Ben Ford 4de27f332d alembic: Fix errors during upgrade head.
When trying to upgrade using alembic, a couple different errors kept
popping up that prevented the upgrade. An additional parameter was
needed when changing the schema for mwi_subscribe_replaces_unsolicited
from an integer to an enum. When changing from a string to an enum, the
type needed to be cast for postgresql. The other issue was a parameter
being used during column creation that did not exist.

After fixing the upgrade process, it revealed errors with the downgrade
process. One was a variable not being defined in the downgrade function,
and the other was tables not existing when using MySQL. This was due to
a context check that should have encompassed MySQL, but in the end was
not doing so.

Change-Id: Ib4d70cf3ce5080023a50be496272a777b55d6c8e
2019-03-28 09:17:46 -05:00
George Joseph 0fdfac87f3 Merge "manager: Use separate lock for session event notification." into 13 2019-03-28 08:03:51 -05:00
Friendly Automation df4a7a8fae Merge "pjsip: restrict function PJSIP_PARSE_URI to parse only SIP/SIPS URIs" into 13 2019-03-27 18:05:59 -05:00
sungtae kim fb7aa52ae0 res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics
Added ARI resource for channel statistics.
GET /ari/channels/{channelId}/rtp_statistics : It returns given
channel's rtp statistics detail.

ASTERISK-28320

Change-Id: I4343eec070438cec13f2a4f22e7fd9e574381376
2019-03-27 22:55:49 +01:00
George Joseph bcc3b86ca5 Merge "app_queue: Fix documentation for QUEUE_MEMBER function." into 13 2019-03-27 14:31:13 -05:00
Ben Ford 90c1653997 build: Add staging directories for future changes.
This is the first step in changing the release process so that changes
made to the CHANGES and UPGRADE.txt files do not result in merge
conflicts every time multiple people modify these files. The changes
made will go in these new directories: doc/CHANGES-staging and
doc/UPGRADE-staging. The README.md files explain how things will work,
but here's a little overview. When you make a change that would go in
either CHANGES or UPGRADE.txt, this should instead be documented in a
new file in the doc/CHANGES-staging or doc/UPGRADE-staging directory,
respectively. The format will look like this:

   Subject: res_pjsip

   A description that explains the changes made and why. The release
   script will handle the bulleting and section separators! The
   'Subject:' header is case-sensitive.

   You can still separate with new lines within your description.

   Subject: res_ari
   Master-Only: true

   You can have more than one subject, and they don't have to be the
   same! Also, the 'Master-Only' header should always be true and is
   also case-sensitive (but the value is not - you can have 'true' or
   'True'). This header will only ever be present in the master branch.

For more information, check out the wiki page:
https://wiki.asterisk.org/wiki/display/AST/CHANGES+and+UPGRADE.txt

This is an initial change for ASTERISK_28111. Functionally, this will
make no difference, but it will prep the directories for when the
changes from CHANGES and UPGRADE.txt are extracted.

Change-Id: I8d852f284f66ac456b26dcb899ee46babf7d15b6
2019-03-27 13:32:09 -05:00
Alexei Gradinari 6e20e071a9 pjsip: restrict function PJSIP_PARSE_URI to parse only SIP/SIPS URIs
The next usage of PJSIP_PARSE_URI will crash asterisk
${PJSIP_PARSE_URI(tel:+1234567890,host)}
or
${PJSIP_PARSE_URI(192.168.1.1:5060,host)}

The function pjsip_parse_uri successfully parses then, but returns
struct pjsip_other_uri *.

This patch restricts parsing only SIP/SIPS URIs.

Change-Id: I16f255c2b86a80a67e9f9604b94b129a381dd25e
2019-03-27 10:07:55 -06:00
Joshua Colp c289bac4d3 Merge "chan_sip: Ensure 'qualifygap' isn't negative" into 13 2019-03-27 06:00:03 -05:00
Sean Bright 4a6bd68869 app_queue: Fix documentation for QUEUE_MEMBER function.
It was a copy/paste of the QUEUE_MEMBER_COUNT function's synopsis.

ASTERISK-20986 #close
Reported by: Olivier Krief

Change-Id: If51ec481feb35824a4e78ab5600b197b819b10be
2019-03-26 17:55:55 -04:00
Sean Bright 33647ebe2c pjproject: Add timer patch from pjproject r5934
ASTERISK-28161 #close
Reported by: Ross Beer

Change-Id: I65331d554695753005eaa66c1d5d4807fe9009c8
2019-03-26 14:09:31 -04:00
Joshua Colp 03708f435c manager: Use separate lock for session event notification.
When notifying a manager session that new events were available
the same lock was used that was also held when doing things within
the session (such as sending events out). If the manager session
blocked for a period of time this would cause a back up of messages
in Stasis and would also block any other sessions from receiving
events.

This change adds a separate lock to the manager session which is
strictly used for notifying it that new events are available.

ASTERISK-28350

Change-Id: Ifbcac007faca9ad0231640f5e82a6ca9228f261b
2019-03-26 10:37:09 -03:00
Friendly Automation ac7caa269c Merge "res/res_ari: Added timestamp as a requirement for all ARI events" into 13 2019-03-26 08:34:08 -05:00
Friendly Automation e821071943 Merge "res_config_odbc: set empty extended field as a single whitespace" into 13 2019-03-26 08:07:13 -05:00
sungtae kim 04d1bc3df0 res/res_ari: Added timestamp as a requirement for all ARI events
Changed to requirement to having timestamp for all of ARI events.
The below ARI events were changed to having timestamp.
PlaybackStarted, PlaybackContinuing, PlaybackFinished,
RecordingStarted, RecordingFinished, RecordingFailed,
ApplicationReplaced, ApplicationMoveFailed

ASTERISK-28326

Change-Id: I382c2fef58f5fe107e1074869a6d05310accb41f
2019-03-25 22:50:17 +01:00
Sean Bright 53aa750839 chan_sip: Ensure 'qualifygap' isn't negative
Passing negative intervals to the scheduler rips a hole in the
space-time continuum.

ASTERISK-25792 #close
Reported by: Paul Sandys

Change-Id: Ie706f21cee05f76ffb6f7d89e9c867930ee7bcd7
2019-03-25 15:31:26 -04:00
Alexei Gradinari 3b1cf67fa9 res_config_odbc: set empty extended field as a single whitespace
If Realtime @ variable value is NULL or empty or contains only whitespaces
then when we try to retrieve it using PJSIP_ENDPOINT we get WARNING
pjsip_endpoint_function_read: Unknown property @my_var for PJSIP endpoint.
And the variable is missing in the result of CLI pjsip show endpoint.

This patch keeps empty sorcery extended field.

ASTERISK-28341 #close

Change-Id: I221fccc04cbfa2be17ce971f64ae0e74e465eea0
2019-03-25 10:44:07 -06:00
Matthew Fredrickson 4315634bc9 main/taskprocessor: Increase max name length of taskprocessors
Since the new names went in, the maximum taskprocessor name is too
short.  This patch increases the name field to a length to better
handle the new names.

Change-Id: I32f32d6926f25c8ef5a91303fd2988d2c2858877
2019-03-25 07:14:23 -06:00
George Joseph 85f87790a5 Merge "sorcery.c: Sorcery enhancements for wizard management" into 13 2019-03-19 10:23:20 -05:00
George Joseph f45178db28 Merge "res/res_stasis: Fixed wrong StasisEnd timestamp" into 13 2019-03-19 09:26:57 -05:00
George Joseph 69b194c837 sorcery.c: Sorcery enhancements for wizard management
Added ability to specifiy a wizard is read-only when applying
it to a specific object type.  This allows you to specify
create, update and delete callbacks for the wizard but limit
which object types can use them.

Added the ability to allow an object type to have multiple
wizards of the same type.  This is indicated when a wizard
is added to a specific object type.

Added 3 new sorcery wizard functions:

* ast_sorcery_object_type_insert_wizard which does the same thing
  as the existing ast_sorcery_insert_wizard_mapping function but
  accepts the new read-only and allot-duplicates flags and also
  returns the ast_sorcery_wizard structure used and it's internal
  data structure. This allows immediate use of the wizard's
  callbacks without having to register a "wizard mapped" observer.

* ast_sorcery_object_type_apply_wizard which does the same
  thing as the existing ast_sorcery_apply_wizard_mapping function
  but has the added capabilities of
  ast_sorcery_object_type_insert_wizard.

* ast_sorcery_object_type_remove_wizard which removes a wizard
  matching both its name and its original argument string.

* The original logic in __ast_sorcery_insert_wizard_mapping was moved
  to __ast_sorcery_object_type_insert_wizard and enhanced for the
  new capabilities, then __ast_sorcery_insert_wizard_mapping was
  refactored to just call __ast_sorcery_insert_wizard_mapping.

* Added a unit test to test_sorcery.c to test the read-only
  capability.

Change-Id: I40f35840252e4313d99e11dbd80e270a3aa10605
2019-03-18 11:38:16 -06:00
Friendly Automation 1274bc5af6 Merge "vector: Add AST_VECTOR_COMPACT() to reclaim wasted space" into 13 2019-03-18 06:26:12 -05:00
Friendly Automation 5c70d0c1b9 Merge "Variable ALTCONF ignored when service is used in Debian" into 13 2019-03-18 05:34:55 -05:00
George Joseph 93d5e4b106 Merge "app.c: Remove deletion of pool topic on mwi state delete" into 13 2019-03-15 18:30:29 -05:00
sungtae kim dc94a3180e res/res_stasis: Fixed wrong StasisEnd timestamp
Because StasisEnd's timestamp created it's own timestamp, it makes
wrong timestamp, compare to other channel event(ChannelDestroyed).
Fixed to getting a timestamp from the Channel's timestamp.

ASTERISK-28333

Change-Id: I5eb8380fc472f1100535a6bc4983c64767026116
2019-03-15 22:44:53 +01:00
Sean Bright cc954977eb vector: Add AST_VECTOR_COMPACT() to reclaim wasted space
This might be useful in situations where you are loading an undetermined number
of items into a vector and don't want to keep (potentially) 2x the necessary
memory around indefinitely.

Change-Id: I9711daa0fe01783fc6f04c5710eba84f2676d7b9
2019-03-15 16:03:03 -04:00
Richard Mudgett f4bb80ba85 taskprocessor.c: Fix printf type mismatch
A size_t is not always an unsigned long.

* Use the %zu format specifier in the ast_cli() printf format string since
AST_VECTOR_SIZE() returns a size_t value.

Change-Id: Ib102dd36bbe6c2a7a4ce6870ae9110d978dd7e98
2019-03-14 13:41:55 -05:00
Friendly Automation 3df8d605cc Merge "AMI/ARI: Bump non-breaking version numbers" into 13 2019-03-14 09:42:24 -05:00
George Joseph c87158f2da app.c: Remove deletion of pool topic on mwi state delete
As part of an earlier voicemail refactor, ast_delete_mwi_state_full
was modified to remove the pool topic for a mailbox when the state
was deleted.  This was an attempt to prevent stale topics from
accumulating when app_voicemail was reloaded and a mailbox went
away.  Unfortunately because of the fact that when app_voicemail
reloads, ALL mailboxes are deleted then only current ones recreated,
topics were being removed from the pool that still had subscribers
on them, then recreated as new topics of the same name.  So now
modules like res_pjsip_mwi are listening on a topic that will
never receive any messages because app_voicemail is publishing on
a different topic that happens to have the same name.  The solutiuon
to this is not easy and given that accumulating topics for
deleted mailboxes is less evil that not sending NOTIFYs...

* Removed the call to stasis_topic_pool_delete_topic in
  ast_delete_mwi_state_full.

Also:

* Fixed a topic reference leak in res_pjsip_mwi
  mwi_stasis_subscription_alloc.

* Added some debugging to mwi_stasis_subscription_alloc,
  stasis_topic_create, and topic_dtor.

* Fixed a topic reference leak in an error path in
  internal_stasis_subscribe.

ASTERISK-28306
Reported-by: Jared Hull

Change-Id: Id7da0990b3ac4be4b58491536b35f41291247b27
2019-03-14 10:31:10 -04:00
Joshua C. Colp c7d58aec7a Merge "stasis: Improve topic/subscription names and statistics." into 13 2019-03-14 09:21:38 -05:00
Joshua C. Colp 9b5136ddc3 Merge "stasis: Allow empty application arguments to move." into 13 2019-03-13 11:33:37 -05:00
Kevin Harwell 5d67b8b144 Merge "app_queue: fix ring_entry to access nativeformats with a channel lock" into 13 2019-03-13 11:17:30 -05:00
Kevin Harwell 9717d1672c Merge "chan_dahdi: Add logical group at DAHDIChannel event and CHANNEL function" into 13 2019-03-13 10:55:01 -05:00
Joshua Colp f0254cc1e9 stasis: Allow empty application arguments to move.
Change-Id: I1e4d37415f3034abe36496dc30209c2303e6af5c
2019-03-13 10:55:37 -03:00
Joshua C. Colp aa9091dcdd Merge "partial-inlining: disable partial-inlining if gcc>=8.2.1" into 13 2019-03-13 06:41:43 -05:00
Joshua C. Colp aa0ff97c3b Merge "Makefile.moddir_rules: Pass PJPROJECT_BUNDLED to download_externals" into 13 2019-03-13 06:03:12 -05:00
Dömsödi Gergely 92d1889813 app_queue: fix ring_entry to access nativeformats with a channel lock
Fixes an intermittent segmentation fault which occured when accessing
nativeformats of a channel which entered into a queue.

ASTERISK-27964
Reported by: Francisco Seratti

Change-Id: Ic87fa7a363f3b487c24ce07032f4b2201c22db9e
2019-03-13 04:49:34 -06:00
Joshua C. Colp 48e64c5dc2 Merge "res/res_rtp_asterisk.c: Fixing possible divide by zero" into 13 2019-03-13 05:37:04 -05:00
Kevin Harwell a96729c1cd AMI/ARI: Bump non-breaking version numbers
Increasing the non-breaking AMI and ARI version numbers due to changes and
additions in those API's. Note, some changes may be forthcoming (will be added
between now and the next release of Asterisk), thus not listed here. As well
a few changes listed below may have been released in a previous release of
Asterisk, but the API version numbers were not increased at that time, so
including here.

AMI:

 * res_pjsip: option for ContactStatus event updates - 4a8564c

ARI:

 * bridging: Add creation timestamps - 4dd4dbd
 * res_stasis: Add ability to switch applications - 65170ba
 * ARI event type filtering - da93d17
 * Added ARI resource /ari/asterisk/ping - 67d587f

ASTERISK-28314

Change-Id: I96951b19c27c196e410b09fe82b00c8ca328cccc
2019-03-12 15:57:47 -05:00
George Joseph ee75df6ec9 Makefile.moddir_rules: Pass PJPROJECT_BUNDLED to download_externals
The download_externals script wasn't getting the PJPROJECT_BUNDLED
environment variable passed down to it so it wasn't downloading
the appropriate variant of res_digium_phone.  This could cause
crashes in the DPMA.

Change-Id: I5daa9369c7af1fd556d892e89a85f279a2533425
2019-03-12 12:25:33 -06:00
Chris-Savinovich 29d2d22e82 partial-inlining: disable partial-inlining if gcc>=8.2.1
Apply flag -fno-partial-inlining on default optimization if and only if
gcc version >= 8.2.1 (this is the current ver on Fedora and Ubuntu).
This is done to avoid a bug that causes arithmetic calculations to fail
if the following conditions are met:
1. TEST_FRAMEWORK on
2. DONT_OPTIMIZE off
3. Fedora and Ubuntu
4. GCC 8.2.1
5. There must exist a certain combination of multithreading.
6. Optimization level -O2 and -O3
7. Flag -fpartial-inline activated (default when optimization level>=2)
The following link points to a similar gcc bug reported in 2015. This leads me
to believe the bug has regressed. Note I am not able to replicate this bug
in an environment other than Asterisk + Test Framework + Test_cel because the
multithreading combination that causes it seems to be unique. Therefore I
am temporarily abandoning any thoughts of reporting the new occurrence of this
bug to gcc.gnu.org.  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65307

Change-Id: Ibd1afe60e0a38b88e85fdcd9b051004601c2f102
2019-03-11 11:21:21 -06:00
George Joseph ce0d50541d Merge "app_meetme: Don't mute joining admins if conference is muted" into 13 2019-03-11 09:48:35 -05:00
Joshua Colp 07b3253155 stasis: Improve topic/subscription names and statistics.
Topic names now follow: <subsystem>:<functionality>[/<object>]

This ensures that they are all unique, and also provides better
insight in to what each topic is for.

Subscriber ids now also use the main topic name they are
subscribed to and an incrementing integer as their identifier to
make it easier to understand what the subscription is primarily
responsible for.

Both the CLI commands for listing topic and subscription statistics
now sort to make it a bit easier to see what is going on.

Subscriptions will now show all topics that they are receiving messages
from, not just the main topic they were subscribed to.

ASTERISK-28335

Change-Id: I484e971a38c3640f2bd156282e532eed84bf220d
2019-03-11 11:39:08 -03:00
Friendly Automation 4f6daa0aff Merge "chan_pjsip: add a flag to ignore 183 responses if no SDP present" into 13 2019-03-11 08:49:46 -05:00
sungtae kim 4bdf24a689 res/res_rtp_asterisk.c: Fixing possible divide by zero
Currently, when the Asterisk calculates rtp statistics, it uses
sample_count as a unsigned integer parameter. This would be fine
for most of cases, but in case of large enough number of sample_count,
this might be causing the divide by zero error.

ASTERISK-28321

Change-Id: If7e0629abaceddd2166eb012456c53033ea26249
2019-03-11 06:09:47 -06:00
cirillor 68d2304621 Variable ALTCONF ignored when service is used in Debian
When variable ALTCONF is defined, the command start prints the message
"Unable to open specified master config file '"/etc/asterisk/asteris..."
and use default configurations.

ASTERISK-28332

Change-Id: I7595e582a0ee2c1051ea35435e247e27906957ef
2019-03-09 11:39:26 -03:00
Torrey Searle cbc704c5ec chan_pjsip: add a flag to ignore 183 responses if no SDP present
chan_sip will always ignore 183 responses that do not contain SDP
however, chan_pjsip will currently always translate it into a
183 with SDP.  This new flag allows chan_pjsip to have the same
behavior as chan_sip.

ASTERISK-28322 #close

Change-Id: If81cfaa17c11b6ac703e3d71696f259d86c6be4a
2019-03-08 13:13:03 -06:00
George Joseph 2c90b92da9 Merge "samples: Fix comment typo in pjsip.conf.sample" into 13 2019-03-08 12:44:20 -06:00
George Joseph c3189a696e Merge "res_stasis: Add ability to switch applications." into 13 2019-03-08 12:43:13 -06:00
Friendly Automation b5c0526443 Merge "Replace calls to strtok() with strtok_r()" into 13 2019-03-08 12:40:03 -06:00
Friendly Automation db18f8c959 Merge "bridging: Add creation timestamps" into 13 2019-03-08 11:15:13 -06:00
Sean Bright b4bba8f217 app_meetme: Don't mute joining admins if conference is muted
ASTERISK-28328 #close

Change-Id: I4f6069fb34923b7521520c2a205a1e56227e592b
2019-03-07 18:15:05 -05:00
Sean Bright 1cb6466268 Replace calls to strtok() with strtok_r()
strtok() uses a static buffer, making it not thread safe.

Change-Id: Icce265153e1e65adafa8849334438ab6d190e541
2019-03-07 16:42:10 -06:00
Sean Bright 9a4027ad41 samples: Fix comment typo in pjsip.conf.sample
Change-Id: I84a45c3d9fd26ca61aca99927eec83b57f1de857
2019-03-07 17:05:42 -05:00
Ben Ford 65170ba8f0 res_stasis: Add ability to switch applications.
Added the ability to move between Stasis applications within Stasis.
This can be done by calling 'move' in an application, providing (at
minimum) the channel's id and the application to switch to. If the
application is not registered or active, nothing will happen and the
channel will remain in the current application, and an event will be
triggered to let the application know that the move failed. The event
name is "ApplicationMoveFailed", and provides the "destination" that the
channel was attempting to move to, as well as the usual channel
information. Optionally, a list of arguments can be passed to the
function call for the receiving application. A full example of a 'move'
call would look like this:

client.channels.move(channelId, app, appArgs)

The control object used to control the channel in Stasis can now switch
which application it belongs to, rather than belonging to one Stasis
application for its lifetime. This allows us to use the same control
object instead of having to tear down the current one and create
another.

ASTERISK-28267 #close

Change-Id: I43d12b10045a98a8d42541889b85695be26f288a
2019-03-07 04:42:35 -06:00
cirillor 5065f31fca chan_dahdi: Add logical group at DAHDIChannel event and CHANNEL function
Add logical group at DAHDIChannel event
and create "dahdi_group" at CHANNEL function.

ASTERISK-28317

Change-Id: Ic1f834cd53982a9707a9748395ee746d6575086a
2019-03-05 12:01:24 -03:00
Friendly Automation 856f3e6895 Merge "sip_to_pjsip: Make multiline comment parsing consistent with Asterisk" into 13 2019-03-05 08:54:09 -06:00
Friendly Automation 0f51ee7d38 Merge "app_queue: Handle empty 'interface' in queue member config" into 13 2019-03-05 08:51:07 -06:00
Joshua Colp 7fb2a34edb Merge "res_pjsip_registrar: blocked threads on reliable transport shutdown take 3" into 13 2019-03-05 07:06:58 -06:00
Friendly Automation a103faca52 Merge "basic-pbx: Update configuration to work with current modules." into 13 2019-03-05 06:46:07 -06:00
Sean Bright cb6a976656 app_queue: Handle empty 'interface' in queue member config
While the 'interface' column is a NOT NULL, the empty string is still
allowed. res_config_odbc treats the empty string as a NULL and we crash
when trying to dereference.

Also cleaned up an adjacent error message for consistency.

ASTERISK-28168 #close

Change-Id: I55e012b540fbcda99bb40bede3099b7ae5db8202
2019-03-04 17:07:22 -05:00
Sean Bright 7bcbc0bdfd sip_to_pjsip: Make multiline comment parsing consistent with Asterisk
In Asterisk configuration, a multiline comment starts with ;-- as long as it is
not followed by another dash (i.e. ;--- is not a multiline comment).

ASTERISK-28323 #close

Change-Id: I32dc38e0fac01d3c0805d27d35d2365a7c37ca72
2019-03-04 13:39:23 -06:00
Friendly Automation 509e37d05e Merge "res_pjsip_diversion: Use static pj_str_t for Diversion header names" into 13 2019-03-04 05:47:54 -06:00
Joshua Colp 1f3d6e1ebf basic-pbx: Update configuration to work with current modules.
The res_pjsip_websocket module requires the res_http_websocket
module so ensure it is loaded. As well the res_pjsip_notify
module needs the pjsip_notify.conf configuration file so
ensure it is installed.

ASTERISK-28272

Change-Id: I261659b84e7a6ac4cb49990d9badb4b2ad01bacd
2019-03-04 10:58:06 +00:00
sungtae kim 4dd4dbddbb bridging: Add creation timestamps
This small feature will help to checking the bridge's status to
figure out which bridge is in old/zombie or not. Also added
detail items for the 'bridge show *' cli to provide more detail
info. And added creation item to the ARI as well.

ASTERISK-28279

Change-Id: I460238c488eca4d216b9176576211cb03286e040
2019-03-03 14:10:28 +01:00
Sean Bright 5821090661 res_pjsip_diversion: Use static pj_str_t for Diversion header names
PJSIP assumes that these header names are not allocated, and does not
clone the name strings when reusing headers.

Block unload of res_pjsip_diversion until shutdown to ensure static
memory stays valid.

ASTERISK-28312 #close

Change-Id: Ibd6ea55ec4a604bbd43ac07f8d0b54da2c39b8b9
2019-03-01 17:43:59 -05:00
Kevin Harwell 7e8833cc1c Merge "res_config_odbc: Avoid deadlock when max_connections = 1" into 13 2019-03-01 16:21:16 -06:00
Friendly Automation cdcba0d1b5 Merge "menuselect: Add license header to menuselect_gtk.c" into 13 2019-03-01 15:00:57 -06:00
Friendly Automation f0363d7ea8 Merge "Revert "pjsip_message_filter: Only do interface lookup for wildcard addresses."" into 13 2019-03-01 08:02:13 -06:00
Sean Bright aa8ab603b0 menuselect: Add license header to menuselect_gtk.c
This file was added to the Subversion repository on 2007-03-15 by
Russell Bryant, a Digium employee at the time.

ASTERISK-24173 #close

Change-Id: Ie866fa9d31d550467613d362b35b03c031ee594d
2019-02-28 16:38:21 -05:00
Sean Bright c38c8db14a res_config_odbc: Avoid deadlock when max_connections = 1
Rather than calling ast_odbc_find_table() in the prepare callback, call
it beforehand and pass it in to the callback to avoid the need for a
second connection.

ASTERISK-28166 #close

Change-Id: I6f8a0b9990d636fd6bc1a92ed70f7050d2436202
2019-02-28 14:46:01 -06:00
Friendly Automation c4a172efba Merge "Revert "http.c: Support separated HTTP request"" into 13 2019-02-28 08:37:04 -06:00
Joshua Colp 2c04996106 Merge "res_pjsip_config_wizard: Don't crash if misconfigured" into 13 2019-02-28 08:03:09 -06:00
Sean Bright 1b3a489204 Revert "pjsip_message_filter: Only do interface lookup for wildcard addresses."
This reverts commit d524ad523d.

Reason for revert: This causes Contact and Via headers to have the wrong
transport address.

ASTERISK-28309 #close

Change-Id: Ibba4d6176f68e39279fcd9a545f81d56e747bed8
2019-02-28 06:57:31 -06:00
Joshua Colp 70391dc515 Merge "res/res_rtp_asterisk: smoother can cause wrong timestamps if dtmf happen" into 13 2019-02-28 06:06:22 -06:00
Joshua Colp 2f4a15101b Revert "http.c: Support separated HTTP request"
This reverts commit 148ddfba9a.

Reason for revert: Under 13 this change appears to break HTTP
body processing, causing test failures and problems.

Change-Id: Ica47ca2cac1b21c6ef907c1ffbfaf2cebdea8e80
2019-02-28 05:28:00 -06:00
Joshua Colp 9598c210fa Merge "res_mwi_devstate.c: New module to allow presence subs to VM boxes" into 13 2019-02-28 05:04:12 -06:00
Sean Bright 85b1f8f886 res_pjsip_config_wizard: Don't crash if misconfigured
If both send_registrations and send_auth are both set to yes,
outbound_auth/username must be set or we crash.

ASTERISK-27992 #close

Change-Id: I6418d56de1ae53f80393b314c2584048fbf7f11d
2019-02-27 20:53:51 -05:00
Kevin Harwell 41effb7d4d res_pjsip_registrar: blocked threads on reliable transport shutdown take 3
When a contact was removed by the registrar it did not always check to see if
the circumstances involved a monitored reliable transport. For instance, if the
'remove_existing' option was set to 'true' then when existing contacts were
removed due to 'max_contacts' being reached, those existing contacts being
removed did not unregister the transport monitor.

Also, it was possible to add more than one monitor on a reliable transport for
a given aor and contact.

This patch makes it so all contact removals done by the registrar also remove
any associated transport monitors if necessary. It also makes it so duplicate
monitors cannot be added for a given transport.

ASTERISK-28213

Change-Id: I94b06f9026ed177d6adfd538317c784a42c1b17a
2019-02-27 17:02:16 -06:00
George Joseph 5ce084579f CI: Update jenkinsfiles with new Gerrit URLs
The recent upgrade of Gerrit to 2.16 elimiated referencing a
repository in a way the jenkinsfiles were relying on so
the URL references were changed to a more consistent and supported
format.

Change-Id: I2e8e3f213b9a96bb1b27665eca4a9a24bc49820e
2019-02-27 09:37:14 -07:00
Joshua C. Colp a8d4f56c25 Merge "rest-api-templates/asterisk_processor - replace http line breaks with line feed" into 13 2019-02-26 09:28:05 -06:00
George Joseph 4aa55a8ca6 res_mwi_devstate.c: New module to allow presence subs to VM boxes
This module allows presence subscriptions to voicemail boxes.  This
allows common BLF keys to act as voicemail waiting indicators.

ASTERISK-28301

Change-Id: I62a246c24f3d7d432e33e22d7a4a57c15c292fdd
2019-02-26 07:31:39 -07:00
Torrey Searle e9bd8c4204 res/res_rtp_asterisk: smoother can cause wrong timestamps if dtmf happen
Delivery timeval in the smoother object will fall behind while a DTMF is
being generated.  This can eventually lead to invalid rtp timestamps.
To prevent this from happening the smoother needs to be reset after every
DTMF to keep the timing up to date.

ASTERISK-28303 #close

Change-Id: Iaba3f7b428ebd72a4caa90e13b829ab4f088310f
2019-02-26 08:12:03 -06:00
Joshua C. Colp 600db408c7 Merge "http.c: Support separated HTTP request" into 13 2019-02-26 07:37:50 -06:00
Joshua C. Colp 9921262c85 Merge "taskprocessor: Enable subsystems and overload by subsystem" into 13 2019-02-26 07:03:54 -06:00
Joshua C. Colp d4060756e7 Merge "res_ari_applications: Fix incorrect call to ao2_lock." into 13 2019-02-26 06:28:32 -06:00
Friendly Automation 55419d3996 Merge "Core: Increase AST_PBX_MAX_STACK to 512 if not LOW_MEMORY" into 13 2019-02-26 06:00:04 -06:00
Kevin Harwell ec7f92c4ef rest-api-templates/asterisk_processor - replace http line breaks with line feed
Including line breaks (<br>, <br/>, <br />) in certain parts of the rest-api
json definition (e.g. summary, notes) displays them correctly in swagger.
However, when the field gets converted to the wiki format those breaks get
escaped and show up in the text as the actual string literal "<br>" etc...

This patch makes it so when converting to the wiki format it replaces all line
break values (<br>, etc...) with line feeds ('\n').

Change-Id: Ie1c9faa0d1c5d622804cc0a21ce769095b08aa3d
2019-02-25 17:31:27 -06:00
Joshua C. Colp 9c94c027cd res_ari_applications: Fix incorrect call to ao2_lock.
When listing the applications the apps lock was incorrectly
locked twice instead of being locked and then unlocked.

ASTERISK-28302

Change-Id: If7d064592a9e88c0f1049214c50e02be6dabf79e
2019-02-25 08:10:59 -04:00
Sungtae Kim 148ddfba9a http.c: Support separated HTTP request
Currently, the Asterisk does not support seperated HTTP request.
This patch make the Asterisk enables to wait lest part of HTTP request.
Also increases acceptable HTTP body length to 40k to support more
larger request.

ASTERISK-28236

Change-Id: I48a401aa64a21c3b37bf3cb4e0486d64b7dd8aa1
2019-02-20 22:44:33 +01:00
George Joseph 23ffc3af5c Core: Increase AST_PBX_MAX_STACK to 512 if not LOW_MEMORY
The current settings AST_PBX_MAX_STACK is 128 entries which is
too low for some FreePBX installations with complex parking
arrangements.  Increased to 512 if LOW_MEMORY is not defined.

ASTERISK-28300

Change-Id: I7c4b540bc92e6642df0f3da639b003f7da8b1299
2019-02-20 11:51:25 -07:00
Joshua C. Colp 82758295df stasis: Store subscriber uniqueids with topic statistics.
This change provides an easier mechanism to determine which
subscribers are subscribed to a topic. Using this you can
inspect the specific subscribers for further details.

Change-Id: I8deea21703cd5c5357b85593b46c3eaf24e18c0c
2019-02-20 14:22:31 -04:00
George Joseph bae3fd04c1 taskprocessor: Enable subsystems and overload by subsystem
To prevent one subsystem's taskprocessors from causing others
to stall, new capabilities have been added to taskprocessors.

* Any taskprocessor name that has a '/' will have the part
  before the '/' saved as its "subsystem".
  Examples:
  "sorcery/acl-0000006a" and "sorcery/aor-00000019"
  will be grouped to subsystem "sorcery".
  "pjsip/distributor-00000025" and "pjsip/distributor-00000026"
  will bn grouped to subsystem "pjsip".
  Taskprocessors with no '/' have an empty subsystem.

* When a taskprocessor enters high-water alert status and it
  has a non-empty subsystem, the subsystem alert count will
  be incremented.

* When a taskprocessor leaves high-water alert status and it
  has a non-empty subsystem, the subsystem alert count will be
  decremented.

* A new api ast_taskprocessor_get_subsystem_alert() has been
  added that returns the number of taskprocessors in alert for
  the subsystem.

* A new CLI command "core show taskprocessor alerted subsystems"
  has been added.

* A new unit test was addded.

REMINDER: The taskprocessor code itself doesn't take any action
based on high-water alerts or overloading.  It's up to taskprocessor
users to check and take action themselves.  Currently only the pjsip
distributor does this.

* A new pjsip/global option "taskprocessor_overload_trigger"
  has been added that allows the user to select the trigger
  mechanism the distributor uses to pause accepting new requests.
  "none": Don't pause on any overload condition.
  "global": Pause on ANY taskprocessor overload (the default and
  current behavior)
  "pjsip_only": Pause only on pjsip taskprocessor overloads.

* The core pjsip pool was renamed from "SIP" to "pjsip" so it can
  be properly grouped into the "pjsip" subsystem.

* stasis taskprocessor names were changed to "stasis" as the
  subsystem.

* Sorcery core taskprocessor names were changed to "sorcery" to
  match the object taskprocessors.

Change-Id: I8c19068bb2fc26610a9f0b8624bdf577a04fcd56
2019-02-20 10:23:26 -07:00
Kevin Harwell da93d17af8 ARI event type filtering
Event type filtering is now enabled, and configurable per application. An app is
now able to specify which events are sent to the application by configuring an
allowed and/or disallowed list(s). This can be done by issuing the following:

PUT /applications/{applicationName}/eventFilter

And then enumerating the allowed/disallowed event types as a body parameter.

ASTERISK-28106

Change-Id: I9671ba1fcdb3b6c830b553d4c5365aed5d588d5b
2019-02-20 09:56:45 -06:00
George Joseph 86bb86ce46 Merge "json.c/strings.c - Add a couple of utility functions" into 13 2019-02-20 09:53:15 -06:00
Friendly Automation f4fd910d2e Merge "chan_pjsip: Changed to continued after invalid media for pjsip show channelstats" into 13 2019-02-20 09:04:56 -06:00
Friendly Automation b298777458 Merge "CI: Use tmpfs option to Docker instead of mount." into 13 2019-02-20 08:16:55 -06:00
Joshua C. Colp 3de4d0c6c1 Merge "res/res_rtp_asterisk: clear smoother when local bridging" into 13 2019-02-20 04:46:20 -06:00
sungtae kim f6689547ae chan_pjsip: Changed to continued after invalid media for pjsip show channelstats
Currently, the pjsip show channelstats cli does not show channel's
stats after hits the invalid channel info. This makes hard to use
this cli. Changed to keep iterate after hits the invalid channel
info.

ASTERISK-28292

Change-Id: I3efdff1c9e1b1efd3c971fb82ae77aa133a6f43c
2019-02-19 23:59:48 +01:00
Joshua Colp 46df13e2d0 CI: Use tmpfs option to Docker instead of mount.
Some tests require Asterisk to execute scripts which
are stored in /tmp. When mount is used for tmpfs there
is no ability to allow scripts to be executed from
that location.

This change switches to using tmpfs which can be told
to allow executables to be run from /tmp.

Change-Id: I0e598ca2b76af1f7f2d29f0da7b1731a214a291a
2019-02-19 16:22:46 +00:00
Kevin Harwell b2d3c9d2de json.c/strings.c - Add a couple of utility functions
Added 'ast_json_object_string_get' to the JSON wrapper in order to make it a
little easier to retrieve a string field from the JSON object.

Also added an 'ast_strings_equal' function that safely checks (checks for NULLs)
for equality between two strings.

Change-Id: I26f0a16d61537505eb41b4b05ef2e6d67fc2541b
2019-02-19 09:43:40 -06:00
George Joseph 1ec00d205f Merge "Revert "Test_cel: Fails when DONT_OPTIMIZE is off"" into 13 2019-02-14 12:47:17 -06:00
Chris Savinovich 3e922adcc1 Revert "Test_cel: Fails when DONT_OPTIMIZE is off"
This reverts commit 9b85882f04.

Change-Id: I36cf159abb103502e48d6f8fd70d560d7f0bda56
2019-02-14 10:53:42 -06:00
Torrey Searle 7c17bc75ed res/res_rtp_asterisk: clear smoother when local bridging
p2p_write updates txformat but doesn't require a smoother.  If a smoother
was created by another bridge type the smoother could fall out of date causing
one way audio issues.  To prevent this the smoother is now destroyed on the
start of native bridge.

ASTERISK-28284 #close

Change-Id: I84e67f144963787fff9b4d79ac500514fb40cdc6
2019-02-13 08:48:55 -06:00
Paulo Vicentini 2db81ee2b4 res/res_pjsip: Resources (udptl fd) are leaking for T.38 calls
Fix unbalanced references for datastore t38_session_media

ASTERISK-28288

Change-Id: Id6dceceb06651b03f611bf33deb3061022fe5d0c
2019-02-13 15:23:17 +01:00
George Joseph 44914234ba Merge "ci: Rerun unit tests when non-code changes occur." into 13 2019-02-11 09:27:40 -06:00
Joshua C. Colp 3c632d81bc Merge "res_odbc: Add basic query logging." into 13 2019-02-11 08:39:19 -06:00
Joshua C. Colp cb45aa1f9d Merge "res_pjsip_registrar: lock transport monitor when setting 'removing' flag" into 13 2019-02-08 09:34:35 -06:00
Joshua Colp 9a6464e54f ci: Rerun unit tests when non-code changes occur.
This change makes it so that even if non-code changes
occur (such as commit message changing) unit tests
will still be run and result in a verification.

ASTERISK-28251

Change-Id: I6491fff7c93e5d5cd8e41054486968bf66c4f608
2019-02-08 13:09:38 +00:00
Kevin Harwell 3974633c00 res_pjsip_registrar: lock transport monitor when setting 'removing' flag
A previous patch attempt to mitigate blocked threads on transport shutdown for
a given contact. It was thought that a second lock could be avoided by checking
the 'removing' flag on the transport monitor twice (once before and once after
the normal named aor locking). However as with usual threading issues if the
timing was right the original problem still occured.

This patch adds locking around the first 'removing' flag check and set, thus
nullifying the secondary check, so it was removed.

ASTERISK-28213

Change-Id: Iaa8e36e5311789549b76d8de42dfcea96013b2ed
2019-02-07 14:28:20 -06:00
Joshua Colp a4d930c2ed res_odbc: Add basic query logging.
When Asterisk is connected and used with a database the response
time of the database can cause problems in Asterisk if it is long.
Normally the only way to see this problem would be to retrieve a
backtrace from Asterisk and examine where things are blocked, or
examine the database to see if there is any indication of a
problem.

This change adds some basic query logging to make it easier to
investigate such a problem. When logging is enabled res_odbc will
now keep track of the number of queries executed, as well as the
query that has taken the longest time to execute. There is also
an option which will cause a WARNING message to be output if a
query takes longer than a configurable amount of time to execute.

This makes it easier and clearer for users that their database may
be experiencing a problem that could impact Asterisk.

ASTERISK-28277

Change-Id: I173cf4928b10754478a6a8c27dfa96ede0f058a6
2019-02-07 14:11:13 +00:00
George Joseph d496bf2099 Merge "sounds: Sort 'core show sounds' output" into 13 2019-02-06 07:13:50 -06:00
Sungtae Kim f16d711679 main/cdr: Fixed cdr start overwriting
The CDR was overwriting the start time when the call continued the
dialplan from the ARI stasis or a Local channel was originated.

This change fixes this by no longer reinitializing the CDR when
transitioning out of the dialed pending state to the single state.

ASTERISK-28181

Change-Id: I921bc04064b6cff1deb2eea56a94d86489561cdc
2019-02-05 21:45:19 +01:00
George Joseph 1edcff6b03 Merge "Fix deadlock handling subscribe req during res_parking reload" into 13 2019-02-05 11:37:35 -06:00
George Joseph 5fb8d852f4 Merge "pjsip/config_global: regcontext context not created" into 13 2019-02-05 09:55:19 -06:00
Friendly Automation 1377cfc3c1 Merge "Added ARI resource /ari/asterisk/ping" into 13 2019-02-05 08:28:34 -06:00
George Joseph 33ebaae23f Merge "res_stasis: Auto-create context and extens on Stasis app launch." into 13 2019-02-05 08:26:55 -06:00
sungtae kim 67d587f47d Added ARI resource /ari/asterisk/ping
Added ARI resource.
GET /ari/asterisk/ping : It returns "pong" message with timestamp
and asterisk id. It would be useful for simple heath check.

Change-Id: I8d24e1dcc96f60f73437c68d9463ed746f688b29
2019-02-05 07:46:26 -06:00
Sean Bright e70f8f7c20 sounds: Sort 'core show sounds' output
Change-Id: Ib39052a745040f75eb635f15a042da15b20e22ab
2019-02-04 15:40:02 -05:00
Friendly Automation 58eb82aa8a Merge "bundled-jansson: On OpenSuse Leap libjansson.a was placed in lib64" into 13 2019-02-04 11:26:31 -06:00
Joshua C. Colp 41da4ed8b2 Merge "media_index.c: Refactored so it doesn't cache the index" into 13 2019-02-04 09:02:13 -06:00
George Joseph 8222e8ee2f bundled-jansson: On OpenSuse Leap libjansson.a was placed in lib64
On OpenSuse Leap, libjansson.a is installed in
third-party/jansson/dest/lib64 instead of lib (which is where
the top-level makeopts looks).  This causes a link failure.

* Updated jansson/Makefile to add an explicit --libdir to force
  the installation to third-party/jansson/dest/lib.

ASTERISK-28271
Reported by: David Wilcox

Change-Id: Ibf8af75e5da13562105fcc39ed898c6ef0b5a5f3
2019-02-04 06:14:49 -07:00
Friendly Automation 762f40fca0 Merge "res/res_pjsip: Fix crash due to misuse of session->media between threads." into 13 2019-01-30 07:04:04 -06:00
Ben Ford 26a04477f4 res_stasis: Auto-create context and extens on Stasis app launch.
At AstriCon, there was a strong desire for the ability to completely
bypass dialplan when using ARI. This is possible through the automatic
creation of a context and a couple of extensions whenever an application
is started.

For example, if you have an application named 'ari-example', a context
named 'stasis-ari-example' will be automatically created whenever this
application is started as long as one does not already exist. Two
extensions (a match-all extension for Stasis and a 'h' extension) are
created within this context. Any endpoint that registers to Asterisk
within this context will send all calls to the corresponding Stasis
application. When the application is destroyed, the context is removed.

ASTERISK-28104 #close

Change-Id: Ie35bd93075e05b05e3ae129a83c9426931b7ebac
2019-01-29 12:19:22 -06:00
Kevin Harwell 5a0a4c2efa pjsip/config_global: regcontext context not created
The context specified by 'regcontext' was not being created, so when Asterisk
attempted to later dynamically add an extension it would fail. This patch now
creates the context if a 'regcontext' is specified.

ASTERISK-28238

Change-Id: I0f36cf4ab0a93ff4b1cc5548d617ecfd45e09265
2019-01-29 11:00:11 -06:00
George Joseph 66982824bf media_index.c: Refactored so it doesn't cache the index
Testing revealed that the cache added no benefit but that it could
consume excessive memory.

Two new index related functions were created:
ast_sounds_get_index_for_file() and ast_media_index_update_for_file()
which restrict index updating to specific sound files.

The original ast_sounds_get_index() and ast_media_index_update()
calls are still available but since they no longer cache the results
internally, developers should re-use an index they may already have
instead of calling ast_sounds_get_index() repeatedly.  If information
for only a single file is needed, ast_sounds_get_index_for_file()
should be called instead of ast_sounds_get_index().

The media_index directory scan code was elimininated in favor of
using the existing ast_file_read_dirs() function.

Since there's no more cache, ast_sounds_index_init now only
registers the sounds cli commands instead of generating the
initial index and subscribing to stasis format register/unregister
messages.

ast_sounds_reindex() is now a no-op but left for backwards
compatibility.

loader.c no longer registers "sounds" as a special reload target.

Both the sounds cli commands and the sounds ari resources were
refactored to only call ast_sounds_get_index() once per invocation
and to use ast_sounds_get_index_for_file() when a specific sound
file is requested.

Change-Id: I1cef327ba1b0648d85d218b70ce469ad07f4aa8d
2019-01-28 10:07:51 -07:00
Friendly Automation a1d7d469a9 Merge "codecs.conf.sample: update codec opus docs" into 13 2019-01-28 07:43:27 -06:00
George Joseph 10cf12e7e0 Merge "format_g726: add support for seeking" into 13 2019-01-28 07:43:16 -06:00
George Joseph c496fc2e28 Merge "res_http_websocket: ensure control frames do not interfere with data" into 13 2019-01-28 07:22:10 -06:00
Giuseppe Sucameli a618d20ca4 Fix deadlock handling subscribe req during res_parking reload
Split destroy_hint method to separate hint removal and extension hint
state changed callback, the latter now called via stasis.
This avoids deadlock between res_parking reload that is removing the
parking lot and the related hint and subscribe requests coming for the
same parking lot.

ASTERISK-28173

Change-Id: I5b03c3455b3b12b6f83cea4cc34f4b4b20444f7e
2019-01-28 05:27:33 -06:00
Kevin Harwell 62faecd60d codecs.conf.sample: update codec opus docs
The option value "sdp" for some of the settings was removed a while back,
however the sample conf was not updated.

This patch removes any wording with regards to the old "sdp" option value,
and adjusts the defaults to what they are now.

ASTERISK-28263

Change-Id: I41bfa44e9f69446bcc5c8fd92e3675c676fdc445
2019-01-25 14:31:40 -06:00
Jean Aunis e456600575 build : Fix cross-compilation errors
Bundled pjproject and jansson must be configured with the host and build
parameters provided to the configure script.

ASTERISK-28250

Change-Id: If0a76e52a87d4ab82b7d4c72d27d8759ca931880
2019-01-24 13:58:03 +01:00
Friendly Automation 9514829403 Merge "app_voicemail: Add Mailbox Aliases" into 13 2019-01-24 05:53:05 -06:00
Joshua C. Colp b13051705d Merge "res_pjsip_registrar: mitigate blocked threads on reliable transport shutdown" into 13 2019-01-24 05:50:22 -06:00
Friendly Automation b9b095bb2e Merge "Test_cel: Fails when DONT_OPTIMIZE is off" into 13 2019-01-23 11:25:29 -06:00
Joshua C. Colp e47e8ff39a Merge "manager_channels: Fix throwing of HangupHandler manager events" into 13 2019-01-23 09:52:02 -06:00
eyalhasson 9eb3a7a82c format_g726: add support for seeking
Added support for the seek function in format_g726
so playback can start from anywhere.
Before the fix, playback of g726 files
always started from the beginning.

ASTERISK-28246

Change-Id: I626235bc4642df1479050d3d06828412603a9b40
2019-01-23 08:56:51 -06:00
Paulo Vicentini c01d2f66ee res/res_pjsip: Fix crash due to misuse of session->media between threads.
This patch makes sure that thread running ast_taskprocessor_execute
cannot suddenly dispose the session->media object making the other
threads (running pbx_thread / bridge_channel_ind_thread) crash when they
try to access the pointer to invalid memory. We were experiencing a crash due
to a misuse of session->media container between threads running
(bridge_channel_ind_thread/pbx_thread) and the thread running
ast_taskprocessor_execute. Depending on the SIP flow (during a disconnection)
and the threads' code path, the session->media container was being destroyed
(and set to NULL) by the thread running ast_taskprocessor_execute while the
thread running t38_framehook_read was still referring to it.
Now res_pjsip_t38 is referring a session_media in a datastore.

ASTERISK-28156

Change-Id: Ia92e2389b8d804bf205473e92ec06217e87ce237
2019-01-23 12:46:08 +01:00
Jeremy Lainé 59ae83d07e res_http_websocket: ensure control frames do not interfere with data
Control frames (PING / PONG / CLOSE) can be received in the middle of a
fragmented message. In order to ensure they do not interfere with the
reassembly buffer, we exit early and do not return the payload to the
caller.

ASTERISK-28257 #close

Change-Id: Ia5367144fe08ac6141bba3309517a48ec7f013bc
2019-01-23 11:47:55 +01:00
Joshua C. Colp 2c1ac524b8 Merge "stasis / manager / ari: Better filter messages." into 13 2019-01-22 18:58:58 -06:00
Friendly Automation 06df43f6dd Merge "pjsip_transport_management: Shutdown transport immediately on disconnect" into 13 2019-01-22 18:24:37 -06:00
Joshua C. Colp 128b90a437 Merge "res_http_websocket: respond to CLOSE opcode" into 13 2019-01-22 18:15:48 -06:00
Gerald Schnabel 8791dda672 manager_channels: Fix throwing of HangupHandler manager events
The type value extracted from stasis message data in channel_hangup_handler_cb
isn't compared against the valid values "run", "pop" and "push". Thus the
manager events HangupHandlerPush, HangupHandlerPop and HangupHandlerRun are
never thrown.

This regression was introduced by ASTERISK_21462.

ASTERISK-28252

Change-Id: I9956e35e18da1873113644df1ddc3c7cd37bf524
2019-01-22 17:29:44 -06:00
Chris-Savinovich 9b85882f04 Test_cel: Fails when DONT_OPTIMIZE is off
A bug in GCC causes TEST_CEL to return
failure under the following conditions:
1. TEST_FRAMEWORK on
2. DONT_OPTIMIZE off
3. Fedora and Ubuntu
4. GCC 8.2.1
5. Test name: test_cel_dial_pickup
6. There must exist a certain combination of multithreading.
The bug affects arithmetic calculations when the optimization level
is bigger than O1 and the -fpartial-inline flag is on. Provided these
conditions, function ast_str_to_lower() fails to convert to lower case
due to said function being of type force_inline.  The solution is to
remove the "force_inline" type declaration from function ast_str_to_lower()
Change-Id: Ied32e0071f12ed9d5f3b4cdd878b2532a1c769d7
2019-01-22 15:54:12 -06:00
George Joseph d0eccac3ff app_voicemail: Add Mailbox Aliases
You can now define an "aliases" context in voicemail.conf
whose entries point to actual mailboxes.  These can be used anywhere
the mailbox is specified.

Example:
[general]
aliasescontext = myaliases

[default]
1234 = yadayada

[myaliases]
4321@devices = 1234@default

Now you can use 4321@devices to refer to the 1234@default mailbox.

This can be useful to provide channel drivers with constant
mailbox specifications such as <extension>@devices leaving
app_voicemail to control exactly which mailbox the alias points to.
Now, only voicemail has to be reloaded to make changes instead of
individual channel drivers which are usually more expensive to
reload.

Change-Id: I395b9205c91523a334fe971be0d1de4522067b04
2019-01-22 13:31:46 -06:00
Kevin Harwell 2e1cbcde7d res_pjsip_registrar: mitigate blocked threads on reliable transport shutdown
When a reliable transport is shutdown it's possible for the pjsip registrar
resource shutdown handler to get called multiple times. If this happens and one
of the threads is taking "too long" (slow database call for instance) then the
others get blocked waiting to delete.

Since it only takes one to delete the contact then the other threads should be
able to continue on if one of the threads is currently "deleting". This patch
makes it so now when a thread enters the shutdown handler it checks to see if a
thread is currently already "deleting". If so, then the thread does not attempt
to get the lock, and instead continues on thus avoiding the blockage.

ASTERISK-28213 #close

Change-Id: I7563ca596312b1dff4f3ab41483e89fe2862328a
2019-01-22 13:16:25 -06:00
Joshua C. Colp e66d4d1d2a Merge "pjproject_bundled: Add patch for double free issue in timer heap" into 13 2019-01-22 11:33:16 -06:00
George Joseph 8414ca191e pjproject_bundled: Add patch for double free issue in timer heap
Fixed #2172: Avoid double reference counter decrements in
timer in the scenario of race condition between
pj_timer_heap_cancel() and pj_timer_heap_poll().

Change-Id: If000e9438c83ac5084b678eb811e902c035bd2d8
2019-01-22 08:02:37 -07:00
Jeremy Lainé da50162fa4 res_http_websocket: respond to CLOSE opcode
This ensures that Asterisk responds properly to frames received from a
client with opcode 8 (CLOSE) by echoing back the status code in its own
CLOSE frame.

Handling of the CLOSE opcode is moved up with the rest of the opcodes so
that unmasking gets applied. The payload is no longer returned to the
caller, but neither ARI nor the chan_sip nor pjsip made use of the
payload, which is a good thing since it was masked.

ASTERISK-28231 #close

Change-Id: Icb1b60205fc77ee970ddc91d1f545671781344cf
2019-01-21 14:03:10 -05:00
Sean Bright 9cd6161083 pjsip_transport_management: Shutdown transport immediately on disconnect
The transport management code that checks for idle connections keeps a
reference to PJSIP's transport for IDLE_TIMEOUT milliseconds (32000 by
default). Because of this, if the transport is closed before this
timeout, the idle checking code will keep the transport from actually
being shutdown until the timeout expires.

Rather than passing the AO2 object to the scheduler task, we just pass
its key and look it up when it is time to potentially close the idle
connection. The other transport management code handles cleaning up
everything else for us.

Additionally, because we use the address of the transport when
generating its name, we concatenate an incrementing ID to the end of the
name to guarantee uniqueness.

Related to ASTERISK~28231

Change-Id: I02ee9f4073b6abca9169d30c47aa69b5e8ae9afb
2019-01-21 08:54:45 -05:00
Valentin Vidic efde1ab138 channel.c: Fix segfault with Monitor(wav,file,i)
If the Monitor is started with the i option the read_stream will be
NULL. One code path in channel.c checks if write_stream is set but than
uses read_stream instead causing a segfault.

ASTERISK-28249

Change-Id: I1bae9126537be54895c7fea2d08dd9488d8cc525
2019-01-20 12:51:19 -06:00
Joshua C. Colp 42922af7b8 stasis / manager / ari: Better filter messages.
Previously both AMI and ARI used a default route on
their stasis message router to handle some of the
messages for publishing out their respective
connection. This caused messages to be given to
their subscription that could not be formatted
into AMI or JSON.

This change adds an API call to the stasis message
router which allows a default route to be set as well
as formatters that the default route is expecting.
This allows both AMI and ARI to specify that their
default route only wants messages of their given
formatter. By doing so stasis can more intelligently
filter at publishing time so that they do not receive
messages which will not be turned into AMI or JSON.

ASTERISK-28244

Change-Id: I65272819a53ce99f869181d1d370da559a7d1703
2019-01-17 14:51:11 -04:00
Sean Bright 28da2948d1 sched: Make sched_settime() return void because it cannot fail
Change-Id: I66b8b2b2778f186919d73ae9bf592104b8fb1cd5
2019-01-17 11:01:29 -05:00
Sean Bright d87fc1c591 res_pjsip_transport_websocket: Don't assert on 0 length payloads
If an external pjproject is used and built with assertions enabled, we
will assert if passed a payload length of 0, so treat empty frames as if
we didn't receive them.

Change-Id: I9c5fdccd89cc8d2f3ed7e3ee405ef0fc78178f48
2019-01-14 10:39:03 -05:00
Friendly Automation 5254ebf09f Merge "res_pjsip: add option to disable ContactStatus event when contact is updated" into 13 2019-01-14 08:30:59 -06:00
Joshua C. Colp 94f9c681d4 Merge "stasis/endpoint: Fix memory leak of channel_ids in ast_endpoint structure." into 13 2019-01-14 08:26:55 -06:00
Friendly Automation c7a7638236 Merge "RTP: reset DTMF last seqno/timestamp on RTP renegotiation" into 13 2019-01-14 08:01:00 -06:00
Friendly Automation 7de0b919c9 Merge "app_voicemail: Fix Channel variable VM_MESSAGEFILE for "urgent" voicemail" into 13 2019-01-11 18:28:11 -06:00
Alexei Gradinari 4a8564cafa res_pjsip: add option to disable ContactStatus event when contact is updated
This patch adds a new PJSIP global configuration option
'send_contact_status_on_update_registration' to be able to have the same
performance benefits as version 16.

By default old behavior, i.e. the ContactStatus event will be sent when a
device refreshes its registration.

Change-Id: I706adf7584e7077eb6bde6d9799ca408bc82ce46
2019-01-11 11:52:29 -05:00
mohitdhiman 84a7b4d356 stasis/endpoint: Fix memory leak of channel_ids in ast_endpoint structure.
During Bridging of two channels if masquerade operation is performed on a
channel (clone channel) which was created with endpoint details
(ast_channel_alloc_with_endpoint()) and the original channel which is created
without endpoint details (ast_channel_alloc()) then both the channels must
exchange their endpoint details or else after masquerade when clone channel
is being destroyed the endpoint cleanup callbacks will be destroyed too and
after call completion unique_id of original channel will still be there in
ast_endpoint structure's channel_ids container.

ASTERISK-28197

Change-Id: Ied0451f378a3f2a36acc8c0984959a69895efa17
2019-01-11 19:23:50 +05:30
Diederik de Groot 790626ec82 RAII: Change order or variables in clang version
This prevents use-after-scope issues when unwinding the stack,
which happens in reverse order. The varname variable needs to
remain alive for the destruction to be able to access it.
Issue was found using clang + address-sanitizer.

ASTERISK-28232 #close

Change-Id: I00811c34ae910836a5fb6d22304528aef92624db
2019-01-08 20:33:48 -05:00
Joshua C. Colp d309f1d9f7 Merge "ast_coredumper: Refactor the pid determination process" into 13 2019-01-04 08:25:51 -06:00
George Joseph e3439d3011 Merge "stasis: Fix ABI between DEVMODE and non-DEVMODE." into 13 2019-01-04 07:55:58 -06:00
Bryan Boatright 250812df09 app_voicemail: Fix Channel variable VM_MESSAGEFILE for "urgent" voicemail
If a voicemail is marked "urgent" then the VM_MESSAGEFILE channel variable is
not updated correctly since urgent messages are in a different directory. The
fix is to update the channel variable when the path to the urgent message is
created.

ASTERISK-28225

Change-Id: I8efbace06e6122ea0793f7bdb073d4378e8274ca
2019-01-02 12:01:44 -06:00
Richard Mudgett b26ec935ec stasic.c: Fix printf format type mismatches with arguments.
An int64_t is not likely the same size as a long.

* Changed the int64_t values in the statistics structs to longs so casting
is not necessary when generating the formatted CLI output.  The offending
members did not need to be int64_t anyway as they were only set by an int
type variable which was already truncating bits.

* Reordered the statistics structs to reduce potential padding bytes.

Change-Id: Ic090a070e9dc4ca650ebdb9c01ed50a581289962
2019-01-02 11:10:29 -06:00
George Joseph 7f2a953691 Merge "backtrace.c: Fix casting pointer to/from integral type." into 13 2019-01-02 09:51:28 -06:00
Corey Farrell 240f339938
stasis: Fix ABI between DEVMODE and non-DEVMODE.
Create compatibility stubs for maximum ABI compatibility.

ASTERISK-28212 #close

Change-Id: I872c04842ab6b61e9dd6d37e4166bc619aa20626
2018-12-26 13:30:07 -05:00
George Joseph 96f8b19b1f Revert "stasis_cache: Stop caching stasis subscription change messages"
This reverts commit 94a4eea7f6.

This commit caused issues with polling when combined with
the revert commit "Revert "app_voicemail: Remove need to subscribe
to stasis"

ASTERISK-28222
Reported by: abelbeck

Change-Id: I0aaab5218a282706dfc6fcbbaeead228d599b99b
2018-12-26 10:43:55 -06:00
George Joseph a39dd50436 ast_coredumper: Refactor the pid determination process
In order to get a dump of the running process, we need to find the
pid of the main asterisk process.  This can be tricky if there are
also instances of "asterisk -r" running or if an alternate location
for asterisk.conf was specified on the command line with the -C
option that also specified an alternation location for the pid file.

So now...

1. We find the asterisk executable with "which" or the --asterisk-bin
   command line option.
2. If there's only 1 process with an executable path that matches,
   we use that pid.  If not...
3. We try "<asterisk-bin> -rx 'core show settings'" and parse the
   output to find the pidfile, then read that for the pid.  If that
   didn't work...
4. We get a list of all the pids matching <asterisk-bin> and look
   in /proc/<pid>/cmdline for a -C argument and retry the "core show
   settings" using the same -C option.  We can't parse the output
   of "ps" to get the -C path because it may contain spaces.  The
   contents of /proc/<pid>/cmdline are delimited by NULLs.  For BSDs
   we may have to mount /proc first. :(

ASTERISK-28221
Reported by: Andrew Nagy

Change-Id: I8aa1f3f912f949df2b5348908803c636bde1d57c
2018-12-24 14:16:53 -05:00
Alexei Gradinari f9face3612 RTP: reset DTMF last seqno/timestamp on RTP renegotiation
The remote side may start a new stream when renegotiating RTP.
Need to reset the DTMF last sequence number and the timestamp
of the last END packet on RTP renegotiation.

If the new time stamp is lower then the timestamp of the last DTMF END packet
the asterisk drops all DTMF frames as out of order.

This bug was caught using Cisco ip-phone SPA5XX and codec g722.
On SIP session update the SPA50X resets stream and a new timestamp is twice
smaller then the previous.

ASTERISK-28162 #close

Change-Id: Ic72b4497e74d801b27a635559c1cf29c16c95254
2018-12-19 16:27:12 -05:00
Richard Mudgett a551539048 backtrace.c: Fix casting pointer to/from integral type.
The backtrace library bfd.h include file does not get the sizes of
pointers and ints right on some platforms.  On my old test box the size
of bfd_vma is 8 while the size of a pointer is 4.  gcc on the box
complains of the integer casting to/from pointers size mismatch.

* uintptr_t to the rescue by doing an appropriate two stage cast.

Change-Id: Icb2621583f50c8728de08a3c824d95fe53cc45d0
2018-12-19 12:48:40 -06:00
Joshua C. Colp 5dc38c2fa9 Merge "app_voicemail: Don't delete mailbox state unless mailbox is deleted" into 13 2018-12-19 05:14:16 -06:00
George Joseph 1036959a49 Merge "res_rtp_asterisk: Remove some unused structure fields." into 13 2018-12-18 10:42:17 -06:00
George Joseph e137086163 app_voicemail: Don't delete mailbox state unless mailbox is deleted
The free_user function was automatically deleting the stasis mailbox
state but this only makes sense when the mailbox is actually
deleted, not just the structure freed.  This was causing issues
where leave_voicemail would publish the mwi message to stasis and
delete the state before the message could be processed by
res_pjsip_mwi.

* Removed the delete of state from free_user().

* Created a new free_user_final() function that both frees the data
  structure and deletes the state.  This function is only called
  during module load/unload where it's appropriate to delete the
  state.

ASTERISK-28215

Change-Id: I305e8b3c930e9ac41d901e5dc8a58fd7904d98dd
2018-12-18 09:33:50 -07:00
Friendly Automation ead94ad621 Merge "res_format_attr_h264.c: Make sure profile-level-id fmtp attribute is set" into 13 2018-12-17 08:26:29 -06:00
Sean Bright a2336adfb9 res_rtp_asterisk: Remove some unused structure fields.
All of the fields that were removed were no longer referenced except for
'lastrxts' and 'rxseqno' which were only ever written to.

Change-Id: I5a5d31eb33e97663843698f58d0d97f22a76627c
2018-12-14 12:42:31 -05:00
Friendly Automation 4cfc25d4e6 Merge "bridge_builtin_features.c: Set auto(mix)mon variables on both channels" into 13 2018-12-14 08:32:56 -06:00
Sean Bright 560747dca4 res_format_attr_h264.c: Make sure profile-level-id fmtp attribute is set
The profile-iop octet (the 2nd) of profile-level-id can be zero
according to RFC 6184 Section 8.1. So we ignore its value when deciding
to include profile-level-id in the outgoing SDP.

ASTERISK-27959 #close
Reported by: David Kuehling

Change-Id: Id28cd916a3d7748058fe9609b585d07d9e243f73
2018-12-13 17:03:37 -05:00
Friendly Automation c01a770fc0 Merge "confbridge: announce to the marked users when they join an empty conference" into 13 2018-12-13 07:55:12 -06:00
Sean Bright 92cc094d4e bridge_builtin_features.c: Set auto(mix)mon variables on both channels
This is how features behaved up through Asterisk 11, but was changed
when the new bridging framework was implemented in Asterisk 12.

Reported by rrittgarn in #asterisk.

Change-Id: I72cf86223947a8118c75f46e2c603dbc11e3125b
2018-12-13 08:52:16 -05:00
Friendly Automation 70a2f51786 Merge "utils: Don't set or clear flags that don't need setting or clearing" into 13 2018-12-12 13:11:17 -06:00
Friendly Automation ac5c4316ef Merge "stasis: Add statistics gathering in developer mode." into 13 2018-12-12 13:08:59 -06:00
Friendly Automation 212f2a3aa3 Merge "Use non-blocking socket() and pipe() wrappers" into 13 2018-12-12 11:26:50 -06:00
Joshua C. Colp e5605232df stasis: Add statistics gathering in developer mode.
This change adds statistics gathering to Stasis topics,
subscriptions, and message types. These can be viewed using
CLI commands and provide insight into how Stasis is used
and how long certain operations take to execute.

These are only available when Asterisk is compiled in
developer mode and do not have any impact under normal
operation.

ASTERISK-28117

Change-Id: I94411b53767f89ee01714daaecf0c2f1666e863f
2018-12-12 13:14:04 -04:00
Friendly Automation a03202e551 Merge "stasis: Allow filtering by formatter" into 13 2018-12-12 11:09:22 -06:00
Joshua C. Colp e557a72566 Merge "build: Update config.guess and config.sub" into 13 2018-12-12 11:03:14 -06:00
George Joseph 6109126e2d Merge "pjproject_bundled: check whether UPDATE is supported on outgoing calls" into 13 2018-12-12 10:52:10 -06:00
Friendly Automation 53bda83f5e Merge "Revert "RTP: reset DTMF last seqno/timestamp on voice packet with marker bit"" into 13 2018-12-11 14:14:33 -06:00
Sean Bright b84fd37ef0 Use non-blocking socket() and pipe() wrappers
Change-Id: I050ceffe5a133d5add2dab46687209813d58f597
2018-12-11 12:03:54 -05:00
George Joseph 232a56d0af Merge "CI: Various updates to buildAsterisk.sh" into 13 2018-12-11 09:07:39 -06:00
Sean Bright 3f3035680b utils: Don't set or clear flags that don't need setting or clearing
Change-Id: I0e7fb507ac09b15e45e1ff8501ecfca67afa5217
2018-12-11 10:07:27 -05:00
Joshua C. Colp a2e4621d77 Merge "utils: Wrap socket() and pipe() to reduce syscalls" into 13 2018-12-11 09:02:39 -06:00
Sean Bright 93f00ebe59 build: Update config.guess and config.sub
Pulled from the authoritative respository at:

  https://git.savannah.gnu.org/cgit/config.git/tree/

Change-Id: I748708ce24d4d47ff1f395075d0b08d3da3355e0
2018-12-11 09:34:11 -05:00
George Joseph 1ef993911f Revert "RTP: reset DTMF last seqno/timestamp on voice packet with marker bit"
This reverts commit cf620ce0f6.

Pending resolution of ASTERISK_28200

Change-Id: If18ab1166db0d634ce8a099bd7460251e9c682e1
2018-12-11 09:29:25 -05:00
Joshua C. Colp e8a8729ed4 Merge "chan_sip: Fix leak using contact ACL" into 13 2018-12-10 07:05:31 -06:00
Alexei Gradinari 6392e452f2 confbridge: announce to the marked users when they join an empty conference
Currently the file sound_only_person is not played when a marked
user (with announce_only_user=yes) joins an empty conference.

This patch fixes it.

ASTERISK-28201 #close

Change-Id: I85b67687e6b220939c3af8091d83a70a7b174cf4
2018-12-07 15:22:29 -05:00
Giuseppe Sucameli f4afd097af chan_sip: Fix leak using contact ACL
Free old peer's contactacl before overwrite it within build_peer.

ASTERISK-28194

Change-Id: Ie580db6494e50cee0e2a44b38e568e34116ff54c
2018-12-07 11:58:03 -05:00
George Joseph 21a5ad0fd9 stasis: Allow filtering by formatter
A subscriber can now indicate that it only wants messages
that have formatters of a specific type.  For instance,
manager can indicate that it only wants messages that have a
"to_ami" formatter.  You can combine this with the existing
filter for message type to get only messages with specific
formatters or messages of specific types.

ASTERISK-28186

Change-Id: Ifdb7a222a73b6b56c6bb9e4ee93dc8a394a5494c
2018-12-07 06:57:15 -07:00
Sean Bright 8c312c54ed utils: Wrap socket() and pipe() to reduce syscalls
Some platforms provide an implementation of socket() and pipe2() that allow the
caller to specify that the resulting file descriptors should be non-blocking.

Using these allows us to potentially elide 3 calls into 1 by avoiding extraneous
calls to fcntl() to set the O_NONBLOCK flag afterwards.

In passing, change ast_alertpipe_init() to use pipe2() directly instead of the
wrapper if it is available.

Change-Id: I3ebe654fb549587537161506c6c950f4ab298bb0
2018-12-07 08:57:02 -05:00
George Joseph 30934a0145 CI: Various updates to buildAsterisk.sh
* Added ---no-configure, --no-menuselect, --no-make and --no-alembic
  options that prevent those actions from being performed.  Useful
  for testing and re-running portions of the build after fixing
  earlier failures.

* Added "set -e" to abort the script on command failure.
  Not sure why this wasn't there in the first place.

* Fixed a few echos that were redirecting to stderr when they shouldn't
  have been.

* Catch more alembic failures by actually trying to generate the SQL.

Change-Id: I9f395fa4e9254be7299e7c1014f1a13db78faffb
2018-12-05 08:37:45 -07:00
George Joseph d9252612a7 Merge "test_websocket_client.c: Disable websocket_client_create_and_connect test." into 13 2018-12-05 08:18:14 -06:00
Sean Bright 44c8868fb1 core: Add some documentation to the malloc_trim code
This adds documentation to handle_cli_malloc_trim() indicating how it
can be useful when debugging OOM conditions.

Change-Id: I1936185e78035bf123cd5e097b793a55eeebdc78
2018-12-03 17:47:06 -05:00
George Joseph d5765e9318 Merge "core: Merge malloc_trim patch" into 13 2018-12-03 16:26:13 -06:00
George Joseph f908722c6a Merge "app_queue: Revert broken queue channel reference patch" into 13 2018-12-03 15:08:09 -06:00
Chris-Savinovich 40ab571e0d core: Merge malloc_trim patch
We've had multiple opportunities where Richard Mudgett's
malloc_trim patch has been useful. Let's get it
pushed up to gerrit and merged.

Since malloc_trim is only available in libc, an entry is
added to configure.ac to create a definition for
HAVE_MALLOC_TRIM.

Change-Id: Ia38308c550149d9d6eae4ca414a649957de9700c
2018-12-03 14:45:00 -06:00
Jenkins2 c30f04fa07 Merge "res_pjsip: Patch for res_pjsip_* module load/reload crash" into 13 2018-12-03 09:09:15 -06:00
lvl 91630834f7 app_queue: Revert broken queue channel reference patch
Revert commit 6409e7b11a, and add
NULL checks for all app_queue event handling code.

Related issues: ASTERISK~25185, ASTERISK~27006, ASTERISK~25844

ASTERISK-28125

Change-Id: I37334ea184ebb56e54471496b82937d4927815a0
2018-12-03 05:05:16 -05:00
Chris-Savinovich 2e15657485 test_websocket_client.c: Disable websocket_client_create_and_connect test.
This test was occasionally failing, with:

  WARNING[5812]: http.c:1939 httpd_helper_thread: Failed to set
      TCP_NODELAY on HTTP connection: Bad file descriptor
  ERROR[5812]: iostream.c:91 ast_iostream_nonblock: Failed to get
      fcntl() flags for file descriptor: Bad file descriptor
  ERROR[5812]: iostream.c:569 ast_iostream_close: close() failed: Bad
      file descriptor

Disabled for now by making the test explicit only.

Change-Id: I778f6cbb6104c6b4e89737a2eaf1a9540888d351
2018-12-02 08:55:10 -05:00
George Joseph 822d321a10 Merge "Revert "app_voicemail: Remove need to subscribe to stasis"" into 13 2018-11-30 07:29:48 -06:00
George Joseph 363d19326b Revert "app_voicemail: Remove need to subscribe to stasis"
This reverts commit 1843b0e2b5.

That commit closed a long standing hole which allowed subscriptions
to mailboxes that weren't configured in voicemail.conf.  This
caused an issue with FreePBX which depdended on that behavior.
The commit is being reverted until FreePBX can handle the new
behavior.

ASTERISK-28151
Reported by: Ronald Raikes

Change-Id: I57b7b85e75d7dd97c742b5c69d718a0f61260c15
2018-11-29 12:09:42 -07:00
Kevin Harwell d3b0284641 Merge "jansson: Upgrade to 2.12." into 13 2018-11-29 12:57:40 -06:00
Pirmin Walthert 385d7523c7 pjproject_bundled: check whether UPDATE is supported on outgoing calls
In ASTERISK-27095 an issue had been fixed because of which chan_pjsip was not
trying to send UPDATE messages when connected_line_method was set to invite.
However this only solved the issue for incoming INVITES. For outgoing INVITES
(important when transferring calls) the options variable needs to be updated
at a different place.

ASTERISK-28182 #close
Reported-by: nappsoft

Change-Id: I76cc06da4ca76ddd6dce814a8b97cc66b98aaf29
2018-11-29 14:44:11 +01:00
Corey Farrell ec02d7fd4c
res_pjsip: Patch for res_pjsip_* module load/reload crash
The session_supplements for the pjsip makes crashes when the module
load/unload.

ASTERISK-28157

Change-Id: I5b82be3a75d702cf1933d8d1417f44aa10ad1029
2018-11-27 11:20:59 -05:00
George Joseph 922fbafda0 test_cel: Plug a few ref leaks
These are only a few of the leaks.  The large number of macros
and return paths in this file would make a weeks worth of work
to plug them all.

Change-Id: Ie2369fa944023d44767871c5c30974cb077ffb56
2018-11-26 17:19:51 -05:00
Jenkins2 9f0459d2a0 Merge "RTP: need to reset DTMF last seqno/timestamp on voice packet with marker bit" into 13 2018-11-26 13:45:29 -06:00
Jenkins2 379db83b7a Merge "astobj2: Eliminate usage of legacy ao2_container_alloc routine." into 13 2018-11-26 07:38:32 -06:00
Jenkins2 57969c634e Merge "func_strings: HASHKEY - negative array index can cause corruption" into 13 2018-11-26 07:25:29 -06:00
Corey Farrell 7c346aa4f4
jansson: Upgrade to 2.12.
This brings in jansson-2.12, removes all patches that were merged
upstream.  README is created in third-party/jansson/patches to explain
how to add patches but also because the patches folder must exist for
the build process to succeed.

Change-Id: If0f2d541c50997690660c21fb7b03d625a5cdadd
2018-11-26 07:09:11 -05:00
Corey Farrell 0a9904e1c6
astobj2: Eliminate usage of legacy ao2_container_alloc routine.
Replace usage of ao2_container_alloc with ao2_container_alloc_hash or
ao2_container_alloc_list.

ao2_container_alloc is now restricted to modules only and is being
removed from Asterisk 17.

Change-Id: I0907d78bc66efc775672df37c8faad00f2f6c088
2018-11-21 09:56:07 -05:00
Jenkins2 78dbbcef65 Merge "stasis: Remove stringfields and lock from change message." into 13 2018-11-20 05:05:29 -06:00
Jenkins2 35a5d63195 Merge "CI: Get job timeouts from environment" into 13 2018-11-19 15:13:55 -06:00
Kevin Harwell aa728adab0 func_strings: HASHKEY - negative array index can cause corruption
This patch makes it so only matching non-empty key names, and keys created by
the HASH function are eligible for inclusion in the comma separated string. It
also fixes a bug where it was possible to write to a negative index if the
result buffer was empty.

ASTERISK-28159
patches:
  ASTERISK-28159.diff submitted by Michael Walton (license 6502)

Change-Id: I6e57fe7307dfd856271753aed5ba64c59b511487
2018-11-19 13:34:46 -06:00
George Joseph d2397e643d CI: Get job timeouts from environment
The job timeouts were hard coded in the jenkinsfiles which
means changes had to go through gerrit.  Now they are taken
from the following environment variables (and their defaults) that
can be set in Jenkins configuration...

TIMEOUT_GATES =      "60 MINUTES"
TIMEOUT_DAILIES =    "3 HOURS"
TIMEOUT_REF_DEBUG =  "24 HOURS"
TIMEOUT_UNITTESTS =  "30 MINUTES"

Change-Id: I673a551c1780bf665a3bc160b245da574aa4bbab
2018-11-19 10:59:07 -07:00
Joshua C. Colp a5a8cba8c7 stasis: Remove stringfields and lock from change message.
When a subscribe or unsubscribe occurs a message is published
containing this information. This change makes it so that the
message no longer uses stringfields or a lock, as both are not
really needed for the message.

Change-Id: I3f4831931d79f94fd979baf48048738df5dc1632
2018-11-19 12:00:36 -05:00
Joshua Colp e0b5d74e93 Merge "test_res_pjsip_scheduler: Fix possible write after free in scheduler_policy." into 13 2018-11-19 09:38:31 -06:00
Joshua Colp 6dba9ca6b4 Merge "bridge_native_rtp.c: Fail native bridge if no framing match." into 13 2018-11-19 09:35:36 -06:00
Joshua Colp b9692fb909 Merge "res_pjsip_caller_id: Use static pj_str_t for fromto header names." into 13 2018-11-19 08:39:57 -06:00
Joshua Colp b7b581f209 Merge "stasis: Add internal filtering of messages." into 13 2018-11-19 08:37:16 -06:00
George Joseph 0deaf81bff backtrace: Refactor ast_bt_get_symbols so it doesn't crash
We've been seeing crashes in libbfd when we attempt to generate
a stack trace from multiple threads.  It turns out that libbfd
is NOT thread-safe.  It can cache the bfd structure and give it to
multiple threads without protecting itself.  To get around this,
we've added a global mutex around the bfd functions and also have
refactored the use of those functions to be more efficient and
to provide more information about inlined functions.

Also added a few more tests to test_pbx.c.  One just calls
ast_assert() and the other calls ast_log_backtrace().  Neither are
run by default.

WARNING:  This change necessitated changing the return value of
ast_bt_get_symbols() from an array of strings to a VECTOR of
strings.  However, the use of this function outside Asterisk is not
likely.

ASTERISK-28140

Change-Id: I79d02862ddaa2423a0809caa4b3b85c128131621
2018-11-19 05:47:35 -07:00
Alexei Gradinari b6d0fbda9d pjsip: New function PJSIP_PARSE_URI to parse URI and return part of URI
New dialplan function PJSIP_PARSE_URI added to parse an URI and return
a specified part of the URI.

This is useful when need to get part of the URI instead of cutting it
using a CUT function.

For example to get 'user' part of Remote URI
${PJSIP_PARSE_URI(${CHANNEL(pjsip,remote_uri)},user)}

ASTERISK-28144 #close

Change-Id: I5d828fb87f6803b6c1152bb7b44835f027bb9d5a
2018-11-18 13:39:26 -07:00
George Joseph 6dcbbdec9b Merge "pjproject-bundled: Use AST_DEVMODE for conditional compilation." into 13 2018-11-18 14:12:06 -06:00
Joshua Colp d748ed4147 stasis: Add internal filtering of messages.
This change adds the ability for subscriptions to indicate
which message types they are interested in accepting. By
doing so the filtering is done before being dispatched
to the subscriber, reducing the amount of work that has
to be done.

This is optional and if a subscriber does not add
message types they wish to accept and set the subscription
to selective filtering the previous behavior is preserved
and they receive all messages.

There is also the ability to explicitly force the reception
of all messages for cases such as AMI or ARI where a large
number of messages are expected that are then generically
converted into a different format.

ASTERISK-28103

Change-Id: I99bee23895baa0a117985d51683f7963b77aa190
2018-11-18 14:07:56 -06:00
George Joseph 7ec470c1ca CI: Add tmpfs to all jenkinsfiles
Change-Id: Ida29d70d48d5f39aabf0b25c66b51f79324a8cba
2018-11-18 09:38:40 -07:00
George Joseph ba068d3576 Merge "res/res_pjsip_nat: Fix logic for REINVITES" into 13 2018-11-18 08:46:09 -06:00
George Joseph 7e83dc6ce5 Merge "taskprocessor: Prevent race creating new taskprocessor." into 13 2018-11-17 17:28:31 -06:00
George Joseph 73efe86436 CI: Mount a tmpfs on /tmp for testsuite docker containers
Change-Id: I0566d81b0852f22066cd76d58eae5f1fda5602aa
2018-11-17 14:40:46 -07:00
George Joseph a335f4c9ad CI: Pass work directory to runTestsuite
The testsuite can now use a user-specified work directory for
all it's temp files.  This allows the docker containers to use
a tmpfs backed directory for the temp files instead of it's
own write-layer image.

* runTestsuite.sh now accepts a --work-dir command line argument
  that gets exported as AST_WORK_DIR before running the testsuite.

* gates.jenkinsfile now specifies --work-dir to be
  <testsuite_dir>/astroot.

Since the Asterisk CI docker hosts now mount /srv/jenkins/workspace
on a tmpfs, asterisk should be compiled and the testsuite run all in
memory.

Change-Id: If5ee905a15821296c355bb84cda38950ad8edc45
2018-11-17 12:07:32 -07:00
George Joseph e0fbf92372 Merge "CI: Allow runUnittests to use 'expect' to run the tests" into 13 2018-11-17 11:30:12 -06:00
George Joseph 4937772a8d Merge "core: Fix handling of restart from remote console." into 13 2018-11-16 09:22:15 -06:00
George Joseph 97633c09c5 CI: Allow runUnittests to use 'expect' to run the tests
There seems to be a race condition between starting the asterisk
daemon and attempting to use 'asterisk -r' that can cause the
control socket file to not be created.  Since all of the Jenkins
slaves have 'expect' installed, the runUnittests script can use
it to start asterisk in the forground and issue the commands
interactively.  This is much more reliable and it can also make
startup errors more visible since they'll be in the Jenkins console
output.

If 'expect' isn't installed, the original daemon/asterisk -r
process is used.

Also added a "core show settings" before running the tests
and added "notice,warning,error" to the console log.

Change-Id: Idd656085f854afede813ac241b9e312b31358160
2018-11-16 08:03:25 -07:00
Corey Farrell 2f75f1941a taskprocessor: Prevent race creating new taskprocessor.
Task processors are retrieved using a 'get or create' pattern.  The
singleton container was unlocked between the get and create steps so
it's possible that two threads could create task processors with the
same name at the same time.

Change-Id: Id64fae94a6a1e940ddf38fde622dcd4391635382
2018-11-16 08:55:56 -05:00
Corey Farrell 433f1acbec
pjproject-bundled: Use AST_DEVMODE for conditional compilation.
We previously allowed resample and g711 codecs to be built when
TEST_FRAMEWORK was enabled.  This could cause errors if the testsuite
was run without this option enabled.  Switch the build system to allow
those codecs to be built when --enable-dev-mode is used.  This removes a
chance for strange testsuite errors from use of an inadequate pjsua
binary.

Change-Id: Iee8a3613cdb711fa7e7d217c5a775a575907ae22
2018-11-16 08:28:25 -05:00
Corey Farrell 580bc5e2c6
res_pjsip_caller_id: Use static pj_str_t for fromto header names.
PJSIP assumes that these header names are not allocated, does not clone
the name strings when reusing headers.

Block unload of res_pjsip_caller_id until shutdown to ensure static
memory stays valid.  It was previously unsafe to unload while any
sessions are active.

Change-Id: I190854dea943d6e441cf03733f8a0da661aea27f
2018-11-15 15:47:42 -05:00
George Joseph 4ae848e27a Merge "pbx_config: Only the first [globals] section is seen." into 13 2018-11-15 07:48:30 -06:00
Torrey Searle da4879443b res/res_pjsip_nat: Fix logic for REINVITES
The presence of Record-Route in re-invites is optional, thus it is
important to make sure the dialog doesn't have a routset before
rewriting the contact header.

ASTERISK-28129 #close

Change-Id: Ic8ceb54ccfc93f7e315e476c514a2c777f2da7dc
2018-11-15 07:35:00 -04:00
Corey Farrell 013d0c50fb
core: Fix handling of restart from remote console.
We cannot use need_el_end and SIGURG when restarting.  Instead we need
to run el_end within the SIGHUP restartnow handler.

ASTERISK-28158

Change-Id: Ia852276363c81bdcf1aa29eb4558c5c2fa1218a0
2018-11-15 06:27:51 -05:00
Joshua Colp a40b6ad471 Merge "core: Ensure that el_end is always run when needed." into 13 2018-11-14 07:06:52 -06:00
Joshua Colp 7a562e896e Merge "taskprocessor: Do not use separate allocation for stats or name." into 13 2018-11-14 07:05:54 -06:00
George Joseph e691f9fab2 Merge "jansson-bundled: Patch for off-nominal crash." into 13 2018-11-13 14:39:46 -06:00
Corey Farrell 8e7a8e8734
test_res_pjsip_scheduler: Fix possible write after free in scheduler_policy.
It's possible for a 4th task to be spawned before we cancel.  This
results in a write to the already freed test_data1.  Wait long enough to
verify success of the cancelation before freeing test_data1.

Change-Id: I057e2fcbe97f8a175e50890be89c28c20490a20f
2018-11-13 12:02:35 -05:00
Alexei Gradinari cf620ce0f6 RTP: need to reset DTMF last seqno/timestamp on voice packet with marker bit
The marker bit set on the voice packet indicates the start
of a new stream and a new time stamp.
Need to reset the DTMF last sequence number and the timestamp
of the last END packet.

If the new time stamp is lower then the timestamp of the last DTMF END packet
the asterisk drops all DTMF frames as out of order.

This bug was caught using Cisco ip-phone SPA50X and codec g722.
On SIP session update the SPA50X resets stream indicating it with market bit
and a new timestamp is twice smaller then the previous.

ASTERISK-28162 #close

Change-Id: If9c5742158fa836ad549713a9814d46a5d2b1620
2018-11-12 18:12:56 -05:00
Corey Farrell dc54dc0439
taskprocessor: Do not use separate allocation for stats or name.
Merge storage for the stats object and name string into the main
allocation for struct ast_taskprocessor.

Change-Id: I74fe9a7f357f0e6d63152f163cf5eef6428218e1
2018-11-12 08:11:54 -05:00
Joshua Colp 6aea312a55 Merge "res_pjsip.c: Make taskprocessor scheduling algorithm pick the shortest queue" into 13 2018-11-12 05:38:27 -06:00
Corey Farrell 2301580ba8 core: Ensure that el_end is always run when needed.
* Ignore console=yes configuration option in remote console processes.
* Use new flag to tell consolethread to run el_end and exit when needed.

ASTERISK-28158

Change-Id: I9e23b31d4211417ddc88c6bbfd83ea4c9f3e5438
2018-11-11 09:23:04 -05:00
Robert Cripps 834d37c39c bridge_native_rtp.c: Fail native bridge if no framing match.
ASTERISK-28110 #close

Change-Id: Ic64b8fc6a140a93fbdb2f97550a40d0ff334e607
2018-11-09 08:51:53 +00:00
Corey Farrell d4d3818ecb jansson-bundled: Patch for off-nominal crash.
pack_string crashed on non-NULL strings returned when s->has_error was
true if the string was the result of 's' format without '#', '%' or '+'.

Change-Id: Ic125df691d81ba2cbc413e37bdae657b304d20d0
2018-11-08 18:02:08 -05:00
Corey Farrell 1709f6be77
pbx_config: Only the first [globals] section is seen.
If multiple [globals] sections are used (for example via separate
included files), only the first one is processed.  This can result in
lost global variables when using a modular extensions.conf.

ASTERISK-28146 #close

Change-Id: Iaac810c0a7c4d9b1bf8989fcc041cdb910ef08a0
2018-11-08 06:43:01 -05:00
Chris-Savinovich bc2420ee0e res_pjsip: Send a 503 response when overload state if reliable transport.
When Asterisk's taskprocessors get overloaded we need to reduce the work
load. res_pjsip currently ignores new SIP requests and relies on SIP
retransmissions in the hope that the overload condition will clear soon
enough to handle the retransmitted SIP request.
This change adds the following code after ast_taskprocessor_alert_get()
has returned TRUE:
1- identifies transport type. If non-udp then send a 503 response
2- if transport type is udp/udp6 then ignore, as before.

Change-Id: I1c230b40d43a254ea0f226b7acf9ee480a5d3836
2018-11-07 07:59:18 -05:00
Joshua Colp 2c35dfc502 Merge "stasis: Clarify lifetime of topics." into 13 2018-11-07 06:06:02 -06:00
Kevin Harwell 214d0d118a res_pjsip: formatting error in documentation
The use of a '|' in the "global/debug" synopsis documentation caused the
generated html table on the wiki to add an extra column that included the
text after the pipe.

This patch replaces the pipe with a comma.

ASTERISK-28150

Change-Id: I3d79a6ca6d733d9cb290e779438114884b98a719
2018-11-06 18:05:00 -05:00
Alexei Gradinari 158214c1a0 res_pjsip.c: Make taskprocessor scheduling algorithm pick the shortest queue
The current round-robin method does not take the current taskprocessor
load into consideration when distributing requests.  Using the least-size
method the request goes to the taskprocessor that is servicing the least
number of active tasks at the current time.

Longer running tasks with the round-robin method can delay processing
tasks.

* Change the algorithm from round-robin to least-size for picking the
PJSIP taskprocessor from the default serializer pool.

Change-Id: I7b8d8cc2c2490494f579374b6af0a4868e3a37cd
2018-11-05 17:12:25 -06:00
George Joseph 8b965c386a Merge "chan_sip: Attempt ast_do_pickup in handle_invite_replaces" into 13 2018-11-05 09:33:22 -06:00
Joshua Colp 2f8499788a stasis: Clarify lifetime of topics.
As mentioned in the comment I've added in the code there is no
ability to unsubscribe all subscribers from a topic and explicitly
destroy it. This is not currently a problem as we have two types of
topics:

Long lived topics which exist for the lifetime of the system.
Ephemeral topics which feed a long lived topic.

In the case of the ephemeral topics there is no subscriber which does
not have its lifetime managed by the same entity that has created
the topic. This ensures that when the topic is being unreferenced the
subscribers are also unsubscribed and destroyed, allowing the topic
to ultimately be destroyed as well.

Change-Id: Ic5e244da7b16b1895ba1fc5ece481ebba5809c9a
2018-11-05 14:30:54 +00:00
Jasper Hafkenscheid cf193d53ad
chan_sip: Attempt ast_do_pickup in handle_invite_replaces
When a call pickup is performed using and invite with replaces header
the ast_do_pickup method is attempted and a PICKUP stasis message is sent.

ASTERISK-28081 #close
Reported-by: Luit van Drongelen

Change-Id: Ieb1442027a3ce6ae55faca47bc095e53972f947a
2018-11-02 15:03:13 +01:00
Pascal Cadotte Michaud 0a4e8a43e3
contrib/sip_to_pjsip: add a --quiet option to avoid prints
Using the --quiet or -q option in conjonction with /dev/stdout as the output
file allow the output to be used as a valid configuration.

Given a script that generates a valid sip.conf I can pipe the output of that
script into `sip_to_pjsip.py -q /dev/stdin /dev/stdout`. This allow me to use
that piped command in my pjsip.conf using the `exec` command.

ASTERISK-28136

Change-Id: I7b0e2e90e2549f3f8e01dc96701f111b5874c88d
2018-11-01 08:38:21 -04:00
George Joseph 5605928db0 Merge "res_pjsip: Add XML documentation for "use_callerid_contact"" into 13 2018-10-31 13:59:04 -05:00
George Joseph 466607da1c Merge "alembic: Fix use_callerid_contact option add script." into 13 2018-10-31 13:58:12 -05:00
George Joseph 5567f618a9 Merge "pjsip: new endpoint's options to control Connected Line updates" into 13 2018-10-31 13:56:47 -05:00
Joshua Colp 9946bcc557 res_pjsip: Add XML documentation for "use_callerid_contact"
ASTERISK-28087

Change-Id: I69d48813ec514f5ef06c6de994cba52630e0a3b4
2018-10-31 08:22:46 -05:00
Richard Mudgett c81ffa9ec8 alembic: Fix use_callerid_contact option add script.
ASTERISK-28087

Change-Id: I046d018015427d0916fab571b5a4f5367476f729
2018-10-30 10:52:28 -05:00
Alexei Gradinari bfe3821800 pjsip: new endpoint's options to control Connected Line updates
This patch adds new options 'trust_connected_line' and 'send_connected_line'
to the endpoint.

The option 'trust_connected_line' is to control if connected line updates
are accepted from this endpoint.

The option 'send_connected_line' is to control if connected line updates
can be sent to this endpoint.

The default value is 'yes' for both options.

Change-Id: I16af967815efd904597ec2f033337e4333d097cd
2018-10-30 10:37:51 -05:00
Pascal Cadotte Michaud e0472eb1d0 contrib/sip_to_pjsip: handle setvar in conversion
Given a sip.conf with the following content:

setvar FOO=1
setvar BAR=42

I want my generated pjsip.conf to containt the following set_vars

set_var FOO=1
set_var BAR=42

in the matching endpoint section.

Change-Id: I6c822401fda4133c3b44bf31e655b4eb939d4d26
2018-10-30 10:25:40 -05:00
George Joseph 0b695d1e38 Merge "res_pjsip_notify: improve realtime performance on CLI completion on the endpoint" into 13 2018-10-29 13:22:38 -05:00
Alexei Gradinari 82f0a86e39 res_pjsip_notify: improve realtime performance on CLI completion on the endpoint
The module 'res_pjsip_notify' inefficiently makes a lot of DB requests
on CLI completion on the endpoint.

For example if there are 10k endpoints the module makes 10k requests
of these 10k records.

Even if a part of the endpoint entered
the module makes the same 10k requests and then filtered them by itself.

This patch gathers endpoints container by prefix
and adds all gathered endpoints to completion at once.

ASTERISK-28137 #close

Change-Id: Ic20024912cc77bf4d3e476c4cd853293c52b254b
2018-10-26 18:15:36 -04:00
Torrey Searle bbbec2e95e res_pjsip_session: add new flag use_callerid_contact
Add a new global flag to res_pjsip to allow the callerid to be used
as the username in the contact header.  This allows chan_pjsip to have
the same behavour as chan_sip

ASTERISK-28087 #close

Change-Id: I9a720e058323f6862a91c62f8a8c1a4b5c087b95
2018-10-26 09:39:08 +02:00
Joshua Colp dc52719cb9 Merge "app_dial/queue/followme: 'I' options to block initial updates in both directions" into 13 2018-10-25 07:46:00 -05:00
Richard Mudgett 92f71534fd logger.c: Fix default console logging when no logger.conf available.
Default logging was not setup correctly when there was no logger.conf.
This resulted in many expected log messages not actually getting out to
the console.

Change-Id: I542e61c03b2f630ff5327f9de5641d776c6fa70c
2018-10-24 17:10:30 -05:00
George Joseph 1c33cf5cf1 Merge "astobj2: Eliminate usage of legacy container allocation macros." into 13 2018-10-24 08:30:27 -05:00
George Joseph 46e3dbf1fd Merge "app_dial/app_queue: Update application option documentation" into 13 2018-10-24 07:47:09 -05:00
George Joseph ba97d7709d Merge "lock: Replace __ast_mutex_logger with private log_mutex_error." into 13 2018-10-24 07:45:36 -05:00
Richard Mudgett d3d938016b Merge "Fix 'statement' typo throughout code." into 13 2018-10-22 10:25:14 -05:00
Richard Mudgett ace9bc0db4 Merge "samples: PARKINGSLOT -> PARKING_SPACE in parking sample config" into 13 2018-10-22 10:20:43 -05:00
Corey Farrell 54a1fbe428
astobj2: Eliminate usage of legacy container allocation macros.
These macros have been documented as legacy for a long time but are
still used in new code because they exist.  Remove all references to:
* ao2_container_alloc_options
* ao2_t_container_alloc_options
* ao2_t_container_alloc

These macro's are still available for use but only in modules.  Only
ao2_container_alloc remains due to it's use in over 100 places.

Change-Id: I1a26258b5bf3deb081aaeed11a0baa175c933c7a
2018-10-19 17:32:58 -04:00
Alexei Gradinari 0e7b91a22b app_dial/queue/followme: 'I' options to block initial updates in both directions
The 'I' option currently blocks initial CONNECTEDLINE or REDIRECTING updates
from the called parties to the caller.

This patch also blocks updates in the other direction before call is
answered.

ASTERISK-27980

Change-Id: I6ce9e151a2220ce9e95aa66666933cfb9e2a4a01
2018-10-19 15:35:24 -05:00
Corey Farrell 655a962aa5 lock: Replace __ast_mutex_logger with private log_mutex_error.
__ast_mutex_logger used the variable `canlog` without accepting it as a
argument.  Replace with internal macro `log_mutex_error` which takes
canlog as the first arguement.  This will prevent confusion when working
with lock.c code, many of the function declare the canlog variable and
in some cases it previously appeared to be unused.

Change-Id: I83b372cb0654c5c18eadc512f65a57fa6c2e9853
2018-10-19 11:43:28 -05:00
George Joseph b7cb2c90e6 Merge "taskprocessor: Warn on unused result from pushing task." into 13 2018-10-19 08:40:18 -05:00
Richard Mudgett badf0adf86 app_dial/app_queue: Update application option documentation
* Update the post-answer documentation and example.  The Dial example was
incorrect and misleading for the post-answer subroutine useage.

* Fix note and warning paragraphs in option descriptions.  They don't show
up in the wiki.

Change-Id: I81019a1fd75d5b9151f76b52c38e2a90da682d14
2018-10-18 16:56:01 -05:00
Sean Bright 78aee0f6a2 samples: PARKINGSLOT -> PARKING_SPACE in parking sample config
PARKINGSLOT was deprecated in Asterisk 12 but the sample config was not
updated to reflect that.

Change-Id: I3e087c19d9ee587094fa5304102d8084a79c2b3c
2018-10-18 15:56:42 -04:00
Richard Mudgett d8b9e3413c Fix 'statement' typo throughout code.
Most were in comments.  A couple were in warning messages.

Pointed out by Jonathan H on the Asterisk users mailing list.

Change-Id: I6286939dff5d0a27a2758140570106f1cb351855
2018-10-18 12:43:12 -05:00
Richard Mudgett ce2e04801a modules: Add missing run time module support levels.
Change-Id: I29b9dbfa4bbfc49f21eba356858e38b1d3041824
2018-10-17 14:42:07 -05:00
Corey Farrell 01716f70e6 taskprocessor: Warn on unused result from pushing task.
Add attribute_warn_unused_result to ast_taskprocessor_push,
ast_taskprocessor_push_local and ast_threadpool_push.  This will help
ensure we perform the necessary cleanup upon failure.

Change-Id: I7e4079bd7b21cfe52fb431ea79e41314520c3f6d
2018-10-17 08:27:29 -05:00
Richard Mudgett 75565adb55 bundled pjproject: Remove timer cleanup usage patch.
This patch is not in the upstream pjproject and does unsafe things with
the timer->_timer_id and timer->_grp_lock values in pj_timer_entry_reset()
outside of the timer heap lock.  pj_timer_entry_reset() is also called for
timers that are not about to be rescheduled in a few places.

Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1
2018-10-16 12:28:38 -05:00
George Joseph 6296b5c7be Merge "res_pjsip: set callerid_tag to empty string" into 13 2018-10-16 10:13:02 -05:00
George Joseph 737f6aec2f Merge "CI: Disable binary modules when REF_DEBUG is enabled." into 13 2018-10-16 10:11:59 -05:00
Jenkins2 0f41b4b7f8 Merge "threadpool: Eliminate pointless AO2 usage." into 13 2018-10-16 09:11:24 -05:00
George Joseph 145e2be84a Merge "CI: Use bundled jansson if needed." into 13 2018-10-15 10:35:26 -05:00
George Joseph e10033f074 Merge "main/astfd: Fix GCC8 format-truncation warning." into 13 2018-10-15 10:34:33 -05:00
George Joseph fb33300123 Merge "res_statsd.c: Fix returned reload status." into 13 2018-10-15 10:31:18 -05:00
Corey Farrell 7c49125f5b threadpool: Eliminate pointless AO2 usage.
thread_worker_pair, set_size_data and task_pushed_data structures are
allocated with AO2 objects, passed to a taskprocessor, then released.
They never have multiple owners or use locking so AO2 only adds
overhead.

Change-Id: I2204d2615d9d952670fcb48e0a9c0dd1a6ba5036
2018-10-13 06:22:14 -05:00
Alexei Gradinari 6b1a981ee1 res_pjsip: set callerid_tag to empty string
This patch sets the callerid_tag to empty string by default.

If the callerid_tag is set to NULL then the tag does not
become part of a connected line update.
For example:
Alice's tag is "Alice".
Bob's tag is empty.
Charlie's tag is "Charlie".
Alice calls Bob and then does attended transfer to Charlie.
When Alice hangs up the CONNECTEDLINE(tag) is "Alice"
on the interception routine on the Charlie's channel, but should be empty.

Ths patch also fix memory leaks if there are more then one options
"callerid", "callerid_tag", "voicemail_extension" and "contact_user"
in the pjsip.conf endpoint definition.

Change-Id: I86ba455c4677ca8d516d9a04ce7fb4d24dd576e4
2018-10-12 14:05:15 -05:00
Corey Farrell ebfb8baeed
main/astfd: Fix GCC8 format-truncation warning.
The field used to store call arguments was not large enough to hold the
arguments string that can be constructed for 'open'.  Expand it to
prevent this warning/error.

Change-Id: I514927f256481bc84df10a51b19d5b5fb1bc387e
2018-10-12 13:16:29 -04:00
Corey Farrell c4b979a841
chan_sip: Tell module loader that chan_sip is extended support.
Change-Id: I33508c134b1be888b8884f5dcfee19087634e415
2018-10-10 07:36:54 -04:00
Corey Farrell 348a23b187
CI: Disable binary modules when REF_DEBUG is enabled.
In Asterisk 13 binary modules are linked to the non-REF_DEBUG variants
of ao2 functions.  Cause false leaks to be reported when binary modules
are used.

Change-Id: I192b1b912ad20b6f46e51dcc0f6fcf2d6cef9e70
2018-10-10 04:46:14 -04:00
Richard Mudgett ccdb53a1ca res_statsd.c: Fix returned reload status.
The return status when there was no change in statsd.conf was incorrect.
This resulted in the wrong status message on the CLI when reloading the
module.

* Fixed cleanup on initial load if initializing statsd failed.

Change-Id: Id24fae75f1a7ff584a444a5680e867d989792481
2018-10-09 16:18:49 -05:00
Corey Farrell 3be3d4a730 CI: Use bundled jansson if needed.
Use pkg-config to determine if jansson is installed, enabled bundled
version otherwise.

Change-Id: Ib555a8b72ff6f6925f9280ef035caa0b91ca4bd2
2018-10-09 02:32:06 -05:00
George Joseph 39698e1dfd Merge "core/frame: generate correct T.140 payload in ast_sendtext_data()" into 13 2018-10-05 14:32:57 -05:00
George Joseph 7bba0b29be Merge "func_periodic_hook.c: Cleanup module resources on failure." into 13 2018-10-05 14:31:55 -05:00
George Joseph c007f01b4a Merge "codec_speex.c: Cleanup module loading to DECLINE and not FAILURE." into 13 2018-10-05 14:31:34 -05:00
George Joseph 674a882489 Merge "res_smdi.c: Fix module ref counting and inverted test." into 13 2018-10-05 10:51:58 -05:00
Richard Mudgett 69d62b5d04 func_periodic_hook.c: Cleanup module resources on failure.
* Make load_module() cleanup if it failed to setup the module.

* Make unload_module() always return 0.  It is silly to fail unloading if
the hook function we try to unregister was not even registered.

Change-Id: I280fc6e8ba2a7ee2588ca01d870eebaf74b4ffe6
2018-10-04 14:40:53 -05:00
Richard Mudgett f7cc6bada6 codec_speex.c: Cleanup module loading to DECLINE and not FAILURE.
If codec_speex fails to register a translator it would cause Asterisk to
exit instead of continue as a DECLINED module.

* Make unload_module() always return 0.  It is silly to fail unloading if
any translators we try to unregister were not even registered.

Change-Id: Ia262591f68333dad17673ba7104d11c88096f51a
2018-10-04 14:36:55 -05:00
George Joseph 1311aeecfb CI: Fix missing () in gates.jenkinsfile
Change-Id: I2f252e0f8c7f1a6328438fbd2be5d6574b7dfa5b
2018-10-04 12:03:05 -06:00
Jenkins2 8f6d527349 Merge "CI: Add timestamps and timeouts to jenkinsfiles" into 13 2018-10-04 12:50:19 -05:00
George Joseph 2065fe0c04 CI: Add timestamps and timeouts to jenkinsfiles
Change-Id: Ide83574dc957bc1df28e30a69079140050dfc35f
2018-10-04 09:13:22 -06:00
George Joseph e91cce7673 Merge "ast_coredumper: Remove .gdbinit file on exit" into 13 2018-10-04 09:42:44 -05:00
George Joseph d85100aed0 Merge "jenkins: Fix cleanup command redirection." into 13 2018-10-04 09:40:59 -05:00
George Joseph 2c0123aad8 Merge "CI: Use brace expansion instead of calling out to seq" into 13 2018-10-04 09:40:09 -05:00
George Joseph 50cfb30734 Merge "CI: Look up configured kernel.core_pattern sysctl" into 13 2018-10-04 08:54:37 -05:00
George Joseph 1300f8b490 Merge "ast_coredumper: Don't use "declare -n"" into 13 2018-10-04 07:27:35 -05:00
George Joseph 4d6e271419 Merge "astobj2: Comment on OBJ_NOLOCK in ao2_container_clone." into 13 2018-10-04 07:25:11 -05:00
George Joseph 422b4bb112 Merge "http.c: Reload TLS even if http.conf hasn't changed" into 13 2018-10-04 07:24:02 -05:00
neutrino88 1359f673bb core/frame: generate correct T.140 payload in ast_sendtext_data()
ast_sendtext_data() would create an incorrect T.140 text frame which
length include the null terminator byte. It causes ultimately RTP
packets to be send with this trailing 0. The proposed fix just set the
correct length to the text frame

ASTERISK-28089
Reported by: Emmanuel BUU
Tested by: Emmanuel BUU

Change-Id: I7ab1b9ed1e21683b2b667ea0a59d9aba3c77dd96
2018-10-04 03:34:16 -04:00
Sean Bright 4a19205ac7 ast_coredumper: Remove .gdbinit file on exit
Change-Id: I1297de78628773ca368e687c6f148bf74857cae9
2018-10-03 18:02:27 -04:00
Sean Bright e71c1ba045 CI: Look up configured kernel.core_pattern sysctl
Change-Id: I8246a0147df8d821fbbcabc1db1887104b8bedc4
2018-10-03 16:53:29 -05:00
Corey Farrell e1ce997437 jenkins: Fix cleanup command redirection.
Fix redirection to /dev/null of cleanup commands.  The '2' was being
interpreted as part of the command instead of part of the redirect.

Change-Id: I2e3a591b165e0288c4b82b9ef475fdfd5392a90a
2018-10-03 16:32:19 -05:00
George Joseph 856d0f1312 ast_coredumper: Don't use "declare -n"
Change-Id: I7ddfed4cd6549a0cd458e4d5cf9ac95d784de6cb
2018-10-03 14:29:31 -06:00
George Joseph 6f44c996ae Merge "CI: Use bindport instead of port in test http.conf" into 13 2018-10-03 13:56:14 -05:00
George Joseph 6f69e5adf2 Merge "core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames" into 13 2018-10-03 13:55:40 -05:00
Corey Farrell 2cec36fcc3
astobj2: Comment on OBJ_NOLOCK in ao2_container_clone.
The test for OBJ_NOLOCK looks wrong but it isn't.  Add comments to
prevent confusion.

Change-Id: I9662b82eb39e7627a1f1944fd18f967a2b987344
2018-10-03 12:02:35 -04:00
George Joseph 4b812569c8 Merge "core: Disable astobj2 locking for some common objects." into 13 2018-10-03 10:16:34 -05:00
George Joseph d57f3f64f8 Merge "loader: Fix result of module reload error." into 13 2018-10-03 09:29:44 -05:00
Sean Bright 7c65723f91 CI: Use brace expansion instead of calling out to seq
Also make the shebang in publishAsteriskDocs.sh the first line.

Change-Id: I3fdd6f22e652e4fb5b5fe85df46fa34eb6d0cf08
2018-10-03 09:11:12 -05:00
Sean Bright 71e9a94673 CI: Use bindport instead of port in test http.conf
Change-Id: Ife9a6879da63a56e5b8348a2024eeed4e7b1615b
2018-10-03 09:59:52 -04:00
Sean Bright c27da79ede http.c: Reload TLS even if http.conf hasn't changed
There is currently no way to indicate to Asterisk that TLS certificates
and/or keys have been updated other than by modifying http.conf or
restarting Asterisk.

There is already code in main/tcptls.c that determines if a reload is
actually necessary based on the hashes of the certicate and dependent
files, so this change merely gives us a way to request a reload without
explicitly modifying http.conf.

Change-Id: Ie795420dcc7eb3d91336820688a29adbcc321276
2018-10-03 09:34:30 -04:00
Corey Farrell 4ca65bdf17
core: Disable astobj2 locking for some common objects.
* ACO options
* Indications
* Module loader ref_debug object
* Media index info and variants
* xmldoc items

These allocation locations were identified using reflocks.py on the
master branch.

Change-Id: Ie999b9941760be3d1946cdb6e30cb85fd97504d8
2018-10-03 04:24:10 -04:00
Richard Mudgett d55ded340f res_smdi.c: Fix module ref counting and inverted test.
I think this module is so screwed up that it doesn't work anymore.  Even
with these attempts to fix things it still won't gracefully shut down.
The module refs will not go to zero to allow unloading the module.

* Fix module ref counting dealing with the SMDI interface object.  There
were several off-nominal paths that unbalanced the module ref count.  Also
the destructor freed the ao2 object itself which is bad.  Made the
smdi_read thread not hold its own ref to the SMDI interface object so when
all refs go away the destructor will stop the listener thread.

* Fixed the smdi_load() return code of 1 concerning the number of
listeners.  The test was inverted.

Change-Id: Ic288db51b58e395d6a2fc3847f77176c16988784
2018-10-02 18:18:36 -05:00
Corey Farrell bdd9f760ae Resolve warning about duplicate 'dialplan' CLI.
Change-Id: I029db1b4a32ccfb38374d6fe944dc430866f4b30
2018-10-02 13:28:31 -05:00
Corey Farrell e3c18f073b loader: Fix result of module reload error.
When a module reload fails we never set AST_MODULE_RELOAD_ERROR.  This
caused reload failures to incorrectly report 'No module found'.

Change-Id: I5f3953e0f7d135e53ec797f24c97ee3f73f232e7
2018-10-02 13:14:43 -05:00
neutrino88 3d03fca94a core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames
If a channel creates an AST_TEXT_FRAME with datalen == 0, the ast_frdup()
and ast_frisolate() functions could create a clone frame with an invalid
data.ptr which would cause a crash.  The proposed fix is to make sure that
for such empty text frames, ast_frdup() and ast_frisolate() return cloned
text frames with a valid data.ptr.

ASTERISK-28076
Reported by: Emmanuel BUU
Tested by: Emmanuel BUU

Change-Id: Ib882dd028598f13c4c233edbfdd7e54ad44a68e9
2018-10-02 11:24:10 -05:00
Richard Mudgett ec52409a53 app_queue.c: Fix json ref leak
Declining the queue_member_status_type stasis message in stasis.conf
causes these messages to leak json objects.

* Add missing ast_json_unref() if the type is NULL in
queue_publish_member_blob().

ASTERISK-28084

Change-Id: I691ecf49bd1f7d9c29182e1eee8c4bb7103be9fc
2018-10-01 11:45:52 -05:00
Joshua Colp 44615acd08 Merge "jansson-bundled: Add patches to improve json_pack error reporting." into 13 2018-10-01 10:57:52 -05:00
Joshua Colp 35338370cc Merge "astobj2: Reduce memory overhead." into 13 2018-10-01 09:07:07 -05:00
Joshua Colp dc5e8d87f7 Merge "lock: Improve performance of DEBUG_THREADS." into 13 2018-10-01 08:32:10 -05:00
Joshua Colp a02522c140 Merge "res_pjsip: improve realtime performance on CLI 'pjsip show contacts'" into 13 2018-10-01 06:50:53 -05:00
Joshua Colp dc03526380 Merge "res_stasis: Fix stale data in ARI bridges" into 13 2018-10-01 04:34:45 -05:00
Corey Farrell b994c03650 jansson-bundled: Add patches to improve json_pack error reporting.
Change-Id: I045e420d5e73e60639079246e810da6ae21ae22b
2018-09-28 14:56:23 -05:00
Corey Farrell 95dc10eb72 lock: Improve performance of DEBUG_THREADS.
Add a volatile flag to lock tracking structures so we only need to use
the global lock when first initializing tracking.

Additionally add support for DEBUG_THREADS_LOOSE_ABI.  This is used by
astobj2.c to eliminate storage for tracking fields when DEBUG_THREADS is
not defined.

Change-Id: Iabd650908901843e9fff47ef1c539f0e1b8cb13b
2018-09-28 13:45:34 -05:00
George Joseph 628dc8d63c Merge "config.c: Cleanup AST_INCLUDE_GLOB" into 13 2018-09-28 13:16:23 -05:00
Kevin Harwell fa76297e66 Merge "res_odbc: fix missing SQL error diagnostic" into 13 2018-09-28 10:38:43 -05:00
George Joseph ef9bb05bfa Merge "res_rtp_asterisk.c: Add "seqno" strictrtp option" into 13 2018-09-28 09:27:44 -05:00
George Joseph 69660f3c9a Merge "astobj2: Fix shutdown order." into 13 2018-09-28 08:35:02 -05:00
George Joseph 921c8589ef Merge "app_queue: Fix Attended transfer hangup with removing pending member." into 13 2018-09-28 07:48:43 -05:00
Ben Ford aa31657e28 res_rtp_asterisk.c: Add "seqno" strictrtp option
When networks experience disruptions, there can be large gaps of time
between receiving packets. When strictrtp is enabled, this created
issues where a flood of packets could come in and be seen as an attack.
Another option - seqno - has been added to the strictrtp option that
ignores the time interval and goes strictly by sequence number for
validity.

Change-Id: I8a42b8d193673899c8fc22fe7f98ea87df89be71
2018-09-28 07:28:12 -05:00
Corey Farrell 73fa382227
astobj2: Reduce memory overhead.
Reduce options to 2-bit field, magic to 30 bit field.  Move ref_counter
next to options the fields will pack.

This reduces memory overhead for every ao2 object by 8 bytes on x86_64.

Change-Id: Idc1baabb35ec3b3d8de463c4fa3011eaf7fcafb5
2018-09-27 19:48:37 -04:00
Sean Bright acfc06cfc0 config.c: Cleanup AST_INCLUDE_GLOB
* In main/config.c, AST_INCLUDE_GLOB is fixed to '1' making the #ifdefs
  pointless.

* In utils/extconf.c, AST_INCLUDE_GLOB is never defined so there is a
  lot of dead code.

Change-Id: I1bad1a46d7466ddf90d52cc724e997195495226c
2018-09-27 16:05:21 -04:00
Alexei Gradinari 7d79805d54 res_pjsip: improve realtime performance on CLI 'pjsip show contacts'
CLI command 'pjsip show contacts' inefficiently make a lot of DB requests.

For example if there are 10k aors then asterisk requests these 10k records
of aor and then does 10k requests of contact - one request per aor.

Even if use 'like <pattern>' the asterisk requests all aor's and contact's
records and then filters them by itself.

This patch gathers contact's container by
- retrieving all dynamic contacts by regex (filtered by reg_server)
- retrieving all aors with permanent contacts
- finally filters container by regex

ASTERISK-28077 #close

Change-Id: Id0ad65d14952a02fb213273a90f3f680a8149618
2018-09-27 13:30:14 -04:00
George Joseph efadf89131 Merge "res_rtp_asterisk: Raise event when RTP port is allocated" into 13 2018-09-27 09:20:39 -05:00
Joshua Colp 49116b55d9 Merge "CI: Add --test-timeout option to runTestsuite.sh" into 13 2018-09-27 06:23:36 -05:00
Corey Farrell 1f5c2a2d0d astobj2: Fix shutdown order.
When REF_DEBUG and AO2_DEBUG are both enabled we closed the refs log
before we shutdown astobj2_container.  This caused the AO2_DEBUG
container registration container to be reported as a leak.

Change-Id: If9111c4c21c68064b22c546d5d7a41fac430430e
2018-09-27 05:42:22 -05:00
Moritz Fain 27c46b8ff3 res_stasis: Fix stale data in ARI bridges
Fixed an issue that resulted in "Allocation failed" each time an ARI
request was made to start playing MOH on a bridge.

In bridge_moh_create() we were attaching the after bridge callbacks to
chan which is the ;1 channel of the unreal channel pair.  We should have
attached them to the ;2 channel which is pushed into the bridge by
ast_unreal_channel_push_to_bridge().  The callbacks are called when the
specific channel leaves the bridging system.  Since the ;1 channel is
never put into a bridge the callbacks never get called.  The callbacks
then never remove the moh_wrapper from the app_bridges_moh container.  As
a result we cannot find the channel associated with the wrapper to start
MOH because it has hungup.  This is the reason causing the reported issue.

* Rather than using after bridge callbacks to cleanup, we now have
moh_channel_thread() doing the cleanup when the channel hangs up.

* Fixed moh_channel_thread() accumulating control frames on the stasis
bridge MOH channel until MOH is stopped.  Control frames are no longer
accumulated while MOH is playing.

* Fixed channel ref counting issue.  stasis_app_bridge_moh_channel() may
or may not return a channel ref.  As a result ast_ari_bridges_start_moh()
wouldn't know it may have a channel ref to release.
stasis_app_bridge_moh_channel() will now return a ref with the channel it
returns.

* Eliminated RAII_VAR in bridge_moh_create().

ASTERISK-26094 #close

Change-Id: Ibff479e167b3320c68aaabfada7e1d0ef7bd548c
2018-09-26 18:50:09 -05:00
Cao Minh Hiep 74c5c1cd1b app_queue: Fix Attended transfer hangup with removing pending member.
This issue related to setting of holdtime, announcements, member delays.
It works well if we set the member delays to "0" and no announcements
and no holdtime.This issue will happen if we set member delays to "1",
"2"... or announcements or holdtime and hangs up the call during
processing it.

And here is the reason:
(At the step of answering a phone.)
It takes care any holdtime, announcements, member delays,
or other options after a call has been answered if it exists.

Normally, After the call has been aswered,
and we wait for the processing one of the cases of the member delays
or hold time or announcements finished, "if (ast_check_hangup(peer))"
will be not executed, then queue will be updated at update_queue().
Here, pending member will be removed.

However, after the call has been aswered,
if we hangs up the call during one of the cases of the member delays
or hold time or announcements, "if (ast_check_hangup(peer))"
will be executed.
outgoing = NULL and at hangupcalls, pending members will not be removed.

* This fixed patch will remove the pending member from container
before hanging up the call with outgoing is NULL.

ASTERISK-27920

Reported by: Cao Minh Hiep
Tested by: Cao Minh Hiep

Change-Id: Ib780fbf48ace9d2d8eaa1270b9d530a4fc14c855
2018-09-26 14:31:45 -05:00
George Joseph 4ddca53164 Merge "jansson: Backport fixes to bundled, use json_vsprintf if available." into 13 2018-09-26 11:09:23 -05:00
George Joseph 5b8b18cbd2 Merge "chan_sip: SipNotify on Chan_Sip vi AMI behave different to CLI" into 13 2018-09-26 09:33:49 -05:00
George Joseph 97f4290421 CI: Add --test-timeout option to runTestsuite.sh
The default is 600 seconds.
Also added timeouts to the *TestGroups.json files.

Change-Id: I8ab6a69e704b6a10f06a0e52ede02312a2b72fe0
2018-09-26 07:12:28 -06:00
George Joseph 63c02eeba4 Merge "rtp_engine: rtcp_report_to_json can overflow the ssrc integer value" into 13 2018-09-26 08:02:37 -05:00
Joshua Colp 155ff8e174 res_rtp_asterisk: Raise event when RTP port is allocated
This change raises a testsuite event to provide what port
Asterisk has actually allocated for RTP. This ensures that
testsuite tests can remove any assumption of ports and instead
use the actual port in use.

ASTERISK-28070

Change-Id: I91bd45782e84284e01c89acf4b2da352e14ae044
2018-09-25 10:37:11 +00:00
Corey Farrell 9c35f80adf
jansson: Backport fixes to bundled, use json_vsprintf if available.
Use json_vsprintf from versions which contain fix for va_copy leak.

Apply fixes from jansson master:
* va_copy leak fix.
* Avoid potential invalid memory read in json_pack.
* Rename variable that shadowed another.

Change-Id: I7522e462d2a52f53010ffa1e7d705c666ec35539
2018-09-24 18:55:59 -04:00
George Joseph 594bbbea57 Merge "app_voicemail: Fix stack overrun in append_mailbox" into 13 2018-09-24 13:48:50 -05:00
George Joseph a509bb729a Merge "app_voicemail: Cleanup mailbox topic and cache" into 13 2018-09-24 09:30:32 -05:00
George Joseph 984af7a1e8 Merge "stasis: Add function to delete topic from pool" into 13 2018-09-24 09:27:45 -05:00
George Joseph eda4e86df2 Merge "channel.c: Address stack overflow in does_id_conflict()" into 13 2018-09-24 09:22:48 -05:00
Kevin Harwell 286cf80bec rtp_engine: rtcp_report_to_json can overflow the ssrc integer value
When writing an RTCP report to json the code attempts to pack the "ssrc" and
"source_ssrc" unsigned integer values as a signed int value type. This of course
means if the ssrc's unsigned value is greater than that which can fit into a
signed integer value it gets converted to a negative number. Subsequently, the
negative value goes out in the json report.

This patch now packs the value as a json_int_t, which is the widest integer type
available on a given system. This should make it so the value no longer
overflows.

Note, this was caught by two failing tests hep/rtcp-receiver/ and
hep/rtcp-sender.

Change-Id: I2af275286ee5e795b79f0c3d450d9e4b28e958b0
2018-09-21 17:06:59 -05:00
George Joseph 656b3e85cf app_voicemail: Fix stack overrun in append_mailbox
The append_mailbox function wasn't calculating the correct length
to pass to ast_alloca and it wasn't handling the case where context
might be empty.

Found by the Address Sanitizer.

Change-Id: I7eb51c7bd18a7a8dbdba261462a95cc69e84f161
2018-09-21 15:06:16 -06:00
George Joseph 1948fbe439 channel.c: Address stack overflow in does_id_conflict()
does_id_conflict() was passing a pointer to an int to a callback
that expected a pointer to a size_t.

Found by the Address Sanitizer.

Change-Id: I0ff542067eef63a14a60301654d65d34fe2ad503
2018-09-21 14:23:34 -06:00
Alexei Gradinari 37c1f35922 res_odbc: fix missing SQL error diagnostic
On SQL error there is not diagnostic information about this error.
There is only
WARNING res_odbc.c: SQL Execute error -1!

The function ast_odbc_print_errors calls a SQLGetDiagField to get the number
of available diagnostic records, but the SQLGetDiagField returns 0.
However SQLGetDiagRec could return one diagnostic records in this case.

Looking at many example of getting diagnostics error information
I found out that the best way it's to use only SQLGetDiagRec
while it returns SQL_SUCCESS.

Also this patch adds calls of ast_odbc_print_errors on SQL_ERROR
to res_config_odbc.

ASTERISK-28065 #close

Change-Id: Iba5ae5470ac49ecd911dd084effbe9efac68ccc1
2018-09-20 18:28:40 -04:00
Sean Bright 3033242a7b res_rtp_asterisk: Reset all settings on module reload
'rtpchecksums' and 'rtcpinterval' are not being reset to their defaults
if they are not present in the updated configuration file.

Change-Id: I1162e40199314d46cf3225d5e1271c4c81176670
2018-09-20 16:26:55 -04:00
George Joseph a741cd4f11 Merge "stasis: No need to keep a stasis type ref in a stasis msg or cache object." into 13 2018-09-20 13:09:07 -05:00
George Joseph 7bdf1d3c67 app_voicemail: Cleanup mailbox topic and cache
app_voicemail wasn't properly cleaning up the stasis cache or the
mwi topic pool when the module was unloaded or when a user was
deleted as a result of a reload.  This resulted in leaks in both
areas.

* app_voicemail now calls ast_delete_mwi_state_full when it frees
  a user structure and ast_delete_mwi_state_full in turn now calls
  the new stasis_topic_pool_delete_topic function to clear the topic
  from the pool.

Change-Id: Ide23144a4a810e7e0faad5a8e988d15947965df8
2018-09-20 12:06:26 -06:00
Sean Bright 33ca3664ca AST-2018-009: Fix crash processing websocket HTTP Upgrade requests
The HTTP request processing in res_http_websocket allocates additional
space on the stack for various headers received during an Upgrade request.
An attacker could send a specially crafted request that causes this code
to overflow the stack, resulting in a crash.

* No longer allocate memory from the stack in a loop to parse the header
values.  NOTE: There is a slight API change when using the passed in
strings as is.  We now require the passed in strings to no longer have
leading or trailing whitespace.  This isn't a problem as the only callers
have already done this before passing the strings to the affected
function.

ASTERISK-28013 #close

Change-Id: Ia564825a8a95e085fd17e658cb777fe1afa8091a
2018-09-20 10:47:44 -05:00
George Joseph 1d141112b5 stasis: Add function to delete topic from pool
There's been a long standing leak when using topic pools.  The
topics in the pool get cleaned up when the last pool reference is
released but you can't remove a topic specifically.  If you reloaded
app_voicemail for instance, and mailboxes went away, their topics
were left in the pool.

* Added stasis_topic_pool_delete_topic() so modules can clean up
  topics from pools.
* Registered the topic pool containers so it can be examined from
  the CLI when AO2_DEBUG is enabled.  They'll be named
  "<topic_pool_name>-pool".

Change-Id: Ib7957951ee5c9b9b4482af7b9b4349112d62bc25
2018-09-20 08:41:15 -06:00
George Joseph 94a4eea7f6 stasis_cache: Stop caching stasis subscription change messages
Since app_voicemail no longer uses the cache to maintain its state
there is no longer a need to cache these messages.

ASTERISK-27121

Change-Id: I321c708505f5ad8d00e1b0afc4c27dc2ac12ecb4
2018-09-20 07:30:24 -05:00
Joshua Colp bce2a09793 Merge "pjproject: Update initial 2.8 patches to apply cleanly." into 13 2018-09-20 05:54:33 -05:00
Joshua Colp b2310c5434 Merge "app_voicemail: Remove need to subscribe to stasis" into 13 2018-09-20 04:53:04 -05:00
Richard Mudgett ac18bb23a9 stasis: No need to keep a stasis type ref in a stasis msg or cache object.
Stasis message types are global ao2 objects and we make stasis messages
and cache entries hold references to them.  Since there are currently
situations where cache objects are never deleted, the reference count on
the types can exceed 100000 and generate a FRACK assertion message.  The
stasis message cache could conceivably also have that many messages
legitimately on large systems.

The only down side to not holding the message type ref in the stasis
message is it only makes a crash either at shutdown or when manually
unloading a busy module slightly more likely.  However, this is more
exposing a pre-existing stasis shutdown ordering issue than a problem with
not holding a message type ref in stasis messages.

* Made stasis messages and cache entries no longer hold a ref to the
message type.

Change-Id: Ibaa28efa8d8ad3836f0c65957192424c7f561707
2018-09-19 12:26:54 -05:00
Richard Mudgett 418eb22ba6 pjproject: Update initial 2.8 patches to apply cleanly.
ASTERISK-28059

Change-Id: I027472f2753391646dde594a709a75f14422db93
2018-09-19 10:27:58 -05:00
Joshua Colp f4294baf21 Merge "alembic: fix suppress_q850_reason_headers column name" into 13 2018-09-19 09:36:47 -05:00
Richard Mudgett 2f84ff9728 stasis_message.c: Don't create immutable stasis objects with locks.
* Create the stasis message object without a lock as it is immutable.
* Create the stasis message type object without a lock as it is immutable.
* Creating the stasis message type could crash if the passed in type name
is NULL and REF_DEBUG is enabled.  Added missing NULL check when passing
the ao2 object tag string.

Change-Id: I28763c58bb9f0b427c11971d0103bf94055e7b32
2018-09-18 12:39:23 -05:00
George Joseph c4f1adf78e Merge "pjproject: Upgrade to 2.8." into 13 2018-09-18 11:14:35 -05:00
Florian Floimair 8539f6a657 alembic: fix suppress_q850_reason_headers column name
In the original commit introducing the feature the column in the alembic
script was called 'suppress_q850_reason_header'.
In the code however the option is called 'suppress_q850_reason_headers'
(trailing 's'). This leads to errors when ARI push configuration is used.

Change-Id: Ie84808adbca6fcc9136556e4f5d741adbef5d14f
2018-09-18 09:45:53 -05:00
pk16208 84c574bb8b chan_sip: SipNotify on Chan_Sip vi AMI behave different to CLI
With tls and udp enabled asterisk generates a warning about sending
message via udp instead of tls.
sip notify command via cli works as expected and without warning.

asterisk has to set the connection information accordingly to connection
and not on presumption

ASTERISK-28057 #close

Change-Id: Ib43315aba1f2c14ba077b52d8c5b00be0006656e
2018-09-18 09:35:26 -05:00
George Joseph 1843b0e2b5 app_voicemail: Remove need to subscribe to stasis
app_voicemail was using the stasis cache to build and maintain a
list of mailboxes that had subscribers.  It then used this list
to determine if a mailbox should be polled for new messages if
polling was enabled.  For this to work, stasis had to cache every
subscription and unsubscription to the mailbox which caused a lot of
overhead, both cpu and memory related.

Since polling is only required when changes are being made to
mailboxes outside of app_voicemail and since the number of mailboxes
that don't have any subscribers is likely to be very low, all
mailboxes are now polled instead of just the ones with subscribers.

This paves the way for disabling the caching of stasis subscription
change messages.

Also fixed cleanup in some of the unit tests that not only left
test users in the users list but also caused segfaults if the tests
were run more than once.

ASTERISK-27121

Change-Id: I5cceb737246949f9782955c64425b8bd25a9e9ee
2018-09-18 07:37:55 -06:00
Joshua Colp cd2deadb69 pjproject: Upgrade to 2.8.
This change brings in PJSIP 2.8, removes all the patches
that were merged upstream, and makes a minor change to
support a breaking change that was done.

ASTERISK-28059

Change-Id: I5097772b11b0f95c3c1f52df6400158666f0a189
2018-09-18 09:31:06 +00:00
Sean Bright 99b2e0c2ff autoconf: Check for srtp_get_version_string() before using it
Change-Id: Id2a916ff9448706090e72ff2c7fb3f5ba24a05df
2018-09-17 11:42:07 -04:00
George Joseph 926ac196af Merge "res_srtp.c: Show linked version of libsrtp on module init" into 13 2018-09-17 09:24:03 -05:00
George Joseph 3a09d9c74c Merge "res_pjsip: Log IPv6 addresses correctly" into 13 2018-09-17 08:33:40 -05:00
George Joseph 0b88512a4d CI: Fix typo in testsuite git checkout
Change-Id: I30024515e5b00a5044fd39fbff27d818f016b719
2018-09-17 06:10:18 -06:00
Sean Bright 44375c0616 res_srtp.c: Show linked version of libsrtp on module init
Change-Id: Ib0a645d6985de5757cc4399ed2524b2d02c4f342
2018-09-16 07:08:29 -04:00
Sean Bright d3c869c736 res_pjsip: Log IPv6 addresses correctly
Both pjsip_tx_data.tp_info.dst_name and pjsip_rx_data.pkt_info.src_name
store IPv6 addresses without enclosing brackets. This causes some log
output to be confusing because it is difficult to separate the IPv6
address from a port specification.

* Use pj_sockaddr_print() along with pjsip_tx_data.tp_info.dst_addr and
  pjsip_rx_data.pkt_info.src_addr where possible for consistent IPv6
  output.

* When a pj_sockaddr is not available, explicitly wrap IPv6 addresses
  in brackets.

* When assigning pjsip_rx_data.pkt_info.src_name ourselves, make sure
  to also set pjsip_rx_data.pkt_info.src_addr.

Change-Id: I5cfe997ced7883862a12b9c7d8551d76ae02fcf8
2018-09-14 15:58:59 -04:00
George Joseph 52324ef1a1 CI: Use proper credentials for Security testsuite checkout
Can't do anonymous http checkout from Security-testsuite.
Need to use same credentials as the gerrit review checkout.

Change-Id: I87af68c995cb8926f5e87f9af245600d76984f05
2018-09-14 11:31:28 -06:00
Jenkins2 d4becda8ec Merge "res_musiconhold.c: Restart MOH if previous hold just reached end-of-file" into 13 2018-09-14 09:54:57 -05:00
Jenkins2 641e5b7e63 Merge "optional_api: Remove unused nonoptreq fields" into 13 2018-09-13 13:06:41 -05:00
George Joseph dd429cd4d8 Merge "CI: Use .gitreview to default BRANCH_NAME." into 13 2018-09-13 10:36:58 -05:00
Joshua Colp 55a306deef Merge "res_pjproject: Fix sockaddr conversion routines for non-bundled PJSIP" into 13 2018-09-13 07:10:48 -05:00
Corey Farrell d1f6a323a0 CI: Use .gitreview to default BRANCH_NAME.
This ensures that binary modules are avoided in the master branch even
if BRANCH_NAME is not set.

Change-Id: I79162d2063f22fa9d6b31fde4827ace2dd5bf0da
2018-09-12 19:12:07 -05:00
Walter Doekes d226458c5b optional_api: Remove unused nonoptreq fields
As they're not actively used, they only grow stale. The moduleinfo field itself
is kept in Asterisk 13/15 for ABI compatibility.

ASTERISK-28046 #close

Change-Id: I8df66a7007f807840414bb348511a8c14c05a9fc
2018-09-12 19:15:33 +02:00
Sean Bright 931b68d3e6 res_pjproject: Fix sockaddr conversion routines for non-bundled PJSIP
The bundled version of pjproject has a patch for Solaris compatability
that changes the definition of various socket structures which we need
to account for when compiling against a non-bundled version.

ASTERISK-28049 #close

Change-Id: Ia1ea47c433fc2d915115193ee889a752373925f0
2018-09-12 08:21:48 -04:00
Corey Farrell 436daa50ff
Build System: Resolve conflict between DESTDIR and bundled jansson.
If Asterisk is built using a DESTDIR this will cause the bundled jansson
to be installed to an unexpected location and we will fail to find it.

Change-Id: Id033e2813261e0d45232383d44c6391122169548
2018-09-10 23:34:08 -04:00
Joshua Colp 3fd1216083 Merge "stasis_cache: Prune stasis_subscription_change messages" into 13 2018-09-07 05:40:24 -05:00
Joshua Colp b9cf678d18 Merge "app_queue: Update realtime queuemembers after wait_a_bit(), not before" into 13 2018-09-07 04:48:18 -05:00
Frederic LE FOLL a5f87a3a36 res_musiconhold.c: Restart MOH if previous hold just reached end-of-file
On MOH activation, moh_files_readframe() is called while the current
stream attached to the channel is NULL and it calls ast_moh_files_next()
immediately.  However, it won't call ast_moh_files_next() again if sample
reading fails.  The failure may occur because res_musiconhold retains the
last sample reading position in the channel data and MOH during the
previous hold/retrieve just reached EOF.  Obviously, a bit of bad luck is
required here.

* Restructured moh_files_readframe() to try a second time to start MOH if
there was no stream setup and the saved position was at EOF.  Also added
comments describing what is going on for each step.

ASTERISK-28029

Change-Id: I1508cf2c094f8feca22d6f76deaa9fdfa9944860
2018-09-06 19:39:05 -05:00
lvl eda1af091e app_queue: Update realtime queuemembers after wait_a_bit(), not before
This ensures the most up-to-date information is used for the next
call attempt.

ASTERISK-28032

Change-Id: I02fc17c6ffb50bb60ea97c2d2e6023e8061815ce
2018-09-06 16:13:00 -05:00
Sean Bright b0ef54af71 res_pjproject: Add utility functions to convert between socket structures
Currently, to convert from a pj_sockaddr to an ast_sockaddr, the address
needs to be rendered to a string and then parsed into the correct
structure. This also involves a call to getaddrinfo(3). The same is true
for the inverse operation.

Instead, because we know the internal structure of both ast_sockaddr and
pj_sockaddr, we can translate directly between the two without the
need for an intermediate string.

Change-Id: If0fc4bba9643f755604c6ffbb0d7cc46020bc761
2018-09-06 14:19:06 -04:00
George Joseph 60b703d9ca Merge "http.c: Give HTTP error response when received lines are too long." into 13 2018-09-06 11:49:46 -05:00
George Joseph 87550706c8 stasis_cache: Prune stasis_subscription_change messages
The stasis cache provides a way to reconstruct the current state
of topic subscribers.  Unfortunately, since every subscribe and
unsubscribe is cached, the cache continues to grow unabated while
asterisk is running.  This patch removes subscribe messages from
the cache when the corresponding unsubscribe is received.

This patch also registers the cache containers with ao2 so that if
AO2_DEBUG is turned on, you can list the container and get its
stats from the CLI.

ASTERISK-27121

Change-Id: I3d18905e477f3721815da91f30da8d3fbb2d4f56
2018-09-05 12:50:42 -06:00
George Joseph 8936a264bb Merge "app_dial: set the comment for OPT_ARG_ANNOUNCE to really what is done" into 13 2018-09-05 10:59:45 -05:00
George Joseph 5d4cf16c17 Merge "res_pjsip: Fix mwi_subscribe_replaces_unsolicited type mismatch" into 13 2018-09-05 09:55:06 -05:00
Rodrigo Ramírez Norambuena 17040d1ce3 app_dial: set the comment for OPT_ARG_ANNOUNCE to really what is done
Change-Id: I08f88adb09f7e5813f37e70fecd787468cdb32c8
2018-09-04 07:51:31 -05:00
Chris-Savinovich 7b898dd8e1 pbx_config.c: Fix reloading module if initially declined to load
Added decline if extensions.conf file not available
when loading pbx_config, and also made sure everything
gets properly unregistered and/or destroyed on unload.

Change-Id: Ib00665106043b1be5148ffa7a477396038915854
2018-08-31 18:02:35 -04:00
Richard Mudgett 4e20fe9f06 http.c: Give HTTP error response when received lines are too long.
Added a check when we receive a HTTP request line or header line that is
too long.  We now return an error response to the sender because we are
not able to process the request.

Change-Id: I6df2705435fd7dde4d5d3bdf7acec859cfb7c12d
2018-08-30 16:40:31 -05:00
Jenkins2 c0e47ee2be Merge "make config: os-release output error." into 13 2018-08-30 14:37:43 -05:00
Joshua Colp d0da68bfc9 Merge "res_pjsip_transport_websocket: Properly set src_name for IPv6" into 13 2018-08-30 11:09:16 -05:00
Joshua Colp 6bf0943ecb Merge "res_fax: Handle fax gateway being started more than once." into 13 2018-08-30 05:04:29 -05:00
Richard Mudgett f2266602a1 res_pjsip: Fix mwi_subscribe_replaces_unsolicited type mismatch
ASTERISK-27988

Change-Id: Iccafdd0552ea8aaed647620fb14499f1bf341843
2018-08-29 09:45:22 -05:00
Rodrigo Ramírez Norambuena 00e5c7d0ff make config: os-release output error.
Fix not show the error
"/bin/sh: /etc/os-release: No such file or directory" when the command
'make config' is run in a System without systemv.

The instruction 'make config' pre execute the syntax
"$(shell . /etc/os-release && echo $$ID)" to identified if system is a
Slackware and Opensuse.

This change prevent show the message and is send to the /dev/null

Change-Id: I7f43e281a8d9405b2519fc653de82d9b8b645fdf
2018-08-29 08:26:02 -05:00
Joshua Colp cfe8ef917d Merge "Create --disable-binary-modules option." into 13 2018-08-29 06:09:42 -05:00
Joshua Colp fa71f498ce res_fax: Handle fax gateway being started more than once.
The T.38 fax gateway state machine can cause the fax gateway
to be started more than once on a channel depending on the
responses of the remote endpoint. This would previously leak
the channel name, channel unique id, and underlying fax engine
state. This change instead makes it so that if the fax gateway
session is already present and not reserved the fax gateway
is not started again.

ASTERISK-27981

Change-Id: I552d95086860cb18f2522ee40ef47b13b6da2e0e
2018-08-29 07:18:08 -03:00
George Joseph 36a03b673a Merge "alembic: increase uri column size" into 13 2018-08-28 09:16:39 -05:00
George Joseph 7ede0ca5b3 Merge "res/res_rtp_asterisk: remove debug traces generated by an empty frame" into 13 2018-08-28 09:15:21 -05:00
Sean Bright f3188a634d res_pjsip_transport_websocket: Properly set src_name for IPv6
SIP responses over WebSockets when the client is using IPv6 have invalid
Via headers according to RFC 3261. The 'received' header parameter
should not be wrapped in brackets if it is an IPv6 address.

When src_name is populated by the built-in PJSIP transports, the code
uses pj_sockaddr_print() with 'flags' set to 0, meaning that the
brackets are not rendered around IPv6 addresses.

This may be related to ASTERISK~27101.

See also: https://github.com/onsip/SIP.js/pull/594

ASTERISK-28020 #close

Change-Id: I8ea9d289901b837512bee2ca2535e3dc14f04d77
2018-08-28 09:01:19 -04:00
Corey Farrell abb04622f7 Create --disable-binary-modules option.
This new option can be passed for ./configure or
./tests/CI/buildAsterisk.sh to prevent download/install of binary
modules.

Normally enabling the categories MENUSELECT_CODECS or MENUSELECT_RES
will result in binary modules being enabled even if the build target is
incompatible with those modules.  This includes CI scripts which enable
categories before disabling specific modules.

If more binary modules are offered in the future this will help avoid
accidentally downloading them if unwanted or incompatible.  Adding a
binary module will only require creating a new menuselect entry similar
to the existing ones, it will not be necessary to modify the CI scripts.

Change-Id: I6b1bd1c75a2e48f05b8b8a45b7a7a2d00a079166
2018-08-27 13:51:29 -05:00
Jenkins2 37102eb449 Merge "chan_sip: improved ip:port finding of peers for non-UDP transports." into 13 2018-08-27 07:43:03 -05:00
George Joseph 8e904d22cf Merge "sample_configs: noload res_hep.so by default" into 13 2018-08-27 06:30:13 -05:00
Joshua Colp c2cafddaf3 Merge "AMI: be less verbose when adding HTTP headers to AMI/HTTP messages." into 13 2018-08-24 10:12:29 -05:00
Jaco Kroon 2a5d408733 chan_sip: improved ip:port finding of peers for non-UDP transports.
Also remove function peer_ipcmp_cb since it's not used (according to
rmudgett).

Prior to b2c4e8660a (ASTERISK_27457)
insecure=port was the defacto standard.  That commit also prevented
insecure=port from being applied for sip/tcp or sip/tls.

Into consideration there are three sets of behaviour:

1.  "previous" - before the above commit.
2.  "current" - post above commit, pre this one.
3.  "new" - post this commit.

The problem that the above commit tried to address was guests over TCP.
It succeeded in doing that but broke transport!=udp with host!=dynamic.

This commit attempts to restore sane behaviour with respect to
transport!=udp for host!=dynamic whilst still retaining the guest users
over tcp.

It should be noted that when looking for a peer, two passes are made, the
first pass doesn't have SIP_INSECURE_PORT set for the searched-for peer,
thus looking for full matches (IP + Port), the second pass sets
SIP_INSECURE_PORT, thus expecting matches on IP only where the matched
peer allows for that (in the author's opinion:  UDP with insecure=port,
or any TCP based, non-dynamic host).

In previous behaviour there was special handling for transport=tcp|tls
whereby a peer would match during the first pass if the utilized
transport was TCP|TLS (and the peer allowed that specific transport).

This behaviour was wrong, or dubious at best.  Consider two dynamic tcp
peers, both registering from the same IP (NAT), in this case either peer
could match for connections from an IP.  It's also this behaviour that
prevented SIP guests over tcp.

The above referenced commit removed this behaviour, but kept applying
the SIP_INSECURE_PORT only to WS|WSS|UDP.  Since WS and WSS is also TCP
based, the logic here should fall into the TCP category.

This patch updates things such that the previously non-explicit (TCP
behaviour) transport test gets performed explicitly (ie, matched peer
must allow for the used transport), as well as the indeterministic
source-port nature of the TCP protocol is taken into account.  The new
match algorithm now looks like:

1.  As per previous behaviour, IP address is matched first.

2.  Explicit filter with respect to transport protocol, previous
    behaviour was semi-implied in the test for TCP pure IP match - this now
    made explicit.

3.  During first pass (without SIP_INSECURE_PORT), always match on port.

4.  If doing UDP, match if matched against peer also has
    SIP_INSECURE_PORT, else don't match.

5.  Match if not a dynamic host (for non-UDP protocols)

6.  Don't match if this is WS|WSS, or we can't trust the Contact address
    (presumably due to NAT)

7.  Match (we have a valid Contact thus if the IP matches we have no
    choice, this will likely only apply to non-NAT).

To logic-test this we need a few different scenarios.  Towards this end,
I work with a set number of peers defined in sip.conf:

[peer1]
host=1.1.1.1
transport=tcp

[peer2]
host=1.1.1.1
transport=udp

[peer3]
host=1.1.1.1
port=5061
insecure=port
transport=udp

[peer4]
host=1.1.1.2
transport=udp,tcp

[peer5]
host=dynamic
transport=udp,tcp

Test cases for UDP:

1 - incoming UDP request from 1.1.1.1:
  - previous:
    - pass 1:
      * peer1 or peer2 if from port 5060 (indeterminate, depends on peer
        ordering)
      * peer3 if from port 5061
      * peer5 if registered from 1.1.1.1 and source port matches
    - pass 2:
      * peer3
  - current: as per previous.
  - new:
    - pass 1:
      * peer2 if from port 5060
      * peer3 if from port 5061
      * peer5 if registered from 1.1.1.1 and source port matches
    - pass 2:
      * peer3

2 - incoming UDP request from 1.1.1.2:
  - previous:
    - pass 1:
      * peer5 if registered from 1.1.1.2 and port matches
      * peer4 if source port is 5060
    - pass 2:
      * no match (guest)
  - current: as previous.
  - new as previous (with the variation that if peer5 didn't have udp as
          allowed transport it would not match peer5 whereas previous
          and current code could).

3 - incoming UDP request from anywhere else:
  - previous:
    - pass 1:
      * peer5 if registered from that address and source port matches.
    - pass 2:
      * peer5 if insecure=port is additionally set.
      * no match (guest)
  - current - as per previous
  - new - as per previous

Test cases for TCP based transports:

4 - incoming TCP request from 1.1.1.1
  - previous:
    - pass 1 (indeterministic, depends on ordering of peers in memory):
      * peer1; or
      * peer5 if peer5 registered from 1.1.1.1 (irrespective of source port); or
      * peer2 if the source port happens to be 5060; or
      * peer3 if the source port happens to be 5061.
    - pass 2: cannot happen since pass 1 will always find a peer.
  - current:
    - pass 1:
      * peer1 or peer2 if from source port 5060
      * peer3 if from source port 5060
      * peer5 if registered as 1.1.1.1 and source port matches
    - pass 2:
      * no match (guest)
  - new:
    - pass 1:
      * peer 1 if from port 5060
      * peer 5 if registered and source port matches
    - pass 2:
      * peer 1

5 - incoming TCP request from 1.1.1.2
  - previous (indeterminate, depends on ordering):
    - pass 1:
      * peer4; or
      * peer5 if peer5 registered from 1.1.1.2
    - pass 2: cannot happen since pass 1 will always find a peer.
  - current:
    - pass 1:
      * peer4 if source port is 5060
      * peer5 if peer5 registered as 1.1.1.2 and source port matches
    - pass 2:
      * no match (guest).
  - new:
    - pass 1:
      * peer4 if source port is 5060
      * peer5 if peer5 registered as 1.1.1.2 and source port matches
    - pass 2:
      * peer4

6 - incoming TCP request from anywhere else:
  - previous:
    - pass 1:
      * peer5 if registered from that address
    - pass 2: cannot happen since pass 1 will always find a peer.
  - current:
    - pass 1:
      * peer5 if registered from that address and port matches.
    - pass 2:
      * no match (guest)
  - new: as per current.

It should be noted the test cases don't make explicit mention of TLS, WS
or WSS.  WS and WSS previously followed UDP semantics, they will now
enforce source port matching.  TLS follow TCP semantics.

The previous commit specifically tried to address test-case 6, but broke
test-cases 4 and 5 in the process.

ASTERISK-27881 #close

Change-Id: I61a9804e4feba9c7224c481f7a10bf7eb7c7f2a2
2018-08-24 02:31:41 -05:00
Jaco Kroon b528715fa0 AMI: be less verbose when adding HTTP headers to AMI/HTTP messages.
All HTTP/AMI message headers are being sent to the verbose channel.
There are multiple places this is happening.  Consolidate the loop into
a function.  Drop the debug/verbose message.

Convert to using ast_asprintf to perform the length calculation, memory
allocation and snprintf all in one step.

Change-Id: Ic45e673fde05bd544be95ad5cdbc69518207c1a1
2018-08-23 12:19:46 -05:00
Matthew Fredrickson adb3195697 sample_configs: noload res_hep.so by default
Change disables loading of res_hep.so in default installation.  Loading
res_hep has a performance impact whether it's used or not.  This disables
loading of it in sample config files.

Change-Id: I5ec150cf941634fabc72973e5bf1a965cb0ef9d0
(cherry picked from commit c8bacd45f1)
2018-08-23 10:12:08 -05:00
Jenkins2 6c4a029bbe Merge "chan_sip: remove unnecessary ast_channel_unlock(peer) as RAII looks after it" into 13 2018-08-23 08:06:25 -05:00
Florian Floimair 1928e00d90 alembic: increase uri column size
When mobile SIP clients register with Asterisk that use some sort of
push notifications, the URI can get quite lengthy due to the
additional push-service annotations (things like tokens, pn-type, etc.)
contained in it.

ASTERISK-28022 #close

Change-Id: I08e17b37af5a446c36cc7d1f903861f81fd41cca
2018-08-23 14:06:45 +02:00
Joshua Colp 0bc1366e15 Merge "app_queue: Silence GCC 8 compiler warning" into 13 2018-08-22 11:17:20 -05:00
Sean Bright b9d9c0a8b9 app_queue: Silence GCC 8 compiler warning
I'm only seeing an error in 14+, so I assume it is due to different
compiler options:

app_queue.c: In function ‘handle_queue_add_member’:
app_queue.c:10234:19: error: ‘%d’ directive writing between 1 and 11
    bytes into a region of size 3 [-Werror=format-overflow=]
     sprintf(num, "%d", state);
                   ^~
app_queue.c:10234:18: note: directive argument in the range
    [-2147483648, 99]
     sprintf(num, "%d", state);
                  ^~~~

Compiler: gcc version 8.0.1 20180414 (experimental)
    [trunk revision 259383] (Ubuntu 8-20180414-1ubuntu2) 

Change-Id: I18577590da46829c1ea7d8b82e41d69f105baa10
2018-08-22 08:52:46 -05:00
Joshua Colp 1cb87da69c Merge "pbx_dundi.c: Handle thread shutdown better." into 13 2018-08-21 18:53:06 -05:00
alecdavis 6964bc37e0 chan_sip: remove unnecessary ast_channel_unlock(peer) as RAII looks after it
Otherwise console output

        (get_refer_info): mutex 'peer' freed more times than we've locked!
        (get_refer_info): Error releasing mutex: Operation not permitted

    or
        (get_refer_info): attempted unlock mutex 'peer' without owning it!
        (__ast_read): 'peer' was locked here.
        ...dump_backtrace

        (get_refer_info): Error releasing mutex: Operation not permitted
        (__ast_read): mutex 'chan' freed more times than we've locked!

ASTERISK-28011 #close

Change-Id: I6e45f2764ba4f3273a943300f91ac9b461ac2893
2018-08-22 11:46:32 +12:00
neutrino88 49d388bfa8 res/res_rtp_asterisk: remove debug traces generated by an empty frame
The realtime text timer pops regularly and sends text frames even if
the buffer is empty. This causes a lot of unecessary debug logging.

* Made red_write() test if we need to send a frame before calling
ast_rtp_write()

ASTERISK-28002
Reported by: Emmanuel BUU
Tested by: Emmanuel BUU

Change-Id: Icf81310c3b8080b615a42060afc02ab41f9523dd
2018-08-21 18:24:48 -05:00
Joshua Colp ef061d1854 Merge "AMI: Remove docs for nonexistent AMI ContactStatus event headers" into 13 2018-08-21 08:07:28 -05:00
Joshua Colp a339cc1240 Merge "pbx_dundi.c: Misc memory management fixes when destroying peers" into 13 2018-08-21 06:27:34 -05:00
Joshua Colp d195767b07 Merge "pbx_dundi: Fix debug frame decode string." into 13 2018-08-21 05:52:26 -05:00
Richard Mudgett 9b9dee2d2c AMI: Remove docs for nonexistent AMI ContactStatus event headers
Change-Id: I5736965c64c44338f7330e85a24bb46818607f19
2018-08-20 12:31:58 -05:00
George Joseph 3146666b71 Merge "res_sorcery_realtime.c: Fix unqualified fetch warning." into 13 2018-08-20 10:56:48 -05:00
Richard Mudgett a66fa4db24 res_sorcery_realtime.c: Fix unqualified fetch warning.
The allow_unqualified_fetch option for the sorcery realtime backend
blocked actually fetching all rows when the option is set to warn.

* Made issue a warning and actually do the request when
allow_unqualified_fetch=warn is set.

Change-Id: I74456c80a03a62dce66fc3dc3cb0cf2351ac4312
2018-08-17 16:33:00 -05:00
Richard Mudgett f3924b576a pbx_dundi.c: Misc memory management fixes when destroying peers
* In destroy_peer(), fixed memory leaks of lookup history strings and
qualify transactions when destroying peers.

* In destroy_peer(), fixed leaving the registerexpire scheduled callback
active when a peer is destroyed on a reload.  The reload marks and sweeps
peers so any peers not explicitly configured get destroyed.  Peers created
dynamically from the '*' peer will not exist until they re-register after
the reload.  These destroyed peers caused memory corruption when the
registerexpire timer expired.

* Made build_peer() not schedule any callbacks on the '*' peer
(empty_eid).  It is a special peer that is cloned to dynamically created
peers so it doesn't actually get involved in any message transactions.

* Made do_register_expire() remove the dundi/dpeers AstDB entry when a
peer registration expires.

* Fix deep_copy_peer() to not copy some things that cannot be copied to
the cloned peer structure.  Timers, message transactions, and lookup
history are specific to a peer instance.

* Made set_config() lock around processing the mappings configuration.

* Reordered unload_module() to handle load_module() declining the load due
to error.

Change-Id: Ib846b2b60d027f3a2c2b3b563d9a83a357dce1d6
2018-08-17 14:44:35 -05:00
Richard Mudgett fbc53412f6 pbx_dundi.c: Handle thread shutdown better.
Change-Id: Id52f99bd6a948fe6dd82acc0a28b2447a224fe87
2018-08-17 14:42:48 -05:00
Richard Mudgett ad2dfb07b0 pbx_dundi: Fix debug frame decode string.
* Fixed a typo in the name of the REGREQ frame decode string array.
* Fixed off by one range check indexing into the frame decode string
array.
* Removed some unneeded casts associated with the decode string array.

Change-Id: I77435e81cd284bab6209d545919bf236ad7933c2
2018-08-17 14:41:04 -05:00
Richard Mudgett 0a7dab8904 pbx_dundi: Update sample config documentation.
Change-Id: I33d0ad0611c2124ca3440f0f811fa0f45e4e2849
2018-08-17 14:39:39 -05:00
Joshua Colp 9ce4708da9 Merge "CI: Disable res_odbc if REF_DEBUG is requested." into 13 2018-08-17 06:16:14 -05:00
Joshua Colp 40d2d317ae Merge "res_pjsip: Resolve transport management leak at shutdown." into 13 2018-08-17 05:38:47 -05:00
George Joseph 33a1593fba CI: Final version of setting correct gerrit creds
Change-Id: I7729ecceedceb12f52bf18dae259846aa1d993b3
2018-08-16 12:28:03 -06:00
George Joseph ab095ca4c6 CI: Yet Another stab at creds
Change-Id: I768850780d39151c5dd8e2bb1a4b24776727958e
2018-08-16 12:23:05 -06:00
George Joseph b1e294c670 CI: Another stab at creds
Change-Id: I5b1dc3b354789e676c27a4e1fc42f5c3343cc994
2018-08-16 12:11:11 -06:00
George Joseph 45d096fe8d CI: Add https credentials to gerrit checkouts
If the review to be tested is in a project with restricted access,
we need to use the jenkins user's gerrit https credentials when we
do the checkout or the checkout will fail.

Change-Id: I9dc9994763c5ebfeb9f1cff60fb53f6902b7fd5f
2018-08-16 11:08:21 -06:00
George Joseph 0c4d49c5a9 Merge "res/res_pjsip_sdp_rtp: put rtcp-mux in answer only if offered" into 13 2018-08-16 09:46:00 -05:00
Corey Farrell db367ddbbf res_pjsip: Resolve transport management leak at shutdown.
Cleanup idle check scheduled events at shutdown.

Change-Id: I61bfbb56bac69fe840c3242927d31ff3593be461
2018-08-15 13:55:55 -05:00
Corey Farrell 7f4420a222 CI: Disable res_odbc if REF_DEBUG is requested.
This is for 13/15 only, res_odbc never unloads so it is impossible to do
REF_DEBUG testing with that module.

Change-Id: I2c1e32b80564e8fb08b6b5900ede6b5d304ebd10
2018-08-15 11:46:46 -05:00
Corey Farrell 7df97d0a00 res_pjsip: Fix leak in pjsip_options.
sip_options_get_endpoint_state_compositor_state leaked a reference to
the first available endpoint state compositor that was found.

Change-Id: Idb6be19f7219b6eed1dfb19c1e740dd40cb3fdc7
2018-08-15 11:32:48 -05:00
George Joseph 735b70cd38 Merge "res_pjsip_caller_id: Add "party" parameter to RPID header." into 13 2018-08-15 08:29:04 -05:00
Richard Mudgett e8ac75eed0 contrib/scripts: Make astgenkey executable
Change-Id: I11641d65592536dea9cbca5aa94a24c25d24dd5f
2018-08-14 12:10:02 -05:00
Joshua Colp 555516233d res_pjsip_caller_id: Add "party" parameter to RPID header.
This change adds the "party" parameter to the Remote-Party-ID header
which indicates which party the header information is applicable
to. In Asterisk this is determined on whether we are the calling
or called party. This is added to improve interoperability with some
implementations.

ASTERISK-28006

Change-Id: I1eec3e377ffff8633b5c1dd59a05e9533122cfca
2018-08-14 10:55:37 -03:00
George Joseph e89f3317ba Merge "CI: Add support for coverage processing." into 13 2018-08-14 07:35:55 -05:00
Ivan Poddubny f48761907a app_queue: set QUEUESTATUS to LEAVEEMPTY instead of CONTINUE
When a call leaves a queue on leaveempty condition, QUEUESTATUS
must be set to LEAVEEMPTY, no matter whether Queue was executed with or
without the "c" (continue) option.

The regression was introduced in the fix for ASTERISK_25665.
The following fix (ASTERISK_27065) was incomplete, as QUEUESTATUS was
overwritten in case when "c" is set, regardless of what was the cause
for leaving the queue.

ASTERISK-27973 #close
Reported-by: Valentin Safonov

Change-Id: Iec013fe6a26a4e825ca572a1dda4f3cee5f6f80c
2018-08-13 12:44:42 -05:00
Corey Farrell dc786aa576 Sample configs: Fix pjsip.conf syntax error.
It is valid for a config file to be empty or contain only comments, but
not valid for a config value to be set when no uncommented context
exists.  This caused an error to be loged numerous times during start
when loading the default pjsip.conf.

Change-Id: Icf3b0d69b4ecb6e935eecd43c99ed8b32a5a1cf6
2018-08-09 16:45:53 -05:00
Torrey Searle a1b0db826a res/res_pjsip_sdp_rtp: put rtcp-mux in answer only if offered
If in the initial sdp the caller doesn't include the line
a=rtcp-mux

Then asterisk shoud not include rtcp-mux in the response regardless
of rtcp-mux being enabled on the endpoint

ASTERISK-28007 #close

Change-Id: I58e9b9f40a139afc0da5de41906cc608fb62adc7
2018-08-09 09:34:17 +02:00
Joshua Colp 673d509911 Merge "res_pjsip_registrar: Improve performance on inbound handling." into 13 2018-08-08 12:10:56 -05:00
Corey Farrell f3a8bfff36 CI: Add support for coverage processing.
Enable coverage with `./tests/CI/buildAsterisk.sh --coverage`.  This
will cause Asterisk to be compiled with coverage support.  It also
initializes 'before' coverage data for all sources.  Accept
--tested-only to disable modules which are not run by any test.
Enabling coverage also sets tested-only true by default.  To build
everything with coverage enabled use `--coverage --tested-only=0`.

./tests/CI/processCoverage.sh is used to process the coverage and
generate HTML reports.

Fix utils/check_expr2 which failed to compiled with coverage enabled.

Add status output 5 times per stage of astobj2_test_perf to ensure
remote CLI does not timeout when compiled with coverage.  Remote CLI
disconnects if no output is received for 60 seconds.  When coverage is
enabled it takes about 70 seconds for my laptop to run the stages of
this test, so with the change a message is printed every 14 seconds.

Change-Id: I890f7d5665087426ad7d3e363187691b9afc2222
2018-08-08 11:06:54 -05:00
Joshua Colp c22efd9990 Merge "stasis: Reduce calculation of stasis message type hash." into 13 2018-08-08 06:04:14 -05:00
Joshua Colp c17a20e543 Merge "res_pjsip: Make pjlib.h consistently included." into 13 2018-08-08 05:56:48 -05:00
Joshua Colp 18760a7c98 Merge "res_pjsip.h: Fix doxygen comments." into 13 2018-08-08 05:37:20 -05:00
Joshua Colp 4fa27efc03 Merge "pjproject_bundled: Fix for Solaris builds. Do not undef s_addr." into 13 2018-08-08 05:02:10 -05:00
Richard Mudgett b7f195b6fd res_pjsip.h: Fix doxygen comments.
Change-Id: I9cf97bdc756012d1f552ab007f4aa85e0ddb4e62
2018-08-07 10:25:30 -05:00
Joshua Colp 856b6d1954 stasis: Reduce calculation of stasis message type hash.
When the stasis cache is used a hash is calculated for
retrieving or inserting messages. This change calculates
a hash when the message type is initialized that is then
used each time needed. This ensures that the hash is
calculated only once for the message type.

Change-Id: I4fe6bfdafb55bf5c322dd313fbd8c32cce73ef37
2018-08-06 13:05:56 -03:00
Joshua Colp e3e45a86f6 Merge "dialplan_functions: wrong srtp use status report of a dialplan function" into 13 2018-08-06 08:34:12 -05:00
Joshua Colp 80567a67d9 Merge "pjproject_bundled: Find shared libraries in root --with-ssl=PATH." into 13 2018-08-06 05:28:59 -05:00
Alexander Traud 819842f7fb pjproject_bundled: Fix for Solaris builds. Do not undef s_addr.
The authors of PJProject undef s_addr because of some issue in Microsoft
Windows. However in Oracle Solaris, s_addr is not a structure member, but
defined to map to the real structure member.

Updates the patch from ASTERISK_20366

ASTERISK-27997

Change-Id: I8223026d4d54e2a46521085fcc94bfa6ebe35b11
2018-08-03 16:52:48 -05:00
Richard Mudgett 1f97ea7e2c res_pjsip: Make pjlib.h consistently included.
* Don't include pjlib.h twice in res_pjsip.h
* Consistently use #include <> form for pjproject includes.
(pjsip.h and pjlib.h)

Change-Id: I3f7b42044840de64edf7e9d7695cb60c45990dc7
2018-08-03 16:00:47 -05:00
Kevin Harwell d3358a8c84 Merge "BuildSystem: Enable ncurses for menuselect in Solaris 11." into 13 2018-08-03 13:28:34 -05:00
Kevin Harwell d71cf6dc35 Merge "pjsip_wizard.conf.sample: Update remote_hosts description." into 13 2018-08-03 13:27:36 -05:00
Kevin Harwell 4dee592608 Merge "res_pjsip_endpoint_identifier_ip.c: Added regex support to match_header" into 13 2018-08-03 13:26:00 -05:00
Alexander Traud 0d880fac93 pjproject_bundled: Find shared libraries in root --with-ssl=PATH.
The script configure from Teluu expects shared libraries (.so) in a subfolder
called 'lib', when --with-xyz=PATH is specified. However for OpenSSL, the
default location is the root of the source folder = PATH. Furthermore, Asterisk
supports both, 'lib' and root. For consistency and because Asterisk is using
(only) OpenSSL in PJProject, it is enhanced to support both locations, just
like Asterisk.

ASTERISK-27995

Change-Id: I8eb916a88b6b8c22e29bb40bee8faaca6c73406f
2018-08-03 09:19:47 -05:00
Joshua Colp a5ce9b6c4b res_pjsip_registrar: Improve performance on inbound handling.
This change removes a sorcery lookup for retrieving all
contacts at the end of the registration process by keeping
track of the contacts that are added/updated/deleted.

This ensures at the end of the process the container of
contacts we have is the current state.

Pool usage has also been reduced by allocating one for
usage throughout the handling of a REGISTER and resetting
it to a clean state. This ensures that in most cases
we allocate once and just reuse it.

ASTERISK-28001

Change-Id: I1a78b2d46f9a2045dbbff1a3fd6dba84b612b3cb
2018-08-03 06:09:33 -03:00
Salah Ahmed 4aa91c6f11 dialplan_functions: wrong srtp use status report of a dialplan function
If asterisk offer an endpoint with SRTP and that endpoint respond
with non srtp, in that case channel(rtp,secure,audio) reply wrong
status.

Why delete flag AST_SRTP_CRYPTO_OFFER_OK while check identical remote_key:
Currently this flag has being set redundantly. In either case identical
or different remote_key this flag has being set. So if we
don't set it while we receive identical remote_key or non SRTP SDP
response then we can take decision of srtp use by using that flag.

ASTERISK-27999

Change-Id: I29dc2843cf4e5ae2604301cb4ff258f1822dc2d7
2018-08-02 16:58:47 -05:00
Joshua Colp 37085a0cb7 Merge "thirdparty/pjproject: fix deadlock in response retransmissions" into 13 2018-08-02 06:53:53 -05:00
Jenkins2 2c89bba900 Merge "BuildSystem: Enable Jansson in Solaris 11." into 13 2018-08-02 05:12:51 -05:00
Torrey Searle ff94fcb6f1 thirdparty/pjproject: fix deadlock in response retransmissions
The tdata containing the response can be shared by both the dialog
object and the tsx object.  In order to prevent the race condition
between the tsx retransmission and the dialog sending a response,
clone the tdata before modifying it for the dialog send response.

ASTERISK-27966 #close

Change-Id: Ic381004a3a212fe1d8eca0e707fe09dba4a6ab4e
2018-08-01 11:08:51 -05:00
Joshua Colp 904095833e Merge "res_rtp_asterisk: In Developer Mode, do not require OpenSSL." into 13 2018-08-01 04:23:23 -05:00
Joshua Colp 465546fbe4 Merge "res_pjsip_pubsub: Use ast_true for "prune_on_boot"." into 13 2018-07-31 16:10:57 -05:00
Richard Mudgett 75131c9e1c pjsip_wizard.conf.sample: Update remote_hosts description.
Remove the note that SRV records are not supported as that is no longer
true.

ASTERISK-27993

Change-Id: Id0dd6ef40e52702be9727a2b6122216cb00bb4ca
2018-07-31 11:24:08 -05:00
George Joseph 7f203d2bd8 CI: Add optional uninstall step before installing asterisk
Change-Id: I7dedf1e925eafc3a0adf01dd9dfbe44eb642aab7
2018-07-30 08:44:12 -05:00
Alexander Traud 4aa1a42159 BuildSystem: Enable ncurses for menuselect in Solaris 11.
The check for the library ncurses should use not use the header <curses.h> but
<ncurses.h>, because on some platforms <curses.h> is not a drop-in replacement
for <ncurses.h>: For example in Solaris, the symbol initscr is a typedef in
<curses.h> to a symbol which does not exist in the library ncurses (initscr32).
Simply use <ncurses.h> when you link to ncurses.

Furthermore in Solaris, the header <ncurses.h> is in a subdirectory
/usr/include/ncurses and not available via pkg-config.

ASTERISK-15331
ASTERISK-14935
ASTERISK-12382
ASTERISK-9107

Change-Id: Ife367776b0ccf17d3fefed868245376bfb93745d
2018-07-29 03:20:56 -05:00
Alexander Traud d9da161b5c BuildSystem: Enable Jansson in Solaris 11.
In Solaris, the header <jansson.h> is in /usr/include/jansson. To find
Jansson even in such a subdirectory, the tool pkg-config is queried via
AST_PKG_CONFIG_CHECK. For those platforms, which do not list Jansson via
pkg-config, the previous check remains and is executed thereafter.

Because the check for the NetBSD Editline library uses the tool pkg-config
conditionally PKG_PROG_PKG_CONFIG must be used. Because that check happens
earlier than Jansson, it must be placed in front of that.

The script configure does some pre-checks for the script configure of the
Asterisk internal NetBSD Editline library. The check for the library ncurses
should use not use the header <curses.h> but <ncurses.h>, because on some
platforms <curses.h> is not a drop-in replacement for <ncurses.h>: For example
in Solaris, the symbol initscr is a typedef in <curses.h> to a symbol which
does not exist in the library ncurses (initscr32). Simply use <ncurses.h> when
you link to ncurses.

ASTERISK-27991

Change-Id: I69ea0f379f87a50049654b2487c76ee1c04fa53a
2018-07-28 15:08:40 +02:00
Joshua Colp edddcb3dc6 res_pjsip_pubsub: Use ast_true for "prune_on_boot".
Change-Id: Iedec4e7390b3e821987681da24d0298632b9873d
2018-07-28 13:00:40 +00:00
Richard Mudgett 8baedc2204 res_pjsip_endpoint_identifier_ip.c: Added regex support to match_header
This patch adds regular expression support to make the identify section's
match_header option more useful when attempting to match complex headers
like the 'To' or 'From' headers.  The 'From' header has variable
components such as the tag parameter that you cannot predict.  To specify
a regular expression put slashes around the regular expression in place of
the header value.

[identify-alice]
type=identify
endpoint=alice
match_header=From: /<sip:alice@127\\.0\\.0\\.1>/

* Added regex support to match_header so you could match a 'To' header
among other complex headers.

Fixed reported crashes when trying to match special headers like 'Contact'.
The identify section's match_header method used code that assumed you were
matching a generic header.  Any other type of header could cause a crash
if the header structure variant did not match the generic header enough.

* Made use code that will work for any header type instead of code
specific to generic headers.

Other fixes while in the area:

* Made check all headers of the requested name.
* Added some more sanity checks to the configured identify matching
options when applying the configuration.

ASTERISK-27548

Change-Id: I27dfd4ff5e2259b906640e3c330681b76b4ed1f1
2018-07-27 10:58:06 -05:00
Joshua Colp d33ed08afc res_pjsip_pubsub: Treat "prune_on_boot" as a yes / no.
The alembic for the PJSIP subscription persistence table has the
"prune_on_boot" field as a boolean. While in Asterisk we are
tolerant of many different definitions of true and false in the
database we only accept "yes" and "no". This change makes the
field treated as a yes/no instead of an integer, thus storing
"yes" and "no" instead of "1" and "0".

Change-Id: Ic8b9211b36babefe78f70def6828a135a6ae7ab6
2018-07-27 15:46:12 +00:00
Alexander Traud a4b105c99b res_rtp_asterisk: In Developer Mode, do not require OpenSSL.
OpenSSL is an optional external library and should stay optional even when
Developer Mode is configured.

ASTERISK-27990

Change-Id: Ia68a4cd5474b26d45e0f43b04032ad598022853b
2018-07-27 15:54:11 +02:00
Jenkins2 111cde6026 Merge "devicestate: Don't create topic when change isn't cached." into 13 2018-07-27 06:09:18 -05:00
Joshua Colp bb5e2f3c71 Merge "Build System: Create 'make install-configs' target." into 13 2018-07-27 05:51:51 -05:00
Joshua Colp ef647cc31e Merge "res_rtp_asterisk: Avoid merging command and regular T.140 text packets" into 13 2018-07-27 05:35:08 -05:00
George Joseph 2b0d003a35 CI: Fix placement of job summary statments
Change-Id: Iace19e718f4e8fb48eb7dc9f98af53b115cc45f3
2018-07-26 17:56:04 -06:00
George Joseph 5fbf2ce248 CI: Add docker info to job summary
Change-Id: I45d52005a9b692ad303c11792f226ace1e449901
2018-07-26 10:35:08 -06:00
Corey Farrell eacf8fe96c Build System: Create 'make install-configs' target.
This target requires specifying CONFIG_SRC=path_to_configs.  This can be
used to install custom configs for the Asterisk build while still
performing directory replacements on asterisk.conf.

Modify internal INSTALL_CONFIGS so first argument requires full path to
the config sources relative to Asterisk source root.

Change-Id: Idcd841df3c8d5bfe23d566bb9e2e448e9df4f8ab
2018-07-26 10:19:34 -05:00
Kevin Harwell 059e1e3bc8 json.c: improve ast_json_to_ast_variables performance
When converting from a json object to an ast variables list the conversion
algorithm was doing a complete traversal of the entire variables list for
every item appended from the json structure.

This patch makes it so the list is no longer traversed for each new ast
variable being appended.

Change-Id: I8bf496a1fc449485150d6db36bfc0354934a3977
2018-07-25 15:33:22 -05:00
Joshua Colp dd1b4b38cf devicestate: Don't create topic when change isn't cached.
When publishing a device state the change can be marked as being
cachable or not. If it is not cached the change is just published
to all interested and not stored away for later query. This was not
fully taken into account when publishing in stasis. The act of
publishing would create a topic for the device even if it may be
ephemeral.

This change makes it so messages which are not cached won't create
a topic for the device. If a topic does already exist it will be
published to but otherwise the change will only be published to
the device state all topic.

ASTERISK-27591

Change-Id: I18da0e8cbb18e79602e731020c46ba4101e59f0a
2018-07-25 19:20:35 +00:00
George Joseph a34ef4dcd9 Merge "Build System: Silence build of bundled jansson." into 13 2018-07-25 13:59:50 -05:00
Joshua Colp cdf6e93b6d Merge "res_pjsip: Change log message from error to warning for valid use cases" into 13 2018-07-25 13:59:04 -05:00
Jenkins2 efa53816ef Merge "CI: Explicitly pass BRANCH_NAME to buildAsterisk and installAsterisk" into 13 2018-07-25 12:48:51 -05:00
Jenkins2 b91ea7a726 Merge "CI: Add options to initialize and cleanup database to runTestsuite.sh" into 13 2018-07-25 12:48:20 -05:00
George Joseph 21168ba931 CI: Explicitly pass BRANCH_NAME to buildAsterisk and installAsterisk
Change-Id: I652f4a0ea5107c778e27a78bccb67b18b0c4e087
2018-07-25 09:20:43 -06:00
George Joseph 9b4fb9d1aa CI: Add options to initialize and cleanup database to runTestsuite.sh
Change-Id: I352333233bab5377723bf37d490ba84fc55bc853
2018-07-25 09:12:30 -06:00
Corey Farrell 90325f0569 CI: Do not `mkdir 2`.
Change-Id: Ib7377d26a6c98b38bad463f47c84f1875ac84eb7
2018-07-25 09:08:41 -05:00
Corey Farrell 3ed6abcc1f Build System: Silence build of bundled jansson.
Change-Id: I7392c79c0173057f5378010bf1fe65e300e8fc56
2018-07-25 07:35:06 -05:00
George Joseph b971faf740 CI: RefDebug: Fix reference to testsuite URL
Change-Id: I0ee41d95a87f0d97b01f2757012b846bcfe6443d
2018-07-25 06:14:09 -06:00
Corey Farrell ab103d66db Build System: Fix bundled jansson install.
Update the bundled jansson Makefile to do nothing during Asterisk
install, use a target that is not phony to initiate the jansson make and
install.

Change-Id: I7643cc3d39af9feba8fc0da676b646efc5f8b3bb
2018-07-24 14:45:13 -05:00
Jenkins2 b876d624d7 Merge "Enable bundling of jansson." into 13 2018-07-24 10:06:51 -05:00
George Joseph 54364318b5 Merge "res_pjsip: Update default keepalive interval to 90 seconds." into 13 2018-07-24 08:30:46 -05:00
Florian Floimair fd1b8c57e9 res_pjsip: Change log message from error to warning for valid use cases
If a SIP MESSAGE is triggered for an endpoint that is currently not registered
- and therefore has no valid contact associated - an error message was logged.
Since this is a valid request in a valid use cases this is now changed to a
warning, as discussed with Matt Fredrickson on the asterisk-dev mailing list.

Change-Id: I55eb62d2712818a58c7532119dec288bd98cf0c0
2018-07-24 07:19:28 -05:00
Jenkins2 6dac6e0ab8 Merge "CI: Add --privileged flag to docker options" into 13 2018-07-24 06:03:05 -05:00
Jenkins2 990ac404f4 Merge "CI: Set correct user:group when publishing docs" into 13 2018-07-24 06:03:03 -05:00
George Joseph b3060d5ccf Merge "build_tools/make_version: Get MAINLINE_BRANCH from .gitreview." into 13 2018-07-24 05:40:56 -05:00
George Joseph eccd5886c3 CI: Add --privileged flag to docker options
Change-Id: If92d55f15306e55dd7091ac3c47b13ebbbb03488
2018-07-24 04:39:30 -06:00
George Joseph 32ae565da2 CI: Set correct user:group when publishing docs
Change-Id: Ibabeb9ac730d9755cf54318d0da74771c939b86b
2018-07-24 04:22:57 -06:00
Jenkins2 7b84eabb1d Merge "CI: Split --test-command argument." into 13 2018-07-23 13:45:18 -05:00
George Joseph 487951735e Merge "sched: Make ABI compatible between dev mode and non-dev mode." into 13 2018-07-23 13:32:10 -05:00
Corey Farrell 46ea59a0ca CI: Split --test-command argument.
The --test-command argument has now been split, unit tests now use
`--unittest-command` and the testsuite uses --testsuite-command.

This will make it easier to create a script which run everything by
forwarding the same arguments to all CI scripts.

Change-Id: Ia54aa4848eaffbdf13175fcda40fc0b23080ad71
2018-07-23 10:34:48 -05:00
George Joseph a9e7198eab Merge "res_pjsip: Update endpoint transport option documentation." into 13 2018-07-23 09:13:02 -05:00
Jenkins2 00433d2b78 Merge "CI: Fix mkdir CACHE_DIR." into 13 2018-07-23 08:39:10 -05:00
Jenkins2 2328f0cb7d Merge "CI: Fix logger.conf for unit tests." into 13 2018-07-23 08:37:32 -05:00
Jenkins2 2ca8ed3783 Merge "CI: Add wiki doc publish to periodics" into 13 2018-07-23 06:46:54 -05:00
Corey Farrell f34c59e745 CI: Fix mkdir CACHE_DIR.
Change-Id: Ic9f9a61e230047836c836206731f8ff7eb3538c9
2018-07-22 11:37:17 -05:00
Corey Farrell 82d351ca0e build_tools/make_version: Get MAINLINE_BRANCH from .gitreview.
Use .gitreview defaultbranch setting to determine the mainline branch.
This allows the script to be used against other directories which might
not be on the same defaultbranch.  This can be used by CI scripts to
report the testsuite version being used:
./build_tools/make_version ${TESTSUITE_DIR}

Change-Id: Ifdad4a9d8a26138c41bc6b630ecc3e34ea1c2758
2018-07-22 12:24:32 -04:00
Joshua Colp 1fbe1b1eff sched: Make ABI compatible between dev mode and non-dev mode.
In the past there was an assertion in the ast_sched_del function
and in order to ensure it was useful the calling function name,
line number, and filename had to be passed in. This cause the ABI
to be different between dev mode and non-dev mode.

This assertion is no longer present so the special logic can be
removed to make it the same between them both.

Change-Id: Icbc69c801e357d7004efc5cf2ab936d9b83b6ab8
2018-07-22 15:41:03 +00:00
Corey Farrell f36b4091f5 Enable bundling of jansson.
Change-Id: Ib3111b151d37cbda40768cf2a8a9c6cf6c5c7cbd
2018-07-20 13:38:36 -04:00
neutrino88 e5721b01f6 res_rtp_asterisk: Avoid merging command and regular T.140 text packets
When realtime text packets are to be sent, the text is accumulated in a
buffer and sent regularly by a timer.  It can happen that commands such as
a backspace, CR, or LF get merged with regular text.  This breaks some
UAs.

The proposed change:
* We test if the current packet contains a command.  If so we send the
buffer immediately.
* We test if the buffer contained a command.  If so we send the buffer
immediately.
* We accumulate the text (or the command) in the buffer.

ASTERISK-27970

Change-Id: Ifbe993311410fa855cb8aa4a12084db75f413462
2018-07-20 12:30:10 -05:00
Corey Farrell fd84eb65b3 CI: Fix logger.conf for unit tests.
Change-Id: Idea59d60eab20105de50b34f0f0d506e6ef55d5c
2018-07-20 09:30:23 -05:00
George Joseph 2acba0f418 CI: Add wiki doc publish to periodics
Change-Id: I29ba26134e5083bc6788ede235f1a5d4383c148a
2018-07-20 06:53:43 -06:00
Joshua Colp 18e9acc3c1 res_pjsip: Update default keepalive interval to 90 seconds.
A change recently went in which disabled the built-in PJSIP
keepalive. This defaulted to 90 seconds and kept TCP/TLS
connections alive. Disabling this functionality has resulted
in a behavior change of not doing keepalives by default resulting
in TCP/TLS connections dropping for some people.

This change makes our default keepalive interval 90 seconds
to match the previous behavior and preserve it.

ASTERISK-27978

Change-Id: Ibd9a45f3cbe5d9bb6d2161268696645ff781b1d6
2018-07-20 11:54:35 +00:00
George Joseph 58c7b64ed6 xmldoc.c: Fix dump of xml document
The "xmldoc dump" cli command was simply concatenating xml documents
into the output file.  The resulting file had multiple "xml"
processing instructions and multiple root elements which is illegal.
Normally this isn't an issue because Asterisk has only 1 main xml
documentation file but codec_opus has its own file so if it's
downloaded and you do "xmldoc dump", the result is invalid.

* Added 2 new functions to xml.c:
    ast_xml_copy_node_list creates a copy of a list of children.
    ast_xml_add_child_list adds a list to an existing list.

* Modified handle_dump_docs to create a new output document and
  add to it the children from each input file.  It then dumps the
  new document to the output file.

Change-Id: I3f182d38c75776aee76413dadd2d489d54a85c07
2018-07-20 05:20:25 -06:00
Richard Mudgett 0ade9df3b6 res_pjsip: Update endpoint transport option documentation.
Change-Id: I5394fdff6a296efc8e1695a156e616acd932ae52
2018-07-19 16:39:09 -05:00
George Joseph f4ddc56b9a Merge "res_pjsip_sdp_rtp: include ice in ANSWER only if offered" into 13 2018-07-18 15:20:01 -05:00
George Joseph 716bac536f Merge "pjproject_bundled: Repair ./configure --with-ssl=PATH." into 13 2018-07-18 15:19:14 -05:00
George Joseph bc1dd131f6 Merge "res_sorcery_config: Allow configuration section to be used based on name." into 13 2018-07-18 14:47:01 -05:00
Torrey Searle bd36ec69e2 res_pjsip_sdp_rtp: include ice in ANSWER only if offered
Keep track if ICE candidates were in the SDP offer & only put them
in the corresponding SDP answer if the offer condaind ICE candidates

ASTERISK-27957 #close

Change-Id: Idf2597ee48e9a287e07aa4030bfa705430a13a92
2018-07-18 13:57:42 -05:00
Alexander Traud 6cf1aefff8 pjproject_bundled: Repair ./configure --with-ssl=PATH.
Previously, Asterisk did not tell its bundled PJProject about this configure
parameter. Therefore, PJProject used the platform provided OpenSSL always.

ASTERISK-27880

Change-Id: Iea545aec854dd0e2c061c69bb118a76ce56c5dc6
2018-07-18 13:55:55 -05:00
Chris-Savinovich ae5ba776ae stasis: Improve message type "Use of before/init after destruction"
Fixes issue where error msg
"Use of before/init after destruction"
was being printed on disabled messages
in dev mode.  With this
fix if message is disabled
a warning will print.

ASTERISK-25548
Change-Id: Ie0d866d1cbc60c16dbef08bc65e99505c3c1adfa
2018-07-18 13:11:42 -05:00
Joshua Colp 03c1bbffd2 res_sorcery_config: Allow configuration section to be used based on name.
A problem I've seen countless times is a global or system section
for PJSIP not getting applied. This is inevitably the result of
the "type=" line missing. This change alleviates that problem.

The ability to specify an explicit section name has been
added to res_sorcery_config. If the configured section
name matches this and there are no unknown things configured
the section is taken as being for the given type.

Both the PJSIP "global" and "system" types now support this
so you can just name your section "global" or "system" and it
will be matched and used, even without a "type=" line.

ASTERISK-27972

Change-Id: Ie22723663c1ddd24f869af8c9b4c1b59e2476893
2018-07-18 17:42:37 +00:00
George Joseph 953bdc3365 Merge "SRTP: Lower SDES key lifetime minimum to 2^20" into 13 2018-07-18 10:21:18 -05:00
Joshua Colp 00f9872dbd Merge "res_pjsip: Remove spurious error logging when printing silent headers" into 13 2018-07-18 05:49:07 -05:00
Joshua Colp 64e5ce7225 Merge "res_config_ldap.c: Fix mem leak in CLI "realtime show ldap status"" into 13 2018-07-17 16:29:35 -05:00
Nick French 6a0847cfc6 SRTP: Lower SDES key lifetime minimum to 2^20
SRTP SDES key lifetime support was added in ASTERISK_17899.

In that addition, the minimum key lifetime to be accepted was
set at the 10 hours @ 20ms/packet = 1800000 packets.

The firmware in the obi1xx ATA uses a hardcoded lifetime of
2^20 packets.

Lower the limit to 2^20 to support a wider field of clients.

ASTERISK-27967 #close

Change-Id: I81a0703c595a0c9101dfdf02300149a3cc39bf94
2018-07-17 14:45:56 -05:00
Joshua Colp 39a352a35c Merge "Build: Fix modules getting their optimization setting overridden." into 13 2018-07-17 12:14:46 -05:00
George Joseph f8fa7182ac CI: Fix merge strategy
Change-Id: I5e3fb6adfa6cbf694c0deecf02e3879297b0c12e
2018-07-17 10:09:32 -06:00
George Joseph ca651c8973 CI: Fix regex in daily and ref_debug jobs
Change-Id: Icf2e67818b2155a158d2390b138613e1f653ea92
2018-07-17 09:42:13 -06:00
Nick French 47572a5831 res_pjsip: Remove spurious error logging when printing silent headers
Asterisk patched the pjproject source to avoid crashing when pjproject
sip_msg headers are encountered with NULL vptr's, but the patch also
output error messages for some valid headers which simply did not need
to be added to the message itself, such as hidden route headers.

pjproject has since applied a similar patch to their baseline to avoid
crashes, but their version also avoids the spurious error logging.

Lets use their patch instead.

ASTERISK-27961 #close

Change-Id: I2ddbd82c8da10e0dcc9807a48089d1f3c2d6e389
2018-07-17 10:28:12 -05:00
Richard Mudgett 33668ab46a res_config_ldap.c: Fix mem leak in CLI "realtime show ldap status"
Change-Id: Ib2a3622b297b0363c62d23958f7a20039bcb9b4c
2018-07-17 10:18:55 -05:00
George Joseph 081f689bc5 CI: Add pre-build merge back in as RECURSIVE
Change-Id: I0ff1730ef4a4f0ac9f18ccc9bc0dfe7a782f57a8
2018-07-17 09:16:37 -06:00
George Joseph ab72d23795 Merge "Fix declaration of PBX_CURL for ./configure --without-libcurl" into 13 2018-07-17 09:50:00 -05:00
George Joseph 694503d378 CI: Remove pre-build merge from gates and checks
Change-Id: Ibc151f63dcec4db847915c2f3cbe5b467dd59574
2018-07-17 08:02:28 -06:00
George Joseph 65cf0001fe CI: Fix logic inversion in runTestsuite
Change-Id: I56399aa384468f45494c2c3650420563a0b6efe1
2018-07-17 06:14:22 -06:00
George Joseph c025f09452 CI: Add teardownRealtime
Change-Id: I2fe55c38607eaec2fbf69ef23a5019e0c443a64b
2018-07-17 03:04:03 -06:00
George Joseph 0da16dd5d0 CI: Prevent Jenkins from triggering jobs back to itself
Change-Id: I9cae8bb3d1a2cea335d3ccd88d471832549666fd
2018-07-16 12:30:59 -06:00
Richard Mudgett c8ea924b50 Build: Fix modules getting their optimization setting overridden.
Asterisk modules that use PJPROJECT services have their compiler
optimization and possibly their symbolic debug options overridden by the
PJPROJECT configure script selected settings.

* We need to filter-out any -O and -g options in PJ_CFLAGS before echoing
out the result so the PJPROJECT_INCLUDE variable does not override the
Asterisk module settings when using bundled PJPROJECT.

NOTE: This patch only has an effect when using bundled PJPROJECT.

ASTERISK-27563

Change-Id: If124169735ecf572ad1535cd43bff94cb44d5b30
2018-07-16 12:40:32 -05:00
George Joseph bb52ce0b64 CI: runUnittests: loop a few times on waitfullybooted
Change-Id: Icebc0d013896f3b2a7214945cac60647435c1651
2018-07-16 10:10:47 -06:00
George Joseph a5e6ffa1f2 CI: Add realtime checks to dailies
Change-Id: I6dc8ab1679b3505c6dde1d47e1b9276df47814f8
2018-07-16 09:56:06 -06:00
George Joseph 1817d5a3e7 CI: Add weekly REF_DEBUG testsuite run
Change-Id: I5b581d0a0d1d1bb9b38961d40b112fb448355037
2018-07-16 09:56:06 -06:00
George Joseph 340c383d21 Merge "CI: Fix bad reporting of status by the verification pub" into 13 2018-07-16 10:46:09 -05:00
George Joseph 0023e40308 CI: Fix bad reporting of status by the verification pub
Change-Id: I6f31a130b3ba0187149aaaa2ce94195a79e0f6a6
2018-07-16 07:46:31 -06:00
George Joseph 014f226bf1 CI: Make build tag an acceptable docker name
Change-Id: I3a4b8a4a9c488ddabf9daf651dc1334222056f38
2018-07-16 07:20:09 -05:00
Corey Farrell 871715f77c Fix declaration of PBX_CURL for ./configure --without-libcurl
When `--without-libcurl` is used PBX_CURL is never set.  Set default
value 0 so the proper value is passed to menuselect.

Change-Id: I03e2842a00899cbca2dbde52bb1f6636d54bae1e
2018-07-14 11:23:39 -05:00
George Joseph b97b39fe1b CI: Add daily periodics to CI
Change-Id: I26933e73928e091ae72e838c02f4f2ec7c3983d6
2018-07-13 11:00:53 -05:00
Jenkins2 3560ab197d Merge "Bundled PJPROJECT: Disable internal connection oriented keep-alive." into 13 2018-07-12 18:25:56 -05:00
George Joseph 1b1271c3ea CI: Add Asterisk Gates
Change-Id: I7e2467f9120812551238d8005deb97f965279205
2018-07-12 15:51:46 -06:00
George Joseph df67a98938 CI: Remove duplicate checkout
Change-Id: If5f925b4c4ed7000b153f3ed8386ce2140c886f8
2018-07-12 15:51:38 -06:00
George Joseph 947d024539 CI: Update cleanup steps and permissions
Change-Id: I7ca92935979d94845af8e1caf4468cbd6209b7de
2018-07-12 15:51:27 -06:00
George Joseph 578d381164 CI: Fix log artifact paths
Change-Id: I55136de8f4d9c3b56bd4d054306a187bb04a4b7d
2018-07-11 14:53:31 -05:00
George Joseph 96464a523b CI: Remove CleanBeforeCheckout option for testsuite
Change-Id: I510231c9087f7be5272b8ef3f3223eadaaffb754
2018-07-11 14:45:16 -05:00
George Joseph 2d16c85574 CI: Move gates into source repo
Change-Id: If028ede5f3b127fa274c63ce166bc04ad7c1e5db
2018-07-11 14:01:07 -05:00
Alexander Traud d739aa71f8 Bundled PJPROJECT: Disable internal connection oriented keep-alive.
Turn off the periodic sending of CRLNCRLN.  Default is on (90 seconds),
which conflicts with the global section's keep_alive_interval option in
pjsip.conf.

patches:
  pjsip_keep_not_alive.patch submitted by Alexander Traud (License 6520)

ASTERISK-27347

Change-Id: I6a197f56e1830d3b7e5ec70f17025840a290b057
2018-07-11 12:05:42 -05:00
George Joseph 8167048804 CI: Initial commit for moving CI into source repo
Create tests/CI directory and add files used by Jenkins to
build and test Asterisk.

With this commit, Jenkins will run the Asterisk Unit Tests using
the Jenkinsfile at tests/CI/unittests.jenkinsfile.  Bash scripts
to do the actual building and testing are also in the same directory.
Output is placed in tests/CI/output so that directory has been
added to .gitignore.

Change-Id: I9448065465e6de2b878634510ace8fd1ef378608
2018-07-11 06:29:29 -05:00
Joshua Colp 3fe275ca02 Merge "res_pjsip_t38.c: Be smarter about how we respond when T.38 is disabled." into 13 2018-07-10 06:54:51 -05:00
Jenkins2 50e46e3bdb Merge "res_pjsip_pubsub: segfault in function publish_expire" into 13 2018-07-10 06:28:46 -05:00
Jenkins2 bca550649a Merge "chan_ooh323: IPTOS_MINCOST is not defined on Solaris." into 13 2018-07-10 06:21:42 -05:00
Jenkins2 ba5668bb1f Merge "res_pjsip/pjsip_transport_management.c: Fix deadlock with transport keep alive." into 13 2018-07-09 06:54:51 -05:00
Jenkins2 90b99c58d4 Merge "test.c: Make output jUnit compatible" into 13 2018-07-09 06:04:59 -05:00
Joshua Colp 6b7a4f07ed Merge "res_pjsip_t38: Decline T.38 stream on failure case." into 13 2018-07-09 05:17:51 -05:00
Jenkins2 0c7cc3a16b Merge "res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint" into 13 2018-07-09 05:00:53 -05:00
Alexander Traud 167baff944 chan_ooh323: IPTOS_MINCOST is not defined on Solaris.
Furthermore, <sys/sockio.h> is required for SIOCGIF*.

ASTERISK-27938

Change-Id: Idc9153ece769944765b66122efb11728d8d8ebde
2018-07-09 09:48:51 +02:00
Alexei Gradinari 9e615dac63 res_pjsip_pubsub: segfault in function publish_expire
The function pubsub_on_rx_publish_request incorrectly uses
of AST_SCHED_REPLACE_UNREF.

The AST_SCHED_REPLACE_UNREF should unref old '_data'.

Because of this, there may be a double unref
of variable 'publication' when ast_sched_del is unsuccessful
that leads to use after free of the 'publication' in publish_expire.

ASTERISK-27956 #close

Change-Id: Ie0f0cfc7e036953d890b188656010b325a5cdc82
2018-07-06 16:06:19 -04:00
George Joseph 7666b80378 test.c: Make output jUnit compatible
Separate "name" into "classname" and "name".
Use '.' for classname separator instead of '/'.
Prefix reserved words with '_'.
Wrap output with a top-level "testsuites" element.

Change-Id: Iec1a985eba1c478e5c1d65d5dfd95cb708442099
2018-07-06 11:53:09 -06:00
George Joseph 3470409dd6 res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint
A new option 'suppress_q850_reason_headers' has been added to the
endpoint object. Some devices can't accept multiple Reason headers and
get confused when both 'SIP' and 'Q.850' Reason headers are received.
This option allows the 'Q.850' Reason header to be suppressed.
The default value is 'no'.

ASTERISK-27949
Reported-by: Ross Beer

Change-Id: I54cf37a827d77de2079256bb3de7e90fa5e1deb1
2018-07-06 06:57:37 -06:00
Joshua Colp 76f2699d2d res_pjsip_t38: Decline T.38 stream on failure case.
When negotiating an incoming T.38 stream the code incorrectly
returned failure instead of a decline for the stream when a
problem occurred or the configuration didn't allow it. This
resulted in SDP offers being rejected with a 488 response
in all cases, even when another valid stream was present.

This change makes it so the stream is now declined. If no
streams are accepted a 488 response is sent while if at least
one stream is accepted all the declined streams are, well,
declined.

ASTERISK-27763

Change-Id: I88bcf793788c412a9839d111a5c736bf6867807c
2018-07-05 20:43:35 +00:00
Richard Mudgett a82f9762fd res_pjsip_t38.c: Be smarter about how we respond when T.38 is disabled.
We were blindly responding with AST_T38_REFUSED when ANY T.38 control
frame came accross the bridge.  This causes T.38 Gateway to get confused
and the T.38 session to get in a strange state.

* Made the T.38 framehook only respond to request frames and ignore
response frames.

ASTERISK-27657
ASTERISK-27080

Change-Id: I5fb5967c7d1efb30a7ff375f82887ca82a55b05b
2018-07-05 14:59:03 -05:00
Jenkins2 b6a13f0fc2 Merge "res_pjsip_t38.c: Fix crash by ignoring 1xx messages." into 13 2018-07-05 10:48:37 -05:00
Richard Mudgett b6b49071af res_pjsip/pjsip_transport_management.c: Fix deadlock with transport keep alive.
Using the keep_alive_interval option can result in a deadlock between the
pjproject transport manager group lock and the monitored transports ao2
container lock.  The pjproject transport manager group lock has to be
superior in the locking order to the monitored transports ao2 container
lock because of pjproject callbacks called when already holding the group
lock.  The lock inversion happens when Asterisk attempts to send a keep
alive packet over the reliable transports.

* Made keepalive_transport_thread() iterate over the monitored transports
container rather than use the ao2_callback() method.  This avoids holding
the container lock when sending the keep alive packet.

ASTERISK-26686

Change-Id: I5d5392a52e698bbe41a93f7d8e92bf0e61fe3951
2018-07-03 12:15:25 -05:00
Jenkins2 43dc9c3d5f Merge "pjsip: Clarify certificate configuration for Websocket." into 13 2018-07-03 11:21:06 -05:00
Jenkins2 0d2a8b911c Merge "res_pjsip_pubsub: Hold module reference for publications." into 13 2018-07-03 08:33:49 -05:00
Joshua Colp 62859ad526 pjsip: Clarify certificate configuration for Websocket.
The Websocket transport uses the built-in HTTP server. As a result
the TLS configuration is done in http.conf and not in pjsip.conf.

This change adds a warning if this is configured in pjsip.conf and
also clarifies in the sample configuration file.

Change-Id: I187d994d328c3ed274b6754fd4c2a4955bdc6dd9
2018-07-03 09:57:13 -03:00
Richard Mudgett 140ce56f50 res_pjsip_t38.c: Fix crash by ignoring 1xx messages.
If we initiated a T.38 reINVITE, we would crash if we received any other
1xx response message except 100 if it were followed by a 200 response.

* Made ignore any 1xx response so we do not close out the T.38 negotiation
too early.  For good measure we'll now accept any 2xx response as
acceptance of the reINVITE T.38 offer.

NOTE: In v13 we don't actually crash but we should deal with the non-final
response messages and not switch to rejected and then to enabled when the
200 comes in.

ASTERISK-27944

Change-Id: I0ca88aae708d091db7335af73f41035a212adff4
2018-07-02 11:41:05 -05:00
Joshua Colp 5f3869608a res_pjsip_pubsub: Hold module reference for publications.
Incoming publications need to ensure that the module remains
loaded for the lifetime of them. This is now done by holding
a reference to the module while the publication exists. This
mirrors that of inbound subscriptions.

ASTERISK-27783

Change-Id: Ia98c95a15e11af25728d5fb3e56e12cda0cfc7c0
2018-07-02 11:39:24 -03:00
Jenkins2 4ed6ab2595 Merge "app_confbridge: Bridge and announcers not removed if conference ends quickly" into 13 2018-07-02 06:49:44 -05:00
Jenkins2 567e306f8e Merge "main/cdr.c: Alleviate CDR deadlock" into 13 2018-07-02 06:40:22 -05:00
Joshua Colp 82765b4409 Merge "AMI SendText action: Fix to use correct thread to send the text." into 13 2018-07-02 05:46:57 -05:00
Robert Mordec 447ec4e472 app_confbridge: Bridge and announcers not removed if conference ends quickly
If a conference is ended very quickly after it was created (i.e., the
first user immediately hangs up) then the conference bridge and announcer
channels are not removed.

When a conference is created, the push_announcer() function is added to
the playback queue task processor and the conference object reference is
bumped.  If a conference is ended while the push_announcer() function is
still going then the ao2_cleanup(conference) at the end of
push_announcer() will call the destructor function -
destroy_conference_bridge().

The destroy_conference_bridge() function will then add the
hangup_playback() task to the playback queue and will wait for it to end.
Since it is already a current task of the playback queue it will wait
forever.

This patch makes the conference thread call push_announcer() directly.
This way the conference object reference bump is not needed.  Since the
playback queue task processor is only used by the conference thread
itself, there is no danger of trying to play announcements before the
announcer is pushed to the bridge.

ASTERISK-27870 #close

Change-Id: I947a50fb121422d90fd1816d643a54d75185a477
2018-06-29 11:06:26 -05:00
Matthew Fredrickson 33f4716d13 main/cdr.c: Alleviate CDR deadlock
There is a rare case (do to the infrequent timing involved) where
CDR submission threads in batch mode can deadlock with a currently
running CDR batch process.  This patch should remove the need for
holding the lock in the scheduler and should clean a few code
paths up that inconsistently submitted new work to the CDR batch
processor.

ASTERISK-27909

Change-Id: I6333e865db7c593c102c2fd948cecdb96481974d
Reported-by: Denis Lebedev
2018-06-29 09:46:17 -06:00
Kirsty Tyerman 3203c3491a pbx_dundi: reordered unloading of module pbx_dundi
Destroy scheduler after peers are pruned to stop dundi crashing when
unloading module.

ASTERISK-26987
Reported-by: Kirsty Tyerman

Change-Id: Ic12e562cd90d8d813a9e97f302045091f59e3c05
2018-06-28 22:01:25 -06:00
Richard Mudgett d0e4cbfc51 AMI SendText action: Fix to use correct thread to send the text.
The AMI action was directly sending the text to the channel driver.
However, this makes two threads attempt to handle media and runs afowl of
CHECK_BLOCKING.

* Queue a read action to make the channel's media handling thread actually
send the text message.  This changes the AMI actions success/fail response
to just mean the text was queued to be sent not that the text actually got
sent.  The channel driver may not even support sending text messages.

ASTERISK-27943

Change-Id: I9dce343d8fa634ba5a416a1326d8a6340f98c379
2018-06-28 13:15:46 -05:00
Jenkins2 6b6fa461d6 Merge "res_pjsip_session: Add ability to accept multiple sdp answers" into 13 2018-06-28 06:08:12 -05:00
Jenkins2 a5754e7904 Merge "res_pjsip_messaging: Allow application/* for in-dialog MESSAGEs" into 13 2018-06-28 06:02:37 -05:00
George Joseph 6087c1e575 res_pjsip_messaging: Allow application/* for in-dialog MESSAGEs
In addition to text/* content types, incoming_in_dialog_request now
accepts application/* content types.

Also fixed a length issue when copying the body text.  It was one
character short.

ASTERISK-27942

Change-Id: I4e54d8cc6158dc47eb8fdd6ba0108c6fd53f2818
2018-06-27 06:46:27 -06:00
Kevin Harwell ef788f4d64 Merge "uuid: Enable UUID in Solaris 11." into 13 2018-06-26 11:08:38 -05:00
George Joseph 06966e91fe res_pjsip_session: Add ability to accept multiple sdp answers
pjproject by default currently will follow media forked during an INVITE
on outbound calls if the To tag is different on a subsequent response as
that on an earlier response.  We handle this correctly.  There have
been reported cases where the To tag is the same but we still need to
follow the media.  The pjproject patch in this commit adds the
capability to sip_inv and also adds the capability to control it at
runtime.  The original "different tag" behavior was always controllable
at runtime but we never did anything with it and left it to default to
TRUE.

So, along with the pjproject patch, this commit adds options to both the
system and endpoint objects to control the two behaviors, and a small
logic change to session_inv_on_media_update in res_pjsip_session to
control the behavior at the endpoint level.

The default behavior for "different tags" remains the same at TRUE and
the default for "same tag" is FALSE.

Change-Id: I64d071942b79adb2f0a4e13137389b19404fe3d6
ASTERISK-27936
Reported-by: Ross Beer
2018-06-26 06:57:18 -06:00
Jenkins2 4603e24609 Merge "VECTOR: Passing parameters with side effects to macros is dangerous." into 13 2018-06-25 11:20:46 -05:00
Alexander Traud 5e9230b528 uuid: Enable UUID in Solaris 11.
ASTERISK-27933
Reported by: bautsche

Change-Id: I9b8362824efbfb2a16981e46e85f7c8322908c49
2018-06-23 00:27:06 -06:00
Jenkins2 caeb7fbe17 Merge "res_http_post: Enable GMime in Solaris 11." into 13 2018-06-22 11:42:28 -05:00
Jenkins2 acf9178925 Merge "smsq: Remove an left-over special case for Solaris." into 13 2018-06-22 11:33:32 -05:00
Jenkins2 b057932138 Merge "BuildSystem: Enable ./configure in Solaris 11." into 13 2018-06-22 08:42:03 -05:00
Jenkins2 bcaf644875 Merge "BuildSystem: Enable autotools in Solaris 11." into 13 2018-06-22 08:31:54 -05:00
Joshua Colp 101cd0d18e Merge "chan_oss: Compile in Solaris 11." into 13 2018-06-22 07:56:23 -05:00
Joshua Colp dca83e2aa2 Merge "utils: Avoid an unused variable in Solaris 11." into 13 2018-06-22 07:21:56 -05:00
Joshua Colp 400f683fc1 Merge "func_env: Compile in Solaris 11." into 13 2018-06-22 07:18:28 -05:00
Jenkins2 533ab01414 Merge "codecs/ilbc: Compile in Solaris 11." into 13 2018-06-22 06:38:39 -05:00
Richard Mudgett cb9475eb3d VECTOR: Passing parameters with side effects to macros is dangerous.
* Fix several instances where we were bumping a ref in the parameter and
then unrefing the object if it failed.  The way the AST_VECTOR_APPEND()
and AST_VECTOR_REPLACE() macros are implemented means if it fails the new
value was never evaluated.

Change-Id: I2847872a455b11ea7e5b7ce697c0a455a1d0ac9a
2018-06-21 16:57:47 -05:00
Alexander Traud 6d201a5df4 smsq: Remove an left-over special case for Solaris.
Actually, this case was never needed because the check below does the same.

Change-Id: Ia2fca4ba6c58c644a8b7cb2d9db8539728c14ffb
2018-06-21 10:45:57 -06:00
Alexander Traud c8966b8c29 res_http_post: Enable GMime in Solaris 11.
Change-Id: Ie434541f18f894c751d2e44bcb3efb3cac626019
2018-06-21 10:18:55 -06:00
George Joseph 498e775a4a Merge changes from topic 'ASTERISK-27625' into 13
* changes:
  channel.c: Make CHECK_BLOCKING() save thread LWP id for messages.
  channel.c: Fix usage of CHECK_BLOCKING()
  autoservice: Don't start channel autoservice if the thread is a user interface.
2018-06-21 10:26:42 -05:00
George Joseph aedbf5ba58 Merge "ARI POST DTMF: Make not compete with channel's media thread." into 13 2018-06-21 10:26:08 -05:00
George Joseph 4228dc7b4f Merge "AMI PlayDTMF Action: Make not compete with channel's media thread." into 13 2018-06-21 10:22:45 -05:00
Alexander Traud 81f39649ea codecs/ilbc: Compile in Solaris 11.
The symbol FS is the sampling frequency. That symbol is not used in Asterisk at
all and was a copy-and-paste of the iLBC reference code from the IETF RFC.
However, in Solaris, that symbol is defined by another header already. To
compile in Solaris, that symbol has to go.

Change-Id: I91ddbe5be7c00069c3a25abd5f58d7b2f04c51b1
2018-06-21 04:18:35 -06:00
Alexander Traud 78855e13e8 chan_oss: Compile in Solaris 11.
M_READ existed already and was conflicting in name.

Change-Id: I02108e07ae7d2dc314fe1e6c706c17731095a3e4
2018-06-21 04:17:51 -06:00
Alexander Traud 0b3c090ada func_env: Compile in Solaris 11.
Change-Id: Idc9b36720f3d29c90a35a6a1ae79a7f9e1aaf50e
2018-06-21 04:17:03 -06:00
Alexander Traud a0445c7a3e utils: Avoid an unused variable in Solaris 11.
With ./configure --enable-dev-mode[=noisy], the build fails because every
warning gets an error. Therefore, Asterisk has to be free of warnings and this
variable must go.

Change-Id: I63dd2bc4833b9bdb04602f83422d16caf289d46a
2018-06-21 04:16:23 -06:00
Alexander Traud d3fe2aceab BuildSystem: Enable ./configure in Solaris 11.
ASTERISK-27931

Change-Id: If298ce7f03be227a3687b9c20d382c9c55a72404
2018-06-21 04:15:23 -06:00
Kevin Harwell e7ffbbd40e Merge "Fix some doxygen and curly placement." into 13 2018-06-20 17:15:35 -05:00
Jenkins2 8cc080a95c Merge "Dialplan functions: Fix some channel autoservice misuse." into 13 2018-06-20 16:36:58 -05:00
Alexander Traud 7686e674bf BuildSystem: Enable autotools in Solaris 11.
Because this was the last operating system which required a special case, a
version appended to the autotools, the whole version stuff is removed by this
change. This simplifies the script ./bootstrap.sh. Hopefully, this gives even
broader platform compatibility.

ASTERISK-27929
ASTERISK-27926

Change-Id: Id4cf433a1a7fa861d0210e1a2e16ca592b49fd5a
2018-06-20 13:24:55 -06:00
Jenkins2 8c3edf3a69 Merge "menuselect/menuselect_curses: Resolves sprintf usage error" into 13 2018-06-20 10:33:47 -05:00
Richard Mudgett f878de44af channel.c: Make CHECK_BLOCKING() save thread LWP id for messages.
* Removed an unnecessary call to ast_channel_blocker_set() in
__ast_read().

ASTERISK-27625

Change-Id: I342168b999984666fb869cd519fe779583a73834
2018-06-19 14:13:07 -05:00
Richard Mudgett 99f439dc01 ARI POST DTMF: Make not compete with channel's media thread.
There can be one and only one thread handling a channel's media at a time.
Otherwise, we don't know which thread is going to handle the media frames.

ASTERISK-27625

Change-Id: I4d6a2fe7386ea447ee199003bf8ad681cb30454e
2018-06-19 14:13:07 -05:00
Richard Mudgett 6a1626c265 AMI PlayDTMF Action: Make not compete with channel's media thread.
There can be one and only one thread handling a channel's media at a time.
Otherwise, we don't know which thread is going to handle the media frames.

ASTERISK-27625

Change-Id: Ia341f1a6f4d54f2022261abec9021fe5b2eb4905
2018-06-19 14:13:07 -05:00
Richard Mudgett 1abcc41fff channel.c: Fix usage of CHECK_BLOCKING()
The CHECK_BLOCKING() macro is used to indicate if a channel's handling
thread is about to do a blocking operation (poll, read, or write) of
media.  A few operations such as ast_queue_frame(), soft hangup, and
masquerades use the indication to wake up the blocked thread to reevaluate
what is going on.

ASTERISK-27625

Change-Id: I4dfc33e01e60627d962efa29d0a4244cf151a84d
2018-06-19 14:13:07 -05:00
Richard Mudgett 5d34ca5b33 autoservice: Don't start channel autoservice if the thread is a user interface.
Executing dialplan functions from either AMI or ARI by getting a variable
could place the channel into autoservice.  However, these user interface
threads do not handle the channel's media so we wind up with two threads
attempting to handle the media.

There can be one and only one thread handling a channel's media at a time.
Otherwise, we don't know which thread is going to handle the media frames.

ASTERISK-27625

Change-Id: If2dc94ce15ddabf923ed1e2a65ea0ef56e013e49
2018-06-19 14:13:07 -05:00
Richard Mudgett a6edbc9be1 Dialplan functions: Fix some channel autoservice misuse.
* Fix off nominal paths leaving the channel in autoservice.
* Remove unnecessary start/stop channel autoservice.
* Fix channel locking around a channel datastore search.

Change-Id: I7ff2e42388064fe3149034ecae57604040b8b540
2018-06-19 11:49:24 -05:00
Richard Mudgett 7b30158147 Fix some doxygen and curly placement.
Change-Id: I9a784a7c804120a8fa826c2a4cb9957e4b0b2fc8
2018-06-19 11:46:45 -05:00
Matthew Fredrickson 3570a62b32 menuselect/menuselect_curses: Resolves sprintf usage error
Acccording to the man page for sprintf, using the same buffer for
output as one used as an input yields undefined behavior.
This patch should work around this problem.

ASTERISK-27903
Reported-by: Alexander Traud

Change-Id: I2213dcb454aff26457e2e4cc9c6821276463ae3a
2018-06-19 08:43:31 -06:00
Richard Mudgett f94a310ca0 channel: Fix some more unprotected channel flag setting.
Change-Id: I34c3b1201b1de539945bcfdcb264fff30332d48c
2018-06-18 10:54:03 -05:00
Sam Wierema bb0ce22b2b app_mp3: remove 10 seconds of silence after mp3 playback
This patch changes the way asterisk polls output from mpg123, instead
of waiting for 10 seconds(when playing an http url) it now uses a
timeout of one second and iterates 10 times using this same timeout.

The main difference is that for every timeout asterisk receives it now
checks if mpg123 is still running before poll again.

ASTERISK-27752

Change-Id: Ib7df8462e3e380cb328011890ad9270d9e9b4620
2018-06-15 07:24:15 -06:00
Jenkins2 c72aef9657 Merge "tests/test_utils: Repair ./configure --with-ssl=PATH." into 13 2018-06-14 11:41:46 -05:00
Joshua Colp 4f5b8f77b9 Merge "res_rtp_asterisk: Instead of ./configure use OPENSSL_NO_SRTP." into 13 2018-06-14 11:27:16 -05:00
Alexander Traud b004b44a46 tests/test_utils: Repair ./configure --with-ssl=PATH.
ASTERISK-27914

Change-Id: Ibcab8f556ee77776f203cff8b06d776a673b7bc4
2018-06-14 00:38:19 -06:00
ktyerman c6116a3234 chan_iax2: better handling for timeout and EINTR
The iax2 module is not handling timeout and EINTR case properly. Mainly when
there is an interupt to the kernel thread. In case of ast_io_wait recieves a
signal, or timeout it can be an error or return 0 which eventually escapes the
thread loop, so that it cant recieve any data. This then causes the modules
receive queue to build up on the kernel and stop any communications via iax in
asterisk.

The proposed patch is for the iax module, so that timeout and EINTR does not
exit the thread.

ASTERISK-27705
Reported-by: Kirsty Tyerman

Change-Id: Ib4c32562f69335869adc1783608e940c3535fbfb
2018-06-13 16:46:40 -06:00
Alexander Traud e3de4bc46e res_rtp_asterisk: Instead of ./configure use OPENSSL_NO_SRTP.
Previously, Asterisk used its script ./configure, to test whether OpenSSL was
built with no-srtp (or was simply too old). However, the header file
<openssl/opensslconf.h> is the preferred way to detect the local configuration
of OpenSSL.

As a positive side-effect the script ./configure does not interleave the
detection of the Open Settlement Protocol Toolkit (OSPTK) with the detection of
individual features of OpenSSL anymore.

Change-Id: I3c77c7b00b2ffa2e935632097fa057b9fdf480c0
2018-06-13 08:00:35 -06:00
Jenkins2 49c4c8af98 Merge "res_rtp_asterisk: Allow OpenSSL configured with no-deprecated." into 13 2018-06-12 10:06:44 -05:00
Joshua Colp 7609249a22 Merge "crypto.h: Repair ./configure --with-ssl=PATH." into 13 2018-06-12 09:40:01 -05:00
Joshua Colp 2b25fdb80c Merge "res_crypto: Allow OpenSSL configured with no-deprecated." into 13 2018-06-12 08:28:16 -05:00
Jenkins2 e46ab4743b Merge "res_srtp: Repair ./configure --with-ssl=PATH." into 13 2018-06-12 07:45:19 -05:00
Jenkins2 6fa33215ef Merge "func_odbc: NODATA if SQLNumResultCols returned 0 columns on readsql" into 13 2018-06-12 07:36:15 -05:00
Jenkins2 867a23e267 Merge "chan_pjsip: Register for "BEFORE_MEDIA" responses" into 13 2018-06-11 18:05:10 -05:00
Richard Mudgett 034a04af2a AST-2018-008: Fix enumeration of endpoints from ACL rejected addresses.
When endpoint specific ACL rules block a SIP request they respond with a
403 forbidden.  However, if an endpoint is not identified then a 401
unauthorized response is sent.  This vulnerability just discloses which
requests hit a defined endpoint.  The ACL rules cannot be bypassed to gain
access to the disclosed endpoints.

* Made endpoint specific ACL rules now respond with a 401 unauthorized
which is the same as if an endpoint were not identified.  The fix is
accomplished by replacing the found endpoint with the artificial endpoint
which always fails authentication.

ASTERISK-27818

Change-Id: Icb275a54ff8e2df6c671a6d9bda37b5d732b3b32
2018-06-11 10:26:37 -05:00
Alexander Traud ef2386fcd7 res_rtp_asterisk: Allow OpenSSL configured with no-deprecated.
Furthermore, allow OpenSSL configured with no-dh. Additionally, this change
allows auto-negotiation of the elliptic curve/group for servers, not only with
OpenSSL 1.0.2 but also with OpenSSL 1.1.0 and newer. This enables X25519
(since OpenSSL 1.1.0) and X448 (since OpenSSL 1.1.1) as a side-effect.

ASTERISK-27910

Change-Id: I5b0dd47c5194ee17f830f869d629d7ef212cf537
2018-06-08 22:09:00 +02:00
Alexander Traud 2c3ad1e40d crypto.h: Repair ./configure --with-ssl=PATH.
ASTERISK-27908

Change-Id: Iac49d9f82faeb8a4611c6805906bd6d650b1b1d8
2018-06-08 05:02:51 -06:00
Alexander Traud 7763aa824e res_crypto: Allow OpenSSL configured with no-deprecated.
The header <openssl/rsa.h> had to be included explicitly.

ASTERISK-27906

Change-Id: I41743801eed998c039d73db7a0762d104a4f75b2
2018-06-08 11:06:44 +02:00
Alexander Traud e62e069705 res_srtp: Repair ./configure --with-ssl=PATH.
ASTERISK-27905

Change-Id: Ibb7dc148a0048f4f9c3b12937ba4240dff0d15e2
2018-06-08 01:43:33 -06:00
Alexei Gradinari d9d50396cf func_odbc: NODATA if SQLNumResultCols returned 0 columns on readsql
The functions acf_odbc_read/cli_odbc_read ignore a number of columns
returned by the SQLNumResultCols.
If the number of columns is zero it means no data.
In this case, a SQLFetch function has to be not called,
because it will cause an error.

ASTERISK-27888 #close

Change-Id: Ie0f7bdac6c405aa5bbd38932c7b831f90729ee19
2018-06-07 10:29:59 -04:00
George Joseph 98da1971e3 chan_pjsip: Register for "BEFORE_MEDIA" responses
chan_pjsip wasn't registering for "BEFORE_MEDIA" responses which meant
it was not updating HANGUPCAUSE for 4XX responses.  If the remote end
sent a "180 Ringing", then a "486 Busy", the hangup cause was left at
"180 Normal Clearing".

* Removed chan_pjsip_incoming_response from the original session
  supplement (which was handling only "AFTER MEDIA") and added it to a
  new session supplement which accepts both "BEFORE_MEDIA" and
  "AFTER_MEDIA".

* Also cleaned up some cleanup code in load module.

ASTERISK-27902

Change-Id: If9b860541887aca8ac2c9f2ed51ceb0550fb007a
2018-06-07 07:56:00 -06:00
Alexander Traud 1205bcb69f ooh323c: GCC 8.1 warned about output truncated before terminating nul.
ASTERISK-27901

Change-Id: I5a8e894f4924ef52e3094f6870656a559d67f3d7
2018-06-07 06:20:36 -06:00
Joshua Colp 19f8f85689 Merge "pjsip_options: handle modification of qualify options in realtime" into 13 2018-06-06 11:21:38 -05:00
George Joseph 8b6c84787c Merge "pjsip_options: show/reload AOR qualify options using CLI" into 13 2018-06-06 10:10:40 -05:00
George Joseph 499867d006 Merge "app_confbridge: Add talking indicator for ConfBridgeList AMI response" into 13 2018-06-06 09:46:29 -05:00
Joshua Colp b5a186d723 Merge "bridge_channel.c: Fix Deadlock when using Local channels and fax gateway" into 13 2018-06-06 05:46:28 -05:00
George Joseph 8dbd3d2b05 Merge "tcptls: Allow OpenSSL configured with no-dh." into 13 2018-06-05 14:22:35 -05:00
George Joseph a938f49bc5 Merge "tcptls.h: Repair ./configure --with-ssl=PATH." into 13 2018-06-05 14:20:38 -05:00
George Joseph 93a85150e1 Merge "tcptls: Allow OpenSSL 1.1.x configured with enable-ssl3-method no-deprecated." into 13 2018-06-05 13:01:08 -05:00
Joshua Colp f17d09ae63 Merge "app_meetme: Fix manager event documentation for several events." into 13 2018-06-05 06:53:33 -05:00
George Joseph db2413b446 app_sendtext: Allow content types other than text/plain
There was no real reason to limit the conteny type to text/plain other
than that's what it was limited to before.  Now any text/* content
type will be allowed for channel drivers that don't support enhanced
messaging and any type will be allowed for channel drivers that do
support enhanced messaging.

Change-Id: I94a90cfee98b4bc8e22aa5c0b6afb7b862f979d9
2018-06-04 13:19:52 -06:00
Pirmin Walthert 8b67e2bd14 bridge_channel.c: Fix Deadlock when using Local channels and fax gateway
ast_indicate is invoked with the bridge locked. As ast_indicate locks the
other end of the bridge as well this can lead to a deadlock in some situations.
(Especially when a different thread does the same in the reverse order).
This patch calls ast_indicate after unlocking the bridge which fixes the
deadlock. Calling ast_indicate with these parameters without locking the
bridge should be safe as this is done at different places without a
bridge lock.

ASTERISK-27094 #close
Reported-by: David Brillert

Change-Id: I5f86c1e2ce75b9929a36ab589b18c450e62ea35f
2018-06-01 14:24:59 -06:00
William McCall 9ff4779f03 app_confbridge: Add talking indicator for ConfBridgeList AMI response
When an AMI client connects, it cannot determine if a user was talking
prior to a transition in the user speaking state (which would generate
a ConfbridgeTalking event). This patch causes app_confbridge to track the
talking state and make this state available via ConfBridgeList.

ASTERISK-27877 #close

Change-Id: I19b5284f34966c3fda94f5b99a7e40e6b89767c6
2018-06-01 05:34:06 +00:00
Joshua Colp a385467a35 Merge "ast_coredumper: Fix output directory and variable precedence" into 13 2018-05-31 05:15:57 -05:00
Richard Mudgett 071232244a app_meetme: Fix manager event documentation for several events.
The MeetmeJoin, MeetmeLeave, MeetmeEnd, MeetmeMute, MeetmeTalking, and
MeetmeTalkRequest AMI events were documented with sending out a Usernum
header when the User header was actually output.

* Change the online documentation to match reality.

ASTERISK-27873
ASTERISK-25261

Change-Id: I437bc70618d07c183c9624b7069c2fcae7f17a39
2018-05-29 12:38:13 -05:00
Joshua Colp 369e611ac0 Merge "libasteriskssl: Allow OpenSSL 1.0.2 configured with no-deprecated." into 13 2018-05-29 12:07:39 -05:00
Alexander Traud 8c78337479 tcptls.h: Repair ./configure --with-ssl=PATH.
asterisk/tcptls.h was included (explicitly, implicitly, or transitively). Those
inclusions got replaced by forward declarations. As side effect, the inclusions
got completed.

ASTERISK-27878

Change-Id: I9d102728e30336d6522e5e4ae9e964013a0835f7
2018-05-28 17:32:15 +02:00
Alexei Gradinari 9ad3918acd pjsip_options: handle modification of qualify options in realtime
Currentrly pjsip_options code does not handle the situation when the
qualify options were changed in realtime database.
Only 'module reload res_pjsip' helps.

This patch add a check on contact add/update observers if the contact
qualify options are different than local aor qualify options.
If the qualify options were modified then synchronize
the pjsip_options AOR local state.

ASTERISK-27872

Change-Id: Id55210a18e62ed5d35a88e408d5fe84a3c513c62
2018-05-25 18:01:42 -04:00
Alexander Traud 6833c763c7 tcptls: Allow OpenSSL configured with no-dh.
Additionally, this change allows auto-negotiation of the elliptic curve/group
for servers, not only with OpenSSL 1.0.2 but also with OpenSSL 1.1.0 and newer.
This enables X25519 (since OpenSSL 1.1.0) and X448 (since OpenSSL 1.1.1) as a
side-effect.

ASTERISK-27876

Change-Id: I62c2aba4a630aefc231b71f646207e8c027d9497
2018-05-25 08:56:46 -06:00
Alexander Traud 204cc25a27 tcptls: Allow OpenSSL 1.1.x configured with enable-ssl3-method no-deprecated.
ASTERISK-27874

Change-Id: Ica65113511c7a1c13f7988e7d9e7d9e7f3f620dd
2018-05-25 14:24:51 +02:00
Joshua Colp 7f318c3ab5 Merge "res/res_rtp_asterisk: ensure marker bit is correctly set on ssrc change" into 13 2018-05-24 14:55:59 -05:00
George Joseph acfdfcd19e ast_coredumper: Fix output directory and variable precedence
The OUTPUTDIR variable in ast_debug_tools.conf.sample is now set
to "/tmp" instead of "/some/directory".

Variables set on the command line or that are already in the
environment now take predecence over variables set in the config files.

ASTERISK-27846
Reported by: Ted G

Change-Id: Ie8baec52d531886bf5849ec1d59bb59dc87ad387
2018-05-24 13:00:06 -06:00
Joshua Colp bb33dafa8f Merge "tcptls: Repair ./configure --with-ssl=PATH." into 13 2018-05-24 06:07:18 -05:00
Joshua Colp 27a8189b0c Merge "channel.c: Fix off nominal channel allocation failure path." into 13 2018-05-24 05:15:50 -05:00
Joshua Colp 751652ec59 Merge "config.c: Fix successful DELETE treated as failure" into 13 2018-05-24 05:10:07 -05:00
Torrey Searle 4b7fd478d5 res/res_rtp_asterisk: ensure marker bit is correctly set on ssrc change
Certain race conditions between changing bridge types and DTMF can
cause the current FLAG_NEED_MARKER_BIT to send the marker bit before
the actual first packet of native bridging.

This logic keeps track of the ssrc the bridge is currently sending
and will correctly ensure the marker bit is set if SSRC as changed
from the previous sent packet.

ASTERISK-27845

Change-Id: I01858bd0235f1e5e629e20de71b422b16f55759b
2018-05-23 20:13:57 -06:00
Alexei Gradinari a576f50362 pjsip_options: show/reload AOR qualify options using CLI
Currentrly pjsip_options code does not handle the situation when the
AOR qualify options were changed.

Also there is no way to find out what qualify options are using.

This patch add CLI commands to show and synchronize Aor qualify options:
pjsip show qualify endpoint <id>
    Show the current qualify options for all Aors on the PJSIP endpoint.
pjsip show qualify aor <id>
    Show the PJSIP Aor current qualify options.
pjsip reload qualify endpoint <id>
    Synchronize the qualify options for all Aors on the PJSIP endpoint.
pjsip reload qualify aor <id>
    Synchronize the PJSIP Aor qualify options.

ASTERISK-27872

Change-Id: I1746d10ef2b7954f2293f2e606cdd7428068c38c
2018-05-23 17:33:01 -04:00
Richard Mudgett 90a075221b channel.c: Fix off nominal channel allocation failure path.
__ast_channel_alloc_ap() had a failure exit path that hadn't setup the fd
descriptors to -1 yet.  The destructor would then attempt to close these
fd's that had never been opened.

Change-Id: Icf21093f36c60781e8cf6ee9d586536302af33e3
2018-05-22 17:17:31 -05:00
Alexei Gradinari d6145087cf config.c: Fix successful DELETE treated as failure
The config engine destroy_func callback function returns the number of
rows deleted or -1 on error.  But the function
ast_destroy_realtime_fields treated non-zero return values as error.

ASTERISK-27863

Change-Id: Ied02b38e8196cb03043e609a0679feebd288d17b
2018-05-21 16:23:56 -06:00
Joshua Colp 6dbecc2319 Merge "app_voicemail: Fix data-type mismatch between app_voicemail and database" into 13 2018-05-21 09:05:37 -05:00
Alexander Traud ec40bd945c libasteriskssl: Allow OpenSSL 1.0.2 configured with no-deprecated.
Use CRYPTO_set_id_callback(.) only with OpenSSL 0.9.8 and older.

ASTERISK-27867

Change-Id: Iadd58d5bf6f538eb224203970a4e88e26f259655
2018-05-20 13:53:19 +02:00
Alexander Traud b6234f9577 tcptls: Repair ./configure --with-ssl=PATH.
SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TLSv1_2 got discovered without honoring a PATH.

ASTERISK-27865

Change-Id: I8cd358eed7411726d08fa7b01691bef122fbeb71
2018-05-19 07:26:03 -06:00
Kevin Harwell 835cbbe38c Merge "app_voicemail: Fix incorrect msg leaving/retrieving an ODBC voicemail" into 13 2018-05-18 16:43:06 -05:00
Jenkins2 aa37dad11a Merge "chan_mobile: support handling of caller-id names ("cnam")." into 13 2018-05-18 16:06:34 -05:00
Jenkins2 9564fc19f5 Merge "res_pjsip_endpoint_identifier_ip: Unregister the module for headers." into 13 2018-05-18 15:18:33 -05:00
Nic Colledge 436d17fa50 app_voicemail: Fix incorrect msg leaving/retrieving an ODBC voicemail
Correct the log warning message shown when ODBC voicemail
retrieve_file is called and there is a null value in the category
column.
A more meaningfull message is now written at debug level.

ASTERISK-27853

Change-Id: Ic36e97d5eb070a23a12ba45972f6b53e2182a3f4
2018-05-17 15:55:18 -06:00
Brian P. Martin 8c1202beb9 chan_mobile: support handling of caller-id names ("cnam").
Add support to handle caller-ID names ("cnam") in addition to caller-ID
numbers.  The prior code ignored the caller-ID name altogether, and
used the local name for the cell phone (e.g. "my-iphone") in its place.

Note: as of this writing, at least some Android phones don't pass cnam to
us. This can be seen by issuing "core set debug 2" in the CLI and watching
the "CLIP" record when a call comes in.  If cnam isn't in the CLIP record,
there's nothing we can do to provide one.  We'll provide a null cnam field,
so later Asterisk processes know to try other sources (e.g. cidname database,
OpenCNAM, etc.).

Reported by: Brian Martin
Tested by: Brian Martin
ASTERISK-27726

Change-Id: I89490d85fa406c36261879c50ae5e65595538ba5
2018-05-17 16:22:47 -05:00
Alexander Traud b615df06d3 res_pjsip_endpoint_identifier_ip: Unregister the module for headers.
Asterisk uses Reference Counting to track whether a module can be unloaded.
Every consumer who requires a module, increases the reference count. When the
consumer goes, is unloaded itself, it has to decrease the reference count on
all its used/required modules. That way
 core stop gracefully
works on the command-line interface (CLI): One module after the other is
unloaded. A recent change broke this for the module res_pjsip.

ASTERISK-27861

Change-Id: I261abcb411d026bbb0691cc78f28300bfd3103a3
2018-05-17 01:02:38 -06:00
Alexander Traud 99b24dc63b res_pjsip: Register pjsip_transport_management not externally but internally.
The module (res_)pjsip_transport_management got moved into res_pjsip. It is no
longer an independent/external module with (un)load_module and therefore has to
register just internally with res_pjsip.

ASTERISK-27860

Change-Id: Icd0413be7d2e98b92f51e6d6c353f2570bb4be95
2018-05-16 23:35:32 -06:00
Jenkins2 0afe108dd6 Merge "cli: Display correct unit for HTTP timeout in "manager show settings"." into 13 2018-05-16 09:40:58 -05:00
Jenkins2 118eef8907 Merge "Fix GCC 8 build issues." into 13 2018-05-16 09:37:35 -05:00
Joshua Colp 23e58ec220 Merge "rtp_engine: Remove the double assigned RTP payload ID of H.263+." into 13 2018-05-15 04:13:41 -05:00
Joshua Colp 8926bc20fd Merge "rtp_engine: Avoid a typo error in Doxygen for ast_rtp_codecs_find_payload_code." into 13 2018-05-14 06:25:06 -05:00
Jenkins2 3e65d3bee9 Merge "git: Ignore *.orig." into 13 2018-05-14 06:24:10 -05:00
Joshua Colp ac9d6b0523 Merge "pjsip: Rewrite OPTIONS support with new eyes." into 13 2018-05-14 04:06:20 -05:00
Nic Colledge 36f08075da app_voicemail: Fix data-type mismatch between app_voicemail and database
Fix data-type mismatch between app_voicemail and database columns
exposed by new version of MariaDB

ASTERISK-27760

Change-Id: I8543ad480a08c98be78bde1ee870e6e6c84b2c5b
2018-05-12 11:22:23 +01:00
Alexander Traud 308a967470 rtp_engine: Remove the double assigned RTP payload ID of H.263+.
Mantis-3709 (Commit 68ff3c3, Asterisk 1.2) added support for the video format
H.263+. For this, the RTP payload ID 103 got assigned statically. Commit f1aadc8
assigned another payload ID 98 for this format in Asterisk 1.6.

Change-Id: I90e35b158487f8f1f8187da6241b54cd3b74e667
2018-05-11 11:50:01 -06:00
Corey Farrell 67212eae87 cli: Display correct unit for HTTP timeout in "manager show settings".
HTTP timeout is in seconds, not minutes.

ASTERISK-27852 #close

Change-Id: Ie6640835cb07307555741f9b559c2eb876d9343e
2018-05-11 13:26:39 -04:00
Alexander Traud 9fe4f99cba rtp_engine: Avoid a typo error in Doxygen for ast_rtp_codecs_find_payload_code.
Change-Id: Ica089d4507a27ddfc4ce3a88d697ffbef378de48
2018-05-11 09:38:20 -06:00
Corey Farrell d893e57c90 Fix GCC 8 build issues.
This fixes build warnings found by GCC 8.  In some cases format
truncation is intentional so the warning is just suppressed.

ASTERISK-27824 #close

Change-Id: I724f146cbddba8b86619d4c4a9931ee877995c84
2018-05-11 09:58:19 -04:00
Joshua Colp a722e79434 Merge "makeopts.in: Remove unused/undefined AST_MARCH_NATIVE." into 13 2018-05-10 03:45:35 -05:00
Joshua Colp eba5ead107 Merge "sip_to_pjsip: Enable python3 compatibility." into 13 2018-05-09 19:01:02 -05:00
Matthew Fredrickson 316efcddb9 res_hep: Adds hostname resolution support for capture_address
Previously, only an IP address would be accepted for the capture_address config
setting in hep.conf.  This change allows capture_address to be a resolvable
hostname or an IP address.

ASTERISK-27796 #close
Reported-By: Sebastian Gutierrez

Change-Id: I33e1a37a8b86e20505dadeda760b861a9ef51f6f
2018-05-09 14:14:08 -06:00
Jenkins2 6783eb8cca Merge "app_macro: Prevent infinite loop in find_matching_priority." into 13 2018-05-09 11:27:42 -05:00
Corey Farrell 19ebad0d30 git: Ignore *.orig.
This prevents accidental commit of files created by patch.

Change-Id: I68380db61f0f9d620046f719ccd978811d0e9964
2018-05-09 10:30:41 -04:00
Alexander Traud c6a4d34b7f sip_to_pjsip: Enable python3 compatibility.
The script remains compatible with Python 2.7 but now also works with
Python 3.3 and newer; to ease the migration from chan_sip to chan_pjsip.

ASTERISK-27811

Change-Id: I59cc6b52a1a89777eebcf25b3023bdf93babf835
2018-05-09 07:46:42 -06:00
Corey Farrell ba6034db48 makeopts.in: Remove unused/undefined AST_MARCH_NATIVE.
Change-Id: I617a96ebb83ec99f5d3176bbbee2d2a272ccb203
2018-05-08 15:28:10 -04:00
Jaco Kroon 47548ff485 manager: fix digest auth for ami/http mechanism.
Due to a fixed size buffer the digest authentication could be
incorrectly calculated if a large URI was provided, causing
authentication failure. The buffer is now dynamically allocated to allow
any size URI within the normal limits of the HTTP request size.

ASTERISK-27841

Change-Id: I660609db13b8f9e5f9567f339dd804f4985d41b3
2018-05-08 10:21:16 -04:00
Corey Farrell 5dffdf79d1 app_macro: Prevent infinite loop in find_matching_priority.
Use AST_PBX_MAX_STACK to escape if we recurse 128 times.  This will
prevent crash if dialplan contains an include loop.  Log an error when
this occurs, at most one message per call to Macro() so we avoid logger
spam.

ASTERISK-26570 #close

Change-Id: I6c71b76998c31434391b150de055ae9a531e31da
2018-05-07 07:59:00 -06:00
Jenkins2 2d0fb07f53 Merge "res_ari: Remove requirement that body exists when debug is on." into 13 2018-05-04 06:08:40 -05:00
Jenkins2 8966a39e9d Merge "res_pjsip/pjsip_distributor.c: Add missing off-nominal request response." into 13 2018-05-03 12:11:00 -05:00
Joshua Colp 6192e40e04 Merge "pjsip: Increase maximum number of usable ciphers & other cleanups" into 13 2018-05-03 07:25:17 -05:00
Joshua Colp a36d6e3674 res_ari: Remove requirement that body exists when debug is on.
The "ari set debug" code for incoming requests incorrectly assumed
that all requests would contain a body. If one did not exist the
request would be incorrectly rejected. The response that was sent
was also incomplete as an incorrect function was used to construct
the response.

The code has now been changed to no longer require a request to have
a body and the response updated to use the correct function.

ASTERISK-27801

Change-Id: I4eef036ad54550a4368118cc348765ecac25e0f8
2018-05-03 11:34:32 +00:00
Sean Bright 850e554793 pjsip: Increase maximum number of usable ciphers & other cleanups
* Increase maximum number of ciphers from 100 to 256 (or whatever
  PJ_SSL_SOCK_MAX_CIPHERS is #define'd to)

* Simplify logic in cipher_name_to_id()

* Make signed/unsigned comparison consistent

Re: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897412

Reported by: Ondřej Holas

Change-Id: Iea620f03915a1b873e79743154255c3148a514e7
2018-05-02 09:03:59 -04:00
Richard Mudgett 51a6a986f1 res_pjsip/pjsip_distributor.c: Add missing off-nominal request response.
Change-Id: I389579b39c523d1d1e8ce020ef549a8bb5781c9b
2018-05-01 17:22:53 -05:00
Richard Mudgett 3663968705 res_pjsip/pjsip_distributor.c: Pull some assignments out of if tests.
Change-Id: I3d30d638b53a4bbe9bf9aad853c649d583894112
2018-05-01 17:17:06 -05:00
George Joseph 42abc9c430 Merge "BuildSystem: Add DragonFly BSD." into 13 2018-04-30 09:06:45 -05:00
George Joseph 0a9c7443bd Merge "translate: generic plc not filled in after translation" into 13 2018-04-30 08:38:09 -05:00
George Joseph 2b50b31b68 Merge "app_sendtext: Enhance SendText to support Enhanced Messaging" into 13 2018-04-30 07:35:17 -05:00
Joshua Colp bea52b3706 pjsip: Rewrite OPTIONS support with new eyes.
The OPTIONS support in PJSIP has organically grown, like many things in
Asterisk.  It has been tweaked, changed, and adapted based on situations
run into.  Unfortunately this has taken its toll.  Configuration file
based objects have poor performance and even dynamic ones aren't that
great.

This change scraps the existing code and starts fresh with new eyes.  It
leverages all of the APIs made available such as sorcery observers and
serializers to provide a better implementation.

1.  The state of contacts, AORs, and endpoints relevant to the qualify
process is maintained.  This state can be updated by external forces (such
as a device registering/unregistering) and also the reload process.  This
state also includes the association between endpoints and AORs.

2.  AORs are scheduled and not contacts.  This reduces the amount of work
spent juggling scheduled items.

3.  Manipulation of which AORs are being qualified and the endpoint states
all occur within a serializer to reduce the conflict that can occur with
multiple threads attempting to modify things.

4.  Operations regarding an AOR use a serializer specific to that AOR.

5.  AORs and endpoint state act as state compositors.  They take input
from lower level objects (contacts feed AORs, AORs feed endpoint state)
and determine if a sufficient enough change has occurred to be fed further
up the chain.

6.  Realtime is supported by using observers to know when a contact has
been registered.  If state does not exist for the associated AOR then it
is retrieved and becomes active as appropriate.

The end result of all of this is best shown with a configuration file of
3000 endpoints each with an AOR that has a static contact.  In the old
code it would take over a minute to load and use all 8 of my cores.  This
new code takes 2-3 seconds and barely touches the CPU even while dealing
with all of the OPTIONS requests.

ASTERISK-26806

Change-Id: I6a5ebbfca9001dfe933eaeac4d3babd8d2e6f082
2018-04-27 17:26:54 -05:00
George Joseph c5d19565fe Merge "bridge_softmix: Forward TEXT frames" into 13 2018-04-27 13:17:27 -05:00
Joshua Colp aac46639e5 Merge "BuildSystem: Enable IMAP storage on FreeBSD and DragonFly BSD." into 13 2018-04-26 19:06:31 -05:00
Joshua Colp 5b0a58bc3e Merge "install_prereq: Add DragonFly BSD." into 13 2018-04-25 13:55:19 -05:00
Joshua Colp 8c5f4dade3 Merge "format_pcm: Correct behavior of fseek and ftell for G.722" into 13 2018-04-25 13:30:42 -05:00
Joshua Colp dec91abcae Merge "menuselect: Add DragonFly BSD." into 13 2018-04-25 13:21:45 -05:00
Jenkins2 ba06e54925 Merge "chan_ooh323: fix ooManualProgress/ooManualRingback on ooh323 debuggin on" into 13 2018-04-25 10:20:42 -05:00
Joshua Colp cb4e991181 Merge "res_pjsip: Fix initialization of extended stringfields." into 13 2018-04-24 18:59:01 -05:00
Joshua Colp 4f07ed445f Merge "chan_ooh323: Fix cppcheck warnings" into 13 2018-04-24 18:39:17 -05:00
Kevin Harwell 63c68d023c translate: generic plc not filled in after translation
If during translation a codec could not handle a given frame the translation
core would return NULL, thus not passing along the "missing" frame. Due to this
there was no frame to apply generic plc to, thus rendering it useless.

This patch makes it so the translation core produces an interpolated slin frame
in the cases where an attempt was made to translate to slin, but failed. This
interpolated frame is then passed along and can be used by the generic plc
algorithms to fill in the frame.

ASTERISK-27814 #close

Change-Id: I133d084da87adef913bf2ecc9c9240e3eaf4f40a
2018-04-24 15:54:48 -05:00
Alexander Anikin 1593ff91fe chan_ooh323: fix ooManualProgress/ooManualRingback on ooh323 debuggin on
Call ooManualProgress/Ringback outside of ast_debug function
when ooh323 debugging is on

ASTERISK-27812 #close
ASTERISK-26893 #close
Reported by: Dimos, Marco Giordani

Change-Id: I5873762e4f05824e7b6e94a19dd4eb56adbbbb79
2018-04-20 13:20:40 -06:00
Alexander Traud 94c8b20f5f BuildSystem: Enable IMAP storage on FreeBSD and DragonFly BSD.
ASTERISK-27639

Change-Id: I1347f3f2f3737010d0a80a5c30b5aaf71cf3ccb0
2018-04-20 06:15:48 -06:00
Alexander Traud 7b219311eb BuildSystem: Add DragonFly BSD.
ASTERISK-27820

Change-Id: I310896143e94d65da1c2be3bb448204a8b86d557
2018-04-20 12:54:57 +02:00
Alexander Traud 00711bce99 menuselect: Add DragonFly BSD.
In DragonFly BSD, added libraries from ports are placed into /usr/local.
Therefore, this directory must be added for the preprocessor, compiler, and
linker.

Beside that, the script ./configure was updated:
* OSARCH list was outdated and not used, removed.
* AC_CANONICAL_BUILD was not used.
* _REENTRANT, this feature test macro is obsolete.

ASTERISK-27820

Change-Id: I186d88d99cfa4de6569888e12ac97bd2f441c422
2018-04-20 04:45:38 -06:00
Alexander Traud 866b884eab install_prereq: Add DragonFly BSD.
ASTERISK-27820

Change-Id: I718ddb000fe5184b1bdc7759da67a370a7520144
2018-04-20 12:23:26 +02:00
Jenkins2 caedeef695 Merge "chan_vpb: Avoid GNU old-style field designator extension." into 13 2018-04-19 14:36:34 -05:00
Jenkins2 b3cec9d445 Merge "res_pjsip: Fix deadlock on reliable transport shutdown." into 13 2018-04-18 17:20:19 -05:00
Jenkins2 ada0676e1d Merge "Build System: Enable python3 compatibility." into 13 2018-04-18 17:06:26 -05:00
Corey Farrell ea14243971 res_pjsip: Fix initialization of extended stringfields.
It is possible for initialization of extended stringfields to fail.  Add
checks for this failure.

Change-Id: I062e09852db3d37ceefaf6c2048958fa0118304f
2018-04-18 15:25:35 -06:00
Jenkins2 d474763a2c Merge "utils/pval: Add -lBlocksRuntime for compiler clang conditionally." into 13 2018-04-18 15:18:32 -05:00
Jenkins2 57aca68bbf Merge "utils: Add ast_assert_return" into 13 2018-04-18 14:35:55 -05:00
Sean Bright 7b05184bca format_pcm: Correct behavior of fseek and ftell for G.722
There are twice as many samples in the same number of bytes, so redefine
some of the G.722 format functions in terms of their PCM counterparts.

Change-Id: I6a8c7352624b930a5f2d9e4857f75283fa5dd9f9
2018-04-18 14:40:52 -04:00
Alexander Anikin 8611135e96 chan_ooh323: Fix cppcheck warnings
Fix cppcheck warnings about redundant conditions and possible
null pointer usage

ASTERISK-27793 #close
Reported by: Ilya Shipitsin
Tested by: Ilya Shipitsin

Change-Id: I0b31933b062a23331dbac9a82b8bcfe345f406f6
2018-04-18 04:39:31 -06:00
Jenkins2 e516c34c02 Merge "res_musiconhold: Don't restart MOH from beginning after announcement." into 13 2018-04-17 12:11:48 -05:00
George Joseph 3c2249fd37 app_sendtext: Enhance SendText to support Enhanced Messaging
SendText now accepts new channel variables that can be used
to override the To and From display names and set the Content-Type
of a message.  Since you can now set Content-Type, other text/*
content types are now valid.

Change-Id: I648b4574478119f95de09d9f08e9595831b02830
2018-04-17 11:20:41 -05:00
George Joseph be7d4faed5 bridge_softmix: Forward TEXT frames
Core bridging and, more specifically, bridge_softmix have been
enhanced to relay received frames of type TEXT or TEXT_DATA to all
participants in a softmix bridge.  res_pjsip_messaging and
chan_pjsip have been enhanced to take advantage of this so when
res_pjsip_messaging receives an in-dialog MESSAGE message from a
user in a conference call, it's relayed to all other participants
in the call.

res_pjsip_messaging already queues TEXT frames to the channel when
it receives an in-dialog MESSAGE from an endpoint and chan_pjsip
will send an MESSAGE when it gets a TEXT frame.  On a normal
point-to-point call, the frames are forwarded between the two
correctly.  bridge_softmix was not though so messages weren't
getting forwarded to conference bridge participants.  Even if they
were, the bridging code had no way to tell the participants who
sent the message so it would look like it came from the bridge
itself.

* The TEXT frame type doesn't allow storage of any meta data, such
as sender, on the frame so a new TEXT_DATA frame type was added that
uses the new ast_msg_data structure as its payload.  A channel
driver can queue a frame of that type when it receives a message
from outside.  A channel driver can use it for sending messages
by implementing the new send_text_data channel tech callback and
setting the new AST_CHAN_TP_SEND_TEXT_DATA flag in its tech
properties.  If set, the bridging/channel core will use it instead
of the original send_text callback and it will get the ast_msg_data
structure. Channel drivers aren't required to implement this.  Even
if a TEXT_DATA enabled driver uses it for incoming messages, an
outgoing channel driver that doesn't will still have it's send_text
callback called with only the message text just as before.

* res_pjsip_messaging now creates a TEXT_DATA frame for incoming
in-dialog messages and sets the "from" to the display name in the
"From" header, or if that's empty, the caller id name from the
channel.  This allows the chat client user to set a friendly name
for the chat.

* bridge_softmix now forwards TEXT and TEXT_DATA frames to all
participants (except the sender).

* A new function "ast_sendtext_data" was added to channel which
takes an ast_msg_data structure and calls a channel's
send_text_data callback, or if that's not defined, the original
send_text callback.

* bridge_channel now calls ast_sendtext_data for TEXT_DATA frame
types and ast_sendtext for TEXT frame types.

* chan_pjsip now uses the "from" name in the ast_msg_data structure
(if it exists) to set the "From" header display name on outgoing text
messages.

Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489
2018-04-17 10:16:41 -06:00
Alexander Traud 92f88f164a utils/pval: Add -lBlocksRuntime for compiler clang conditionally.
ASTERISK-27809

Change-Id: I930b364a33d54cc08dedfcd5bb45f7e83242f134
2018-04-17 14:09:46 +02:00
Alexander Traud fb9634bcb3 chan_vpb: Avoid GNU old-style field designator extension.
clang 6.0 warned about this. Beside that, this change removes the used variable
'desc'.

ASTERISK-27808

Change-Id: Ia26bdcc0a562c058151814511cfcf70ecafa595b
2018-04-17 12:31:52 +02:00
George Joseph 39c51394c8 utils: Add ast_assert_return
Similar to pjproject's PJ_ASSERT_RETURN macro, this one will do the
following...

If the assert passes... NoOp

If the assert fails and AST_DEVMODE is defined, execute ast_assert()
then, if DO_CRASH isn't set, return from the calling function with
the supplied value.

If the assert fails and AST_DEVMODE is not defined, return from the
calling function with the supplied value.

The macro will execute a return without a value if one isn't suppled.

Change-Id: I0003844affeab550d5ff5bca7aa7cf8a559b873e
2018-04-16 06:31:45 -06:00
Jenkins2 ad0ba520b5 Merge "pjsip_scheduler.c: Add ability to trace scheduled tasks." into 13 2018-04-16 07:00:21 -05:00
Jenkins2 fb9cbd524b Merge "res_pjsip.c: Split ast_sip_push_task_synchronous() to fit expectations." into 13 2018-04-16 06:46:30 -05:00
Jenkins2 f83f5c48b2 Merge "pjsip_scheduler.c: Fix some corner cases." into 13 2018-04-16 06:39:36 -05:00
Ben Ford f2e140e8a7 res_musiconhold: Don't restart MOH from beginning after announcement.
This reverts a problem introduced by the fix for ASTERISK_24329.
Now, when an announcement is played while waiting in a queue, music on
hold will not restart from the beginning of the sound file and will
instead pick up where it left off. However, the incorrect behavior in
ASTERISK_24329 is now present again; if an announcement X seconds
long is played when music on hold starts, music on hold will start X
seconds into the file.

ASTERISK-27774 #close
Reported by: lvl

Change-Id: I86b2885ee7063268f9b9747eddb788336ade989b
2018-04-13 16:25:44 -05:00
Richard Mudgett b92ebdba5f pjsip_scheduler.c: Add ability to trace scheduled tasks.
When a scheduled task is created you can pass in the
AST_SIP_SCHED_TASK_TRACK flag.  This new flag causes scheduling events to
be logged.

Change-Id: I91967eb3d5a220915ce86881a28af772f9a7f56b
2018-04-12 17:16:44 -05:00
Richard Mudgett 12aa25b2e1 res_pjsip.c: Split ast_sip_push_task_synchronous() to fit expectations.
ast_sip_push_task_synchronous() did not necessarily execute the passed in
task under the specified serializer.  If the current thread is any
registered pjsip thread then it would execute the task immediately instead
of under the specified serializer.  Reentrancy issues could result if the
task does not execute with the right serializer.

The original reason ast_sip_push_task_synchronous() checked to see if the
current thread was a registered pjsip thread was because of a deadlock
with masquerades and the channel technology's fixup callback
(ASTERISK_22936).  A subsequent masquerade deadlock fix (ASTERISK_24356)
involving call pickups avoided the original deadlock situation entirely.
The PJSIP channel technology's fixup callback no longer needed to call
ast_sip_push_task_synchronous().

However, there are a few places where this unexpected behavior is still
required to avoid deadlocks.  The pjsip monitor thread executes callbacks
that do calls to ast_sip_push_task_synchronous() that would deadlock if
the task were actually pushed to the specified serializer.  I ran into one
dealing with the pubsub subscriptions where an ao2 destructor called
ast_sip_push_task_synchronous().

* Split ast_sip_push_task_synchronous() into
ast_sip_push_task_wait_servant() and ast_sip_push_task_wait_serializer().
ast_sip_push_task_wait_servant() has the old behavior of
ast_sip_push_task_synchronous().  ast_sip_push_task_wait_serializer() has
the new behavior where the task is always executed by the specified
serializer or a picked serializer if one is not passed in.  Both functions
behave the same if the current thread is not a SIP servant.

* Redirected ast_sip_push_task_synchronous() to
ast_sip_push_task_wait_servant() to preserve API for released branches.

ASTERISK_26806

Change-Id: Id040fa42c0e5972f4c8deef380921461d213b9f3
2018-04-12 17:15:10 -05:00
Richard Mudgett dfdc9a2575 pjsip_scheduler.c: Fix some corner cases.
* Fix the periodic interval wander because it may take significant time
between the sched thread queueing the task in the serializer and the
serializer actually executing the task.  The time it takes to actually
execute the task was already taken into account.

* Pass a schtd ref to the serializer when we queue a scheduled task on
the serializer.  We don't want it going away on us while it is in the
serializer queue.

* Skip the scheduled task if the task was canceled between queueing the
task to the serializer and the serializer actually executing the task.

* Reorder struct ast_sip_sched_task to avoid unnecessary padding.  Removed
task_id and added next_periodic.

* Hold a ref to the passed in serializer so the serializer cannot go away
on the scheduled task.

ASTERISK_26806

Change-Id: I6c8046b75f6953792c8c30e55b836a4291143f24
2018-04-12 17:15:10 -05:00
Richard Mudgett af36823907 pjsip_scheduler.c: Sort "pjsip show scheduled_tasks" output.
* A side benefit is that the scheduled tasks are not completely blocked
while the CLI command executes.

* Adjusted the "Task Name" column width to have more room for longer
names.

Change-Id: Iec64aa463ee8b10eef90120e00c38b1fb444087e
2018-04-12 16:45:12 -05:00
Jenkins2 264af6bec0 Merge "res_pjsip_notify.c: enable in-dialog NOTIFY" into 13 2018-04-12 14:57:33 -05:00
Jenkins2 dfd0529abc Merge "pjsip_scheduler.c: Fix ao2 usage errors." into 13 2018-04-12 10:10:28 -05:00
Jenkins2 6aee468ba1 Merge "Build System: Strip '-std=c99' from CFLAGS provided by libraries." into 13 2018-04-12 09:43:14 -05:00
Evandro Cesar Arruda 7886354343 cdr_mysql: Compile error because MYSQL_PORT definition is missing
If it is not defined, it will add MYSQL_PORT definition. After some
research on MySQL/MariaDB development tree, I couldn't find any reference
to MYSQL_PORT definition in include files.

ASTERISK-27782 #close

Change-Id: Ieee56c836fc2e8bd021c456145bba04c6068bb77
2018-04-11 14:26:28 -06:00
Chris-Savinovich 724d926d46 res_pjsip_session: Rewrite o= with external_media_address.
It now appends the external IP address on the
o= line of the SDP packet.  The decision was made to write
the numeric IP address as opposed to the RFC that states
the FQDN should be used if and when available.  We believe
the usage of literal IP address will help avoid
potential problems.

ASTERISK-27614 #close

Change-Id: I84f3360f3606b8c4e8d161edb228799ec0b8a302
2018-04-11 11:21:33 -06:00
Nathan Bruning 6a4afe09ce res_pjsip_notify.c: enable in-dialog NOTIFY
This patch adds support to send in-dialog SIP NOTIFY commands on
chan_pjsip channels, similar to the functionality recently added
for chan_sip (ASTERISK_27461).

This extends res_pjsip_notify to allow for in-dialog messages.

ASTERISK-27697

Change-Id: If7f3151a6d633e414d5dc319d5efc1443c43dd29
2018-04-11 10:36:52 -06:00
Jenkins2 0edc4ade93 Merge "res_pjsip_refer/chan_sip: Fix INVITE with replaces transfer to ConfBridge" into 13 2018-04-11 07:03:19 -05:00
Jenkins2 483d874836 Merge "chan_sip.c: Fix INVITE with replaces channel ref leak." into 13 2018-04-10 09:58:22 -05:00
Richard Mudgett c4f02c975b pjsip_scheduler.c: Fix ao2 usage errors.
* Removed several invalid uses of OBJ_NOLOCK.  These uses resulted in the
'tasks' container being accessed without a lock in a multi-threaded
environment.  A recipe for crashes.

* Removed needlessly obtaining schtd object references.  If the caller
providing you a pointer to an object doesn't have a valid reference then
you cannot safely get one from it.

* Getting a ref to 'tasks' when you aren't copying the pointer into
another location is useless.  The 'tasks' container pointer is global.

* Removed many unnecessary uses of RAII_VAR.

* Make ast_sip_schedule_task() name parameter const.

ASTERISK_26806

Change-Id: I5c62488e651314e2a1dbc01f5b078a15512d73db
2018-04-09 13:44:46 -05:00
Jenkins2 36f94cbcde Merge "Build System: Fixes for configure script." into 13 2018-04-09 10:15:23 -05:00
Corey Farrell 7593359787 Build System: Enable python3 compatibility.
* Consistently use spaces in rest-api-templates/asterisk_processor.py.
* Exclude third-party from docs/full-en_US.xml.
* Add docs/full-en_US.xml to .gitignore.
* Use list() to convert python3 view.
* Use python3 print function.
* Replace cmp() with equivalent equation.
* Replace reference to out of scope subtype variable with name
  parameter.
* Use unescaping triple bracket notation in mustache templates where
  needed.  This causes behavior of Python2 to be maintained when using
  Python3.
* Fix references to has_websocket / is_websocket in
  res_ari_resource.c.mustache.
* Update calculation of has_websocket to use any().
* Use unicode mode for writing output file in transform.py.
* Replace 'from swagger_model import *' with explicit import of required
  symbols.
* Add missing 'import os'
* Fix invalid reference to swagger_version from exception handler.

I have not tested voicemailpwcheck.py, only the print syntax has
been fixed.

Change-Id: If5c5b556a2800d41a3e2cfef080ac2e151178c33
2018-04-09 10:08:15 -04:00
Richard Mudgett 72b16ee400 res_pjsip_refer/chan_sip: Fix INVITE with replaces transfer to ConfBridge
There is a problem when an INVITE-with-Replaces transfer targets a channel
in a ConfBridge.  The transfer will unconditionally swap out the
ConfBridge channel.  Unfortunately, the ConfBridge state will not be aware
of this change.  Unexpected behavior will happen as a result since
ConfBridge channels currently can only be replaced by a masquerade and not
normal bridge channel moves.

* We just need to pretend that the channel isn't in a bridge (like other
transfer methods already do) so the transfer channel will masquerade into
the ConfBridge channel.

Change-Id: I209beb0e748fa4f4b92a576f36afa8f495ba4c82
2018-04-06 17:12:30 -05:00
Jenkins2 dcac292ae3 Merge "BuildSystem: Add support for building RADIUS with radcli." into 13 2018-04-06 08:46:11 -05:00
Jenkins2 9117bbb45d Merge "res_pjsip: Update authenticate_qualify documentation." into 13 2018-04-06 06:37:40 -05:00
Richard Mudgett ea055386e0 chan_sip.c: Fix INVITE with replaces channel ref leak.
Given the below call scenario:
A -> Ast1 -> B
C <- Ast2 <- B

1) A calls B through Ast1
2) B calls C through Ast2
3) B transfers A to C

When party B transfers A to C, B sends a REFER to Ast1 causing Ast1 to
send an INVITE with replaces to Ast2.  Ast2 then leaks a channel ref of
the channel between Ast1 and Ast2.

Channel ref leaks are easily seen in the CLI "core show channels" output.
The leaked channels appear in the output but you can do nothing with them
and they never go away unless you restart Asterisk.

* Properly account for the channel refs when imparting a channel into a
bridge when handling an INVITE with replaces in handle_invite_replaces().
The ast_bridge_impart() function steals a channel ref but the code didn't
account for how many refs were held by the code at the time and which ref
was stolen.

* Eliminated RAII_VAR in handle_invite_replaces().

ASTERISK-27740

Change-Id: I7edbed774314b55acf0067b2762bfe984ecaa9a4
2018-04-05 18:34:29 -05:00
Richard Mudgett e94f8e4a24 res_pjsip: Update authenticate_qualify documentation.
Change-Id: I3811de0014b1ffe96d4a3b49cddd5d4ca02ee5d4
2018-04-04 18:05:30 -05:00
Richard Mudgett 906db6a3ff app_agent_pool.c: Fix off nominal ref leak.
Change-Id: Ib427ffc2c802620eaafb08b1c2a17dddd8fb8eb6
2018-04-04 18:02:12 -05:00
Corey Farrell 07e408e588 Build System: Strip '-std=c99' from CFLAGS provided by libraries.
Asterisk requires GNU C extensions.  On some systems certain libraries
may incorrectly push -std=c99 into CFLAGS, thus breaking the build.
This change causes that flag to be stripped so the Asterisk build is not
broken by those libraries.  This change is made for both pkgconfig and
tool based libraries.

ASTERISK-27629 #close

Change-Id: I13389613b194abbac77becf90cd950dc168704db
2018-04-04 09:41:56 -06:00
Corey Farrell 01b3c435d8 Build System: Fixes for configure script.
* Replace all 'else if' statements with 'elif'.
* Use loop to detect versioned lua headers and libraries.

The loop for detecting lua fixes a bug where LUA_INCLUDE would be
appended with the directory of every lua version after the first one is
found.

Change-Id: I3276f9aee955014108345be6092f51c932b43a0f
2018-04-03 14:41:40 -06:00
Jenkins2 7888b6115a Merge "install_prereq: Add Slackware (somehow)." into 13 2018-04-03 06:14:25 -05:00
George Joseph cea1a22ef3 res_pjsip: Correct usages of pjproject's timer heap
Fix some timer heap initializations and cancels to try and prevent
crashes and timer heap issues.

Change-Id: I64885d190fa22097d1b55987091375541e57a7ee
2018-04-02 10:17:02 -05:00
George Joseph 158c0efd4f pjroject_bundled: Add already-destroyed check to tsx_timer_callback
There have been cases that when the transaction timer callback is called
the tsx is already destroyed.  This causes a crash.  We now check the
tsx state and return if the tsx is already destroyed.

Change-Id: If93acd5e48d9ca5bb553f2405d5afc836842fe1c
2018-04-02 09:41:36 -05:00
George Joseph 69c61237cd pjproject_bundled: timer: Clean up usage of timer heap
Added a new pj_timer_entry_reset function that resets a timer_entry
for re-use.

Changed direct settings of timer_entry fields to use
pj_timer_entry_init and pj_timer_entry_reset.

Fixed issues where timers were being rescheduled incorrectly.

Change-Id: I5b624bfbc5c1429117484b9b24567293002148e6
2018-04-02 09:39:52 -05:00
Jenkins2 b621ea4109 Merge "install_prereq: Add Gentoo Linux." into 13 2018-04-02 09:27:25 -05:00
Joshua Colp 945f7c6082 Merge "BuildSystem: With external editline, do not require libs for internal editline." into 13 2018-04-02 08:42:03 -05:00
Alexander Traud 83353997f4 BuildSystem: Add support for building RADIUS with radcli.
Radcli is yet another RADIUS client library, generally compatible with
freeradius and radiusclient-ng.

This commit adds autoconf option for detecting it as well and changes
cdr_radius and cel_radius to use its header file in that case.

ASTERISK-26540
Reported by: Tzafrir Cohen

Change-Id: Icc056d476b7acf481309219e9abdca416866c6ec
2018-04-02 08:12:55 -05:00
Jenkins2 e9313920e5 Merge "pjproject_bundled: Add patch for pj_atomic crashes" into 13 2018-04-02 08:11:09 -05:00
Jenkins2 025fe67f2a Merge "core: Create main/options.c." into 13 2018-04-02 08:10:59 -05:00
Richard Mudgett e1363283d7 res_pjsip: Fix deadlock on reliable transport shutdown.
A deadlock can happen when the PJSIP monitor thread is shutting down a
connection oriented transport (TCP/TLS) used by a subscription at the same
time as another thread tries to send something for that subscription.  The
deadlock is between the pjsip monitor thread attempting to get the dialog
lock and another thread sending something for that dialog when it tries to
get the transport manager lock.

* res_pjsip_pubsub.c: Avoid the deadlock by pushing the subscription
removal to the subscription serializer.

* res_pjsip_registrar.c: Pushed off incoming registration contact removals
to a default serializer as a precaution.  Removing the contacts involves
sorcery access which in this case will involve database access.  Depending
upon the setup, the database may not be on the same machine and could take
awhile.  We don't want to hold up the pjsip monitor thread with
potentially long access times.

ASTERISK-27706

Change-Id: I56b647aea565f24dba33e9e5ebeed4cd3f31f8c4
2018-03-29 17:21:45 -05:00
Kevin Harwell f17d53fd32 Merge "BuildSystem: pjsip_evsub_set_uas_timeout was not used (part 2)." into 13 2018-03-29 15:20:07 -05:00
Kevin Harwell dfaa8a4935 Merge "pjsip_transport_events.c: Fix crash using stale transport pointer." into 13 2018-03-29 15:13:55 -05:00
George Joseph c63a2e28f1 pjproject_bundled: Add patch for pj_atomic crashes
There have been some crashes in the past where something attempts
to use a pj_atomic after it's already been destroyed.  This patch
tries to prevent it by making sure that pj_atomic_destroy sets
its mutex to NULL when it's done.  The pj_mutex functions already check
for a NULL mutex and just return PJ_EINVAL.

Teluu also added some checks to the win32 implementation as well.

Change-Id: Id25f70b79fdedf44ead6e6e1763a4417d3b3f825
2018-03-28 10:32:05 -06:00
Corey Farrell 5908c6753b core: Create main/options.c.
This creates a separate source to 'own' symbols related to options.h and
paths.h.  This significantly reduces the number of exports created by
main/asterisk.o.  This change is required to eventually be able to
link unmodified Asterisk sources to utilities and/or stand-alone tests.

ASTERISK~26245

Change-Id: I5cf184f4757f9363b80c9e678bdc35c477122380
2018-03-28 09:18:06 -04:00
Alexander Traud e8e4fc6202 install_prereq: Add Slackware (somehow).
ASTERISK-27770

Change-Id: Ib87e0483c785542238cfe34c1e884d5a31edfaab
2018-03-23 12:15:54 -06:00
Alexander Traud 96a668e60b install_prereq: Add Gentoo Linux.
ASTERISK-27769

Change-Id: Ieb13293cd67481f3a33f58f6f7c8c3ee1e338e7a
2018-03-23 15:18:56 +01:00
Corey Farrell 6615469a05 main/indications: Use ast_cli_completion_add for all completions.
Change-Id: I371be01f178fb542a9fbe8d97e7ae21aa4d82c36
2018-03-23 01:39:48 -06:00
Jenkins2 2041d56d58 Merge "bridge_softmix: Clear "talking" when a channel is put on hold" into 13 2018-03-22 08:32:22 -05:00
Joshua Colp c399e8528b Merge "Revert "BuildSystem: In NetBSD, the Python Programming Language is python-X.Y."" into 13 2018-03-22 07:38:15 -05:00
Alexander Traud de4e2c1de8 BuildSystem: pjsip_evsub_set_uas_timeout was not used (part 2).
The previous change was not complete.

ASTERISK-27435

Change-Id: I11082c14c0ef9c6af8c995084a6851337ea2a90f
2018-03-22 06:28:34 -06:00
Alexander Traud 79bb956b69 BuildSystem: With external editline, do not require libs for internal editline.
ASTERISK-27761

Change-Id: Ib17a7415297a210cfcdbf149e4df9b6edadbfab6
2018-03-22 11:52:45 +01:00
George Joseph 3a4a441817 Revert "BuildSystem: In NetBSD, the Python Programming Language is python-X.Y."
Something is causing a python2/python3 mismatch on Fedora27.

PYTHON='/usr/bin/python2'
PYTHONDEV_CFLAGS='-I/usr/include/python3.6m '
PYTHONDEV_INCLUDE='-I/usr/include/python3.6m '
PYTHONDEV_LIB='-lpython3.6m '
PYTHONDEV_LIBS='-lpython3.6m '


This reverts commit c0c537c1d3.

Change-Id: I670a82aa7c872fa5facea1e3bc718e2d3124cc28
2018-03-21 18:25:19 -06:00
Jenkins2 b9eb86b56e Merge "chan_sip: Peers with distinct source ports don't match, regardless of transport." into 13 2018-03-21 09:33:26 -05:00
Kevin Harwell 17cd687679 bridge_softmix: Clear "talking" when a channel is put on hold
This patch clears the talking flag from the channel (if already set), and
notifies listeners when that channel is put on hold. Note however, if the
endpoint continues to send audio frames and these are received by the bridge
then that channel will be put back into a "talking" state even though they
are on hold.

ASTERISK-27755 #close

Change-Id: I930e16c4662810f9f02043d69062f88173c5e2ef
2018-03-20 15:28:12 -05:00
Ross Beer 5955cdf5ae pjsip_transport_events.c: Fix crash using stale transport pointer.
Apparently it is possible for the transport to be destroyed without
triggering the transport callback logic.  As a result the transport gets
destroyed and we have a stale pointer in the active_transports container.

* Invoke the transport monitor callback checks when the transport is
destroyed in addition to when it is disconnected and shutdown.

ASTERISK-27688

Change-Id: Ia9b5469fea8f2b3f2d8476fae6b748a4d23e7261
2018-03-20 15:04:17 -05:00
Ivan Poddubny 69de659224 func_channel: Delete dead CHANNEL_TRACE code
The functions behind the flag and the flag itself were removed
from Asterisk 12 as incompatible with the new architecture.

Change-Id: I058493ef7a53ee290fd225bbcbb07bf46b623ccf
2018-03-20 13:28:01 -06:00
Alexander Traud 7580d1e0bb BuildSystem: For consistency, avoid extra libs to be empty.
AST_EXT_LIB_CHECK has several optional parameters. When an optional parameter
is left empty, [] is used to indicate this. However, this is done in the script
./configure only then, when a further parameter is not empty. For example, when
no extra libraries are needed to test the checked library, parameter 5 is not
mentioned. Except parameter 6 and higher are used, then parameter 5 must be
empty.

However, this general rule was broken
* three times for parameter 5 (extra libs) and
* three times for parameter 4 (header)
as found via the Regular Expression \[\]\). In case of parameter 5, all cases
were changed, because that happened for no reason. In case of parameter 4, an
[] improves readability actually. Therefore for parameter 4, the only case which
did not do it was changed. All this aims to create more consistency: Only do
something different if there is a reason to do so.

Change-Id: I037ef170cf1ad94497151a9ea5071a31c656cafe
2018-03-20 17:55:56 +01:00
Jenkins2 7d8445d576 Merge "core: Remove dead symbols from asterisk.exports.in." into 13 2018-03-20 11:31:09 -05:00
Jenkins2 b39c727848 Merge "channel.c: Allow generic plc then channel formats are equal" into 13 2018-03-20 11:03:38 -05:00
Jenkins2 8b1665bc55 Merge "BuildSystem: In NetBSD, the Python Programming Language is python-X.Y." into 13 2018-03-20 10:37:50 -05:00
Joshua Colp 6bda2d7baf Merge "BuildSystem: Instead of $PJPROJECT_LIBS with s, use $PJPROJECT_LIB everywhere." into 13 2018-03-20 10:09:08 -05:00
Joshua Colp 4040b0e909 Merge "main/sounds: Use ast_cli_completion_add." into 13 2018-03-20 09:48:30 -05:00
Jenkins2 fbd2504907 Merge "named_acl: Use ast_cli_completion_add." into 13 2018-03-20 09:37:16 -05:00
Jenkins2 44c85ddc57 Merge "manager: Use ast_cli_completion_add for completion generators." into 13 2018-03-20 09:06:49 -05:00
Jenkins2 7f40e09b3e Merge "main/test: Use ast_cli_completion_add." into 13 2018-03-20 08:50:56 -05:00
Joshua Colp 38d081c9f6 Merge "core: Minor cleanup of ast_el_read_char." into 13 2018-03-20 08:37:16 -05:00
Joshua Colp 3742534956 Merge "aco: Use ast_cli_completion_add for 'config show help'." into 13 2018-03-20 08:18:38 -05:00
Jenkins2 648405779e Merge "main/config: Use ast_cli_completion_add for reload completion." into 13 2018-03-20 07:54:13 -05:00
Jenkins2 1a82f5b645 Merge "main/translate: Use ast_cli_completion_add." into 13 2018-03-20 07:44:14 -05:00
Jenkins2 6a6bda3703 Merge "main/taskprocessor: Use ast_cli_completion_add." into 13 2018-03-20 07:22:41 -05:00
Jenkins2 dc4960e48a Merge "main/bridge: Use ast_cli_completion_add." into 13 2018-03-20 07:04:33 -05:00
Joshua Colp aacea4263a Merge "BuildSystem: Enable Advanced Linux Sound Architecture (ALSA) in NetBSD." into 13 2018-03-20 06:51:34 -05:00
Joshua Colp d3a0d545a3 Merge "BuildSystem: Check for header file of OGG." into 13 2018-03-20 06:23:33 -05:00
Joshua Colp 599f326b41 Merge "BuildSystem: Remove unused dependency on libltdl." into 13 2018-03-20 06:22:52 -05:00
Corey Farrell 6f304697b0 core: Remove dead symbols from asterisk.exports.in.
* dahdi_chan_name
* dahdi_chan_name_len
* dahdi_chan_mode
* __manager_event
* dialed_interface_info

Added comment about __progname and environ being needed for FreeBSD to
prevent accidental removal in the future.

Change-Id: I3ae026bc541cd9cb572be2ffa95fc359547642b5
2018-03-19 16:00:48 -06:00
Corey Farrell 8df4811cfa named_acl: Use ast_cli_completion_add.
Change-Id: I317a82de976bbdbfe4352c243e32a7bb8f66c377
2018-03-19 15:48:34 -06:00
Corey Farrell a89323236f main/sounds: Use ast_cli_completion_add.
Change-Id: I140e1137906bbfcdb61c0c6304159be459ad873e
2018-03-19 15:45:08 -06:00
Corey Farrell dc520b6d8f manager: Use ast_cli_completion_add for completion generators.
Change-Id: I658141c6ec490a3e866b02d2afea757928ceaabf
2018-03-19 14:26:58 -06:00
Corey Farrell 534fda0a59 main/test: Use ast_cli_completion_add.
Change-Id: I5133ff2ba4e030f9733fb3d050c863d72a22ae6b
2018-03-19 14:21:21 -06:00
George Joseph a8daaa171e Merge "BuildSystem: Enable dladdr on non-Linux platforms like FreeBSD." into 13 2018-03-19 11:13:21 -05:00
George Joseph 373e7e3fb0 channel.c: Allow generic plc then channel formats are equal
If the two formats on a channel are equal, we don't transcode and since
the generic plc needs slin to work, it doesn't get invoked.

* A new configuration option "genericplc_on_equal_codecs" was added
  to the "plc" section of codecs.conf to allow generic packet loss
  concealment even if no transcoding was originally needed.
  Transcoding via SLIN is forced in this case.

ASTERISK-27743

Change-Id: I0577026a179dea34232e63123254b4e0508378f4
2018-03-19 10:09:53 -06:00
Jenkins2 94b72ace2f Merge "core: Backport compatible MALLOC_DEBUG changes." into 13 2018-03-19 10:33:42 -05:00
Jenkins2 09e61213b7 Merge "BuildSystem: When no download utility is available, display the explanation." into 13 2018-03-19 10:19:13 -05:00
Jenkins2 36fd7c26fb Merge "BuildSystem: Avoid an extra case for OpenBSD." into 13 2018-03-19 09:48:15 -05:00
Jenkins2 08e0181fc3 Merge "main/cdr: Use ast_cli_completion_add for CDR channel completion." into 13 2018-03-19 09:05:33 -05:00
Jenkins2 9e21d04755 Merge "app_dial: Enable early-media video" into 13 2018-03-19 09:04:28 -05:00
George Joseph 6faa428a38 Merge "app_voicemail: Fix json blob errors" into 13 2018-03-19 09:02:51 -05:00
Corey Farrell bd926539b0 main/translate: Use ast_cli_completion_add.
Change-Id: I0e2402660e54d91f74ab0804c62a5b1925577413
2018-03-18 21:00:16 -06:00
Corey Farrell d202b56a74 main/taskprocessor: Use ast_cli_completion_add.
Change-Id: Ie5f812a988ed811fd11967151932de62bc131b48
2018-03-18 20:36:10 -06:00
Corey Farrell 18cbfcf4f0 aco: Use ast_cli_completion_add for 'config show help'.
In addition this removes:
* RAII_VAR usage
* Duplicate check of pos
* Unneeded arguments.

Change-Id: I2da8eac2670d1d8d6474c04037129804f55ebf39
2018-03-18 18:28:58 -06:00
Corey Farrell d57b58f5e9 main/config: Use ast_cli_completion_add for reload completion.
Change-Id: Ia3fa4c03f2285a1ec8814bbe7f4624ead9111ad1
2018-03-18 18:09:47 -06:00
Corey Farrell 34e16cbf3a main/bridge: Use ast_cli_completion_add.
Change-Id: I3775a696d6a57139fdf09651ecb786bcf1774509
2018-03-17 18:44:52 -06:00
Corey Farrell 98a3baca70 core: Minor cleanup of ast_el_read_char.
* Define CHAR_T_LIBEDIT and CHAR_TO_LIBEDIT based on
  HAVE_LIBEDIT_IS_UNICODE.  This avoids needing to repeatedly use
  conditional blocks, eliminates having multiple function prototypes.
* Remove parenthesis from return values.
* Add missing code block brackets {}.
* Reduce use of 'else' conditional statements where possible.

Change-Id: I4315328ebea2f62641faf6881de2ac20a9f9d08e
2018-03-17 16:47:54 -06:00
Alexander Traud 7b40605d8e BuildSystem: Check for header file of OGG.
Asterisk uses various symbols of the shared library libogg within the module
format_ogg_vorbis. However, the source code of that module did not include the
header file of libogg explicitly but implicitly. Because that header was not
included before Asterisk 14, the script ./configure was told not to check for
it.

Anyway, even Asterisk 13 LTS uses symbols of libogg. Therefore, that header
should be included explicitly. Therefore, ./configure should check for that
header.

Change-Id: I98c50d56311b68880d1084fcc62c35ab2f8692db
2018-03-17 16:54:09 +01:00
Alexander Traud 06ba605988 BuildSystem: When no download utility is available, display the explanation.
./configure --with-pjproject-bundled
did not display an explanation, when no download utility like wget, curl, or
fetch was installed beforehand, although an explanation existed in code. This
happened because the code expected the variable DOWNLOAD_TO_STDOUT to be empty.
However, the script ./configure set that variable always.

Change-Id: I64c99b76a03525c69471e5055bf124b36a51bbd4
2018-03-17 07:16:48 -06:00
Alexander Traud 0f634c1446 BuildSystem: Remove unused dependency on libltdl.
Asterisk does not need the development package of libltdl, because it does not
use any symbol of -lltdl directly. Instead, it uses the runtime package via the
shared library -lodbc. On the supported platforms, that shared library declares
its dependency on -lltdl correctly, otherwise AST_EXT_LIB_CHECK would have
failed.

ASTERISK-27745

Change-Id: Icd315809b8e7978203431f3afb66240dd3a040ba
2018-03-17 04:02:17 -06:00
Joshua Colp b50331626e Merge "cli: Enable ast_cli_completion_add on public completion generators." into 13 2018-03-16 18:59:52 -05:00
Jenkins2 1f2ff45626 Merge "main/ccss: Use ast_cli_completion_add for core id." into 13 2018-03-16 18:59:16 -05:00
Alexander Traud c0c537c1d3 BuildSystem: In NetBSD, the Python Programming Language is python-X.Y.
ASTERISK-27717

Change-Id: If90ddf9c396c32e7402a894f42dce215c30049d1
2018-03-16 10:42:15 -06:00
Jenkins2 3b49fb3446 Merge "astobj2_container: Use ast_cli_completion_add for container names." into 13 2018-03-16 11:05:04 -05:00
George Joseph 3bc40401a7 Merge "main/channel: Use ast_cli_completion_add for channeltypes." into 13 2018-03-16 10:35:01 -05:00
Alexander Traud afcd1dd8e5 BuildSystem: Avoid an extra case for OpenBSD.
Nine years ago with Mantis 13639 (now ASTERISK-12841) an extra case for OpenBSD
was introduced: Vorbis required Ogg to be specified manually, because the shared
library libvorbis.so did not specify its required dependency on -logg itself.

Today with OpenBSD 6.2, all libvorbis*.so declare their dependencies correctly.
Therefore, an extra case is not required anymore.

Change-Id: Ifd04e0994ce9f1e4ad29c3948a0398b91d1e97bc
2018-03-16 09:11:59 -06:00
Alexander Traud 5b80e97fff BuildSystem: Enable Advanced Linux Sound Architecture (ALSA) in NetBSD.
In the script ./configure, AST_EXT_LIB_CHECK checks for external libraries. Some
libraries do not specify all their dependencies and require additional shared
libraries. In AST_EXT_LIB_CHECK, this is the fifth parameter. However, if a
library is specified there, it must exist on the platform, because ./configure
tries to compile/link/execute a small app using those statements. For example,
the library libdl.so is Linux specific and does not exist on BSD-like platforms.

Furthermore, no supported platform/version was found, which still (ever?)
requires those additional libraries. Therefore, they were simply removed.

Finally, this change adds the error code ESTRPIPE to the channel driver
chan_alsa for those platforms which lack it, again for example NetBSD.

ASTERISK-27720

Change-Id: I3b21f2135f6cbfac7590ccdc2df753257f426e0b
2018-03-16 16:09:31 +01:00
George Joseph d5af24bb14 app_voicemail: Fix json blob errors
When app_voicemail calls ast_test_suite_notify with the results of
a user keypress, it formats the keypress as '%c'.  If the user hung up
or some other error occurrs, the result of the keypress is a non
printable character.  This ultimately causes json_vpack_ex to think
it's being passed a non utf-8 string and return an error.

* Keypress results passed to ast_test_suite_notify are now checked with
  isprint() and a '?' is substituted if the check fails.

Change-Id: I78ee188916bbac840f3d03f40201b692347ea865
2018-03-16 08:02:20 -06:00
Florian Floimair 69463c612d app_dial: Enable early-media video
Certain applications (e.g. door-phone) require that also video is transmitted
before a call is accepted.

Change-Id: I9842e1dc2f6e1c2c49dc33fe615255007d2f821e
2018-03-16 12:35:51 +01:00
Corey Farrell a7ebb9409d main/cdr: Use ast_cli_completion_add for CDR channel completion.
Change-Id: Ie81830647a23aad61c1162583b6d50adbe6e7822
2018-03-15 11:55:58 -06:00
Corey Farrell 5ac64a4464 main/ccss: Use ast_cli_completion_add for core id.
Change-Id: I44b25d6d24c7d9bc1bb38a50774b38883162f98f
2018-03-15 07:57:27 -06:00
Alexander Traud e04be32fc5 install_prereq: Add Arch Linux.
ASTERISK-27738

Change-Id: I7ca620e3c4dfb4b064a19382c4915aeb42a2a09f
2018-03-15 14:27:07 +01:00
Corey Farrell eb699f3631 core: Backport compatible MALLOC_DEBUG changes.
* Add support for MALLOC_DEBUG and DEBUG_CHAOS to be used together.
* Add utils/astmm.c to .gitignore.
* Fix MALLOC_DEBUG variant of __ast_vasprintf.  This function called
  va_end(ap) upon allocation failure.  This is incorrect since ap is
  passed as an argument.

Change-Id: I9f27ced4ce3cbe4b39547a67f994fdff491978c0
2018-03-15 06:57:38 -06:00
Corey Farrell 7e0c56f800 astobj2_container: Use ast_cli_completion_add for container names.
Change-Id: I4f0fc09e820eb8d8da2354a177dbcf503c56ddd1
2018-03-15 06:31:32 -06:00
Corey Farrell 7e041d6233 main/channel: Use ast_cli_completion_add for channeltypes.
Change-Id: Ia845fae6a84801cc7d9996767b99efb2753cbb48
2018-03-15 06:25:44 -06:00
Joshua Colp c78f4b8e61 Merge "res_pjsip_rfc3326.c: Account for more than one 'Reason' header" into 13 2018-03-15 06:47:09 -05:00
Jenkins2 adb0bebe66 Merge "install_prereq: Add SUSE." into 13 2018-03-15 06:39:03 -05:00
Corey Farrell 6539b89254 cli: Enable ast_cli_completion_add on public completion generators.
* ast_cli_complete
* ast_complete_channels
* ast_complete_applications

These generators will now use ast_cli_completion_add if state == -1.

Change-Id: I7ff311f0873099be0e43a3dc5415c0cd06d15756
2018-03-15 05:27:41 -06:00
Jenkins2 a243fed64f Merge "core: Remove incorrect usage of attribute_malloc." into 13 2018-03-14 20:53:38 -05:00
Ross Beer 96eaabd920 res_pjsip_rfc3326.c: Account for more than one 'Reason' header
ASTERISK-27741

Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf
2018-03-14 18:36:41 -05:00
Alexander Traud b237ef7f27 install_prereq: Add SUSE.
ASTERISK-27736

Change-Id: I4cafc8973349d50a7cb7919ddf0bb1aaef4bfc3e
2018-03-14 15:01:32 +01:00
Jenkins2 029c9383aa Merge "core: Remove non-critical cleanup from startup aborts." into 13 2018-03-14 06:40:38 -05:00
Joshua Colp ed7d24d0c1 Merge "BuildSystem: Enable IMAP storage on openSUSE and Arch Linux." into 13 2018-03-14 06:34:33 -05:00
Joshua Colp acf3bdc3d5 Merge "res_srtp: Add support for libsrtp2.x on openSUSE." into 13 2018-03-14 06:34:17 -05:00
Joshua Colp d13ef8c974 Merge "BuildSystem: Add NetBSD." into 13 2018-03-14 06:07:47 -05:00
Jenkins2 f518380dba Merge "install_prereq: Add NetBSD." into 13 2018-03-13 18:34:43 -05:00
Jenkins2 fb4c995ad5 Merge "BuildSystem: Re-check for another UUID library only when previous check failed." into 13 2018-03-13 17:54:12 -05:00
Jenkins2 c42508aeb6 Merge "BuildSystem: Enable PortAudio in NetBSD." into 13 2018-03-13 17:47:34 -05:00
Corey Farrell dc738b145f core: Remove incorrect usage of attribute_malloc.
GCC documentation states that when __attribute__((malloc)) is used it
should not return storage which contains any valid pointers.  It
specifically mentions that realloc functions should not have the malloc
attribute, but this also means that complex initializers which could
contain initialized pointers should not use this attribute.

Change-Id: If507f33ffb3ca3b83b702196eb0e8215d27fc7d2
2018-03-13 17:37:12 -04:00
Alexander Traud 7533d25e8d BuildSystem: Enable IMAP storage on openSUSE and Arch Linux.
ASTERISK-27734

Change-Id: I8d6e6a1c08c031649764f5277fbbb85e57c3a9d4
2018-03-13 16:26:18 -05:00
Jenkins2 0a402dc851 Merge "res_pjproject.c: Upgrade bundled PJPROJECT to 2.7.2" into 13 2018-03-13 15:20:46 -05:00
Joshua Colp e3c76be75b Merge "BuildSystem: For consistency, avoid double-checking via if clauses." into 13 2018-03-13 10:43:16 -05:00
George Joseph aae7fd6508 Merge "BuildSystem regression: Fix errors reported by clean targets." into 13 2018-03-12 09:46:01 -05:00
Jenkins2 9b630985a1 Merge "BuildSystem: Enable Lua in NetBSD." into 13 2018-03-12 09:02:45 -05:00
Joshua Colp f05ac26d4a Merge "Replace direct checks of option_debug with DEBUG_ATLEAST macro." into 13 2018-03-12 08:35:51 -05:00
Jenkins2 af79e3091f Merge "BuildSystem: Depend not implicitly but explicitly on external libraries." into 13 2018-03-12 07:07:54 -05:00
Alexander Traud 09c43fdc1a res_srtp: Add support for libsrtp2.x on openSUSE.
Since ASTERISK-26976, libSRTP 2.x can be used for sRTP. However, that change
added a private header which is not available on openSUSE for example. To
remain compatibility with very old libSRTP versions, the affected/missing
symbols AES_128_ICM and HMAC_SHA1 are defined manually.

ASTERISK-27733

Change-Id: I25c5cb8fa966043d1506ebef449e5a724412b4b6
2018-03-12 10:22:43 +01:00
Corey Farrell c09a10bb1b core: Remove non-critical cleanup from startup aborts.
When built-in components of Asterisk fail to start they cause the
Asterisk startup to abort.  In these cases only the most critical
cleanup should be performed - closing databases and terminating
proceses.  These cleanups are registered using ast_register_atexit, all
other cleanups should not be run during startup abort.

The main reason for this change is that these cleanup procedures are
untestable from the partially initialized states, if they fail it could
prevent us from ever running the critical cleanup with ast_run_atexits.

Change-Id: Iecc2df98008b21509925ff16740bd5fa29527db3
2018-03-10 04:33:33 -05:00
Alexander Traud bd6e0b1a72 BuildSystem: Add NetBSD.
Headers, libraries, and rpath.

ASTERISK-27728
ASTERISK-11015
Reported by: Curt Sampson

Change-Id: I50aa5fcd095937df32a2e33307caac7e79a8b5b7
2018-03-09 10:10:16 -06:00
Alexander Traud ba88af8a25 BuildSystem: For consistency, avoid double-checking via if clauses.
In the script ./configure, AST_EXT_LIB_CHECK and AST_PKG_CONFIG_CHECK first test
whether parameter 1 was already found. Consequently, an if-test on PBX_ just a
line below is redundant, if exactly the same parameter 1 is used again.

No performance gain is expected by this change. However, because this strategy
is used all over in ./configure except for two places, this change aims to
create more consistency: Only do something different if there is a reason to do
so.

Change-Id: I4a6f48127b7af3a48168c917e888be1f70625027
2018-03-09 10:23:53 +01:00
Jenkins2 99702af57a Merge "res_http_post: Enable GMime in NetBSD." into 13 2018-03-09 02:53:50 -06:00
Alexander Traud c227462370 BuildSystem: Enable dladdr on non-Linux platforms like FreeBSD.
ASTERISK-27641

Change-Id: I587e8ba0123c70fc10cfd8b0ac3299551f61d84b
2018-03-09 02:45:47 -06:00
Jenkins2 0d7b7158ba Merge "chan_sip: Fix improper RTP framing on outgoing calls" into 13 2018-03-08 17:12:47 -06:00
Kevin Harwell 4135226f0b Merge "voicemail: Fixed wrong voicemail message count" into 13 2018-03-08 15:27:04 -06:00
Richard Mudgett 9ae427c7fd res_pjproject.c: Upgrade bundled PJPROJECT to 2.7.2
Update patches included in bundled PJPROJECT for the new version.

ASTERISK-27730

Change-Id: Id3c8c8ad82126846bcd9768bc3d0a18d89be8944
2018-03-08 12:19:17 -06:00
Alexander Traud 57e8754a3a install_prereq: Add NetBSD.
ASTERISK-27729

Change-Id: I7a706d51375d54cf5e36d32397bfe09a48670804
2018-03-08 19:05:22 +01:00
Jenkins2 19682f84bc Merge "utils: In Solaris, avoid a warning about an unused variable." into 13 2018-03-08 11:13:31 -06:00
Alexander Traud 0d70a9a006 BuildSystem: Re-check for another UUID library only when previous check failed.
As a side-effect, this avoids the ambiguous output:
 checking for uuid_generate_random... no
which was printed always previously.

ASTERISK-25586
Reported by: John Nemeth

Change-Id: I6d541dfcf453932a9856c5e251aa22e0e6c233c9
2018-03-08 09:07:08 -06:00
Jenkins2 51b926aaeb Merge "res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints" into 13 2018-03-08 07:29:42 -06:00
Alexander Traud 7b6b6b0a7e BuildSystem: Instead of $PJPROJECT_LIBS with s, use $PJPROJECT_LIB everywhere.
In the script ./configure,
xyz_LIB  is set by AST_PKG_CONFIG_CHECK and
xyz_LIBS is set by PKG_CHECK_MODULES within
AST_PKG_CONFIG_CHECK. Both are the same. In Asterisk normally the former and
only three times the latter was used. Let us use xyz_LIB without s, for
consistency with AST_EXT_LIB_CHECK. That eases understanding because now readers
do not have to know that xyz_LIB equals xyz_LIBS.

Change-Id: I7359860a5d730cdc784c2c48e501a082196434d3
2018-03-08 12:41:53 +01:00
Alexander Traud 54874eb44d BuildSystem: Enable PortAudio in NetBSD.
In NetBSD, PortAudio 1 is still the default version. PortAudio 2 can be
installed side by side but gets placed in a 'portaudio2' subdirectory. To
find PortAudio 2 even in a subdirectory, the tool pkg-config is queried via
AST_PKG_CONFIG_CHECK. For those platforms, which do not list PowerAudio 2
via pkg-config, the previous check remains and is executed thereafter.

ASTERISK-27721

Change-Id: I4175500126909ad1b181fff8e11bb4a3a6ae4fa9
2018-03-08 04:01:25 -06:00
Corey Farrell b81eadcefc Replace direct checks of option_debug with DEBUG_ATLEAST macro.
Checking option_debug directly is incorrect as it ignores file/module
specific debug settings.  This system-wide change replaces nearly all
direct checks for option_debug with the DEBUG_ATLEAST macro.

Change-Id: Ic342d4799a945dbc40ac085ac142681094a4ebf0
2018-03-07 17:02:49 -05:00
Jenkins2 7f864dbc36 Merge "apps/app_amd.c: Fixed total time and silence calculations" into 13 2018-03-07 13:55:28 -06:00
Richard Mudgett 342aec5980 BuildSystem regression: Fix errors reported by clean targets.
Doing a 'make clean', 'make distclean', or 'make dist-clean' gets errors
about an invalid shell option: "/bin/sh: 0: Illegal option -".

The clean targets do not include the makeopts file which defines GREP and
LDCONFIG because the file may not exist and the distclean/dist-clean
targets will delete it anyway.

ASTERISK-27715

Change-Id: I33d40acdb03862bc89aeb6fb1ff497894a8ea7f5
2018-03-07 13:19:07 -06:00
Sungtae Kim 0597e72e1d voicemail: Fixed wrong voicemail message count
Fixed wrong voicemail mailbox reference for Action: VoicemailUsersList.

ASTERISK-27703

Change-Id: I99bfec14bd4ae475b0fa1fac5a7992f3e2e8d64a
2018-03-07 11:37:17 -06:00
Jean Aunis a35a654a52 chan_sip: Fix improper RTP framing on outgoing calls
The "ptime" SDP parameter received in a SIP response was not honoured.
Moreover, in the abscence of this "ptime" parameter, locally configured
framing was lost during response processing.

This patch systematically stores the framing information in the
ast_rtp_codecs structure, taking it from the response or from the
configuration as appropriate.

ASTERISK-27674

Change-Id: I828a6a98d27a45a8afd07236a2bd0aa3cbd3fb2c
2018-03-07 11:22:17 -06:00
Ross Beer ecff05d51c res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints
ASTERISK-27554

Change-Id: If61c7faab7d2fa1031c056ed6268fe928e2391cf
2018-03-07 12:08:29 -04:00
Alexander Traud 725fd32428 utils: In Solaris, avoid a warning about an unused variable.
When HAVE_GETHOSTBYNAME_R_5 was set by the script ./configure, GCC 7.3.0 found
an unused variable. Actually, the variable was used (set to a dummy value) but
the compiler optimization might have removed that. Instead, this change ensures
that the variable 'res' is only used when it is really required.

Change-Id: Ic3ea23ccf84ac4bc2d501b514985b989030abab5
2018-03-07 09:33:46 -06:00
Jenkins2 359a0cc5a2 Merge "BuildSystem: Cast any intptr_t explicitly to its proposed type." into 13 2018-03-06 11:23:50 -06:00
Alexander Traud 93df498f4e BuildSystem: Enable Lua in NetBSD.
luaL_openlib got removed with Lua 5.2.
luaL_newstate is available in all versions.

ASTERISK-27718

Change-Id: I9c8c8880315ee36ab740d7c40153306c0bfd6f71
2018-03-06 11:01:59 -06:00
Jenkins2 4d0a2b9976 Merge "BuildSystem: Install init scripts on openSUSE Tumbleweed." into 13 2018-03-06 10:44:58 -06:00
Jenkins2 8cbe31d0cf Merge "BuildSystem: AC_PATH_PROG sets to colon character when not found." into 13 2018-03-06 10:43:25 -06:00
Jenkins2 5fedd85bd1 Merge "BuildSystem: Enable autotools in NetBSD." into 13 2018-03-06 10:04:52 -06:00
Alexander Traud 44dbb8251d BuildSystem: Depend not implicitly but explicitly on external libraries.
ASTERISK-27722

Change-Id: Ie7b8c30d86cb00a54d6ac4e09e6f28f42d2bd52c
2018-03-06 07:34:04 -06:00
Jenkins2 451fec3044 Merge "chan_unistim: NetBSD has an incompatible struct in_pktinfo." into 13 2018-03-05 12:57:52 -06:00
Jenkins2 83c2d6a89f Merge "BuildSystem: Avoid == for comparison in ./configure." into 13 2018-03-05 12:36:15 -06:00
Jenkins2 91193807c8 Merge "BuildSystem: Detect whether uselocale(.) is available." into 13 2018-03-05 11:58:51 -06:00
Jenkins2 894a55c850 Merge "BuildSystem: Avoid re-defining of pthread_* on NetBSD." into 13 2018-03-05 11:28:38 -06:00
Jenkins2 848db5abd6 Merge "chan_sip: Emit a second ringing event to ensure channel is found." into 13 2018-03-05 08:39:08 -06:00
Alexander Traud 2d63c185f0 res_http_post: Enable GMime in NetBSD.
ASTERISK-27719

Change-Id: I230c5f9f316b2e9465c093c13580f72ebbaf67a7
2018-03-05 08:15:44 -06:00
Jenkins2 2961dd6c6d Merge "core: Fix handling of maximum length lines in config files." into 13 2018-03-05 08:10:02 -06:00
Jenkins2 9f56ad1673 Merge "pjproject: Add cache_pools debugging option." into 13 2018-03-05 07:54:14 -06:00
Alexander Traud 0af1446d6e BuildSystem: Enable autotools in NetBSD.
ASTERISK-27716

Change-Id: I52525e35e1620341272219911d054a1e3d3ec01e
2018-03-05 04:16:32 -06:00
Alexander Traud 95ecbaa6b8 BuildSystem: AC_PATH_PROG sets to colon character when not found.
ASTERISK-27715
Reported by: Corey Farrell

Change-Id: I0d6d9572d1352dc7ad30c9917173f1e980d8c938
2018-03-05 03:43:41 -06:00
Alexander Traud 7b5e0960ef chan_unistim: NetBSD has an incompatible struct in_pktinfo.
ASTERISK-27714
Reported by: John Nemeth

Change-Id: I1b84a89315a5f61222123d21bf35c59224da8990
2018-03-03 09:06:45 -06:00
Alexander Traud 6b899b2849 BuildSystem: Cast any intptr_t explicitly to its proposed type.
ASTERISK-27713

Change-Id: I90c769e3c7f8c26de8a3af11335862cec15a1b22
2018-03-03 08:30:47 -06:00
Alexander Traud 98e8e849da BuildSystem: Detect whether uselocale(.) is available.
ASTERISK-27712
Reported by: Joerg Sonnenberger, D'Arcy Cain

Change-Id: Idf1c9d43617a3e13028b95b313415903d80ef807
2018-03-03 06:57:42 -06:00
Alexander Traud 8348862103 BuildSystem: Avoid re-defining of pthread_* on NetBSD.
ASTERISK-27711

Change-Id: Idc9194035b2958b99f6b01eb5b438d45a074565b
2018-03-03 03:55:48 -06:00
Alexander Traud 47d45ba025 BuildSystem: Install init scripts on openSUSE Tumbleweed.
ASTERISK-27710

Change-Id: I4c777e41b31d4415bbe21cb435ad47b43ebb5467
2018-03-02 07:05:47 -06:00
Alexander Traud 4035582b64 BuildSystem: Avoid == for comparison in ./configure.
ASTERISK-27709
Reported by: John Nemeth

Change-Id: I11b1ae8fd404c04066f1458f5d71f9536359d58d
2018-03-02 05:13:25 -06:00
Jenkins2 0a452a5f1d Merge "gitreview: Reorder and add padding." into 13 2018-03-01 09:23:58 -06:00
Jenkins2 d175dc794c Merge "res_pjsip_refer.c: Fix attended transfer race condition crash." into 13 2018-03-01 08:38:51 -06:00
Richard Mudgett 104468ad3a pjproject: Add cache_pools debugging option.
The pool cache gets in the way of finding use after free errors of memory
pool contents.  Tools like valgrind and MALLOC_DEBUG don't know when a
pool is released because it gets put into the cache instead of being
freed.

* Added the "cache_pools" option to pjproject.conf.  Disabling the option
helps track down pool content mismanagement when using valgrind or
MALLOC_DEBUG.  The cache gets in the way of determining if the pool
contents are used after free and who freed it.

To disable the pool caching simply disable the cache_pools option in
pjproject.conf and restart Asterisk.

Sample pjproject.conf setting:
[startup]
cache_pools=no

* Made current users of the caching pool factory initialization and
destruction calls call common routines to create and destroy cached pools.

ASTERISK-27704

Change-Id: I64d5befbaeed2532f93aa027a51eb52347d2b828
2018-02-28 11:38:40 -06:00
Corey Farrell 41894965f2 gitreview: Reorder and add padding.
Change-Id: I459dc320a8c9452a01eed6f403d786741587c890
2018-02-25 17:59:08 -05:00
Michael Cargile bb973aeceb apps/app_amd.c: Fixed total time and silence calculations
Between Asterisk 11 and Asterisk 13 there was a significant increase
in the number of AST_FRAME_NULL frames being processed by app_amd.c's
main loop. Each AST_FRAME_NULL frame was being counted as 100ms
towards the total time and silence. This may have been accurate
when app_amd.c was orginally added, but it is not in Asterisk 13.
As such the total analysis time and silence calculations were way
off effectively breaking app_amd.c

* Additional debug messages were added
* AST_FRAME_NULL are now ignored

ASTERISK-27610

Change-Id: I18aca01af98f87c1e168e6ae0d85c136d1df5ea9
2018-02-25 12:56:44 -05:00
George Joseph 68df9e609e ast_coredumper: Minor fixes
* Fix --tarball-config so the option doesn't cause an error.

* Allow for missing /etc/os-release.

* Add a sleep between tarballing the coredump and removing the
  output directory to allow the filesystem to settle.

Change-Id: I73e03b13087978bcc7f6bc9f45753990f82d9d77
2018-02-23 13:58:54 -07:00
Jenkins2 d0e270c973 Merge "modules: Set deprecated modules to not build by default" into 13 2018-02-23 12:48:35 -06:00
Corey Farrell caad0c09cd core: Fix handling of maximum length lines in config files.
When a line is the maximum length "\n" is found at sizeof(buf) - 2 since
the last character is actually the null terminator.  In addition if a
line was exactly 8190 plus a multiple of 8192 characters long the config
parser would skip the following line.

Additionally fix comment in voicemail.conf sample config.  It previously
stated that emailbody can only contain up to 512 characters which is
always wrong.  The buffer is normally 8192 characters unless LOW_MEMORY
is enabled then it is 512 characters.  The updated comment states that
the line can be up to 8190 or 510 characters since the line feed and
NULL terminator each use a character.

ASTERISK-26688 #close

Change-Id: I80864a0d40d2e2d8cd79d72af52a8f0a3a99c015
2018-02-23 11:14:59 -06:00
Jenkins2 499f0bfd72 Merge "install_prereq: Update FreeBSD libraries." into 13 2018-02-23 09:20:27 -06:00
Jenkins2 5b5391d7d9 Merge "res_rtp_asterisk: Fix ICE candidate nomination" into 13 2018-02-23 08:13:09 -06:00
Richard Mudgett 3e5864bcc8 res_pjsip_refer.c: Fix attended transfer race condition crash.
The transferrer's session channel was destroyed by the transferrer's
serializer thread in a race condition with the transfer target's
serializer thread during an attended transfer.  The transfer target's
serializer was attempting to clean up a deferred end status on behalf of
the transferrer's channel when it should have passed the action to the
transferrer's serializer.  When the transfer target's serializer lost the
race then both threads wind up trying to end the transferrer's session.

* Push the ast_sip_session_end_if_deferred() call onto the transferrer's
serializer to avoid a race condition that results in a crash.  The
session_end() function that could be called by
ast_sip_session_end_if_deferred() really must be executed by the
transferrer's serializer to avoid this kind of crash.

ASTERISK-27568

Change-Id: Iacda724e7cb24d7520e49b2fd7e504aa398d7238
2018-02-22 17:14:57 -06:00
Kevin Harwell ffb15b2bc7 AMI: Bumping AMI non-breaking number for Asterisk 13.20.0 release
A few changes were made to AMI:

 * Fixed "(null):" header in AMI AsyncAGIEnd event
 * A mute header was added to the ConfbridgeJoin AMI event
 * ConfbridgeList action's ConfbridgeList events now output all
   the standard channel snapshot headers

Change-Id: I94a82a44b02c91becae08d254e9a56abba5697cf
2018-02-22 14:04:02 -06:00
Alexander Traud 05fc37bbc2 install_prereq: Update FreeBSD libraries.
deleted
 autoconf gcc libsamplerate sqlite

changed
 binutils to libbfd
 freetds-devel to freetds
 gmime2 to gmime26
 mysql55-client to mysql57-client

added
 alsa-lib bison bzip2 cclient corosync doxygen libedit flex graphviz
 libhoard libical libilbc libltdl lua neon newt net-snmp
 openldap-client openssl patch pkgconf portaudio postgresql10-client
 python radcli speexdsp subversion uriparser xmlstarlet libzip

ASTERISK-27686

Change-Id: Ibe88c9b26e59c30d26cdb313a3ef01c9f37ac80d
2018-02-22 13:56:18 -05:00
Sean Bright 220accb461 modules: Set deprecated modules to not build by default
Change-Id: I09090f70224866aead6b3207fa784cfefea7d539
2018-02-22 11:48:00 -05:00
Kevin Harwell 55dc071950 Merge "AST-2018-003: Crash with an invalid SDP fmtp attribute" into 13 2018-02-21 12:12:30 -06:00
Kevin Harwell 1266754d3c Merge "AST-2018-002: Crash with an invalid SDP media format description" into 13 2018-02-21 12:08:48 -06:00
Joshua Colp b1a0e601c9 Merge "AST-2018-004: Restrict the number of Accept headers in a SUBSCRIBE." into 13 2018-02-21 10:37:20 -06:00
Kevin Harwell 05af43b240 AST-2018-003: Crash with an invalid SDP fmtp attribute
pjproject's fmtp retrieval function failed to catch invalid fmtp attributes.
Because of this Asterisk would crash if given an SDP with an invalid fmtp
attribute.

When retrieving the format this patch now makes sure the fmtp attribute is
available. If not available it now returns an error status.

ASTERISK-27583 #close

Change-Id: I5cebe000ce2d846cae3af33b6d72c416e51caf2f
2018-02-21 09:35:32 -06:00
Kevin Harwell c5dc2fb4ab AST-2018-002: Crash with an invalid SDP media format description
pjproject's media format parsing algorithm failed to catch invalid values.
Because of this Asterisk would crash if given an SDP with a invalid media
format description.

When parsing the media format description this patch now properly parses the
value and returns an error status if it can't successfully parse/convert the
value.

ASTERISK-27582 #close

Change-Id: I883b3a4ef85b6972397f7b56bf46c5779c55fdd6
2018-02-21 09:33:54 -06:00
George Joseph 5947fd148b AST-2018-005: res_pjsip_transport_management: Move to core
Since res_pjsip_transport_management provides several attack
mitigation features, its functionality moved to res_pjsip and
this module has been removed.  This way the features will always
be available if res_pjsip is loaded.

ASTERISK-27618
Reported By: Sandro Gauci

Change-Id: I21a2d33d9dda001452ea040d350d7a075f9acf0d
2018-02-21 07:40:10 -07:00
George Joseph a780386dbb AST-2018-005: Fix tdata leaks when calling pjsip_endpt_send_response(2)
pjsip_distributor:
   authenticate() creates a tdata and uses it to send a challenge or
   failure response.  When pjsip_endpt_send_response2() succeeds, it
   automatically decrements the tdata ref count but when it fails, it
   doesn't.  Since we weren't checking for a return status, we weren't
   decrementing the count ourselves on error and were therefore leaking
   tdatas.

res_pjsip_session:
   session_reinvite_on_rx_request wasn't decrementing the ref count
   if an error happened while sending a 491 response.
   pre_session_setup wasn't decrementing the ref count if
   while sending an error after a pjsip_inv_verify_request failure.

res_pjsip:
   ast_sip_send_response wasn't decrementing the ref count on error.

ASTERISK-27618
Reported By: Sandro Gauci

Change-Id: Iab33a6c7b6fba96148ed465b690ba8534ac961bf
2018-02-21 07:39:38 -07:00
Joshua Colp de5df002a0 AST-2018-004: Restrict the number of Accept headers in a SUBSCRIBE.
When receiving a SUBSCRIBE request the Accept headers from it are
stored locally. This operation has a fixed limit of 32 Accept headers
but this limit was not enforced. As a result it was possible for
memory outside of the allocated space to get written to resulting
in a crash.

This change enforces the limit so only 32 Accept headers are
processed.

ASTERISK-27640
Reported By: Sandro Gauci

Change-Id: I99a814b10b554b13a6021ccf41111e5bc95e7301
2018-02-21 14:29:26 +00:00
Jenkins2 4f166b9017 Merge "doc/lang/language-criteria.txt: Link to wiki." into 13 2018-02-20 14:45:55 -06:00
Jenkins2 450afe655c Merge "res_http_websocket: Don't leak memory on read failure" into 13 2018-02-20 13:48:36 -06:00
Joshua Colp 4da0e19b89 chan_sip: Emit a second ringing event to ensure channel is found.
When constructing a dialog-info+xml NOTIFY message a ringing channel
is found if the state is ringing and further information is placed into
the message. Due to the migration to the Stasis message bus this did
not always work as expected.

This change raises a second ringing event in such a way to guarantee
that the event is received by chan_sip and another lookup is done to
find the ringing channel.

ASTERISK-24488

Change-Id: I547a458fc59721c918cb48be060cbfc3c88bcf9c
2018-02-20 12:43:25 -04:00
Jenkins2 f49e5d3998 Merge "core: Rename sounds_index.c to sounds.c." into 13 2018-02-20 06:36:26 -06:00
Jenkins2 c45d266edd Merge "BuildSystem: Allow newer autotools on OpenBSD." into 13 2018-02-20 06:26:49 -06:00
Jenkins2 ee9bee7e05 Merge "config: Fix locking for extconfig reload." into 13 2018-02-20 05:57:52 -06:00
Corey Farrell cacb72f5ae doc/lang/language-criteria.txt: Link to wiki.
This document is out of date and is superseded by content on the
Asterisk wiki.

ASTERISK-24386 #close

Change-Id: Idbf95b27b096c205251e1bbb560c79224ba81822
2018-02-20 05:31:26 -05:00
Jenkins2 4df75c8266 Merge "BuildSystem: Use single bootstrap.sh for Asterisk and menuselect." into 13 2018-02-19 20:17:10 -06:00
Jenkins2 21ff3c38c4 Merge "rtp_engine: Load format name / mime type in uppercase again." into 13 2018-02-19 19:48:00 -06:00
Jenkins2 b01f1d096b Merge "install_prereq: Update OpenBSD libraries." into 13 2018-02-19 18:58:12 -06:00
Jenkins2 cf6f0547c3 Merge "BuildSystem: Fix a typo related to ./configure --prefix=<path> on OpenBSD." into 13 2018-02-19 18:31:29 -06:00
Jenkins2 c0f7da277a Merge "BuildSystem: Enable IMAP storage on OpenBSD." into 13 2018-02-19 18:20:00 -06:00
Jenkins2 e35152b550 Merge "res_pjsip_header_funcs: Various cleanups" into 13 2018-02-19 17:56:31 -06:00
Jenkins2 e34db67cfb Merge "res_pjsip: Use pjsip_sip_uri.user_param instead of other_param" into 13 2018-02-19 11:58:01 -06:00
Sean Bright 5ebc94da02 res_http_websocket: Don't leak memory on read failure
Change-Id: Ic449ea832bc81a1671c0e910c5fbe8c683e3da89
2018-02-19 08:25:01 -05:00
Jenkins2 0fe38b7dfa Merge "res_pjsip: Endpoint destruction does not free DTLS configuration" into 13 2018-02-19 06:11:18 -06:00
Thomas Guebels 9325de11f8 res_rtp_asterisk: Fix ICE candidate nomination
If the ICE role is not set right away, we might have a role conflict
that stays undetected and ICE finishing with successful tests and no
candidate nominated. This was introduced by ASTERISK-27088.

To avoid this, we set the role as soon as before but only if the ICE
state permits it: still checking and not yet nominating candidates or
completed.

ASTERISK-27646

Change-Id: I5dbc69ad63cacbb067922850fbb113d479bd729c
2018-02-19 11:31:38 +01:00
Corey Farrell e532b982b3 core: Rename sounds_index.c to sounds.c.
This will make the source filename match the 'module reload sounds'
command.  This will allow conversion to a built-in module in Asterisk 16
without needing to redefine AST_MODULE.

Change-Id: Ifb8e489575b27eb33d8c0b6a531f266670557f6e
2018-02-19 05:00:23 -05:00
Corey Farrell 9c8763e4d2 config: Fix locking for extconfig reload.
Expand locking to include full reload process for extconfig to ensure
nothing can read the config mappings between clearing and reloading.

Change-Id: I378316bad04f1b599ea82d0fef62b8978a644b92
2018-02-19 03:49:45 -05:00
Sean Bright 1a7ad4c9cf res_pjsip_header_funcs: Various cleanups
* Prefer strcasecmp() over stricmp()
 * Use a list with no lock since we never actually lock
 * Minor cleanups to error messages

Change-Id: I8446f44795ee8f3072e1c1f9193c6912dfc0c42b
2018-02-18 09:07:17 -05:00
Alexander Traud 6eb22964ba rtp_engine: Load format name / mime type in uppercase again.
This reverts a previous change partly.

ASTERISK-27689

Change-Id: Ia3d2f282db6995be8c1c253b5d52f6038761e8af
2018-02-17 08:49:48 -06:00
Corey Farrell 27d28116d9 BuildSystem: Use single bootstrap.sh for Asterisk and menuselect.
This causes the root bootstrap.sh script to generate configure scripts
for both Asterisk and menuselect.  This ensures that both configure
scripts are generated with the same version of autotools and avoids
situations where shared autoconf macros get modified without
regenerating the menuselect script.

Change-Id: I2bfd8537bbb63b3d46b11efabbb15eaaf9ef731a
2018-02-16 18:58:35 -05:00
Jenkins2 d09954b192 Merge "bridge_roles: Use a non-locking linked list where appropriate" into 13 2018-02-16 17:40:14 -06:00
Sean Bright 9ad9433257 res_pjsip: Endpoint destruction does not free DTLS configuration
ASTERISK-27679 #close
Reported by: Mak Dee

Change-Id: I89a2783a11be0763bf123d1619ed176b6225cf42
2018-02-16 14:38:17 -05:00
Alexander Traud c5e34f0794 install_prereq: Update OpenBSD libraries.
deleted
 jack sqlite

renamed
 freetds-0.63p1-msdblib to freetds
 mysql-client to mariadb-client

added
 bison bzip2 c-client doxygen e2fsprogs graphviz gsm libical jansson libltdl
 lua neon net-snmp libsrtp portaudio-svn postgresql-client python speexdsp
 subversion uriparser xmlstarlet

ASTERISK-27684

Change-Id: I26bdcb0a1d0e484a8dad1052da97f194aefd3370
2018-02-16 19:44:53 +01:00
Alexander Traud 88ec9be78a BuildSystem: Allow newer autotools on OpenBSD.
ASTERISK-27683

Change-Id: I5ec9dafbb0c16b6f2740c641980bc2eaaf995624
2018-02-16 12:31:57 -06:00
Richard Mudgett 421d4e9c7d Merge "res_calendar: Specialized calendars depend on symbols of general calendar." into 13 2018-02-16 10:55:10 -06:00
Jenkins2 bbc0ba07b1 Merge "contrib/script/sip_to_pjsip: add support for realtime" into 13 2018-02-16 10:16:40 -06:00
Jenkins2 626b5a7948 Merge "BuildSystem: Enable system provided libedit on OpenBSD." into 13 2018-02-16 08:16:45 -06:00
Alexander Traud 0ba6337d32 BuildSystem: Fix a typo related to ./configure --prefix=<path> on OpenBSD.
Reported by: Stuart Henderson

Change-Id: Ieae8624f48b6ae78cf29930b9a45a3c842c7a764
2018-02-16 07:54:08 -06:00
Jenkins2 0e91eb23b2 Merge "BuildSystem: Remove chan_h323 leftovers." into 13 2018-02-16 07:48:53 -06:00
Jenkins2 ab4c3ea746 Merge "BuildSystem: Invoke ldconfig with previous path." into 13 2018-02-16 07:29:06 -06:00
Alexander Traud 58aa0d1014 BuildSystem: Enable IMAP storage on OpenBSD.
ASTERISK-27681
Reported by: Stuart Henderson

Change-Id: Ifb6b614acb251b695b9417d76510e73eb335b679
2018-02-16 06:42:28 -06:00
Alexander Traud 139dd38193 res_calendar: Specialized calendars depend on symbols of general calendar.
ASTERISK-27680

Change-Id: Ifb77912e424fe3710a025c18526fada673ec0b79
2018-02-16 05:59:15 -06:00
Alexander Traud 94ff290361 BuildSystem: Enable system provided libedit on OpenBSD.
ASTERISK-27677

Change-Id: I0854e3616d1361ae9b6907d3d3444a02784ac62b
2018-02-16 12:02:15 +01:00
Sean Bright 48acd5cd26 bridge_roles: Use a non-locking linked list where appropriate
Also explicitly initialize with the AST_LIST_HEAD_NOLOCK_INIT macro for
clarity.

Change-Id: I4bc39ec33bc3ff77e1a971a01ace87deb965be3f
2018-02-15 15:30:35 -05:00
Sean Bright 54efc0c637 res_pjsip: Use pjsip_sip_uri.user_param instead of other_param
There is a dedicated slot in the pjsip_sip_uri for the 'user'
parameter, so use that instead of adding to the list of generic URI
parameters.

Change-Id: I0a0ce8a60ecee27489735bf56fd707719d8c2ed6
2018-02-15 14:36:26 -05:00
Jenkins2 fdf988cd28 Merge "BuildSystem: Do not warn when bash is not installed." into 13 2018-02-15 06:12:39 -06:00
Jenkins2 8212fd6bf4 Merge "main/asterisk.c: Remove silly usage of RAII_VAR." into 13 2018-02-14 12:43:48 -06:00
Alexander Traud 4a5221cd43 BuildSystem: Remove chan_h323 leftovers.
ASTERISK-27670

Change-Id: I07a8ef8bbd6001e25711fa1bff152eb6c9efa729
2018-02-14 09:31:36 +01:00
Alexander Traud eabe72a679 BuildSystem: Invoke ldconfig with previous path.
On OpenBSD, gmake uninstall{-all} registered only libraries from /usr/lib and
lost those from /usr/local/lib. Instead, invoke ldconfig on a path.

ASTERISK-27595

Change-Id: I4aa2c0b5e07119d1a556f8ff6349eaf09e986888
2018-02-13 14:02:25 -06:00
Alexander Traud c2283fca21 BuildSystem: Do not warn when bash is not installed.
ASTERISK-27631

Change-Id: Iefdf268b0b98c3e7d8089ba87cf78136ac1d785b
2018-02-13 10:25:47 -06:00
Jenkins2 a81dfd5949 Merge "chan_sip.c: Fix crash processing CANCEL." into 13 2018-02-13 08:09:20 -06:00
Jenkins2 d9bf0de50e Merge "json: Add conditionals to avoid locking if Jansson is thread safe." into 13 2018-02-13 07:42:31 -06:00
Jenkins2 add4a70354 Merge "BuildSystem: Enable autotools in FreeBSD." into 13 2018-02-13 07:25:17 -06:00
Joshua Colp f5e6a9a2d2 Merge "pjproject_bundled: Disable G.729 from Belledonne Communications." into 13 2018-02-13 06:38:11 -06:00
Jenkins2 58e9ed1c9c Merge "codecs: Add support for WebRTC iLBC 2.0." into 13 2018-02-13 06:29:17 -06:00
Corey Farrell 4e5d5b2ce2 main/asterisk.c: Remove silly usage of RAII_VAR.
Change-Id: I7e2996397fbd3c3a6a69dd805c38448ddfc34ae9
2018-02-12 23:04:26 -05:00
Richard Mudgett ba63dad12d chan_sip.c: Fix crash processing CANCEL.
Check if initreq data string exists before using it when processing a
CANCEL request.

ASTERISK-27666

Change-Id: Id1d0f0fa4ec94e81b332b2973d93e5a14bb4cc97
2018-02-12 20:57:28 -06:00
Corey Farrell 6c72c22d51 json: Add conditionals to avoid locking if Jansson is thread safe.
Jansson is thread safe for all read-only functions and reference
counting starting v2.11.  This allows simplification of our code and
removal of locking around reference counting and dumping.

Change-Id: Id985cb3ffa6681f9ac765642e20fcd187bd4aeee
2018-02-12 12:27:19 -06:00
Jenkins2 a62fcfa17b Merge "install_prereq: Update Debian/Ubuntu libraries." into 13 2018-02-12 09:53:49 -06:00
Jenkins2 f16a623ac0 Merge "cdr.c: Fix runtime leak of CDR records." into 13 2018-02-12 09:35:30 -06:00
Alexander Traud 0ab97e9774 pjproject_bundled: Disable G.729 from Belledonne Communications.
When <http://github.com/BelledonneCommunications/bcg729> is installed, PJProject
tries to link that. Support for this bcg729 was added with PJProject 2.7. The
issue happens, because Teluu enabled that new feature on default.

ASTERISK-27584
Reported by: Stuart Henderson

Change-Id: I88b6b18ad777bcfe2d8201187b4b90eec0a172a6
2018-02-12 06:21:37 -06:00
Alexander Traud 81bec7c359 codecs: Add support for WebRTC iLBC 2.0.
When the latest version of that library was installed, Asterisk did not build.

ASTERISK-27669
Reported by: Николай Михо

Change-Id: I27e09bb875fdd56423bd9fae1be85fddb428eb96
2018-02-12 05:39:49 -06:00
Alexander Traud b1c6a644d3 backtrace: Avoid potential spurious output.
clang 4.0 found this via -Wlogical-not-parentheses.

ASTERISK-27642

Change-Id: I9ec3e144d425a976c02811bd23cd0c533d2eca4e
2018-02-10 07:56:28 -06:00
Alexander Traud 21bd7421ef install_prereq: Update Debian/Ubuntu libraries.
ASTERISK-27555

Change-Id: Idc36e91db30c0163c560d04c5a82bca5d6ce92a8
2018-02-10 06:55:53 -06:00
Richard Mudgett dcfcf310a1 cdr.c: Fix runtime leak of CDR records.
Need to remove all CDR's listed by a CDR object from the active_cdrs_all
container including the root/master record.

ASTERISK-27656

Change-Id: I48b4970663fea98baa262593d2204ef304aaf80e
2018-02-09 14:25:25 -06:00
Oron Peled 0fc3e831a7 chan_console: don't read and write at the same time
It seems that the ALSA backend of PortAudio doesn't know how to both
read and write at the same time by adding a per-device mutex.

FIXME: currently only a draft version. Need to either auto-detect
we work with the ALSA backend or add an extra configuration option
to use this mutex.

ASTERISK-27426 #close

Change-Id: I635eacee45f5413faa18f5a3b606af03b926dacb
2018-02-08 06:55:30 -06:00
Jenkins2 42290f9a45 Merge "app_confbridge: ConfbridgeList event has standard channel shapshot headers." into 13 2018-02-07 06:06:53 -06:00
Jenkins2 0fcdece2a1 Merge "app_confbridge: Add the Muted header to ConfbridgeJoin AMI event." into 13 2018-02-07 05:49:41 -06:00
Jenkins2 5c98924d64 Merge "endpoint identifiers: Some code cleanup." into 13 2018-02-06 05:30:45 -06:00
Jenkins2 e3a2b699db Merge "res_pjsip/config_domain_aliases.c: Add check for missing domain." into 13 2018-02-05 16:01:28 -06:00
Richard Mudgett da987df122 res_pjsip/config_domain_aliases.c: Add check for missing domain.
What is the point of defining an alias and not saying what is being
aliased?

Change-Id: I98a892016ed61dcf5efeb6619fd748925103f0be
2018-02-05 14:01:15 -06:00
Richard Mudgett 1ff580bb25 app_confbridge: ConfbridgeList event has standard channel shapshot headers.
* Made the AMI ConfbridgeList action's ConfbridgeList events output all
the standard channel snapshot headers instead of a few hand-coded channel
snapshot headers.  The benefit is that the CallerIDName gets disruptive
characters like CR, LF, Tab, and a few others escaped.  However, an empty
CallerIDName is now output as "<unknown>" instead of "<no name>".

ASTERISK-27651

Change-Id: Iaf7d54a9d40194c2db060bc9b4979fab6720d977
2018-02-05 13:38:34 -06:00
Richard Mudgett 0cf7a9e0ca app_confbridge: Add the Muted header to ConfbridgeJoin AMI event.
ASTERISK-27651

Change-Id: Idef2ca54d242d1b894efd3fc7b360bc6fd5bdc34
2018-02-05 13:38:34 -06:00
Jenkins2 88e323a2a0 Merge "res_sorcery_realtime.c: Fix ref leak if object failed to apply." into 13 2018-02-05 12:57:54 -06:00
Jenkins2 2bb68c707f Merge "manager.c: Fixed "(null):" header in AMI AsyncAGIEnd event" into 13 2018-02-05 12:17:55 -06:00
Jenkins2 d2df34f204 Merge "res_pjsip.c: Fix documentation typos." into 13 2018-02-03 10:28:22 -06:00
Jenkins2 65c8b7d6b4 Merge "manager_channels.c: Reordered ast_manager_build_channel_state_string_prefix()" into 13 2018-02-03 10:03:18 -06:00
Jenkins2 4bc5291878 Merge "res_pjsip_mwi.c: Fix null pointer crash" into 13 2018-02-03 09:42:36 -06:00
Jenkins2 34e3b51296 Merge "manager.c: Fix potential memory leak and corruption." into 13 2018-02-03 09:38:11 -06:00
Richard Mudgett 1adf90320d endpoint identifiers: Some code cleanup.
res_pjsip_endpoint_identifier_user.c:
* Fix copy/paste error in find_endpoint().  We were using a constant
"anonymous" string instead of the passed in endpoint_name when checking
the transport domain for an endpoint match.
* Eliminate RAII_VAR in find_endpoint().
* Remove always true check in find_transport_state_in_use().
* Remove useless CMD_STOP in find_transport_state_in_use().

res_pjsip_endpoint_identifier_anonymous.c:
* Eliminate RAII_VAR in anonymous_identify().
* Remove always true check in find_transport_state_in_use().
* Remove useless CMD_STOP in find_transport_state_in_use().

Change-Id: I86924c31db5bd225ca0c1219c761b668c6f91189
2018-02-02 17:57:06 -06:00
Richard Mudgett 93a1ffc834 res_pjsip.c: Fix documentation typos.
Change-Id: I82ae0b92bfa2ece84a5c684efd9eefdc83ebd068
2018-02-02 17:48:19 -06:00
Richard Mudgett 5d16cefd63 res_sorcery_realtime.c: Fix ref leak if object failed to apply.
Change-Id: I3c7106ff77009754725cee790eadf5da44154ab6
2018-02-02 17:45:04 -06:00
Jenkins2 8941934e0b Merge "appdocsxml.xslt: Add Language to channel snapshot transformation" into 13 2018-02-02 06:40:53 -06:00
Sungtae Kim dd9690f68c manager.c: Fixed "(null):" header in AMI AsyncAGIEnd event
* Changed to create ami_event string only when the given blob is not
json_null().
* Fixed bad expression.

ASTERISK-27621

Change-Id: Ice58c16361f9d9e8648261c9ed5d6c8245fb0d8f
2018-02-02 06:25:06 -06:00
Jenkins2 6b172f6f2b Merge "bridge_softmix.c: Report not talking immediately when muted." into 13 2018-02-02 06:12:51 -06:00
Joshua Elson 8125b825d3 res_pjsip_mwi.c: Fix null pointer crash
ASTERISK-27652 #close

Change-Id: I78a0d38bfd8d0d82830f3d53da04872d6b67284d
2018-02-01 15:32:31 -06:00
Sean Bright 09edcd93aa appdocsxml.xslt: Add Language to channel snapshot transformation
Change-Id: I8f494b0c895a69b8bc94656d0c6ceebecb0394d8
2018-02-01 16:03:05 -05:00
Richard Mudgett 665444b772 manager.c: Fix potential memory leak and corruption.
ast_str_append_event_header() could potentially leak and corrupt memory if
the ast_str needed to expand to add the AMI event header.

* Fixed to return error if the ast_str_append() failed.

Change-Id: I92f36b855540743b208d76e274152ee2d758176d
2018-02-01 13:50:47 -06:00
Richard Mudgett ef1aeb9437 manager_channels.c: Reordered ast_manager_build_channel_state_string_prefix()
* Made not allocate memory if the channel snapshot is an internal channel.

* Free memory earlier when no longer needed.

Change-Id: Ia06e0c065f1bd095781aa3f4a626d58fa4d28b38
2018-02-01 12:19:08 -06:00
Jenkins2 62d491527e Merge "app_confbridge: Update dsp_silence_threshold and dsp_talking_threshold docs." into 13 2018-02-01 11:38:26 -06:00
George Joseph 7debdd285c res_pjsip_pubsub: Prune subs with reliable transports at startup
In an earlier release, inbound registrations on a reliable transport
were pruned on Asterisk restart since the TCP connection would have
been torn down and become unusable when Asterisk stopped.  This same
process is now also applied to inbound subscriptions.

Also fixed issues in res_pjsip_registrar where it wasn't handling the
monitoring correctly when multiple registrations came in over the same
transport.

To accomplish this, the pjsip_transport_event feature needed to
be refactored to allow multiple monitors (multiple subcriptions or
registrations from the same endpoint) to exist on the same transport.
Since this changed the API, any external modules that may have used the
transport monitor feature (highly unlikey) will need to be changed.

ASTERISK-27612
Reported by: Ross Beer

Change-Id: Iee87cf4eb9b7b2b93d5739a72af52d6ca8fbbe36
2018-02-01 10:32:26 -07:00
Jenkins2 58ba7490a9 Merge "res_pjsip_registrar_expire: Mark module deprecated." into 13 2018-02-01 10:45:17 -06:00
Jenkins2 7cd9798a46 Merge "BuildSystem: Raise autoconf version requirement to 2.60a." into 13 2018-02-01 10:26:00 -06:00
Jenkins2 c9bff6be9b Merge "res_pjsip_session: Prevent crash during shutdown." into 13 2018-01-31 17:10:28 -06:00
Jenkins2 994e62668b Merge "app_voicemail: Avoid always true when using pointer address." into 13 2018-01-31 15:37:44 -06:00
Corey Farrell 698b28e9c7 res_pjsip_registrar_expire: Mark module deprecated.
The functionality of this module was already moved to
res_pjsip_registrar, mark it deprecated and add message to CHANGES.

Change-Id: I90c7d52c7e15e85fde3389d5eaccb05b97848813
2018-01-31 16:15:46 -05:00
Richard Mudgett 6520489952 bridge_softmix.c: Report not talking immediately when muted.
Currently in app_confbridge if someone mutes a channel while that channel
is talking, the talk detection code is suspended while the channel is
muted.  As far an an external observer is concerned, the muted channel's
talk status is still "talking" even though the channel is not contributing
audio to the conference bridge.  When the channel is later unmuted, it
takes the usual 'dsp_silence_threshold' option time to clear the talking
status even though the channel may have stopped talking while the channel
was muted.

* In bridge_softmix.c, clear the talking status and report talking stopped
if the channel was talking when the channel is muted.  When the channel is
unmuted and the channel is still talking then report the channel as
talking since it is contributing audio to the bridge again.

ASTERISK-27647

Change-Id: Ie4fdbc05a0bc7343c2972bab012e2567917b3d4e
2018-01-31 13:13:06 -06:00
Richard Mudgett 4a337b1a76 app_confbridge: Update dsp_silence_threshold and dsp_talking_threshold docs.
The dsp_talking_threshold does not represent time in milliseconds.  It
represents the average magnitude per sample in the audio packets.  This is
what the DSP uses to determine if a packet is silence or talking/noise.

Change-Id: If6f939c100eb92a5ac6c21236559018eeaf58443
2018-01-31 13:11:55 -06:00
Richard Mudgett 2c4dde0ed0 res_pjsip_registrar.c: Fix compiler error.
Need to include signal.h to define pthread_kill() and SIGURG.

Change-Id: I10ae3aa4bf8e7386ac29ade78c0f2caed8e674fa
2018-01-31 11:00:52 -06:00
Jenkins2 d82da7afff Merge "loader: Use ast_cli_completion_add for 'module load' completion." into 13 2018-01-31 07:30:09 -06:00
Jenkins2 ae236c5455 Merge "res_pjsip_registrar_expire: Refactor into res_pjsip_register" into 13 2018-01-31 07:05:11 -06:00
Jenkins2 cee39bf820 Merge "pbx_variables.c: Misc fixes in variable substitution." into 13 2018-01-31 06:58:49 -06:00
Jenkins2 0d105398f0 Merge "install_prereq: Update RHEL/CentOS/Fedora libraries." into 13 2018-01-31 06:33:45 -06:00
Corey Farrell 4c8c0e4c22 res_pjsip_session: Prevent crash during shutdown.
pjproject does not have a function to reverse pjsip_inv_usage_init.
This means we need to ignore any calls to the functions once shutdown is
final.

ASTERISK-27571 #close

Change-Id: Ia550fcba563e2328f03162d79fb185f16b7c9b9d
2018-01-31 00:07:44 -05:00
George Joseph 5b699c812e res_pjsip_registrar_expire: Refactor into res_pjsip_register
res_pjsip_registrar_expire remains as an empty module for now.

Change-Id: Ib93698938bae548d2199cb542f3692d1a171239f
2018-01-29 12:46:36 -07:00
Jenkins2 897f7fb30e Merge "Update sounds release to fix siren7 and siren14 files." into 13 2018-01-29 11:55:00 -06:00
Jenkins2 c956349667 Merge "core: Fix unused variable error in handle_show_sysinfo." into 13 2018-01-29 11:22:33 -06:00
Jenkins2 a1c7383d49 Merge "editline: Avoid shifting a negative signed value." into 13 2018-01-29 10:24:52 -06:00
Alexander Traud 967c70acb5 BuildSystem: Enable autotools in FreeBSD.
In the current versions of FreeBSD, the apps of GNU autotools do not need to
be called with a version anymore. The latest version can be invoked directly.
Additionally, the script ./bootstrap.sh asked for autoconf 2.62 and
automake 1.9, versions which are not available as port anymore.

ASTERISK-27637

Change-Id: Id7b94b80e78cc943a40ba79b697e3f70019820a7
2018-01-29 10:21:51 -06:00
Jenkins2 5b3b627821 Merge "headers: Consistent use of typeof and/or __typeof__." into 13 2018-01-29 10:13:37 -06:00
Alexander Traud dd6b8cd0b2 app_voicemail: Avoid always true when using pointer address.
clang 4.0 warned about this.

ASTERISK-27635

Change-Id: I213f230607d7fbe97c0f5f2d60da9cbf5a2d8231
2018-01-29 10:01:44 -06:00
Jenkins2 663f86a1a9 Merge "BuildSystem: Remove unused variables." into 13 2018-01-29 09:48:02 -06:00
Alexander Traud 8daed642c7 install_prereq: Update RHEL/CentOS/Fedora libraries.
deleted
 automake git ncurses-devel pjproject-devel sqlite2-devel libsqlite3x-devel

renamed
 radiusclient-ng-devel to radcli-devel
 gmime22-devel to gmime-dev

added
 alsa-lib-devel bash binutils-devel bison doxygen flex hoard make pkgconfig
 speexdsp-devel uriparser-devel uw-imap-devel wget xmlstarlet zlib-devel

ASTERISK-27599
Reported by: Said Masoud

Change-Id: I05bb0af98ae532b2d5f37478e38b8f0762b1c035
2018-01-29 11:10:49 +01:00
Alexander Traud f59fb7fec8 BuildSystem: Remove unused variables.
Because of a copy-and-paste from the script build_tools/download_externals,
the script build_tools/list_valid_installed_externals got its local variables.
However in the latter, three variables were not used actually.

Change-Id: I252de5a98c17ea54459174875357c22c2eebe8d5
2018-01-28 05:21:41 -06:00
Corey Farrell 154bccf147 loader: Use ast_cli_completion_add for 'module load' completion.
This addresses all performance issues with 'module load' completion.  In
addition to using ast_cli_completion_add we stop using libedit's
filename_completion_function, instead using ast_file_read_dir.  This
ensures all results are produced from a single call to opendir.

Change-Id: I8bf51ffaa7ef1606f3bd1b5bb13f1905d72c6134
2018-01-27 14:18:39 -06:00
Alexander Traud 4bb38022ea core: Fix unused variable error in handle_show_sysinfo.
The previous fix broke the case
HAVE_SYSINFO = no
HAVE_SYSCTL = yes
HAVE_SWAPCTL = no
which occurs on FreeBSD 11.1 for example.

ASTERISK-26563

Change-Id: If77c39bc75f0b83a6c8a24ecb2fa69be8846160a
2018-01-27 10:12:04 -06:00
Alexander Traud 021168f06f editline: Avoid shifting a negative signed value.
clang 4.0 warned about this.

ASTERISK-27630

Change-Id: Ie2725048c661c1792d8b1d498575144350b6e9ba
2018-01-27 08:55:25 -06:00
Alexander Traud e998c906a7 headers: Consistent use of typeof and/or __typeof__.
Because of a copy-and-paste error, the Asterisk project was using __typeof
instead of typeof. It works because typeof, __typeof, and __typeof__ are
supported by GCC, but here the escaped variant was not intended. Therefore,
for consistence, we change this to typeof.

Change-Id: I2a962c3e596e882f691a19345445b14571a5f07c
2018-01-27 03:25:53 -06:00
Richard Mudgett 87f8459410 Update sounds release to fix siren7 and siren14 files.
ASTERISK-16172

Change-Id: I2fb564258cd4db0f35952ad48b8687355c2dcad3
2018-01-26 15:45:06 -06:00
Alexander Traud 6b771e346b BuildSystem: Raise autoconf version requirement to 2.60a.
AC_COMPUTE_INT requires at least autoconf 2.60a.

This affects only those who contribute to Asterisk, only those who had to use
the script ./bootstrap.sh. Furthermore, this change just makes sure nobody is
using a too old autoconf.

ASTERISK-16951

Change-Id: Ibca850e2fe0e77d935207bd959bacf7197d7f637
2018-01-26 07:13:43 -06:00
Alexander Traud 7ad6792011 install_prereq: Download latest Jansson.
ASTERISK-27603

Change-Id: I65c587534c0ae364f063d68da1bed40bb3d5e8aa
2018-01-26 06:53:18 -06:00
Jenkins2 ede9185249 Merge "install_prereq: For PJProject, point users to configure script." into 13 2018-01-25 07:38:27 -06:00
Jenkins2 24def35abc Merge "install_prereq: Support package manager DNF and yum option strict=1." into 13 2018-01-24 07:44:35 -06:00
Jenkins2 14fc07279f Merge "res_config_mysql: Avoid the header mysql_version.h." into 13 2018-01-23 12:15:27 -06:00
Jenkins2 2bdc26b2d2 Merge "install_prereq: Update Debian/Ubuntu libraries." into 13 2018-01-23 09:56:55 -06:00
Jenkins2 5d74e07793 Merge "chan_unistim: Fix hold function ability to lock/crash asterisk" into 13 2018-01-22 16:16:46 -06:00
Richard Mudgett 85b384728c pbx_variables.c: Misc fixes in variable substitution.
* Copy more than one character at a time when there is nothing to
substitute.

* Fix off by one error if a '}' or ']' is missing.

* Eliminated the requirement that the "used" parameter had to point to a
variable.  The current callers were always declaring a variable to meet
the requirement and discarding the value put into that variable.  Now it
can be NULL.

* In ast_str_substitute_variables_full() fixed using the bogus channel to
evaluate a function.  We were not using the bogus channel we just created
to help evaluate a subexpression.

Change-Id: Ia83d99f4f16abe47f329eb39b6ff2013ae7c9854
2018-01-22 12:32:37 -06:00
Jenkins2 31b501c1a7 Merge "chan_sip: 3PCC patch for AMI "SIPnotify"" into 13 2018-01-22 09:51:29 -06:00
Jenkins2 86aa3572ee Merge "pbx: Reduce verbosity while loading extensions" into 13 2018-01-22 09:42:51 -06:00
Alexander Traud 420586beab res_config_mysql: Avoid the header mysql_version.h.
ASTERISK-27607

Change-Id: I23d00ded955c4afd5f2c3c9dc96dcb48b3f74eec
2018-01-22 09:19:55 -06:00
Jenkins2 25adeb120a Merge "BuildSystem: Allow make clean all again." into 13 2018-01-22 09:16:10 -06:00
Jenkins2 38d2a5fd7b Merge "BuildSystem: Remove orphaned .PHONY targets." into 13 2018-01-22 09:04:34 -06:00
Alexander Traud d5a24cfdf7 install_prereq: For PJProject, point users to configure script.
The installation script and the new configure option --with-pjproject-bundled
aimed to accomplish the same. However, the installation script was out of
date. Users should go for the maintained configure option, or the Wiki.

ASTERISK-24598

Change-Id: Icbf4b562f81f7c05bd24a3805bd46c0beb4ebd44
2018-01-22 09:01:41 -06:00
Jenkins2 32486dd40d Merge "res_pjsip: Document tlsv1_1 and tlsv1_2 methods" into 13 2018-01-22 08:16:52 -06:00
Alexander Traud 31e5008b47 BuildSystem: Remove AC_CONFIG_AUX_DIR.
ASTERISK-27602

Change-Id: I9f4d3d2bc1481748e39ad1e2b0a364d38e38978b
2018-01-20 13:00:36 -06:00
Jenkins2 579dd18eb7 Merge "BuildSystem: Detect external library Lua in version 5.3." into 13 2018-01-19 15:57:52 -06:00
Alexander Traud ffb7b62019 BuildSystem: Remove orphaned .PHONY targets.
Change-Id: Ic44d75141b9bf99e7d72fcc82ee111b5cf6989d2
2018-01-19 12:22:32 -06:00
Alexander Traud 3b566fc8ec BuildSystem: Allow make clean all again.
ASTERISK-27600
Reported by: Hamid R. Hashmi

Change-Id: I683d14d024650be04074b037b6300464519409f4
2018-01-19 12:21:36 -06:00
Alexander Traud f20a522d43 install_prereq: Update Debian/Ubuntu libraries.
ASTERISK-27555

Change-Id: Ieb41b0cbf968af12882b39454b819ebb48b9ea46
2018-01-19 13:19:42 +01:00
Alexander Traud 1fbca9a40d install_prereq: Support package manager DNF and yum option strict=1.
This re-enables the script ./contrib/scripts/install_prereq on Fedora 22 and
newer, and on RHEL/CentOS when the option strict=1 was set for yum install.

ASTERISK-27598
Reported by: Hunter Stevens, Said Masoud

Change-Id: I40f9517122aaa6906e8fc0962b4b8008dfddb368
2018-01-19 04:48:08 -06:00
krells d5bcbd460e pbx: Reduce verbosity while loading extensions
Each time the dial plan is reloaded, a lot of logs like these are generated:
"Added extension 'XXXXX' priority 1 to YYYYYYYYYYY"
This patch changes the log level for those logs.

ASTERISK-27084

Change-Id: I5662902161c50890997ddc56835d4cafb456c529
2018-01-18 20:42:06 -06:00
Jenkins2 9193f2dd79 Merge "BuildSystem: Avoid $EUID and use id -u instead." into 13 2018-01-18 19:37:44 -06:00
Jenkins2 8c8bb2dbf2 Merge "loader: Miscellaneous fixes." into 13 2018-01-18 19:10:03 -06:00
Jenkins2 fa42549d4e Merge "cel_odbc.c: Fix menuslect module description display." into 13 2018-01-18 15:43:37 -06:00
Sean Bright b353c90627 res_pjsip: Document tlsv1_1 and tlsv1_2 methods
Change-Id: I67ed9039bf3f132fb20ee7a750e0aef0f704d7d3
2018-01-18 15:55:20 -05:00
Jenkins2 c5739f9858 Merge "BuildSystem: Use the detected name for MD5 everywhere." into 13 2018-01-18 10:05:58 -06:00
Joshua Colp b944cb629e Merge "BuildSystem: Invoke install not in GNU but POSIX style." into 13 2018-01-18 09:47:28 -06:00
Jenkins2 8e5f07c53c Merge "BuildSystem: In OpenBSD, xmlstarlet is xml." into 13 2018-01-18 09:17:53 -06:00
Jenkins2 b1a65933e2 Merge "app_followme: Add a prompt to be read when a call is connected" into 13 2018-01-18 09:09:27 -06:00
Igor Goncharovsky 1488efb3a8 chan_unistim: Fix hold function ability to lock/crash asterisk
This patch fix chan_unistim hold functions to correctly support
hold function in different states possible in case of multiple lines
established on the phone

ASTERISK-26596 #close

Change-Id: Ib1e04e482e7c8939607a42d7fddacc07e26e14d4
2018-01-18 09:04:25 +03:00
Joshua Colp c137446772 Merge "pjproject_bundled: Prevent crash on bad outgoing header" into 13 2018-01-17 12:27:19 -06:00
ghjm 0b399013c6 app_followme: Add a prompt to be read when a call is connected
This patch adds the ability to configure a prompt which will be read
to the "winner" who pressed 1 (or the configured value) and received
the call.

ASTERISK-24372 #close

Change-Id: I6ec1c6c883347f7d1e1f597189544993c8d65272
2018-01-17 12:00:22 -06:00
Jenkins2 16f211c647 Merge "res_pjsip: Split type=identify to IP address and SIP header matching priorities" into 13 2018-01-17 11:32:39 -06:00
Corey Farrell 22edb10c44 loader: Miscellaneous fixes.
* Remove comment about lazy load.
* Improve message about module already being loaded and running.
* Handle allocation error in add_to_load_order.
* Dead code elimination from modules_shutdown.

Change-Id: I22261599c46d0f416e568910ec9502f45143197f
2018-01-17 11:59:40 -05:00
Alexander Traud 9ffa1f4301 BuildSystem: Use the detected name for MD5 everywhere.
Affacted the (automatic) download script for external modules:
./build_tools/download_externals

ASTERISK-27596

Change-Id: If4c3176f7bf58df32fec6e02a659f1a78d57cf4b
2018-01-17 08:36:44 -06:00
Alexander Traud de65fd11fe BuildSystem: Invoke install not in GNU but POSIX style.
ASTERISK-27594

Change-Id: Iaaa6a19d2fe031dffcba441d0502a7ea65c93cb3
2018-01-17 07:12:25 -06:00
Alexander Traud 72845d54f0 BuildSystem: In OpenBSD, xmlstarlet is xml.
ASTERISK-27593

Change-Id: I1c7087f7f7582e40b3312c690d912c9a86466805
2018-01-17 06:53:11 -06:00
Jenkins2 9083022ebf Merge "taskprocessor.c: Increase the number of tps_singletons container buckets." into 13 2018-01-17 05:49:01 -06:00
Alexander Traud 985834607b BuildSystem: Detect external library Lua in version 5.3.
On some platforms, you decide to go for one specific version of Lua, for
example in OpenBSD. On other platforms, you are able to install several versions
side-by-side, for example in Ubuntu and Fedora. Asterisk already works with
Lua 5.3. Asterisk failed to detect Lua 5.3 on those platforms which allow
several versions.

ASTERISK-27592

Change-Id: If7a4b395d844a464e9a1f4f626c5bff4ee67eed8
2018-01-17 02:53:07 -06:00
Jenkins2 d7f5421ea4 Merge "res_stasis_recording: Allow symbolic links in configured recordings dir." into 13 2018-01-16 09:27:11 -06:00
Richard Mudgett 1bbd9f4a47 taskprocessor.c: Increase the number of tps_singletons container buckets.
Since v12 the number of taskprocessors in the system has increased a lot.
Small systems can easily have over a hundred and larger systems can have
thousands.

Most uses of the tps_singletons container deal with creating and
destroying the taskprocessors.  However, the pjsip distributor looks up
taskprocessors/serializers by name frequently.  It needs to find the
serializer for incoming SIP responses to distribute them to the
appropriate serializer.

Change-Id: Ice0603606614ba49f7c0c316c524735c064e7e43
2018-01-16 08:32:20 -06:00
George Joseph fbd0667c84 pjproject_bundled: Prevent crash on bad outgoing header
We still need to figure out how a bad header is getting into the
outgoing message but this patch to pjproject prevents attempting
to print that header and causing a crash.

For several users, this crash happens when sending 183 progress
messages.

ASTERISK-26832
Reported by: Ross Beer, Jan Rozhon

Change-Id: Ie5c5a921c890c843587763e7f33f987dfe66bd16
2018-01-16 07:20:28 -07:00
Alexander Traud 637bd26575 BuildSystem: Avoid $EUID and use id -u instead.
Makefile included a call to ${EUID} which requires the shell bash. To keep
compatibility with other shells like dash or ksh, use id -u instead.

ASTERISK-27589

Change-Id: Ia6e74f5bc9aab4e6dc62b7439f647b7964e6f657
2018-01-16 06:36:31 -06:00
Richard Mudgett b0a78bdc3e cel_odbc.c: Fix menuslect module description display.
Asterisk's makefile for menuselect has a very simple source file parsing
script that looks for AST_MODULE_INFO lines to extract the quoted string
as a module description.  If it does not find a quoted string it uses the
whole line as the description.

Change-Id: I80f13a63818e4e28d683639a94a4dfaea405c1d5
2018-01-15 18:13:52 -06:00
Jenkins2 5ebb32d3e3 Merge "config_transport: Enable TCP_NODELAY on TLS transports" into 13 2018-01-15 10:36:04 -06:00
Jenkins2 cb5593c594 Merge "BuildSystem: Really do not pass unknown-warning options to the compiler." into 13 2018-01-15 07:29:34 -06:00
Jenkins2 197bff1532 Merge "menuselect: Remove unused dev-mode option TRACE_FRAMES." into 13 2018-01-15 07:09:37 -06:00
Yasuhiko Kamata c0a4a939cc chan_sip: 3PCC patch for AMI "SIPnotify"
A patch for sending in-dialog SIP NOTIFY message
with "SIPnotify" AMI action.

ASTERISK-27461

(created patch for 13 branch manually due to merge conflict)

Change-Id: I255067f02e2ce22c4b244f12134b9a48d210c22a
2018-01-15 16:45:21 +09:00
Jenkins2 e79e8c557b Merge "res_config_pgsql: Avoid typecasting an int to unsigned char." into 13 2018-01-14 08:58:35 -06:00
George Joseph 948b852f48 config_transport: Enable TCP_NODELAY on TLS transports
We did this for TCP transports already but I'm not sure why we
didn't do it for TLS transports.

ASTERISK_27474 #not_final_fix

Change-Id: I5b1ef4b882f7b859e718236686b7898751dbb262
2018-01-13 12:55:25 -07:00
Corey Farrell f01bac230d res_stasis_recording: Allow symbolic links in configured recordings dir.
If any component of ast_config_AST_RECORDING_DIR is a symbolic link we
would incorrectly assume the ARI user was trying to escape the recording
path.  Create additional check to check the recording directory's
realpath, only deny access if both do not match.

This is needed by the testsuite when run by 'run-local'.

Change-Id: I9145e841865edadcb5f75cead3471ad06bbb56c0
2018-01-12 19:05:12 -06:00
Corey Farrell 97b574c927 menuselect: Remove unused dev-mode option TRACE_FRAMES.
ASTERISK-27575 #close

Change-Id: Ica3a522892afed7a96816a5ecf140e1671f46ad4
2018-01-12 12:05:38 -06:00
Jenkins2 2c32e22792 Merge "chan_ooh323: Avoid typecasting an int to unsigned short." into 13 2018-01-12 11:32:08 -06:00
Jenkins2 bb7ae01487 Merge "install_prereq: Update Debian/Ubuntu libraries." into 13 2018-01-12 10:57:53 -06:00
Jenkins2 25b07f8c49 Merge "app_osplookup.c: Avoid two format truncations." into 13 2018-01-12 10:35:40 -06:00
Alexander Traud f07b0df627 res_config_pgsql: Avoid typecasting an int to unsigned char.
clang 5.0 warned about this.

ASTERISK-27576

Change-Id: If41f400a51973c06cdb9b75462e535b616bfe385
2018-01-12 09:26:36 -06:00
Jenkins2 9debcc10fe Merge "Ignore quilt .pc directory, used in deb packaging" into 13 2018-01-12 08:20:03 -06:00
Alexander Traud 659c44f5fb BuildSystem: Really do not pass unknown-warning options to the compiler.
When an older GCC version is called with a too new warning option, GCC exited
with an error and Asterisk was not built. Therefore, the configure script tests
the installed compiler whether it supports that warning option. If not, Asterisk
does not pass it to the installed compiler. However, some compilers (like clang)
do not exit (error) but give just a warning in such a case. Because the compiler
did not exit, Asterisk passed the unknown-warning option.

ASTERISK-27560

Change-Id: Ia9d148e689c173df4e91699113605dab2de36038
2018-01-12 07:21:49 -06:00
Alexander Traud 45008c604d app_osplookup.c: Avoid two format truncations.
GCC 7 warned about this.

ASTERISK-27578

Change-Id: I4a00458dbe9b575ef04338b6a7852272745e1552
2018-01-12 04:27:49 -06:00
Alexander Traud d53a312a03 chan_ooh323: Avoid typecasting an int to unsigned short.
clang 5.0 warned about this.

ASTERISK-27577

Change-Id: I898fe4255023138a9e8b579fe4482fcf582f2b78
2018-01-12 04:05:14 -06:00
Alexander Traud 1d625a7428 install_prereq: Update Debian/Ubuntu libraries.
ASTERISK-27555

Change-Id: I0818b6e42631be1b69237e2b41d3415275693e53
2018-01-12 08:01:40 +01:00
Richard Mudgett f35960d55b res_pjsip: Split type=identify to IP address and SIP header matching priorities
The type=identify endpoint identification method can match by IP address
and by SIP header.  However, the SIP header matching has limited
usefulness because you cannot specify the SIP header matching priority
relative to the IP address matching.  All the matching happens at the same
priority and the order of evaluating the identify sections is
indeterminate.  e.g., If you had two type=identify sections where one
matches by IP address for endpoint alice and the other matches by SIP
header for endpoint bob then you couldn't predict which endpoint is
matched when a request comes in that matches both.

* Extract the SIP header matching criteria into its own "header" endpoint
identification method so the user can specify the relative priority of the
SIP header and the IP address matching criteria in the global
endpoint_identifier_order option.  The "ip" endpoint identification method
now only matches by IP address.

ASTERISK-27491

Change-Id: I9df142a575b7e1e3471b7cda5d3ea156cef08095
2018-01-11 14:14:08 -06:00
Jenkins2 231caefd9b Merge "res_pjsip_endpoint_identifier_ip.c: Remove unnecessary requirement." into 13 2018-01-11 13:27:49 -06:00
Tzafrir Cohen 90b2dc1450 Ignore quilt .pc directory, used in deb packaging
Debian packaging uses quilt to manage patches. Book-keeping for them is
done using quilt (either directly, or in a compatible format), and
tracked in the directory .pc .

Change-Id: I22c90f3d7ab8918e6216e7b686de6fa0e1fdaa7b
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2018-01-11 10:54:32 -06:00
Jenkins2 60a66b56a5 Merge "res_pjsip.c: Update the endpoint identification documentation." into 13 2018-01-11 08:18:11 -06:00
Jenkins2 1f1b8e85b0 Merge "stasis_endpoints: Remove silly usage of RAII_VAR." into 13 2018-01-11 07:53:20 -06:00
Joshua Colp fab209e746 Merge "stasis_message_router: Remove silly usage of RAII_VAR." into 13 2018-01-11 07:28:58 -06:00
Jenkins2 8d642b8d07 Merge "stasis_system: Remove silly usage of RAII_VAR." into 13 2018-01-11 07:03:48 -06:00
Jenkins2 2697904f0e Merge "stasis: Remove silly usage of RAII_VAR." into 13 2018-01-11 06:36:16 -06:00
Jenkins2 6acabbeaca Merge "stasis_bridges: Remove silly usage of RAII_VAR." into 13 2018-01-11 06:10:18 -06:00
Jenkins2 7c4733bf7f Merge "stasis_cache: Remove silly usage of RAII_VAR." into 13 2018-01-11 05:46:07 -06:00
Jenkins2 ffec53b528 Merge "stasis_cache_pattern: Remove silly usage of RAII_VAR." into 13 2018-01-11 05:42:47 -06:00
Jenkins2 d72d6f6223 Merge "res_pjsip.c: Fix ident_to_str() and refactor ident_handler()." into 13 2018-01-10 17:10:59 -06:00
Corey Farrell 608112ced3 stasis: Remove silly usage of RAII_VAR.
Change-Id: Ib11193531e797bcb16bba560a408eab155f706d1
2018-01-10 17:09:04 -05:00
Joshua Colp cdefdea1cc Merge "app_confbridge: Fix NULL check in action_kick_last." into 13 2018-01-10 08:11:53 -06:00
Joshua Colp 7f2d6f51ed Merge "res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events." into 13 2018-01-10 06:55:10 -06:00
Joshua Colp a1eb5b06a8 Merge "res_stasis: Reduce RAII_VAR usage." into 13 2018-01-10 06:40:39 -06:00
Corey Farrell b7c25740fa stasis_bridges: Remove silly usage of RAII_VAR.
Change-Id: I0fa7ab05454f183dc4ff10e26d18776d2b0fcf1f
2018-01-09 22:12:24 -05:00
Richard Mudgett 2e09ed3b18 res_pjsip.c: Update the endpoint identification documentation.
* Endpoint identify_by documentation.
* IP/Header endpoint identifier documentation.

Change-Id: Id92f00b495acca7be945daf749d2abd7f76a0b5a
2018-01-09 13:38:32 -06:00
Jenkins2 8e0f2c7379 Merge "Revert "codec_opus: Make libcurl a dependency in menuselect"" into 13 2018-01-09 13:33:15 -06:00
Richard Mudgett dd6dee7e50 res_pjsip_endpoint_identifier_ip.c: Remove unnecessary requirement.
The requirement that "ip" must be in the endpoint identify_by list to
allow the type=identify method to identify the endpoint is not necessary.
The "ip" identifier method can match one and only one endpoint.  To even
work, the "ip" identifier method configuration must explicitly specify the
identified endpoint.  Therefore, why bother configuring the type=identify
identifier in the first place?  The requirement only adds the potential
for configuration errors for no benefit.  Even worse, those configuration
errors cannot be detected when the configuration loads.  The requirement
was introduced with the ASTERISK_27206 patch.

* Remove the code change that enforces the requiremnt.  Listing the "ip"
method in the identify_by value is simply documentation.

Change-Id: Ia057f92a33fb5d9f51dc5d5692e3d5ee1a6f2c11
2018-01-09 12:31:19 -06:00
Richard Mudgett 96040fa6bb res_pjsip.c: Fix ident_to_str() and refactor ident_handler().
* Extracted sip_endpoint_identifier_type2str() and
sip_endpoint_identifier_str2type() to simplify the calling functions.

* Fixed pjsip_configuration.c:ident_to_str() building the endpoint's
identify_by value string.

Change-Id: Ide876768a8d5d828b12052e2a75008b0563fc509
2018-01-09 12:18:03 -06:00
Richard Mudgett a8a2f39f04 res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events.
The AMI PJSIPShowEndpoint action could only list one IdentifyDetail AMI
event per endpoint.  However, there is no reason that multiple
type=identify sections cannot identify the same endpoint.

* Reworked format_ami_endpoint_identify() to generate as many
IdentifyDetail AMI events as there are matching identifiers.

Change-Id: Ie146792aef72d78e05416ab5b27bc552a30399db
2018-01-09 12:01:14 -06:00
Corey Farrell dedf0ff2bf stasis_cache: Remove silly usage of RAII_VAR.
Change-Id: Ifa95e5801c949df296c7e4376347730fb0ed52ef
2018-01-09 12:10:27 -05:00
Corey Farrell 8a6b3537b1 stasis_cache_pattern: Remove silly usage of RAII_VAR.
Change-Id: Ic98a51f555062cd863b6db3f8d76065943a9dea3
2018-01-09 12:09:08 -05:00
Corey Farrell 909e642918 stasis_endpoints: Remove silly usage of RAII_VAR.
Change-Id: Ic099dc552f36c353c89783a4bcfd09f010432733
2018-01-09 11:57:50 -05:00
Corey Farrell bd11159dbc stasis_message_router: Remove silly usage of RAII_VAR.
Change-Id: I50d6ae230920e0b878ed9cc8f79eef746e06701d
2018-01-09 11:55:37 -05:00
Corey Farrell 975a38e524 stasis_system: Remove silly usage of RAII_VAR.
Change-Id: Iedbe5656cee68cd3a96a953558764aa02d4a0c3b
2018-01-09 11:53:28 -05:00
Alexander Traud b45fb3a6ec translate: Avoid absolute value on unsigned substraction.
ast_format_get_sample_rate(.) returns an unsigned type. The difference of a
substraction between two unsigned types does not get implicitly converted to a
signed type. Therefore, using abs(.) did not make sense.

ASTERISK-27549

Change-Id: Ib904d9ee0d46b6fdd1476fbc464fbbf813304017
2018-01-09 10:45:57 -06:00
Sean Bright 1da8846ca7 Revert "codec_opus: Make libcurl a dependency in menuselect"
This reverts commit 028f4320de.

Change-Id: Ieb91f825cb55202a937f5361c01d356e7662b70c
2018-01-09 08:22:35 -06:00
Jenkins2 637f6216c4 Merge "res_pjsip.c: Fix endpoint identifier registration name search." into 13 2018-01-09 08:22:30 -06:00
Jenkins2 edbfcfcae1 Merge "BuildSystem: Really do not pass unknown-warning options to the compiler." into 13 2018-01-09 06:39:28 -06:00
Jenkins2 e8f81a2905 Merge "codec_gsm: Avoid shifting a negative signed value." into 13 2018-01-09 05:59:45 -06:00
Jenkins2 3a8744b59b Merge "res_pjsip_endpoint_identifier_ip.c: Fix apply identify validation." into 13 2018-01-09 05:51:17 -06:00
Jenkins2 29d96b46f0 Merge "BuildSystem: Find ptlib-config on Debian/Ubuntu." into 13 2018-01-09 05:38:15 -06:00
Corey Farrell c67eb7031b app_confbridge: Fix NULL check in action_kick_last.
The check for last_user == NULL needs to happen before we dereference
the variable, previously it was possible for us to check flags of a NULL
last_user.

Change-Id: I274f737aa8af9d2d53e4a78cdd7ad57561003945
2018-01-08 18:58:33 -06:00
Corey Farrell 17480f6ea4 res_stasis: Reduce RAII_VAR usage.
In addition to being a micro-optimization (RAII_VAR has overhead), this
change improves output of REF_DEBUG.  Unfortunately when RAII_VAR calls
ao2_cleanup it does so from a generated _dtor_varname function.  For
example this caused _dtor_app to release a reference instead of
__stasis_app_unregister.

Change-Id: I4ce67120583a446babf9adeec678b71d37fcd9e5
2018-01-08 17:51:28 -06:00
Jenkins2 7cc614d223 Merge "res_stasis: Fix app_is_subscribed_bridge_id." into 13 2018-01-08 11:13:21 -06:00
Jenkins2 b6b1d73cb5 Merge "General: Avoid implicit conversion to char when changes value to negative." into 13 2018-01-08 06:32:29 -06:00
Jenkins2 d680ade35c Merge "editline: Avoid comparison between pointer and zero character constant." into 13 2018-01-08 05:52:55 -06:00
Jenkins2 776ec5765d Merge "pbx: Prevent execution of NULL pointer." into 13 2018-01-08 05:43:51 -06:00
Corey Farrell c1acc4f364 res_stasis: Fix app_is_subscribed_bridge_id.
Instead of searching for bridge_id provided in an argument this function
always searched for BRIDGE_ALL first.  Rewrite this function to work
like the similar functions for channel and endpoint functions.

Change-Id: Ib5caca69e11727c5c8a7284a1d00621f40f1e60a
2018-01-07 22:00:54 -06:00
Jenkins2 eeb99efead Merge "General: Silence modules on (un)load." into 13 2018-01-07 16:43:26 -06:00
Jenkins2 5745f3489b Merge "chan_ooh323: Limit outgoinglimit to positive values as intended." into 13 2018-01-06 20:27:39 -06:00
Richard Mudgett 96348acbe8 Merge "ooh323cDriver: Fix typo in header guard." into 13 2018-01-06 20:16:21 -06:00
Alexander Traud da1a9f392a General: Silence modules on (un)load.
Some (normally optional) modules created notices, warnings, and even errors
in normal situations like (un)load. This cluttered the command-line interface
(CLI) on start and while stopping gracefully. However, when an user went for
the script './contrib/scripts/install_prereq', those modules get compiled-in
because their prerequisites were met at compile time. Furthermore, because of
ASTERISK_27475, the former talkative module 'res_curl' is built as side-effect.

ASTERISK-27553

Change-Id: I9f105f46d72553994e820679bfde3478a551b281
2018-01-06 20:08:16 -06:00
Alexander Traud aa52c52b21 BuildSystem: Really do not pass unknown-warning options to the compiler.
When an older GCC version is called with a too new warning option, GCC exited
with an error and Asterisk was not built. Therefore, the configure script tests
the installed compiler whether it supports that warning option. If not, Asterisk
does not pass it to the installed compiler. However, some compilers (like clang)
do not exit (error) but give just a warning in such a case. Because the compiler
did not exit, Asterisk passed the unknown-warning option.

ASTERISK-27560

Change-Id: Ia9b7747f649b27ff5e9f75c3db3fee4fe7a29621
2018-01-06 15:42:39 -06:00
Alexander Traud 9865e689d2 General: Avoid implicit conversion to char when changes value to negative.
clang 5.0 warned about this.

ASTERISK-27557

Change-Id: I7cceaa88e147cbdf81a3a7beec5c1c20210fa41e
2018-01-06 22:14:50 +01:00
Alexander Traud a68da30069 editline: Avoid comparison between pointer and zero character constant.
gcc 7.2 warned about this.

ASTERISK-27559

Change-Id: I48960dda9cf0a11b6a9426f775e632363f8caa74
2018-01-06 06:46:19 -06:00
Alexander Traud e60135efd4 codec_gsm: Avoid shifting a negative signed value.
clang 5.0 warned about this.

ASTERISK-27558

Change-Id: Icc452ecb0d86bbeba78dae768cc472ec540699df
2018-01-06 05:05:08 -06:00
Richard Mudgett ba57c03740 res_pjsip_endpoint_identifier_ip.c: Fix apply identify validation.
The ip_identify_apply() did not validate the configuration for simple
static configuration errors or deal well with address resolution errors.

* Added missing configuration validation checks.
* Fixed address resolution error handling.
* Demoted an error message to a warning since it does not fail applying
the identify object configuration.

Change-Id: I8b519607263fe88e8ce964f526a45359fd362b6e
2018-01-05 18:49:32 -06:00
Richard Mudgett 0feca9bc18 res_pjsip.c: Fix endpoint identifier registration name search.
If an endpoint identifier name in the endpoint_identifier_order list is a
prefix to the identifier we are registering, we could install it in the
wrong position of the list.

Assuming
endpoint_identifier_order=username,ip,anonymous

then registering the "ip_only" identifier would put the identifier in the
wrong position of the priority list.

* Fix incorrect strncmp() string prefix matching.

Change-Id: Ib8819ec4b811da8a27419fd93528c54d34f01484
2018-01-05 18:07:49 -06:00
Alexander Traud 440fb4d02b BuildSystem: Find ptlib-config on Debian/Ubuntu.
The current configure script requires that tool when libpt-dev is installed.
libpt-dev was installed by libopenh323-dev, bacause you wanted to go for H.323
based channel drivers.

ASTERISK-25329

Change-Id: I9c6ab78b7246c21536e1d252dcbffe682f63f83d
2018-01-05 14:57:54 -06:00
Alexander Traud dda0ab236d chan_ooh323: Limit outgoinglimit to positive values as intended.
ASTERISK-27552

Change-Id: Ifbf9d51e7374ca2e8b27ec568f6770050fc1a854
2018-01-05 08:02:43 -06:00
Alexander Traud c11999f140 ooh323cDriver: Fix typo in header guard.
ASTERISK-27551

Change-Id: I39ff66031e3373e895e2bc47b23a5e860ea4e012
2018-01-05 06:19:57 -06:00
Alexander Traud cee6de4e63 BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf.
ASTERISK-26046

Change-Id: I48f05698c235f709225b92bec5aa260fb57d69d1
2018-01-05 03:40:36 -06:00
Corey Farrell 0f141351f9 pbx: Prevent execution of NULL pointer.
pbx_extension_helper has a check for q->swo.exec == NULL but it doesn't
actually return so we would still run the function.  Fix the return.
Move the 'int res' variable into the only scope which uses it.

Change-Id: I0693af921fdc7f56b6a72a21fb816ed08b960a69
2018-01-04 17:07:03 -05:00
Jenkins2 b8271826b3 Merge "res_pjsip_history: Add missing unlock to CLI command." into 13 2018-01-04 14:37:47 -06:00
Jenkins2 eb8a36d961 Merge "aco: Fix NULL dereference in error path." into 13 2018-01-04 14:08:29 -06:00
Corey Farrell d73a3a1764 res_pjsip_history: Add missing unlock to CLI command.
Change-Id: I872060a30543776a176a316309602d924a23eb29
2018-01-04 09:34:00 -06:00
Corey Farrell ec74570598 aco: Fix NULL dereference in error path.
Change-Id: Id505167cf0f9414a3c144fa2c1e181a2cf288694
2018-01-04 09:33:07 -06:00
Corey Farrell 74b6fafbe6 func_odbc: Add missing unlock's to acf_odbc_read.
Change-Id: I828329ecbd252ae8f27a369a046d2b03102b07c6
2018-01-04 09:13:15 -06:00
Kevin Harwell d25a9bc7d3 res_pjsip_session: Check if sequence header is missing
The pjsip_msg_find_hdr function can return NULL. This patch adds a check
when searching for the sequence header to make sure a NULL pointer is never
de-referenced.

Change-Id: I19af23aeeded65be016be92360e8cb7ffe51fad2
2018-01-03 10:41:46 -06:00
Jenkins2 9e47e113e1 Merge "core: Use macros to generate ao2_container callbacks where possible." into 13 2018-01-03 07:49:58 -06:00
Jenkins2 6baf53e4be Merge "astobj2: Create case-insensitive variants of container function macros." into 13 2018-01-03 07:04:10 -06:00
Joshua Colp 3fa33de301 Merge "aco: Add missing aco_option_type_string for OPT_TIMELEN_T." into 13 2018-01-03 06:51:59 -06:00
Tzafrir Cohen 00b0c67144 cdr: submit: fix logic of test for batch mode
ASTERISK-27539 #close

Change-Id: I33cdf329d2bb4486dcae975c450f6aae94c515f7
2018-01-02 09:18:16 -06:00
Jenkins2 8e5167a0b5 Merge "stasis_channels.c: Misc cleanup." into 13 2018-01-02 07:39:30 -06:00
Jenkins2 3edaa955ba Merge "cdr_mysql: Make sure connection charset is always set" into 13 2018-01-02 06:54:21 -06:00
Corey Farrell dd528c53c0 aco: Add missing aco_option_type_string for OPT_TIMELEN_T.
ASTERISK-27117

Change-Id: I8f6c34bb30830be9f7a40823723eb4dcaaa91c61
2018-01-02 00:39:32 -06:00
Corey Farrell 5b395a7b97 core: Use macros to generate ao2_container callbacks where possible.
This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where
possible in the Asterisk core.

This removes CMP_STOP from the result of CMP_FN callbacks for the
following structure types:
* ast_bucket_metadata
* ast_bucket_scheme
* generic_monitor_instance_list (ccss.c)
* named_acl

Change-Id: Ide4c1449a894bce70dea1fef664dade9b57578f1
2018-01-01 19:17:15 -05:00
Sean Bright d2c836d24a ice: Increase foundation buffer size
Per RFC 5245, the foundation specified with an ICE candidate can be up
to 32 characters but we are only allowing for 31.

ASTERISK-27498 #close
Reported by: Michele Prà

Change-Id: I05ce7a5952721a76a2b4c90366168022558dc7cf
2017-12-31 11:26:54 -05:00
Corey Farrell b275b0a84f astobj2: Create case-insensitive variants of container function macros.
* AO2_STRING_FIELD_CASE_HASH_FN
* AO2_STRING_FIELD_CASE_CMP_FN
* AO2_STRING_FIELD_CASE_SORT_FN

Change-Id: I11af8c6a0c43380a42732553f519c667abb842cf
2017-12-30 12:47:54 -06:00
Jenkins2 b47882df72 Merge "func_channel.c: Update MASTER_CHANNEL documentation" into 13 2017-12-29 13:31:04 -06:00
Richard Mudgett 751fd9b628 stasis_channels.c: Misc cleanup.
* Use current OBJ_SEARCH_xxx defines instead of the deprecated versions.

* Fix hash_cb and cmp_cb container functions to correctly use the
OBJ_SEARCH_xxx values.

* Remove incorrect usage of CMP_STOP.  Most uses in the system have no
effect.  This allows the collapse of channel_role_single_cmp_cb() and
channel_role_multi_cmp_cb() into channel_role_cmp_cb().

* Remove unnecessary usage of RAII_VAR().

Change-Id: I02c405518cab22aa2a082b61e2353bf7cd629a70
2017-12-28 13:37:31 -06:00
Jenkins2 e4d536b64d Merge "manager.c: Update AMI Status event documentation" into 13 2017-12-28 13:35:30 -06:00
George Joseph 712450c78a Merge "menuselect: Fix check for running configure." into 13 2017-12-28 10:56:55 -06:00
Jenkins2 9792bb0aa9 Merge "cdr: Missing NULL check and unlock." into 13 2017-12-28 10:32:29 -06:00
Sean Bright bae301c18c cdr_mysql: Make sure connection charset is always set
When the MYSQL_OPT_RECONNECT option is enabled, the MySQL client API
will transparently reconnect when it needs to. Ideally this simplifies
our code, but when this reconnection occurs all connection state is
lost. Because we are not notified that this has happened, we don't know
to set our character set again (with "SET NAMES 'xyz'").

Rather than calling SET NAMES, we instead set the MYSQL_SET_CHARSET_NAME
option which will do it for us under the hood on each connect. This
option has been present in the MySQL C API for at least 15 years, so it
should be safe for most installations.

I also snuck a few other changes into this patch:

* Default the MySQL port to MYSQL_PORT (3306) instead of 0 if it's not
  defined.

* Fix some erroneous and/or silly checks on the contents of the
  configuration ast_str values.

ASTERISK-27366 #close
Reported by: Halil İbrahim YILDIZ

Change-Id: I36bf8dc5d5f83584e803b3b1a151dea9396ab8f5
2017-12-28 10:38:01 -05:00
Richard Mudgett 5de8f49294 manager.c: Update AMI Status event documentation
The AMI Status event had linkedid listed twice and was missing the
effective connected line name and number headers.

NOTE: The linkedid and other standard channel snapshot fields in the XML
documentation are part of the <channel_snapshot/> XML template defined in
doc/appdocsxml.xslt.

* Cached the effective connected line party id so it doesn't get
calculated four times.

Change-Id: I004c4c4f9e7b40ef55035c831702721bec82496c
2017-12-28 09:15:54 -06:00
Richard Mudgett 9f1cfbafca bridge_native_rtp.c: Fix reentrancy framehook crash.
If two channels enter different native rtp bridges at the same time it is
possible that the framehook interface data pointer can be corrupted
because the struct variable was declared static.

* Fixed the reentrancy corruption by changing the framehook interface
struct static variable to a stack local variable.

* Moved the hook.data assignment outside of the channel lock.  It did not
need the lock's protection.  It probably was giving a false sense of
security.

The testsuite
channels/pjsip/basic_calls/two_parties/nominal/alice_initiated/bob_hangs_up
test caught this with MALLOC_DEBUG and DO_CRASH enabled.

Change-Id: If9e35b97d19209b0f984941c1d8eb5f7c55eea91
2017-12-27 23:16:21 -06:00
Richard Mudgett eead5d0c30 func_channel.c: Update MASTER_CHANNEL documentation
Be more explicit in what is meant by the master channel to eliminate
misunderstanding.

ASTERISK-23133

Change-Id: I453bcaf4b99404a5a3e345dbf093ac6c1afcfc72
2017-12-27 21:15:06 -06:00
Corey Farrell 0bdddbe526 menuselect: Fix check for running configure.
menuselect/Makefile checks that autoconfig.h and makeopts were newer
than the '.in' files.  Unfortunately running ./configure does not touch
autoconfig.h unless the contents will change.

Instead of looking at autoconfig.h we just need to ensure that makeopts
is newer than configure.

Also make change to configure.ac so bootstrap.sh doesn't re-add the
extra trailing line-feed.

Change-Id: Ief1f831d6717007f9cebb668c14e92782cd2b794
2017-12-27 20:17:06 -06:00
Corey Farrell d62c87bb8d cdr: Missing NULL check and unlock.
* handle_dial_message: Missing a check for NULL peer.
* ast_cdr_register: Missing unlock on allocation failure.

ast_cdr_register is fixed by reordering so the new structure is
allocated and initialized before locking the list.

Change-Id: I5799b99270d1a7a716a555c31ac85f4b00ce8686
2017-12-25 20:53:02 -06:00
Corey Farrell 92fb393cab loader: Add volatile to resource_being_loaded.
Some compiler optimizers seem to assume that dlopen will not use
__attribute__((constructor)) functions to call back to the program.
This was causing resource_being_loaded to be optimized away completely.

ASTERISK-27531 #close
Tested By: abelbeck

Change-Id: If17a3b889e06811a0e7119f0539d052494d6ece9
2017-12-24 00:34:58 -05:00
Kevin Harwell 53799318bc AST-2017-014: res_pjsip - Missing contact header can cause crash
Those SIP messages that create dialogs require a contact header to be present.
If the contact header was missing from the message it could cause Asterisk to
crash.

This patch checks to make sure SIP messages that create a dialog contain the
contact header. If the message does not and it is required Asterisk now returns
a "400 Missing Contact header" response. Also added NULL checks when retrieving
the contact header that were missing as a "just in case".

ASTERISK-27480 #close

Change-Id: I1810db87683fc637a9e3e1384a746037fec20afe
2017-12-22 15:38:56 -06:00
Sean Bright ce3d56920b Remove as much trailing whitespace as possible.
Change-Id: I873c1c6d00f447269bd841494459efccdd2c19c0
2017-12-22 09:14:07 -05:00
Jenkins2 35a2e09c65 Merge "Fix some invalid Unicode characters" into 13 2017-12-22 07:45:52 -06:00
Jenkins2 29b10b42bb Merge "app_voicemail: Fix file copy error handling." into 13 2017-12-22 07:26:22 -06:00
Sean Bright b4ae112e3a Fix some invalid Unicode characters
configs/samples/minivm.conf.sample contains invalid UTF-8, but that
appears to be intentional.

Change-Id: I7b1e0d332f3380fd0425962a3c9c55f9b200c8cc
2017-12-21 11:18:17 -05:00
Jenkins2 d85290ca48 Merge "Fix Common Typo's." into 13 2017-12-21 08:34:31 -06:00
Joshua Colp e94962ce63 Merge "docs: Remove old API changes documentation" into 13 2017-12-21 06:35:22 -06:00
Jenkins2 2ca8095691 Merge "app_festival: Fix fd leak on connection failure." into 13 2017-12-21 06:11:47 -06:00
Jenkins2 0097ad91ef Merge "bridge: Old channel video source not set to NULL after unref." into 13 2017-12-21 05:47:18 -06:00
Joshua Colp 8030309a2f Merge "core: Fix unused variable error in handle_show_sysinfo." into 13 2017-12-21 05:46:32 -06:00
Corey Farrell 719e8eee03 app_voicemail: Fix file copy error handling.
Fix error where input/output file descriptors would be closed multiple
times.

Change-Id: Iba5140b60cb7de79e3d5d92be3c256947aa99da9
2017-12-20 21:39:53 -06:00
Sean Bright 6892c13a2c docs: Remove old API changes documentation
Change-Id: I1bc7957121cc7ae27dca04acc3613f4e1858476a
2017-12-20 15:54:24 -05:00
Corey Farrell 82b6ba976f Fix Common Typo's.
Fix instances of:
* Retreive
* Recieve
* other then
* different then
* Repeated words ("the the", "an an", "and and", etc).
* othterwise, teh

ASTERISK-24198 #close

Change-Id: I3809a9c113b92fd9d0d9f9bac98e9c66dc8b2d31
2017-12-20 12:54:13 -05:00
Richard Mudgett 4f45748f52 manager.h: Bump AMI version
Change-Id: I62e6ddeb261ef012687e1fb6734c554e2499b6bf
2017-12-20 11:30:54 -06:00
Corey Farrell 6b3188fb8c app_festival: Fix fd leak on connection failure.
Change-Id: If5efaddcf735ff7d17e55c36cc1388946cee9e0f
2017-12-20 10:59:50 -06:00
Corey Farrell be3800c49d bridge: Old channel video source not set to NULL after unref.
The bridge holds onto the old channel video source after it's been
released.  This can lead to use after free errors.

ASTERISK-27229 #close

Change-Id: Ib2dab61677dd8a21f7ad53cdc9b8ca93297838b3
2017-12-20 10:26:38 -06:00
Corey Farrell d05ec48145 core: Fix unused variable error in handle_show_sysinfo.
Apparently in OSX it's possible for OSX to HAVE_SYSCTL but not
HAVE_SYSINFO or HAVE_SWAPCTL.  In this case freeswap caused an unused
variable error.

ASTERISK-26563 #close

Change-Id: I8ec5b1897b786cc1abaf62264aa75039eea05510
2017-12-20 10:16:48 -06:00
Joshua Colp 616659d620 Merge "CLI: Address multiple issues." into 13 2017-12-20 08:34:37 -06:00
Jenkins2 b100233801 Merge "bridge: Stop music on hold on adding an arbitrary channel to a bridge" into 13 2017-12-20 08:11:54 -06:00
Jenkins2 2072057657 Merge "res_rtp_asterisk: Avoid close the rtp/rtcp fd twice." into 13 2017-12-20 07:47:22 -06:00
Joshua Colp f1d50c0fb0 Merge "core: Fix multiple trivial issues in the core." into 13 2017-12-20 07:01:01 -06:00
Jenkins2 eda4f59656 Merge "chan_sip: Fix memory leaks." into 13 2017-12-19 19:20:39 -06:00
Jenkins2 b539ea2a38 Merge "Remove constant conditionals (dead-code)." into 13 2017-12-19 19:13:20 -06:00
George Joseph ee62652e2d Merge "chan_console: Use correct parameter for 'set active'" into 13 2017-12-19 16:14:03 -06:00
Corey Farrell 9adffca9c7 CLI: Address multiple issues.
* listen uses the variable `s` for the result from ast_poll() then
  overwrites it with the result of accept().  Create a separate variable
  poll_result to avoid confusion since ast_poll does not return a file
  descriptor.
* Resolve fd leak that would occur if setsockopt failed in listen.
* Reserve an extra byte while processing completion results from remote
  daemon.  This fixes a bug where completion processing used strstr() on
  a string that was not '\0' terminated.  This was no risk to the Asterisk
  daemon, the bug was only reachable the remote console process.
* Resolve leak in handle_showchan when the channel is not found.
* Multiple leaks and a deadlock in pbx_config CLI completion.
* Fix leaks in "manager show command".

Change-Id: I8f633ceb1714867ae30ef4e421858f77c14485a9
2017-12-19 16:43:32 -05:00
Aaron An c38b750810 res_rtp_asterisk: Avoid close the rtp/rtcp fd twice.
When RTCP-MUX enabled. rtp->s is the same as rtcp->s, check this before
close the file descriptor. Close the FD twice will hangs the asterisk
under heavy load.

ASTERISK-27299 #close
Reported-by: Aaron An
Tested-by: AaronAn

Change-Id: I870a072d73fd207463ac116ef97100addbc0820a
2017-12-19 15:16:02 -05:00
Jenkins2 dba037d422 Merge "main/app: Fix leaks." into 13 2017-12-19 14:10:02 -06:00
Ivan Poddubny fef23297b7 bridge: Stop music on hold on adding an arbitrary channel to a bridge
When a channel that is on hold gets added to a bridge by
the Bridge AMI action or the dialplan application of the same name,
music continues to play, causing "robotic sound".

This commit adds a call to ast_moh_stop to stop the music.
Also, it makes the AMI Park action use the right MOH class when the
channel gets parked.

Reported by: Zane Conkle

ASTERISK-25079 #close

Change-Id: I4b129c5a20c15e63968842460ac5a1a85903cf9f
2017-12-19 20:52:09 +01:00
Corey Farrell 0e5d8ad09b chan_sip: Fix memory leaks.
In change_redirecting_information variables we use ast_strlen_zero to
see if a value should be saved.  In the case where the value is not NULL
but is a zero length string we leaked.

handle_response_subscribe leaked a reference to the ccss monitor
instance.

Change-Id: Ib11444de69c3d5b2360a88ba2feb54d2c2e9f05f
2017-12-19 13:48:39 -06:00
Jenkins2 909f41a2e0 Merge "func_callerid: Initialize app argument structures." into 13 2017-12-19 11:34:08 -06:00
Jenkins2 bde7c0420a Merge "rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage." into 13 2017-12-19 11:04:03 -06:00
Oron Peled fc86e58a5a chan_console: Use correct parameter for 'set active'
chan_console supports multiple devices but the CLI only works on a
single device. 'console set active' selects this device.

Sadly that CLI picks the wrong command-line parameter and will only
work for a device called 'active'.

ASTERISK-27490 #close

Change-Id: I2f0e5fe63db19845bee862575b739360797dc73d
2017-12-19 10:58:37 -06:00
Jenkins2 c7bdffb281 Merge "ast_json_pack(): Use safer json ref mechanism." into 13 2017-12-19 10:02:19 -06:00
Corey Farrell d6b2f457d9 Remove constant conditionals (dead-code).
Some variables are set and never changed, making them constant.  This
means that code in the 'false' block of the conditional is unreachable.

In chan_skinny and res_config_ldap I used preprocessor directive `#if 0`
as I'm unsure if the unreachable code could be enabled in the future.

Change-Id: I62e2aac353d739fb3c983cf768933120f5fba059
2017-12-19 08:52:33 -06:00
Corey Farrell 381ed4f1cc core: Fix multiple trivial issues in the core.
* Fix small leaks in from error condition in translate.c.
* Check new file descriptor is less than 0, not less than or equal.

Change-Id: Id7782775486175c739e0c4bf3ea5e17e3f452a99
2017-12-19 09:19:46 -05:00
Corey Farrell 67b5a4e616 main/app: Fix leaks.
* ast_linear_stream would leak a file descriptor if it failed to allocate
  lin.
* ast_control_tone leaked zone and ts if ast_playtones_start failed.

Additionally added whitespace to ast_linear_stream, pulled assignments
out of conditionals for improved readability.

Change-Id: I6d1a10cf9161b1529d939b9b2d63ea36d395b657
2017-12-18 20:36:32 -06:00
Corey Farrell 3782230e00 func_callerid: Initialize app argument structures.
This module uses AST_DEFINE_APP_ARGS_TYPE to define struct's instead of
directly using AST_DECLARE_APP_ARGS.  Initialize the variables declared
in this way.

Change-Id: If97fbdd8d63a204e2efd498a192effc14e90fb31
2017-12-18 19:35:26 -06:00
Corey Farrell 1d636f4afa app_voicemail: Fix memory management issues.
* mwi_sub_event_cb: mwist leaked on separate_mailbox failure.
* add_email_attachment: A reference to sox_gain_tmpdir was used
  after the storage was out of scope.

Change-Id: I6282c542ff7b82fa091177a912d11234a8b00a30
2017-12-18 18:12:31 -06:00
Richard Mudgett 5801917a75 ast_json_pack(): Use safer json ref mechanism.
Change-Id: I49204db2e57ae96eee43909c18ed007c09ac817e
2017-12-18 18:05:32 -06:00
Richard Mudgett 46ed7afdd9 rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage.
Change-Id: I58a22c2ca82e91d7537409b7b3af2d735827a54d
2017-12-18 18:02:51 -06:00
Joshua Colp b14d165927 Merge "CLI: Fix 'core set debug channel' completion bug." into 13 2017-12-18 15:58:34 -06:00
Jenkins2 cbb71df228 Merge "CLI: Remove special handling of 'core set verbose' from rasterisk." into 13 2017-12-18 13:41:07 -06:00
Jenkins2 56a931f64c Merge "aco: Minimize use of regex." into 13 2017-12-18 13:32:31 -06:00
Jenkins2 b6d03c086b Merge "aco: Create ways to minimize use of regex." into 13 2017-12-18 13:14:07 -06:00
Corey Farrell 5cdc65cf1e CLI: Fix 'core set debug channel' completion bug.
The completion generator is missing a return so typing "core set debug
all off <tab>" causes the command to actually execute.

Change-Id: Ibf6462088a74eee66967732b50445783ebefc20b
2017-12-18 12:36:03 -06:00
Joshua Colp 9867219329 Merge "confbridge: Clarify mute sound documentation." into 13 2017-12-18 12:15:38 -06:00
George Joseph 43903f1e83 Merge "loader: Use vector to build apha sorted module lists." into 13 2017-12-18 10:24:49 -06:00
George Joseph d6ea23d60e Merge "loader: Replace priority heap with vector." into 13 2017-12-18 10:24:43 -06:00
Jenkins2 232a61006c Merge "chan_pjsip.c: Improve ast_request() diagnostic msgs." into 13 2017-12-18 09:20:02 -06:00
Jenkins2 0fc61f23c6 Merge "chan_sip: Add security event for calls to invalid extension." into 13 2017-12-18 08:59:26 -06:00
Jenkins2 d1a68d90b0 Merge "cdr: Minor optimizations." into 13 2017-12-18 08:36:07 -06:00
George Joseph 1b50eb2d9f Merge "loader: Rework of load_dynamic_module." into 13 2017-12-18 08:29:36 -06:00
Joshua Colp 7f2df9e277 confbridge: Clarify mute sound documentation.
The mute/unmute sounds are only played when the
action is initiated using the DTMF menu.

ASTERISK-24756

Change-Id: I55b3dd5bc166096bf5e2f547ddd0ce355f36e3dc
2017-12-18 10:27:47 -04:00
Jenkins2 b270d5b5a2 Merge "loader: Minor fix to module registration." into 13 2017-12-18 07:48:17 -06:00
Joshua Colp 4cda942ebd app_transfer: Remove LOCAL from documentation.
The Local channel has never supported app_transfer
from what I can see so remove it from the documentation.

ASTERISK-25649

Change-Id: Icbcfe297f6f866285a26b3e9fd5c6d00fa22e0e9
2017-12-18 08:36:36 -04:00
Richard Mudgett a368ad9229 chan_pjsip.c: Improve ast_request() diagnostic msgs.
Attempting to dial PJSIP/endpoint when the endpoint doesn't exist and
disable_multi_domain=no results in a misleading empty endpoint name
message.  The message should say the endpoint was not found.

* Added missing endpoint not found message.

* Added more information to the empty endpoint name msgs if available.

* Eliminated RAII_VAR in request().

Change-Id: I21da85ebd62dcc32115b2ffcb5157416ebae51e4
2017-12-15 19:01:02 -06:00
Jenkins2 e31e3b581b Merge "res_smdi: Fix shutdown ref." into 13 2017-12-15 12:31:47 -06:00
Jenkins2 ccb563d357 Merge "res_rtp_asterisk.c: Disable packet flood detection for video streams." into 13 2017-12-15 11:59:53 -06:00
Jenkins2 7d230e690c Merge "res_hep: hepv3_is_loaded() should check if we are enabled" into 13 2017-12-15 11:36:25 -06:00
Jenkins2 2ea359f738 Merge "res_clialiases: Fix completion pass-through." into 13 2017-12-15 11:24:17 -06:00
Jenkins2 1865b3d230 Merge "coverity: Fix warnings in res_smdi" into 13 2017-12-15 10:50:16 -06:00
Corey Farrell b3b7367e6b cdr: Minor optimizations.
* bridge_candidate_process: remove SCOPED_AO2LOCK and return value.
* handle_standard_bridge_enter_message: replace recursive call with goto
  statement.

ASTERISK-24297

Change-Id: Id2eaa0822fb8dc799f63422bb3aa89de9d4ee2a2
2017-12-15 11:29:25 -05:00
Jenkins2 ab8ae8fa92 Merge "res_musiconhold: Start playlist after initial announcement" into 13 2017-12-15 10:12:30 -06:00
Jenkins2 7ad305bfef Merge "app_queue: Fix extension state subscriptions removed on dialplan reload" into 13 2017-12-15 09:49:07 -06:00
Corey Farrell 8921b2581d loader: Use vector to build apha sorted module lists.
Change-Id: I9c519f4dec3cda98b2f34d314255a31d49a6a467
2017-12-15 10:45:06 -05:00
Corey Farrell d5a7a98528 loader: Replace priority heap with vector.
This is needed for future changes which will require being able to
process the load priority out of order.

Change-Id: Ia23421197f09789940510b03ebbbf3bf24d51bea
2017-12-15 10:45:01 -05:00
Corey Farrell 5e9d70ae5d loader: Rework of load_dynamic_module.
* Split off load_dlopen to perform actual dlopen, check results and log
  warnings when needed.
* Use flags which minimize number of calls to dlopen required.  First
  attempt always uses RTLD_GLOBAL when global_symbols_only is enabled,
  RTLD_LOCAL when it is not.

This patch significantly reduces the number of dlopen's performed.  With
299 modules my system ran dlopen 857 times before this patch, 655 times
after this patch.

Change-Id: Ib2c9903cfddcc01aed3e01c1e7fe4a3fb9af0f8b
2017-12-15 10:44:55 -05:00
Corey Farrell 4de95d4bf0 loader: Minor fix to module registration.
This protects the module loader itself against crashing if dlopen is
called on a module from outside loader.c.

* Expand scope of lock inside ast_module_register to include reading of
  resource_being_loaded.
* NULL check resource_being_loaded.
* Set resource_being_loaded NULL as soon as dlopen returns.  This fixes
  some error paths where it was not NULL'ed.
* Create module_destroy function to deduplicate code from
  ast_module_unregister and modules_shutdown.
* Resolve leak that occured if a module did not successfully register.
* Simplify checking for successful registration.

Change-Id: I40f07a315e55b92df4fc7faf525ed6d4f396e7d2
2017-12-15 10:44:26 -05:00
Corey Farrell e3bd95f55c chan_sip: Add security event for calls to invalid extension.
Log a message to security events when an INVITE is received to an
invalid extension.

ASTERISK-25869 #close

Change-Id: I0da40cd7c2206c825c2f0d4e172275df331fcc8f
2017-12-15 10:32:12 -05:00
Corey Farrell 501f4dcdd8 aco: Minimize use of regex.
Remove nearly all use of regex from ACO users.  Still remaining:
* app_confbridge has a legitamate use of option name regex.
* ast_sorcery_object_fields_register is implemented with regex, all
  callers use simple prefix based regex.  I haven't decided the best
  way to fix this in both 13/15 and master.

Change-Id: Ib5ed478218d8a661ace4d2eaaea98b59a897974b
2017-12-15 10:20:51 -05:00
Corey Farrell 7413bcbeb5 aco: Create ways to minimize use of regex.
ACO uses regex in many situations where it is completely unneeded.  In
some cases this doubles the total processing performed by
aco_process_config.

* Create ACO_IGNORE category type for use in place of skip_category
  regex source string.
* Create additional aco_category_op values to allow specifying category
  filter using either a single plain string or a NULL terminated array
  of plain strings.
* Create ACO_PREFIX to allow matching option names to case insensitive
  prefixes.

Change-Id: I66a920dcd8e2b0301f73f968016440a985e72821
2017-12-15 10:19:41 -05:00
Corey Farrell 8165115faa res_smdi: Fix shutdown ref.
When adding shutdown refs for OPTIONAL_API components I accidentally
added it to the unload_module function in res_smdi.  Move it to
load_module.

Change-Id: I2b9da38fbc11ef78ea23dbb2df92b684be7f647c
2017-12-15 09:03:27 -05:00
Sean Bright 8338f3ec14 res_hep: hepv3_is_loaded() should check if we are enabled
res_hep_pjsip.so and res_hep_rtcp.so will still load and do a lot of
unnecessary work even if 'enabled' is set to 'no' in hep.conf.

Change-Id: I3eddfeea09c6b5bc7c641952ee0ae487fd09b64b
2017-12-14 19:55:28 -05:00
Jenkins2 7377927b18 Merge "pjsip: Ignore state changes from old transactions." into 13 2017-12-14 18:20:52 -06:00
Corey Farrell 85dec2ae4f res_clialiases: Fix completion pass-through.
Never ignore contents of line when generating completion options.

Change-Id: I74389efdfea154019d3b56a9f381610614c044c8
2017-12-14 15:31:48 -06:00
Richard Mudgett 61e81338d9 res_rtp_asterisk.c: Disable packet flood detection for video streams.
We should not do flood detection on video RTP streams.  Video RTP streams
are very bursty by nature.  They send out a burst of packets to update the
video frame then wait for the next video frame update.  Really only audio
streams can be checked for flooding.  The others are either bursty or
don't have a set rate.

* Added code to selectively disable packet flood detection for video RTP
streams.

ASTERISK-27440

Change-Id: I78031491a6e75c2d4b1e9c2462dc498fe9880a70
2017-12-14 14:40:17 -06:00
Sean Bright 62e743e6a7 res_musiconhold: Start playlist after initial announcement
Reset the samples counter to zero when we are done playing an
announcement so that we don't skip into the middle of the first file in
the playlist.

Also add the selected annoucement to the output of 'moh show classes.'

ASTERISK-24329 #close
Reported by: Thomas Frederiksen

Change-Id: I2a5f986a31279c981592f49391409ebf38d6f6d0
2017-12-14 13:17:18 -05:00
Sean Bright 74073c395b coverity: Fix warnings in res_smdi
ASTERISK-19657 #close
Reported by: Matt Jordan III, Esq.

Change-Id: I59a5e6ef3e7d9e848bec1f4b40cb73321bc7956a
2017-12-14 11:51:02 -05:00
Sean Bright a1fcb7b5a6 configs: Comment out and change IP of iax.conf [demo]
This no longer appears to exist, so no sense in causing confusion.

ASTERISK-27175 #close
Reported by: Tzafrir Cohen

Change-Id: Idde967924c69f6a741dc9a5ab7dacb44d22cf100
2017-12-14 11:22:13 -05:00
Joshua Colp 9a016bd65e Merge "menuselect: Tweak check for recently run configure." into 13 2017-12-14 07:14:47 -06:00
Joshua Colp a35032816a Merge "README: Remove outdated references to tex docs" into 13 2017-12-14 06:36:09 -06:00
Jenkins2 9a68fa36d1 Merge "res_pjsip: Assign support levels to a few modules" into 13 2017-12-13 15:07:10 -06:00
George Joseph 6d290f1880 README: Remove outdated references to tex docs
Added links to the wiki to replace references to outdated
tex docs.

ASTERISK-27430
Reported by: Corey Farrell

Change-Id: I5007e732b30bc7b63d124c530ae8857c89991209
2017-12-13 13:26:04 -07:00
Jenkins2 c35fa1868e Merge "pjsip_options: contacts sometimes not being updated on reload" into 13 2017-12-13 14:22:18 -06:00
Jenkins2 53f1de6259 Merge "pjsip_options: dynamic contact's fields not updated on reload" into 13 2017-12-13 13:57:44 -06:00
Corey Farrell dd72844e4d CLI: Remove special handling of 'core set verbose' from rasterisk.
rasterisk does not need to handle setting verbose levels locally, it
should just tell the daemon what it wants and print what it is given.
Just max out the verbose level on the local client so all filtering
happens on the daemon.

ASTERISK-20281 #close

Change-Id: Ia305f75f1fc424a9169bfa30ef70d626ace2c8a8
2017-12-13 12:38:40 -06:00
Jenkins2 20ca06b1db Merge "CLI: Fix 'core show sysinfo' function ordering." into 13 2017-12-13 12:19:27 -06:00
Jenkins2 992b7197b7 Merge "chan_pjsip/res_pjsip: Add CHANNEL(pjsip,request_uri)" into 13 2017-12-13 10:18:37 -06:00
George Joseph e40bffd53b Merge "AST-2017-012: Place single RTCP report block at beginning of report." into 13 2017-12-13 07:51:39 -06:00
Jenkins2 9b94e440ae Merge "chan_sip: Don't crash in Dial on invalid destination" into 13 2017-12-13 07:36:12 -06:00
Joshua Colp 5705e8ae0e AST-2017-012: Place single RTCP report block at beginning of report.
When the RTCP code was transitioned over to Stasis a code change
was made to keep track of how many reports are present. This count
controlled where report blocks were placed in the RTCP report.

If a compound RTCP packet was received this logic would incorrectly
place a report block in the wrong location resulting in a write
to an invalid location.

This change removes this counting logic and always places the report
block at the first position. If in the future multiple reports are
supported the logic can be extended but for now keeping a count
serves no purpose.

ASTERISK-27382
ASTERISK-27429

Change-Id: Iad6c8a9985c4b608ef493e19c421211615485116
2017-12-13 13:11:48 +00:00
Jenkins2 2b8a152c69 Merge "chan_sip: Don't send trailing \0 on keep alive packets" into 13 2017-12-13 06:56:36 -06:00
Joshua Colp 7a68faeb1d pjsip: Ignore state changes from old transactions.
When we fail over to a new target we create a new transaction
and it becomes the current INVITE transaction. This does not
prevent the previous transaction from raising state changes
and causing the session to be prematurely disconnected if a
transport error occurs immediately.

This change backports a fix from PJSIP that eliminates the
incorrect state change and reduces when they would be raised
in the first place.

ASTERISK-27408

Change-Id: Id22d087591782eee31311753d11e7eca4b95ef34
2017-12-13 05:09:50 -06:00
Ivan Poddubny 7ffc41d19f app_queue: Fix extension state subscriptions removed on dialplan reload
The approach with having a single global subscription to all extension
state changes has one issue: dynamically created hints don't have any
watchers and are therefore garbage collected on the first dialplan
reload.

This change creates a state subscription for every queue member with a
hint as state_interface, thus increasing the count of watches for
hints, so they are not destroyed prematurely anymore.

There are 2 side effects:
1. The state change callback in app_queue is not executed when
   there are no members referring to the extension.
2. The callback is called multiple times for the same hint if it's
   associated with more than one queue member.

Reported by: Steven T. Wheeler

ASTERISK-18411 #close

Change-Id: I4956af2136ea2a7f110ac9272eae5f6e676d8f89
2017-12-12 16:05:56 -06:00
Sean Bright e1a358a6e4 chan_sip: Don't send trailing \0 on keep alive packets
This is a partial fix for ASTERISK~25817 but does not address the
comments regarding RFC 5626.

Change-Id: I227e2d10c0035bbfa1c6e46ae2318fd1122d8420
2017-12-12 15:51:41 -06:00
Sean Bright ce2c89ce68 chan_sip: Don't crash in Dial on invalid destination
Stripping the DNID in a SIP dial string can result in attempting to call
the argument parsing macros on an empty string, causing a crash.

ASTERISK-26131 #close
Reported by: Dwayne Hubbard
Patches:
	dw-asterisk-master-dnid-crash.patch (license #6257) patch
	uploaded by Dwayne Hubbard

Change-Id: Ib84c1f740a9ec0539d582b09d847fc85ddca1c5e
2017-12-12 16:23:23 -05:00
Corey Farrell 6632f61153 menuselect: Tweak check for recently run configure.
Recently menuselect has randomly produced an error stating that
configure was just run and make had to be restarted.  I believe this is
due to an incorrect menuselect/Makefile rule.  The original rule
produced an error if makeopts or autoconfig.h were older than
makeopts.in or autoconfig.h.in.  I believe this can create an issue if
makeopts is older than autoconfig.h.in or if autoconfig.h is older than
makeopts.in.  The new rules compare files independently.

Change-Id: Ibca155035fa1392c95e33cbf25f257902abba17b
2017-12-12 15:22:18 -06:00
Richard Mudgett 73b3390dbe chan_pjsip/res_pjsip: Add CHANNEL(pjsip,request_uri)
This patch does three things associated with the initial incoming INVITE
request URI.

1) Add access to the full initial incoming INVITE request URI.

2) We were not setting DNID on incoming PJSIP channels.  The DNID is the
user portion of the initial incoming INVITE Request-URI.  The value is
accessed by reading CALLERID(dnid).

3) Fix CHANNEL(pjsip,target_uri) documentation.

* The initial incoming INVITE request URI is now available using
CHANNEL(pjsip,request_uri).

* Set the DNID on PJSIP channel creation so CALLERID(dnid) can return the
initial incoming INVITE request URI user portion.

* CHANNEL(pjsip,target_uri) now correctly documents that the target URI is
the contact URI.

* Refactored print_escaped_uri() out of channel_read_pjsip() to handle
pjsip_uri_print() error condition when the buffer is too small.

ASTERISK-27478

Change-Id: I512e60d1f162395c946451becb37af3333337b33
2017-12-12 13:45:58 -06:00
Sean Bright ca448bf150 res_pjsip: Add TLSv1.1 and TLSv1.2 support
Support for these protocols was added in the same commit as the 'proto'
field, so we can safely use the same ./configure check.

For reference: https://trac.pjsip.org/repos/changeset/4968

Change-Id: Icf4975d785d6bfb8f30ac7ffa695a0adf9382dac
2017-12-12 12:44:20 -05:00
Sean Bright d9b932a455 res_pjsip: Assign support levels to a few modules
Change-Id: I51f6945c4023cb93fc7b87be5ab4c50e9e6ee27d
2017-12-12 11:07:01 -06:00
Corey Farrell 4decf4e492 CLI: Fix 'core show sysinfo' function ordering.
Handle CLI initialization before any processing occurs.

Change-Id: I598b911d2e409214bbdfd0ba0882be1d602d221c
2017-12-11 19:41:43 -06:00
Richard Mudgett 28eddc7ea6 stasis_channels.c: Don't set channel snapshot caller_dnid twice.
Change-Id: Ib8d45bbdfbda81e65045f6dff874d189b74e5471
2017-12-11 14:14:16 -06:00
Jenkins2 60acbeb431 Merge "codec_opus: Make libcurl a dependency in menuselect" into 13 2017-12-11 12:41:01 -06:00
Jenkins2 3bfddd9e73 Merge "astdb: Improve prefix searches in astdb" into 13 2017-12-11 11:42:27 -06:00
Jenkins2 84fe5f0219 Merge "loader: Refactor resource_name_match." into 13 2017-12-11 11:20:07 -06:00
Joshua Colp 8834a8eff9 Merge "res_stasis and res_speech: Fix load order." into 13 2017-12-11 10:39:36 -06:00
Jenkins2 90fe599e45 Merge "utils: Add convenience function for setting fd flags" into 13 2017-12-11 10:21:51 -06:00
Jenkins2 3b6fc78f4e Merge "pjsip: Improve CLI completion performance" into 13 2017-12-11 09:52:35 -06:00
Sean Bright 028f4320de codec_opus: Make libcurl a dependency in menuselect
ASTERISK-27475 #close

Change-Id: If7384bc6ed002ef140dec69798d14c52b7cfd800
2017-12-11 10:45:17 -05:00
Joshua Colp ed089535d4 Merge "CDR: Fix deadlock setting some CDR values." into 13 2017-12-11 08:51:11 -06:00
Sean Bright 4838557132 pjsip: Improve CLI completion performance
Use the new ast_cli_completion_add() function to improve completion
performance for commands like 'pjsip show endpoint.'

Change-Id: I76d802294d2ac1766110dc75f7d117c8541ce348
2017-12-10 13:56:51 -05:00
Sean Bright a4b291029f astdb: Improve prefix searches in astdb
Using the LIKE operator requires a full table scan of 'astdb', whereas a
comparison operation is able to use the primary key index.

This patch adds a new function to the AstDB API for quick prefix matches
and updates res_sorcery_astdb to utilize it. This showed substantial
performance improvement in my test environment.

Related to ASTERISK~26806, but does not completely resolve it.

Change-Id: I7d37f9ba2aea139dabf2ca72d31fbe34bd9b2fa1
2017-12-10 12:41:51 -06:00
Corey Farrell 9fc4f10e0e loader: Refactor resource_name_match.
Optimize resource_name_match.  This change eliminates use of
ast_strdupa, instead verifying that both basename's are the same length,
then using strncasecmp.

Change-Id: I477275c0e954c99d74be5abfc8bb6545b04e5a3d
2017-12-08 21:07:14 -06:00
Sean Bright c3bc44fa1b pjsip_configuration: Add correct file header
Change-Id: I25348c386a222bb704aff07f54375108a6402906
2017-12-08 15:58:54 -05:00
Sean Bright f726f11974 utils: Add convenience function for setting fd flags
There are many places in the code base where we ignore the return value
of fcntl() when getting/setting file descriptior flags. This patch
introduces a convenience function that allows setting or clearing file
descriptor flags and will also log an error on failure for later
analysis.

Change-Id: I8b81901e1b1bd537ca632567cdb408931c6eded7
2017-12-08 14:27:50 -05:00
Corey Farrell 3d79c34350 res_stasis and res_speech: Fix load order.
res_stasis was missing AST_MODFLAG_LOAD_ORDER.  Set res_stasis and
res_speech to start at (AST_MODPRI_APP_DEPEND - 1) so they are ready for
dependent modules.

Change-Id: I27f4f3810a95b6be8a5bfbf62be2ace6bfab6ff3
2017-12-07 20:41:58 -05:00
Kevin Harwell ecdccb8071 pjsip_options: contacts sometimes not being updated on reload
For both dynamic and static contacts it was possible that potential AOR
changes were not being applied to all contacts. This was because the qualify
and schedule code was only retrieving AOR's, and contacts with frequencies
greater than zero.

For instance the following could happen: and AOR/contact has a frequency of 5,
it then gets set to 0, and then a reload occurs. All scheduled OPTIONS are
stopped, a list of AOR's is retrieved with frequency > 0, but none are
selected since in this scenario all are 0. The contact for the one previously
set to 5 though does not get updated, so it's status remains "AVAILABLE".

This patch makes it so all contacts (static and dynamic) are selected, and
appropriately updated if need be.

ASTERISK-27467 #close

Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb
2017-12-07 18:39:50 -06:00
Kevin Harwell f20ab2b65f pjsip_options: dynamic contact's fields not updated on reload
Dynamic contacts were not being properly updated on reload. As a matter of
fact any changes to the AOR that a dynamic contact was associated with were
not being applied.

On reload, this patch makes it so for each dynamic contact, the associated
AOR is now retrieved and the AOR's fields are applied to the contact.

ASTERISK-27467

Change-Id: I8e3165dc6a745218c1c9db837f77fafa0516985d
2017-12-07 18:18:00 -06:00
Jenkins2 54a86779a3 Merge "translate: Skip matrix_rebuild during shutdown." into 13 2017-12-07 14:37:53 -06:00
Jenkins2 ac7501b15c Merge "CLI: Fix remote console completion." into 13 2017-12-07 14:19:53 -06:00
Jenkins2 9bf73ae1b3 Merge "sounds_index: Avoid repeatedly reindexing." into 13 2017-12-07 12:43:44 -06:00
Jenkins2 58addb1e38 Merge "media_index: Improve startup." into 13 2017-12-07 11:54:59 -06:00
Corey Farrell 5a0dcd9275 CLI: Fix remote console completion.
Duplicate checking was done incorrectly when parsing completion options
from a remote console causing all options to be ignored as duplicates.
Once fixed I had to separate processing of the best match to ensure it
was not identified as a duplicate when it is the only match.

ASTERISK-27465

Change-Id: Ibbdb29f88211742071836c9b3f4d2aa1221cd0f9
2017-12-07 11:26:50 -06:00
Corey Farrell 2691ee68ce translate: Skip matrix_rebuild during shutdown.
Change-Id: I1e5eef4029cba56e33d786c5a5ade8091e531a1e
2017-12-07 09:52:04 -06:00
Corey Farrell db6602f6f7 sounds_index: Avoid repeatedly reindexing.
The sounds index is rebuilt each time a format is registered or
unregistered.  This causes the index to be repeatedly rebuilt during
startup and shutdown.

This patch significantly reduces the work done by delaying sound index
initialization until after modules are loaded.  This way a reindex only
occurs if a format module is loaded after startup.  We also skip
reindexing when format modules are unloaded during shutdown.

Change-Id: I585fd6ee04200612ab1490dc804f76805f89cf0a
2017-12-07 00:39:02 -05:00
Corey Farrell 289549d659 media_index: Improve startup.
This eliminates some wasteful operations in media_index startup.

* Replace statically set string-fields with char[0].
* Eliminate pointless RAII_VAR's.
* alloc_variant: Avoid pointless ao2_find on new info->variant.
* Stop trying find_variant before alloc_variant.
* process_media_file: replace ast_str with ast_asprintf.  This avoids
  reallocation of file_id_str.

Overall sounds_index.c is about 27% of Asterisk startup time when using
sample configs.  This patch reduces it to 20%.  This is a half-fix.  The
real problem is that the media_index is regenerated repeatedly - 68
times in my test.

Change-Id: Ia50b752f8efb356f852b05c4be495a6631af8652
2017-12-06 23:35:53 -06:00
Richard Mudgett f59a75c6fa CDR: Fix deadlock setting some CDR values.
Setting channel variables with the AMI Originate action caused a deadlock
when you set CDR(amaflags) or CDR(accountcode).  This path has the channel
locked when the CDR function is called.  The CDR function then
synchronously passes the job to a stasis thread.  The stasis handling
function then attempts to lock the channel.  Deadlock results.

* Avoid deadlock by making the CDR function handle setting amaflags and
accountcode directly on the channel rather than passing it off to the CDR
processing code under a stasis thread to do it.

* Made the CHANNEL function and the CDR function process amaflags the same
way.

* Fixed referencing the wrong message type in cdr_prop_write().

ASTERISK-27460

Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f
2017-12-06 15:59:53 -06:00
Richard Mudgett 93859f9aca bridge_basic.c: Update transfer diagnostic messages addendum.
* Added start DTMF transfer verbose messages.
* Made associated transfer messages use a similar message format.
* Adjusted message verbose level as requested by initial reporter.

ASTERISK-27449

Change-Id: I2045714586414b3c5ef1f3cc56c1c4af4b31f551
2017-12-06 07:38:39 -06:00
Jenkins2 8e6aedbdcd Merge "bridge_basic.c: Update transfer diagnostic messages." into 13 2017-12-06 06:44:38 -06:00
Jenkins2 0ff3694979 Merge "Add new object for VoicemailUserEntry" into 13 2017-12-05 19:29:52 -06:00
Joshua Colp c4fe9ff002 Merge "res_rtp_asterisk.c: Increase strictrtp learning timeout time." into 13 2017-12-05 18:46:28 -06:00
Joshua Colp 466f9035f5 Merge "pjproject: Clean up disabling of WebRTC support." into 13 2017-12-05 18:21:00 -06:00
Niklas Larsson aacdbdcfd2 bridge_basic.c: Update transfer diagnostic messages.
* Add the channel name to diagnostic messages so you will know which
channel failed to transfer.

* Promoted some debug messages to verbose 4 messages.

ASTERISK-27449 #close

Change-Id: Idac66b7628c99379cc9269158377fd87dc97a880
2017-12-05 15:35:17 -06:00
Richard Mudgett 594faa192d security-events: Fix SuccessfulAuth using_password declaration.
The SuccessfulAuth using_password field was declared as a pointer to a
uint32_t when the field was later read as a uint32_t value.  This resulted
in unnecessary casts and a non-portable field value reinterpret in
main/security_events.c:add_json_object().  i.e., It would work on a 32 bit
architecture but not on a 64 bit big endian architecture.

Change-Id: Ia08bc797613a62f07e5473425f9ccd8d77c80935
2017-12-04 17:19:23 -06:00
Sungtae Kim e7201c93cc Add new object for VoicemailUserEntry
Currently, when the app_voicemail sending VoicemailUserEntry AMI event, there's
no OldMessageCount info for default.
To check the OldMessageCount info, it required IMAP_STORAGE define, but this is
not correct.
Added OldMessageCount item as a default.

ASTERISK-27456

Change-Id: I5c71521c2d1daf8b7b161e31c34d28cca6aea4c7
2017-12-04 12:24:22 -06:00
Joshua Colp c80595a852 Merge "res_rtp_asterisk: Correct default in sample configuration file." into 13 2017-12-04 11:42:26 -06:00
Richard Mudgett 9330eacc50 res_rtp_asterisk.c: Increase strictrtp learning timeout time.
More complicated direct media reinvite negotiations can result in longer
delays before direct media flows.  The strictrtp learning timeout time
was too short.  One log showed that the first RTP packet came in just
after three seconds.

* Increase the strictrtp learning timeout time from 1.5 to 5 seconds.

ASTERISK-27453

Change-Id: Ic5e711164cbb91b4d1c1e40c83697755640f138c
2017-12-04 10:40:39 -06:00
Jenkins2 43ffae44c7 Merge "README-SERIOUSLY.bestpractices.txt: Convert to markdown" into 13 2017-12-04 10:21:37 -06:00
Jenkins2 c0d1f447ba Merge "autoconf: Remove use of m4_ifblank." into 13 2017-12-04 09:02:27 -06:00
Jenkins2 7e4bd0cf69 Merge "config: Speed up config template lookup" into 13 2017-12-04 08:52:45 -06:00
Alexander Traud e819cf7826 res_rtp_asterisk: Correct default in sample configuration file.
With Asterisk 12 (commit 866d968), the default of "icesupport" changed to
- "yes" in the module "res_rtp_asterisk" and
- "no" in the module "chan_sip".
The latter was reflected in the sample configuration file for "sip.conf". The
former did not make it into "rtp.conf.sample".

ASTERISK-20643

Change-Id: I2a2e0a900455d0767a99ea576e30adc6d7608a36
2017-12-04 08:34:25 -06:00
Jenkins2 9e9dccd293 Merge "config: Speed up ACO & sorcery initialization" into 13 2017-12-04 08:01:11 -06:00
Jenkins2 59bb2c1920 Merge "res_http_post: Not all versions of gmime have GMIME_MAJOR_VERSION." into 13 2017-12-04 07:02:25 -06:00
Alexander Traud 64942276d1 chan_sip: Peers with distinct source ports don't match, regardless of transport.
Previously, peers connected via TCP (or TLS) were matched by ignoring their
source port. One cannot say anything when protocol:IP:port match, yes (see
<http://stackoverflow.com/q/3329641>). However, when the ports do not match, the
peers do not match as well.

This change allows two peers connected to an Asterisk server via TCP (or TLS)
behind a NAT (= same source IP address) to be differentiated via their port as
well.

ASTERISK-27457
Reported by: Stephane Chazelas

Change-Id: Id190428bf1d931f2dbfd4b293f53ff8f20d98efa
2017-12-04 06:00:34 -06:00
Joshua Colp 41c14fd807 pjproject: Clean up disabling of WebRTC support.
The definition in config_site.h and the argument to the
configure script are not necessary to disable WebRTC
support. The correct argument, --disable-libwebrtc, is
already passed.

ASTERISK-26980

Change-Id: I27da2c894f87914956a72710222e17462d8a44bc
2017-12-04 00:52:42 +00:00
Corey Farrell f5cfd87c4a autoconf: Remove use of m4_ifblank.
The m4_ifblank macro is not available on CentOS 6, reverse conditionals
to allow use of m4_ifval instead.  ./bootstrap.sh was run but this patch
does not result in any difference to the generated configure script.

Change-Id: I280785deb872ed8d3339d99cce63a2b54d5f1438
2017-12-02 15:59:55 -06:00
Corey Farrell ef25628b10 README-SERIOUSLY.bestpractices.txt: Convert to markdown
Follow-up to conversion of README.md.

Change-Id: I17ee7cf25bc027ece844efa2c1dfe613aff1e35b
2017-12-01 17:18:57 -05:00
George Joseph 0cdd31ee10 AST-2017-013: chan_skinny: Call pthread_detach when sess threads end
chan_skinny creates a new thread for each new session.  In trying
to be a good cleanup citizen, the threads are joinable and the
unload_module function does a pthread_cancel() and a pthread_join()
on any sessions that are active at that time.  This has an
unintended side effect though. Since you can call pthread_join on a
thread that's already terminated, pthreads keeps the thread's
storage around until you explicitly call pthread_join (or
pthread_detach()).   Since only the module_unload function was
calling pthread_join, and even then only on the ones active at the
tme, the storage for every thread/session ever created sticks
around until asterisk exits.

* A thread can detach itself so the session_destroy() function
  now calls pthread_detach() just before it frees the session
  memory allocation.  The module_unload function still takes care
  of the ones that are still active should the module be unloaded.

ASTERISK-27452
Reported by: Juan Sacco

Change-Id: I9af7268eba14bf76960566f891320f97b974e6dd
2017-12-01 12:00:24 -07:00
Sean Bright 6635ddc819 config: Speed up config template lookup
ast_category_get() has an (undocumented) implementation detail where it
tries to match the category name first by an explicit pointer comparison
and if that fails falls back to a normal match.

When initially building an ast_config during ast_config_load, this
pointer comparison can never succeed, but we will end up iterating all
categories twice. As the number of categories using a template
increases, this dual looping becomes quite expensive. So we pass a flag
to category_get_sep() indicating if a pointer match is even possible
before trying to do so, saving us a full pass over the list of current
categories.

In my tests, loading a file with 3 template categories and 12000
additional categories that use those 3 templates (this file configures
4000 PJSIP endpoints with AOR & Auth) takes 1.2 seconds. After this
change, that drops to 22ms.

Change-Id: I59b95f288e11eb6bb34f31ce4cc772136b275e4a
2017-12-01 12:13:33 -05:00
Sean Bright 077ceacd48 config: Speed up ACO & sorcery initialization
When starting Asterisk in the foreground, there is a perceptible delay
when loading modules that use the ACO and sorcery config frameworks.
For example, a lightly configured res_pjsip took 853ms to load on my
VM.

I tracked down the slowness to the XPath queries used to associate the
relevant documentation with the config options. One improvement was
adding a call to xmlXPathOrderDocElems after loading an XML document.
From the libxml2 docs:

  Call this routine to speed up XPath computation on static documents.

The second change was to remove recursive descent and wildcard
operators from the XPath queries. After these changes, res_pjsip takes
85ms to load on my VM and there is no longer a perceptible delay when
starting Asterisk in the foreground.

Change-Id: I45d457f1580e26bf5a2b0dab16e8e9ae46dcbd82
2017-12-01 09:29:43 -05:00
Joshua Colp dac70daf1b res_http_post: Not all versions of gmime have GMIME_MAJOR_VERSION.
This change makes the presence of the GMIME_MAJOR_VERSION
definition optional, as not all versions of gmime actually
define it.

ASTERISK-27454

Change-Id: I01d99590045971ed6787899147170a5954077238
2017-12-01 08:07:52 -04:00
Jenkins2 0f4152307a Merge "translate: Transcode siren14, speex32, silk24, and silk12 via slin16." into 13 2017-11-30 09:30:55 -06:00
Joshua Colp 8e979ce41b Merge "autoconf: Use m4 conditionals where possible." into 13 2017-11-30 09:02:48 -06:00
Jenkins2 838b0a41e0 Merge "autoconf: Fix call to AC_CONFIG_AUX_DIR." into 13 2017-11-30 08:32:08 -06:00
Jenkins2 749c544dbb Merge "translate: Show sample rate for silk, speex, and slin in translation table." into 13 2017-11-28 12:13:06 -06:00
Corey Farrell 6274e58a25 autoconf: Use m4 conditionals where possible.
Change-Id: I530c0a72f965437acef6a9a4fbfe5c487f078b65
2017-11-28 10:41:31 -05:00
Corey Farrell 635fe8ec87 autoconf: Fix call to AC_CONFIG_AUX_DIR.
The `pwd` parameter to AC_CONFIG_AUX_DIR is unnecessary, the default
value is $srcdir.

Additionally remove the AC_REVISION call.  It only added a comment and
is pointless without SVN tag replacements.

Change-Id: I99299a3217f095bddcb2edefb3b9af0ab147bc29
2017-11-28 10:40:25 -05:00
Joshua Colp 85ffedabd1 Merge "res_ari: Fix inverted test giving wrong error message." into 13 2017-11-27 16:55:57 -06:00
Joshua Colp 759468c45f Merge "CLI: Finish conversion of completion handling to vectors." into 13 2017-11-27 16:17:04 -06:00
Jenkins2 2edbaa1588 Merge "res_rtp_asterisk.c: Fix rtp source address learning for broken clients" into 13 2017-11-27 16:14:49 -06:00
Jenkins2 c9a531d03b Merge "features.conf.sample: Clarify ActivatedBy documentation wording." into 13 2017-11-27 15:27:07 -06:00
Jenkins2 c3a25ff753 Merge "CLI: Refactor cli_complete." into 13 2017-11-27 13:53:11 -06:00
Jenkins2 efb165a8a8 Merge "CLI: Rewrite ast_el_strtoarr to use vector's internally." into 13 2017-11-27 13:22:57 -06:00
George Joseph f1f88c40f6 Merge "CLI: Refactor ast_cli_display_match_list." into 13 2017-11-27 12:29:03 -06:00
Jenkins2 2e3f878423 Merge "CLI: Create ast_cli_completion_add function." into 13 2017-11-27 12:10:11 -06:00
George Joseph 635583dabd Merge "CLI: Remove calls to ast_cli_generator." into 13 2017-11-27 11:32:06 -06:00
George Joseph 9cbcd89587 Merge "add cmd connection creation on creation ooh323 call data structure" into 13 2017-11-27 10:51:49 -06:00
Joshua Colp 32bd372f3a Merge "pjsip: 183 without To tag does not negotiate media" into 13 2017-11-27 09:39:52 -06:00
Joshua Colp 13f3588150 Merge "Add defaultbranch to .gitreview." into 13 2017-11-27 09:03:03 -06:00
Alexander Traud c46cab49a3 translate: Transcode siren14, speex32, silk24, and silk12 via slin16.
When a format has no pre-recorded sound files, Asterisk has to transcode between
formats. For this, Asterisk has a fixed translation table. If the pre-recorded
sound files are not available in the same sample rate, Asterisk has not only to
transcode but also to resample.

Asterisk has pre-recorded files for SLN (8000 kHz) and SLN16 (16000 kHz).
However before this change, Asterisk did not take the sample rate into account,
because the translation paths to SLN and SLN16 got the same score/weight in the
table. Consequently, you might have got narrow-band audio with siren14, speex32,
silk24, and silk12 although those are (ultra) wide-band audio codecs.

With this change, the distance in sample-rates is taken into account. Now on the
Command-Line interface (CLI) 'core show channels', you should see:
(slin@16000)->(slin@32000)->(speex@32000).

ASTERISK-23735
Reported by: Richard Kenner

Change-Id: I9448295c1978be26f8633b6066395e7bbbe2e213
2017-11-26 11:48:34 -06:00
Richard Mudgett 81e2d8aa9a res_ari: Fix inverted test giving wrong error message.
The patch for ASTERISK_24560 inverted a test checking if the bridge name
is being updated to a different name.

* Fix the test to return "Changing bridge name is not implemented" when
someone attempts to change the bridge name.

ASTERISK-27445

Change-Id: I4b70bf08b0e02e016108b077ff75b345dec12fc9
2017-11-26 09:51:42 -06:00
Alexander Traud 0f719aa051 translate: Show sample rate for silk, speex, and slin in translation table.
ASTERISK-24662

Change-Id: I3822956984292c99c48bca8e97807e498ccc0e88
2017-11-25 04:10:33 -06:00
Joshua Colp ee3562619c Merge "res_parking: Make load_pri explicit." into 13 2017-11-23 13:34:35 -06:00
Richard Mudgett 8dd9a79e6e features.conf.sample: Clarify ActivatedBy documentation wording.
Change-Id: Id2899331fe05d1909a862ea879742879d086bc64
2017-11-23 13:28:23 -06:00
Joshua Colp 71871e1ea7 Merge "res_mwi_external_ami: Remove incorrect load priority." into 13 2017-11-23 11:50:02 -06:00
Joshua Colp 83dffa6088 Merge "Loader: Remove unneeded load_pri declarations." into 13 2017-11-23 10:42:06 -06:00
Joshua Colp fc180eb56a Merge "README: Convert to README.md." into 13 2017-11-23 09:55:17 -06:00
Joshua Colp 193073e851 Merge "res_rtp_asterisk: ICE server-reflexive candidates (srflx) with Dual-Stack." into 13 2017-11-23 09:12:42 -06:00
Joshua Colp 3cd7114490 Merge "chan_sip: ICE contained square brackets around IPv6 addresses." into 13 2017-11-23 08:45:33 -06:00
Corey Farrell a78d747ee8 Add defaultbranch to .gitreview.
This will cause `git review` to post changes to the branch it is based
on instead of always using master.  The defaultbranch setting should be
updated when new major branches are created.

Change-Id: I3db009217c5ae399fb84bee95076f4dbb7fa52d2
2017-11-22 20:02:24 -05:00
Alexander Anikin d6568aa72a add cmd connection creation on creation ooh323 call data structure
ASTERISK-27353 #close

Reported by: Marco Giordani

Change-Id: I455096bd7da016b871afe09af86067c2c7c9f33f
2017-11-23 03:47:09 +03:00
Kevin Harwell 5abab0a34c pjsip: 183 without To tag does not negotiate media
If a 183 with sdp response is receive without a To tag the sdp is not
negotiated. According to RFC 3261 section 12.1.2 while a To tag is required,
the client needs to still be able to handle the missing tag case for
backwards compatibility.

This patch, accepted by and applied to pjproject, makes it so if an incoming
180/183 with SDP comes in without a To tag it gets appropriately handled.

ASTERISK-27442 #close

Change-Id: Ic9d6b01e05e8f4874eebbd7adfe05d932025d203
2017-11-22 11:00:02 -06:00
Alexander Traud 6ebe03d4b3 res_rtp_asterisk: ICE server-reflexive candidates (srflx) with Dual-Stack.
Previously, Asterisk sent srflx only when configured exclusively for IPv4. Now,
srflx is gathered and sent via SDP, even when Asterisk is enabled for
Dual Stack (IPv4+IPv6) and an IPv4 interface is available/used.

ASTERISK-27437

Change-Id: Ie07d8e2bfa7b6fe06fcdc73d390a7a9a4d8c0bc1
2017-11-22 03:07:12 -06:00
Joshua Colp d2fb0ffb5b Merge "aoc: Remove silly usage of RAII_VAR." into 13 2017-11-21 11:16:08 -06:00
Corey Farrell 2bff38b8a8 res_parking: Make load_pri explicit.
res_parking has an implicit load_pri of 0 meaining it's one of the very
first modules loaded after modules with global symbols.  Set it
explicitly in the AST_MODULE_INFO block.

Change-Id: I297b6fb3ff6993ec004e667b22a74f5925906259
2017-11-21 11:30:49 -05:00
Joshua Colp 27491c6847 Merge "abstract_jb: Remove silly usage of RAII_VAR." into 13 2017-11-21 10:30:03 -06:00
Joshua Colp 3d429a5072 Merge "BuildSystem: pjsip_evsub_set_uas_timeout was not used." into 13 2017-11-21 09:53:54 -06:00
Joshua Colp db7a180ce2 Merge "app: Remove silly usage of RAII_VAR." into 13 2017-11-21 09:27:26 -06:00
Corey Farrell c6e1e6e968 README: Convert to README.md.
Convert the README file to markdown format, remove the old README.  This
causes websites like github to display the README in a much nicer
format with live links.  The raw file is still very readable from
plain text editors and terminals.

Change-Id: I7d13131764a9a9026e5f8a6ddb245a01bbd788e7
2017-11-21 10:17:28 -05:00
Corey Farrell e9ba6a6b88 CLI: Finish conversion of completion handling to vectors.
Change-Id: Ib81318f4ee52a5e73b003316e13fe9be1dd897a1
2017-11-21 09:56:31 -05:00
Corey Farrell 26a400c67a CLI: Refactor cli_complete.
* Stop using "_COMMAND NUMMATCHES" on remote consoles.  Using this
  command had doubled the amount of work needed from the Asterisk
  daemon for each completion request.
* Fix code formatting.
* Remove static buffer used to send the command, use the same buffer
  that will receive the results.
* Move sort from ast_cli_display_match_list.

Change-Id: Ie2211b519a3d4bec45bf46e0095bdd01d384cb69
2017-11-21 09:56:29 -05:00
Corey Farrell e723331f4f CLI: Rewrite ast_el_strtoarr to use vector's internally.
This rewrites ast_el_strtoarr to use vector's internally, but still
return the original NULL terminated array of strings.

Change-Id: Ibfe776cbe14f750effa9ca360930acaccc02e957
2017-11-21 09:56:26 -05:00
Corey Farrell e07d94111d CLI: Refactor ast_cli_display_match_list.
* Stop estimating line count, just print until we run out of matches.
* Stop freeing entries, the caller does that anyways.
* Stop calculating / returning numoutput, it was ignored.

Change-Id: I7f92afa8bea92241a95227587367424c8c32a5cb
2017-11-21 09:56:23 -05:00
Corey Farrell 8a63f4e709 CLI: Create ast_cli_completion_add function.
Some completion generators are very inefficent due to the way CLI
requests matches one at a time.  ast_cli_completion_add can be called
multiple times during one invokation of a CLI generator to add all
results without having to reinitialize the search state for each match.

Change-Id: I73d26d270bbbe1e3e6390799cfc1b639e39cceec
2017-11-21 09:47:40 -05:00
Corey Farrell 115f53a0fb CLI: Remove calls to ast_cli_generator.
The ability to add to localized storage cannot be supported by
ast_cli_generator.  The only calls to ast_cli_generator should be by
functions that need to proxy the CLI generator, for example 'cli check
permissions' or 'core show help'.

* ast_cli_generatornummatches now retrieves the vector of matches and
  reports the number of elements (not including 'best' match).
* test_substitution retrieves and iterates the vector.

Change-Id: I8cd6b93905363cf7a33a2d2b0e2a8f8446d9f248
2017-11-21 09:47:38 -05:00
Joshua Colp 0fd8db7ec2 Merge "ccss: Remove silly usage of RAII_VAR." into 13 2017-11-21 08:17:23 -06:00
Joshua Colp a8ac9a551d Merge "cli: Remove silly usage of RAII_VAR." into 13 2017-11-21 07:55:03 -06:00
Joshua Colp 090ce0cd1b Merge "loader: Fix comments in struct ast_module." into 13 2017-11-21 07:14:32 -06:00
Joshua Colp 4e6a0d5683 Merge "menuselect: Remove ineffective weak attribute detection." into 13 2017-11-21 06:50:53 -06:00
Joshua Colp 29bf57ff2f Merge "CLI: Create ast_cli_completion_vector." into 13 2017-11-21 05:23:58 -06:00
Joshua Colp 4045cb4df9 Merge "README: Send people to secure websites where available." into 13 2017-11-21 05:23:50 -06:00
Joshua Colp 3ce96d2e03 Merge "Build: Fix issues building without SSL." into 13 2017-11-21 05:23:28 -06:00
Joshua Colp 1aba7dd229 Merge "Build: Fix OSX build issues." into 13 2017-11-21 05:23:18 -06:00
Alexander Traud 41498dcb5d chan_sip: ICE contained square brackets around IPv6 addresses.
ASTERISK-27434

Change-Id: Iaeed89b4fa05d94c5f0ec2d3b7cd6e93d2d5a8f7
2017-11-21 03:53:52 -06:00
Corey Farrell 84fd41729e loader: Fix comments in struct ast_module.
Make the comments follow doxygen format, move comments to the line
before each field they describe.

Change-Id: Ic445468398b5e88f13910f7c2f70bd15aad33a27
2017-11-20 19:25:02 -05:00
Joshua Colp 1e68c8e738 Merge "res_pjsip: Use sorcery prefix operation for contact lookup" into 13 2017-11-20 16:53:25 -06:00
Joshua Colp 9b34aaddd9 Merge changes from topic 'alloc-check-acl' into 13
* changes:
  acl: Fix allocation related issues.
  acl: Update logger message to match 15+.
2017-11-20 16:48:15 -06:00
Corey Farrell df6161b70e cli: Remove silly usage of RAII_VAR.
Change-Id: I81aacfee7cd26e4fc5eef07bca582700c2975bd7
2017-11-20 15:32:29 -05:00
Joshua Colp da89afc2e2 Merge "bridge_basic: Ignore answer from transfer target when they've timed out." into 13 2017-11-20 14:30:05 -06:00
Corey Farrell 1e2b38adf5 ccss: Remove silly usage of RAII_VAR.
Change-Id: I5ce40035e0a940e4e56f6322c1dcd47fbd509b98
2017-11-20 15:25:57 -05:00
Corey Farrell ddc86ec664 app: Remove silly usage of RAII_VAR.
Change-Id: Ideb594f7aae134974fb78d5477ba0853b97b8625
2017-11-20 15:09:02 -05:00
Corey Farrell 0e90d74604 aoc: Remove silly usage of RAII_VAR.
Change-Id: I07907f833b81aeb0128bc9442a2abb52679c7511
2017-11-20 15:05:14 -05:00
Corey Farrell 746dd80eab abstract_jb: Remove silly usage of RAII_VAR.
Change-Id: I9d56175369363d1dc735504cf78a3a5577069f49
2017-11-20 15:02:21 -05:00
Joshua Colp bef287ccf2 Merge "doxygen: Remove obsolete contents." into 13 2017-11-20 13:46:22 -06:00
Corey Farrell 8971a7ff3c Loader: Remove unneeded load_pri declarations.
Instead of specifying AST_MODFLAG_LOAD_ORDER with load_pri
AST_MODPRI_DEFAULT just use AST_MODFLAG_DEFAULT.

Change-Id: I0123258eafce324249433a69df15a85cc16e509f
2017-11-20 14:10:09 -05:00
Corey Farrell 9d688cf12c res_mwi_external_ami: Remove incorrect load priority.
res_mwi_external_ami specified AST_MODFLAG_LOAD_ORDER but didn't set
load_pri, resulting in an actual load priority of 0.  This module only
provides AMI actions so it has no reason to load early.

Change-Id: I82987fcf10d3ea42716b2f9df915b16687fd5839
2017-11-20 14:08:57 -05:00
Joshua Colp 3356c796a0 Merge "res_fax: Remove checks for unsigned values being >= 0." into 13 2017-11-20 12:51:18 -06:00
Joshua Colp be3a33f3d1 Merge "res_snmp: Declare RONLY if net-snmp headers do not." into 13 2017-11-20 12:18:22 -06:00
Joshua Colp b611cd6f9c Merge "tests: Fix warnings found on Mac." into 13 2017-11-20 11:32:47 -06:00
Joshua Colp 9c8894c4af Merge "app_minivm: Fix possible uninitialized return value." into 13 2017-11-20 10:22:12 -06:00
Alexander Traud 50cb5199c1 BuildSystem: pjsip_evsub_set_uas_timeout was not used.
ASTERISK-27435

Change-Id: Id318a7ae6d7d69b53f911d30bf3eece64852f15c
2017-11-20 09:56:30 -06:00
Joshua Colp e0f9d4d808 Merge "res_pjsip: Fix warning by deferring implicit type cast." into 13 2017-11-20 09:44:36 -06:00
Corey Farrell 6a5ab65c88 Build: Fix issues building without SSL.
* Fix conditional in libasteriskssl.
* Use variables produced by configure to link the SSL and uuid libraries
  into libasteriskpj.so instead of hard-coding them.

ASTERISK-27431

Change-Id: I3977931fd3ef8c4e4376349ccddb354eb839b58d
2017-11-19 15:19:46 -05:00
Corey Farrell 366cc259bc res_pjsip: Fix warning by deferring implicit type cast.
Mac doesn't like the comparison of -1 to an enum, so store the result of
ast_sip_str_to_dtmf to an int so we can check for the negative return
value.  ast_sip_str_to_dtmf returns an int so this is only delaying the
implicit type cast.

Change-Id: I0c262c1719ee951aae1f437d733a301cf5f8ad29
2017-11-19 14:28:41 -05:00
Corey Farrell 69113388e9 Build: Fix OSX build issues.
OSX does not support 'readlink -f' or 'sed -r'.  Replace readlink with
the GNU make macro 'realpath'.  Replace sed with grep in one place, cut
in the other.

ASTERISK-27332

Change-Id: I5d34ecca905384decb22ead45c913ae5e8aff748
2017-11-19 14:27:28 -05:00
Corey Farrell 5fe2e7bfdc tests: Fix warnings found on Mac.
test_pbx used raise without explicitly including signal.h.  On Mac for
some reason nothing else includes it.

test_logger checked if an unsigned int was negative.  Switch the
variable to 'int' so that error check can be effective.

Change-Id: Ie1db5dd1818ac25cc2ae41b644f848b5865b1362
2017-11-18 21:16:03 -06:00
Corey Farrell d68e54b7ab res_snmp: Declare RONLY if net-snmp headers do not.
Some net-snmp builds do not provide the RONLY declare, only
NETSNMP_OLDAPI_RONLY.  Map RONLY to NETSNMP_OLDAPI_RONLY to get around
this error.

Change-Id: Ida5c7ad9406515825485c4d3b4a34fd6ad0da577
2017-11-18 20:28:30 -06:00
Corey Farrell 0f270cbe9e res_fax: Remove checks for unsigned values being >= 0.
It's impossible for gwtimeout or fdtimeout to be less than 0 because
they are unsigned int's.  Remove checks and unreachable branches.

Change-Id: Ib2286960621e6ee245e40013c84986143302bc78
2017-11-18 20:05:11 -06:00
Corey Farrell 3dca4c7742 app_minivm: Fix possible uninitialized return value.
Declare 'res' initialized to -1 to deal with earlier error paths that
could cause 'res' to be returned uninitialized.

Change-Id: I8ac2a5755bf4174d89ef893e924c940f702b104e
2017-11-18 19:37:06 -06:00
Corey Farrell 5f0b4a1645 README: Send people to secure websites where available.
We should be sending people to secure web URL's where available.
Update README's and docs.

Change-Id: Id5b1e049b0b18b49a784f1254605aefa244ce19a
2017-11-17 21:11:13 -05:00
Corey Farrell a369bfc4b2 doxygen: Remove obsolete contents.
Remove doxygen contents that have nothing to do with the current state
of Asterisk.

Change-Id: Ic072cc8641f9533a202990ccf275ce87e3efd95c
2017-11-17 20:58:28 -05:00
Pirmin Walthert 6b0963c42a res_rtp_asterisk.c: Fix rtp source address learning for broken clients
Some clients do not send rtp packets every ptime ms. This can lead to
situations in which the rtp source learning algorithm will never learn
the address of the client. This has been discovered on a Mac mini with
a pjsip based softphone after updating to Sierra: as soon as USB
headsets are involved, the softphone will send the second packet 30ms
after the first, the third 30ms after the second and the fourth 1ms
after the third. So in the old implmentation the rtp source learning
algorithm was repeatedly reset on the fourth packet.

The patch changes the algorithm in a way that doesn't take the arrival
time between two consecutive packets into account but the time between
the first and the last packet of a learning sequence.

The patch also fixes a second problem: when a user was using a wrong
value for the probation setting there was a LOG_WARNING output stating
that the value had been set to the default value instead. However
the code for setting the value back to defaults was missing.

ASTERISK-27421 #close

Change-Id: If778fe07678a6fd2041eaca7cd78267d0ef4fc6c
2017-11-18 00:01:30 +01:00
Sean Bright 3c72064d3f res_pjsip: Use reasonable buffer lengths for endpoint identification
Domains themselves can be up to 255 characters long (per RFC 1035), so
our current buffer sizes are wholly inadequate for many use cases.

Change-Id: If3f30a68307f1365a1fe06bc4b854c62842c9292
2017-11-17 11:22:10 -05:00
Corey Farrell 455b1bdeb0 menuselect: Remove ineffective weak attribute detection.
menuselect detects compiler support for multiple styles of weak
functions.  This is a remnant from 2013 when OPTIONAL_API required weak
functions.  It is no longer correct for menuselect to switch
dependencies from optional to required based on lack of weak function
support.

Note an issue remains - dependencies should switch from optional to
required based on OPTIONAL_API being enabled or disabled.  I don't think
this is possible.  menuselect needs to know at startup if OPTIONAL_API
is enabled or disabled, so the only way to fix this is to remove
OPTIONAL_API from menuselect and create a configure option.  I've left
the code that switches in place but it's preprocessed out.

Additionally removed:
- WEAKREF variable from Asterisk makeopts.in.
- Related disabled code from test_utils.
- Pointless AC_REVISION call from menuselect/configure.ac.

Change-Id: Ifa702e5f98eb45f338b2f131a93354632a8fb389
2017-11-17 10:48:33 -05:00
Joshua Colp ef8ee3ee69 Merge "Build: Make function constructor/destructor attributes mandatory." into 13 2017-11-17 09:18:39 -06:00
Corey Farrell 549542e50e acl: Fix allocation related issues.
Add checks for allocation errors, cleanup and report failure when they
occur.

* ast_duplicate_acl_list: Replace log warnings with errors, add missing
  line-feed.
* ast_append_acl: Add missing line-feed to logger message.
* ast_append_ha: Avoid ast_strdupa in loop by moving debug message to
  separate function.
* ast_ha_join: Use two separate calls to ast_str_append to avoid using
  ast_strdupa in a loop.

Change-Id: Ia19eaaeb0b139ff7ce7b971c7550e85c8b78ab76
2017-11-17 09:35:22 -05:00
Corey Farrell 2852dac480 acl: Update logger message to match 15+.
This patch causes a logger message to be the same as it is in 15+.  This
will allow a follow-up patch to be cherry-picked to all 3 branches.

Change-Id: Ic0665a3d49987e4eb6df28dcd9e90b1c3ca191e0
2017-11-17 09:34:25 -05:00
Corey Farrell 0b8b153d3c CLI: Create ast_cli_completion_vector.
This is a rewrite of ast_cli_completion_matches using a vector to build
the list.  The original function calls the vector version, NULL
terminates the vector and extracts the elements array.

One change in behavior the results are now sorted and deduplicated. This
will solve bugs where some duplicate checking was done before the list
was sorted.

Change-Id: Iede20c5b4d965fa5ec71fda136ce9425eeb69519
2017-11-17 09:28:43 -05:00
Jenkins2 2e9c7f9b8f Merge "aoc: Fix memory management issues." into 13 2017-11-17 06:50:57 -06:00
Joshua Colp 0a7bbb068b bridge_basic: Ignore answer from transfer target when they've timed out.
This is a fun one.

Given the following attended transfer scenario:

1. Transfer target is called
2. Transferer hangs up
3. Transfer target call attempt reaches timeout
4. Transfer target is told to hang up
5. Transfer target answers before channel is hung up
6. Transferer recall target is called

A crash would occur. This is because the transfer target call
attempt, despite being told to hang up, would raise a recall
target answer before the recall target had been answered. As it
had not answered there would be no recall target channel and it
would implode.

This change makes it so that if the transfer target has been
hung up we don't tell the attended transfer code that it has
answered. We also clear out the stimulus that the recall target
has been answered after telling the transfer target to hang up,
in case it was able to raise the information before we told it
to hangup.

ASTERISK-27361

Change-Id: Ifb8b255a9c4d2c5c1b8ad77bf54f659ed286df99
2017-11-17 12:42:25 +00:00
Corey Farrell 69055724ce aoc: Fix memory management issues.
aoc_publish_blob failed to check for msg allocation error and never
released msg.

Change-Id: Ib31a9ffb81056a0d496a49d7eec795005a44bcd5
2017-11-16 21:34:41 -05:00
Sean Bright 60cfe00c4e res_pjsip_transport_websocket: Give transport a meaningful description
We were not \0 terminating this string, so any attempt to print it would
in the best case show an empty string and in the worst case potentially
crash.

Change-Id: I63d96ef8f7516ac02a0f91e22dfa8acdc615042c
2017-11-16 17:29:06 -05:00
Sean Bright db2677133c res_pjsip: Use sorcery prefix operation for contact lookup
This improves performance for registrations assuming that
res_config_astdb is not in use.

Change-Id: I86f37aa9ef07a4fe63448cb881bbadd996834bb1
2017-11-16 16:48:29 -05:00
Joshua Colp 71c0478a04 Merge "ast_coredumper: Add ability to use directory other than /tmp" into 13 2017-11-16 15:44:27 -06:00
Joshua Colp 8d55b132b9 Merge "sorcery: Add ast_sorcery_retrieve_by_prefix()" into 13 2017-11-16 10:59:23 -06:00
Jenkins2 9fb2da7963 Merge "pjsip / hep: Provide correct local address for Websockets." into 13 2017-11-16 10:57:28 -06:00
Jenkins2 cb74309a51 Merge "chan_pjsip.c: Improve answer failure log messages." into 13 2017-11-16 09:29:16 -06:00
Joshua Colp 5df5f3e86d Merge "audiohook.c: Fix freeing a frame and still using it." into 13 2017-11-16 07:58:57 -06:00
Richard Mudgett 8a7dd5cc44 chan_pjsip.c: Improve answer failure log messages.
* Balanced the session->inv_session refs on answer failure.

Change-Id: I33542d639d37e692cb46550b972a5fcfc3b804b8
2017-11-15 16:50:51 -06:00
Richard Mudgett 7f916d621a audiohook.c: Fix freeing a frame and still using it.
Memory corruption happened to the media frame caches when an audio hook
freed a frame when it shouldn't.  I think the freed frame was because a
jitter buffer interpolated a missing frame and the audio hook
unconditionally freed it.

* Made audiohook.c:audio_audiohook_write_list() not free an interpolated
frame if it is the same frame as what was passed into the routine.

* Made plc.c:normalise_history() use memmove() instead of memcpy() on a
memory block that could overlap.  Found by valgrind investigating this
issue.

ASTERISK-27238
ASTERISK-27412

Change-Id: I548d86894281fc4529aefeb9f161f2131ecc6fde
2017-11-15 16:06:41 -06:00
George Joseph 7e874eae7a app_record: Don't set RECORD_STATUS chan var until file is closed
We've been calling pbx_builtin_setvar_helper to set the
RECORD_STATUS variable before actually closing the recorded file.
If a client is watching VarSet events and tries to do something with
the file when a RECORD_STATUS event is seen, they might attempt to
do so while the file it's still open.

We now delay calling pbx_builtin_setvar_helper until after we close
the file.

ASTERISK-27423

Change-Id: I7fe9de99953e46b4bafa2b38cf151fe8f6488254
2017-11-15 13:03:19 -07:00
George Joseph 062a4390ac ast_coredumper: Add ability to use directory other than /tmp
The OUTPUTDIR environment variable can now be set either in the
environment itself or in ast_debug_tools.conf.  If set, it's used
for all work products instead of /tmp.

Also added the --tarball-config option that includes the contents
of /etc/asterisk when either --tarball-coredumps or --tarball-results
are used.

Change-Id: I66b2553319df61caea5b313d084f51978f730b4c
2017-11-15 08:43:31 -07:00
Torrey Searle e7f8302d30 contrib/script/sip_to_pjsip: add support for realtime
Add a new script that can read from legacy realtime peers & generate
an sql file for populating pjsip endpoints, identify, and aor records.

ASTERISK-27348 #close

Change-Id: Idd3d7968a3c9c3ee7936d21acbdaf001b429bf65
2017-11-15 14:47:13 +01:00
Joshua Colp e25ec49b62 Merge "bundled_pjproject: Update to 2.7.1" into 13 2017-11-14 17:13:49 -06:00
Jenkins2 57fe717471 Merge "bundled_pjproject: sip_parser: Fix return code in pjsip_find_msg" into 13 2017-11-14 13:54:24 -06:00
Jenkins2 d74b50ecf7 Merge "core: Fix configuration of remote console socket path." into 13 2017-11-14 10:19:21 -06:00
Jenkins2 d7303f6337 Merge "pjsip: Add patch to allow all transports to be destroyed." into 13 2017-11-14 08:52:30 -06:00
Joshua Colp f233e421dd Merge "core: Add cache_media_frames debugging option." into 13 2017-11-14 07:15:40 -06:00
Joshua Colp c2dddb001a pjsip / hep: Provide correct local address for Websockets.
Previously for PJSIP the local address of WebSocket connections
was set to the remote address. For logging purposes this is
not particularly useful.

The WebSocket API has been extended to allow the local
address to be queried and this is used in PJSIP to set the
local address to the correct value.

The PJSIP HEP support has also been tweaked so that reliable
transports always use the local address on the transport
and do not try to (wrongly) guess. As they are connection
based it is impossible for the source to be anything else.

ASTERISK-26758
ASTERISK-27363

Change-Id: Icd305fd038ad755e2682ab2786e381f6bf29e8ca
2017-11-14 12:09:22 +00:00
Corey Farrell b8209a1273 alertpipe: Correct documented return of ast_alertpipe_write.
Change-Id: I4ea49c441890a81384144479dc93ab5a3989486d
2017-11-13 18:48:16 -05:00
Jenkins2 4aadd2e495 Merge "vectors: Add new macro and a string vector definition." into 13 2017-11-13 16:58:36 -06:00
Corey Farrell 9c6d4ec022 core: Fix configuration of remote console socket path.
The remote console socket path is the combination of asterisk.conf
settings astrundir from [directories] and astctl from [files].
Unconditionally combine the two strings after processing all values
to ensure we end up with the correct socket path.

ASTERISK-27415

Change-Id: Ib1e2805d55d6b0955c6430a1a2a93acbf9b091e8
2017-11-13 17:28:16 -05:00
Jenkins2 c7b7aefbc7 Merge "menuselect: Delete and ignore aclocal.m4." into 13 2017-11-13 16:01:51 -06:00
George Joseph b5f2779a23 bundled_pjproject: sip_parser: Fix return code in pjsip_find_msg
The default return code for pjsip_find_msg was PJ_SUCCESS so if
a Content-Length header wasn't found at all, pjsip_find_msg was
returning PJ_SUCCESS instead of PJSIP_EMISSINGHDR.

Also added the volatile keyword to a few variables that are used
both inside and outside the PJ_TRY/PJ_CATCH block.

Partial fix for ASTERISK_27408

Change-Id: If82ba9de921e3d57df9c68cf96ee45ccc1491f7a
2017-11-13 14:50:18 -07:00
Ben Ford e6ada55430 bundled_pjproject: Update to 2.7.1
Update from 2.7 to 2.7.1 for bundled pjproject. Changed version
and removed patch files included in the update.

Change-Id: I55cea8e734b318c2df9daf86aa0802c559ec8357
2017-11-13 14:35:14 -06:00
Sean Bright cf062303e3 sorcery: Add ast_sorcery_retrieve_by_prefix()
Some consumers of the sorcery API use ast_sorcery_retrieve_by_regex
only so that they can anchor the potential match as a prefix and not
because they truly need regular expressions.

Rather than using regular expressions for simple prefix lookups, add
a new operation - ast_sorcery_retrieve_by_prefix - that does them.

Patches against 13 and 15 have a compatibility layer needed to
maintain ABI that is not needed in master.

Change-Id: I56f4e20ba1154bd52281f995c27a429a854f6a79
2017-11-13 15:08:50 -05:00
Corey Farrell 2ad6210dd7 vectors: Add new macro and a string vector definition.
* AST_VECTOR_STEAL_ELEMENTS - steal the array of elements for use
  with non-vector code.
* struct ast_vector_string - a vector of 'char *'.

Change-Id: I104d1b204be03fccf67e02a195596adcb5ab1e42
2017-11-13 13:38:26 -05:00
Corey Farrell 76e640bd53 Build: Make function constructor/destructor attributes mandatory.
This change causes the configure script to fail if the C compiler does
not support both function attributes constructor and destructor.  These
were already required as modules cannot function without these attributes
and Asterisk requires modules.

This also has AST_GCC_ATTRIBUTE set a variable
ax_cv_have_func_attribute_$1.  This is the same variable name used by
autoconf-archive's AX_GCC_FUNC_ATTRIBUTE, used for the same purpose.

Change-Id: Id68e8a1447f2a6d707c54b56350e7bfdb33fb663
2017-11-13 08:57:29 -05:00
Joshua Colp b1743cb3c7 Merge "Build System: Disable parallel make in the root Makefile." into 13 2017-11-13 07:20:47 -06:00
Jenkins2 bcd2241c47 Merge "res_pjsip_pubsub: Ensure remote URI contains URI only." into 13 2017-11-13 06:32:28 -06:00
Corey Farrell b03d389bec menuselect: Delete and ignore aclocal.m4.
This file is temporary output from the bootstrap.sh command, it does not
need to be committed.

Change-Id: Ie0fd113aff6eac44924c0bd0c900833c6c86a6d9
2017-11-11 17:34:48 -05:00
Richard Mudgett 507d9b5f9e core: Add cache_media_frames debugging option.
The media frame cache gets in the way of finding use after free errors of
media frames.  Tools like valgrind and MALLOC_DEBUG don't know when a
frame is released because it gets put into the cache instead of being
freed.

* Added the "cache_media_frames" option to asterisk.conf.  Disabling the
option helps track down media frame mismanagement when using valgrind or
MALLOC_DEBUG.  The cache gets in the way of determining if the frame is
used after free and who freed it.  NOTE: This option has no effect when
Asterisk is compiled with the LOW_MEMORY compile time option enabled
because the cache code does not exist.

To disable the media frame cache simply disable the cache_media_frames
option in asterisk.conf and restart Asterisk.

Sample asterisk.conf setting:
[options]
cache_media_frames=no

ASTERISK-27413

Change-Id: I0ab2ce0f4547cccf2eb214901835c2d951b78c00
2017-11-11 13:45:22 -06:00
Richard Mudgett bb2173275a frame.c: Make ast_frame_free()/ast_frfree() NULL tolerant
Change-Id: Ic49d821ef88ada38a31bdd835b9531443c55d793
2017-11-11 13:03:31 -06:00
Jenkins2 1250b7c664 Merge "chan_pjsip.c: Fix uninitialized cause value on failure." into 13 2017-11-10 08:18:04 -06:00
Joshua Colp 360d50d74c pjsip: Add patch to allow all transports to be destroyed.
If a transport is created with the same transport type, source
IP address, and source port as one that already exists the old
transport is moved into a linked list called "tp_list".

If this old transport is later shutdown it will not be destroyed
as the process checks whether the transport is valid or not. This
check does not look at the "tp_list" when making the determination
causing the transport to not be destroyed.

This change updates the logic to query not just the main storage
method for transports but also the "tp_list".

Upstream issue https://trac.pjsip.org/repos/ticket/2061

ASTERISK-27411

Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429
2017-11-10 13:15:04 +00:00
Corey Farrell 211f5d8dd4 core: Remove disabled code.
handle_quit has been disabled since 2003, remove it.

Change-Id: Idc3aaa6c81676160547078f9b71e8aa43de2db18
2017-11-09 21:38:11 -05:00
Jenkins2 6cce744401 Merge "stasis_bridges.c: Fix off-nominal json memory leaks." into 13 2017-11-09 17:44:16 -06:00
Corey Farrell d12be40750 Build System: Disable parallel make in the root Makefile.
This ensures that the root Makefile runs only a single target at a time.
SUBMAKE will still honor requested parallelism, so 'make -j8' will build
one directory at a time but allow 8 jobs at once when building a sub
directory.

This will fix some display glitches related to rebuild of XML
documentation.  It will also prevent some edge case errors where
bundled pjproject needs to be rebuild before other parts of Asterisk.

Change-Id: I4f2ec6fbbec1ada0ccb1109a28ea303524239b1e
2017-11-09 14:30:18 -05:00
Kevin Harwell e3bc8f7815 Merge "res_pjsip_registrar.c: Fix named AOR and pjproject group deadlock." into 13 2017-11-09 11:48:50 -06:00
Richard Mudgett 32042c6c3c chan_pjsip.c: Fix uninitialized cause value on failure.
Change-Id: I3f9dd3c31bd582e54a30381500077de2319d8cc3
2017-11-09 07:39:59 -06:00
Joshua Colp 7296d3e5af Merge "res_pjsip_history: Fix multiple leaks on vector append failure." into 13 2017-11-09 03:44:21 -06:00
Jenkins2 88d3773330 Merge "res_pjsip_pubsub: Fix multiple leaks on failure to append vectors." into 13 2017-11-08 20:56:26 -06:00
George Joseph 67d12d1437 Merge "AST-2017-009: pjproject: Add validation of numeric header values" into 13 2017-11-08 09:52:22 -06:00
George Joseph 62e70c70a5 Merge "AST-2017-011 - res_pjsip_session: session leak when a call is rejected" into 13 2017-11-08 09:44:40 -06:00
George Joseph b2fbf1afd7 Merge "AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun" into 13 2017-11-08 08:26:10 -06:00
Jenkins2 936a85419e Merge "res_pjproject.c: Fix ast_strdup() alloc failure." into 13 2017-11-08 07:06:15 -06:00
Jenkins2 cdafec0f7a Merge "res_pjsip_outbound_registration: Fix leak on vector add failure." into 13 2017-11-08 07:03:37 -06:00
Kevin Harwell 4b3e03ae87 AST-2017-011 - res_pjsip_session: session leak when a call is rejected
A previous commit made it so when an invite session transitioned into a
disconnected state destruction of the Asterisk pjsip session object was
postponed until either a transport error occurred or the event timer
expired. However, if a call was rejected (for instance a 488) before the
session was fully established the event timer may not have been initiated,
or it was canceled without triggering either of the session finalizing states
mentioned above.

Really the only time destruction of the session should be delayed is when a
BYE is being transacted. This is because it's possible in some cases for the
session to be disconnected, but the BYE is still transacting.

This patch makes it so the session object always gets released (no more
memory leak) when the pjsip session is in a disconnected state. Except when
the method is a BYE. Then it waits until a transport error occurs or an event
timeout.

ASTERISK-27345 #close

Reported by: Corey Farrell

Change-Id: I1e724737b758c20ac76d19d3611e3d2876ae10ed
2017-11-08 05:46:37 -07:00
Richard Mudgett 2b85799512 AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun
cdr_object_update_party_b_userfield_cb() could overrun the fixed buffer if
the supplied string is too long.  The long string could be supplied by
external means using the CDR(userfield) function.

This may seem reminiscent to AST-2017-001 (ASTERISK_26897) and it is.  The
earlier patch fixed the buffer overrun for Party A's userfield while this
patch fixes the same thing for Party B's userfield.

ASTERISK-27337

Change-Id: I0fa767f65ecec7e676ca465306ff9e0edbf3b652
2017-11-08 05:37:52 -07:00
George Joseph 2faa3e3bab AST-2017-009: pjproject: Add validation of numeric header values
Parsing the numeric header fields like cseq, ttl, port, etc. all
had the potential to overflow, either causing unintended values to
be captured or, if the values were subsequently converted back to
strings, a buffer overrun.  To address this, new "strto" functions
have been created that do range checking and those functions are
used wherever possible in the parser.

 * Created pjlib/include/limits.h and pjlib/include/compat/limits.h
   to either include the system limits.h or define common numeric
   limits if there is no system limits.h.

 * Created strto*_validate functions in sip_parser that take bounds
   and on failure call the on_str_parse_error function which prints
   an error message and calls PJ_THROW.

 * Updated sip_parser to validate the numeric fields.

 * Fixed an issue in sip_transport that prevented error messages
   from being properly displayed.

 * Added "volatile" to some variables referenced in PJ_CATCH blocks
   as the optimizer was sometimes optimizing them away.

 * Fixed length calculation in sip_transaction/create_tsx_key_2543
   to account for signed ints being 11 characters, not 9.

ASTERISK-27319
Reported by: Youngsung Kim at LINE Corporation

Change-Id: I48de2e4ccf196990906304e8d7061f4ffdd772ff
2017-11-08 05:21:26 -07:00
Joshua Colp 4e8271c2a5 Merge "res_stasis: Fix multiple leaks." into 13 2017-11-08 04:59:15 -06:00
Jenkins2 fe78531d5e Merge "res_pjsip_config_wizard: Fix leaks and add check for malloc failure." into 13 2017-11-07 22:48:08 -06:00
Corey Farrell 16df0e9786 res_pjsip_pubsub: Fix multiple leaks on failure to append vectors.
Change-Id: I68ece0073ea79667ca41eb10405f516f1d30d482
2017-11-07 22:38:04 -05:00
Corey Farrell cf91dde509 res_pjsip_history: Fix multiple leaks on vector append failure.
Change-Id: I41e8d5183ace284095cc721f3b1fb32ade3f940f
2017-11-07 22:31:07 -05:00
Jenkins2 5c47ee4476 Merge "res_pjsip: Fix leak on error in ast_sip_auth_vector_init." into 13 2017-11-07 17:38:38 -06:00
Jenkins2 34065994fe Merge "test_sorcery_memory_cache_thrash: Handle error from vector append." into 13 2017-11-07 16:48:42 -06:00
Jenkins2 841fc3e5c2 Merge "stasis: Release object if vector append fails." into 13 2017-11-07 16:11:13 -06:00
Joshua Colp 7657519a53 Merge "format_cap: Fix leak on AST_VECTOR_APPEND error." into 13 2017-11-07 14:32:15 -06:00
Joshua Colp 5a60ce3ee3 Merge "Messaging: Report error on failure to register tech or handler." into 13 2017-11-07 14:31:59 -06:00
Jenkins2 cb1ec6255f Merge "CLI: Remove unused internal command." into 13 2017-11-07 12:47:42 -06:00
Joshua Colp 40f906add4 Merge "res_pjsip: Avoid crash when contact uri is empty string" into 13 2017-11-07 12:04:41 -06:00
Richard Mudgett 7ad4c19b20 res_pjsip_registrar.c: Fix named AOR and pjproject group deadlock.
One of the patches for ASTERISK_27147 introduced a deadlock regression.
When the connection oriented transport shut down, the code attempted to
remove the associated contact.  However, that same transport had just
requested a registration that we hadn't responded to yet.  Depending
upon timing we could deadlock.

* Made send the REGISTER response after we completed processing the
request contacts and released the named AOR lock to avoid the deadlock.

ASTERISK-27391

Change-Id: I89a90f87cb7a02facbafb44c75d8845f93417364
2017-11-07 12:00:24 -06:00
Jenkins2 8824ed44dc Merge "res_pjsip: Ignore empty TLS configuration" into 13 2017-11-07 10:29:42 -06:00
Corey Farrell c1a608f862 res_stasis: Fix multiple leaks.
* res/stasis/app.c JSON passed to app_send needs to be released.
* res/stasis_message.c: objects leak if vector append fails.

Change-Id: I8dd5385b9f50a5cadf2b1d16efecffd6ddb4db4a
2017-11-07 11:24:51 -05:00
Joshua Colp 5d19dc2cb1 Merge "tcptls: Print notice when TLS is enabled but not configured." into 13 2017-11-07 09:42:34 -06:00
Aaron An d95bfcd013 res_pjsip: Avoid crash when contact uri is empty string
Asterisk will crash if contact uri is invalid, so contact_apply_handler
should check if the uri is NULL or empty.

ASTERISK-27393 #close
Reported-by: Aaron An
Tested-by: AaronAn

Change-Id: Ia0309bdc6b697c73c9c736e1caec910b77ca69f5
2017-11-07 10:33:06 -05:00
Joshua Colp 315ccf40f4 Merge "stasis: Remove silly use of RAII_VAR in stasis_forward_all." into 13 2017-11-07 08:52:39 -06:00
Jenkins2 ec40b74e51 Merge "stasis_channels.c: Remove a very silly RAII_VAR()." into 13 2017-11-07 08:09:07 -06:00
Jenkins2 01064bd6bc Merge "stasis/app.c: Optimize stasis_app_get_debug_by_name()" into 13 2017-11-07 07:32:58 -06:00
Richard Mudgett ec58521a48 res_pjproject.c: Fix ast_strdup() alloc failure.
Change-Id: I74688038e7afe3a279359cce53aadb28ade51ead
2017-11-07 07:10:27 -06:00
Jenkins2 37863c163c Merge "Fix ast_(v)asprintf() malloc failure usage conditions." into 13 2017-11-07 06:41:50 -06:00
Jenkins2 36b5a66c27 Merge "RTP Engine: Deal with errors returned from AST_VECTOR_REPLACE." into 13 2017-11-07 06:06:01 -06:00
Corey Farrell 69af7eb663 res_pjsip_outbound_registration: Fix leak on vector add failure.
Change-Id: I774b88b3c9da41edd4dc8d78f095481f52f2bd46
2017-11-06 18:56:33 -05:00
Corey Farrell 4f75655cb6 res_pjsip_config_wizard: Fix leaks and add check for malloc failure.
wizard_apply_handler():
- Free host if we fail to add it to the vector.

wizard_mapped_observer():
- Check for otw allocation failure.
- Free otw if we fail to add it to the vector.

Change-Id: Ib5d3bcabbd9c24dd8a3c9cc692a794a5f60243ad
2017-11-06 18:46:54 -05:00
Corey Farrell 8cdc0ef385 test_sorcery_memory_cache_thrash: Handle error from vector append.
Cleanup resources when we fail to append the vector and report test
failure.

Change-Id: I6eb41586fd11dee8c0dfe35e91cb465a4cab7298
2017-11-06 18:35:27 -05:00
Corey Farrell e4fba95022 res_pjsip: Fix leak on error in ast_sip_auth_vector_init.
Change-Id: Ib0fc7a18f3135ca8990c3984c9e15f6d26e556e8
2017-11-06 18:31:51 -05:00
Corey Farrell b96dd55add res_pjproject: Handle error from adding to the buildopts vector.
Change-Id: I076c7bd207c7989a23005395ce1735392657be65
2017-11-06 18:20:25 -05:00
Corey Farrell 3dc600ef84 stasis: Release object if vector append fails.
Change-Id: I3e5cc669169aab6175ddfaf7486edeaeb4fdcfb1
2017-11-06 16:36:55 -05:00
Corey Farrell fc041554c3 RTP Engine: Deal with errors returned from AST_VECTOR_REPLACE.
Check for errors from AST_VECTOR_REPLACE and clean memory if needed.

Change-Id: I124d15cc1d645f85a72a1279f623c1993b304b0b
2017-11-06 16:30:10 -05:00
Corey Farrell 75539dbf2c Messaging: Report error on failure to register tech or handler.
Message tech and handler registrations use a vector which could fail to
expand.  If it does log and error and return error.

Change-Id: I593a8de81a07fb0452e9b0efd5d4018b77bca6f4
2017-11-06 16:13:58 -05:00
Corey Farrell b4240bea6c format_cap: Fix leak on AST_VECTOR_APPEND error.
format_cap_framed_init can fail on AST_VECTOR_APPEND.  This should
report failure to the caller and clean the newly allocated frame.

Change-Id: Ica0661235bf09497bf23d844ceb01f21b41a55b0
2017-11-06 16:12:12 -05:00
Corey Farrell 803dc3dee5 stasis: Remove silly use of RAII_VAR in stasis_forward_all.
Change-Id: I46de4c968d40144d5b049966304ff66c1469fb65
2017-11-06 15:24:57 -05:00
Corey Farrell 0a0e2c4253 CLI: Remove unused internal command.
The internal CLI command "_command complete" was last used by Asterisk
0.2.0.  Since then we've been using "_command nummatches" and "_command
matchesarray".

Change-Id: I682fe1e21a24a3bb5bd04146e639f1c5866bcfce
2017-11-06 13:51:50 -05:00
Richard Mudgett 593f789563 stasis_bridges.c: Fix off-nominal json memory leaks.
Change-Id: Ib1181a36b317c86bff1ef2e44a17a0b1c73cfdc8
2017-11-06 12:09:27 -06:00
Joshua Colp 56e32ca355 res_pjsip_pubsub: Ensure remote URI contains URI only.
This change makes it so that any user of the pubsub
API that requests the remote URI receives only the URI.
Previously the entire string was returned, which could
contain a display name.

ASTERISK-27290

Change-Id: If1d0cd6630f0a264856d31d2a67933109187a017
2017-11-06 18:00:38 +00:00
Richard Mudgett 6bc8af2433 stasis_channels.c: Remove a very silly RAII_VAR().
Change-Id: I28b458b3c1a442c4ef0be7b4986a95ea4149e14f
2017-11-06 11:58:57 -06:00
Richard Mudgett 33d02f5090 stasis/app.c: Optimize stasis_app_get_debug_by_name()
* Eliminate RAII_VAR()
* Short circuit application name lookup if global debug enabled.

Change-Id: I5f78b7bd6ca7fd2c3b07cbbe036c6a93b4681123
2017-11-06 11:49:41 -06:00
Richard Mudgett 9013415593 Fix ast_(v)asprintf() malloc failure usage conditions.
When (v)asprintf() fails, the state of the allocated buffer is undefined.
The library had better not leave an allocated buffer as a result or no one
will know to free it.  The most likely way it can return failure is for an
allocation failure.  If the printf conversion fails then you actually have
a threading problem which is much worse because another thread modified
the parameter values.

* Made __ast_asprintf()/__ast_vasprintf() set the returned buffer to NULL
on failure.  That is much more useful than either an uninitialized pointer
or a pointer that has already been freed.  Many uses won't have to check
for failure to ensure that the buffer won't be double freed or prevent an
attempt to free an uninitialized pointer.

* stasis.c: Fixed memory leak in multi_object_blob_to_ami() allocated by
ast_asprintf().

* ari/resource_bridges.c:ari_bridges_play_helper(): Remove assignment to
the wrong thing which is now not needed even if assigning to the right
thing.

Change-Id: Ib5252fb8850ecf0f78ed0ee2ca0796bda7e91c23
2017-11-06 11:46:06 -06:00
Jenkins2 ad7860fd19 Merge "install_prereq: Checkout of libSRTP 2.x." into 13 2017-11-06 11:29:23 -06:00
Jenkins2 55001ea31e Merge "configure: Add autoconf check for libopusfile." into 13 2017-11-06 11:05:55 -06:00
Jenkins2 0eee42626a Merge "Prevent unload of modules which implement an Optional API." into 13 2017-11-06 09:41:29 -06:00
Jenkins2 19c9200429 Merge "Add missing menuselect dependencies." into 13 2017-11-06 08:46:22 -06:00
Joshua Colp 1479d2603e Merge "Stasis/ARI: Fix off-nominal path json memory leaks." into 13 2017-11-06 08:39:20 -06:00
Sean Bright 250c173cfb res_pjsip: Ignore empty TLS configuration
When using realtime, fields that are not explicitly set by an
administrator are still presented to sorcery as empty strings. Handle
this case explicitly.

In this particular case, if any of these fields are required for TLS
support, their existence should be validated in the 'apply' handler once
we have a complete transport definition.

ASTERISK-27032 #close
Reported by: seanchann.zhou

Change-Id: Ie3b5fb421977ccdb33e415d4ec52c3fd192601b7
2017-11-06 09:15:10 -05:00
Jenkins2 6e34cf6af7 Merge "AOC: Fix AOC-S json memory leak." into 13 2017-11-06 07:19:41 -06:00
Jenkins2 22602ec7dd Merge "res_stasis_mailbox.c: Fix leak of mailbox container." into 13 2017-11-06 06:27:29 -06:00
Jenkins2 686d11837e Merge "Build System: Fix build failure caused by recent CLI improvements." into 13 2017-11-06 05:58:51 -06:00
Alexander Traud 7dd2b18e32 tcptls: Print notice when TLS is enabled but not configured.
Asterisk can be compiled without a SSL/TLS library, without the Development
Headers of OpenSSL. However, if TLS (SIP) or Secure-WebSockets (WebRTC) was
enabled in a configuration file, Asterisk did not notice the user. Asterisk
failed silently, only the corresponding TCP ports were not open.

ASTERISK-27394
Reported-by: mossley74

Change-Id: Ib8b7539a5b2af8154c22e5f7a40fc68f95d95b93
2017-11-06 04:28:13 -05:00
Corey Farrell b5331af53b configure: Add autoconf check for libopusfile.
This check is being added to make it easier for end-users of third party
open source Opus modules.  This was removed by ASTERISK-26426 but only
the module needed to be removed.

Change-Id: I62b9cd0c4fa8a77596ab0e042948a643a1152677
2017-11-06 04:21:12 -05:00
Alexander Traud 5f4197735d install_prereq: Checkout of libSRTP 2.x.
Since Asterisk 13.17, libSRTP 2.x is supported. Therefore, its latest version
is installed again via the script install_prereq.

ASTERISK-27356

Change-Id: I13125839a79052356469e41edacbebff0a937d39
2017-11-04 06:08:44 -05:00
Richard Mudgett 3bce5a9dfa Stasis/ARI: Fix off-nominal path json memory leaks.
Change-Id: Id569c624c426e3b22a99936473c730592d8b83fb
2017-11-03 13:08:33 -05:00
Richard Mudgett 675e50b903 AOC: Fix AOC-S json memory leak.
Change-Id: I3a1d40a41a8a7d00fa4a187de6a343a79155d3ef
2017-11-03 12:51:02 -05:00
Richard Mudgett 4ea61eef94 res_stasis_device_state.c: Optimize stasis_app_device_states_to_json()
* Eliminate RAII_VAR()
* Replace looped alloca with a char[] since that is how it is used anyway.

Change-Id: Ia27e64a884afa0f50b9ffdb1cf23da6bfa51ffdf
2017-11-03 12:40:53 -05:00
Richard Mudgett 8ec2db7084 res_stasis_mailbox.c: Fix leak of mailbox container.
Change-Id: I7d33c1635713047e7d1597c9d882f7dc006d94b4
2017-11-03 12:14:09 -05:00
Corey Farrell d3cfcc0da6 Build System: Fix build failure caused by recent CLI improvements.
We use the editline library to help with filename completion in our CLI
interface.  Some systems failed to find the header when included from
loader.c.  This is fixed by setting the proper CFLAGS for the build of
loader.o.

ASTERISK-27378

Change-Id: Ib7fd496f1d7ed48141a2eadd5dd61cab2f2308be
2017-11-03 10:39:38 -05:00
Joshua Colp 543d8ee388 Merge "res_pjsip: Add to list of valid characters for from_user." into 13 2017-11-03 08:11:59 -05:00
Jenkins2 a1d6920745 Merge "Modules: Additional improvements to CLI completion." into 13 2017-11-03 07:46:19 -05:00
Ben Ford ffcb7e2a25 res_pjsip: Add to list of valid characters for from_user.
Fixes a regression where some characters were unable to be used in
the from_user field of an endpoint. Additionally, the backtick was
removed from the list of valid characters, since it is not valid,
and it was replaced with a single quote, which is a valid character.

ASTERISK-27387

Change-Id: Id80c10a644508365c87b3182e99ea49da11b0281
2017-11-02 11:48:05 -05:00
Corey Farrell bfb0f27c87 Modules: Additional improvements to CLI completion.
Replace 'needsreload' argument with a 'type' argument to specify which
type of modules you want completion.  This provides more accurate CLI
completion for load and unload commands.

* 'module unload' now excludes modules that have active references or are
  not running.
* 'module load' now excludes modules that are already running.
* 'core set debug [atleast] <level> [module]' shows running modules only.

ASTERISK-27378

Change-Id: Iea3e00054461484196c46f688f02635cc886bad1
2017-11-02 07:31:20 -05:00
Corey Farrell 7c35740ba1 Add missing menuselect dependencies.
This adds menuselect dependencies for modules that use symbols of other
modules.

ASTERISK-27390

Change-Id: Ia2d2849f5b87a72af7324a82edc3f283eafb5385
2017-11-02 03:11:32 -04:00
Corey Farrell 73a5e9f0e9 Prevent unload of modules which implement an Optional API.
Once an Optional API module is loaded it should stay loaded.  Unloading
an optional API module runs the risk of a crash if something else is
using it.  This patch causes all optional API providers to tell the
module loader not to unload except at shutdown.

ASTERISK-27389

Change-Id: Ia07786fe655681aec49cc8d3d96e06483b11f5e6
2017-11-01 21:07:15 -04:00
Sean Bright d524ad523d pjsip_message_filter: Only do interface lookup for wildcard addresses.
Change-Id: Ie083987e69dc43b6861671c218cacacc11b2072f
2017-11-01 14:59:13 -04:00
Kevin Harwell a7c00707a5 features: Bridge application's BRIDGERESULT not appropriately set
The dialplan application "Bridge" was not setting the BRIDGERESULT to failure
when a failure did occur. Even worse if it did fail to join the bridge it would
still report success.

This patch now sets the BRIDGERESULT variable to an appropriate value for a
given condition state. Also, removed the value INCOMPATIBLE as a valid result
type since it is no longer used.

ASTERISK-27369 #close

Change-Id: I22588e7125a765edf35cff28c98ca143e9927554
2017-10-31 15:08:38 -05:00
Jenkins2 ae2687494a Merge "ast_coredumper: allow setting asterisk binary explicitly" into 13 2017-10-31 07:00:50 -05:00
Jenkins2 71d3f2cb90 Merge "Build System: Fix --disable-xmldoc option." into 13 2017-10-31 06:17:48 -05:00
Jenkins2 6b14200093 Merge "Modules: Fix issues with CLI completion." into 13 2017-10-30 17:04:04 -05:00
Jenkins2 a87391cfcb Merge "app_agent_spool: Fix typo in dtmf features usage desctiption" into 13 2017-10-30 11:25:35 -05:00
Jenkins2 835db751e1 Merge "ast_coredumper: Add gzipping of binaries and display of signal info" into 13 2017-10-30 10:19:55 -05:00
Tzafrir Cohen 1b535d8457 ast_coredumper: allow setting asterisk binary explicitly
Adds an extra option, --asterisk-bin=<path> to ast_coredumper. If
provided, the binary given to gdb will be the parameter, rather than
asterisk from the PATH.

ASTERISK-27380 #close

Change-Id: I25f5b91eb75059b0fb2f142e468c26b283b0a9f3
2017-10-30 09:58:48 -05:00
Corey Farrell cee81b3c8b Modules: Fix issues with CLI completion.
* Stop using ast_module_helper to check if a module is loaded, use
  ast_module_check instead (app_confbridge and app_meetme).
* Stop ast_module_helper from listing reload classes when needsreload
  was not requested.

ASTERISK-27378

Change-Id: Iaed8c1e4fcbeb242921dbac7929a0fe75ff4b239
2017-10-30 00:40:12 -05:00
Igor Goncharovskiy 8436f1d35a app_agent_spool: Fix typo in dtmf features usage desctiption
Fix typo, that specify usage wrong option 'dtmf-features' for CHANNEL() function
instead of correct 'dtmf_features'

ASTERISK-27377 #close

Change-Id: I15ecc829c1035b359584673e12cdb5c9291ac930
2017-10-29 06:18:21 +06:00
Corey Farrell 987b16e8f9 res_pjsip_pubsub: Resolve potential crash in allocate_subscription.
When allocate_subscription fails to initialize fields of the new sub it
calls destroy_subscription.

Change-Id: I5b79c915ec216dc00c13c1e4172137864a4bec85
2017-10-27 13:53:30 -05:00
Joshua Colp 2e5e7e0b14 Merge "codec.c: Defensively check the returned samples." into 13 2017-10-27 09:05:53 -05:00
Jenkins2 a1467ab7bc Merge "app_voicemail.c: Fix compiler warning with IMAP build." into 13 2017-10-27 08:28:43 -05:00
Joshua Colp 40d30cd70e Merge "res_pjsip: Add 'ip' as a valid option to 'identify_by' on endpoint." into 13 2017-10-26 18:28:13 -05:00
Richard Mudgett 2db97ee219 app_voicemail.c: Fix compiler warning with IMAP build.
ASTERISK-27181

Change-Id: Ic4468b49860bd7f67e922baf4c9e96828c184d17
2017-10-26 12:18:00 -05:00
Richard Mudgett ca7f3d297b codec.c: Defensively check the returned samples.
Earlier versions of the codec_opus samples_count callback can return
negative error values on undecodable frames.  This resulted in a divide by
zero exception.

* Added a defensive check in ast_codec_samples_count() for a "negative"
samples count return value.  Log the event and set the count to zero.

ASTERISK-27194

Change-Id: Icf69350307ecbbc80a3d74de46af9bd80ea17819
2017-10-26 11:48:23 -05:00
Joshua Colp 7385d1e017 res_pjsip: Add 'ip' as a valid option to 'identify_by' on endpoint.
When the identify_by option on an endpoint is set to ip it will
only be identified using the res_pjsip_endpoint_identifier_ip module.
This ensures that it is not mistakenly matched using the username of
the From header. To ensure behavior has not changed the default has
been changed to "username,ip" for the identify_by option.

ASTERISK-27206

Change-Id: I2170b86a7f7e221b4f00bf14aa1ef1ac5b050bbd
2017-10-25 18:13:26 +00:00
Joshua Colp 28368b3553 Merge "http.c: Fix http header send content." into 13 2017-10-25 12:42:09 -05:00
George Joseph 3f7ad66245 ast_coredumper: Add gzipping of binaries and display of signal info
The --tarball-coredump option now creates a gzipped tarball of
coredumps processed, their results txt files and copies of
/etc/os-release, /usr/sbin/asterisk, /usr/lib(64)/libasterisk* and
/usr/lib(64)/asterisk as those files are needed to properly examine
the coredump.  The file will be named
/tmp/asterisk.<timestamp>.coredumps.tar.gz or
/tmp/asterisk-<uniqueid>.coredumps.tar.gz if --tarball-uniqueid was
specified.

Added dumps of *_siginfo to the top of the txt files so you can
tell what signal was invoked.

Change-Id: Ib9ee6d83592d4b1bc90cb3419a05376a88d1ded9
2017-10-25 11:26:06 -06:00
Corey Farrell 4772849016 Build System: Fix --disable-xmldoc option.
The configure option to disable XML documentation does not currently
work.  This patch makes it effective, but also causes an ABI change by
removing the ast_xmldoc_* symbols.  Disabling xmldoc also prevents docs
from being automatically generated, but they can still be manually
generated with 'make doc/core-en_US.xml'.

ASTERISK-26639

Change-Id: Ifac562340c09f80c83e0203de098fcac93bf8c44
2017-10-25 10:26:16 -05:00
Ben Ford dfe00b80e7 http.c: Fix http header send content.
Currently ast_http_send barricades a portion of the content that
needs to be sent in order to establish a connection for things
like the ARI client. The conditional and contents have been changed
to ensure that everything that needs to be sent, will be sent.

ASTERISK-27372

Change-Id: I8816d2d8f80f4fefc6dcae4b5fdfc97f1e46496d
2017-10-25 10:18:33 -05:00
Joshua Colp cf63db7217 Merge "chan_sip: Fix SUBSCRIBE with missing "Expires" header." into 13 2017-10-25 07:44:17 -05:00
Jenkins2 271780019a Merge "hashtab: Use ast_free." into 13 2017-10-25 07:10:14 -05:00
Jenkins2 02538548e6 Merge "res_pjsip_sdp_rtp: Fix setting of address type for rtp_ipv6" into 13 2017-10-25 06:26:27 -05:00
Corey Farrell 23d05ebc49 hashtab: Use ast_free.
A few places in hashtab use free instead of ast_free.

Change-Id: I2ff089bad71640c03c3ce97f1b00fc962ef79427
2017-10-24 17:17:53 -04:00
Jenkins2 65b3c68230 Merge "main/Makefile: Remove rule for non-existant testexpr2." into 13 2017-10-24 15:55:05 -05:00
Jenkins2 8cb61c6f40 Merge "res_xmpp: Ensure the connection filter is available." into 13 2017-10-24 14:59:56 -05:00
Jenkins2 56082b6b4d Merge "lpc10: Avoid compiler warning when DONT_OPTIMIZE/COMPILE_DOUBLE." into 13 2017-10-24 14:31:27 -05:00
Jenkins2 529e8e2afa Merge "test_config: Fix failure and segfault when config_hook is run twice." into 13 2017-10-24 13:42:28 -05:00
Corey Farrell c95ab4c1ce chan_sip: Fix SUBSCRIBE with missing "Expires" header.
When chan_sip receives a SUBSCRIBE request with no "Expires" header it
processes the request as an unsubscribe.  This is incorrect, per RFC3264
when the "Expires" header is missing a default expiry should be used.

ASTERISK-18140

Change-Id: Ibf6dcd4fdd07a32c2bc38be1dd557981f08188b5
2017-10-24 11:03:35 -05:00
Jenkins2 e7d8b4ebe7 Merge "res_pjproject.c: Upgrade bundled PJPROJECT to 2.7" into 13 2017-10-24 09:26:47 -05:00
Jenkins2 3440f535db Merge "chan_sip: Crypto attribute not last but first on SDP media level." into 13 2017-10-24 08:50:47 -05:00
Alexander Traud 5351e862ee lpc10: Avoid compiler warning when DONT_OPTIMIZE/COMPILE_DOUBLE.
ASTERISK-23556
Reported by: Marcello Ceschia

Change-Id: Ic27e88e0336a0d83877dc857938659dc5560b93c
2017-10-24 07:28:49 -05:00
Corey Farrell ec278955a3 main/Makefile: Remove rule for non-existant testexpr2.
Change-Id: Ibb3e47f27a395d74d8c5263db015b05434f5969b
2017-10-23 14:46:03 -04:00
Corey Farrell 6cec3149be test_config: Fix failure and segfault when config_hook is run twice.
On second run the config_hook test was unexpectedly failing to load
test_config.conf because it was still unmodified since the last load.
This is fixed by not passing CONFIG_FLAG_FILEUNCHANGED for the initial
loads, only using it when we are tested that a reload of unmodified
files do not initiate the hook.

ASTERISK-25960

Change-Id: Ifd679509a23ed163e5cc647490bf7df4ae3cd856
2017-10-23 12:46:09 -05:00
George Joseph 4a2575a107 res_pjsip_sdp_rtp: Fix setting of address type for rtp_ipv6
create_outgoing_sdp_stream was setting "addr_type = STR_IP6" only
when an ipv6 media_address was specified on the endpoint.  If
rtp_ipv6 was set and ast_sip_get_host_ip_string returned an ipv6
address, we were leaving the addr_type set at the default of
STR_IP4.  This caused the address type to be set incorrectly on the
"o" and "c" SDP attributes even though the address was set
correctly.  Some clients don't like the mismatch.

 * Removed the test for endpoint/media_address and now check all
   addresses for ipv6.

ASTERISK-27198
Reported by: Martin Cisárik

Change-Id: I5214fc31b728117842243807e7927a319cf77592
2017-10-23 11:23:04 -06:00
Jenkins2 302626c115 Merge "app_agent_pool.c: Fix online documentation typo." into 13 2017-10-23 09:05:03 -05:00
Richard Mudgett b4cb0050bd app_agent_pool.c: Fix online documentation typo.
Change-Id: Ib0bc95fd0ec288c78c313823254d7a84ebfc4429
2017-10-23 07:53:48 -05:00
Joshua Colp 07e17fd04f res_xmpp: Ensure the connection filter is available.
Users of the API that res_xmpp provides expect that a
filter be available on the client at all times. When
OAuth authentication support was added this requirement
was not maintained.

This change merely moves the OAuth authentication to
after the filter is created, ensuring users of res_xmpp
can add things to the filter as needed.

ASTERISK-27346

Change-Id: I4ac474afe220e833288ff574e32e2b9a23394886
2017-10-22 19:33:13 -03:00
Alexander Traud c7a9a6ef0c chan_sip: Crypto attribute not last but first on SDP media level.
This matches the behavior of the other SIP channel driver, chan_pjsip.

ASTERISK-27365

Change-Id: I8f23a51290a58b75816da2999ed1965441dfc5d6
2017-10-21 03:46:08 -05:00
Richard Mudgett b57dcc8d9c res_pjproject.c: Upgrade bundled PJPROJECT to 2.7
Update patches included in bundled PJPROJECT for the new version.

ASTERISK-27355

Change-Id: I9ac5dbbffaadca25ad24fac8b9ab615e5ace6083
2017-10-20 14:26:14 -05:00
Corey Farrell fb4ed70e62 res_pjsip_pubsub: Prevent unload except during shutdown.
Prevent unload of the module as certain pjsip initialization functions
cannot be reversed.  This required a reorder of the module_load so that
the non-reversable pjsip functions are not called until all potential
errors have been ruled out.

ASTERISK-24483

Change-Id: Iee900f20bdd6ee1bfe23efdec0d87765eadce8a7
2017-10-19 10:35:07 -05:00
Joshua Colp 63e536d97f Merge "chan_sip: Fix output of 'sip set debug off'." into 13 2017-10-19 07:45:38 -05:00
Corey Farrell 216251abcb res_pjsip_refer: Prevent unload except during shutdown.
Prevent unload of the module as certain pjsip initialization functions
cannot be reversed.

ASTERISK-24483

Change-Id: I94597ec8b8491f5af9c57bf66dbc3b078fe2d49d
2017-10-18 13:40:24 -05:00
Corey Farrell 7dd7ca2858 chan_sip: Fix output of 'sip set debug off'.
When sip.conf contains 'sipdebug=yes' it is impossible to disable it
using CLI 'sip set debug off'.  This corrects the output of that CLI
command to instruct the user to turn sipdebug off in the configuration
file.

ASTERISK-23462 #close

Change-Id: I1cceade9caa9578e1b060feb832e3495ef5ad318
2017-10-18 12:13:32 -05:00
Jenkins2 dbafed0ed5 Merge "res_corosync: Fix linking issue with Corosync 2.x" into 13 2017-10-17 11:19:02 -05:00
Joshua Colp c5f671e2df Merge "cdr.c: Rename the Party A CDR container." into 13 2017-10-17 11:06:25 -05:00
Jenkins2 4c83f685e6 Merge "cdr.c: Add container to key off of Party B channel names." into 13 2017-10-17 10:41:26 -05:00
Jenkins2 e1d713c40c Merge "contrib/script/sip_to_pjsip: implement 'all' for allow/disallow" into 13 2017-10-17 09:06:44 -05:00
Jenkins2 0d4febb1c8 Merge "chan_dahdi: wrap include file which is not present on BSD systems in #ifdef" into 13 2017-10-17 08:05:15 -05:00
Jenkins2 e7e181c2bc Merge "res_pjsip_session: Rewrite o= with external_media_address." into 13 2017-10-17 06:26:47 -05:00
Matt Jordan 0a11097a22 res_corosync: Fix linking issue with Corosync 2.x
At some point in time in the history of Corosync (certainly within the
2.x branch), the corosync_cfg_state_track function was removed.
Unfortunately, the cfg library is only linked if this function is
present. Without the cfg library being linked to res_corosync, loading
of res_corosync will fail.

This patch makes it so that detecting corosync's core libraries,
determined by the COROSYNC external library checks, links both the cpg
and cfg libraries with res_corosync.

Change-Id: I674e9e1c8fea11c3bf81154aaa7c1fd43f945465
2017-10-17 11:22:43 +00:00
Richard Mudgett 7f8c212e75 cdr.c: Rename the Party A CDR container.
* Rename the Party A CDR container from active_cdrs_by_channel to
active_cdrs_master.

* Renamed the support functions associated with active_cdrs_master
appropriately.

ASTERISK-27335

Change-Id: I6104bb3edc3a0b7243ce502e45e8832b0cff14f7
2017-10-16 12:23:35 -05:00
Richard Mudgett 85723a9e50 cdr.c: Add container to key off of Party B channel names.
The CDR performance gets worse the further it gets behind in processing
stasis messages.  One of the reasons is because of a n*m loop used when
processing Party B information.

* Added a new CDR container that is keyed to Party B so we don't need such
a large loop when processing Party B information.

NOTE: To reduce the size of the patch I deferred to another patch the
renaming of the Party A active_cdrs_by_channel container to
active_cdrs_master and renaming the container's hash and cmp functions
appropriately.

ASTERISK-27335

Change-Id: I0bf66e8868f8adaa4b5dcf9e682e34951c350249
2017-10-16 12:23:35 -05:00
Tzafrir Cohen 944e500e95 declare optional openssl dependencies in moduleinfo
Declare optional openssl dependencies in:
* res_rtp_asterisk.c
* tcptls.c

ASTERISK-27328 #close

Change-Id: I2636f1c05b8104b4fe6f36cce0ebd9a98b9c78ab
2017-10-16 06:03:13 -05:00
Jenkins2 ce0ef34020 Merge "ast_bt_get_symbols: Prevent double-free." into 13 2017-10-15 14:20:37 -05:00
Jenkins2 3b1324b13e Merge "tcptls: NULL-check the parameter of ast_ssl_teardown before accessing it." into 13 2017-10-15 13:53:45 -05:00
Alexander Traud dcbf61a31e res_pjsip_session: Rewrite o= with external_media_address.
PJSIP allows a domain name as external_media_address. This allows chan_pjsip to
be used behind a NAT with changing IP addresses. The IP address of that domain
is resolved to the c= line already. This change sets also the o= line to that
domain.

ASTERISK-27341 #close

Change-Id: I690163b6e762042ec38b3995aa5c9bea909d8ec4
2017-10-14 06:13:55 -05:00
Guido Falsi 85cada85d6 chan_dahdi: wrap include file which is not present on BSD systems in #ifdef
The sys/sysmacros.h include file does not exist in BSD systems and
is not required to build this module there.
Since an "#if defined(__NetBSD__) || defined(__FreeBSD__)" section
already exist I moved that include line inside it's #else branch.

ASTERISK-27343 #close

Change-Id: Ibfb64f4e9a0ce8b6eda7a7695cfe57916f175dc1
2017-10-14 11:11:24 +02:00
Jenkins2 6fc88e80e8 Merge "cdr.c: Eliminated many calls to ao2_global_obj_ref()." into 13 2017-10-13 18:43:03 -05:00
Jenkins2 31cbb53a0a Merge "cdr.c: Defer getting ao2_global_obj_ref() until needed." into 13 2017-10-13 17:55:34 -05:00
Jenkins2 bf21ba9c2d Merge "cdr.c: Set stringfields only if they are different." into 13 2017-10-13 17:00:10 -05:00
Jenkins2 d0cd6cb1a7 Merge "cdr.c: Fix setting dnid, callingsubaddr, and calledsubaddr" into 13 2017-10-13 16:44:38 -05:00
Kevin Harwell 4bc2aca9b7 AMI: Increase version number
Bump the AMI patch number since the following new addition was made:

* Added a new CancelAtxfer action that cancels an attended transfer.

Change-Id: I9bac528791bd62ef0e99243903b6bc7a6c7ab182
2017-10-13 12:11:21 -05:00
Corey Farrell 89f11364f6 ast_bt_get_symbols: Prevent double-free.
It's possible for bfdobj to be created but syms not created.  If syms
was not allocated in the current loop iteration but was allocated in the
previous iteration it would crash.

ASTERISK-27340

Change-Id: I5b110c609f6dfe91339f782a99a431bca5837363
2017-10-13 09:51:09 -04:00
Alexander Traud 114ed320ea tcptls: NULL-check the parameter of ast_ssl_teardown before accessing it.
This avoids a crash on stopping a chan_sip which failed to start its TLS server.

ASTERISK-27339 #close

Change-Id: I327fc70db68eaaca5b50a15c7fd687fde79263d5
2017-10-13 08:14:47 -05:00
Joshua Colp 7215d07ca2 Merge "features, manager : Add CancelAtxfer AMI action" into 13 2017-10-13 07:44:39 -05:00
Richard Mudgett a8c6c3bd7d cdr.c: Eliminated many calls to ao2_global_obj_ref().
The CDR performance gets worse the further it gets behind in processing
stasis messages.  One of the reasons is we were getting the global config
to determine if we needed to log a debugging message.

* Many calls to ao2_global_obj_ref() were just so we could determine if
debug mode is enabled.  Made a global flag to check instead.

* Eliminated many RAII_VAR() usages associated with the remaining
ao2_global_obj_ref() calls.

* Added missing NULL checks for the returned ao2_global_obj_ref() value.

ASTERISK-27335

Change-Id: Iceaad93172862f610cad0188956634187bfcc7cd
2017-10-12 19:11:02 -05:00
Richard Mudgett b56fa63db8 cdr.c: Defer getting ao2_global_obj_ref() until needed.
The CDR performance gets worse the further it gets behind in processing
stasis messages.  One of the reasons is we were getting the global config
even if we didn't need it.

* Most uses of the global config were only needed on off nominal code
paths so it makes sense to not get it until absolutely needed.

ASTERISK-27335

Change-Id: I00c63b7ec233e5bfffd5d976f05568613d3c2365
2017-10-12 19:11:02 -05:00
Richard Mudgett 92c5cf3920 cdr.c: Set stringfields only if they are different.
The CDR performance gets worse the further it gets behind in processing
stasis messages.  One of the reasons is we were repeatedly setting string
fields to potentially the same string in base_process_party_a().  Setting
a string field involves allocating room for the new string out of a memory
pool which may have to allocate even more memory.

* Check to see if the string field is already set to the desired string.

ASTERISK-27335

Change-Id: I3ccb7e23f1488417e08cafe477755033eed65a7c
2017-10-12 19:11:02 -05:00
Richard Mudgett 6393c106ca cdr.c: Fix setting dnid, callingsubaddr, and calledsubaddr
The string comparisons for setting these CDR variables was inverted.  We
were repeatedly setting these CDR variables only if the channel snapshots
had the same value.

ASTERISK-27335

Change-Id: I9482073524411e7ea6c03805b16de200cb1669ea
2017-10-12 19:11:02 -05:00
Jenkins2 28a3ff75d5 Merge "res_pjsip_session: Prevent user=phone being added to anonimized URIs." into 13 2017-10-12 12:22:10 -05:00
Thomas Sevestre 6d3ee9fb93 features, manager : Add CancelAtxfer AMI action
Add action to cancel feature attended transfer with AMI interface

ASTERISK-27215 #close

Change-Id: Iab8a81362b5a1757e2608f70b014ef863200cb42
2017-10-12 12:17:45 -05:00
Daniel Tryba 21d502818f res_pjsip_session: Prevent user=phone being added to anonimized URIs.
Move ast_sip_add_usereqphone to be called after anonymization of URIs,
to prevent the user_eq_phone adding "user=phone" to URIs containing a
username that is not a phonenumber (RFC3261 19.1.1). An extra call to
ast_sip_add_usereqphone on the saved version before anonymization is
added to add user=phone" to the PAI.

ASTERISK-27047 #close

Change-Id: Ie5644bc66341b86dc08b1f7442210de2e6acdec6
2017-10-12 11:05:28 -05:00
Jenkins2 603418aac7 Merge "cdr.c: Defer misc checks." into 13 2017-10-12 07:12:59 -05:00
Joshua Colp 5bed433e71 Merge "res_pjsip: Prevent "user=phone" being added multiple times to header" into 13 2017-10-12 07:01:18 -05:00
Torrey Searle 407b78504d contrib/script/sip_to_pjsip: implement 'all' for allow/disallow
when 'all' is specified in an allow or disallow section, it should erase
all values from the inverse section in the default config. E.G.
allow=all should erase any deny values from default config &
vice-versa

ASTERISK-27333 #close

Change-Id: I99219478fb98f08751d769daaee0b7795118a5a6
2017-10-12 05:41:28 -05:00
Jenkins2 b4113450e6 Merge "cdr_mysql: avoid releasing a config string" into 13 2017-10-11 19:09:52 -05:00
Jenkins2 b498942ba3 Merge "chan_vpb: Fix a gcc 7 out-of-bounds complaint" into 13 2017-10-11 16:28:29 -05:00
Daniel Tryba af09996178 res_pjsip: Prevent "user=phone" being added multiple times to header
ast_sip_add_usereqphone adds "user=phone" to the header every time is is
called without checking whether the param already exists. Preventing
this by searching to string representation of header for "user=phone".

ASTERISK-26988 #close

Change-Id: Ib84383b07254de357dc6a98d91fc1d2c2c3719e6
2017-10-11 16:34:52 -04:00
Tzafrir Cohen 8e05796e81 cdr_mysql: avoid releasing a config string
Fixes a memory corruption issue after a reload of cdr_mysql.

Issue was accidentally included in 747beb1ed1 .

ASTERISK-27270 #close

Change-Id: I90b6a9d18710c0f9009466370bd5f4bac5d5d12e
2017-10-11 15:14:32 -05:00
Jenkins2 4a2caab4f6 Merge "app_originate: Set ORIGINATE_STATUS correctly on failure" into 13 2017-10-11 15:03:46 -05:00
Richard Mudgett 5f6bad6733 cdr.c: Defer misc checks.
Try to defer some checks until needed in case there is an early exit.

Change-Id: Ibc6b34c38a4f60ad4f9b67984b7d070a07257064
2017-10-11 13:28:26 -05:00
Jenkins2 4a0fa1ba59 Merge "cdr.c: Eliminated simple RAII_VAR usages." into 13 2017-10-11 12:18:55 -05:00
Joshua Colp 0430ae5d51 Merge "app_queue.c: clear moh field in init_queue" into 13 2017-10-11 11:05:27 -05:00
George Joseph f3f141781c chan_vpb: Fix a gcc 7 out-of-bounds complaint
chan_vpb was trying to use sizeof(*p->play_dtmf), where
p->play_dtmf is defined as char[16], to get the length of the array
but since p->play_dtmf is an actual array, sizeof(*p->play_dtmf)
returns the size of the first array element, which is 1.  gcc7
validly complains because the context in which it's used could
cause an out-of-bounds condition.

Change-Id: If9c4bfdb6b02fa72d39e0c09bf88900663c000ba
2017-10-11 06:03:41 -06:00
Jenkins2 5a8c148dcf Merge "res_pjsip_registrar.c: Update remove_existing AOR contact handling." into 13 2017-10-11 06:34:00 -05:00
Nathan Bruning 416e35589e app_queue.c: clear moh field in init_queue
ASTERISK-27301 #close

Change-Id: Ic31361f34e2de3b6470e68fc37205a7711082eba
2017-10-11 05:34:36 -05:00
Jenkins2 821d7428ab Merge "contrib/thirdparty/sip_to_pjsip: add additional flag mappings" into 13 2017-10-10 12:24:37 -05:00
Sean Bright e71a65a358 app_originate: Set ORIGINATE_STATUS correctly on failure
We were ignoring the return value from ast_pbx_outgoing_exten() and
ast_pbx_outgoing_app() which could fail before setting the reason code.
This resulted in failures being reported as success.

ASTERISK-25266 #close
Reported by: Allen Ford

Change-Id: Idf16237b7e41b527d2c69c865829128686beeb3b
2017-10-10 13:06:11 -04:00
Richard Mudgett 42fdfffefc cdr.c: Eliminated simple RAII_VAR usages.
Change-Id: I150505db307249a962987e7b941bdd369bb91f35
2017-10-10 09:59:09 -05:00
Jenkins2 da07a3bb62 Merge "res_pjproject: Fix cleanup of buildopts vector." into 13 2017-10-10 08:12:38 -05:00
Jenkins2 2f3d3881d4 Merge "tcptls: Do not re-bind to wildcard on client creation." into 13 2017-10-10 07:41:42 -05:00
Corey Farrell 48971e4d43 res_pjproject: Fix cleanup of buildopts vector.
ASTERISK-27306

Change-Id: I3bed0edf3f55b1d4adcbabb25ec14f11dc766c72
2017-10-09 23:17:43 -05:00
Joshua Colp ce26554b51 Merge "cdr.h: Fix doxygen comments." into 13 2017-10-09 19:52:22 -05:00
Jenkins2 dedd5abfe2 Merge "cdr.c: Replace redundant check with an ast_assert()" into 13 2017-10-09 19:30:50 -05:00
Jenkins2 dc524825a9 Merge "cdr.c: Use current ao2 flag names" into 13 2017-10-09 18:33:29 -05:00
Jenkins2 d536802de2 Merge "res_pjsip: Fix issues that prevented shutdown of modules." into 13 2017-10-09 17:46:11 -05:00
Jenkins2 b3c49f271e Merge "cdr.c: Replace inlined code with ao2_t_replace()" into 13 2017-10-09 16:37:28 -05:00
Jenkins2 103737f7b1 Merge "res_config_sqlite: Don't enable SQLite CDRs when running 'make samples'" into 13 2017-10-09 15:40:53 -05:00
Jenkins2 4aba59b036 Merge "res_pjsip: Fix leak of persistent endpoint references." into 13 2017-10-09 15:16:51 -05:00
Richard Mudgett 128f7ffaa2 cdr.c: Replace redundant check with an ast_assert()
The only caller of cdr_object_fn_table.process_party_b() explicitly does
the check before calling.

Change-Id: Ib0c53cdf5048227842846e0df9d2c19117c45618
2017-10-09 13:33:52 -05:00
Richard Mudgett 3525081a7c cdr.c: Replace inlined code with ao2_t_replace()
Change-Id: I9f424f5282ca7d833592f958d95f1b2bafb549b0
2017-10-09 13:29:52 -05:00
Richard Mudgett 7366657a9a cdr.c: Use current ao2 flag names
Change-Id: Ib59d7d2f2a4a822754628f2c48a308d6791a6e6e
2017-10-09 13:27:27 -05:00
Richard Mudgett 34d55352a5 cdr.h: Fix doxygen comments.
* Also some misc formatting in cdr.c.

Change-Id: Ied89a28802a662c37c43326a1aafdce596e0df4a
2017-10-09 13:25:13 -05:00
Richard Mudgett d388c18abf res_pjsip_registrar.c: Update remove_existing AOR contact handling.
When "rewrite_contact" is enabled, the "max_contacts" count option can
block re-registrations because the source port from the endpoint can be
random.  When the re-registration is blocked, the endpoint may give up
re-registering and require manual intervention.

* The "remove_existing" option now allows a registration to succeed by
displacing any existing contacts that now exceed the "max_contacts" count.
Any removed contacts are the next to expire.  The behaviour change is
beneficial when "rewrite_contact" is enabled and "max_contacts" is greater
than one.  The removed contact is likely the old contact created by
"rewrite_contact" that the device is refreshing.

ASTERISK-27192

Change-Id: I64c107a10b70db1697d17136051ae6bf22b5314b
2017-10-09 12:53:13 -05:00
Corey Farrell 82592c3673 res_pjsip: Fix issues that prevented shutdown of modules.
res_pjsip and res_pjsip_session had circular references, preventing both
modules from shutting down.
* Move session supplement registration to res_pjsip.
* Use create internal functions for use by pjsip_message_filter.c.

ASTERISK-27306

Change-Id: Ifbd5c19ec848010111afeab2436f9699da06ba6b
2017-10-09 12:49:39 -04:00
Sean Bright 6b16fa12c8 res_config_sqlite: Don't enable SQLite CDRs when running 'make samples'
Change-Id: I65a5190b2732b2246d67472db70dd37db64ddad4
2017-10-09 09:15:54 -04:00
hajekd 39b68a41f7 res/res_ari.c Fix: Memory leaks in ARI when using Content-Type: application/json
ASTERISK-27305
Reported by: David Hajek
Tested by: David Hajek

Change-Id: Ife3e289062e6cf7d0e7d342dbf79ed96feff441e
2017-10-08 21:05:56 +02:00
Alexander Traud 209916981a tcptls: Do not re-bind to wildcard on client creation.
Since ASTERISK-26922, this issue affected only those chan_sip which were
* enabled for dual-stack (bindaddr=::), and
* enabled for TCP (tcpenable=yes) and/or TLS (tlsenable=yes), and
* tried to register and/or invite a IPv4-only service,
* via TCP and/or TLS.
Now, ast_tcptls_client_create does not re-bind to [::] anymore.

ASTERISK-27324 #close

Change-Id: I4b242837bdeb1ec7130dc82505c6180a946fd9b5
2017-10-08 09:22:57 -05:00
Corey Farrell f1163c0f6f res_pjsip: Fix leak of persistent endpoint references.
Do not manually call sip_endpoint_apply_handler from load_all_endpoints.
This is not necessary and causes memory leaks.

Additionally reinitialize persistent->aors when we reuse a persistent
object with a new endpoint.

ASTERISK-27306

Change-Id: I59bbfc8da8a14d5f4af8c5bb1e71f8592ae823eb
2017-10-06 15:54:11 -05:00
Jenkins2 d2a39f896d Merge "vector: multiple evaluation of elem in AST_VECTOR_ADD_SORTED." into 13 2017-10-06 15:09:23 -05:00
Jenkins2 3844179335 Merge "res_pjsip: Fix leak of fake_auth references." into 13 2017-10-06 14:46:11 -05:00
Corey Farrell 8bf4be1048 vector: multiple evaluation of elem in AST_VECTOR_ADD_SORTED.
Use temporary variable to prevent multiple evaluations of elem argument.
This resolves a memory leak in res_pjproject startup.

ASTERISK-27317 #close

Change-Id: Ib960d7f5576f9e1a3c478ecb48995582a574e06d
2017-10-06 13:39:04 -05:00
Jenkins2 7703ab0443 Merge "main/strings: Fix uninitialized value." into 13 2017-10-06 13:21:33 -05:00
Jenkins2 a6ead833ee Merge "res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy" into 13 2017-10-06 09:51:07 -05:00
Corey Farrell 5110600f1e res_pjsip: Fix leak of fake_auth references.
pjsip_distributor leaks references to fake_auth when the default realm
has not changed.

ASTERISK-27306

Change-Id: I3fcf103b3680ad2d1d4610dcd6738eeaebf4d202
2017-10-06 09:24:52 -05:00
Corey Farrell 462dd7c2de main/strings: Fix uninitialized value.
ast_strings_match uses sscanf and checks for non-zero return to verify a
token was parsed. This is incorrect as sscanf returns EOF (-1) for errors.

ASTERISK-27318 #close

Change-Id: Ifcece92605f58116eff24c5a0a3b0ee08b3c87b1
2017-10-05 20:28:28 -05:00
Jenkins2 646d97f626 Merge "app_queue.c: Fix announcements when announce-to-first-user not enabled." into 13 2017-10-04 14:32:26 -05:00
krells 29c442b587 res_calendar_icalendar: Filter out occurrences superceded by another VEVENT
When we are loading the calendars, we call libical's
icalcomponent_foreach_recurrence method for each VEVENT component that
we have in our calendar.

That method has no knowledge concerning the existence of the other
VEVENT components and will feed our callback with all ocurrences
matching the requested time span.

The occurrences generated by icalcomponent_foreach_recurrence while
expanding a recurring VEVENT's RRULE and RDATE properties can be
superceded by an other VEVENT sharing the same UID.

I use an external iterator (in libical terminology) to avoid messing
with the internal ones from the calling function, and search for
VEVENTS which could supersede the current occurrence.

The event which can invalidate this occurence needs to have:

- the same UID as our recurrent component (comp)
- a RECURRENCE-ID property, which represents the start time of this
  occurrence

If one component is found, just clean and return.

ASTERISK-27296 #close
Reported by: Benoît Dereck-Tricot

Change-Id: I8587ae3eaa765af7cb21eda3b6bf84e8a1c87af8
2017-10-04 10:49:18 -04:00
Torrey Searle 6c30f4a2d1 contrib/thirdparty/sip_to_pjsip: add additional flag mappings
add mappings for udptl redundancy, rtptimeout, and debug flags

Change-Id: Ie73cf5c83c05dee01eb9624ede76c1a30225d73a
2017-10-04 09:26:17 -04:00
Jenkins2 5a8f85ae98 Merge "heap.c: No need to calloc heap pointer array." into 13 2017-10-03 20:25:05 -05:00
Daniel Tryba 6dfe5b29b6 res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy
Currently privacy requests are only granted if the Privacy header
value is exactly "id" (defined in RFC 3325). It ignores any other
possible value (or a combination there of). This patch reverses the
logic from testing for "id" to grant privacy, to testing for "none" and
granting privacy for any other value. "none" must not be used in
combination with any other value (RFC 3323 section 4.2).

ASTERISK-27284 #close

Change-Id: If438a21f31a962da32d7a33ff33bdeb1e776fe56
2017-10-03 22:05:33 +02:00
Jenkins2 9d4a7b528c Merge "logger: Bring back ability to turn debug on by source file" into 13 2017-10-03 09:55:06 -05:00
Richard Mudgett 0945f10d3b app_queue.c: Fix announcements when announce-to-first-user not enabled.
The previous patch for ASTERISK-27216 made it so you wouldn't get any
position or periodic announcements unless you had announce-to-first-user
enabled.  The announce-to-first-user feature was added by ASTERISK_21782
as a result of the patch which introduced the redundant announcements that
ASTERISK-27216 removes.

* By noting that the makeannouncement variable is used to suppresses the
first user announcement, we set its initial value to the
announce-to-first-user enable setting.

ASTERISK-27216

Change-Id: Ieaeb7dbea8ae7073086b775fbafe0625b000b10a
2017-09-28 18:47:01 -05:00
Richard Mudgett a433bb38b5 heap.c: No need to calloc heap pointer array.
Change-Id: I5ae2f316229f336eb90d99c7af7ed07a33097e68
2017-09-28 15:47:55 -05:00
Jenkins2 b6d5e9223c Merge "pjsip_message_filter: Fix regression causing bad contact address" into 13 2017-09-28 13:13:06 -05:00
George Joseph 47620ea862 logger: Bring back ability to turn debug on by source file
Somewhere along the way we lost the ability to debug individual
source files.  For modules, this wasn't a big deal but all the
source files in ./main are in the one "core" module so debugging
individual core capabilities was almost impossible.

* Added a test to DEBUG_ATLEAST that also checks __FILE__ instead
of just module name.  Any source file will work even if it's in
a module subdirectory.

Change-Id: Icc0af41837f3b1679dec7af21fa32cd1f7469f6e
2017-09-28 12:18:05 -05:00
Joshua Colp f4daa91dcb Merge "pjproject: Patch to correct STUN FINGERPRINT usage" into 13 2017-09-28 07:50:47 -05:00
George Joseph d70d7b2f5d pjsip_message_filter: Fix regression causing bad contact address
The "res_pjsip:  Filter out non SIP(S) requests" commit moved the
filtering of messages to pjproject's PJSIP_MOD_PRIORITY_TRANSPORT_LAYER
in order to filter out incoming bad uri schemes as early as possible.
Since the change affected outgoing messages as well and the TRANSPORT
layer is the last to be run on outgoing messages, we were overwriting
the setting of external_signaling_address (which is set earlier by
res_pjsip_nat) with an internal address.

* pjsip_message_filter now registers itself as a pjproject module
twice.  Once in the TSX layer for the outgoing messages (as it was
originally), then a second time in the TRANSPORT layer for the
incoming messages to catch the invalid uri schemes.

ASTERISK-27295
Reported by: Sean Bright

Change-Id: I2c90190c43370f8a9d1c4693a19fd65840689c8c
2017-09-26 11:46:31 -05:00
Richard Mudgett 221d8a5c24 res_rtp_asterisk.c: Fix bridge_p2p_rtp_write() reentrancy potential.
The bridge_p2p_rtp_write() has potential reentrancy problems.

* Accessing the bridged RTP members must be done with the instance1 lock
held.  The DTMF and asymmetric codec checks must be split to be done with
the correct RTP instance struct locked.  i.e., They must be done when
working on the appropriate side of the point to point bridge.

* Forcing the RTP mark bit was referencing the wrong side of the point to
point bridge.  The set mark bit is used everywhere else to set the mark
bit when sending not receiving.

The patches for ASTERISK_26745 and ASTERISK_27158 did not take into
account that not everything carried by RTP uses a codec.  The telephony
DTMF events are not exchanged with a codec.  As a result when
RFC2833/RFC4733 sent digits you would crash if "core set debug 1" is
enabled, the DTMF digits would always get passed to the core even though
the local native RTP bridge is active, and the DTMF digits would go out
using the wrong SSRC id.

* Add protection for non-format payload types like DTMF when updating the
lastrxformat and lasttxformat.  Also protect against non-format payload
types when checking for asymmetric codecs.

ASTERISK-27292

Change-Id: I6344ab7de21e26f84503c4d1fca1a41579364186
2017-09-26 11:12:44 -05:00
Jenkins2 a40978f865 Merge "channel.c: Fix invalid reference in conditionaled out code." into 13 2017-09-26 06:34:33 -05:00
Jenkins2 df17e01274 Merge "app_queue: Only do announcement logic between ringing cycles" into 13 2017-09-26 06:22:14 -05:00
Sean Bright f3b1b64d21 pjproject: Patch to correct STUN FINGERPRINT usage
Change-Id: I0e453253dff1388b0186b36c754457c1d0d12db6
2017-09-25 14:09:33 -04:00
Joshua Colp 7977daa0cc Merge "build: A few gcc 7 error fixes" into 13 2017-09-25 12:29:14 -05:00
Richard Mudgett 8d2c3effc2 channel.c: Fix invalid reference in conditionaled out code.
ASTERISK-27289

Change-Id: I7a415948116493050614d9f4fa91ffbe0c21ec4c
2017-09-25 11:22:34 -05:00
George Joseph 690f7f7c76 build: A few gcc 7 error fixes
Change-Id: I7b5300fbf1af7d88d47129db13ad6dbdc9b553ec
2017-09-25 06:25:06 -06:00
Sean Bright f39af4d36d res_pjsip: Use ast_sip_is_content_type() where appropriate
Change-Id: If3ab0d73d79ac4623308bd48508af2bfd554937d
2017-09-22 11:04:31 -04:00
Jenkins2 9576ae0e7e Merge "res_config_pgsql: Fix removed support to previous for versions PostgreSQL 9.1" into 13 2017-09-22 05:31:51 -05:00
Jenkins2 fef8b6efec Merge "res_srtp: lower log level of auth failures" into 13 2017-09-21 11:35:06 -05:00
Rodrigo Ramírez Norambuena c98e980fff res_config_pgsql: Fix removed support to previous for versions PostgreSQL 9.1
In PostgreSQL 9.1 the backslash are string literals and not the escape
of characters.

In previous issue ASTERISK_26057 was fixed the use of escape LIKE but the
support for old version of Postgresql than 9.1 was dropped. The sentence
before make was "ESCAPE '\'" but in version before than 9.1  need it to be
as follow "ESCAPE '\\'".

ASTERISK-27283

Change-Id: I96d9ee1ed7693ab17503cb36a9cd72847165f949
2017-09-21 11:25:39 -05:00
Joshua Colp 2f8e7be0d1 Merge "chan_sip: Expose read-only access to the full SIP INVITE Request-URI" into 13 2017-09-21 11:16:24 -05:00
StefanEng86 0adf6f3bd9 app_queue: Only do announcement logic between ringing cycles
This patch reverts the change by patch 2263 from old reviewboard.
Note that reverting that 2263-patch still preserves the behaviour that
the commit log of the 2263-patch claimed to add. The reason for this is:

The function wait_for_answer is only called from try_calling which
in turn is only called from the main for loop in queue_exec, and
earlier in that loop we already check the things that's removed by
this patch. There's no need to check those things twice each loop
iteration, and I think the proper place to check it is before each
ringing cycle. By checking it in wait_for_answer, you allow the issue
explained in the jira - that the head caller hears announcements while
the agents' sip phones are actively ringing.

Reported-by: Stefan Engström
Tested-by: Stefan Engström
ASTERISK-27216 #close

Change-Id: Ic4290dc75256f9743900c6762ee1bb915f672db0
2017-09-21 07:04:55 -03:00
Jean Aunis da40976987 bridge : Fix one-way direct-media when early bridging with native_rtp
When two channels were early bridged in a native_rtp bridge, the RTP description
on one side was not updated when the other side answered.
This patch forbids non-answered channels to enter a native_rtp bridge, and
triggers a bridge reconfiguration when an ANSWER frame is received.

ASTERISK-27257

Change-Id: If1aaee1b4ed9658a1aa91ab715ee0a6413b878df
2017-09-20 10:19:07 -05:00
Jenkins2 4bde3d8634 Merge "res_pjsip_pubsub: Check for Content-Type header in rx_notify_request" into 13 2017-09-20 07:59:36 -05:00
George Joseph 828a0611bc res_pjsip_pubsub: Check for Content-Type header in rx_notify_request
pubsub_on_rx_notify_request wasn't checking for a null
Content-Type header before checking that it was
application/simple-message-summary.

ASTERISK-27279
Reported by: Ross Beer

Change-Id: Iec2a6c4d2e74af37ff779ecc9fd35644c5c4ea52
2017-09-19 12:49:06 -06:00
Jenkins2 2f11ea59db Merge "AST-2017-008: Improve RTP and RTCP packet processing." into 13 2017-09-19 10:37:10 -05:00
David J. Pryke 94f616e5e2 chan_sip: Expose read-only access to the full SIP INVITE Request-URI
Provide a way to get the contents of the the Request URI from the initial SIP
INVITE in dial plan function call. (In this case "${CHANNEL(ruri)}")

ASTERISK-27278
Reported by: David J. Pryke
Tested by: David J. Pryke

Change-Id: I1dd4d6988eed1b6c98a9701e0e833a15ef0dac3e
2017-09-19 10:34:01 -04:00
Joshua Colp 839c35adab Merge "res_calendar: On reload, update all configuration" into 13 2017-09-19 07:32:56 -05:00
Jenkins2 1a35e2b8c1 Merge "cdr_mysql.c: Apply cdrzone to start and answer" into 13 2017-09-19 06:25:59 -05:00
Alexander Traud cfc0ca1fb5 tcptls: Fixed a white space error.
ASTERISK-26606

Change-Id: I81a7268ef7ba012d4d80d44c70b6276d48e397fa
2017-09-18 17:27:24 +02:00
Alexander Traud 99a08eb7ab res_srtp: lower log level of auth failures
Previously, sRTP authentication failures were reported on log level WARNING.
When such failures happen, each RT(C)P packet is affected, spamming the log.
Now, those failures are reported at log level VERBOSE 2. Furthermore, the
amount is further reduced (previously all two seconds, now all three seconds).
Additionally, the new log entry informs whether media (RTP) or statistics (RTCP)
are affected.

ASTERISK-16898 #close

Change-Id: I6c98d46b711f56e08655abeb01c951ab8e8d7fa0
2017-09-18 17:00:31 +02:00
alex f1eb36ea51 cdr_mysql.c: Apply cdrzone to start and answer
Change-Id: I7de0a5adc89824a5f2b696fc22c80fc22dff36b0
2017-09-18 07:03:00 -05:00
Richard Mudgett 6d4b801c83 AST-2017-008: Improve RTP and RTCP packet processing.
Validate RTCP packets before processing them.

* Validate that the received packet is of a minimum length and apply the
RFC3550 RTCP packet validation checks.

* Fixed potentially reading garbage beyond the received RTCP record data.

* Fixed rtp->themssrc only being set once when the remote could change
the SSRC.  We would effectively stop handling the RTCP statistic records.

* Fixed rtp->themssrc to not treat a zero value as special by adding
rtp->themssrc_valid to indicate if rtp->themssrc is available.

ASTERISK-27274

Make strict RTP learning more flexible.

Direct media can cause strict RTP to attempt to learn a remote address
again before it has had a chance to learn the remote address the first
time.  Because of the rapid relearn requests, strict RTP could latch onto
the first remote address and fail to latch onto the direct media remote
address.  As a result, you have one way audio until the call is placed on
and off hold.

The new algorithm learns remote addresses for a set time (1.5 seconds)
before locking the remote address.  In addition, we must see a configured
number of remote packets from the same address in a row before switching.

* Fixed strict RTP learning from always accepting the first new address
packet as the new stream.

* Fixed strict RTP to initialize the expected sequence number with the
last received sequence number instead of the last transmitted sequence
number.

* Fixed the predicted next sequence number calculation in
rtp_learning_rtp_seq_update() to handle overflow.

ASTERISK-27252

Change-Id: Ia2d3aa6e0f22906c25971e74f10027d96525f31c
2017-09-15 15:46:30 -05:00
Jenkins2 b6e1b13de4 Merge "res_pjsip: Filter out non SIP(S) requests" into 13 2017-09-15 15:24:50 -05:00
Sean Bright 5075cc8eed res_calendar: On reload, update all configuration
This changes the behavior of res_calendar to drop all existing calendars
and re-create them whenever a reload is done. The Calendar API provides
no way for configuration information to be pushed down to calendar
'techs' so updated settings would not take affect until a module
unload/load was done or Asterisk was restarted.

Asterisk 15+ already has a configuration option 'fetch_again_at_reload'
that performs a similar function.

Also fix a tiny memory leak in res_calendar_caldav while we're at it.

ASTERISK-25524 #close
Reported by: Jesper

Change-Id: Ib0f8057642e9d471960f1a79fd42e5a3ce587d3b
2017-09-15 14:45:57 -05:00
Jenkins2 14109355f3 Merge "res_calendar: Various fixes" into 13 2017-09-15 08:10:22 -05:00
George Joseph 63900374fa res_pjsip: Filter out non SIP(S) requests
Incoming requests with non sip(s) URIs in the Request, To, From
or Contact URIs are now rejected with
PJSIP_SC_UNSUPPORTED_URI_SCHEME (416).  This is performed in
pjsip_message_filter (formerly pjsip_message_ip_updater) and is
done at pjproject's "TRANSPORT" layer before a request can even
reach the distributor.

URIs read by res_pjsip_outbound_publish from pjsip.conf are now
also checked for both length and sip(s) scheme.  Those URIs read
by outbound registration and aor were already being checked for
scheme but their error messages needed to be updated to include
scheme failure as well as length failure.

Change-Id: Ibb2f9f1d2dc7549da562af4cbd9156c44ffdd460
2017-09-14 13:08:38 -06:00
Jenkins2 77c6bab990 Merge "chan_rtp: Use μ-law by default instead of signed linear" into 13 2017-09-14 12:53:10 -05:00
Jenkins2 df7211421e Merge "res_pjsip: Add handling for incoming unsolicited MWI NOTIFY" into 13 2017-09-14 11:53:47 -05:00
Sean Bright db785ddb92 res_calendar: Various fixes
* The way that we were looking at XML elements for CalDAV was extremely
  fragile, so use SAX2 for increased robustness.

* Don't complain about a 'channel' not be specified if autoreminder is
  not set. Assume that if 'channel' is not set, we don't want to be
  notified.

* Fix some truncated CLI output in 'calendar show calendar' and make the
  'Autoreminder' description a bit more clear

ASTERISK-24588 #close
Reported by: Stefan Gofferje

ASTERISK-25523 #close
Reported by: Jesper

Change-Id: I200d11afca6a47e7d97888f286977e2e69874b2c
2017-09-13 15:46:43 -04:00
Sean Bright 0688f61a01 chan_rtp: Use μ-law by default instead of signed linear
Multicast/Unicast RTP do not use SDP so we need to use a format that
cleanly maps to one of the static RTP payload types. Without this
change, an Originate to a Multicast or Unicast channel without a format
specified would produce no audio on the receiving device.

ASTERISK-21399 #close
Reported by: Tzafrir Cohen

Change-Id: I97e332b566e85da04b0004b9b0daae746cfca0e3
2017-09-13 10:38:11 -04:00
George Joseph ed2a4ee81e res_pjsip: Add handling for incoming unsolicited MWI NOTIFY
A new endpoint parameter "incoming_mwi_mailbox" allows Asterisk to
receive unsolicited MWI NOTIFY requests and make them available to
other modules via the stasis message bus.

res_pjsip_pubsub has a new handler "pubsub_on_rx_mwi_notify_request"
that parses a simple-message-summary body and, if
endpoint->incoming_mwi_account is set, calls ast_publish_mwi_state
with the voice-message counts from the message.

Change-Id: I08bae3d16e77af48fcccc2c936acce8fc0ef0f3c
2017-09-13 08:21:36 -06:00
Jenkins2 1aef4fe9df Merge "alembic: Fix typo in add_auto_info_to_endpoint_dtmf_mode" into 13 2017-09-12 14:13:17 -05:00
Richard Mudgett 044674c0cd res_rtp_asterisk.c: Add doxygen to RTCP payload types.
Change-Id: I3f20ce428777cc4ce9c13b2f808d29ff8c873998
2017-09-11 12:34:46 -05:00
Jenkins2 55af8326b5 Merge "alembic: Add support for MS-SQL" into 13 2017-09-11 06:39:28 -05:00
George Joseph 5ff2d06aa6 alembic: Fix typo in add_auto_info_to_endpoint_dtmf_mode
The downgrade function was missing "_v2" at the end of the
alter column type.

Change-Id: Iaa9bcef48d6f3590ce07a61342d8e66f00263d8e
2017-09-11 04:52:51 -06:00
Walter Doekes babb617f20 res/res_pjsip: Fix localnet checks in pjsip, part 2.
In 45744fc53, I mistakenly broke SDP media address rewriting by
misinterpreting which address was checked in the localnet comparison.

Instead of checking the remote peer address to decide whether we need
media address rewriting, we check our local media address: if it's
local, then we rewrite. This feels awkward, but works and even made
directmedia work properly if you set local_net. (For the record: for
local peers, the SDP media rewrite code is not called, so the
comparison does no harm there.)

ASTERISK-27248 #close

Change-Id: I566be1c33f4d0a689567d451ed46bab9c3861d4f
2017-09-10 13:17:27 +02:00
Florian Floimair ad606844be alembic: Add support for MS-SQL
MS-SQL has no native Enum-type support and therefore
needs to work with constraints.
Since these constraints need unique names the suggested approach
referenced in the following alembic documentation has been applied:
http://bit.ly/2x9r8pb

ASTERISK-27255 #close

Change-Id: I4a399ba3eed41a33ce8cb294968ad340221580ee
2017-09-08 11:48:00 -05:00
Jenkins2 63211cc0ff Merge "app_waitforsilence: Cleanup & don't treat missing frames as 'noise'" into 13 2017-09-08 10:42:37 -05:00
Joshua Colp 2971c2f333 Merge "chan_sip: when getting sip pvt return failure if not found" into 13 2017-09-08 09:37:51 -05:00
Jenkins2 584f6abc4e Merge "res_srtp: Add support for libsrtp2.1." into 13 2017-09-07 13:26:39 -05:00
Jenkins2 bab59a8190 Merge "chan_sip: Do not change IP address in SDP origin line (o=) in SIP reINVITE" into 13 2017-09-07 13:05:42 -05:00
Jenkins2 1161fce1a1 Merge "func_cdr: honour 'u' flag on dummy channel" into 13 2017-09-07 10:40:40 -05:00
Jacek Konieczny 2aefc6e5fe func_cdr: honour 'u' flag on dummy channel
Fixes ${CDR(...,u)} when used in cdr_custom.conf

ASTERISK-27165 #close

Change-Id: Ia4e0b6ba93e03d27886354c279737790e2cd6a83
2017-09-07 04:36:59 -05:00
Scott Griepentrog c0d4f1880e chan_sip: when getting sip pvt return failure if not found
In handle_request_invite, when processing a pickup, a call
is made to get_sip_pvt_from_replaces to locate the pvt for
the subscription. The pvt is assumed to be valid when zero
is returned indicating no error, and is dereferenced which
can cause a crash if it was not found.

This change checks the not found case and returns -1 which
allows the calling code to fail appropriately.

ASTERISK-27217 #close
Reported-by: Bryan Walters

Change-Id: I6bee92b8b8b85fcac3fd66f8c00ab18bc1765612
2017-09-06 16:14:26 -05:00
Sean Bright e4797b2cbd app_waitforsilence: Cleanup & don't treat missing frames as 'noise'
* WaitForSilence completes successfully if it receives no media in the
  specified timeout, but when acting as WaitForNoise that logic needs
  to be reversed.

* Use standard argument parsing macros and add some error checking for
  invalid values.

* The documentation indicated that the first argument to both
  WaitForSilence and WaitForNoise was required when it was not. Update
  the documentation to reflect that.

* Wrap up some behavior in structs to avoid boolean checks all over the
  place.

ASTERISK-24066 #close
Reported by: M vd S

Change-Id: I01d40adc5b63342bb5018a1bea2081a0aa191ef9
2017-09-06 17:11:41 -04:00
George Joseph 186ef1a657 stasis/control: Fix possible deadlock with swap channel
If an error occurs during a bridge impart it's possible that
the "bridge_after" callback might try to run before
control_swap_channel_in_bridge has been signalled to continue.
Since control_swap_channel_in_bridge is holding the control lock
and the callback needs it, a deadlock will occur.

* control_swap_channel_in_bridge now only holds the control
  lock while it's actually modifying the control structure and
  releases it while the bridge impart is running.
* bridge_after_cb is now tolerant of impart failures.

Change-Id: Ifd239aa93955b3eb475521f61e284fcb0da2c3b3
2017-09-06 12:41:25 -05:00
Joshua Colp 9a366d2424 Merge "alembic: Fix enum creation for dtls_fingerprint" into 13 2017-09-06 11:23:19 -05:00
Jenkins2 f6d63a2539 Merge "alembic: fix erroneous commit for add_prune_on_boot" into 13 2017-09-06 10:19:28 -05:00
Jenkins2 47e8ffe40a Merge "res/res_pjsip: Standardize/fix localnet checks across pjsip." into 13 2017-09-06 09:43:32 -05:00
Jenkins2 ae5471e313 Merge "res_rtp_asterisk.c: Check RTP packet version earlier." into 13 2017-09-06 09:34:55 -05:00
Vitezslav Novy 597d1f8951 chan_sip: Do not change IP address in SDP origin line (o=) in SIP reINVITE
If directmedia=yes is configured, when call is answered, Asterisk sends reINVITE
to both parties to set up media path directly between the endpoints.
In this reINVITE msg SDP origin line (o=) contains IP address of endpoint
instead of IP of asterisk. This behavior violates RFC3264, sec 8:
"When issuing an offer that modifies the session,
the "o=" line of the new SDP MUST be identical to that in the
previous SDP, except that the version in the origin field MUST
increment by one from the previous SDP."
This patch assures IP address of Asterisk is always sent in
SDP origin line.

ASTERISK-17540
Reported by:  saghul

Change-Id: I533a047490c43dcff32eeca8378b2ba02345b64e
2017-09-06 16:22:53 +02:00
Jenkins2 b55bab3237 Merge "formats: Restore previous fread() behavior" into 13 2017-09-06 09:03:04 -05:00
George Joseph 15ddc9acb3 alembic: Fix enum creation for dtls_fingerprint
Change-Id: Ic061c5066a146616a68376881c7e4cf6d6e7e7db
2017-09-06 06:56:13 -06:00
Jenkins2 f9b28dd990 Merge "res_pjsip_t38: Make t38_reinvite_response_cb tolerant of NULL channel" into 13 2017-09-06 06:52:55 -05:00
Florian Floimair 2370469645 alembic: fix erroneous commit for add_prune_on_boot
Added include for postgresql ENUM type and
redefined values in the same way as in the
other migration scripts.

ASTERISK-27254 #close

Change-Id: Id667304cdf3891b1c2f7d35fab3e2a84026159fa
2017-09-06 05:59:44 -05:00
Alexander Traud 13aa1241c3 res_srtp: Add support for libsrtp2.1.
Asterisk is able to use libSRTP 2.0.x. However since libSRTP 2.1.x, the macro
SRTP_AES_ICM got renamed to SRTP_AES_ICM_128. Beside to still compile with
previous versions of libSRTP, this change allows libSRTP 2.1.x as well.

ASTERISK-27253 #close

Change-Id: I2e6eb3c3bc844fee8a624060a2eb6f182dc70315
2017-09-06 10:15:26 +02:00
Ben Ford 598a18ffee chan_pjsip: Suppress frame warnings.
When rtp_keepalive is on for a PJSIP endpoint dialing to another
Asterisk instance also using PJSIP, Asterisk will continue to print
warning messages about not being able to send frames of a certain
type. This suppresses that warning message.

Change-Id: I0332a05519d7bda9cacfa26d433909ff1909be67
2017-09-05 17:15:23 -05:00
Richard Mudgett 6c922b3157 res_rtp_asterisk.c: Check RTP packet version earlier.
Change-Id: Ic6493a7d79683f3e5845dff1cee49445fd5a0adf
2017-09-05 12:12:05 -05:00
Sean Bright 3f7d0b63fc formats: Restore previous fread() behavior
Some formats are able to handle short reads while others are not, so
restore the previous behavior for the format modules so that we don't
have spurious errors when playing back files.

ASTERISK-27232 #close
Reported by: Jens T.

Change-Id: Iab7f52b25a394f277566c8a2a4b15a692280a300
2017-09-05 11:05:48 -04:00
Walter Doekes 45744fc53d res/res_pjsip: Standardize/fix localnet checks across pjsip.
In 2dee95cc (ASTERISK-27024) and 776ffd77 (ASTERISK-26879) there was
confusion about whether the transport_state->localnet ACL has ALLOW or
DENY semantics.

For the record: the localnet has DENY semantics, meaning that "not in
the list" means ALLOW, and the local nets are in the list.

Therefore, checks like this look wrong, but are right:

    /* See if where we are sending this request is local or not, and if
       not that we can get a Contact URI to modify */
    if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) {
        ast_debug(5, "Request is being sent to local address, "
                     "skipping NAT manipulation\n");

(In the list == localnet == DENY == skip NAT manipulation.)

And conversely, other checks that looked right, were wrong.

This change adds two macro's to reduce the confusion and uses those
instead:

    ast_sip_transport_is_nonlocal(transport_state, addr)
    ast_sip_transport_is_local(transport_state, addr)

ASTERISK-27248 #close

Change-Id: Ie7767519eb5a822c4848e531a53c0fd054fae934
2017-09-05 16:16:01 +02:00
Joshua Colp 7b240d1734 Merge "app_directory: Handle a NULL mailbox without crashing" into 13 2017-09-05 08:20:26 -05:00
Jenkins2 6b9d18be7a Merge "chan_ooh323: Fix confusing indentation warning" into 13 2017-09-05 06:39:56 -05:00
George Joseph 786c4791f9 res_pjsip_t38: Make t38_reinvite_response_cb tolerant of NULL channel
t38_reinvite_response_cb can get called by res_pjsip_session's
session_inv_on_tsx_state_changed in situations where session->channel
is NULL.  If it is, the ast_log warning segfaults because it tries
to get the channel name from a NULL channel.

* Check session->channel and print "unknown channel" when it's NULL.

ASTERISK-27236
Reported by: Ross Beer

Change-Id: I4326e288d36327f6c79ab52226d54905cdc87dc7
2017-09-05 04:54:51 -06:00
Sean Bright 55f30c29fd rtp_engine: Prevent possible double free with DTLS config
ASTERISK-27225 #close
Reported by: Richard Kenner

Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89
2017-09-01 18:59:35 -04:00
Sean Bright f36db2dbdc chan_ooh323: Fix confusing indentation warning
ASTERISK-27177 #close
Reported by: Tzafrir Cohen

Change-Id: I40311c404edb2302a7543ad5ca7a06b2a38f2d97
2017-09-01 14:15:40 -04:00
Sean Bright 5f4863d4f9 app_directory: Handle a NULL mailbox without crashing
ASTERISK-27241 #close
Reported by: David Moore

Change-Id: Ibbbca85517b04c315406ebfe3b6f7e0763daedc6
2017-09-01 11:16:09 -04:00
Jenkins2 07577fc997 Merge "chan_pjsip: Add tag info in CHANNEL function" into 13 2017-08-31 17:15:52 -05:00
Jenkins2 b0064245b3 Merge "pjsip_message_ip_updater: Fix issue handling "tel" URIs" into 13 2017-08-31 06:36:46 -05:00
Jenkins2 c4254e237c Merge "AST-2017-006: Fix app_minivm application MinivmNotify command injection" into 13 2017-08-31 06:35:14 -05:00
George Joseph 990b017668 pjsip_message_ip_updater: Fix issue handling "tel" URIs
sanitize_tdata was assuming all URIs were SIP URIs so when a non
SIP uri was in the From, To or Contact headers, the unconditional
cast of a non-pjsip_sip_uri structure to pjsip_sip_uri caused
a segfault when trying to access uri->other_param.

* Added PJSIP_URI_SCHEME_IS_SIP(uri) || PJSIP_URI_SCHEME_IS_SIPS(uri)
  checks before attempting to cast or use the returned uri.

ASTERISK-27152
Reported-by: Ross Beer

Change-Id: Id380df790e6622c8058a96035f8b8f4aa0b8551f
2017-08-30 18:44:06 +00:00
Corey Farrell 04ee3eb774 AST-2017-006: Fix app_minivm application MinivmNotify command injection
An admin can configure app_minivm with an externnotify program to be run
when a voicemail is received.  The app_minivm application MinivmNotify
uses ast_safe_system() for this purpose which is vulnerable to command
injection since the Caller-ID name and number values given to externnotify
can come from an external untrusted source.

* Add ast_safe_execvp() function.  This gives modules the ability to run
external commands with greater safety compared to ast_safe_system().
Specifically when some parameters are filled by untrusted sources the new
function does not allow malicious input to break argument encoding.  This
may be of particular concern where CALLERID(name) or CALLERID(num) may be
used as a parameter to a script run by ast_safe_system() which could
potentially allow arbitrary command execution.

* Changed app_minivm.c:run_externnotify() to use the new ast_safe_execvp()
instead of ast_safe_system() to avoid command injection.

* Document code injection potential from untrusted data sources for other
shell commands that are under user control.

ASTERISK-27103

Change-Id: I7552472247a84cde24e1358aaf64af160107aef1
2017-08-30 18:41:25 +00:00
Joshua Colp 1a022285dd res_rtp_asterisk: Only learn a new source in learn state.
This change moves the logic which learns a new source address
for RTP so it only occurs in the learning state. The learning
state is entered on initial allocation of RTP or if we are
told that the remote address for the media has changed. While
in the learning state if we continue to receive media from
the original source we restart the learning process. It is
only once we receive a sufficient number of RTP packets from
the new source that we will switch to it. Once this is done
the closed state is entered where all packets that do not
originate from the expected source are dropped.

The learning process has also been improved to take into
account the time between received packets so a flood of them
while in the learning state does not cause media to be switched.

Finally RTCP now drops packets which are not for the learned
SSRC if strict RTP is enabled.

ASTERISK-27013

Change-Id: I56a96e993700906355e79bc880ad9d4ad3ab129c
2017-08-30 18:36:52 +00:00
Jenkins2 844f70f301 Merge "bridge_native_rtp.c: Fixup native_rtp_framehook()" into 13 2017-08-30 08:38:49 -05:00
Richard Mudgett 4aaccb7795 bridge_native_rtp.c: Fixup native_rtp_framehook()
* Fix framehook to test frame type for control frame.
* Made framehook exit early if frame type is not a control frame.
* Eliminated RAII_VAR in framehook.
* Use switch instead of else-if ladder for control frame handling.

Change-Id: Ia555fc3600bd85470e3c0141147dbe3ad07c1d18
2017-08-29 14:22:15 -05:00
Sean Bright d2ace23248 confbridge: Handle user hangup during name recording
This prevents orphaned CBAnn channels from getting stuck in the bridge.

ASTERISK-26994 #close
Reported by: James Terhune

Change-Id: I5e43e832a9507ec3f2c59752cd900b41dab80457
2017-08-29 10:26:17 -04:00
Jenkins2 2d69137bf4 Merge "app_record: Resolve some absolute vs. relative filename bugs" into 13 2017-08-29 05:22:55 -05:00
Jenkins2 378e0f7764 Merge "voicemail: Fix various abuses of mkstemp" into 13 2017-08-29 05:07:45 -05:00
Jenkins2 71cc740828 Merge "main/app: Only look to end of file if ':end' is specified, and not just ':'" into 13 2017-08-28 07:35:29 -05:00
Jenkins2 06e7d6e750 Merge "res/res_pjsip_session: allow SDP answer to be regenerated" into 13 2017-08-28 06:48:23 -05:00
Jenkins2 a3b36b5043 Merge "alembic: Add dtls_fingerprint column in ps_endpoints table" into 13 2017-08-28 06:43:00 -05:00
Andre Nazario a45af32983 chan_pjsip: Add tag info in CHANNEL function
Create local_tag and remote_tag in CHANNEL info to get tag from From and
To headers of a SIP dialog.

ASTERISK-27220

Change-Id: I59b16c4b928896fcbde02ad88f0e98922b15d524
2017-08-25 23:06:10 -03:00
Sean Bright 9e6efcace5 voicemail: Fix various abuses of mkstemp
mkstemp() returns a unique filename, but appending an extension to that
filename does not guarantee uniqueness. Instead, use mkdtemp() and we
can put whatever extension we want on the files that we create inside
the directory.

In the case of app_minivm, we also now properly clean up any temporary
files that we create.

ASTERISK-20858 #close
Reported by: Walter Doekes

Change-Id: I30ad04f0e115f0b11693ff678ba5184d8b938e43
2017-08-25 17:02:17 -04:00
Sean Bright 01b5913ce0 app_record: Resolve some absolute vs. relative filename bugs
If the Record() application is called with a relative filename that
includes directories, we were not properly creating the intermediate
directories and Record() would fail.

Secondarily, updated the documentation for RECORDED_FILE to mention
that it does not include a filename extension.

Finally, rewrote the '%d' functionality to be a bit more straight
forward and less noisy.

ASTERISK-16777 #close
Reported by: klaus3000

Change-Id: Ibc2640cba3a8c7f17d97b02f76b7608b1e7ffde2
2017-08-25 13:25:44 -04:00
Jenkins2 28857047da Merge "app_queue: Evaluate realtime queues when running dialplan functions" into 13 2017-08-25 09:07:53 -05:00
Jenkins2 c0251ae004 Merge "app_voicemail: Honor escape digits in "greeting only" mode" into 13 2017-08-25 08:12:26 -05:00
Florian Floimair bf178a0f4f alembic: Add dtls_fingerprint column in ps_endpoints table
The ps_endpoints table was missing the dtls_fingerprint column
introduced with commit adba2a8d7f.

ASTERISK-27168 #close

Change-Id: I9cb5006f7f50718b5239919562773adabb334cfd
2017-08-25 08:09:35 -05:00
Matt Jordan fff2f68616 main/app: Only look to end of file if ':end' is specified, and not just ':'
There is a little known feature in app_controlplayback that will cause the
specified offset to be used relative to the end of a file if a ':end' is
detected within the filename.

This feature is pretty bad, but okay.

However, a bug exists in this code where a ':' detected in the filename
will cause the end pointer to be non-NULL, even if the full ':end' isn't
specified. This causes us to treat an unspecified offset (0) as being
"start playing from the end of the file", resulting in no file playback
occurring.

This patch fixes this bug by resetting the end pointer if ':end' is not
found in the filename.

ASTERISK-23608 #close
Reported by: Jonathan White

Change-Id: Ib4c7b1b45283e4effd622a970055c51146892f35
(cherry picked from commit 13efea24f7)
2017-08-24 13:37:52 -05:00
Sean Bright 579d4593ac app_queue: Evaluate realtime queues when running dialplan functions
ASTERISK-19103 #close
Reported by: Jim Van Meggelen

Change-Id: I4bd32a9d1fcebb8ac56bff0e084d4f53e31b692b
2017-08-24 10:42:24 -04:00
Sean Bright 0af145de2d app_voicemail: Honor escape digits in "greeting only" mode
ASTERISK-21241 #close
Reported by: Eelco Brolman
Patches:
	Patch uploaded by Eelco Brolman (License 6442)

Change-Id: Icbe39b5c82a49b46cf1d168dc17766f3d84f54fe
2017-08-24 09:03:40 -05:00
Sean Bright d251a961ac res_smdi: Clean up memory leak
Change-Id: I1e33290929e1aa7c5b9cb513f8254f2884974de8
2017-08-24 09:39:24 -04:00
Jenkins2 e8cfd5a80f Merge "bridge_softmix.c: Remove always true test." into 13 2017-08-23 11:20:33 -05:00
Richard Mudgett 3f22b53349 bridge_softmix.c: Remove always true test.
Change-Id: I26238df2ff0d0f6dfe95c3aa35da588f1ee71727
2017-08-22 11:04:15 -05:00
Sungtae Kim b88c3a4209 app_queue: Fix initial hold time queue statistic
Fixed to use correct initial value and fixed to use the
correct queue info to check the first value.

ASTERISK-27204

Change-Id: Ia9e36c828e566e1cc25c66f73307566e4acb8e73
2017-08-22 08:27:47 -05:00
Jenkins2 71753d67f4 Merge "res_xmpp: fix inverted return code check in OAuth" into 13 2017-08-22 07:43:35 -05:00
Torrey Searle 8e99969000 res/res_pjsip_session: allow SDP answer to be regenerated
If an SDP answer hasn't been sent yet, it's legal to change it.
This is required for PJSIP_DTMF_MODE to work correctly, and can
also have use in the future for updating codecs too.

ASTERISK-27209 #close

Change-Id: Idbbfb7cb3f72fbd96c94d10d93540f69bd51e7a1
2017-08-22 12:22:56 +00:00
Jenkins2 3fffa7ae86 Merge "res_calendar_icalendar: Properly handle recurring events" into 13 2017-08-22 05:07:03 -05:00
Michael Kuron 4faf77feec res_xmpp: fix inverted return code check in OAuth
fetch_access_token calls func_curl via ast_func_read. The latter returns 0 upon
success and -1 if the function is not available.
This commit inverts the return code check so that an error is printed if the
module is not loaded and not if it is loaded.

ASTERISK-27207 #close

Change-Id: I9ef903f80702d1218e8701f65a4e5e918e6548fb
2017-08-22 00:34:54 -05:00
Sean Bright a6251ec373 res_calendar_icalendar: Properly handle recurring events
When looking for recurring events, use the correct end time based on the
configured 'timeframe.'

ASTERISK-27174 #close
Reported by: Mark Thompson

Change-Id: Id90c3cfc79d561a5521d79be176683e225f2edef
2017-08-17 13:14:54 -04:00
George Joseph 572b5307e0 Fix downloader not working with curl
The codec/dpma downloader wasn't handling curl correctly.  The logic
that transforms makeopts into a bash-sourceable file wasn't
handling the make 'or' command in DOWNLOAD_TIMEOUT so bash was
looking for an 'or' command.

That logic has been eliminated.  Instead of trying to transform
and source makeopts, the downloader now calls a make scriptlet
to print the value of a specific variable.  This way, make handles
the ors (or any other make construct that happens to creep into
that file).

ASTERISK-27202
Reported by: Sean McCord

Change-Id: Iadfb6693528e4d4da7b8bb201fa66da2c71c7f99
2017-08-16 15:04:12 -06:00
Jenkins2 b461fe8bcd Merge "configure: Check cache for valid pjproject tarball before downloading." into 13 2017-08-16 07:06:55 -05:00
Richard Mudgett 8594f73a81 configure: Check cache for valid pjproject tarball before downloading.
On a fresh Asterisk source directory, the bundled pjproject tarball is
unconditionally downloaded even if the tarball is already in a specified
cache directory.

* Made check if the pjproject tarball is valid in the cache directory
before downloading the tarball on a fresh source directory.

Change-Id: Ic7ec842d3c97ecd8dafbad6f056b7fdbce41cae5
2017-08-15 15:17:22 -05:00
Richard Mudgett d08342b0cb res_pjsip: Fix prune_on_boot to remove only contacts for the host.
* Check that the contact's reg_server matches the host's name before
deleting any prune_on_boot contacts.  We don't want to delete reliable
transport contacts made with other servers if the ps_contacts database
table is shared with other servers.

Thanks to Ross Beer for pointing out that the original prune logic would
delete reliable transport contacts from other servers.

ASTERISK-27147

Change-Id: I8e439d0d1c266ffdfd7b73d1e5e466180a689bd0
2017-08-15 11:21:20 -05:00
Jenkins2 fa50a3def9 Merge "res_xmpp: Google OAuth 2.0 protocol support for XMPP / Motif" into 13 2017-08-15 08:18:29 -05:00
Andrey Egorov 54e3ac402f res_xmpp: Google OAuth 2.0 protocol support for XMPP / Motif
Add ability to use tokens instead of passwords according to Google OAuth 2.0
protocol.

ASTERISK-27169
Reported by: Andrey Egorov
Tested by: Andrey Egorov

Change-Id: I07f7052a502457ab55010a4d3686653b60f4c8db
2017-08-15 11:08:59 +00:00
George Joseph b81de2c896 Merge "res_pjsip_outbound_registration.c: Re-REGISTER on transport shutdown." into 13 2017-08-14 14:56:29 -05:00
Jenkins2 1bfb4047ae Merge "res_pjsip: Remove ephemeral registered contacts on transport shutdown." into 13 2017-08-14 13:14:13 -05:00
Jenkins2 cc4735742c Merge "res_pjsip: PJSIP Transport state monitor refactor." into 13 2017-08-14 13:05:29 -05:00
Jenkins2 1ff6082da9 Merge "res_pjsip_transport_management.c: Rename some variables." into 13 2017-08-14 12:49:45 -05:00
Richard Mudgett bac3e8c08b STUN/netsock2: Fix some valgrind uninitialized memory findings.
* netsock2.c: Test the addr->len member first as it may be the only member
initialized in the struct.

* stun.c:ast_stun_handle_packet(): The combinded[] local array could get
used uninitialized by ast_stun_request().  The uninitialized string gets
copied to another location and could overflow the destination memory
buffer.

These valgrind findings were found for ASTERISK_27150 but are not
necessarily a fix for the issue.

Change-Id: I55f8687ba4ffc0f69578fd850af006a56cbc9a57
2017-08-10 14:27:15 -05:00
Richard Mudgett 1cf2c79f37 res_pjsip_outbound_registration.c: Re-REGISTER on transport shutdown.
The fix for the issue is broken up into three parts.

This is part three which handles the client side of REGISTER requests.
The registered contact may no longer be valid on the server when the
transport used is reliable and the connection is broken.

* Re-REGISTER our contact if the reliable transport is broken after
registration completes.  We attempt to re-REGISTER immediately to minimize
the time we are unreachable.  Time may have already passed between the
connection being broken and the loss being detected.

* Reorder sip_outbound_registration_state_alloc() so the STATSD_GUAGE's
are still correct if an allocation failure happens.

ASTERISK-27147

Change-Id: I3668405b1ee75dfefb07c0d637826176f741ce83
2017-08-10 12:13:18 -05:00
Richard Mudgett 07d026b4cd res_pjsip: Remove ephemeral registered contacts on transport shutdown.
The fix for the issue is broken up into three parts.

This is part two which handles the server side of REGISTER requests when
rewrite_contact is enabled.  Any registered reliable transport contact
becomes invalid when the transport connection becomes disconnected.

* Monitor the rewrite_contact's reliable transport REGISTER contact for
shutdown.  If it is shutdown then the contact must be removed because it
is no longer valid.  Otherwise, when the client attempts to re-REGISTER it
may be blocked because the invalid contact is there.  Also if we try to
send a call to the endpoint using the invalid contact then the endpoint is
not likely to see the request.  The endpoint either won't be listening on
that port for new connections or a NAT/firewall will block it.

* Prune any rewrite_contact's registered reliable transport contacts on
boot.  The reliable transport no longer exists so the contact is invalid.

* Websockets always rewrite the REGISTER contact address and the transport
needs to be monitored for shutdown.

* Made the websocket transport set a unique name since that is what we use
as the ao2 container key.  Otherwise, we would not know which transport we
find when one of them shuts down.  The names are also used for PJPROJECT
debug logging.

* Made the websocket transport post the PJSIP_TP_STATE_CONNECTED state
event.  Now the global keep_alive_interval option, initially idle shutdown
timer, and the server REGISTER contact monitor can work on wetsocket
transports.

* Made the websocket transport set the PJSIP_TP_DIR_INCOMING direction.
Now initially idle websockets will automatically shutdown.

ASTERISK-27147

Change-Id: I397a5e7d18476830f7ffe1726adf9ee6c15964f4
2017-08-10 12:13:18 -05:00
Richard Mudgett ca261d4b70 res_pjsip: PJSIP Transport state monitor refactor.
The fix for the issue is broken up into three parts.

This is part one which refactors the transport state monitor code to allow
more modules to be able to monitor transports.

* Pull the management of PJPROJECT's transport state callback code from
res_pjsip_transport_management.c into res_pjsip.  Now other modules can
dynamically add and remove themselves from transport monitoring without
worrying about breaking PJPROJECT's callback chain.

* Add the ability for other modules to get a callback whenever a specific
transport is shutdown.

ASTERISK-27147

Change-Id: I7d9a31371eb1487c9b7050cf82a9af5180a57912
2017-08-10 12:13:18 -05:00
Richard Mudgett 162f6ab845 res_pjsip_transport_management.c: Rename some variables.
* Use monitored instead of the misleading keepalive name.

Change-Id: I9e5bcbb4ab2b82d49bcd0f06dfe85d15e0b552b6
2017-08-10 12:13:18 -05:00
Jenkins2 7ad750477d Merge "res_pjsip_messaging: IPv6 receive address needs brackets" into 13 2017-08-10 11:00:44 -05:00
Scott Griepentrog 22575b6342 res_pjsip_messaging: IPv6 receive address needs brackets
When handling an incoming SIP MESSAGE, PJSIP
attaches the IP address that the message was
received from to the message in the variable
PJSIP_RECVADDR.  When the IP address is IPv6
the :PORT appended results in an unparseable
mess. By using an additional bit flag on the
pj_sockaddr_print call, the conventional use
of brackets around the address is achieved.

ASTERISK-27193 #close

Change-Id: I12342521f2ce87a5b6e4883d480a3fd957aa9fd9
2017-08-10 09:21:02 -05:00
Joshua Colp 0cf2e60161 Merge "configure: Add --with-download-cache option" into 13 2017-08-10 06:58:01 -05:00
Jenkins2 9bc114ffba Merge "res_rtp_asterisk: enable rtcp & QOS stats on native bridge" into 13 2017-08-09 15:48:42 -05:00
Joshua Colp b5eca43b29 Merge "res_rtp_asterisk: Make P2P bridge Asymmetric codec aware" into 13 2017-08-09 14:54:26 -05:00
George Joseph 363d61ef58 configure: Add --with-download-cache option
To make building without an internet connection easier, a new
./configure option '--with-download-cache' was added that sets
the cache for externals (like pjproject, the codecs and the DPMA),
AND the sounds files.  It can also be specified as an environment
variable named "AST_DOWNLOAD_CACHE".  The existing
'--with-sounds-cache' option / SOUNDS_CACHE_DIR env variable and
'--with-externals-cache' option / EXTERNALS_CACHE_DIR env variable
remain and if specified, will override '--with-downloads-cache'.

Change-Id: I5c3cf15ee61e8fe191b52732303e969854f8d861
2017-08-09 07:01:33 -06:00
Jenkins2 0493f08468 Merge "res_pjsip_session: Release media resources on session end quicker." into 13 2017-08-07 18:48:14 -05:00
Jenkins2 f75f6c71f8 Merge "res_pjsip_nat.c: Remove unnecessary CMP_STOP." into 13 2017-08-07 08:28:18 -05:00
Jenkins2 3cf30b4544 Merge "Support GMIME 3.0" into 13 2017-08-07 08:05:45 -05:00
Torrey Searle 3608f96ea3 res_rtp_asterisk: enable rtcp & QOS stats on native bridge
Asterisk wasn't generating or forwarding RTCP packets when native
bridge was activated.  Also the stats weren't available via
CHANNEL(qos). Now the RTCP stats are always calculated.

ASTERISK-27158 #close

Change-Id: I46fb8f61c95e836b9d2dda6054b0cf205c16037b
2017-08-07 12:07:51 +00:00
Joshua Colp 0de7312fac res_pjsip_session: Release media resources on session end quicker.
A change was made long ago where the session was kept around
until the underlying INVITE session had been destroyed. This
had the side effect of also keeping the underlying media resources
around for this time as well.

This change ensures that when we know the session is ending we
release the media resources immediately.

ASTERISK-27110

Change-Id: I643e431d5c3bf05cda220c1d39e824a505a29b82
2017-08-05 11:39:55 +00:00
Corey Farrell 905c4ca3dc app_privacy: remove unused header asterisk/image.h
Change-Id: I56ed530633a642633b18383821069e806c92ae82
2017-08-04 14:17:16 -05:00
Jenkins2 6dd12aaacd Merge "Fix compile error for old versions of GCC." into 13 2017-08-04 12:37:05 -05:00
Jenkins2 672af3c0ea Merge "Correct some leaks in unit tests." into 13 2017-08-04 11:01:37 -05:00
Jenkins2 b1537ce7f6 Merge "res_pjsip_transport_websocket.c: Fix serializer ref leak." into 13 2017-08-04 10:14:49 -05:00
Tzafrir Cohen 38dbc708e7 Support GMIME 3.0
Support building the Asterisk httpd with version 3.0 of gmime as
well as earlier versions of that library.

ASTERISK-27173

Change-Id: I7e13dd05a3083ccb0df2dabf83110223f6a9fa8f
2017-08-04 09:44:27 -05:00
Jenkins2 bc097c4671 Merge "res_pjsip_outbound_registration.c: Misc fixes." into 13 2017-08-04 09:23:15 -05:00
Torrey Searle c4f201cd73 res_rtp_asterisk: Make P2P bridge Asymmetric codec aware
Introduce a new property to rtp-engine to make it aware of
the desire for assymetric codecs or not.  If asymmetric codecs
is not allowed, the bridge will compare read/write formats
and shut down the p2p bridge if needed

ASTERISK-26745 #close

Change-Id: I0d9c83e5356df81661e58d40a8db565833501a6f
2017-08-04 10:38:12 +02:00
Corey Farrell 84b6a5efd7 Correct some leaks in unit tests.
* chan_sip: channel in test_sip_rtpqos_1.
* test_config: config hook, config info and global config holder.
* test_core_format: format in format_attribute_set_without_interface.
* test_stream: unneeded frame duplication.
* test_taskprocessor: task_data.

Change-Id: I94d364d195cf3b3b5de2bf3ad565343275c7ad31
2017-08-03 21:31:38 -05:00
Richard Mudgett f9a823e9dc res_pjsip_transport_websocket.c: Fix serializer ref leak.
Change-Id: Ib5a19bfd597f63d9021baeb645fc11153b3afa57
2017-08-03 16:28:02 -05:00
Richard Mudgett 631180a0c3 res_pjsip_outbound_registration.c: Misc fixes.
* Remove unnecessary CMP_STOP.

* In handle_client_registration() use DEBUG_ATLEAST() to only do work
needed for the debug log message when the debug log message is needed.

* In sip_outbound_registration_state_destroy() check state->registration
for NULL.

Change-Id: I656d0fa11dda0b00048103efb1558e67a426fd80
2017-08-03 16:25:49 -05:00
Richard Mudgett 7b84c6693e res_pjsip_nat.c: Remove unnecessary CMP_STOP.
Change-Id: I6279b0d723bc3b75b8d65e81e02da9ea9bc0c3da
2017-08-03 16:23:13 -05:00
Richard Mudgett a32614a2a8 res_pjsip_registrar.c: Remove unnecessary CMP_STOP.
Most uses of CMP_STOP are superfluous and are only respected when
OBJ_MULTIPLE is used to search the container.

Change-Id: I20571a202ec0aa1098bb2749eeba18de7ca110b8
2017-08-03 16:17:14 -05:00
Corey Farrell d066758a4c Fix compile error for old versions of GCC.
Use -Wno-format-truncation only if supported by compiler.

ASTERISK-27171 #close

Change-Id: Iac0aed7a5bcaa16c21b7d62c4e4678d244c4ccb6
2017-08-03 12:30:31 -04:00
George Joseph ed1bce956e Revert "res_pjsip_session: Release media resources on session end quicker."
This reverts commit 98709642d640b490f327d220fdcdea6d45fd65d7.

See the 15 branch review.

Change-Id: I8476b3cdacaad5157fa36b6247d0e4cdf1e8d5c6
2017-08-01 15:44:30 -06:00
Niklas Larsson 9a09f7dd5d app_queue: Add priority to AMI QueueStatus
Add priority to callers in AMI QueueStatus response

ASTERISK-27092 #close

Change-Id: I8d1f737a72c7c38f4cfe1a4ee3ecc0a4f85bd199
2017-08-01 15:44:30 -06:00
Joshua Colp 3418d8d145 res_pjsip_session: Release media resources on session end quicker.
A change was made long ago where the session was kept around
until the underlying INVITE session had been destroyed. This
had the side effect of also keeping the underlying media resources
around for this time as well.

This change ensures that when we know the session is ending we
release the media resources immediately.

ASTERISK-27110

Change-Id: I3c6a82fe7d2c50b9dc9197cb12ef22f20d337501
2017-08-01 15:44:30 -06:00
Sean Bright 4d318cac68 res_pjsip_pidf_eyebeam_body_supplement: Correct status presentation
This change fixes PIDF content generation when the underlying device
state is considered in use. Previously it was incorrectly marked
as closed meaning they were offline/unavailable. The code now
correctly marks them as open.

Additionally:

  * Generate an XML element for our activity instead of a using a text
    node.

  * Consider every extension state other than "unavailable" to be 'open'
    status.

  * Update the XML namespaces and structure to reflect those
    documented in RFC 4480

  * Use 'on-the-phone' (defined in RFC 4880) instead of 'busy' as the
    "in use" activity. This change results in eyeBeam using the
    appropriate icon for the watched user.

This was tested on eyeBeam 1.5.20.2 build 59030 on Windows.

ASTERISK-26659 #close
Reported by: Abraham Liebsch
patches:
  ASTERISK-26659.diff submitted by snuffy (license 5024)

Change-Id: I6e5ad450f91106029fb30517b8c0ea0c2058c810
2017-08-01 15:44:30 -06:00
Joshua Colp 114602f434 res_pjsip: Add support for dnsmgr to external_media_address.
The "external_media_address" option on transports is now
resolved using dnsmgr. This allows it to be automatically
refreshed regularly if refreshes are enabled in dnsmgr.
If the system is using a dynamic IP address a dynamic DNS
hostname can be provided to keep the IP address up to
date.

Change-Id: Ia54771720dff0105bde55d5bbb81a3ba437e05b2
2017-08-01 15:44:30 -06:00
Corey Farrell 0f49e6ee2e Fix compiler warnings on Fedora 26 / GCC 7.
GCC 7 has added capability to produce warnings, this fixes most of those
warnings.  The specific warnings are disabled in a few places:

* app_voicemail.c: truncation of paths more than 4096 chars in many places.
* chan_mgcp.c: callid truncated to 80 chars.
* cdr.c: two userfields are combined to cdr copy, fix would break ABI.
* tcptls.c: ignore use of deprecated method SSLv3_client_method().

ASTERISK-27156 #close

Change-Id: I65f280e7d3cfad279d16f41823a4d6fddcbc4c88
2017-08-01 15:44:29 -06:00
George Joseph 0d58fefa30 bundled_pjproject: Improve SSL/TLS error handling
OpenSSL has 2 levels or error processing.  It's possible for the
top layer to return SSL_ERROR_SYSCALL but the lower layer return
no error, in which case processing should continue.  Only the top
layer was being examined though so connections were being torn
down when they didn't need to be.  This patch adds the examination
of the lower level codes, and if they return no errors, allows
processing to continue.

ASTERISK-27001
Reported-by: Ian Gilmour
patches:
	pjproject-2.6.patch submitted by Ian Gilmour (license 6889)

Updated-by: George Joseph and Sauw Ming (Teluu)

Merged to upstream pjproject on 7/27/2017 (commit 5631)

Change-Id: I23844ca0c68ef1ee550f14d46f6dae57d33b7bd2
2017-08-01 15:43:51 -06:00
Torrey Searle 423d01cf16 chan_pjsip: add a new function PJSIP_DTMF_MODE
This function is a replica of SIPDtmfMode, allowing the DTMF mode of a
PJSIP call to be modified on a per-call basis

ASTERISK-27085 #close

Change-Id: I20eef5da3e5d1d3e58b304416bc79683f87e7612
2017-08-01 15:43:51 -06:00
Sean Bright c16000f201 res_rtp_asterisk: Fix mapping of pjsip's ICE roles to ours
Change-Id: Ia578ede1a55b21014581793992a429441903278b
2017-07-26 16:15:48 -05:00
Jenkins2 7f142fb804 Merge "res_stasis_device_state: Unsubscribe should remove old subscriptions" into 13 2017-07-26 07:09:31 -05:00
Jenkins2 25b691f1ed Merge "app_voicemail.c: Allow mailbox entry on authentication retry prompt." into 13 2017-07-26 06:43:21 -05:00
Joshua Colp 8314dd95aa Merge "core: Add VP9 passthrough support." into 13 2017-07-25 11:11:45 -05:00
Sergej Kasumovic 708cdc0b8e res_stasis_device_state: Unsubscribe should remove old subscriptions
Case scenario with Applications ARI:

* Once you subscribe to deviceState with Applications REST API, it will be
added into subscription pool.

* When you unsubscribe it will remove from the device_state_subscription
hash table but not from the subscription pool.

* When you subscribe again, it will add it to pool again.

* Now you will have two subscriptions and you will receive same event
twice.

This fix should now remove deviceState subscription from pool and it
should fix unsubscribe on deviceState.

ASTERISK-27130 #close

Change-Id: I718b70d770a086e39b4ddba4f69a3c616d4476c4
2017-07-25 14:55:41 +02:00
George Joseph 9035d77296 Merge "say.c: Fix file locations for second, seconds, minute, minutes files" into 13 2017-07-25 07:44:41 -05:00
Joshua Colp 24bb5a8908 core: Add VP9 passthrough support.
This change adds VP9 as a known codec and creates a cached
"vp9" media format for use.

Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc
2017-07-24 18:46:28 +00:00
Matthew Fredrickson 07f8e45a90 format.h: Fix a few minor errors in comments.
A few minor problems were found in comments in format.h.  This patch fixes them.

Change-Id: I07f0bdb47b93359b361c4c3d8ecc87cd3199dd94
2017-07-24 09:28:47 -05:00
Rusty Newton 7e9aa74daa say.c: Fix file locations for second, seconds, minute, minutes files
The seconds and minutes files have always existed in the base language
directory of the Core package. So say.c has always been calling the wrong
location (under digits/) for those two files and in the case of second and
minute they didn't exist in the Core packages at all.

The 1.6 sounds release moves the second and minute files into Core from
Extra for the languages that already had them. A future release will include
the second and minute files for languages that didn't already have them.

This patch just changes all the target locations for second, seconds,
minute, and minutes that were under the digits subdir to be under the root of
sounds instead. Which is where the sounds will be for some languages after 1.6
sounds and for all languages after a future release.

ASTERISK-25810 #close

Change-Id: I05d9d4bee6a7237030530a46e7eb3df15f13f702
Reported-by: Nicolas Riendeau
2017-07-21 17:04:31 -05:00
Richard Mudgett 7ff9d8785d app_voicemail.c: Allow mailbox entry on authentication retry prompt.
The following testsuite voicemail tests were failing to re-enter the
mailbox after the first login attempt.

tests/apps/voicemail/authenticate_invalid_mailbox
tests/apps/voicemail/authenticate_invalid_password

The tests were noting the start of the vm-incorrect-mailbox prompt and
immediately sending the mailbox for the next login attempt.  Since the
invalid message playback had to complete before the digits were
recognized, the test passed for the wrong reason and added approximately
20 seconds to the test times.

* Allow the vm-incorrect-mailbox prompt to get interrupted by the mailbox
digits like the initial vm-login prompt so the tests are able to enter the
intended mailbox.

Change-Id: I1dc53fe917bfe03a4587b2c4cd24c94696a69df8
2017-07-21 16:05:58 -05:00
Rusty Newton 4f93f75e7e Sounds: Update Makefile for Extra sounds 1.5.1 release
Incrementing version for the Extra sounds release. 1.5.1 Extra sounds
removes two prompts that were moved into the Core packages in the 1.6 Core
sounds release.

ASTERISK-27142 #close

Change-Id: I82f017812b0ea9599e19dd4635afd55611f13ee7
2017-07-21 14:20:10 -05:00
Jenkins2 158be3b757 Merge "corosync: Fix corosync library name in configure.ac" into 13 2017-07-21 06:38:41 -05:00
Jenkins2 084bdc79ac Merge "pjsip: Increase maximum packet size." into 13 2017-07-20 10:47:09 -05:00
Sean Bright cea4ce246d corosync: Fix corosync library name in configure.ac
Also add new corosync packages to install_prereq.

Reported by Travis Ryan in #asterisk-dev

Change-Id: Ib861c95ba630fed62dc54e56784ad8446ed9d2db
2017-07-20 11:39:51 -04:00
Jenkins2 eb60c902e8 Merge "app_playback.c: Use the timezonename parameter" into 13 2017-07-19 09:34:07 -05:00
Jenkins2 a5e73ad1f8 Merge "core: Add PARSE_TIMELEN support to ast_parse_arg and ACO." into 13 2017-07-19 09:11:27 -05:00
Benjamin Keith Ford 9a47dd7113 pjsip: Increase maximum packet size.
The maximum packet size for PJSIP has been increased to handle the
multiple streams being added for WebRTC.

Change-Id: I9ea1e8d02668c544acadcb1c6200e1cc1bd588b3
2017-07-18 17:00:25 -05:00
Holger Hans Peter Freyther 1c3e7df26e app_playback.c: Use the timezonename parameter
In say_date_generic the timezonename parameter is passed but never
used. Fix it by passing it to the ast_localtime function.

ASTERISK-27124

Change-Id: I6afa98f9163190043244b9f3ba91eb1874d1b586
2017-07-18 06:36:46 -05:00
Joshua Colp f0558d58f0 Merge "res_rtp_asterisk: Use RTP component for ICE if RTCP-MUX is in use." into 13 2017-07-17 14:57:35 -05:00
Jenkins2 1108da4f95 Merge "app_confbridge: Make sure name recordings are always removed from the filesystem" into 13 2017-07-17 09:03:38 -05:00
Jenkins2 fa27fe9a32 Merge "chan_iax2: On reload make sure to check for existing MWI subscription" into 13 2017-07-17 08:32:54 -05:00
Jenkins2 f1c2ba156e Merge "res/res_stasis_snoop: generate silence when audiohook returns null" into 13 2017-07-17 08:03:40 -05:00
Joshua Colp 51761b759d res_rtp_asterisk: Use RTP component for ICE if RTCP-MUX is in use.
This change makes it so that if an RTCP packet is being sent
the RTP ICE component is used for sending if RTCP-MUX is in use.

ASTERISK-27133

Change-Id: I6200f611ede709602ee9b89501720c29545ed68b
2017-07-16 17:23:17 +00:00
Torrey Searle a4c85309f0 res/res_stasis_snoop: generate silence when audiohook returns null
Currently when rtp is paused, no packets are written to the
recorded audio file, causing the silence to be skipped and recording
not properly time aligned.  The read handler as been adapted to
return a silence frame of the correct size.

ASTERISK-27128 #close

Change-Id: I2d7f60650457860b9c70907b14426756b058a844
2017-07-14 07:50:39 -05:00
Sergej Kasumovic 3858d99b73 app_confbridge: Make sure name recordings are always removed from the filesystem
This commit fixes two possible scenarios:

* When recording name and if during recording you hangup, file is never
removed. This is due to the fact file location is nulled.
* When recording name and if you hangup during thank-you prompt, file
is never removed.

ASTERISK-27123 #close

Change-Id: I39b7271408b4b54ce880c5111a886aa8f28c2625
2017-07-14 14:43:33 +02:00
Sergej Kasumovic cdd6ca488a chan_iax2: On reload make sure to check for existing MWI subscription
On every reload of chan_iax2 module, MWI subscription was added, which
results in additional taskprocessors being accumulated over time.

This commit fixes it by making sure we check for existing subscription
first.

This was verified with 'core show taskprocessors' CLI command.

ASTERISK-27122 #close

Change-Id: Ie2ef528fd5ca01b933eeb88188cc10967899cfb9
2017-07-14 08:20:51 +02:00
Rusty Newton 9f66fb7901 Sounds: Update for core sounds 1.6 release
Added necessary lines to make the en_NZ language set selectable and to get
core sounds 1.6 pulled down.

ASTERISK-26807 #close
ASTERISK-25816 #close
ASTERISK-26274 #close

Change-Id: I84e4dd4696568cc1ba318d12ac4b075461d6eed4
2017-07-13 15:51:42 -05:00
Corey Farrell df49ad2528 core: Add PARSE_TIMELEN support to ast_parse_arg and ACO.
This adds support for parsing timelen values from config files.  This
includes support for all flags which apply to PARSE_INT32.  Support for
this parser is added to ACO via the OPT_TIMELEN_T option type.

Fixes an issue where extra characters provided to ast_app_parse_timelen
were ignored, they now cause an error.

Testing is included.

ASTERISK-27117 #close

Change-Id: I6b333feca7e3f83b4ef5bf2636fc0fd613742554
2017-07-13 11:46:57 -04:00
Jenkins2 e29284b131 Merge "res/res_pjsip_t38 ensure t38 requests get rejected quickly" into 13 2017-07-13 10:11:40 -05:00
Sean Bright 6d0ff310c6 basic-pbx: Remove res_pjsip_multihomed from sample config
ASTERISK-27127 #close
Reported by: HZMI8gkCvPpom0tM

Change-Id: I2b0c54570d58156e37166ac536728af3b6c01789
2017-07-12 16:07:42 -04:00
Jenkins2 ec182b6d50 Merge "res_musiconhold: Add kill_escalation_delay, kill_method to class" into 13 2017-07-12 05:55:38 -05:00
Joshua Colp 3bf42a58c4 Merge "http.c: Reduce log spam" into 13 2017-07-12 04:25:20 -05:00
George Joseph 4e555437dc res_musiconhold: Add kill_escalation_delay, kill_method to class
By default, when res_musiconhold reloads or unloads, it sends a HUP
signal to custom applications (and all descendants), waits 100ms,
then sends a TERM signal, waits 100ms, then finally sends a KILL
signal.  An application which is interacting with an external
device and/or spawns children of its own may not be able to exit
cleanly in the default times, expecially if sent a KILL signal, or
if it's children are getting signals directly from
res_musiconhoild.

* To allow extra time, the 'kill_escalation_delay'
  class option can be used to set the number of milliseconds
  res_musiconhold waits before escalating kill signals, with the
  default being the current 100ms.

* To control to whom the signals are sent, the "kill_method" class
  option can be set to "process_group" (the default, existing
  behavior), which sends signals to the application and its
  descendants directly, or "process" which sends signals only to the
  application itself.

Change-Id: Iff70a1a9405685a9021a68416830c0db5158603b
2017-07-11 14:41:14 -06:00
Tzafrir Cohen 4f2f3bfebf Avoid setting maxfiles for a remote asterisk
Setting maxfiles (maximum number of open files) has no practical
effect on a remote asterisk (rasterisk, rasterisk -x).

It has an ill effect of printing an extra message, which
may be annoying in case of -x.

ASTERISK-27105 #close

Change-Id: Iaf9eb344e4b4b517df91b736b27ec55f6a6921a2
2017-07-11 12:51:40 -05:00
George Joseph 32b98ad956 http.c: Reduce log spam
Messages like "fwrite() failed: Connection reset by peer" are no
help whatsoever, especially since they can be caused simply by a
client disconnecting.

* Make those WARNINGs DEBUGs.
* Check the return of the headers fprintf.

Change-Id: I17bd5f3621514152a7b2b263c801324c5e96568b
2017-07-11 09:26:27 -05:00
Jenkins2 1498d66f69 Merge "res_pjsip: Fix crash with from_user containing invalid characters." into 13 2017-07-11 07:03:53 -05:00
Jenkins2 b5cd0f9ff3 Merge "json.c: Add backtrace log to find 'Invalid UTF-8 string' errors" into 13 2017-07-10 11:22:06 -05:00
Jenkins2 ccd1015bcb Merge "res_rtp_asterisk.c: Fix TURN deadlock by using ICE session group lock." into 13 2017-07-10 11:05:23 -05:00
Jenkins2 baa51a3bb5 Merge "bridge_native_rtp.c: Fix direct media video RTP instance ACL check." into 13 2017-07-10 10:51:02 -05:00
Benjamin Keith Ford 25e18bf514 res_pjsip: Fix crash with from_user containing invalid characters.
If the from_user field contains certain characters (like @, {, ^, etc.),
PJSIP will return a null value for the URI when attempting to parse it.
This causes a crash when trying to dial out through a trunk that contains
these invalid characters in its from_user field.

This change checks the configuration and ensures that an endpoint will
not be created if the from_user contains an invalid character. It also
adds a null check to the PJSIP URI parsing as a backup.

ASTERISK-27036 #close
Reported by: Maxim Vasilev

Change-Id: I0396fdb5080604e0bdf1277464d5c8a85db913d0
2017-07-10 09:46:24 -05:00
Richard Mudgett 8a803f75a0 json.c: Add backtrace log to find 'Invalid UTF-8 string' errors
Change-Id: I9020ff9f2b3749904317c0c173f47a1bbed6f929
2017-07-07 18:24:43 -05:00
Jenkins2 66eb4f34cf Merge "app_voicemail: Cleanup ODBC connection handling" into 13 2017-07-07 16:24:52 -05:00
Richard Mudgett aa514f420b res_rtp_asterisk.c: Fix TURN deadlock by using ICE session group lock.
When a message is received on the TURN socket, the code processing the
message needs to call into the ICE/STUN session for further processing.
This code path locks the TURN group lock then the ICE/STUN group lock.  In
another thread an ICE/STUN timer can fire off to send a keep alive message
over the TURN socket.  In this code path, the ICE/STUN group lock is
obtained then the TURN group lock is obtained to send the packet.  A
classic deadlock case if the group locks are not the same.

* Made TURN get created using the ICE/STUN session's group lock.

NOTE: I was originally concerned that the ICE/STUN session can get
recreated by ice_reset_session() for an event like RTCP multiplexing
causing a change during SDP negotiation.  In this case the TURN group lock
would become different.  However, TURN is also recreated as part of the
ICE/STUN recreation in ice_create() when all known ICE candidates are
added to the new ICE session.  While the ICE/STUN and TURN sessions are
being recreated there is a period where the group locks could be
different.

ASTERISK-27023 #close
Patches:
    res_rtp_asterisk-turn-deadlock-fix.patch (license #6502)
        patch uploaded by Michael Walton (modified)

Change-Id: Ic870edb99ce4988a8c8eb6e678ca7f19da1432b9
2017-07-06 16:11:45 -05:00
Joshua Colp 5a894ff27e Merge "Fix alembic branches" into 13 2017-07-06 06:39:13 -05:00
George Joseph 379fe65831 Fix alembic branches
Change-Id: I04f607f084bda9b1b7f626e8e9735c37dc751187
2017-07-06 04:55:17 -06:00
Jenkins2 cad74cdd8f Merge "core: Fix segfault when invoking 'data get' CLI command" into 13 2017-07-05 18:29:28 -05:00
Jenkins2 dc1fc28a4a Merge "pjproject_bundled: Allow passing configure options to bundled" into 13 2017-07-05 17:39:56 -05:00
Richard Mudgett 22c4c1a0ba bridge_native_rtp.c: Fix direct media video RTP instance ACL check.
The video stream was using the audio stream RTP instance addresses to
check if the video RTP gets directed to an allowed direct media Access
Control List (ACL) address.  There is no guarantee that the video RTP
instance uses the same addresses as the audio RTP instance.

This looks like it has been a bug since v11 when direct media ACL was
first added to chan_sip and then faithfully reproduced through a couple
code refactorings into the new bridging architecture.

Change-Id: I8ddd56320e0eea769f3ceed3fa5b6bdfb51d681a
2017-07-05 17:08:50 -05:00
George Joseph 642c597507 Merge "pjsip_distributor.c: Fix deadlock with TCP type transports." into 13 2017-07-05 16:08:18 -05:00
Jenkins2 cf6e0b8f8b Merge "chan_sip: Only when different, add TCP|TLS in autodomain (SIP Domain Support)." into 13 2017-07-05 16:06:44 -05:00
Jenkins2 aadece5664 Merge "pjsip_distributor.c: Fix unidentified_requests hash functions." into 13 2017-07-05 15:07:51 -05:00
Jenkins2 d55798fff0 Merge "bridge_native_rtp: Keep rtp instance refs on bridge_channel" into 13 2017-07-05 15:02:28 -05:00
George Joseph 40490768cc Merge "chan_pjsip: Fix ability to send UPDATE on COLP" into 13 2017-07-05 14:38:01 -05:00
Jenkins2 2bbe8cb3f5 Merge "channel: Clear channel flag in error branch." into 13 2017-07-05 08:56:46 -05:00
Sean Bright 6258de458b core: Fix segfault when invoking 'data get' CLI command
Invoking 'data get /asterisk/core/channeltypes' caused a crash because
of an assumption of a tech's capabilities to be non-NULL. The
'Surrogate' tech, however, does have a NULL capabilities member,
resulting in a crash.

ASTERISK-27108 #close

Change-Id: I2fbe7715681f43d5565d1e1599269468c26b0e0a
2017-07-05 08:42:07 -04:00
Alexander Traud 39d2ebbf56 chan_sip: Only when different, add TCP|TLS in autodomain (SIP Domain Support).
When sip.conf contained tcpenable=yes and autodomain=yes, the TCP domain was
added in any case, because of a local Boolean-negation error of the return value
of ast_sockaddr_cmp. After fixing this error for TCP and TLS, the TLS domain was
still always added with tlsenable=yes, because the domains were not compared
just on the address but also on the port – and TLS is always on a different port
than UDP/TCP.

ASTERISK-27106

Change-Id: I14fe9e319e238320b094016980445ef3a5b3337c
2017-07-03 11:01:38 -05:00
Alexander Traud 9f4b3b966e chan_sip: Fix a typo for tlsbindaddr in autodomain (SIP Domain Support).
Because of a copy-and-paste error when the struct ast_sockaddr changed,
tlsbindaddr was not added, when sip.conf contained autodomain=yes; see
"show sip domains" on the command-line interface (CLI) of Asterisk.

ASTERISK-27106

Change-Id: I3d0957150017c223136968ef1266f275d0d6695e
2017-07-03 10:53:03 -05:00
Sean Bright 194625c1de app_voicemail: Cleanup ODBC connection handling
The primary focus of this patch is adding a missing call to
ast_odbc_release_obj(), but is also a general cleanup of the ODBC
related code in app_voicemail.

ASTERISK-27093 #close

Change-Id: I8e285142eaeb3146b4287a928276b70db76c902b
2017-07-01 08:10:04 -04:00
Corey Farrell 73520e9f58 channel: Clear channel flag in error branch.
Clear channel flag AST_FLAG_END_DTMF_ONLY in ast_waitfordigit_full when
ast_read returns NULL.

ASTERISK-27100 #close

Change-Id: Id3039e9a4e74e0cb359f636c9fd0c9740ebf7d9d
2017-07-01 00:57:31 -04:00
Jenkins2 067410a445 Merge "app_queue: Fix returning to dialplan when a queue is empty" into 13 2017-06-30 14:45:43 -05:00
Richard Mudgett 0d64cbde57 pjsip_distributor.c: Fix deadlock with TCP type transports.
When a SIP message comes in on a transport, pjproject obtains the lock on
the transport and pulls the data out of the socket.  Unlike UDP, the TCP
transport does not allow concurrent access.  Without concurrency the
transport lock is not released when the transport's message complete
callback is called.  The processing continues and eventually Asterisk
starts processing the SIP message.  The first thing Asterisk tries to do
is determine the associated dialog of the message to determine the
associated serializer.  To get the associated serializer safely requires
us to get the dialog lock.

To send a request or response message for a dialog, pjproject obtains the
dialog lock and then obtains the transport lock.  Deadlock can result
because of the opposite order the locks are obtained.

* Fix the deadlock by obtaining the serializer associated with the dialog
another way that doesn't involve obtaining the dialog lock.  In this case,
we use an ao2 container to hold the associated endpoint and serializer.
The new locks are held a brief time and won't overlap other existing lock
times.

ASTERISK-27090 #close

Change-Id: I9ed63f4da9649e9db6ed4be29c360968917a89bd
2017-06-30 12:02:24 -05:00
Richard Mudgett 905d18e8bf pjsip_distributor.c: Fix unidentified_requests hash functions.
The OBJ_SEARCH_xxx defines should not be used as if they were individual
bits.  They represent a multi-bit enumeration value field.

Change-Id: I32abc9a475396dab02402a7014357dd94284e17b
2017-06-30 12:00:21 -05:00
Jenkins2 35bc1ee28d Merge "res_rtp_asterisk: Fix issues with ICE renegotiation." into 13 2017-06-30 11:29:29 -05:00
George Joseph bbe68f139d pjproject_bundled: Allow passing configure options to bundled
There wasn't any good way to pass options like --host or --build
down to the pjproject configure which makes cross-compiling difficult.

* Added a new PJPROJECT_CONFIGURE_OPTS environment variable which
  can be used to pass arbitrary options to pjproject configure.
* Automatically set the pjproject configure --host and --build
  options to match those supplied for the asterisk configure.

ASTERISK-27097 #close
Reported-by: Kinsey Moore

Change-Id: I5fa776e110262851173002a26ffe1172e4c35b2e
2017-06-30 07:39:07 -06:00
George Joseph 6bd7c0f37c chan_pjsip: Fix ability to send UPDATE on COLP
When connected_line_method is "invite", we're supposed to determine
if the client can support UPDATE and if it can, send UPDATE instead
of INVITE to avoid the SDP renegotiation.  Not only was pjproject
not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing
that invite_tsx wasn't NULL which isn't always the case.

* Updated chan_pjsip/update_connected_line_information to drop the
  requirement that invite_tsx isn't NULL.
* Submitted patch to pjproject sip_inv.c that sets the
  PJSIP_INV_SUPPORT_UPDATE flag correctly.
* Updated pjsip.conf.sample to clarify what happens when "invite"
  is specified.

ASTERISK-27095

Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560
2017-06-29 14:44:43 -06:00
Ivan Poddubny 2c43ca0ac5 app_queue: Fix returning to dialplan when a queue is empty
The fix for ASTERISK-25665 introduced a regression.
The return value of queue_exec used to be 0 in case of leavewhenempty
but it was changed to -1 (returned from wait_our_turn and passed
transparently by queue_exec), thus leading to hangup instead of returning
back to dialplan.

This commit resets the value back to 0 in this case, restoring
original behavior.

ASTERISK-27065 #close
Reported by: Marek Cervenka

Change-Id: Id9c83b75aeda463250155e88c5004be52bbca5ac
2017-06-29 09:51:50 -05:00
Jenkins2 997c11235e Merge "app_voicemail: IMAP connection control" into 13 2017-06-29 09:03:05 -05:00
Joshua Colp 0426b1d88a res_rtp_asterisk: Fix issues with ICE renegotiation.
When re-inviting to add more streams it is possible for
the role of existing ICE sessions to be changed to the
incorrect value. This results in subsequent refreshes
within the sessions getting a role conflict and the ICE
session breaking down. This change only sets the role to
be the new value if an ICE renegotiation is actually
going to happen, otherwise the existing role is preserved.

As well if we encounter a situation where a unidirectional
ICE negotiation happens and the other side does not send us
candidates we will not store any information for sending
traffic, even though we know where they are reachable. This
change fixes this by using the source of the ICE traffic
itself as the target if no candidates are known and we
receive some ICE traffic.

ASTERISK-27088

Change-Id: I71228181e358917fcefc3100fad21b2fc02a59a9
2017-06-28 14:13:54 +00:00
George Joseph eb48e99bd4 bridge_native_rtp: Keep rtp instance refs on bridge_channel
There have been reports of deadlocks caused by an attempt to send a frame
to a channel's rtp instance after the channel has left the native bridge
and been destroyed.  This patch effectively causes the bridge channel to
keep a reference to the glue and both the audio and video rtp instances
so what gets started will get stopped.

ASTERISK-26978 #close
Reported-by: Ross Beer

Change-Id: I9e1ac49fa4af68d64826ccccd152593cf8cdb21a
2017-06-27 11:08:19 -05:00
Torrey Searle 1f59d08924 res/res_pjsip_t38: fix incorrect increment of media_count
The T38 sdp callback incorrectly has a side effect of incrementing
the media_count.  This can lead to core dumps.

Change-Id: I7bb2f4987de4046ec52cfc34e5ea0662dae32af8
2017-06-27 17:46:43 +02:00
Torrey Searle 9fbc34d2bd res_pjsip: Add DTMF INFO Failback mode
The existing auto dtmf mode reverts to inband if 4733 fails to be
negotiated.  This patch adds a new mode auto_info which will
switch to INFO instead of inband if 4733 is not available.

ASTERISK-27066 #close

Change-Id: Id185b11e84afd9191a2f269e8443019047765e91
2017-06-23 09:15:24 +02:00
Torrey Searle 154d2914fa res/res_pjsip_t38 ensure t38 requests get rejected quickly
arm the t38 webhook always, so we can correctly reject a
T38 negotiation request when t38 is disabled on a channel

Change-Id: Ib1ffe35aee145d4e0fe61dd012580be11aae079d
2017-06-22 14:56:10 +02:00
Richard Mudgett 764d04fa87 res_pjsip_mwi.c: Eliminate RAII_VAR in contact delete observer
Change-Id: I0bc97c6608de1d1a4228826b3b3be43f162f05f3
2017-06-21 18:21:57 -05:00
Alexei Gradinari 0f6a9617eb res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact
Do not need to unsubscribe/subscribe on creating the ednpoint's contact.
The modified function create_mwi_subscriptions_for_endpoint adds
the subscription only if it does not exist.

The subscriptions aren't added for active contacts
which are retrieved on startup from realtime
if mwi_disable_initial_unsolicited=yes.
Because the mwi_contact_added is not called.
So the subscriptions also should be created on updating contact.

ASTERISK-26230 #close

Change-Id: I47e265af9296ca09aa42a316fdacac104148cee4
2017-06-21 18:21:57 -05:00
Jenkins2 bd9d72793d Merge "core_local: local channel data not being properly unref'ed and unlocked" into 13 2017-06-21 18:06:44 -05:00
Joshua Colp 7b325d55e1 Merge "bridge: stuck channel(s) after failed attended transfer" into 13 2017-06-21 17:36:54 -05:00
Kevin Harwell 1f9913f272 core_local: local channel data not being properly unref'ed and unlocked
In an earlier version of Asterisk a local channel [un]lock all functions were
added in order to keep a crash from occurring when a channel hung up too early
during an attended transfer. Unfortunately, when a transfer failure occurs and
depending on the timing, the local channels sometime do not get properly
unlocked and deref'ed after being locked and ref'ed. This happens because the
underlying local channel structure gets NULLed out before unlocking.

This patch reworks those [un]lock functions and makes sure the values that get
locked and ref'ed later get unlocked and deref'ed.

ASTERISK-27074 #close

Change-Id: Ice96653e29bd9d6674ed5f95feb6b448ab148b09
2017-06-21 16:17:02 -05:00
Kevin Harwell 67664fbf95 bridge: stuck channel(s) after failed attended transfer
If an attended transfer failed it was possible for some of the channels
involved to get "stuck" because Asterisk was not hanging up the transfer target.

This patch ensures Asterisk hangs up the transfer target when an attended
transfer failure occurs.

ASTERISK-27075 #close

Change-Id: I98a6ecd92d3461ab98c36f0d9451d23adaf3e5f9
2017-06-21 11:16:47 -05:00
Jenkins2 9554166182 Merge "res_corosync: Change thread stack size" into 13 2017-06-20 18:12:14 -05:00
Jenkins2 2619c04f1e Merge "cdr: fix mistake spelling of a word for Unanswered." into 13 2017-06-20 09:15:58 -05:00
Jenkins2 34b3665612 Merge "res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact" into 13 2017-06-20 05:45:51 -05:00
Rodrigo Ramírez Norambuena cecf6540dc cdr: fix mistake spelling of a word for Unanswered.
Change-Id: I7a610bef369924523a445c7e849ee88cc45dc5df
2017-06-20 04:59:59 -05:00
Alexei Gradinari 8f356192d1 app_voicemail: IMAP connection control
A new global option "imap_poll_logout" was added to specify whether need to
disconnect from the IMAP server after polling of mailboxes.

ASTERISK-27068 #close

Closing IMAP connection after loading mailbox from voicemail.conf

ASTERISK-24052 #close

Change-Id: Ib7558ba04516240a32b65f42e9be64372a0ae12a
2017-06-19 18:21:29 -04:00
Jenkins2 507ce0aa95 Merge "res_stasis: Plug reference leak on stolen channels" into 13 2017-06-19 11:38:02 -05:00
George Joseph 470bccd769 Merge "app_voicemail: IMAP logout on reload/unload" into 13 2017-06-19 09:19:39 -05:00
Jenkins2 707e0e62e6 Merge "res_pjsip: New endpoint option "notify_early_inuse_ringing"" into 13 2017-06-19 08:48:09 -05:00
Alexei Gradinari 8e749c8f51 res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact
If the endpoint's last contact is deleted unsolicited MWI has to be
unsubscribed.

ASTERISK-27051 #close

Change-Id: I33e174e0b9dba0998927d16d6d100fda5c7254e0
2017-06-16 18:45:51 -04:00
Jenkins2 2c87fced4f Merge "formats/format_g729: Fix typo in comment" into 13 2017-06-16 16:16:18 -05:00
Jenkins2 47b9651658 Merge "Core/PBX: Deadlock between dialplan execution and application unregistration." into 13 2017-06-16 16:05:39 -05:00
George Joseph edfdb4dff5 res_stasis: Plug reference leak on stolen channels
When a stasis channel is stolen by another app, the control
structure is unreffed but never unlinked from the app_controls
container.  This causes the channel reference to leak.

Added OBJ_UNLINK to the callback in channel_stolen_cb.

Also added some additional channel lifecycle debug messages to
channel.c.

ASTERISK-27059 #close
Repoorted-by: George Joseph

Change-Id: Ib820936cd49453f20156971785e7f4f182c56e14
2017-06-16 15:06:56 -05:00
Matthew Fredrickson 0a40073750 formats/format_g729: Fix typo in comment
There was a typo in a comment.  This commit is to fix the typo.

ASTERISK-27060 #close

Change-Id: Ic2699f8dbeaacd58ccb6ec3203e853e1babe3235
2017-06-16 15:00:54 -05:00
Alexei Gradinari a6e4899612 res_pjsip: New endpoint option "notify_early_inuse_ringing"
This option was added to control whether to notify dialog-info state
'early' or 'confirmed' on Ringing when already INUSE.
The value "yes" is useful for some SIP phones (Cisco SPA)
to be able to indicate and pick up ringing devices.

ASTERISK-26919 #close

Change-Id: Ie050bc30023543c7dfb4365c5be3ce58c738c711
2017-06-16 12:08:27 -04:00
Jenkins2 0b7a0681a3 Merge "res_ari: Add "module loaded" check to ari stubs" into 13 2017-06-16 10:57:43 -05:00
Jenkins2 d88344c3d4 Merge "chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read." into 13 2017-06-16 07:48:28 -05:00
Jan Friesse 005a4afa6b res_corosync: Change thread stack size
In Corosync 2.x libraries were changed to use LibQB IPC.
Sadly LibQB IPC doesn't support copy-free access to received buffer, so
Corosync libraries were rewritten to use stack as buffer. Mostly the
needed stack size is quite small, but for all *_dispatch functions, 1MiB
is needed.

Asterisk function ast_pthread_create_background set stack size for new
thread to much smaller AST_BACKGROUND_STACKSIZE (~500KiB).

This results in Asterisk crash when running with Corosync 2.x.

Patch solves this issue by creating it's own version of
ast_pthread_create_background which sets stack size to much higher value
(actually it's AST_BACKGROUND_STACKSIZE + 3MiB).

Another problem may appear when "corosync show members" netconsole
command is executed. It is also executed in thread and also has only
500KiB stack size. Sadly it calls corosync_cfg_get_node_addrs which
again needs at least 1MiB stack.

Solution is to use HAVE_COROSYNC_CFG_STATE_TRACK as a discriminator
between Corosync 1.x and 2.x. If 1.x is found, nothing changes. If 2.x
is found, NodeID is displayed instead of IP address.

ASTERISK-25370 #close
Reported by: mdu113

Change-Id: Id95b0d21ab6e708e7d74ad8786c587211676fa08
2017-06-16 14:44:34 +02:00
George Joseph 7901b9853e res_ari: Add "module loaded" check to ari stubs
The recent change to make the use of LOAD_DECLINE more consistent
caused res_ari to unload itself before declining if the ari.conf
file wasn't found.  The ari stubs though still tried to use the
configuration resulting in segfaults.

This patch creates a new CHECK_ARI_MODULE_LOADED macro which tests
to see if res_ari is actually loaded and causes the stubs to also
decline if it isn't.  The macro was then added to the mustache
template's "load_module" function.

ASTERISK-27026 #close
Reported-by: Ronald Raikes

Change-Id: I263d56efa628ee3c411bdcd16d49af6260c6c91d
2017-06-15 18:31:53 -06:00
Jenkins2 37bc343b58 Merge "channel: Fix reference counting in ast_channel_suppress." into 13 2017-06-15 16:18:26 -05:00
Alexei Gradinari 3b6c327c51 app_voicemail: IMAP logout on reload/unload
Closing IMAP connection on module reload or unload.

ASTERISK-24052 #close

Change-Id: I2a40182aa9ef249fa6865d33570430e9ada68525
2017-06-15 16:52:34 -04:00
Jenkins2 ae6c38db98 Merge "res_pjsip_pubsub: Fix reference to released endpoint" into 13 2017-06-15 15:02:31 -05:00
Jenkins2 5fa52f0b5a Merge "bridge: Add a deferred queue." into 13 2017-06-15 14:48:39 -05:00
Richard Mudgett b9a4ab8c8c chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read.
The construction of the returned string assumed incorrectly that the
supplied buffer would always be initialized as an empty string.  If it is
not an empty string we could overrun the supplied buffer by the length of
the non-empty buffer string plus one.  It is also theoreticaly possible
for the supplied buffer to be overrun by a string terminator during a read
operation even if the supplied buffer is an empty string.

* Fix the assumption that the supplied buffer would already be an empty
string.  The buffer is not guaranteed to contain an empty string by all
possible callers.

* Fix string terminator buffer overrun potential.

Change-Id: If6a0806806527678c8554b1dcb34fd7808aa95c9
2017-06-15 12:33:22 -05:00
Jenkins2 8b12ad2f61 Merge "app_voicemail: IMAP logout on MWI unsubscribe" into 13 2017-06-15 09:23:58 -05:00
Jenkins2 a3b142dbe0 Merge "app_voicemail.c: Fix compile error when IMAP enabled." into 13 2017-06-15 08:46:01 -05:00
Jenkins2 320fb81580 Merge "res_pjsip_refer/session: Calls dropped during transfer" into 13 2017-06-15 08:01:31 -05:00
Joshua Colp 4910a3bf40 channel: Fix reference counting in ast_channel_suppress.
The ast_channel_suppress function wrongly decremented the
reference count of the underlying structure used to keep
track of what should be suppressed on a channel if the
function was called multiple times on the same channel.

This change cleans up the reference counting a bit so
this no longer occurs.

ASTERISK-27016

Change-Id: I2eed4077cb4916e6626f9f120b63b963acc5c136
2017-06-15 12:32:32 +00:00
George Joseph 8a858275eb Merge "res_rtp_asterisk: Fix ssrc change for rtcp srtp" into 13 2017-06-14 16:05:58 -05:00
Jenkins2 ffedf68136 Merge "res_pjsip_session: Correct inverted test in session_outgoing_nat_hook" into 13 2017-06-14 15:28:32 -05:00
Jenkins2 4ade9085d5 Merge "res_pjsip_transport_websocket: Add NULL check in get_write_timeout" into 13 2017-06-14 15:15:56 -05:00
George Joseph 3065bcd021 Merge "pjproject_bundled: Use the asterisk github mirror for download" into 13 2017-06-14 14:43:36 -05:00
Joshua Colp 4ece39f476 Merge "BuildSystem: Add patches to allow building with recent LibreSSL" into 13 2017-06-14 14:22:58 -05:00
Richard Mudgett f1a209d5ac app_voicemail.c: Fix compile error when IMAP enabled.
Change-Id: I2703f15b4099b4210c68eccf293105d1975c1fc1
2017-06-14 12:34:06 -05:00
Frederic LE FOLL dc307af7f2 Core/PBX: Deadlock between dialplan execution and application unregistration.
Not easy to reproduce, but we have noticed deadlocks when unloading a module
while dialplan is handling a request.

The deadlock is between :
1) Dialplan execution: pbx_extension_helper() first taking conlock,
then pbx_findapp() [when called] asking for lock on apps list.
2) Application unregistration: ast_unregister_application() first taking lock
on apps list, then unreference_cached_app() [when called] asking for conlock.

As a protection, I suggest to modify ast_unregister_application(), so that it
anticipates the need of conlock, before taking the lock on apps list.
The side effect is a longer unavailability of conlock when unregistering an
application.

ASTERISK-27041

Change-Id: I0db0f1eb320da6a5758cce3a47d765be1face8e2
2017-06-14 18:29:40 +02:00
George Joseph c2eea791e4 res_pjsip_pubsub: Fix reference to released endpoint
destroy_subscription was attempting to get the id of the
subscription tree's endpoint after we'd already called ao2_cleanup
on it causing a segfault.

Moved the cleanup until after the debug statement and since
endpoint could also be NULL at this point, check for that as well.

ASTERISK-27057 #close
Reported-by: Ryan Smith

Change-Id: Ice0a7727f560cf204d870a774c6df71e159b1678
2017-06-14 10:12:21 -06:00
George Joseph 2dee95cc7a res_pjsip_session: Correct inverted test in session_outgoing_nat_hook
There was a typo introduced in commit 776ffd77 which was preventing
the transport's external media address from being used.

ASTERISK-27024 #close
Reported-by: Christopher van de Sande
patches:
	patch.diff submitted by Florian Floimair (license 6892)

Change-Id: I7ec617171eaa2d86d2680b00cf37d5088adafc27
2017-06-14 11:06:18 -05:00
Jenkins2 e26d15fabb Merge "CFLAGS for BIND8 support" into 13 2017-06-14 10:39:13 -05:00
Jørgen H e16a669c70 res_pjsip_transport_websocket: Add NULL check in get_write_timeout
Added check for NULL return value when calling
ast_sorcery_retrieve_by_id in function get_write_timeout

ASTERISK-27046

Change-Id: I9357717278da631c3a1cb502c412693929b0cb41
2017-06-14 09:54:16 -05:00
Jenkins2 44d4b55697 Merge "res_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled" into 13 2017-06-14 09:34:04 -05:00
George Joseph 7dafe82751 res_rtp_asterisk: Fix ssrc change for rtcp srtp
It looks like there was a copy/paste error in ast_rtp_change_source
where if there was a rtcp srtp instance, instead of updating its
ssrc we were updating the srtp instance ssrc twice.

ASTERISK-27022 #close
Reported-by: Michael Walton

Change-Id: Ic88f3aee7227b401c58745ac265ff92c19620095
2017-06-14 07:54:45 -06:00
Joshua Colp e414833f6e bridge: Add a deferred queue.
This change adds a deferred queue to bridging. If a bridge
technology determines that a frame can not be written and
should be deferred it can indicate back to bridging to do so.
Bridging will then requeue any deferred frames upon a new
channel joining the bridge.

This change has been leveraged for T.38 request negotiate
control frames. Without the deferred queue there is a race
condition between the bridge receiving the T.38 request
negotiate and the second channel joining and being in the
bridge. If the channel is not yet in the bridge then the T.38
negotiation fails.

A unit test has also been added that confirms that a T.38
request negotiate control frame is deferred when no other
channel is in the bridge and that it is requeued when a new
channel joins the bridge.

ASTERISK-26923

Change-Id: Ie05b08523f399eae579130f4a5f562a344d2e415
2017-06-13 22:05:28 +00:00
Kevin Harwell 6cdf3191d3 res_pjsip_refer/session: Calls dropped during transfer
When doing an attended transfer it's possible for the transferer, after
receiving an accepted response from Asterisk, to send a BYE to Asterisk,
which can then be processed before Asterisk has time to start and/or
complete the transfer process. This of course causes the transfer to not
complete successfully, thus dropping the call.

This patch makes it so any BYEs received from the transferer, after the REFER,
that initiate a session end are deferred until the transfer is complete. This
allows the channel that would have otherwise been hung up by Asterisk to
remain available throughout the transfer process.

ASTERISK-27053 #close

Change-Id: I43586db79079457d92d71f1fd993be9a3b409d5a
2017-06-13 14:17:29 -05:00
George Joseph 0bde568669 pjproject_bundled: Use the asterisk github mirror for download
We now mirror the pjproject tarball and md5 at
https://github.com/asterisk/third-party/tree/master/pjproject

To improve download reliability, we now get the tarball from
our mirror instead of from pjsip.org.

ASTERISK-27052 #close
Reported-by: 'alex'

Change-Id: I60236587a8935bfa71fcc391f4e2ecb31918c08a
2017-06-13 09:47:43 -06:00
Joshua Colp bc51d4324a Merge "pjsip: Extend 'asymmetric_rtp_codec' option to include us changing." into 13 2017-06-13 09:18:18 -05:00
Alexei Gradinari 08be5e01e8 app_voicemail: IMAP logout on MWI unsubscribe
Closing IMAP connection on MWI unsubscribe.

ASTERISK-24052 #close

Change-Id: I4ff964026002b2817b48c20fb4239f0a880228fd
2017-06-12 18:55:15 -04:00
Joshua Colp d715beae16 Merge "codecs.conf.sample: Fix max_bandwidth speling error" into 13 2017-06-12 16:02:00 -05:00
Joshua Colp 052cd049bc Merge "BuildSystem: Fix build on FreeBSD due to missing crypt.h" into 13 2017-06-12 15:57:32 -05:00
Jenkins2 1f7aedf6f7 Merge "eventfd: Disable during cross compilation" into 13 2017-06-12 15:31:51 -05:00
Alexei Gradinari 59c9bbe696 res_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled
If sending unsolicited mwi to all endpoints on startup is disabled
(mwi_disable_initial_unsolicited=yes) do not need to create subscriptions.
If there are many (thousands) realtime endpoints configured with unsolicited mwi
and Vociemail Storage configured as ODBC or IMAP there will be huge number of
DB/IMAP requests on startup.

ASTERISK-26230 #close

Change-Id: I50ae909639e3ee298b931a54def4b2b9e0fb86c5
2017-06-12 10:57:24 -04:00
David M. Lee 68de35a6a0 CFLAGS for BIND8 support
Some systems (like macOS) require BIND_8_COMPAT to be defined so that
the nameser libraries are, well, BIND8 compatible.

Change-Id: If79fc27a64f90de1835b5aa3aadfa9be22bd16b0
2017-06-12 08:46:00 -05:00
Sean Bright da3312457e codecs.conf.sample: Fix max_bandwidth speling error
Reported by Sylvain Boily via asterisk-dev mailing list.

Change-Id: Idc7623f335aea3e144dd369ba383b9a757480a9d
2017-06-11 13:06:17 -04:00
Guido Falsi 6a64f65fe6 BuildSystem: Add patches to allow building with recent LibreSSL
Add some #if defined checks which allow building against LibreSSL.
These patchess come from OpenBSD ports:
https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/telephony/asterisk/patches/

ASTERISK-27043 #close
Reported by: OpenBSD ports

Change-Id: I2f6c08a5840b85ad4d2b75370b947ddde7a9a572
2017-06-08 17:54:46 +02:00
Jenkins2 85dff8e26e Merge "CHANGES: correct version for a new option 'refer_blind_progress'" into 13 2017-06-08 10:48:13 -05:00
Guido Falsi 44cee2f4a1 BuildSystem: Fix build on FreeBSD due to missing crypt.h
FreeBSD does not include a crypt.h include file. Definitions for
crypt() and crypt_r() are in unistd.h

ASTERISK-27042 #close

Change-Id: Ib307ee5e384870c6af50efa89fb73722dd0c3a7e
2017-06-08 17:36:00 +02:00
Joshua Colp 1f10c6b3b0 chan_pjsip: Update device state when in early media.
The chan_pjsip module uses a calculation approach for
determining device state. This means that in situations
where we would expect device state to change we need to
tell the core to query. A scenario that was missed is
when early media was signaled.

This change adds the notification for the core to
query device state when we are told that early media
is being provided.

ASTERISK-27039

Change-Id: Iafebfd152894966344ff2e950a3cee9f59a3eb6f
2017-06-07 20:19:05 +00:00
Sean Bright 590ffcaf0b eventfd: Disable during cross compilation
Reported by Lonnie Abelbeck <lonnie@abelbeck.com> via private e-mail.

Change-Id: Icc80f12b8d8d591e14a8e0ed9f1c02cbd193a89b
2017-06-07 14:36:17 -05:00
Alexei Gradinari 5520b6c201 CHANGES: correct version for a new option 'refer_blind_progress'
Change-Id: If4817d26a8974610827624fb8a4e56d681d6bf97
2017-06-07 12:21:10 -04:00
Joshua Colp 996a4791ff pjsip: Extend 'asymmetric_rtp_codec' option to include us changing.
PJSIP support in Asterisk differs from chan_sip in that it
allows media to be sent as-is without transcoding provided
the codecs were negotiated in the SDP. This is allowed
according to the RFC. Support for this differs quite a lot
though and some endpoints do not handle it well.

This change extends the 'asymmetric_rtp_codec' option to
also cover this case. When set to no (the default) the code
behaves as chan_sip does - the best codec is selected and
we will only ever send that, unless we change what we are
sending if the remote side changes. When set to yes we
will send media as-is without transcoding if the codec
has been negotiated in the SDP.

ASTERISK-26996

Change-Id: Ib1647f6902a0843e8c435946f831c2159e8d1d51
2017-06-07 13:12:55 +00:00
Jenkins2 812f5b51cb Merge "res_pjsip: Add support for returning only reachable contacts and use it." into 13 2017-06-07 08:11:23 -05:00
Jenkins2 f0400ed858 Merge "channel: ast_write frame wrongly freed after call to audiohooks" into 13 2017-06-07 07:58:41 -05:00
Sean Bright c093bf8072 res_rtp_multicast: Use consistent timestamps when possible
When a frame destined for a MulticastRTP channel does not have timing
information (such as when an 'originate' is done), we generate the RTP
timestamps ourselves without regard to the number of samples we are
about to send.

Instead, use the same method as res_rtp_asterisk and 'predict' a
timestamp given the number of samples. If the difference between the
timestamp that we generate and the one we predict is within a specific
threshold, use the predicted timestamp so that we end up with timestamps
that are consistent with the number of samples we are actually sending.

Change-Id: I2bf0db3541b1573043330421cbb114ff0f22ec1f
2017-06-06 11:54:07 -04:00
Joshua Colp 746c2c5745 res_pjsip: Add support for returning only reachable contacts and use it.
This introduces the ability for PJSIP code to specify filtering flags
when retrieving PJSIP contacts. The first flag for use causes the
query code to only retrieve contacts that are not unreachable. This
change has been leveraged by both the Dial() process and the
PJSIP_DIAL_CONTACTS dialplan function so they will now only attempt
calls to contacts which are not unreachable.

ASTERISK-26281

Change-Id: I8233b4faa21ba3db114f5a42e946e4b191446f6c
2017-06-06 14:45:49 +00:00
Jenkins2 95b2b542f6 Merge "format: Reintroduce smoother flags" into 13 2017-06-06 08:49:35 -05:00
Joshua Colp 3d7e9375fb Merge "res_srtp: Add support for libsrtp2" into 13 2017-06-06 05:00:57 -05:00
Kevin Harwell adfb28882b channel: ast_write frame wrongly freed after call to audiohooks
ASTERISK-26419 introduced a bug when calling ast_audiohook_write_list in
ast_write. It would free the frame given to ast_write if the frame returned
by ast_audiohook_write_list was different than the given one. The frame
give to ast_write should never be freed within that function. It is the
caller's resposibility to free the frame after writing (or when it its done
with it). By freeing it within ast_write this of course led to some memory
corruption problems.

This patch makes it so the frame given to ast_write is no longer freed within
the function. The frame returned by ast_audiohook_write_list is now subsequently
used in ast_write and is freed later. It is freed either after translate if the
frame returned by translate is different, or near the end of ast_write prior
to function exit.

ASTERISK-26973 #close

Change-Id: I463d4ac3b736ced95de986ee74a489c7c7ab103b
2017-06-05 10:45:25 -05:00
Jenkins2 cee5b78be8 Merge "pbx_builtin: Properly handle hangup during Background" into 13 2017-06-05 07:35:23 -05:00
Jenkins2 174a9b5d99 Merge "stasis_recording: Correct ast_asprintf error checking" into 13 2017-06-01 10:47:53 -05:00
Jenkins2 1e086cf018 Merge "format_mp3: Re-work menuselect/build issues" into 13 2017-06-01 10:16:20 -05:00
Jenkins2 3e8eea0325 Merge "res_pjsip: New endpoint option "refer_blind_progress"" into 13 2017-06-01 09:48:48 -05:00
Jenkins2 a76b473c49 Merge "app_confbridge: Race between removing and playing name recording while leaving" into 13 2017-06-01 09:17:44 -05:00
Joshua Colp b276810aa1 Merge "sip.conf.sample: Clarify where DTLS settings are permitted" into 13 2017-06-01 08:32:57 -05:00
Jenkins2 3f336ca053 Merge "test_json: Fix test names with reserved words" into 13 2017-05-31 13:59:39 -05:00
Sean Bright 283cc59af7 pbx_builtin: Properly handle hangup during Background
Before this patch, when a user hung up during a Background, we would
stuff 0xff into a char and attempt a dialplan lookup of it. This caused
problems for some realtime engines which interpreted the value as the
beginning of an invalid UTF-8 sequence.

ASTERISK-19291 #close
Reported by: Andrew Nowrot

Change-Id: I8ca6da93252d61c76ebdb46a4aa65e73ca985358
2017-05-31 13:22:12 -04:00
Joshua Colp dc05183f4b channel / app_meetme: Fix parentheses.
ASTERISK-27025

Change-Id: Id736b0aa4ec6b6b0f04663d64fa8d151f81fdbed
2017-05-31 13:59:04 +00:00
Sean Bright cf6cf59646 stasis_recording: Correct ast_asprintf error checking
ASTERISK-27021 #close
Reported by: Tim Morgan

Change-Id: I0ac061f040093e806c3b1f4e2340864f3ce4dd75
2017-05-30 17:07:56 -04:00
Sean Bright 70e5887906 format: Reintroduce smoother flags
In review 4843 (ASTERISK-24858), we added a hack that forced a smoother
creation when sending signed linear so that the byte order was adjusted
during transmission. This was needed because smoother flags were lost
during the new format work that was done in Asterisk 13.

Rather than rolling that same hack into res_rtp_multicast, re-introduce
smoother flags so that formats can dictate their own options.

Change-Id: I77b835fba0e539c6ce50014a984766f63cab2c16
2017-05-30 15:08:05 -05:00
Sean Bright 97b003f5e2 format_mp3: Re-work menuselect/build issues
Rather than removing format_mp3 from ALL_C_MODS (which caused format_mp3
to not show up in menuselect), use .PHONY targets when the necessary
source files are not present.

ASTERISK-23951
Reported by: Tzafrir Cohen

Change-Id: I0a7512c51acc9e86043671795020b0de725bd9e8
2017-05-30 10:51:00 -04:00
George Joseph c10341646d test_json: Fix test names with reserved words
Some of the test names were actually reserved words (true, false,
int, null, string, bool).  When the jenkins test results analyzer
does its thing it tries to create a map using the test names as
keys and fails because they're reserved words.

Added "type_" to those test names.

Change-Id: I90d809f46969c78a1c605b736ff0635196a2cf1b
2017-05-30 08:43:49 -06:00
Joshua Colp 1e65857e6f Merge "format_mp3: Don't try to build format_mp3 if we don't have sources" into 13 2017-05-30 05:53:33 -05:00
Joshua Colp b07b216235 manager: Clear the flag on the other channel.
During the channel flag audit an incorrect change was
done. The flag should be cleared on the second channel.

ASTERISK-26469

Change-Id: I770c5a389550a2fb5a6ade942fccbb2e1d9199c8
2017-05-26 16:41:59 +00:00
Sean Bright 5e9cd1f20d res_srtp: Add support for libsrtp2
ASTERISK-25294 #close
Reported by: Tzafrir Cohen

ASTERISK-26976 #close
Reported by: Alex

Change-Id: I789b1c3d1ed31365bbd9339fa58ef36f48833c40
2017-05-26 12:06:34 -04:00
Jenkins2 d4ccd3a6c0 Merge "asterisk: Audit locking of channel when manipulating flags." into 13 2017-05-26 09:12:11 -05:00
Jenkins2 5715360ba5 Merge "res_agi: Fix malformed AGI usage response" into 13 2017-05-26 08:00:49 -05:00
George Joseph a8f8c5d857 Merge "res_agi: Allow configuration of audio format of EAGI pipe" into 13 2017-05-25 19:01:19 -05:00
George Joseph a2d15b93f1 Merge "unittests: Add a unit test that causes a SEGV and..." into 13 2017-05-25 15:06:15 -05:00
Jenkins2 558199e5dd Merge "res_agi: Prevent crash when SET VARIABLE called without arguments" into 13 2017-05-25 14:44:11 -05:00
Sean Bright 72213c98e3 format_mp3: Don't try to build format_mp3 if we don't have sources
ASTERISK-23951 #close
Reported by: Tzafrir Cohen

Change-Id: Iebf181d44bb735787fde4b5be863c4d7e2478a30
2017-05-25 12:13:48 -04:00
Jenkins2 a3684b74e6 Merge "res_agi: Clarify 'RECORD FILE' documentation" into 13 2017-05-24 17:58:57 -05:00
George Joseph 65898c3af8 unittests: Add a unit test that causes a SEGV and...
...that can only be run by explicitly calling it with
'test execute category /DO_NOT_RUN/ name RAISE_SEGV'

This allows us to more easily test CI and debugging tools that
should do certain things when asterisk coredumps.

To allow this a new member was added to the ast_test_info
structure named 'explicit_only'.  If set by a test, the test
will be skipped during a 'test execute all' or
'test execute category ...'.

Change-Id: Ia3a11856aae4887df9a02b6b081cc777b36eb6ed
2017-05-24 14:56:14 -06:00
Joshua Colp 1bddf1efc3 Merge "chan_sip: Better ICE handling for RTCP-MUX" into 13 2017-05-24 11:41:30 -05:00
Jenkins2 a69905af69 Merge "res_rtp_asterisk: rtcp mux using the wrong srtp unprotecting algorithm" into 13 2017-05-24 11:12:11 -05:00
Jenkins2 4dfcccdb70 Merge "res_format_attr_h26x: Trim blanks in fmtp attributes" into 13 2017-05-24 09:39:40 -05:00
Jenkins2 bc4ef72394 Merge "app_queue: Fix members showing as being in call when not." into 13 2017-05-24 08:38:37 -05:00
Sean Bright 90237dca11 res_agi: Allow configuration of audio format of EAGI pipe
This change allows the format of the EAGI audio pipe to be changed by
setting the dialplan variable 'EAGI_AUDIO_FORMAT' to the name of one of
the loaded formats.

ASTERISK-26124 #close

Change-Id: I7a10fad401ad2a21c68c2e7246fa357d5cee5bbd
2017-05-23 16:46:47 -04:00
Sean Bright 3eb7fbba72 res_agi: Clarify 'RECORD FILE' documentation
Documented the 'beep' option in both the parameters list and the command
description.

ASTERISK-23839 #close

Change-Id: I4970395c922dbdce3f7cf0f56d5b065ec9aa53ea
2017-05-23 14:33:16 -04:00
Sean Bright f306e451f6 res_agi: Prevent crash when SET VARIABLE called without arguments
Explicitly check that the appropriate number of arguments were passed to
SET VARIABLE before attempting to reference them. Also initialize the
arguments array to zeroes before populating it.

ASTERISK-22432 #close

Change-Id: I5143607d80a2724f749c1674f3126b04ed32ea97
2017-05-23 14:06:22 -04:00
Sean Bright a007e438c3 res_agi: Fix malformed AGI usage response
If the generated XML documentation for a command does not end with a \n,
the postamble of the usage message does not appear on its own line.

ASTERISK-25662 #close

Change-Id: If190f1e9e37fe215fed95897d78d4a6e142b0020
2017-05-23 13:35:25 -04:00
Sean Bright 971a401ce9 sip.conf.sample: Clarify where DTLS settings are permitted
ASTERISK-25101 #close

Change-Id: I09a97793e5577b4422d0ae883fadb3f0d86725cc
2017-05-23 13:00:55 -04:00
Sean Bright 700ef6861a res_format_attr_h26x: Trim blanks in fmtp attributes
Some devices separate format attributes with a semicolon followed by a
space, so trim blanks before trying to match them.

ASTERISK-27008 #close

Change-Id: Ia44cb2e4fef5c73dc541a29da79cb0e19c22d9cc
2017-05-23 11:57:18 -04:00
Joshua Colp 6bfcb1acc7 app_queue: Fix members showing as being in call when not.
A change was done which added an 'in_call' flag to queue
members that was set to true while talking to an agent.
Unfortunately in practice this does not accurately reflect
whether they are talking to an agent or not. If a Local
channel is involved and a transfer is performed then the
app_queue application would incorrectly think the agent
was still in a call with the caller. This was done to
fix a race condition between an agent becoming available
by device state and the checking of the last call information
for the wrapup time. There was a small window where the
last call information would be the previous value instead
of the new one.

This change goes about fixing the original issue in a
different way by considering the call completed if device
state is received which would make the agent available
and if they are currently in a call. If this occurs the
last call information is updated before the agent becomes
available ensuring that old information is not present
when checking if the member should be called. This also
improves the transfer situation by actually updating
and enforcing the wrapup time.

ASTERISK-26399
ASTERISK-26400
ASTERISK-26715
ASTERISK-26975

Change-Id: Ife1cb686e3173b3a6d368601adef9aff69d4beea
2017-05-23 14:23:49 +00:00
Jenkins2 d0a1239f55 Merge "res_pjsip_session : fixed wrong From Header number On Re-invite" into 13 2017-05-23 09:07:20 -05:00
Robert Mordec f1b32de2c5 app_confbridge: Race between removing and playing name recording while leaving
When user leaves a conference, its channel calls async_play_sound_file()
in order to play the name announcement and then unlinks the sound file.
The async_play_sound_file() function adds a task to conference playback queue,
which then runs playback_common() function in a different thread.

It leads to a race condition when, in some cases, channel thread may unlink
the sound file before playback_common() had a chance to open it.

This patch creates a file deletion task, that is queued after playback.

ASTERISK-27012 #close

Change-Id: I412f7922d412004b80917d4e892546c15bd70dd3
2017-05-23 14:16:11 +02:00
Kevin Harwell e91efef2bb res_rtp_asterisk: rtcp mux using the wrong srtp unprotecting algorithm
When using rtcp mux if an rtcp payload came in it would still use the srtp
unprotect algorithm instead of the srtp unprotect rtcp method. Since rtcp
data was being passed to the rtp unprotect method this would result in an
error.

This patch ensures that the correct unprotect method is chosen by making
sure the passed in rtcp flag is appropriately set when rtcp mux is enabled
and an rtcp payload is received.

ASTERISK-26979 #close

Change-Id: Ic5409f9d1a267f1d4785fc5aed867daaecca6241
2017-05-22 13:51:40 -05:00
Sean Bright 4479038073 chan_sip: Better ICE handling for RTCP-MUX
If we are offered or are offering RTCP-MUX, don't consider RTCP ICE
candidates. This confuses certain browsers (current Firefox for
example) and causes intial audio setup delays.

ASTERISK-26982 #close

Change-Id: Ifeaf47e83972fe8dbe58b7fb3d6d1823400cfb91
2017-05-22 10:00:33 -04:00
Jenkins2 7af41de364 Merge "app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON" into 13 2017-05-22 04:52:35 -05:00
Yasin CANER 36628cc9c4 res_pjsip_session : fixed wrong From Header number On Re-invite
ASTERISK-26964 #close

Change-Id: I55a9caa7dc90e6c4c219cb09b5c2ec08af84a302
2017-05-22 04:03:56 -05:00
Jenkins2 ff6d179864 Merge "res_hep_rtcp: Add support level to module info" into 13 2017-05-19 18:10:33 -05:00
Jenkins2 7919b7287f Merge "AST-2017-004: chan_skinny: Add EOF check in skinny_session" into 13 2017-05-19 14:55:04 -05:00
Jenkins2 6aa11c4b31 Merge "AST-2017-003: Handle zero-length body parts correctly." into 13 2017-05-19 14:23:32 -05:00
Mark Michelson 919ccdb9ac AST-2017-002: Ensure transaction key buffer is large enough.
ASTERISK-26938 #close

Change-Id: I266490792fd8896a23be7cb92f316b7e69356413
2017-05-19 11:08:52 -05:00
Mark Michelson 49c032abef AST-2017-003: Handle zero-length body parts correctly.
ASTERISK-26939 #close

Change-Id: I7ea235ab39833a187db4e078f0788bd0af0a24fd
2017-05-19 11:06:54 -05:00
George Joseph 1cc18d4025 AST-2017-004: chan_skinny: Add EOF check in skinny_session
The while(1) loop in skinny_session wasn't checking for EOF so
a packet that was longer than a header but still truncated
would spin the while loop infinitely.  Not only does this
permanently tie up a thread and drive a core to 100% utilization,
the call of ast_log() in such a tight loop eats all available
process memory.

Added poll with timeout to top of read loop

ASTERISK-26940 #close
Reported-by: Sandro Gauci

Change-Id: I2ce65f3c5cb24b4943a9f75b64d545a1e2cd2898
2017-05-19 11:04:19 -05:00
Sean Bright c107ab4c04 res_hep_rtcp: Add support level to module info
Change-Id: I5661478f9cf12d431f730e42be79323b62831e92
2017-05-18 17:35:21 -04:00
Ivan Poddubny cfeae52c0f app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON
There are 2 places in app_queue.c that log EXITEMPTY event: one in
wait_our_turn, and another one in queue_exec in the loop trying to
call an agent after wait_our_turn.

In most cases it leads to logging EXITEMPTY twice.

ABANDON is also logged on two places, and in the rare case when an agent
and caller hang up simultaneously it's also possible to get duplicates
in queue_log.

This commit changes wait_our_turn to return -1 ("the caller should exit
the queue") instead of 0 ("the caller's turn has arrived") in case of
leaving when empty, so queue_exec skips the agent calling loop.

Also, leave_queue is now executed only once in this case, because 2nd
time is just a noop when the queue entry has already been removed.

Also, it sets qe->handled to -1 to indicate that the call was not
answered by an agent, but the necessary handling has already been done
in order to avoid logging an extra ABANDON entry.

ASTERISK-25665 #close
Reported by: Ove Aursand

Change-Id: I4578dd383bf2ac41589cf167865e8aaebcd4c11e
2017-05-17 14:04:43 -05:00
Jenkins2 722ec0671e Merge "res_pjsip_session.c: Process initial INVITE sooner. (key exists)" into 13 2017-05-17 11:31:27 -05:00
Rodrigo Ramírez Norambuena 5da91c65be Fix spelling queues.conf.sample file
Change-Id: Ie1c2d83af66f27a449da09a68d987e0992627fee
2017-05-17 09:15:57 -05:00
Joshua Colp 1618203964 asterisk: Audit locking of channel when manipulating flags.
When manipulating flags on a channel the channel has to be
locked to guarantee that nothing else is also manipulating
the flags. This change introduces locking where necessary to
guarantee this. It also adds helper functions that manipulate
channel flags and lock to reduce repeated code.

ASTERISK-26789

Change-Id: I489280662dba0f4c50981bfc5b5a7073fef2db10
2017-05-16 14:25:01 +00:00
Richard Mudgett b67363006f res_pjsip_session.c: Process initial INVITE sooner. (key exists)
Retransmissions of an initial INVITE could be queued in the serializer
before we have processed the first INVITE message.  If the first INVITE
message doesn't get completely processed before the retransmissions are
seen then we could try to setup the same call from the retransmissions.  A
symptom of this is seeing a (key exists) message associated with an
INVITE.  An earlier change attempted to address this kind of problem by
calculating a distributor serializer to use for unassociated messages.
Part of that change also made incoming calls keep using that distributor
serializer.  (ASTERISK-26088) However, some leftover code was still
deferring the INVITE processing to the session's serializer even though we
were already in that serializer.  This not only is unnecessary but would
cause the same call resetup problem.

* Removed the code to defer processing the initial INVITE to the session's
serializer because we are already running in that serializer.

ASTERISK-26998 #close

Change-Id: I1e822d82dcc650e508bc2d40d545d5de4f3421f6
2017-05-15 15:14:52 -05:00
Jenkins2 6383d9214a Merge "res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages." into 13 2017-05-11 16:33:55 -05:00
Jenkins2 3cfbb8b481 Merge "logger: Added logger_queue_limit to the configuration options." into 13 2017-05-11 11:55:29 -05:00
Jenkins2 ddbc68b68a Merge "tcptls: Improve error messages for TLS connections." into 13 2017-05-11 10:49:04 -05:00
Alexei Gradinari 6af2dd34af res_pjsip: New endpoint option "refer_blind_progress"
This option was added to turn off notifying the progress details
on Blind Transfer. If this option is not set then the chan_pjsip
will send NOTIFY "200 OK" immediately after "202 Accepted".

Some SIP phones like Mitel/Aastra or Snom keep the line busy until
receive "200 OK".

ASTERISK-26333 #close

Change-Id: Id606fbff2e02e967c02138457badc399144720f2
2017-05-11 11:45:16 -04:00
Jenkins2 a546e16cdb Merge "Prevent Undefined Capath Crash" into 13 2017-05-11 10:35:05 -05:00
Jenkins2 a2c0d8c25d Merge "cel_odbc: Fix timestamp processing for microseconds" into 13 2017-05-10 06:32:56 -05:00
Joshua Colp 6fba0a41f0 tcptls: Improve error messages for TLS connections.
This change uses the functions provided by OpenSSL to query
and better construct error messages for situations where
the connection encounters a problem.

ASTERISK-26606

Change-Id: I7ae40ce88c0dc4e185c4df1ceb3a6ccc198f075b
2017-05-09 16:02:25 +00:00
Joshua Elson 8ec6e19c86 Prevent Undefined Capath Crash
It is possible to initialize a valid config without a capath
or cafile definition. This will cause a crash on a reload.

This fix ensures capath is always allocated.

ASTERISK-26983 #close

Change-Id: I63ff715d9d9023427543a5b8a4ba7b0d82533c12
2017-05-09 07:44:31 -06:00
George Joseph d6325373ac cel_odbc: Fix timestamp processing for microseconds
When a column is of type timestamp, the fraction part of the event
field's seconds was frequently parsed incorrectly especially if
there were leading zeros.  For instance "2017-05-23 23:55:03.023"
would be parsed into an int as "23" then when the timestamp was
formatted again to be inserted into the database column it'd be
"2017-05-23 23:55:03.23" which is now 230 milliseconds instead of
23 milliseconds.  "03.000001" would be transformed to "03.1", etc.

* If the event field is 'eventtime' and the db column is timestamp,
  then existing processing has already correctly formatted the
  timestamp so now we simply use it rather than parsing it and
  re-printing it. This is the most common use case anyway.

* If the event field is other than 'eventtime' and the db column
  is timestamp, we now parse the seconds, including the fractional
  part into a double rather than 2 ints.  This preserves the
  magnitude and precision of the fractional part.  When we print
  it, we now print it as a "%09.6lf" which correctly represents the
  input.

To be honest, why we parse the string timestamp into components,
test the components, then print the components back into a string
timestamp is beyond me.  We should use parse it, test it, then if
it passes, use the original string representation in the database
call.  Maybe someone thought that some implementations wouldn't
take a partial timestamp string like "2017-05-06" and decided to
always produce a full timestamp string even if an abbreviated one
was supplied.  Anyway, I'm leaving it as it is.

ASTERISK-25032 #close
Reported-by: Etienne Lessard

Change-Id: Id407e6221f79a5c1120e1a70bc7e893bbcaf1938
2017-05-09 06:19:34 -06:00
Joshua Colp 10a49ab362 res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages.
This change adds the required logic to allow the SIP
Call-ID to be placed into the HEP RTCP traffic if the
chan_sip module is used. In cases where the option is
enabled but the channel is not either SIP or PJSIP then
the code will fallback to the channel name as done
previously.

Based on the change on Nir's branch at:
team/nirs/hep-chan-sip-support

ASTERISK-26427

Change-Id: I09ffa5f6e2fdfd99ee999650ba4e0a7aad6dc40d
2017-05-09 10:33:04 +00:00
Joshua Colp 371213217c Merge "func_cdr: Allow empty value for CDR dialplan function." into 13 2017-05-08 18:21:15 -05:00
George Joseph 7d4a22bf2e logger: Added logger_queue_limit to the configuration options.
All log messages go to a queue serviced by a single thread
which does all the IO.  This setting controls how big that
queue can get (and therefore how much memory is allocated)
before new messages are discarded. The default is 1000.
Should something go bezerk and log tons of messages in a tight
loop, this will prevent memory escalation.

When the limit is reached, a WARNING is logged to that effect
and messages are discarded until the queue is empty again.  At
that time another WARNING will be logged with the count of
discarded messages.  There's no "low water mark" for this queue
because the logger thread empties the entire queue and processes it
in 1 batch before going back and waiting on the queue again.
Implementing a low water mark would mean additional locking as
the thread processes each message and it's not worth it.

A "test" was added to test_logger.c but since the outcome is
non-deterministic, it's really just a cli command, not a unit
test.

Change-Id: Ib4520c95e1ca5325dbf584c7989ce391649836d1
2017-05-08 15:27:04 -06:00
Vitezslav Novy 1bcce442d0 chan_sip: Change sip_get_codec() to return correct codec list
Return cahnnel nativeformats to fix bridge technology selection process.
Same approach as in pjsip module.

ASTERISK-26143
Reported-by: Henning Holtschneider

Change-Id: I64e863753954d6ad67a9e722df2ebc328705ad48
2017-05-08 20:43:52 +02:00
Joshua Colp e3fa458440 Merge "netsock2.c: Made get/set addr port avoid potential uninitialized memory." into 13 2017-05-08 08:46:57 -05:00
Joshua Colp 4d0bc3e5fc Merge "bridge: Fix returning to dialplan when executing Bridge() from AMI." into 13 2017-05-08 07:33:02 -05:00
Richard Mudgett 614eda785d netsock2.c: Made get/set addr port avoid potential uninitialized memory.
Change-Id: I532052bd7cd95a4b3565485fc01e2a1ea07ee647
2017-05-05 18:53:05 -05:00
Jenkins2 250fee82aa Merge "app_confbridge: Fix reference to cfg in menu_template_handler" into 13 2017-05-05 10:34:17 -05:00
Joshua Colp c3ed63cb2c func_cdr: Allow empty value for CDR dialplan function.
A regression was introduced in 12 where passing an empty value
to the CDR dialplan function was not longer allowed. This
change returns to the behavior of 11 where it is permitted.

ASTERISK-26173

Change-Id: I3f148203b54ec088007e29e30005a5de122e51c5
2017-05-05 13:48:34 +00:00
George Joseph bed6c0d04b app_confbridge: Fix reference to cfg in menu_template_handler
menu_template_handler wasn't properly accounting for the fact that
it might be called both during a load/reload (which isn't really
valid but not prevented) and by a dialplan function.  In both cases
it was attempting to use the "pending" config which wasn't valid in
the latter case.  aco_process_config is also partly to blame because
it wasn't properly cleaning "pending" up when a reload was done and
no changes were made.  Both of these contributed to a crash if
CONFBRIDGE(menu,template) was called in a dialplan after a reload.

* aco_process_config now sets info->internal->pending to NULL
  after it unrefs it although this isn't strictly necessary in the
  context of this fix.
* menu_template_handler now uses the "current" config and silently
  ignores any attempt to be called as a result of someone uses the
  "template" parameter in the conf file.

Luckily there's no other place in the codebase where
aco_pending_config is used outside of aco_process_config.

ASTERISK-25506 #close
Reported-by: Frederic LE FOLL

Change-Id: Ib349a17d3d088f092480b19addd7122fcaac21a7
2017-05-04 19:09:33 -06:00
Joshua Colp ce1985b099 Merge "res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures" into 13 2017-05-04 18:28:08 -05:00
Joshua Colp 7ffd80cc04 bridge: Fix returning to dialplan when executing Bridge() from AMI.
When using the Bridge AMI action on the same channel multiple times
it was possible for the channel to return to the wrong location in
the dialplan if the other party hung up. This happened because the
priority of the channel was not preserved across each action
invocation and it would fail to move on to the next priority in
other cases.

This change makes it so that the priority of a channel is preserved
when taking control of it from another thread and it is incremented
as appropriate such that the priority reflects where the channel
should next be executed in the dialplan, not where it may or may not
currently be.

The Bridge AMI action was also changed to ensure that it too
starts the channels at the next location in the dialplan.

ASTERISK-24529

Change-Id: I52406669cf64208aef7252a65b63ade31fbf7a5a
2017-05-04 21:39:22 +00:00
Kevin Harwell bbe90d6aed res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures
When a call gets put on hold RTP is temporarily stopped and Asterisk was
setting the remote RTCP address to NULL. Then when RTCP data was received
from the remote endpoint, Asterisk would be missing this information when
publishing the rtcp_message stasis event. Consequently, message subscribers
(in this case res_hep_rtcp) trying to parse the "from" field output the
following error:

"ast_sockaddr_split_hostport: Port missing in (null)"

This patch makes it so the remote RTCP address is no longer set to NULL when
stopping RTP. There was only one place that appeared to check if the remote
RTCP address was NULL as a way to tell if RTCP was running. This patch added
an additional check on the RTCP schedid for that case to make sure RTCP was
truly not running.

ASTERISK-26860 #close

Change-Id: I6be200fb20db647e48b5138ea4b81dfa7962974b
2017-05-03 12:28:24 -05:00
Jenkins2 1d44c838d8 Merge "channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections" into 13 2017-05-03 10:18:03 -05:00
Sean Bright 526a0081a0 cleanup: Change severity of fread short-read warning
Many sound files don't have a full frame's worth of data at EOF, so the
warning messages were a bit too noisy. So we demote them to debug
messages.

Change-Id: I6b617467d687658adca39170a81797a11cc766f6
2017-05-02 12:34:24 -04:00
Jenkins2 08dc126b38 Merge "rtp_engine.c: Fix deadlock potential copying RTP payload maps." into 13 2017-05-02 09:15:11 -05:00
Jenkins2 20cc154dd3 Merge "res_pjsip_t38.c: Fix deadlock in T.38 framehook." into 13 2017-05-02 09:13:25 -05:00
Thierry Magnien 23db04ed93 channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections
For outgoing TCP connections, Asterisk uses the first IP address of the
interface instead of the IP address we asked him to bind to.

ASTERISK-26922 #close
Reported-by: Ksenia

Change-Id: I43c71ca89211dbf1838e5bcdb9be8d06d98e54eb
2017-05-02 05:57:54 -05:00
Richard Mudgett 02234e920c rtp_engine.c: Fix deadlock potential copying RTP payload maps.
There is a theoretical potential to deadlock in
ast_rtp_codecs_payloads_copy() because it locks two different
ast_rtp_codecs locks.  It is theoretical because the callers of the
function are either copying between a local ast_rtp_codecs struct and a
RTP instance of the ast_rtp_codecs struct.  Or they are copying between
the caller and callee channel RTP instances before initiating the call to
the callee.  Neither of these situations could actually result in a
deadlock because there cannot be another thread involved at the time.

* Add deadlock avoidance code to ast_rtp_codecs_payloads_copy() since it
locks two ast_rtp_codecs locks to perform a copy.

This only affects v13 since this deadlock avoidance code is already in
newer branches.

Change-Id: I1aa0b168f94049bd59bbd74a85bd1e78718f09e5
2017-04-29 18:12:49 -05:00
Richard Mudgett 9d5df48968 res_pjsip_t38.c: Fix deadlock in T.38 framehook.
A deadlock can happen between a channel lock and a pjsip session media
container lock.  One thread is processing a reINVITE's SDP and walking
through the session's media container when it waits for the channel lock
to put the determined format capabilities onto the channel.  The other
thread is writing a frame to the channel and processing the T.38 frame
hook.  The T.38 frame hook then waits for the pjsip session's media
container lock.  The two threads are now deadlocked.

* Made the T.38 frame hook release the channel lock before searching the
session's media container.  This fix has been done to several other
frame hooks to fix deadlocks.

ASTERISK-26974 #close

Change-Id: Ie984a76ce00bef6ec9aa239010e51e8dd74c8186
2017-04-29 18:12:33 -05:00
George Joseph 623832b94e res_pjsip_outbound_authenticator_digest: Add context to log messages
There was no context info in this module's log messages so it was
impossible to toubleshoot.

Added endpoint or host to all messages and added the realms in the
challenge for the "No auth credentials for any realm" message.

Change-Id: Ifeed2786f35fbea7d141237ae15625e472acff9b
2017-04-28 09:56:20 -06:00
Jenkins2 bf7cf10d15 Merge "frame: Better handle interpolated frames." into 13 2017-04-27 17:35:48 -05:00
Jenkins2 9bb683242c Merge "res_pjsip_session: Add cleanup to ast_sip_session_terminate" into 13 2017-04-27 16:46:17 -05:00
Jenkins2 dc7166e59f Merge "res_pjsip/res_pjsip_callerid: NULL check on caller id name string" into 13 2017-04-27 16:16:47 -05:00
Jenkins2 a439faec57 Merge "chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK" into 13 2017-04-27 16:01:55 -05:00
Jenkins2 e3df529db5 Merge "vector: defaults and indexes" into 13 2017-04-27 15:39:06 -05:00
Joshua Colp 5e3e309c82 Merge "res_rtp_asterisk.c: Fix crash in RTCP DTLS operation." into 13 2017-04-27 13:58:38 -05:00
Jenkins2 b49e41390d Merge "cleanup: Fix fread() and fwrite() error handling" into 13 2017-04-27 12:08:14 -05:00
Jenkins2 cf19589001 Merge "pjproject_bundled: Add --disable-libwebrtc to configure" into 13 2017-04-27 11:45:53 -05:00
George Joseph c5b9ed20fd res_pjsip_session: Add cleanup to ast_sip_session_terminate
If you use ast_request to create a PJSIP channel but then hang it
up without causing a transaction to be sent, the session will
never be destroyed.  This is due ot the fact that it's pjproject
that triggers the session cleanup when the transaction ends.
app_chanisavail was doing this to get more granular channel state
and it's also possible for this to happen via ARI.

* ast_sip_session_terminate was modified to explicitly call the
  cleanup tasks and unreference session if the invite state is NULL
  AND invite_tsx is NULL (meaning we never sent a transaction).

* chan_pjsip/hangup was modified to bump session before it calls
  ast_sip_session_terminate to insure that session stays valid
  while it does its own cleanup.

* Added test events to session_destructor for a future testsuite
  test.

ASTERISK-26908 #close
Reported-by: Richard Mudgett

Change-Id: I52daf6f757184e5544c261f64f6fe9602c4680a9
2017-04-27 09:43:00 -06:00
Kevin Harwell c853cfdc7c res_pjsip/res_pjsip_callerid: NULL check on caller id name string
It's possible for a name in a party id structure to be marked as valid, but the
name string itself be NULL (for instance this is possible to do by using the
dialplan CALLERID function). There were a couple of places where the name was
validated, but the string itself was not checked before passing it to functions
like 'strlen'. This of course caused a crashed.

This patch adds in a NULL check before attempting to pass it into a function
that is not NULL tolerant.

ASTERISK-25823 #close

Change-Id: Iaa6ffe9d92f598fe9e3c8ae373fadbe3dfbf1d4a
2017-04-26 15:31:42 -05:00
Kevin Harwell 4d3b4fbf22 vector: defaults and indexes
Added an pre-defined integer vector declaration. This makes integer vectors
easier to declare and pass around. Also, added the ability to default a vector
up to a given size with a default value. Lastly, added functionality that
returns the "nth" index of a matching value.

Also, updated a unit test to test these changes.

Change-Id: Iaf4b51b2540eda57cb43f67aa59cf1d96cdbcaa5
2017-04-26 13:24:44 -05:00
Jean Aunis 566ad7c35d chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK
Some equipments may send a re-INVITE containing an SDP in the final ACK
request. If this happens in the context of direct media, the remote end
should be updated with a re-INVITE.
This patch queues an "update RTP peer" frame to trigger the re-INVITE,
instead of the "source change" frame wich was used previously.

ASTERISK-26951

Change-Id: I3644d2025f20e086ea9f8f62b486172c52b5b2e6
2017-04-26 09:51:30 -05:00
George Joseph 001dc2ade6 pjproject_bundled: Add --disable-libwebrtc to configure
Without the disable, pjproject tries to build it's internal
webrtc implementation which requires sse2.  This fails on
platforms without sse2.

ASTERISK-26930 #close
Reported-by: abelbeck

Change-Id: I07231f9160c35cfa42b194d3aad4e7d51fd9a410
2017-04-26 08:04:25 -06:00
Jenkins2 d2bb9f21d4 Merge "alembic: Add table for 'resource_list' PJSIP RLS type." into 13 2017-04-26 08:45:38 -05:00
Joshua Colp ae696132a2 frame: Better handle interpolated frames.
Interpolated frames are frames which contain a number of
samples but have no actual data. Audiohooks did not
handle this case when translating an incoming frame into
signed linear. It assumed that a frame would always contain
media when it may not. If this occurs audiohooks will now
immediately return and not act on the frame.

As well for users of ast_trans_frameout the function has
been changed to be a bit more sane and ensure that the data
pointer on a frame is set to NULL if no data is actually
on the frame. This allows the various spots in Asterisk that
check for an interpolated frame based on the presence of a
data pointer to work as expected.

ASTERISK-26926

Change-Id: I7fa22f631fa28d540722ed789ce28e84c7f8662b
2017-04-26 10:46:52 +00:00
George Joseph 95313c5f9e Merge "res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions." into 13 2017-04-25 16:41:01 -05:00
George Joseph f9369143db Merge "res_hep: Add additional config initialization and validation" into 13 2017-04-25 16:36:36 -05:00
Sean Bright 1b50df78d0 cleanup: Fix fread() and fwrite() error handling
Cleaned up some of the incorrect uses of fread() and fwrite(), mostly in
the format modules. Neither of these functions will ever return a value
less than 0, which we were checking for in some cases.

I've introduced a fair amount of duplication in the format modules, but
I plan to change how format modules work internally in a subsequent
patch set, so this is simply a stop-gap.

Change-Id: I8ca1cd47c20b2c0b72088bd13b9046f6977aa872
2017-04-25 16:24:37 -05:00
George Joseph f7ca69809a Merge "res_pjsip_session.c: Restructure ast_sip_session_alloc()" into 13 2017-04-25 15:38:25 -05:00
Joshua Colp c09b9dba90 alembic: Add table for 'resource_list' PJSIP RLS type.
This change adds an Alembic migration which adds a
ps_resource_list table that can contain resource_list
RLS configuration objects.

ASTERISK-26929

Change-Id: I7c888fafc67b3e87012de974f71ca7a5b8b1ec05
2017-04-25 19:36:13 +00:00
Sean Bright 1b88a3a4cf res_hep: Add additional config initialization and validation
* Initialize hepv3_runtime_data.sockfd to -1 so that our ao2 destructor
  does not close fd 0

* Add logging output when the required option - capture_address - is not
  specified.

* Remove a no longer relevant #define and correct related documentation

* Pass appropriate flags to aco_option_register so that capture_address
  cannot be the empty string.

ASTERISK-26953 #close

Change-Id: Ief08441bc6596d6f1718fa810e54a5048124f076
2017-04-24 14:21:41 -04:00
Sean Bright cea3742c54 core: Use eventfd for alert pipes on Linux when possible
The primary win of switching to eventfd when possible is that it only
uses a single file descriptor while pipe() will use two. This means for
each bridge channel we're reducing the number of required file
descriptors by 1, and - if you're using timerfd - we also now have 1
less file descriptor per Asterisk channel.

The API is not ideal (passing int arrays), but this is the cleanest
approach I could come up with to maintain API/ABI.

I've also removed what I believe to be an erroneous code block that
checked the non-blocking flag on the pipe ends for each read. If the
file descriptor is 'losing' its non-blocking mode, it is because of a
bug somewhere else in our code.

In my testing I haven't seen any measurable difference in performance.

Change-Id: Iff0fb1573e7f7a187d5211ddc60aa8f3da3edb1d
2017-04-24 12:46:27 -04:00
George Joseph dac4442cdd Merge "pbx: Use same thread if AST_OUTGOING_WAIT_COMPLETE specified" into 13 2017-04-21 15:48:15 -05:00
Richard Mudgett 1213ac1ac5 res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions.
If ICE is enabled and a STUN server does not respond then we will block
until we give up on the STUN response.  This will take nine seconds.  In
the mean time the peer that sent the INVITE will send retransmissions.

* Restructure res_pjsip_session.c:new_invite() to send a 100 Trying out
earlier to prevent these retransmissions.

ASTERISK-26890

Change-Id: Ie3fc611e53a0eff6586ad55e4aacad81cf6319a8
2017-04-21 14:06:45 -05:00
Richard Mudgett 80fd7fd908 res_pjsip_session.c: Restructure ast_sip_session_alloc()
* Restructure ast_sip_session_alloc() to need less cleanup on off nominal
error paths.

* Made ast_sip_session_alloc() and ast_sip_session_create_outgoing() avoid
unnecessary ref manipulation to return a session.  This is faster than
calling a function.  That function may do logging of the ref changes with
REF_DEBUG enabled.

Change-Id: I2a0affc4be51013d3f0485782c96b8fee3ddb00a
2017-04-21 14:06:45 -05:00
George Joseph 5860ad3ee8 Merge "rtp_engine/res_rtp_asterisk: Fix RTP struct reentrancy crashes." into 13 2017-04-21 13:11:07 -05:00
George Joseph eb479ee6c7 Merge "build: Update config.guess and config.sub" into 13 2017-04-20 13:34:26 -05:00
George Joseph 98bb64f88a Merge "res_stun_monitor: Don't fail to load if DNS resolution fails" into 13 2017-04-20 07:19:19 -05:00
George Joseph 12affa7b6e Merge "make ari-stubs so doc periodic jobs can run" into 13 2017-04-20 07:18:26 -05:00
Sean Bright 98e38daf82 pbx: Use same thread if AST_OUTGOING_WAIT_COMPLETE specified
Both ast_pbx_outgoing_app() and ast_pbx_outgoing_exten() cause the core
to spawn a new thread to perform the dial. When AST_OUTGOING_WAIT_COMPLETE
is passed to these functions, the calling thread will be blocked until
the newly created channel has been hung up.

After this patch, we run the dial on the current thread rather than
spawning a new one. The only in-tree code that passes
AST_OUTGOING_WAIT_COMPLETE is pbx_spool, so you should see reduced
thread usage if you are using .call files.

Change-Id: I512735d243f0a9da2bcc128f7a96dece71f2d913
2017-04-19 17:42:40 -04:00
Richard Mudgett 55f452884f res_rtp_asterisk.c: Fix crash in RTCP DTLS operation.
Occasionally a crash happens when processing the RTCP DTLS timeout
handler.  The RTCP DTLS timeout timer could be left running if we have not
completed the DTLS handshake before we place the call on hold or we
attempt direct media.

* Made ast_rtp_prop_set() stop the RTCP DTLS timer when disabling RTCP.

* Made some sanity tweaks to ast_rtp_prop_set() when switching from
standard RTCP mode to RTCP multiplexed mode.

ASTERISK-26692 #close

Change-Id: If6c64c79129961acfa4b3d63a864e8f6b664acc0
2017-04-19 13:30:10 -05:00
Richard Mudgett f856cfbb51 rtp_engine/res_rtp_asterisk: Fix RTP struct reentrancy crashes.
The struct ast_rtp_instance has historically been indirectly protected
from reentrancy issues by the channel lock because early channel drivers
held the lock for really long times.  Holding the channel lock for such a
long time has caused many deadlock problems in the past.  Along comes
chan_pjsip/res_pjsip which doesn't necessarily hold the channel lock
because sometimes there may not be an associated channel created yet or
the channel pointer isn't available.

In the case of ASTERISK-26835 a pjsip serializer thread was processing a
message's SDP body while another thread was reading a RTP packet from the
socket.  Both threads wound up changing the rtp->rtcp->local_addr_str
string and interfering with each other.  The classic reentrancy problem
resulted in a crash.

In the case of ASTERISK-26853 a pjsip serializer thread was processing a
message's SDP body while another thread was reading a RTP packet from the
socket.  Both threads wound up processing ICE candidates in PJPROJECT and
interfering with each other.  The classic reentrancy problem resulted in a
crash.

* rtp_engine.c: Make the ast_rtp_instance_xxx() calls lock the RTP
instance struct.

* rtp_engine.c: Make ICE and DTLS wrapper functions to lock the RTP
instance struct for the API call.

* res_rtp_asterisk.c: Lock the RTP instance to prevent a reentrancy
problem with rtp->rtcp->local_addr_str in the scheduler thread running
ast_rtcp_write().

* res_rtp_asterisk.c: Avoid deadlock when local RTP bridging in
bridge_p2p_rtp_write() because there are two RTP instance structs
involved.

* res_rtp_asterisk.c: Avoid deadlock when trying to stop scheduler
callbacks.  We cannot hold the instance lock when trying to stop a
scheduler callback.

* res_rtp_asterisk.c: Remove the lock in struct dtls_details and use the
struct ast_rtp_instance ao2 object lock instead.  The lock was used to
synchronize two threads to prevent a race condition between starting and
stopping a timeout timer.  The race condition is no longer present between
dtls_perform_handshake() and __rtp_recvfrom() because the instance lock
prevents these functions from overlapping each other with regards to the
timeout timer.

* res_rtp_asterisk.c: Remove the lock in struct ast_rtp and use the struct
ast_rtp_instance ao2 object lock instead.  The lock was used to
synchronize two threads using a condition signal to know when TURN
negotiations complete.

* res_rtp_asterisk.c: Avoid deadlock when trying to stop the TURN
ioqueue_worker_thread().  We cannot hold the instance lock when trying to
create or shut down the worker thread without a risk of deadlock.

This patch exposed a race condition between a PJSIP serializer thread
setting up an ICE session in ice_create() and another thread reading RTP
packets.

* res_rtp_asterisk.c:ice_create(): Set the new rtp->ice pointer after we
have re-locked the RTP instance to prevent the other thread from trying to
process ICE packets on an incomplete ICE session setup.

A similar race condition is between a PJSIP serializer thread resetting up
an ICE session in ice_create() and the timer_worker_thread() processing
the completion of the previous ICE session.

* res_rtp_asterisk.c:ast_rtp_on_ice_complete(): Protect against an
uninitialized/null remote_address after calling
update_address_with_ice_candidate().

* res_rtp_asterisk.c: Eliminate the chance of ice_reset_session()
destroying and setting the rtp->ice pointer to NULL while other threads
are using it by adding an ao2 wrapper around the PJPROJECT ice pointer.
Now when we have to unlock the RTP instance object to call a PJPROJECT ICE
function we will hold a ref to the wrapper.  Also added some rtp->ice NULL
checks after we relock the RTP instance and have to do something with the
ICE structure.

ASTERISK-26835 #close
ASTERISK-26853 #close

Change-Id: I780b39ec935dcefcce880d50c1a7261744f1d1b4
2017-04-19 10:46:41 -05:00
Sean Bright dafcd97a77 build: Update config.guess and config.sub
Change-Id: Id078a1df07a771808775e1053cdfe1d99c8fb172
2017-04-19 09:39:00 -04:00
Joshua Colp f9de4b5de9 Merge "format_wav: Read 16khz wav samples properly" into 13 2017-04-19 08:38:41 -05:00
Joshua Colp 69bebd8f1a Merge "format_ogg_vorbis: Clear ogg/vorbis data structures on close" into 13 2017-04-19 08:37:56 -05:00
Joshua Colp 441a75daea Merge "Revert "bridging: Ensure successful T.38 negotation"" into 13 2017-04-19 08:37:04 -05:00
Sean Bright 9bbfa6fda1 format_wav: Read 16khz wav samples properly
When opening a PCM wave file for reading, we aren't tracking the
frequency of the opened file, so we treat 16khz files as 8khz and do
half reads.

This patch also cleans up some of the data types and an unnecessarily
complex `if` expression.

ASTERISK-26613 #close
Reported by: Vitaly K

Change-Id: I05f8b263058dc573ea8ffe0c62e7964506e11815
2017-04-17 15:50:43 -04:00
George Joseph 4ccaffe644 make ari-stubs so doc periodic jobs can run
The periodic doc job does a make ari-stubs and checks that
there are no changes before generating the docs.  Since I changed
the mustache template (and the generated code directly) recently
and forgot to regenerate the stubs, the doc job thinks they're out
of date.

Change-Id: Ibd4bc649556615ff714d44534c45b6c2f6aa449d
2017-04-16 18:54:52 -06:00
Sean Bright 90c630aaa1 format_ogg_vorbis: Clear ogg/vorbis data structures on close
On filestream close, we need to clear out the ogg & vorbis data
structures to prevent a memory leak.

ASTERISK-26169 #close
Reported by: Ivan Myalkin

Change-Id: Iee94c5a5d5bdafbf8b181c5c064d15d90ace8274
2017-04-15 12:14:48 -05:00
Richard Mudgett 9084c85cb1 Revert "bridging: Ensure successful T.38 negotation"
This reverts commit 3e7c396a51.

Change-Id: I61d49d563babff788bb557345729b200d116bd88
2017-04-14 17:31:45 -05:00
Sean Bright 357d1fbdcc res_stun_monitor: Don't fail to load if DNS resolution fails
res_stun_monitor will fail to load if DNS resolution of the STUN server
fails. Instead, we continue without the STUN server being resolved and
we will re-attempt the resolution on the STUN refresh interval.

ASTERISK-21856 #close
Reported by: Jeremy Kister

Change-Id: I6334c54a1cc798f8a836b4b47948e0bb4ef59254
2017-04-14 17:50:56 -04:00
Sean Bright ac15ebc379 format_pcm: Track actual header size of .au files
Sun's Au file format has a minimum data offset 24 bytes, but this
offset is encoded in each .au file. Instead of assuming the minimum,
read the actual value and store it for later use.

ASTERISK-20984 #close
Reported by: Roman S.
Patches:
	asterisk-1.8.20.0-au-clicks-2.diff (license #6474) patch
	uploaded by Roman S.

Change-Id: I524022fb19ff2fd5af2cc2d669d27a780ab2057c
2017-04-14 15:43:12 -04:00
Joshua Colp 5e2a8ef94a Merge "modules: change module LOAD_FAILUREs to LOAD_DECLINES" into 13 2017-04-13 05:45:46 -05:00
zuul a22de46a06 Merge "strings.h: Avoid overflows in the string hash functions" into 13 2017-04-12 18:10:01 -05:00
Joshua Colp ec051345f2 Merge "bridging: Ensure successful T.38 negotation" into 13 2017-04-12 17:38:55 -05:00
George Joseph f882ca2572 modules: change module LOAD_FAILUREs to LOAD_DECLINES
In all non-pbx modules, AST_MODULE_LOAD_FAILURE has been changed
to AST_MODULE_LOAD_DECLINE.  This prevents asterisk from exiting
if a module can't be loaded.  If the user wishes to retain the
FAILURE behavior for a specific module, they can use the "require"
or "preload-require" keyword in modules.conf.

A new API was added to logger: ast_is_logger_initialized().  This
allows asterisk.c/check_init() to print to the error log once the
logger subsystem is ready instead of just to stdout.  If something
does fail before the logger is initialized, we now print to stderr
instead of stdout.

Change-Id: I5f4b50623d9b5a6cb7c5624a8c5c1274c13b2b25
2017-04-12 16:46:22 -05:00
zuul 2e9f186c17 Merge "res_rtp_asterisk.c: Add stun_blacklist option" into 13 2017-04-12 09:01:50 -05:00
Joshua Colp fdc63152c3 Merge changes from topics 'ASTERISK-26890', 'ASTERISK-26851' into 13
* changes:
  stun.c: Fix ast_stun_request() erratic timeout.
  sorcery.c: Speed up ast_sorcery_retrieve_by_id()
  res_pjsip: Fix pointer use after unref.
  res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member.
2017-04-12 04:55:12 -05:00
Richard Mudgett cd80af508e res_rtp_asterisk.c: Add stun_blacklist option
Added the stun_blacklist option to rtp.conf.  Some multihomed servers have
IP interfaces that cannot reach the STUN server specified by stunaddr.
Blacklist those interface subnets from trying to send a STUN packet to
find the external IP address.  Attempting to send the STUN packet
needlessly delays processing incoming and outgoing SIP INVITEs because we
will wait for a response that can never come until we give up on the
response.  Multiple subnets may be listed.

ASTERISK-26890 #close

Change-Id: I3ff4f729e787f00c3e6e670fe6435acce38be342
2017-04-11 13:03:57 -05:00
Richard Mudgett f8219a2e12 stun.c: Fix ast_stun_request() erratic timeout.
If ast_stun_request() receives packets other than a STUN response then we
could conceivably never exit if we continue to receive packets with less
than three seconds between them.

* Fix poll timeout to keep track of the time when we sent the STUN
request.  We will now send a STUN request every three seconds regardless
of how many other packets we receive while waiting for a response until we
have completed three STUN request transmission cycles.

Change-Id: Ib606cb08585e06eb50877f67b8d3bd385a85c266
2017-04-11 13:03:57 -05:00
Richard Mudgett 19b82a8644 sorcery.c: Speed up ast_sorcery_retrieve_by_id()
Return early if ast_sorcery_retrieve_by_id() is not passed an id to find.
Also eliminated the RAII_VAR() usage in the function.

Change-Id: I871dbe162a301b5ced8b4393cec27180c7c6b218
2017-04-11 13:03:57 -05:00
Richard Mudgett aecf19e7d2 res_pjsip: Fix pointer use after unref.
Change-Id: I4b6e1b0070563eeaee223cb58326f1b962ed5bc1
2017-04-11 13:03:57 -05:00
Richard Mudgett 304f652cda res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member.
* create_rtp(): Eliminate use of deprecated transport struct member.  That
member and several others in the transport structure were deprecated
because of an infinite loop created when using realtime configuration.
See 2451d4e455

ASTERISK-26851

Change-Id: I0533aa13c9ce3c6cc394e0fd2b5bf1cd1b2ef3bc
2017-04-11 13:03:57 -05:00
Richard Mudgett bb8cd2add7 tcptls.c: Cleanup TCP/TLS listener thread on abnormal exit.
Temporarily running out of file descriptors should not terminate the
listener thread.  Otherwise, when there becomes more file descriptors
available, nothing is listening.

* Added EMFILE exception to abnormal thread exit.

* Added an abnormal TCP/TLS listener exit error message.

* Closed the TCP/TLS listener socket on abnormal exit so Asterisk does not
appear dead if something tries to connect to the socket.

ASTERISK-26903 #close

Change-Id: I10f2f784065136277f271159f0925927194581b5
2017-04-11 11:13:53 -05:00
Torrey Searle d8967ff2c0 strings.h: Avoid overflows in the string hash functions
On 2's compliment machines abs(INT_MIN) behavior is undefined and
results in a negative value still being returnd.  This results in
negative hash codes that can result in crashes.

ASTERISK-26528 #close

Change-Id: Idff550145ca2133792a61a2e212b4a3e82c6517b
2017-04-10 15:01:06 -05:00
Walter Doekes bbbd262ec0 samples: Undo removal of include from canonicalize-app-names commit.
This include was accidentally removed in changeset
Ia79aea64de89531362e993e34230c2044a70aa93. My bad.

Change-Id: I1d716c7f9590b4e97909fb8bca1f2ed9bd0e4082
2017-04-08 10:05:03 +02:00
zuul e8514129a6 Merge "pjproject_bundled: Crash on pj_ssl_get_info() while ioqueue_on_read_complete()." into 13 2017-04-07 15:55:40 -05:00
zuul b82f58d2bf Merge "pjsip: Add Alembic for PUBLISH support." into 13 2017-04-07 14:50:03 -05:00
zuul 293f9d39b7 Merge "samples: Canonicalize app names in extensions.conf.sample." into 13 2017-04-07 08:50:06 -05:00
Joshua Colp b3f4a6365e pjsip: Add Alembic for PUBLISH support.
This change adds database tables for the PUBLISH support so it
can be configured using realtime. A minor fix to the
res_pjsip_publish_asterisk module was done so that it read the
sorcery configuration from the correct section. Finally the
sample configuration files have been updated.

ASTERISK-26928

Change-Id: I81991ae5c75af98d247f7eacd1c0b0a763675952
2017-04-07 13:38:14 +00:00
Alexander Traud e0e5a337fd pjproject_bundled: Crash on pj_ssl_get_info() while ioqueue_on_read_complete().
When the Asterisk channel driver res_pjsip offers SIP-over-TLS, sometimes, not
reproducible, Asterisk crashed in pj_ssl_sock_get_info() because a NULL pointer
was read. This change avoids this crash.

ASTERISK-26927 #close

Change-Id: I24a6011b44d1426d159742ff4421cf806a52938b
2017-04-07 08:09:11 -05:00
Joshua Colp 09ec2dbbf3 Merge "chan_sip: Session Timers required but refused wrongly." into 13 2017-04-06 11:01:16 -05:00
Joshua Colp 0b00df55fc Merge "pjproject_bundled: Add 3 upstream patches" into 13 2017-04-06 10:49:16 -05:00
Torrey Searle 3e7c396a51 bridging: Ensure successful T.38 negotation
When a T.38 happens immediatly after call establishment, the control
frame can be lost because the other leg is not yet in the bridge.

This patch detects this case an makes sure T.38 negotation happens
when the 2nd leg is being made compatible with the negotating
first leg

ASTERISK-26923 #close

Change-Id: If334125ee61ed63550d242fc9efe7987e37e1d94
2017-04-06 16:23:51 +02:00
Joshua Colp 4b504544f6 Merge "sample_config: Add samples for pubsub to pjsip.conf.sample" into 13 2017-04-06 08:29:43 -05:00
Joshua Colp 1a35801994 Merge "Unused realtime MOH classes not purged on 'moh reload'" into 13 2017-04-06 04:31:33 -05:00
Joshua Colp f80b7f7014 Merge "res_pjsip_session: Allow BYE to be sent on disconnected session." into 13 2017-04-05 17:50:28 -05:00
George Joseph 4e6e069491 pjproject_bundled: Add 3 upstream patches
0035-r5572-svn-backport-dialog-transaction-deadlock.patch
0036-r5573-svn-backport-ua-pjsua-transaction-deadlock.patch
0037-r5576-svn-backport-session-timer-crash.patch

Also removed the progress bar from wget download to stdout.

ASTERISK-26905 #close
Reported-by: Ross Beer

Change-Id: I268fb3cf71a3bb24283ff0d24bd8b03239d81256
2017-04-05 16:16:42 -06:00
George Joseph d2a33cdedc sample_config: Add samples for pubsub to pjsip.conf.sample
Added:
 * outbound-publish
 * resource_list
 * inbound-publication
 * asterisk-publication

Change-Id: I65043a896c35483f30a92d30b5b118359af7ba5a
2017-04-05 13:50:40 -06:00
Walter Doekes ab9d2fc86d samples: Canonicalize app names in extensions.conf.sample.
This takes care of warnings by ossobv/asterisklint.

Change-Id: Ia79aea64de89531362e993e34230c2044a70aa93
2017-04-05 16:10:42 +02:00
Richard Mudgett 6906765381 res_pjsip_sdp_rtp.c: Don't alter global addr variable.
* create_rtp(): Fix unexpected alteration of global address_rtp if a
transport is bound to an address.

* create_rtp(): Fix use of uninitialized memory if the endpoint RTP media
address is invalid or the transport has an invalid address.

ASTERISK-26851

Change-Id: Icde42e65164a88913cb5c2601b285eebcff397b7
2017-04-04 10:26:11 -05:00
Corey Farrell 68bde0f07d CDR: Protect from data overflow in ast_cdr_setuserfield.
ast_cdr_setuserfield wrote to a fixed length field using strcpy. This could
result in a buffer overrun when called from chan_sip or func_cdr. This patch
adds a maximum bytes written to the field by using ast_copy_string instead.

ASTERISK-26897 #close
patches:
  0001-CDR-Protect-from-data-overflow-in-ast_cdr_setuserfie.patch submitted
    by Corey Farrell (license #5909)

Change-Id: Ib23ca77e9b9e2803a450e1206af45df2d2fdf65c
2017-04-04 10:12:27 +00:00
Daniel Journo 70e5a2655d Unused realtime MOH classes not purged on 'moh reload'
Purge Realtime MOH classes on 'moh reload' even when musiconhold.conf
hasn't changed.

ASTERISK-25974 #close

Change-Id: I42c78ea76528473a656f204595956c9eedcf3246
2017-04-03 23:29:50 +01:00
Richard Mudgett 27b556778d res_pjsip: Fix transport ref leak.
We were leaking a transport ref in multihomed_on_rx_message() which
resulted in the FRACK about excessive ref counts.

ASTERISK-26916 #close

Change-Id: I7a96658a9614a060565bb9ad51cb1c9c11ee145f
2017-04-03 14:02:23 -05:00
Alexander Traud 94bd529f9e chan_sip: Session Timers required but refused wrongly.
SIP user-agents indicate which protocol extensions are allowed in headers
like Supported and Required. Such protocol extensions are Session Timers
(RFC 4028) for example. Session Timers are supported since Mantis-10665.
Since ASTERISK-21721, not only the first but multiple Supported/Required
headers in a message are parsed. In that change, an existing variable was
re-used within a newly added do-loop. Currently, at the end of that loop,
that variable is an empty string always. Previously, that variable was used
within log output. However, the log output was not changed.

ASTERISK-26915 #close

Change-Id: I09315f31b4d78fb214bb2a9fb6c0f5e143eae990
2017-04-03 02:43:51 -05:00
zuul 365db26535 Merge "Forward declare 'struct ast_json' in asterisk.h" into 13 2017-04-01 08:20:50 -05:00
Joshua Colp bca9685d39 res_pjsip_session: Allow BYE to be sent on disconnected session.
It is perfectly acceptable for a BYE to be sent on a disconnected
session. This occurs when we respond to a challenge to the BYE
for authentication credentials.

ASTERISK-26363

Change-Id: I6ef0ddece812fea6665a1dd2549ef44fb9d90045
2017-04-01 10:58:41 +00:00
George Joseph 01c1e60a4f Merge "build: Fix deb build issues with fakeroot" into 13 2017-03-31 08:19:53 -05:00
zuul eb03c75f58 Merge "cdr_pgsql: Fix buffer overflow calling libpq" into 13 2017-03-31 07:05:27 -05:00
Corey Farrell c701550803 Forward declare 'struct ast_json' in asterisk.h
The ast_json structure is used in many Asterisk headers and is often the
only part of json.h used.  This adds a forward declaration to asterisk.h
and removes the include of json.h from many headers.  The declaration
has been left in endpoints.h and stasis.h to avoid problems with source
files that use ast_json functions without directly including json.h.

ari.h continues to include json.h as it uses enum
ast_json_encoding_format.

Change-Id: Id766aabce6bed56626d27e8d29f559b5e687b769
2017-03-30 22:54:01 -05:00
zuul f040eb0502 Merge "CEL: Remove header declarations of non-existant functions." into 13 2017-03-30 18:39:19 -05:00
Sean Bright 754e99d517 cdr_pgsql: Fix buffer overflow calling libpq
Implement the same buffer size checking done in cel_pgsql.

ASTERISK-26896 #close
Reported by: twisted

Change-Id: Iaacfa1f1de7cb1e9414d121850d2d8c2888f3f48
2017-03-30 18:45:18 -04:00
George Joseph 0667febf3d Merge "res_pjsip_config_wizard: Add 2 new parameters to help with proxy config" into 13 2017-03-30 17:16:47 -05:00
Walter Doekes 7954b39a50 build: Fix deb build issues with fakeroot
If DESTDIR is set, don't call ldconfig. Assume that DESTDIR is used to
create a binary archive. The ldconfig call should be delegated to the
archive postinst script. This fixes the case where fakeroot wraps 'make
install' causing $EUID to be 0 even though it doesn't have permission to
call ldconfig.

The previous logic in configure.ac to detect and correct libdir
has been removed as it was not completely accurate.  CentOS 64-bit
users should again specifiy --libdir=/usr/lib64 when configuring
to prevent install to /usr/lib.

Updated Makefile:check-old-libdir to check for orphans in
lib64 when installing to lib as well as orphans in lib when installing
to lib64.

Updated Makefile and main/Makefile uninstall targets to remove the
orphans using the new logic.

ASTERISK-26705

Change-Id: I51739d4a03e60bff38be719b8d2ead0007afdd51
2017-03-30 16:09:40 -06:00
Sean Bright c9648f4690 astobj2: Prevent potential deadlocks with ao2_global_obj_release
The ao2_global_obj_release() function holds an exclusive lock on the
global object while it is being dereferenced. Any destructors that
run during this time that call ao2_global_obj_ref() will deadlock
because a read lock is required.

Instead, we make the global object inaccessible inside of the write
lock and only dereference it once we have released the lock. This
allows the affected destructors to fail gracefully.

While this doesn't completely solve the referenced issue (the error
message about not being able to create an IQ continues to be shown)
it does solve the backtrace spew that accompanied it.

ASTERISK-21009 #close
Reported by: Marcello Ceschia

Change-Id: Idf40ae136b5070dba22cb576ea8414fbc9939385
2017-03-30 13:49:49 -04:00
Joshua Colp 1d1309b1ed Revert "Update for 13.15.0-rc1"
This reverts commit 552cf009c0.

Change-Id: Ie345bea481261b761c44079e9472622040fda302
2017-03-30 17:01:49 +00:00
Corey Farrell 3c23ebdef4 CEL: Remove header declarations of non-existant functions.
ast_cel_alloc and ast_cel_destroy do not exist in code, remove them from
the headers.

Change-Id: I99ce848e2e109e7d61771559f559b9e57973e45c
2017-03-30 11:18:38 -04:00
Joshua Colp e52ced02d8 Merge "cel_pgsql.c: Fix buffer overflow calling libpq" into 13 2017-03-30 05:11:14 -05:00
Joshua Colp 5d3db15d2e Merge "srtp: Allow zero as tag value for a sRTP Crypto Suite." into 13 2017-03-29 19:00:47 -05:00
George Joseph 8e0d8cdf08 Merge "Add DTLS sanity check." into 13 2017-03-29 14:39:15 -05:00
zuul 354c69699c Merge "core: Remove embedded module support" into 13 2017-03-29 12:46:04 -05:00
Joshua Colp de2a202e56 Merge "alembic: Turn off execute bit on non-executable python scripts" into 13 2017-03-29 10:15:36 -05:00
Alexander Traud ef19db9261 srtp: Allow zero as tag value for a sRTP Crypto Suite.
ASTERISK-25490 #close

Change-Id: I1c5fc0942c33c96d62b24203aad0f1e1a1a0131f
2017-03-29 15:27:01 +02:00
Joshua Colp 95c66234ba Merge "res_musiconhold: Don't chdir() when scanning MoH files" into 13 2017-03-29 08:15:00 -05:00
Joshua Colp b0a1e40542 Merge changes from topic 'ASTERISK-24712' into 13
* changes:
  res_xmpp: Use incremental backoff when a read error occurs
  res_xmpp: Try to provide useful errors messages from OpenSSL
  res_xmpp: Correctly check return value of SSL_connect
2017-03-28 18:04:13 -05:00
zuul 92517fc6a7 Merge "res_xmpp: Fix ref counting issue" into 13 2017-03-28 17:58:58 -05:00
George Joseph a827892ff7 res_pjsip_config_wizard: Add 2 new parameters to help with proxy config
Two new parameters have been added to the pjsip config wizard.

 * Setting 'sends_line_with_registrations' to true will cause the wizard
   to skip the creation of an identify object to match incoming request
   to the endpoint and instead add the line and endpoint parameters to
   the outbound registration object.

 * Setting 'outbound_proxy' is a shortcut for adding individual
   endpoint/outbound_proxy, aor/outbound_proxy and
   registration/outbound_proxy parameters.

Change-Id: I678e5f80765734c056620528a6d40d82736ceeb0
2017-03-28 15:44:07 -06:00
Sean Bright 864dda07f3 alembic: Turn off execute bit on non-executable python scripts
Change-Id: I744c986da4a38aeff8c00837eb89de7841fbc86c
2017-03-28 10:29:25 -04:00
Richard Mudgett a9529cbb21 Add DTLS sanity check.
Change-Id: Ib32612cf6c7ce9213a11b9cba82f630f8cd3564b
2017-03-27 16:42:09 -05:00
Josh Roberson bb68f57a03 cel_pgsql.c: Fix buffer overflow calling libpq
PQEscapeStringConn() expects the buffer passed in to be an
adequitely sized buffer to write out the escaped SQL value string
into.  It is possible, for large values (such as large values to
Dial with a lot of devices) to have more than our 512+1 byte
allocation and thus cause libpq to create a buffer overrun.

glibc will nicely ABRT asterisk for you, citing a stack smash.

Let's only allocate it to be as large as needed:
If we have a value, then (strlen(value) * 2) + 1 (as recommended
by libpq), and if we have none, just one byte to hold our null
will do.

ASTERISK-26896 #close

Change-Id: If611c734292618ed68dde17816d09dd16667dea2
2017-03-27 15:51:44 -04:00
Sean Bright 79a2c26c03 core: Remove embedded module support
This has not worked for some time and is no longer actively maintained.

Change-Id: I5110b0db69c152761b58fa025cb0a53b0e544d99
2017-03-27 10:36:23 -04:00
Sean Bright 2c28f7a922 res_musiconhold: Document the 'format' option
ASTERISK-26086 #close
Reported by: Jens Bürger

Change-Id: I6aab666c0bf01fd0c64d7a5bcb22fa7f5d41335e
2017-03-27 10:35:15 -04:00
Sean Bright 61fd70c250 res_musiconhold: Don't chdir() when scanning MoH files
There doesn't appear to be any reason that we are chdir'ing in
moh_scan_files, and in the event of an Asterisk crash, the core files
may not get written because we have changed into a read-only directory.

ASTERISK-23996 #close
Reported by: Walter Doekes

Change-Id: Iac806dce01b3335963fbd62d4b4da9a65c614354
2017-03-27 09:58:17 -04:00
Sean Bright 73bb08fd6a res_xmpp: Use incremental backoff when a read error occurs
If a read error occurs, we immediately attempt a reconnect without any
delay. Instead, let's sleep and backoff up to 60 seconds before we try
again.

ASTERISK-24712 #close
Reported by: Matthias Urlichs

Change-Id: I6fe10ef4734837727437beab715e336777f13f48
2017-03-25 12:01:28 -04:00
Sean Bright 55693383e2 res_xmpp: Fix ref counting issue
The only remaining reference to the endpoint is in the endpoints
container, and because it is unlinked in ast_endpoint_shutdown, we don't
have to explicitly cleanup the endpoint ourselves.

Change-Id: I912a2692e52d3e2ed445b32d8ae3f9004bc2f2e8
2017-03-25 12:01:28 -04:00
Sean Bright 1966265562 res_xmpp: Try to provide useful errors messages from OpenSSL
If any errors occur during the TLS connection setup, we currently dump a
fairly generic error message. So instead we try to pull in something
useful from OpenSSL to report instead.

ASTERISK-24712
Reported by: Matthias Urlichs

Change-Id: I288500991a9681f447d92913b11fedaf426087f4
2017-03-25 12:01:28 -04:00
Sean Bright 03b99ae3d2 res_xmpp: Correctly check return value of SSL_connect
SSL_connect returns non-zero for both success and some error conditions
so simply negating is inadequate.

Change-Id: Ifbf882896e598703b6c615407fa456d3199f95b1
2017-03-25 12:01:28 -04:00
zuul 39fff2ebf9 Merge "res_pjsip_sdp_rtp: Set hangup cause for RTP timeouts" into 13 2017-03-24 19:21:51 -05:00
Joshua Colp ddbff36c12 Merge "res_xmpp: Correct implementation of JABBER_STATUS & JabberStatus" into 13 2017-03-24 17:45:52 -05:00
zuul 30f5409eef Merge "cdr: Allow setting of user field from 'h' extension" into 13 2017-03-24 17:45:02 -05:00
zuul 1fccedf0fd Merge "pjproject_bundled: raise timeout value used when downloading" into 13 2017-03-24 15:42:42 -05:00
zuul 2f2811c2dc Merge "res_xmpp: Don't crash when trying to send a message without a connection" into 13 2017-03-24 12:04:38 -05:00
zuul b7b171c06f Merge "res_xmpp: Include client name in connection related error messages" into 13 2017-03-24 12:01:22 -05:00
Sean Bright d9d2beba1c res_pjsip_sdp_rtp: Set hangup cause for RTP timeouts
chan_sip sets the hangup cause code to AST_CAUSE_REQUESTED_CHAN_UNAVAIL
(44) when a channel is hung up due to an RTP timeout. So do the same
when it happens with PJSIP for parity.

Change-Id: I3546ebbde6460c22a27c9da1bf321711b5961ab8
2017-03-24 12:29:10 -04:00
zuul 68d523a1af Merge "audiohook.c: Lost RTP packets lead to out-of-sync MixMonitor." into 13 2017-03-24 06:59:30 -05:00
Kevin Harwell 552cf009c0 Update for 13.15.0-rc1 2017-03-23 15:33:40 -05:00
Kevin Harwell f1b34e6eb4 AMI: Updated version
Updated the AMI version for the following reason (see CHANGES for more details):

The 'PJSIPShowEndpoint' command's response event of 'IdentifyDetail' now
contains a new optional parameter, 'MatchHeader'.

Change-Id: I9aeac4decc89f9b464b3f026e97c7ef1acc79242
2017-03-23 14:24:42 -05:00
Kevin Harwell e6aeeabddf pjproject_bundled: raise timeout value used when downloading
After configuring Asterisk with '--with-pjproject-bundled' the configure/build
process attempts to download pjproject from its download site. Currently, a
timeout of 10 seconds is used that will stop the download process if pjproject
has not been fully downloaded in that time. For some systems this was not enough
time and the process was timing out too early.

This patch raises the download timeout value to '60'. Also, this patch fixes
another bug where the DOWNLOAD_TIMEOUT variable was not being properly exported
due to a naming error. DOWNLOAD_MAX_TIMEOUT is now properly renamed to
DOWNLOAD_TIMEOUT.

ASTERISK-26814 #close

Change-Id: Ia56e4e8a3d39db76bc8a1852b2cf07ec10b39842
2017-03-23 13:14:59 -05:00
Sean Bright 0939a19cff res_xmpp: Correct implementation of JABBER_STATUS & JabberStatus
The documentation for JABBER_STATUS (and the deprecated JabberStatus
app) indicate that a return value of 7 indicates that the specified
buddy was not in the roster. It also indicates that you can specify a
"bare" JID (one without a resource). Unfortunately the actual behavior
does not match the documented behavior.

Assuming that our roster includes the buddy online and available
"valid@example.org/Valid" and does *not* include the buddy
"invalid@example.org", the JABBER_STATUS() function returns the
following before this patch:

+------------------------------+------------+--------------------------+
| Buddy                        | Status     | Result                   |
+------------------------------+------------+--------------------------+
| valid@example.org            |  Online    |  7 (Not in roster)       |
| valid@example.org/Valid      |  Online    |  1 (Online)              |
| valid@example.org/Invalid    |  N/A       |  7 (Not in roster)       |
| invalid@example.org          |  N/A       |  Error logged, no return |
| invalid@example.org/Valid    |  N/A       |  Error logged, no return |
+------------------------------+------------+--------------------------+

And after this patch:

+------------------------------+------------+--------------------------+
| Buddy                        | Status     | Result                   |
+------------------------------+------------+--------------------------+
| valid@example.org            |  Online    |  1 (Online)              |
| valid@example.org/Valid      |  Online    |  1 (Online)              |
| valid@example.org/Invalid    |  N/A       |  6 (Offline)             |
| invalid@example.org          |  N/A       |  7 (Not in roster)       |
| invalid@example.org/Valid    |  N/A       |  7 (Not in roster)       |
+------------------------------+------------+--------------------------+

This brings the behavior in line with the documentation.

ASTERISK-23510 #close
Reported by: Anthony Critelli

Change-Id: I9c3241035363ef4a6bdc21fabfd8ffcd9ec657bf
2017-03-23 11:44:48 -04:00
Sean Bright a487f6fb97 res_xmpp: Don't crash when trying to send a message without a connection
If we never establish a connection to our Jabber server, iksemel never sets up
its internal transport pointer, so attempting to send a message dereferences a
NULL pointer and causes a crash.

ASTERISK-21855 #close
Reported by: Jeremy Kister

Change-Id: I204a568894e4a53ab929783ecc594a000f04d79c
2017-03-23 10:54:20 -04:00
Sean Bright 90fb1fca41 res_xmpp: Include client name in connection related error messages
ASTERISK-25622 #close
Reported by: Sean Darcy

Change-Id: I8472cb7bfb58d411a3cfbd482da98cae2d94d1e9
2017-03-23 10:54:20 -04:00
zuul 4fcb8d807e Merge "CHANNEL(callid): Give dialplan access to the callid." into 13 2017-03-22 17:26:04 -05:00
zuul b79e67ba47 Merge "res_pjsip_session: Enable RFC3578 overlap dialing support." into 13 2017-03-22 15:48:53 -05:00
zuul 5f75cc8279 Merge "res_pjsip_messaging: Check URI type before dereferencing" into 13 2017-03-22 12:36:51 -05:00
zuul d7c52125e9 Merge "Revert "app_queue: Handle the caller being redirected out of a queue bridge"" into 13 2017-03-22 11:04:06 -05:00
Joshua Colp f762dfaf2a Merge "app_queue: Member stuck as pending after forwarding previous call from queue" into 13 2017-03-22 08:33:26 -05:00
Sebastian Gutierrez e196190f11 cdr: Allow setting of user field from 'h' extension
The CDR code previously did not allow the user field to be set
from the 'h' extension in the dialplan. This change removes that
limitation and allows it to be set.

ASTERISK-26818

Change-Id: I0fed8a79b5e408bac4e30542b8f33a61c5ed9aa6
2017-03-22 07:32:29 -06:00
zuul 14a9a6fc09 Merge "pjsip: prevent memory corruption on creation of xml bodies" into 13 2017-03-22 07:06:16 -05:00
Richard Begg 398e5ec16c res_pjsip_session: Enable RFC3578 overlap dialing support.
Support for RFC3578 overlap dialling (i.e. 484 Response to partially matched
destinations) as currently provided by chan_sip is missing from res_pjsip.
This patch adds a new endpoint attribute (allow_overlap) [defaults to yes]
which when set to yes enables 484 responses to partial destination
matches rather than the current 404.

ASTERISK-26864

Change-Id: Iea444da3ee7c7d4f1fde1d01d138a3d7b0fe40f6
2017-03-22 11:25:07 +00:00
zuul d7ba743329 Merge "autochan/mixmonitor/chanspy: Fix unsafe channel locking and references." into 13 2017-03-21 19:47:25 -05:00
zuul 72ae513f15 Merge "res_hep: Capture actual transport type in use" into 13 2017-03-21 19:47:20 -05:00
Sean Bright 218f618095 res_hep: Capture actual transport type in use
Rather than hard-coding UDP, allow consumers of the HEP API to specify
which protocol is in use. Update the PJSIP provider to pass in the
current protocol type.

ASTERISK-26850 #close

Change-Id: I54bbb0a001cfe4c6a87ad4b6f2014af233349978
2017-03-21 15:40:08 -04:00
Sean Bright 1c8b81a2a4 Revert "app_queue: Handle the caller being redirected out of a queue bridge"
This reverts commit 163e9e53dc.

Change-Id: Ief28479c77a298879dfe2c56be7ee92dc465da4b
2017-03-21 10:59:06 -04:00
Sean Bright b3cc20799b res_pjsip_messaging: Check URI type before dereferencing
We aren't validating that the URI we just parsed is a SIP/SIPS one before
trying to access the user, host, and port members of a possibly uninitialized
structure.

Also update the MessageSend documentation to indicate what 'from' formats are
accepted.

ASTERISK-26484 #close
Reported by: Vinod Dharashive

Change-Id: I476b5cc5f18a7713d0ee945374f2a1c164857d30
2017-03-21 10:44:30 -04:00
Joshua Elson 91c97b5da5 pjsip: prevent memory corruption on creation of xml bodies
ASTERISK-26776 #close

Change-Id: I884b6f4e8233a355d0be687ec78d41bc0e4d3fd2
2017-03-21 08:26:04 -06:00
Sean Bright 7f34c11b6a bridge_softmix: Ignore non-voice frames from translator
Some codecs - codec_speex specifically - take voice frames and return
other types of frames, like CNG. If we subsequently treat those as
voice frames, we'll run into trouble when destroying the frame because
of the requirement that each voice frame have an associated format.

ASTERISK-26880 #close
Reported by: Kirsty Tyerman

Change-Id: I43f8450c48fb276ad8b99db8512be82949c1ca7c
2017-03-20 17:27:24 -04:00
zuul fdea369852 Merge "res/res_pjsip_session: Only check localnet if it is defined" into 13 2017-03-20 14:38:35 -05:00
Aaron An d5b480afca audiohook.c: Lost RTP packets lead to out-of-sync MixMonitor.
Fixed a bug in function "ast_audiohook_write_frame" that checked the
variable other_factory_samples and only flushed the factories, so they
would be in sync, when other_factory_samples > 0. When there is not any
rtp incoming the variable other_factory_samples will be 0, and although
the result of "our_factory_ms - other_factory_ms" may be very large,
this led to the record file not syncing.

ASTERISK-26875 #close
Reported-by: Aaron An
Tested-by: Aaron An

Change-Id: Ia4d890fb8fc1636a7188502bab35f555685aea22
2017-03-20 13:02:27 -06:00
Joshua Colp 9613391868 Merge "thread safety: Don't use getprotobyname()" into 13 2017-03-20 11:51:38 -05:00
Sean Bright 38cebc73a3 thread safety: Don't use getprotobyname()
POSIX does not require getprotobyname() to be thread safe and some
implementations use static memory which causes issues when multiple
threads are used.

Further, our usage of it today is just to ultimately get IPPROTO_TCP
for calls to setsockopt(). So instead we just use IPPROTO_TCP directly.

Change-Id: I2e14e58674808f7ce99b2f5e900d0f90d0d8da48
2017-03-20 08:51:47 -04:00
Sean Bright 265455bc2d res_rtp_asterisk: Pass correct data length to ast_rtcp_interpret
We are currently passing in the capacity of the read buffer instead of the
number of bytes that we actually read off the wire.

Change-Id: I60465049727d955c7f9a5e529e6f2aaff04cda36
2017-03-19 14:27:29 -04:00
Joshua Colp baeabb82ea Merge "app_queue: Fix locking behavior in stasis message handlers" into 13 2017-03-18 05:38:32 -05:00
Joshua Colp 1b828e50fe Merge "chan_sip: Add rtcp-mux support" into 13 2017-03-18 05:37:49 -05:00
Joshua Colp 130af0ab80 Merge "res_rtp_asterisk: Fix crash when RTCP is not present when DTLS is stopped." into 13 2017-03-18 05:37:04 -05:00
Joshua Colp a2d29a7545 Merge "res_pjsip_asterisk.c: Fix compile error if libsrtp is not installed." into 13 2017-03-18 05:36:15 -05:00
Joshua Colp e76947bd88 Merge "app_confbridge: Fix ConfbridgeTalking AMI event description." into 13 2017-03-17 16:08:31 -05:00
Joshua Colp 6da1b60918 Merge "res_pjsip_sdp_rtp.c: Fix cut-n-paste error" into 13 2017-03-17 13:08:22 -05:00
Robert Mordec 76afb9e18a app_queue: Member stuck as pending after forwarding previous call from queue
Queue member will get stuck in pending_members if queue calls a device
that is different from the one observed for state changes.

This patch removes members from pending_members as a result of channel stasis
events such as blind or attended transfers and hangup.

ASTERISK-26862 #close

Change-Id: I8bf6df487b9bb35726c08049ff25cdad5e357727
2017-03-17 09:58:17 -06:00
Richard Mudgett 60b372a883 CHANNEL(callid): Give dialplan access to the callid.
* Added CHANNEL(callid) to retrieve the call identifier log tag associated
with the channel.  Dialplan now has access to the call log search key
associated with the channel so it can be saved in case there is a problem
with the call.

ASTERISK-26878

Change-Id: I2c97ebd928b6f3c5bc80c5729e4d3c07f453049f
2017-03-17 10:50:17 -05:00
Sean Bright 9a57b24e17 app_queue: Fix locking behavior in stasis message handlers
The queue_stasis_data structure contains various mutable fields that require
appropriate locking. Specifically, the 'dying,' 'member_uniqueid,' and
'caller_uniqueid' fields need to be locked when read from or written to.

Change-Id: I246b7dbff8447acc957a1299f6ad0ebd0fd39088
2017-03-17 10:20:30 -04:00
Joshua Colp 161fe61a0f Merge "res_pjsip_sdp_rtp: RTP instance does not use same IP as explicit transport" into 13 2017-03-17 08:58:42 -05:00
Sean Bright 8721d0bf1b chan_sip: Add rtcp-mux support
ASTERISK-26846 #close

Change-Id: I541a1602ff55ab73684e9f8002edb9e0e745d639
2017-03-17 09:35:21 -04:00
Richard Mudgett 792171ea9e app_confbridge: Fix ConfbridgeTalking AMI event description.
Thanks to Chris Howard for pointing this out on the wiki.

Change-Id: I18e56de09a70e736b5d04719d45ef29cf0636705
2017-03-16 16:50:17 -05:00
Richard Mudgett 047fb7f11e res_pjsip_asterisk.c: Fix compile error if libsrtp is not installed.
struct ast_rtcp does not define the dtls member if SRTP is not enabled.

ASTERISK-26732

Change-Id: Id15ea212e04490e012f2cf4a56818b4dd948875e
2017-03-16 16:37:42 -05:00
Richard Mudgett a75f02c089 res_pjsip_sdp_rtp.c: Fix cut-n-paste error
We were inadvertenly referencing the cos_video option to determine if we
should set the tos_audio and cos_audio value on the RTP instance.

Change-Id: Ia7964f486801d39dc6f5dae570baff079e1595b0
2017-03-16 15:46:00 -05:00
Matt Jordan 776ffd7724 res/res_pjsip_session: Only check localnet if it is defined
If local_net is not defined on a transport, transport_state->localnet
will be NULL. ast_apply_ha will, be default, return AST_SENSE_ALLOW in
this case, causing the external_media_address, if set, to be skipped.

This patch causes us to only check if we are sending within a network if
local_net is defined.

ASTERISK-26879 #close

Change-Id: Ib661c31a954cabc9c99f1f25c9c9a5c5b82cbbfb
2017-03-16 14:03:32 -06:00
Richard Begg 139bc3495f res_pjsip_sdp_rtp: RTP instance does not use same IP as explicit transport
Currently a wildcard address is used for the local RTP socket, which
will not always result in the same address as used by the SIP socket
(e.g. if explicit transport addresses are configured).
Use the transport's host address when binding new local RTP sockets if
available.

ASTERISK-26851

Change-Id: I098c29c9d1f79a4f970d72ba894874ac75954f1a
2017-03-17 06:13:47 +11:00
Joshua Colp 7ea7797e12 res_rtp_asterisk: Fix crash when RTCP is not present when DTLS is stopped.
This change removes an assumption that when DTLS is stopped
an RTCP session will be present on the RTP session. This is not
always the case.

ASTERISK-26732

Change-Id: Ib9f7c09ce0b005efe362dbcc8795202b18f94611
2017-03-16 14:07:55 +00:00
George Joseph 9b756662a8 res_pjsip: Symmetric transports
A new transport parameter 'symmetric_transport' has been added.

When a request from a dynamic contact comes in on a transport with
this option set to 'yes', the transport name will be saved and used
for subsequent outgoing requests like OPTIONS, NOTIFY and INVITE.
It's saved as a contact uri parameter named 'x-ast-txp' and will
display with the contact uri in CLI, AMI, and ARI output.  On the
outgoing request, if a transport wasn't explicitly set on the
endpoint AND the request URI is not a hostname, the saved transport
will be used and the 'x-ast-txp' parameter stripped from the
outgoing packet.

* config_transport was modified to accept and store the new parameter.

* config_transport/transport_apply was updated to store the transport
  name in the pjsip_transport->info field using the pjsip_transport->pool
  on UDP transports.

* A 'multihomed_on_rx_message' function was added to
  pjsip_message_ip_updater that, for incoming requests, retrieves the
  transport name from pjsip_transport->info and retrieves the transport.
  If transport->symmetric_transport is set, an 'x-ast-txp' uri parameter
  containing the transport name is added to the incoming Contact header.

* An 'ast_sip_get_transport_name' function was added to res_pjsip.
  It takes an ast_sip_endpoint and a pjsip_sip_uri and returns a
  transport name if endpoint->transport is set or if there's an
  'x-ast-txp' parameter on the uri and the uri host is an ipv4 or
  ipv6 address.  Otherwise it returns NULL.

* An 'ast_sip_dlg_set_transport' function was added to res_pjsip
  which takes an ast_sip_endpoint, a pjsip_dialog, and an optional
  pjsip_tpselector.  It calls ast_sip_get_transport_name() and if
  a non-NULL is returned, sets the selector and sets the transport
  on the dialog.  If a selector was passed in, it's updated.

* res_pjsip/ast_sip_create_dialog_uac and ast_sip_create_dialog_uas
  were modified to call ast_sip_dlg_set_transport() instead of their
  original logic.

* res_pjsip/create_out_of_dialog_request was modified to call
  ast_sip_get_transport_name() and pjsip_tx_data_set_transport()
  instead of its original logic.

* Existing transport logic was removed from endpt_send_request
  since that can only be called after a create_out_of_dialog_request.

* res_pjsip/ast_sip_create_rdata was converted to a wrapper around
  a new 'ast_sip_create_rdata_with_contact' function which allows
  a contact_uri to be specified in addition to the existing
  parameters.  (See below)

* res_pjsip_pubsub/internal_pjsip_evsub_send_request was eliminated
  since all it did was transport selection and that is now done in
  ast_sip_create_dialog_uac and ast_sip_create_dialog_uas.

* 'contact_uri' was added to subscription_persistence.  This was
  necessary because although the parsed rdata contact header has the
  x-ast-txp parameter added (if appropriate),
  subscription_persistence_update stores the raw packet which
  doesn't have it.  subscription_persistence_recreate was then
  updated to call ast_sip_create_rdata_with_contact with the
  persisted contact_uri so the recreated subscription has the
  correct transport info to send the NOTIFYs.

* res_pjsip_session/internal_pjsip_inv_send_msg was eliminated since
  all it did was transport selection and that is now done in
  ast_sip_create_dialog_uac.

* pjsip_message_ip_updater/multihomed_on_tx_message was updated
  to remove all traces of the x-ast-txp parameter from the
  outgoing headers.

NOTE:  This change does NOT modify the behavior of permanent
contacts specified on an aor.  To do so would require that the
permanent contact's contact uri be updated with the x-ast-txp
parameter and the aor sorcery object updated.  If we need to
persue this, we need to think about cloning permanent contacts into
the same store as the dynamic ones on an aor load so they can be
updated without disturbing the originally configured value.

You CAN add the x-ast-txp parameter to a permanent contact's uri
but it would be much simpler to just set endpoint->transport.

Change-Id: I4ee1f51473da32ca54b877cd158523efcef9655f
2017-03-16 08:03:26 -06:00
Joshua Colp 57be9cf8f9 Merge "Add rtcp-mux support" into 13 2017-03-16 07:39:51 -05:00
Joshua Colp 701b753a0b Merge "chan_iax2: Reload of iax peer results in loss of host address/port" into 13 2017-03-16 05:23:56 -05:00
zuul 9a5c028107 Merge "app_queue: Handle the caller being redirected out of a queue bridge" into 13 2017-03-15 21:18:31 -05:00
zuul 05ab662f70 Merge "pbx.c: Fix crash from malformed exten pattern." into 13 2017-03-15 19:56:10 -05:00
zuul bcc566b77e Merge "res/res_pjsip_refer: call xfer w/o extension" into 13 2017-03-15 18:54:27 -05:00
Richard Mudgett adad6020be autochan/mixmonitor/chanspy: Fix unsafe channel locking and references.
Dereferencing struct ast_autochan.chan without first calling
ast_autochan_channel_lock() is unsafe because the pointer could change at
any time due to a masquerade.  Unfortunately, ast_autochan_channel_lock()
itself uses struct ast_autochan.chan unsafely and can result in a deadlock
if the original channel happens to get destroyed after a masquerade in
addition to the pointer getting changed.

The problem is more likely to happen with v11 and earlier because
masquerades are used to optimize out local channels on those versions.
However, it could still happen on newer versions if the channel is
executing a dialplan application when the channel is transferred or
redirected.  In this situation a masquerade still must be used.

* Added a lock to struct ast_autochan to safely be able to use
ast_autochan.chan while trying to get the channel lock in
ast_autochan_channel_lock().  The locking order is the channel lock then
the autochan lock.  Locking in the other direction requires deadlock
avoidance.

* Fix unsafe ast_autochan.chan usages in app_mixmonitor.c.

* Fix unsafe ast_autochan.chan usages in app_chanspy.c.

* app_chanspy.c: Removed unused autochan parameter from next_channel().

ASTERISK-26867

Change-Id: Id29dd22bc0f369b44e23ca423d2f3657187cc592
2017-03-15 17:43:54 -05:00
zuul 481ed5c8f1 Merge "res_pjsip_endpoint_identifier_ip: Don't output error if no header_match." into 13 2017-03-15 16:27:43 -05:00
zuul aa5d108caa Merge "configure: Don't use the progress bar with curl when downloading to stdout" into 13 2017-03-15 12:45:21 -05:00
Mark Michelson 7bc69753bc Add rtcp-mux support
This commit adds support for RFC 5761: Multiplexing RTP Data and Control
Packets on a Single Port. Specifically, it enables the feature when
using chan_pjsip.

A new option, "rtcp_mux" has been added to endpoint configuration in
pjsip.conf. If set, then Asterisk will attempt to use rtcp-mux with
whatever it communicates with. Asterisk follows the rules set forth in
RFC 5761 with regards to falling back to standard RTCP behavior if the
far end does not indicate support for rtcp-mux.

The lion's share of the changes in this commit are in
res_rtp_asterisk.c. This is because it was pretty much hard wired to
have an RTP and an RTCP transport. The strategy used here is that when
rtcp-mux is enabled, the current RTCP transport and its trappings (such
as DTLS SSL session) are freed, and the RTCP session instead just
mooches off the RTP session. This leads to a lot of specialized if
statements throughout.

ASTERISK-26732 #close
Reported by Dan Jenkins

Change-Id: If46a93ba1282418d2803e3fd7869374da8b77ab5
2017-03-15 10:39:05 -05:00
Sean Bright 163e9e53dc app_queue: Handle the caller being redirected out of a queue bridge
A caller can leave the Queue() application after being bridged with a
member in a few ways:

  * Caller or member hangup
  * Caller is transferred somewhere else (blind or atx)
  * Caller is externally redirected elsewhere

The first 2 scenarios are currently handled by subscribing to stasis
messages, but the 3rd is not explicitly covered. If a caller is
redirected away from the Queue() application, the member who was last
bridged with that caller will remain in an "In use" state until the
caller hangs up.

This patch adds handling of the caller leaving the queue via
redirection. We monitor the caller-member bridge, and if the caller is
the one that leaves, we treat it the same as we would a caller hangup.

ASTERISK-26400 #close
Reported by: Etienne Lessard

Change-Id: Iba160907770de5a6c9efeffc9df5a13e9ea75334
2017-03-15 11:31:45 -04:00
Joshua Colp 7612601964 res_pjsip_endpoint_identifier_ip: Don't output error if no header_match.
This change ensures that if no header_match option is set on an
identify an error message is not output stating the option is set
to an invalid value.

ASTERISK-26863

Change-Id: I239bc6d2319dd3da24ba96a38d4d6e9b5526d62a
2017-03-15 13:44:43 +00:00
Joshua Colp 947f1ebf86 Merge "chan_pjsip: Don't assume a session will have a channel." into 13 2017-03-15 05:22:13 -05:00
Joshua Colp 0f87808414 Merge "menuselect: Add a new 'options' support type" into 13 2017-03-15 05:21:47 -05:00
Joshua Colp 475dfdb88c Merge "configs/samples/hep.conf.sample: Clarify how the HEP stack works" into 13 2017-03-15 05:21:02 -05:00
Joshua Colp 47ccdd45ca Merge "res_pjsip_endpoint_identifier_ip: Add an option to match requests by header" into 13 2017-03-15 05:20:38 -05:00
Joshua Colp 45d5c04fd0 Merge "main/stasis_cache: Demote the ERROR message when removing a nonexistent item" into 13 2017-03-15 05:19:46 -05:00
Torrey Searle 48447313b6 res/res_pjsip_refer: call xfer w/o extension
When transfering to a URI without an extension, ensure that the
s extension of the dialplan is entered

ASTERISK-26869 #close

Change-Id: I07403df66cf93f09e00a40ab5b41bfc6f72b1525
2017-03-15 10:38:41 +01:00
zuul 683321cba9 Merge "funcs/func_devstate: Remove new line in Device field of during module load" into 13 2017-03-15 01:01:04 -05:00
Joshua Colp 86c69ccdf7 Merge "res_pjsip_transport_websocket: Add support for IPv6." into 13 2017-03-14 18:50:18 -05:00
Richard Mudgett 9fd9b39e8b pbx.c: Fix crash from malformed exten pattern.
Forgetting to indicate an exten is a pattern can cause a crash if the
"pattern" has a character set range.  e.g., "9999[3-5]" The crash is due
to a buffer overwrite because the '-' exten eye-candy wasn't removed as
expected and overran the allocated space.

The buffer overwrite is fixed two ways in this patch.

1) Fix ext_strncpy() to distinguish between pattern and non-pattern
extens.  Now '-' characters are removed when they are eye-candy and not
when they are part of a pattern character set.  Since the function is
private to pbx.c, the return value now returns the number of bytes written
to the destination buffer instead of the strlen() of the final buffer so
the callers that care don't need to add one.

2) Fix callers to ext_strncpy() to supply the correct available buffer
size of the destination buffer.

ASTERISK-26668

Change-Id: I555d97411140e47e0522684062d174fbe32aa84a
2017-03-14 18:08:02 -05:00
Richard Begg 5389666d6f chan_iax2: Reload of iax peer results in loss of host address/port
When using a non-dynamic peer address, build_peer() invalidates the
peer address structure by setting the address family to unspecified.
However, if dnsmgr is enabled, the subsequent call to ast_dnsmgr_lookup()
will not amend the peer address if the cache is still valid, resulting
in peer connectivity failures.
To fix this, we call ast_dnsmgr_refresh() instead.

ASTERISK-26865

Change-Id: Id8a89a2f771ebbaf32255a35fe596a6dcb97a082
2017-03-15 08:51:41 +11:00
Matt Jordan 658d59c683 configure: Don't use the progress bar with curl when downloading to stdout
In some scenarios, such as when there may not be a terminal (such as
inside a Docker container), curl will apparently direct the progress bar
to stdout. This can cause extra data to be appended to a file curl'd
down to stdout, resulting in md5 verification failures.

This patch removes the progress bar, and tells curl to download the file
silently.

ASTERISK-26872 #close

Change-Id: Ie860b020f627d4372b3e7ce9453de5faafeebe6c
2017-03-14 14:14:04 -06:00
Matt Jordan b3c2c996f1 res_pjsip_endpoint_identifier_ip: Add an option to match requests by header
This patch adds a new features to the endpoint identifier module,
'match_header'. When set, inbound requests are matched by a provided SIP
header: value pair. This option works in conjunction with the existing
'match' configuration option, such that if any 'match*' attribute
matches an inbound request, the request is associated with the specified
endpoint.

Since this module now identifies by more than just IP address,
appropriate renaming of the module and/or variables can be done in a
non-release branch.

ASTERISK-26863 #close

Change-Id: Icfc14835c962f92e35e67bbdb235cf0589de5453
(cherry picked from commit 30f52d79d7)
2017-03-14 10:55:36 -05:00
Matt Jordan 51985565ef configs/samples/hep.conf.sample: Clarify how the HEP stack works
This patch updates the documenation in hep.conf.sample to better specify
how the various HEP modules interact.

ASTERISK-26717 #close

Change-Id: I337fb742a89e3ec5edc7fc7a7a0295218d841124
2017-03-14 09:52:35 -06:00
zuul 071e6d971c Merge "chan_sip: Call not cancelled after receiving a 422 response" into 13 2017-03-14 10:17:13 -05:00
Matt Jordan f9b791debe funcs/func_devstate: Remove new line in Device field of during module load
During module loading of func_devstate, Asterisk emits the current
device state of all Custom device states currently stored in the AstDB.
This was erroneously including a new line character ('\n') to the end of
the device state, causing two new lines to be emitted in
DeviceStateChange AMI events.

Note that this only happened for those device state changes that
occurred during startup. Regular device state changes for Custom device
states are handled elsewhere, and did not have the newline.

ASTERISK-26643 #close
Reported by: Roman Bedros
Tested by: Matt Jordan
patches:
  ami_devstate.diff uploaded by Roman Bedros (License 6842)

Change-Id: I1f4c02fc79c448d43bf725f5039c83d9611d7d93
2017-03-14 09:59:48 -05:00
Matt Jordan 216e28aa95 main/stasis_cache: Demote the ERROR message when removing a nonexistent item
This patch demotes the ERROR message that is displayed when a
nonexistent item is removed from the Stasis cache. The genesis of this
demotion is due to chan_sip's realtime peers and their interaction with
Asterisk's core ast_endpoint code, but ostensibly it could happen from
other channel drivers as well.

Since Mark Michelson already did an excellent job of explaining on this
issue, it is quoted here for posterity:

"Internally, when a realtime peer is retrieved, Asterisk creates an
ast_endpoint structure. When that peer is destroyed, the ast_endpoint is
destroyed as well. Part of the destruction of the ast_endpoint involves
clearing the Stasis cache of all information about that endpoint. The
problem here is that the act of creating the ast_endpoint is not enough
to actually put any information in the Stasis cache. Instead, something
has to happen, such as a state change, in order for the Stasis cache to
have any information about that endpoint. When a device registers,
chan_sip creates an ast_endpoint structure, processes the REGISTER, and
then destroys the ast_endpoint. When the ast_endpoint is destroyed,
there is nothing to destroy in the Stasis cache, so an error message is
emitted. When you use rtcachefriends, ast_endpoint structures persist
for the lifetime of the module and so you do not see this error
message."

ASTERISK-25237 #close

Change-Id: I53cebc6b4a897a1ab9564182b75c177780feff70
2017-03-14 09:37:34 -05:00
Joshua Colp c8d1b915d7 chan_pjsip: Don't assume a session will have a channel.
When querying for PJSIP specific information using the dialplan
function CHANNEL() it is possible that the underlying session
will no longer have a channel associated with it. This is
most likely to occur when the RTCP HEP module attempts to get
the channel name. If this happens then a crash will occur.

This change just adds a check that the channel exists on the
session before querying it.

ASTERISK-26857

Change-Id: I113479cffff6ae64cf8ed089e9e1565223426f01
2017-03-13 18:37:31 +00:00
George Joseph 6d1eb880c2 menuselect: Add a new 'options' support type
The Binaural Rendering patches in the master branch required
menuselect to be updated with a new support type called 'option'.
This allows binaural rendering to be turned on or off when
bridge_softmix is built.  This patch backports the 'option'
functionality to the 13 and 14 branches.

Here's what it looks like in menuselect:

  [*] bridge_simple
  [*] bridge_softmix
      --- Module Options ---
  [ ] binaural_rendering_in_bridge_softmix

To create an option for a module, you can create (or update) the
menuselect-tree xml snippet in the directory where the module
resides and add a member element with an 'option' support_level.

Example (abbreviated) from bridges/bridges.xml:

<member name="binaural_rendering_in_bridge_softmix"
	displayname="Enable binaural rendering in bridge_softmix"
	remove_on_change="bridges/bridge_softmix.o bridges/bridge_softmix.so">
	<support_level>option</support_level>
	<depend>bridge_softmix</depend>
	<depend>fftw3</depend>
	<defaultenabled>no</defaultenabled>
</member>

The 'name' will be added or removed from the MENUSELECT_<dir>
make variable following the standard module "missing means yes"
rules.

Example (abbreviated) from bridges/Makefile:

ifeq ($(findstring binaural_rendering,$(MENUSELECT_BRIDGES)),)
bridge_softmix.o: _ASTCFLAGS+=-DBINAURAL_RENDERING
bridge_softmix.so: LIBS+=$(FFTW3_LIB)
endif

Change-Id: I66d23755ed6e81f8d439cad410f2ffa7c30f25ad
2017-03-13 10:01:42 -06:00
George Joseph 523de8eb8e pjproject_bundled: Reduce the need for rebuilds
Bundled pjproject should now only rebuild if one of the menuselect
"Compiler Flags" options changes.

Change-Id: If114a2e16b9e77af371a600d6a5e197bbf28fe43
2017-03-10 19:30:29 -07:00
Jean Aunis d3ef833b3b chan_sip: Call not cancelled after receiving a 422 response
When receiving a 422 response, the invitestate variable must be reset to
INV_CALLING.

ASTERISK-26841

Change-Id: Ia0502d6b02192664cefa4e75bafdd2645ce56099
2017-03-10 16:25:53 -06:00
Joshua Colp 8386a38e06 Merge "pjsip/cli_commands: pjsip show channelstats shows wrong codec" into 13 2017-03-10 14:45:07 -06:00
Daniel Journo 67c989ce78 pjsip/cli_commands: pjsip show channelstats shows wrong codec
* cli_commands.c Fixed CLI output

ASTERISK-26822 #close

Change-Id: I3889ef6a8f6738fc312fab42db5efacd6e452b01
2017-03-09 21:42:12 +00:00
Joshua Colp 2a85888262 res_pjsip_transport_websocket: Add support for IPv6.
This change adds a PJSIP patch (which has been contributed upstream)
to allow the registration of IPv6 transport types.

Using this the res_pjsip_transport_websocket module now registers
an IPv6 Websocket transport and uses it for the corresponding
traffic.

ASTERISK-26685

Change-Id: Id1f9126f995b31dc38db8fdb58afd289b4ad1647
2017-03-08 14:38:40 -06:00
Daniel Journo bc6eeab822 app_voicemail: Cannot set fromstring on a per-mailbox basis
* apps/app_voicemail.c fromstring field added to mailbox which will
override the global fromstring if set.

ASTERISK-24562 #close

Change-Id: I5e90e3a1ec2b2d5340b49a0db825e4bbb158b2fe
2017-03-08 19:24:52 +00:00
Joshua Colp a860bf63e1 Merge "pbx_spool: Gracefully handle long lines in call files" into 13 2017-03-07 17:20:31 -06:00
Daniel Journo d9972423d1 Saynumber is trying to get "and" from "digits/" subfolder
* say.c Changed 'digits/and' to 'vm-and' for en_GB

ASTERISK-26598 #close

Change-Id: If1b713e5daea6f952b339f139178d292a6c4fcfe
2017-03-06 21:54:23 +00:00
Sean Bright 77901a58ca pbx_spool: Gracefully handle long lines in call files
Per the linked issue, we aren't checking the buffer filled by fgets()
to determine if it contains a newline, so we will fail to correctly
parse the trailing portion of a long line.

This patch increases the buffer size from 256 to 1024, and skips any
line that exceeds that length, logging a warning in the process.

ASTERISK-17067 #close
Reported by: Dave Olszewski

Change-Id: I51bcf270c1b4347ba05b43f18dc2094c76f5d7b0
2017-03-06 16:29:17 -05:00
Richard Mudgett 4271c700f7 core: Cleanup ast_get_hint() usage.
* manager.c:manager_state_cb() Fix potential use of uninitialized hint[]
if a hint does not exist for the requested extension.  Ran into this when
developing a testsuite test.  The AMI event ExtensionStatus came out with
the hint header value containing garbage.  The AMI event PresenceStatus
also had the same issue.

* manager.c:action_extensionstate() no need to completely initialize the
hint[].  Only initialize the first element.

* pbx.c:ast_add_hint() Remove unnecessary assignment.

* chan_sip.c: Eliminate an unneeded hint[] local variable.  We only care
about the return value of ast_get_hint() there.

Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b
2017-03-02 21:43:23 -06:00
Joshua Colp 75ebd8f0d2 Merge "res_pjsip WebRTC/websockets: Fix usage of WS vs WSS." into 13 2017-03-01 18:25:33 -06:00
zuul 65a025e9fa Merge "chan_sip: Allow DTLS to be disabled when reloading." into 13 2017-03-01 11:43:55 -06:00
Jørgen H e510595c86 res_pjsip WebRTC/websockets: Fix usage of WS vs WSS.
According to the RFC[1] WSS should only be used in the Via header
for secure Websockets.

* Use WSS in Via for secure transport.

* Only register one transport with the WS name because it would be
ambiguous.  Outgoing requests may try to find the transport by name and
pjproject only finds the first one registered.  This may mess up unsecure
websockets but the impact should be minimal.  Firefox and Chrome do not
support anything other than secure websockets anymore.

* Added and updated some debug messages concerning websockets.

* security_events.c: Relax case restriction when determining security
transport type.

* The res_pjsip_nat module has been updated to not touch the transport
on Websocket originating messages.

[1] https://tools.ietf.org/html/rfc7118

ASTERISK-26796 #close

Change-Id: Ie3a0fb1a41101a4c1e49d875a8aa87b189e7ab12
2017-03-01 15:52:16 +00:00
Sean Bright 76971d4c4a res_config_pgsql: Make 'require' return consistent with other backends
res_config_pgsql should match the behavior of other realtime backend
drivers so that queue_log can disable adaptive logging.

ASTERISK-25628 #close
Reported by: Dmitry Wagin

Change-Id: Ic1fb1600c7ce10fdfb1bcdc43c5576b7e0014372
2017-03-01 08:23:55 -05:00
zuul 848e211e1c Merge "res_config_pgsql: Release table locks where appropriate" into 13 2017-02-28 19:30:20 -06:00
zuul c36cab8468 Merge "res_pjsip_outbound_registration: Subscribe to network change events" into 13 2017-02-28 19:24:10 -06:00
zuul 4bff6bc144 Merge "build: Warn if asterisk is installed in both 32 and 64 bit sys dirs" into 13 2017-02-28 17:28:37 -06:00
zuul 024e724aca Merge "res_pjsip_pubsub: Remove unneeded endpoint unref" into 13 2017-02-28 17:14:30 -06:00
zuul acb906fa2f Merge "bridge_native_rtp: Handle case where channel joins already suspended." into 13 2017-02-28 14:42:40 -06:00
zuul 59a00786e8 Merge "config: Improve documentation and behavior of outbound_proxy option." into 13 2017-02-28 13:32:22 -06:00
zuul bf3cb76452 Merge "res_pjsip: Fix crash when contact has no status" into 13 2017-02-28 13:32:19 -06:00
Sean Bright fa8f6c2fc4 res_config_pgsql: Release table locks where appropriate
The find_table() functions NULL or a locked table pointer. We are
not consistently calling release_table() in failure paths.

Change-Id: I6f665b455799c84b036e5b34904b82b05eab9544
2017-02-28 10:41:45 -05:00
Tzafrir Cohen 5b34b751a0 pjsip.conf.sample: user_agent: not a specific version
Use the description of useragent from sip.conf here.

ASTERISK-26825 #close

Change-Id: I5b33a4aaa0ae1d793289d05e3bc09521affbf755
2017-02-28 06:21:49 -06:00
George Joseph 8e6ecdade2 res_pjsip_pubsub: Remove unneeded endpoint unref
When a subscription was being recreated and the endpoint wasn't
found, we were trying to unref the endpoint.  This was causing
FRACKs.  Removed the unref.

ASTERISK-26823 #close

Change-Id: If86d2aecff8fe853c7f38a1bfde721fcef3cd164
2017-02-27 19:07:06 -07:00
Jørgen H 0595c31da7 res_pjsip: Fix crash when contact has no status
This change fixes an assumption in res_pjsip that a contact will
always have a status. There is a race condition where this is
not true and would crash. The status will now be unknown when
this situation occurs.

ASTERISK-26623 #close

Change-Id: Id52d3ca4d788562d236da49990a319118f8d22b5
2017-02-27 15:18:52 -06:00
George Joseph c07bcca87e res_pjsip_outbound_registration: Subscribe to network change events
Outbound registration now subscribes to network change events
published by res_stun_monitor and refreshes all registrations
when an event happens.

The 'pjsip send (un)register' CLI commands were updated to accept
'*all' as an argument to operate on all registrations.

The 'PJSIP(Un)Register' AMI commands were also updated to
accept '*all'.

ASTERISK-26808 #close

Change-Id: Iad58a9e0aa5d340477fca200bf293187a6ca5a25
2017-02-27 14:09:51 -07:00
Vitezslav Novy d91f61f0b5 chan_sip: Allow DTLS to be disabled when reloading.
This change fixes a problem where removing the DTLS configuration
options and reloading would not disable DTLS. This occurred
because the DTLS configuration was not reset to an unconfigured
state on reload.

ASTERISK-26313

Change-Id: I10952709cc4a7727fb50534b042bce9d64894b39
2017-02-27 13:03:24 -06:00
George Joseph 3d2c119778 build: Warn if asterisk is installed in both 32 and 64 bit sys dirs
... and clean them both up on uninstall.

We've fixed the issue where 'make install' was installing to
/usr/lib on 64-bit systems that use /usr/lib64.  Now we need
to clean up the remnants in /usr/lib.

* 'make install' now prints a warning if DESTDIR/ASTLIBDIR
  contains 'lib64' and libasterisk* shared libraries or modules
  are also found in DESTDIR/ASTLIBDIR with 'lib64' transformed
  to 'lib'.

* 'make uninstall' ALWAYS cleans up both DESTDIR/ASTLIBDIR and
  DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'.

ASTERISK-26705

Change-Id: I6edddeb3c07a51e7c7ba7cac3c05e4bf3ec3f01f
2017-02-27 11:55:41 -07:00
Joshua Colp eac818801b bridge_native_rtp: Handle case where channel joins already suspended.
The bridge_native_rtp module did not properly handle the case where
a smart bridge operation occurs while a channel is suspended. In this
scenario the module would incorrectly set up local or remote RTP
bridging despite the media having to flow through Asterisk. The remote
endpoint would see two media streams and experience wonky audio.

The module has been changed so that it ensures both channels are
not suspended when performing the native RTP bridging and this
requirement has been documented in the bridge technology.

ASTERISK-26781

Change-Id: Id4022d73ace837d4a293106445e3ade10dbc7c7c
2017-02-27 13:02:38 +00:00
Joshua Colp 9d3ab062cc Merge "pjproject_bundled: Update for pjproject 2.6" into 13 2017-02-24 12:48:53 -06:00
Joshua Colp 1d5b6fe2b6 Merge "build: Execute ldconfig to build cache. (take two)" into 13 2017-02-24 11:51:50 -06:00
Joshua Colp d49af061bc config: Improve documentation and behavior of outbound_proxy option.
This change updates the documentation for the outbound_proxy option
to ensure it is consistently stated that a full SIP URI must be
provided for the option.

The res_pjsip_outbound_registration module has also been changed so
that the provided outbound_proxy value is checked to ensure it is a
URI and if not an error is output stating so.

ASTERISK-26782

Change-Id: I6c239a32274846fd44e65b44ad9bf6373479b593
2017-02-24 17:49:59 +00:00
George Joseph 9c05ddbddd pjproject_bundled: Update for pjproject 2.6
* Removed all 2.5.5 functional patches.
 * Updated usages of pj_release_pool to be "safe".
 * Updated configure options to disable webrtc.
 * Updated config_site.h to disable webrtc in pjmedia.
 * Added Richard Mudgett's recent resolver patches.

Change-Id: Ib400cc4dfca68b3d07ce14d314e829bfddc252c7
2017-02-23 15:23:15 -07:00
George Joseph bee55aaf2c build: Execute ldconfig to build cache. (take two)
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.  To make matters worse, options were being passed
to ldconfig on both Linux and FreeBSD that actually prevented
the rebuild of the cache.

 * Fedora has a /usr/share/config.site that automatically tells
   autoconf to use /usr/lib64 but CentOS does not. This logic was
   copied to configure.ac and modified so systems like Ubuntu,
   which still use /usr/lib for 64-bit systems, aren't affected.

Now that we have them in the correct directory...

In order for the system loader to find libasteriskssl and
libasteriskpj, one of 3 things has to happen...

  - The linker cache must be rebuilt including the directory
    where the libasterisk* libraries were installed.  Only root
    can rebuild the cache.  This was busted.
  - We have to link the asterisk binary with an rpath pointing
    to the directrory where the libasterisk* libraries were
    installed.  This makes things very complicated and will happen
    over the collective dead bodies of everyone who's had to
    package a distribution with an rpath.
  - Finally, you can start asterisk with LD_LIBRARY_PATH set to the
    directrory where the libasterisk* libraries were installed.

There are no other options. So...

 * The invokation of ldconfig has been moved from main/Makefile
   to ASTTOPDIR/Makefile, the options have been removed, and
   DESTDIR/ASTLIBDIR appended.  If you aren't root, you will be
   warned after the "Asterisk Installation Compete" banner that
   you must re-run 'make install' as root, manually run
   'ldconfig DESTDIR/ASTLIBDIR' as root, or run asterisk with
   LD_LIBRARY_PATH.

ASTERISK-26705

Change-Id: I2a64b7c33a7d3e9bde20f47e3d3ab771977af982
2017-02-23 14:49:17 -07:00
Sean Bright da0cadd100 res_config_pgsql: Fix thread safety problems
* A missing AST_LIST_UNLOCK() in find_table()

* The ESCAPE_STRING() macro uses pgsqlConn under the hood and we were
  not consistently locking before calling it.

* There were a handful of other places where pgsqlConn was accessed
  directly without appropriate locking.

Change-Id: Iea63f0728f76985a01e95b9912c3c5c6065836ed
2017-02-23 15:48:53 -05:00
Joshua Colp 803afec45f Merge "res_config_ldap: Various code improvements" into 13 2017-02-23 12:06:41 -06:00
Sean Bright f1963c5b8d res_config_ldap: Various code improvements
The initial motivation for this patch was to properly handle memory
allocation failures - we weren't checking the return values from the
various LDAP library allocation functions.

In the process, because update_ldap() and update2_ldap() were
substantially the same code, they've been consolidated.

Change-Id: Iebcfe404177cc6860ee5087976fe97812221b822
2017-02-22 17:37:34 -06:00
Michael L. Young 1ec796ce18 build_tools: Fix download_externals to allow the use of curl or wget
Not sure if this is really a bug versus an improvement. I can see it being
viewed as a bug though by some.

The current build_tools/download_externals file depends on wget in order to
download external modules.  The current build system is able to discover
which tool to use for fetching remote files - either wget or curl.

This patch takes advantage of this capability by modifying the two calls to
the wget binary to instead use what was discovered by the build system.

ASTERISK-26812 #close

Change-Id: If9411a2554f009274d377445613ae91192d948a1
2017-02-22 16:50:20 -05:00
zuul debaf377be Merge "Revert "build: Execute ldconfig to build cache."" into 13 2017-02-22 13:56:50 -06:00
zuul 726e3945c3 Merge "pbx_realtime: Prevent premature extension matching" into 13 2017-02-22 12:08:47 -06:00
Joshua Colp 5c9c097d17 Revert "build: Execute ldconfig to build cache."
This reverts commit d90430953c.

Change-Id: I758fe7ea0408f83a6df8e1774310d69f482700f6
2017-02-22 11:13:04 -06:00
zuul 89e0bf6ddd Merge "pbx_dundi: DUNDi weight parameter not processed correctly" into 13 2017-02-22 10:19:49 -06:00
Joshua Colp e9c8514b03 Merge "realtime: Fix ast_load_realtime_multientry handling" into 13 2017-02-22 08:40:41 -06:00
Sean Bright ca6d001144 pbx_realtime: Prevent premature extension matching
The patterns provided by pbx_realtime were checked in the order in
which they were returned from the realtime backend. If there was
overlap between multiple patterns, the first one to correctly match was
chosen even though it may not have been the best match.

We now sort the patterns descending by their length and compare in that
order. There may be cases where this still results in a sub-optimal
match, but this patch should improve the overall behavior.

ASTERISK-18271 #close
Reported by: Charlie Smurthwaite

Change-Id: I56d9ac15810eb1775966b669c3028e32cc7bd809
2017-02-22 05:31:22 -06:00
Joshua Colp c637285419 Merge changes from topic 'ASTERISK-26669' into 13
* changes:
  pjproject: Fixes to resolve DNS SRV crashes.
  pjproject: Increase SENDER_WIDTH column size for 64-bit system logs.
2017-02-22 04:48:47 -06:00
zuul 4e0dba31cf Merge "res_pjsip_authenticator_digest.c: Fix sorcery's immutable contract violation." into 13 2017-02-21 21:56:45 -06:00
zuul 0afff51e72 Merge "pjsip_distributor.c: Update some debug messages to get transaction name." into 13 2017-02-21 21:17:28 -06:00
zuul a3584c6834 Merge "res_pjsip: Record the serializer earlier on the tdata." into 13 2017-02-21 21:17:24 -06:00
zuul 51c9dd3d16 Merge "res_pjsip: Update artificial auth whenever default_realm changes." into 13 2017-02-21 21:17:20 -06:00
zuul 38b04d7dac Merge "res_pjsip: Update authentication realm documentation." into 13 2017-02-21 20:41:27 -06:00
George Joseph 61172a841b Merge "realtime: Centralize some common realtime backend code" into 13 2017-02-21 18:34:47 -06:00
Sean Bright 0654bf637c pbx_dundi: DUNDi weight parameter not processed correctly
The DUNDi weight field is not always converted from network byte order
to host byte order. This can result in incorrect weight values and
incorrect selection of DUNDi destinations.

ASTERISK-18731 #close
Reported by: Peter Racz
Patches:
	dundi_weight.patch (license #6290) patch uploaded by Peter Racz

Change-Id: Iba3e1a700ff539db57211a7bbc26f7b22ea9a1be
2017-02-21 17:10:11 -06:00
Joshua Colp ef105410d8 Merge changes from topic 'ASTERISK-26580' into 13
* changes:
  res_config_ldap: Don't try to delete non-existent attributes
  res_config_ldap: Remove extraneous line numbers from log messages
  res_config_ldap: Make memory allocation more consistent
  res_config_ldap: Fix configuration inheritance from _general
2017-02-21 16:34:56 -06:00
zuul 5333c2782c Merge "res_config_ldap: Fix erroneous LDAP_MOD_REPLACE in LDAP modify" into 13 2017-02-21 15:54:01 -06:00
Joshua Colp 90f6613033 Merge "build: Execute ldconfig to build cache." into 13 2017-02-21 14:54:47 -06:00
Sean Bright d5522de597 realtime: Fix ast_load_realtime_multientry handling
ast_load_realtime_multientry() returns an ast_config structure whose
ast_categorys are keyed with the empty strings. Several modules were
giving semantic meaning to the category names causing problems at
runtime.

* app_directory: Treated the category name as the mailbox name, and
  would fail to direct calls to the appropriate extension after an
  entry was chosen.

* app_queue: Queues, queue members, and queue rules were all affected
  and needed to be updated.

* pbx_realtime: Pattern matching would never succeed because the
  extension entered by the user was always compared to the empty
  string.

Change-Id: Ie7e44986344b0b76ea8f6ddb5879f5040c6ca8a7
2017-02-21 13:45:03 -05:00
Sean Bright 5eb7875243 realtime: Centralize some common realtime backend code
All of the realtime backends create artificial ast_categorys to pass
back into the core as query results. These categories have no filename
or line number information associated with them and the backends differ
slightly on how they create them. So create a couple helper macros to
help make things more consistent.

Also updated the call sites to remove redundant error messages about
memory allocation failure.

Note that res_config_ldap sets the category filename to the 'table name'
but that is not read by anything in the core, so I've dropped it.

Change-Id: I3a1fd91e0c807dea1ce3b643b0a6fe5be9002897
2017-02-21 11:50:56 -05:00
zuul f29ea24d9f Merge "realtime: Fix LIKE escaping in SQL backends" into 13 2017-02-21 06:17:33 -06:00
Joshua Colp d90430953c build: Execute ldconfig to build cache.
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.

This change does the minimally invasive thing and executes
ldconfig so that the libraries in the lib directory are found
and their location cached. By doing so Asterisk starts up fine.

If DESTDIR is specified, however, the old logic is executed as
the install process may not have permission to alter the ldconfig
cache.

ASTERISK-26705

Change-Id: If4eca46ac510c6fea5568256280ffdb3888d7bb4
2017-02-21 11:24:53 +00:00
Richard Mudgett 3b606093d3 res_pjsip_authenticator_digest.c: Fix sorcery's immutable contract violation.
The inbound authentication object is supposed to be immutable when it is
stored in sorcery.  However, the immutable property is violated if the
authentication object does not have a realm set.

The immutable contract violation has a different effect depending upon
what sorcery back end is used.  If it is the config file back end you
would get the same object back until res_pjsip is reloaded.  If it is the
real-time or AstDB back end you would get a new object on each query.  If
it is cached you would get the same object back until it is refreshed from
the database.

Once an inbound authentication object has its realm set it may or may not
get updated again if the default_realm changes.

If the same authentication object is used for inbound and outbound
authentication then the immutable violation can make it very hard to
determine why the outbound authentication now fails.  The only diagnostic
message is a complaint about no realms matching when it had worked
earlier.  It fails because of the difference in behaviour for an empty
realm setting between inbound and outbound authentication objects.

* Fixed the sorcery object immutable violation by creating a new object
and setting the default_realm on it instead.  The new object is a shallow
copy for speed.

* The auth_store thread storage no longer holds an auth ref.  It
interferes with the shallow copy and never needed a ref anyway.

ASTERISK-26799 #close

Change-Id: I2328a52f61b78ed5fbba38180b7f183ee7e08956
2017-02-20 22:20:54 -06:00
Richard Mudgett 6208962b00 res_pjsip: Update artificial auth whenever default_realm changes.
There was code attempting to update the artificial authentication object
whenever the default_realm changed.  However, once the artificial
authentication object was created it would never get updated.  The
artificial authentication object would require a system restart for a
change to the default_realm to take effect.

ASTERISK-26799

Change-Id: Id59036e9529c2d3ed728af2ed904dc36e7094802
2017-02-20 22:20:53 -06:00
Richard Mudgett 9f11da85a2 res_pjsip: Update authentication realm documentation.
Using the same auth section for inbound and outbound authentication is not
recommended.  There is a difference in meaning for an empty realm setting
between inbound and outbound authentication uses.

An empty inbound auth realm represents the global section's default_realm
value when the authentication object is used to challenge an incoming
request.  An empty outgoing auth realm is treated as a don't care wildcard
when the authentication object is used to respond to an incoming
authentication challenge.

ASTERISK-26799

Change-Id: Id3952f7cfa1b6683b9954f2c5d2352d2f11059ce
2017-02-20 22:20:53 -06:00
zuul 557ef67690 Merge "tcptls.c: Add some missing allocation failure checks." into 13 2017-02-20 21:30:28 -06:00
zuul 8287a012b6 Merge "app_voicemail: vm_authenticate accesses uninitialized memory" into 13 2017-02-20 18:14:39 -06:00
Richard Mudgett 473813311b pjproject: Fixes to resolve DNS SRV crashes.
* Re #1945 (misc): Don't trigger SRV complete callback when there is a
parse error.

* srv_resolver.c: Don't try to send query if already considered resolved.

** In resolve_hostnames() don't try to resolve a query that is already
considered resolved.

** In resolve_hostnames() fix DNS typo in comments.

** In build_server_entries() move a common expression assigning to cnt
earlier.

* sip_transport.c: Fix tdata object name to actually contain the pointer.

It helps if the logs referencing a tdata object buffer actually have a
name that includes the correct pointer as part of the name.  Also since
the tdata has its own pool it helps if any logs referencing the pool have
the same name as the tdata object.  This change brings tdata logging in
line with how tsx objects are named.

ASTERISK-26669 #close
ASTERISK-26738 #close

Change-Id: I56af2ded25476b3e870ca586ee69ed6954ef75af
2017-02-20 16:28:28 -06:00
Richard Mudgett d58fdae811 pjsip_distributor.c: Update some debug messages to get transaction name.
* Removed overloaded unmatched response ignore.  We obviously sent the
request so we shouldn't ignore it because it isn't new work.

ASTERISK-26669
ASTERISK-26738

Change-Id: I55fb5cadc83a8e6699b347c6dc7fa32c5a617d37
2017-02-20 16:28:28 -06:00
Richard Mudgett eb9ae4f7cb res_pjsip: Record the serializer earlier on the tdata.
When PJPROJECT needs to do a DNS resolution and there is not a cached
entry available, the SIP request message goes out on the PJSIP monitor
thread instead of the original serializer thread.  Thus when the response
comes back it does not get processed by the original sending serializer.

This patch records the serializer on tdata before passing a request
message to PJPROJECT where it can in Asterisk code.  There are several
places in PJPROJECT for outbound registration and publishing support that
would need to record the serializer.  Unfortunately, without replacing the
PJPROJECT DNS resolver as was done in v14 we cannot fix those without
modifying PJPROJECT.

Even if we backported the DNS resolver from v14, the outbound registration
refresh timer does not go out on a serializer thread but the PJSIP monitor
thread.  Fortunately, Asterisk's outbound publish support doesn't use the
auto refresh timer that would also not go out under the serializer thread.

This patch is v13 only.

ASTERISK-26669
ASTERISK-26738

Change-Id: I9997b9ed6dbcebd2c37d6a67dc6dcee9c78914a4
2017-02-20 16:28:28 -06:00
Richard Mudgett 57f19d6efb pjproject: Increase SENDER_WIDTH column size for 64-bit system logs.
ASTERISK-26669
ASTERISK-26738

Change-Id: Ibae6fc8cae69a1f04df0c577c4c11200499d6fe0
2017-02-20 16:28:28 -06:00
zuul d7433aa796 Merge "pjproject cli: Add object count after object lists" into 13 2017-02-20 16:19:03 -06:00
zuul d8ae2e053b Merge "res_config_sqlite3: Properly create missing columns when necessary" into 13 2017-02-20 15:43:08 -06:00
Sean Bright 47daca8a2b app_voicemail: vm_authenticate accesses uninitialized memory
vm_authenticate doesn't always set the passed ast_vm_user argument, so
we initialize to 0 before passing it in.

ASTERISK-25893 #close
Reported by: Filip Jenicek

Change-Id: Ia3cc0128f93d352ed9add8d5c2f0f7232c2cbe4a
2017-02-20 16:09:04 -05:00
zuul a6db9c480e Merge "Revert "build: Execute ldconfig to build cache."" into 13 2017-02-20 13:50:29 -06:00
Joshua Colp 06214173a9 Revert "build: Execute ldconfig to build cache."
This reverts commit e910dbab90.

Change-Id: I242aa0a965a79738dc898299959c6d2e020c86bd
2017-02-20 11:19:31 -06:00
George Joseph c9ea98f9bf pjproject cli: Add object count after object lists
When listing a container, we now print the number of objects
in the container at the end of the list.

Change-Id: I791cbc3ee9da9a2af9adc655164b5d32953df812
2017-02-20 08:07:17 -06:00
Sean Bright d8972f50f4 res_config_ldap: Don't try to delete non-existent attributes
OpenLDAP will raise an error when we try to delete an LDAP attribute
that doesn't exist. We need to filter out LDAP_MOD_DELETE requests
based on which attributes the current LDAP entry actually has. There
is of course a small window of opportunity for this to still fail,
but it is much less likely now.

Change-Id: I3fe1b04472733e43151563aaf9f8b49980273e6b
2017-02-20 06:53:47 -05:00
Sean Bright b980cae1f7 res_config_ldap: Remove extraneous line numbers from log messages
Extraneous line numbers were being output in many log messages. These
have been removed.

Change-Id: Ice9efa3d252ee87f37fa8f5ea852fda482675431
2017-02-20 06:49:17 -05:00
Sean Bright 011b7be62a res_config_ldap: Make memory allocation more consistent
The code in update_ldap() and update2_ldap() was using both Asterisk's
memory allocation routines as well as OpenLDAP's. I've changed it so
that everything that is passed to OpenLDAP's functions are allocated
with their routines.

Change-Id: Iafec9c1fd8ea49ccc496d6316769a6a426daa804
2017-02-20 06:45:54 -05:00
Sean Bright b2836dde7e res_config_ldap: Fix configuration inheritance from _general
The "_general" configuration section allows administrators to provide
both general configuration options (host, port, url, etc.) as well as a
global realtime-to-LDAP-attribute mapping that is a fallback if one of
the later sections do not override it. This neglected to exclude the
general configuration options from the mapping. As an example, during
my testing, chan_sip requested 'port' from realtime, and because I did
not have it defined, it pulled in the 'port' configuration option from
"_general." We now filter those out explicitly.

Change-Id: I1fc61560bf96b8ba623063cfb7e0a49c4690d778
2017-02-20 06:30:31 -05:00
Sean Bright 6d5e9993b2 res_config_ldap: Fix erroneous LDAP_MOD_REPLACE in LDAP modify
We always treat the first change of our modification batch as a
replacement when it sometimes is actually a delete. So we have to pass
the correct arguments to the OpenLDAP library.

ASTERISK-26580 #close
Reported by: Nicholas John Koch
Patches:
	res_config_ldap.c-11.24.1.patch (license #6833) patch uploaded
	by Nicholas John Koch

Change-Id: I0741d25de07c9539f1edc6eff3696165dfb64fbe
2017-02-20 06:27:38 -05:00
zuul 919fe21155 Merge "res_config_sqlite3: Fix crash when loading with invalid config" into 13 2017-02-19 12:37:06 -06:00
Sean Bright 5b7c6678ae res_config_sqlite3: Fix crash when loading with invalid config
When ast_config_load() fails with CONFIG_STATUS_FILEINVALID, it has
already destroyed the ast_config struct for us. Trying to do it again
results in a crash.

Change-Id: If6a5c0ca718ad428e01a1fb25beb209a9ac18bc6
2017-02-18 13:17:27 -05:00
Richard Mudgett 096496e13e tcptls.c: Add some missing allocation failure checks.
Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb
2017-02-17 17:13:31 -06:00
Sean Bright 047a1e7dcc pjproject-bundled: Fix checksum verification when using cURL
ASTERISK-26802 #close
Reported by: Michael L. Young

Change-Id: Iad293080f55d4d69ab615717a15211d916eed613
2017-02-17 18:06:47 -05:00
Joshua Colp 2b10ba8074 Merge "build: Execute ldconfig to build cache." into 13 2017-02-17 12:15:41 -06:00
Sean Bright 2cd75fe311 realtime: Fix LIKE escaping in SQL backends
The realtime framework allows for components to look up values using a
LIKE clause with similar syntax to SQL's. pbx_realtime uses this
functionality to search for pattern matching extensions that start with
an underscore (_).

When passing an underscore to SQL's LIKE clause, it will be interpreted
as a wildcard matching a single character and therefore needs to be
escaped. It is (for better or for worse) the responsibility of the
component that is querying realtime to escape it with a backslash before
passing it in. Some RDBMs support escape characters by default, but the
SQL92 standard explicitly says that there are no escape characters
unless they are specified with an ESCAPE clause, e.g.

	SELECT * FROM table WHERE column LIKE '\_%' ESCAPE '\'

This patch instructs 3 backends - res_config_mysql, res_config_pgsql,
and res_config_sqlite3 - to use the ESCAPE clause where appropriate.

Looking through documentation and source tarballs, I was able to
determine that the ESCAPE clause is supported in:

MySQL 5.0.15   (released 2005-10-22 - earliest version available from
                archives)
PostgreSQL 7.1 (released 2001-04-13)
SQLite 3.1.0   (released 2005-01-21)

The versions of the relevant libraries that we depend on to access MySQL
and PostgreSQL will not work on versions that old, and I've added an
explicit check in res_config_sqlite3 to only use the ESCAPE clause when
we have a sufficiently new version of SQLite3.

res_config_odbc already handles the escape characters appropriately, so
no changes were required there.

ASTERISK-15858 #close
Reported by: Humberto Figuera

ASTERISK-26057 #close
Reported by: Stepan

Change-Id: I93117fbb874189ae819f4a31222df7c82cd20efa
2017-02-16 13:58:31 -05:00
zuul 73cbb915c1 Merge "chan_unistim: fix char type to have consistent behavior on ARM" into 13 2017-02-16 11:32:25 -06:00
Joshua Colp e910dbab90 build: Execute ldconfig to build cache.
On some platforms a multiarch approach is used for libraries.
The build system does not take this into account and still
places libraries into the lib directory if no --libdir is
specified to configure. On initial startup this results in
libasteriskssl.so not being found, as it is not in the multiarch
lib directory.

This change does the minimally invasive thing and executes
ldconfig so that the libraries in the lib directory are found
and their location cached. By doing so Asterisk starts up fine.

ASTERISK-26705

Change-Id: I6d30b6427e9d5e69470e11327c7ff203fa7da519
2017-02-16 16:33:20 +00:00
Joshua Colp 24c2ef2418 Merge "http: Ensure capath is defined on all http creations" into 13 2017-02-16 09:41:12 -06:00
zuul 6b62ab7776 Merge "res_pjsip_pubsub: Correctly implement persisted subscriptions" into 13 2017-02-16 07:48:02 -06:00
zuul ec0aefc822 Merge "pjsip_distributor.c: Fix off-nominal tdata ref leak." into 13 2017-02-16 06:52:44 -06:00
Sean Bright 9b02bbfa88 res_config_sqlite3: Properly create missing columns when necessary
There were two specific issues resolved here:

1) The code that iterated over the required fields
   (via ast_realtime_require) was broken for the RQ_INTEGER1 field
   type. Iteration would stop when the first RQ_INTEGER1 (0) field
   was encountered.

2) sqlite3_changes() was used to try and count the number of rows
   returned by a SELECT statement. sqlite3_changes() only counts
   affected rows, so this was always returning the value from the
   most recent data modification statement. We now separate read-only
   queries from data modification queries and count rows appropriately
   in both cases.

ASTERISK-23457 #close
Reported by: Scott Griepentrog

Change-Id: I91ed20494efc3fcfbc2a96ac7646999a49814884
2017-02-16 07:09:22 -05:00
Joshua Elson 0fc27fa364 http: Ensure capath is defined on all http creations
ASTERISK-26794 #close

Change-Id: I9cbc3b6b6a8aab590f5ccde9c262a98e4d5253a1
2017-02-16 11:48:12 +00:00
Igor Goncharovsky 7aa731c1c7 chan_unistim: fix char type to have consistent behavior on ARM
There is difference exists in behaviour of char type on x86 and ARM.
On x86 by default char variable type means signed char, but in ARM
unsigned char used. This make binary calculations and negative values
works wrong on ARM.

This patch change type of char variables used for store negative
values and binary calculations to signed char.

ASTERISK-26714

Change-Id: Id78716dee9568a58419d4ef63c038affc3dfc7ab
2017-02-16 08:36:52 +03:00
George Joseph be77b845d9 res_pjsip_pubsub: Correctly implement persisted subscriptions
This patch fixes 2 original issues and more that those 2 exposed.

* When we send a NOTIFY, and the client either doesn't respond or
  responds with a non OK, pjproject only calls our
  pubsub_on_evsub_state callback, no others.  Since
  pubsub_on_evsub_state (which does the sub_tree cleanup) does not
  expect to be called back without the other callbacks being called
  first, it just returns leaving the sub_tree orphaned.  Now
  pubsub_on_evsub_state checks the event for PJSIP_EVENT_TSX_STATE
  which is what pjproject will set to tell us that it was the
  transaction that timed out or failed and not the subscription
  itself timing our or being terminated by the client. If is
  TSX_STATE, pubsub_on_evsub_state now does the proper cleanup
  regardless of the state of the subscription.

* When a client renews a subscription, we don't update the
  persisted subscription with the new expires timestamp.  This causes
  subscription_persistence_recreate to prune the subscription if/when
  asterisk restarts.  Now, pubsub_on_rx_refresh calls
  subscription_persistence_update to apply the new expires timestamp.
  This exposed other issues however...

* When creating a dialog from rdata (which sub_persistence_recreate
  does from the packet buffer) there must NOT be a tag on the To
  header (which there will be when a client refreshes a
  subscription).  If there is one, pjsip_dlg_create_uas will fail.
  To address this, subscription_persistence_update now accepts a flag
  that indicates that the original packet buffer must not be updated.
  New subscribes don't set the flag and renews do.  This makes sure
  that when the rdata is recreated on asterisk startup, it's done
  from the original subscribe packet which won't have the tag on To.

* When creating a dialog from rdata, we were setting the dialog's
  remote (SUBSCRIBE) cseq to be the same as the local (NOTIFY) cseq.
  When the client tried to resubscribe after a restart with the
  correct cseq, we'd reject the request with an Invalid CSeq error.

* The acts of creating a dialog and evsub by themselves when
  recreating a subscription does NOT restart pjproject's subscription
  timer.  The result was that even if we did correctly recreate the
  subscription, we never removed it if the client happened to go away
  or send a non-OK response to a NOTIFY.  However, there is no
  pjproject function exposed to just set the timer on an evsub that
  wasn't created by an incoming subscribe request.  To address this,
  we create our own timer using ast_sip_schedule_task.  This timer is
  used only for re-establishing subscriptions after a restart.

  An earlier approach was to add support for setting pjproject's
  timer (via a pjproject patch) and while that patch is still included
  here, we don't use that call at the moment.

While addressing these issues, additional debugging was added and
some existing messages made more useful.  A few formatting changes
were also made to 'pjsip show scheduled tasks' to make displaying
the subscription timers a little more friendly.

ASTERISK-26696
ASTERISK-26756

Change-Id: I8c605fc1e3923f466a74db087d5ab6f90abce68e
2017-02-15 12:11:18 -07:00
Sean Bright 73133d5354 res_rtp_asterisk: Use PJ_ICE_MAX_CAND instead of hard-coding 16
pjsip limits the total number of ICE candidates to PJ_ICE_MAX_CAND,
which is a compile-time constant. Instead of hard-coding 16 when we
enumerate local interfaces, use PJ_ICE_MAX_CAND so that we can
potentially collect more interfaces if the compile time options are
changed.

Tangentially related to ASTERISK~24464

Change-Id: I1b85509e39e33b1fed63c86261fc229ba14bbabd
2017-02-15 12:12:45 -05:00
zuul c5b48fbe77 Merge "libasteriskssl: do nothing with OpenSSL >= 1.1" into 13 2017-02-15 08:43:48 -06:00
zuul 07163005ad Merge "tcptls: use TLS_client_method with OpenSSL 1.1" into 13 2017-02-15 08:43:45 -06:00
zuul 258b808dce Merge "openssl 1.1 support: use OPENSSL_VERSION_NUMBER" into 13 2017-02-15 08:12:16 -06:00
zuul 4551525fa9 Merge "app_voicemail: Allow 'Comedian Mail' branding to be overriden" into 13 2017-02-14 17:21:43 -06:00
zuul 730bc7e972 Merge "app_voicemail: VoiceMailPlayMsg did not play database stored messages" into 13 2017-02-14 16:28:53 -06:00
Tzafrir Cohen 99b40e72ae 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.

ASTERISK-26109 #close

Change-Id: I3b3efd5d80234a4c45a8ee58dcfe25b15d9ad100
2017-02-14 23:30:03 +02:00
Sean Bright 4c31e03e80 app_voicemail: Allow 'Comedian Mail' branding to be overriden
Original patch by John Covert, slight modifications by me.

ASTERISK-17428 #close
Reported by: John Covert
Patches:
	app_voicemail.c.patch (license #5512) patch uploaded by
        John Covert

Change-Id: Ic3361b0782e5a5397a19ab18eb8550923a9bd6a6
2017-02-14 21:09:11 +00:00
zuul 500b02cb82 Merge "app_record: Add option to prevent silence from being truncated" into 13 2017-02-14 14:56:00 -06:00
Tzafrir Cohen e97e50b68b 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.

ASTERISK-26109 #close

Change-Id: I257b1c8afd09dcb0d96cda3a41cb9f7a15d0ba07
2017-02-14 22:53:59 +02:00
Tzafrir Cohen 0d555f0d81 openssl 1.1 support: use OPENSSL_VERSION_NUMBER
Use OPENSSL_VERSION_NUMBER instead of OPENSSL_API_COMPAT to detect
the openssl 1.1 API.

ASTERISK-26109 #close

Change-Id: I4e448f55ef516aedf6ad154037c35577a421a458
2017-02-14 22:45:28 +02:00
zuul 0d6c99e715 Merge "cli: Fix various CLI documentation and completion issues" into 13 2017-02-14 14:16:26 -06:00
zuul bc2104819c Merge "channel: Protect flags in ast_waitfor_nandfds operation." into 13 2017-02-14 14:16:23 -06:00
rrittgarn 9d34df9a5e app_voicemail: VoiceMailPlayMsg did not play database stored messages
When attempting to use VoiceMailPlayMsg with a realtime data backend
the message is located, but never retrieved. This patch adds the
required RETRIEVE and DISPOSE calls that will fetch the message from
the database (and IMAP storage as well for that matter).

Also, removed extraneous make_file call.

ASTERISK-26723 #close

Change-Id: I1e122dd53c0f3d7faa10f3c2b7e7e76a47d51b8c
2017-02-14 12:57:55 -06:00
Sean Bright f99e5f4de4 app_record: Add option to prevent silence from being truncated
When using Record() with the silence detection feature, the stream is
written out to the given file. However, if only 'silence' is detected,
this file is then truncated to the first second of the recording.

This patch adds the 'u' option to Record() to override that behavior.

ASTERISK-18286 #close
Reported by: var
Patches:
	app_record-1.8.7.1.diff (license #6184) patch uploaded by var

Change-Id: Ia1cd163483235efe2db05e52f39054288553b957
2017-02-14 09:12:31 -05:00
zuul e0c52c5ec2 Merge "res_pjsip.c: Fix inconsistency between warning and action." into 13 2017-02-13 12:07:03 -06:00
zuul 6958241b3f Merge "core: Cleanup some channel snapshot staging anomalies." into 13 2017-02-13 10:05:02 -06:00
Sean Bright ea8a610776 cli: Fix various CLI documentation and completion issues
* app_minivm: Use built-in completion facilities to complete optional
arguments.

* app_voicemail: Use built-in completion facilities to complete
optional arguments.

* app_confbridge: Add missing colons after 'Usage' text.

* chan_alsa: Use built-in completion facilities to complete optional
arguments.

* chan_sip: Use built-in completion facilities to complete optional
arguments. Add completions for 'load' for 'sip show user', 'sip show
peer', and 'sip qualify peer.'

* chan_skinny: Correct and extend completions for 'skinny reset' and
'skinny show line.'

* func_odbc: Correct completions for 'odbc read' and 'odbc write'

* main/asterisk: Correct and extend completions for 'core show file
version.'

* main/astmm: Use built-in completion facilities to complete arguments
for 'memory' commands.

* main/bridge: Correct completions for 'bridge kick.'

* main/ccss: Use built-in completion facilities to complete arguments
for 'cc cancel' command.

* main/cli: Add 'all' completion for 'channel request hangup.' Correct
completions for 'core set debug channel.' Correct completions for 'core
show calls.'

* main/pbx_app: Remove redundant completions for 'core show
applications.'

* main/pbx_hangup_handler: Remove unused completions for 'core show
hanguphandlers all.'

* res_sorcery_memory_cache: Add completion for 'reload' argument of
'sorcery memory cache stale' and properly implement.

Change-Id: Iee58c7392f6fec34ad9d596109117af87697bbca
2017-02-13 10:57:16 -05:00
zuul c38cd504ad Merge "chan_pjsip: Multidomain endpoint finding on call" into 13 2017-02-13 09:37:21 -06:00
Norbert Varga 17030100ca 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 12:05:07 +00:00
Joshua Colp 18f1b52601 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 11:06:17 +00:00
Richard Mudgett a46a21642e 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:32:47 -06:00
Richard Mudgett 67b21dc63a pjsip_distributor.c: Fix off-nominal tdata ref leak.
Change-Id: I571f371d0956a8039b197b4dbd8af6b18843598d
2017-02-12 15:29:05 -06:00
Sean Bright 8936568515 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:01:54 -05:00
Richard Mudgett 2817f87d27 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 11:58:59 -06:00
George Joseph c7fcc4468f 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 08:35:51 -07:00
Mark Michelson cbc23c31cf 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:53:32 -06:00
Joshua Colp 2a3df5aa22 Merge "srv: Fix crash when ast_srv_lookup is used and 0 records are returned." into 13 2017-02-08 09:14:43 -06:00
zuul 3da771bc3a Merge "res_stasis_device_state: Protect the adding/removing of subscriptions." into 13 2017-02-08 09:13:40 -06:00
Joshua Colp 7e14e086cf 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 18:12:17 +00:00
Joshua Colp 7b39d6901a 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 16:56:05 +00:00
Richard Mudgett c384dfd6b0 res_pjsip: Fix some off nominal tdata leaks.
Change-Id: I243a4be5e7fbfe604923764969c4ee04eee89b9d
2017-02-06 10:59:59 -06:00
zuul 431923feb6 Merge "Update qualifies when AOR configuration changes." into 13 2017-02-03 09:23:41 -06:00
George Joseph 95e33a1f31 Merge "channel.c: Fix unbalanced read queue deadlocking local channels." into 13 2017-02-02 23:27:33 -06:00
zuul ba201f71af Merge "res_agi: Prevent an AGI from eating frames it should not. (Re-do)" into 13 2017-02-02 22:11:07 -06:00
zuul b6eccdbef2 Merge "Add reload options to CLI/AMI stale object commands." into 13 2017-02-02 17:59:29 -06:00
zuul 0bb5c58cba Merge "Frame deferral: Revert API refactoring." into 13 2017-02-02 17:55:56 -06:00
Sean Bright 70aff89e5d res_odbc: Remove deprecated settings from sample configuration file
ASTERISK-26704 #close
Reported by: Anthony Messina

Change-Id: I976a1f94cf79c5f31e76174c61f5c6a65fd6354f
2017-02-02 12:26:12 -05:00
Joshua Colp 60f2e96d62 Merge "audiohooks: Muting a hook can mute underlying frames" into 13 2017-02-02 11:09:19 -06:00
Joshua Colp 4e18f9afac Merge "res_pjsip: Handle invocation of callback on outgoing request when error occurs." into 13 2017-02-02 10:49:58 -06:00
Sean Bright 3aee199913 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:21:39 -05:00
zuul e4f742de15 Merge "res_rtp_asterisk: Swap byte-order when sending signed linear" into 13 2017-02-01 14:50:18 -06:00
Mark Michelson 6492e91392 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 13:54:50 -06:00
Richard Mudgett 43f0ff4b69 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-01 13:33:12 -06:00
Richard Mudgett a199f94908 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-01 13:33:12 -06:00
Richard Mudgett 6bed318a66 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-01 13:33:12 -06:00
Joshua Colp e371e13b9e 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:11:56 -06:00
Sean Bright 339c30f2b6 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:35:44 -05:00
George Joseph 7fd28cefdb debug_utilities: Install ast_logescalator to /var/lib/asterisk/scripts
Forgot to install it with the original patch

Change-Id: I8bdb540a6694971ae5fe21f48d532332c6482e4c
2017-01-31 11:46:08 -07:00
zuul ea54c0e1fe Merge "make_build_h: handle backslashes in external strings" into 13 2017-01-31 08:32:58 -06:00
Joshua Colp d2f30f0225 Merge "ast_careful_fwrite to support EPIPE gracefully" into 13 2017-01-30 11:52:05 -06:00
zuul fd3f69cd05 Merge "app_queue: Fix queues randomly disappearing on reload" into 13 2017-01-30 11:28:30 -06:00
zuul 56e925f96a Merge "libastssl/pj: libastssl/pj should have an so_version" into 13 2017-01-27 19:07:55 -06:00
zuul 484e8ed5e3 Merge "debug_utilities: Add ast_logescalator" into 13 2017-01-27 17:49:43 -06:00
George Joseph 456bc3c704 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:21 -06:00
George Joseph bcb2c1f62f Merge "tests: use datadir for sound files" into 13 2017-01-27 14:51:01 -06:00
Torrey Searle 54b027916a 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
2017-01-27 07:14:14 -07:00
George Joseph d6f67df8ce Merge "test_voicemail_api: order of params to VERIFY macros" into 13 2017-01-27 07:04:18 -06:00
George Joseph e28d3c4917 Merge "res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving." into 13 2017-01-27 07:01:47 -06:00
George Joseph cb504ad6ae Merge "ari: Implement 'debug all' and request/response logging" into 13 2017-01-27 07:01:21 -06:00
kkm 3c8f84786e 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 19:14:34 -08:00
kkm 555e8cd2ba 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 19:04:30 -08:00
kkm be92f10a16 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 18:11:18 -08:00
George Joseph b39c04fc02 Merge "PJPROJECT logging: Fix detection of max supported log level." into 13 2017-01-26 18:52:31 -06:00
George Joseph f5b31cb2ae Merge "frame.c: Fix off-nominal format ref leaks." into 13 2017-01-26 16:03:28 -06:00
zuul 1a81ba335b Merge "res_musiconhold.c: Fix format ref leak when parsing MOH config class." into 13 2017-01-26 13:21:55 -06:00
Joshua Colp 616e98ce0a Merge "T.140: Fix format ref and memory leaks." into 13 2017-01-26 11:30:45 -06:00
Joshua Colp aae9df0643 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 16:58:20 +00:00
zuul a7e6f0dee5 Merge "Add notes about embedded ast_frame structs holding a format ref." into 13 2017-01-26 10:12:32 -06:00
George Joseph da098e2227 Merge "astobj2.c: Add excessive ref count trap." into 13 2017-01-26 07:35:43 -06:00
Mark Michelson 9e3150b98d Add reload options to CLI/AMI stale object commands.
Marking an object as stale in a memory cache is supposed to prime the
cache so that the next time the item is retrieved, the stale item is
deleted from the cache and a background task is run to re-populate the
cache with a fresh version of the object.

The problem is, there are some object types out there for which there is
no natural reason that they would be retrieved from the backend with any
regularity. Outbound PJSIP registrations are a good example of this. At
startup, they are read, and an object-specific state is created that
refers to the initially-retrieved object for all time.

Adding the "reload" option to the CLI/AMI commands gives the cache the
opportunity to manually re-retrieve the object from the backend, both
storing the new object in the cache and applying the new object's
configuration to the module that uses that object.

Change-Id: Ieb1fe7270ceed491f057ec5cbf0e097bde96c5c8
2017-01-25 17:42:29 -06:00
zuul 3410000948 Merge "main/app.c: Memory corruption from early format destruction." into 13 2017-01-25 15:13:49 -06:00
zuul 89e9d2cfb8 Merge "stasis_bridge.c: Fix off-nominal stasis control ref leak." into 13 2017-01-25 13:52:24 -06:00
Richard Mudgett c54f9d2bf0 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:44:26 -06:00
zuul e51193bf72 Merge "chan_oss.c: Fix format ref leak in oss_read()." into 13 2017-01-25 13:32:38 -06:00
George Joseph f93861b204 Merge "res_pjsip_endpoint_identifier_ip: Ensure error defaults to 0." into 13 2017-01-25 08:28:33 -06:00
George Joseph f2c1ee6d71 Merge "pjproject_bundled: Fix setting max log level" into 13 2017-01-24 22:30:07 -06:00
George Joseph 284b8b981e Merge "Free endpoint ACLs when destroying PJSIP endpoints." into 13 2017-01-24 15:49:07 -06:00
George Joseph 7b06dae2d8 Merge "res_pjsip_pubsub.c: Implement "pjsip show subscriptions" commands." into 13 2017-01-24 15:47:13 -06:00
Joshua Colp a2f0adccbd 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 21:39:39 +00:00
Richard Mudgett 607b3ac736 astobj2.c: Add excessive ref count trap.
Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a
2017-01-24 14:10:16 -06:00
Richard Mudgett ab8cb5a7ce 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:08 -06:00
Richard Mudgett dcd8e4b1a0 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:01:47 -06:00
Richard Mudgett 00a227e93d stasis_bridge.c: Fix off-nominal stasis control ref leak.
Change-Id: Ib17218343a6596832060180e19386da9df150ac8
2017-01-24 13:57:41 -06:00
Richard Mudgett 38a2021c68 res_musiconhold.c: Fix format ref leak when parsing MOH config class.
Change-Id: Ica8e8e2ce7604c2c61ec55bef07dc675361d2ea5
2017-01-24 13:40:11 -06:00
Richard Mudgett ab7a9fc5b2 chan_oss.c: Fix format ref leak in oss_read().
Change-Id: I0a5d56c7dcf327d60f86a4c25a23571733709fd0
2017-01-24 13:38:32 -06:00
Richard Mudgett 1484a991e1 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:36:51 -06:00
George Joseph 17f4989d49 ari: Implement 'debug all' and request/response logging
The 'ari set debug' command has been enhanced to accept 'all' as an
application name.  This allows dumping of all apps even if an app
hasn't registered yet.  To accomplish this, a new global_debug global
variable was added to res/stasis/app.c and new APIs were added to
set and query the value.

'ari set debug' now displays requests and responses as well as events.
This required refactoring the existing debug code.

* The implementation for 'ari set debug' was moved from stasis/cli.{c,h}
  to ari/cli.{c,h}, and stasis/cli.{c,h} were deleted.
* In order to print the body of incoming requests even if a request
  failed, the consumption of the body was moved from the ari stubs
  to ast_ari_callback in res_ari.c and the moustache templates were
  then regenerated.  The body is now passed to ast_ari_invoke and then
  on to the handlers.  This results in code savings since that template
  was inserted multiple times into all the stubs.

An additional change was made to the ao2_str_container implementation
to add partial key searching and a sort function.  The existing cli
code assumed it was already there when it wasn't so the tab completion
was never working.

Change-Id: Ief936f747ce47f1fb14035fbe61152cf766406bf
2017-01-24 10:48:41 -07:00
Richard Mudgett 30cb4eb57f 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:23:05 -06:00
Tzafrir Cohen cd2677f966 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:34:57 -06:00
Tzafrir Cohen b62f84bfb1 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:18 -06:00
George Joseph 48178e5918 Merge "res_pjsip_endpoint_identifier_ip: Read settings before resolving." into 13 2017-01-24 07:08:44 -06:00
Richard Mudgett e3dcb9ddd9 res_pjsip_pubsub.c: Implement "pjsip show subscriptions" commands.
ASTERISK-23828 #close

Change-Id: Ifb8a3b61f447aedc58a8e6b36a810f7566018567
2017-01-23 18:06:08 -06:00
Mark Michelson 75497c33ea Free endpoint ACLs when destroying PJSIP endpoints.
If endpoint ACLs were specified, they were not being freed
when endpoints were destroyed. On systems with realtime endpoints, this
could add up quickly since each DB lookup would allocate the ACL without
freeing it.

ASTERISK-26731 #close
Reported by Ustinov Artem

Change-Id: Ie1f8bf5b7a0de628c975beba01e69c56893331ad
2017-01-23 16:20:42 -06:00
George Joseph 5a4cd9fc6f Merge "LISTFILTER: Remove outdated ERROR message." into 13 2017-01-23 15:05:06 -06:00
George Joseph 9dc30b3a6d Merge "res_pjsip_pubsub.c: Fix incorrect message string wrapping." into 13 2017-01-23 15:01:12 -06:00
Joshua Colp 4fc146e287 Merge "res_pjsip_pubsub.c: Fix AMI event list counts." into 13 2017-01-23 11:10:10 -06:00
George Joseph 177e81ee47 pjproject_bundled: Fix setting max log level
An earlier attempt to prevent pjsua from spitting out an extra 6795
lines of debug output every time the testsuite called it was also
turning off the ability for asterisk to output debug info when it
needed to.  This patch reverts the earlier fix and instead adds
a pjproject patch that sets the startup log level to 1 for pjsua
pjsystest and the pjsua python binding.  This is an asterisk-only
patch that does not affect pjproject functionality and will not be
submitted upstream.

Change-Id: I347a8b58b2626f2906ccfc1d339e907627a0c9e8
2017-01-23 10:31:54 -06:00
Joshua Colp 6d23b2e360 res_pjsip_endpoint_identifier_ip: Read settings before resolving.
An option has been added, srv_lookups, which controls whether
SRV lookups are performed on the provided match hosts or not.
It was possible for this option to be applied after resolution
had already happened.

This change makes it so hosts are stored away, settings are read
and applied, and then resolution is done. This ensures that no
matter the ordering the srv_lookups option is in effect.

ASTERISK-26735

Change-Id: I750378cb277be0140f8c5539450270afbfc43388
2017-01-23 16:08:37 +00:00
Joshua Colp fb21931a52 Merge "res_pjsip_pubsub.c: Eliminate trivial SCOPED_LOCK usage." into 13 2017-01-23 09:37:46 -06:00
Richard Mudgett a969bf3577 LISTFILTER: Remove outdated ERROR message.
Feeding LISTFILTER an empty variable results in an invalid ERROR message.
Earlier changes made the message useless because we can no longer tell if
the variable is empty or does not exist.  It is valid to try to remove a
value from an empty list just as it is valid to try to remove a value that
is not in a non-empty list.

* Removed the outdated ERROR message.

* Added more test cases to the LISTFILTER unit test.

Change-Id: Ided9040e6359c44a335ef54e02ef5950a1863134
2017-01-22 17:46:02 -06:00
zuul 8c3ec5038f Merge "res_pjsip: alloca can never fail." into 13 2017-01-20 16:14:39 -06:00
zuul 7f68f69732 Merge "debug_utilities: Create ast_loggrabber" into 13 2017-01-20 14:24:33 -06:00
zuul f1186fdfeb Merge "abstract/fixed/adpative jitter buffer: disallow frame re-inserts" into 13 2017-01-20 13:44:42 -06:00
Richard Mudgett 3890337e7a res_pjsip_pubsub.c: Fix AMI event list counts.
Fix the AMI PJSIPShowSubscriptionsInbound, PJSIPShowSubscriptionsOutbound,
and PJSIPShowResourceLists actions event counts.  The reported counts may
not necessarily be accurate depending on what happens.

The subscriptions count would be wrong if Asterisk ever has outbound
subscriptions.

The resource list count could be wrong if a list were added or removed
during the AMI action being processed.

Change-Id: I4344301827523fa174960a42c413fd19abe4aed5
2017-01-20 12:38:40 -06:00
Richard Mudgett fe4801c4f9 res_pjsip_pubsub.c: Fix incorrect message string wrapping.
Change-Id: Id771e6fe56d89ce365ddcbb423f820af97211120
2017-01-20 12:36:11 -06:00
Richard Mudgett 46484b8730 res_pjsip_pubsub.c: Eliminate trivial SCOPED_LOCK usage.
Change-Id: Ie0b69a830385452042fa19e7d267c6790ec6b6be
2017-01-20 12:33:01 -06:00
Richard Mudgett 8160474d7d res_pjsip: alloca can never fail.
Change-Id: Ia2a6158e5fdf311bc2a1c0c43417978de504b1f1
2017-01-20 12:26:58 -06:00
George Joseph c628a7acac debug_utilities: Create ast_loggrabber
ast_loggrabber gathers log files from customizable search patterns,
optionally converts POSIX timestamps to a readable format and
tarballs the results.

Also a few tweaks were made to ast_coredumper.

Change-Id: I8bfe1468ada24c1344ce4abab7b002a59a659495
(cherry picked from commit 5fa1c56d7e)
2017-01-20 11:21:47 -06:00
Richard Mudgett e335b706ee res_pjsip_outbound_authenticator_digest.c: Fix spacing in warning messages.
Change-Id: I573f0343c0c63a785cd4da60d57cc9f8b9ce7f49
2017-01-20 07:17:12 -06:00
Kevin Harwell 883e7fde31 abstract/fixed/adpative jitter buffer: disallow frame re-inserts
It was possible for a frame to be re-inserted into a jitter buffer after it
had been removed from it. A case when this happened was if a frame was read
out of the jitterbuffer, passed to the translation core, and then multiple
frames were returned from said translation core. Upon multiple frames being
returned the first is passed on, but sebsequently "chained" frames are put
back into the read queue. Thus it was possible for a frame to go back into
the jitter buffer where this would cause problems.

This patch adds a flag to frames that are inserted into the channel's read
queue after translation. The abstract jitter buffer code then checks for this
flag and ignores any frames marked as such.

Change-Id: I276c44edc9dcff61e606242f71274265c7779587
2017-01-17 17:08:36 -06:00
Richard Mudgett 473330983b taskprocessor.c: Change when high water warning logged.
The task processor queue reached X scheduled tasks message was originally
intended to get logged only once per task processor to prevent spamming
the log.  This is no longer necessary since high and low water thresholds
can better control when the message is logged.

It is beneficial to generate the warning each time a task processor
reaches the high water level because PJSIP stops processing new requests
while any high water alert is active.  Without this change you would have
to enable at least debug level 3 logging to know about a repeated alert
trigger.

* Made generate the warning message whenever a task is pushed into the
task processor that triggers the high water alert.

* Appended 'again' to the warning for a repeated high water alert trigger.

Change-Id: Iabf75a004f7edaf1e5e8c323099418e667cac999
2017-01-13 21:30:53 -06:00
zuul b9c73de158 Merge "res_rtp_asterisk: Fix bug in function CHANNEL(rtcp, all_rtt)" into 13 2017-01-12 19:54:09 -06:00
Aaron An 0047b1bc49 res_rtp_asterisk: Fix bug in function CHANNEL(rtcp, all_rtt)
Function CHANNEL(rtcp,all_rtt) CHANNEL(rtcp,all_loss) CHANNEL(rtcp,all_jitter)
always return 0.0 due to wrong define of macro "AST_RTP_SATA_SET" and
"AST_RTP_STAT_STRCPY".
It should compare "combined" with "stat" not "current_stat".

ASTERISK-26710 #close
Reported-by: Aaron An
Tested-by: AaronAn

Change-Id: Id4140fafbf92e2db689dac5b17d9caa009028a15
2017-01-12 16:55:45 -06:00
George Joseph 47474cfd54 debug_utilities: Create the ast_coredumper utility
This utility allows easy manipulation of asterisk coredumps.

* Configurable search paths and patterns for existing coredumps
* Can generate a consistent coredump from the running instance
* Can dump the lock_infos table from a coredump
* Dumps backtraces to separate files...
  - thread apply 1 bt full -> <coredump>.thread1.txt
  - thread apply all bt -> <coredump>.brief.txt
  - thread apply all bt full -> <coredump>.full.txt
  - lock_infos table -> <coredump>.locks.txt
* Can tarball corefiles and optionally delete them after processing
* Can tarball results files and optionally delete them after processing
* Converts ':' in coredump and results file names '-' to facilitate
  uploading.  Jira for instance, won't accept file names with colons
  in them.

Tested on Fedora24+, Ubuntu14+, Debian6+, CentOS6+ and FreeBSD9+[1].

[1] For *BSDs, the "devel/gdb" package might have to be installed to
get a recent gdb.  The utility will check all instances of gdb
it finds in $PATH and if one isn't found that can run python, it
prints a friendly error.

Change-Id: I935d37ab9db85ef923f32b05579897f0893d33cd
2017-01-11 12:07:33 -06:00
Joshua Colp ac4d6828f5 Merge "res_pjsip_endpoint_identifier_ip: Add support for SRV lookups." into 13 2017-01-09 12:47:52 -06:00
Joshua Colp d30bef1de9 Merge "chan_sip: Remember SDP negotiation on SIP_CODEC_INBOUND." into 13 2017-01-09 08:46:32 -06:00
Joshua Colp bc5102adec Merge "res_pjsip: Fix known compact header issues" into 13 2017-01-09 07:23:10 -06:00
Joshua Colp fdfa805552 Merge changes from topic 'ASTERISK-26672' into 13
* changes:
  res_rtp_asterisk.c: Fix uninitialized memory crash.
  chan_rtp.c: Fix uninitialized memory crash.
2017-01-09 07:22:18 -06:00
George Joseph f8cd73ec3c pjproject_bundled: Fix compilation with MALLOC_DEBUG
When MALLOC_DEBUG was specified, make was failing.  Immediately
remaking would work.  The issues was in the ordering of the make
dependencies.

Change-Id: If6030b54fc693f3179f32bfd20c6b5d5f1b3f7cd
2017-01-08 09:37:04 -07:00
zuul ecf49ae69a Merge "res_rtp_asterisk.c: Initialize ourip passed to ast_find_ourip()." into 13 2017-01-06 10:23:52 -06:00
Joshua Colp 37aaaa2da2 res_pjsip_endpoint_identifier_ip: Add support for SRV lookups.
This change implements SRV support for the IP based endpoint
identifier module. All possible addresses through SRV are looked
up and added as matches. If no SRV records are available a
fallback to normal host resolution is done. If an IP address
is provided then no SRV lookup occurs.

This is configured using the "srv_lookups" option on the
identify section and defaults to "yes".

ASTERISK-26693

Change-Id: I6b641e275bf96629320efa8b479737062aed82ac
2017-01-06 14:56:41 +00:00
zuul bd37196774 Merge "bridge_native_rtp.c: Minor code cleanups." into 13 2017-01-05 13:22:43 -06:00
zuul 1fc8838883 Merge "res_pjsip_session: Access SIPDOMAIN via Dialplan." into 13 2017-01-05 07:43:51 -06:00
George Joseph 6fcf248fe3 Merge "acl.c: Improve ast_ouraddrfor() diagnostic messages." into 13 2017-01-04 22:06:40 -06:00
George Joseph fd5fdb4e59 Merge "bridge_native_rtp.c: Fix native rtp bridge data race." into 13 2017-01-04 22:05:31 -06:00
George Joseph 3c48ab0532 Merge "chan_pjsip: Use session for retrieving CHANNEL() information." into 13 2017-01-04 16:25:47 -06:00
Alexander Traud 569dac8e50 res_pjsip_session: Access SIPDOMAIN via Dialplan.
This feature was available in the SIP channel driver chan_sip. For example,
Asterisk is the outbound proxy and has to handle all SIP-URIs, even domains not
local to Asterisk. In that case, SIPDOMAIN is used in the Dialplan, to detect
and dial remote SIP-URIs. This change here sets the SIP destination domain of
an inbound call (SIPDOMAIN) in the SIP channel driver res_pjsip as well.

ASTERISK-26670 #close

Change-Id: I27c880dc404a3c1c6792e1ba3545475339577243
2017-01-04 07:13:05 -06:00
Alexander Traud 367128e70b chan_sip: Remember SDP negotiation on SIP_CODEC_INBOUND.
After a SIP_CODEC_INBOUND in the dialplan, do not continue with cached formats
but remember the joint format. Cached formats contain default parameters,
often create an empty fmtp line. However, a joint format might have passed
format_get_joint(.) in a res_format_attr_* module (like Opus Codec) and
contain the resulting format parameters from a SDP negotiation.

ASTERISK-26691 #close

Change-Id: I35712d98a793d4c3efdd156cec57deab9014b1dc
2017-01-04 06:02:27 -06:00
George Joseph d7e5a747c3 pjproject_bundled: Compile pjsua with max log level = 2
A while back, we changed config_site.h to set PJ_LOG_MAX_LEVEL = 6.
This allowed us to control the log level better from inside Asterisk.
An unfortunate side effect of this was that the pjsua binary and
python bindings were also compiled with log level set to 6 so whenever
a testsuite test that uses pjsua runs, it spits out 6795 lines of
debug in an instant even before the test starts.  I believe this
overruns the Jenkins capture buffer and prevents the test from
properly terminating.  In turn, this results in the testsuite just
hanging until the job is killed.  It's more frequent on the higher
end agents because they can spit out the messages faster.

Unfortunately, the messages are all spit out before we have control
of the python pj.Lib instance where we can set logging levels so the
only alternative was to actually compile pjsua and _pjsua.so with an
overridden PJ_LOG_MAX_LEVEL.  Although defining a lower max level was
done in the Makefile, the define in config_site.h had to be wrapped
with "#ifndef" so the change would take effect.

Change-Id: I2af9e7d48dde1927279c586c9c725d868fe6f3ff
2017-01-03 16:03:21 -06:00
Joshua Colp 34e728cfb9 chan_pjsip: Use session for retrieving CHANNEL() information.
The CHANNEL() dialplan function implementation for PJSIP allows
querying of PJSIP specific information. This used the channel
passed in to get the PJSIP session and associated information.
It is possible for this channel to be masqueraded and end
up as a different channel type by the time the information
request is actually acted upon.

This change retrieves the PJSIP session safely and accesses
data from it (including channel). This provides a guarantee
that the session and channel will not be altered when the
request is being acted upon.

ASTERISK-26673

Change-Id: I335e12b89e1820cafdd92b3e7526b8ba649eb7e6
2017-01-03 11:46:25 +00:00
Joshua Elson a398f98b08 res_pjsip: Fix known compact header issues
ASTERISK-26684 #close

Change-Id: Ifd7e401c45015119dd5e8421dbfe3afa6381744a
2016-12-31 18:56:09 -07:00
George Joseph 0ab9d103f6 res_pjsip_refer: Handle compact Refer-To header.
refer_incoming_refer_request needed to look for the "r" header as well
as the "Refer-To" header.

ASTERISK-26655 #close
patches:
	refer_compact_fix.diff	submitted by JoshE (license 6075)

Change-Id: I610410a99b02427ea5db887aeb454d5f12c2259f
2016-12-30 08:10:09 -07:00
Richard Mudgett 21151408f7 bridge_native_rtp.c: Minor code cleanups.
In native_rtp_bridge_compatible_check()

* Made one variable declaration per line.

* Extracted if test assignment to make the test easier to see.

* Made long if tests easier to see the combinatorial logic.

* Added bridge id to a couple debug messages.

Change-Id: I65bc5732aa7c9a2537f062f106fbea711cf2daad
2016-12-23 13:10:18 -06:00
Richard Mudgett 9dcf9e9cea bridge_native_rtp.c: Fix native rtp bridge data race.
native_rtp_bridge_compatible() didn't lock the bridge channels before
checking the channels for native bridging ability.  As a result, one of
the channel's native format capabilities structure got replaced out from
under the native bridge check.  Use of a stale pointer to freed memory
causes bad things to happen.

MALLOC_DEBUG, DO_CRASH, and the
tests/channels/pjsip/transfers/blind_transfer/caller_direct_media
testsuite test caught this.

* Add missing channel locking in native_rtp_bridge_compatible().

Change-Id: If25fdb3ac8e85563c4857fb8216b3d9dc3d0fa53
2016-12-23 13:10:04 -06:00
Richard Mudgett a9e459f8ac res_rtp_asterisk.c: Fix uninitialized memory crash.
ast_rtp_remote_address_set() could pass an uninitialized 'us' parameter to
ast_ouraddrfor().  If ast_ouraddrfor() returns an error then the 'us'
parameter may not get initialized.  Thus when the code tries to save the
'us' parameter to the local address we could try to copy a ridiculous
sized memory buffer and segfault.

* Made pass an initialized 'us' parameter to ast_ouraddrfor().

* Optimized out the 'us' struct variable.

ASTERISK-26672 #close

Change-Id: I4acea5dcdf0813da2c7d3e11c2d6067d160d17dc
2016-12-22 12:22:44 -06:00
Richard Mudgett bcdd282ada res_rtp_asterisk.c: Initialize ourip passed to ast_find_ourip().
We access uninitialized memory when the 'ourip' parameter does not
have an initial guess to our IP address.

ASTERISK-26672

Change-Id: I35507ea1ad7455d2be188f6ccdd4add7bd150e15
2016-12-22 12:16:20 -06:00
Richard Mudgett ac31233dbe acl.c: Improve ast_ouraddrfor() diagnostic messages.
* Made not generate strings unless they will actually be used.

ASTERISK-26672

Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3
2016-12-22 12:16:20 -06:00
Richard Mudgett 0aa5db4b38 chan_rtp.c: Fix uninitialized memory crash.
unicast_rtp_request() could pass an uninitialized 'us' parameter to
ast_ouraddrfor().  If ast_ouraddrfor() returns an error then the 'us'
parameter may not get initialized.  Thus when the code tries to save the
'us' parameter to the local address we could try to copy a ridiculous
sized memory buffer and segfault.

* Made pass an initialized 'us' parameter to ast_ouraddrfor() and abort
the UnicastRTP channel request if it fails.

ASTERISK-26672

Change-Id: I1ef7a7c09f4da4f15dcb6de660d2bcac5f2a95c0
2016-12-22 12:16:20 -06:00
Richard Mudgett e2fa3c7eda res_rtp_asterisk.c: Fix off nominal memory leak.
Change-Id: I95b1088d11244a2edae6607c12fbf33b38658a75
2016-12-21 11:14:04 -06:00
Joshua Colp bc6fc3ab4d Merge "pjproject_bundled: Make build single threaded" into 13 2016-12-20 05:31:15 -06:00
Joshua Colp 2a94c2c97e Merge "res_pjsip: Add/update ERROR msg if invalid URI." into 13 2016-12-20 05:30:37 -06:00
George Joseph eaa05b039b Merge "autosupport: Add 'pjproject show buildopts'" into 13 2016-12-19 22:21:19 -06:00
George Joseph 4ea24af6c6 Merge "MESSAGE: Flush Message/ast_msg_queue channel alert pipe." into 13 2016-12-19 22:18:28 -06:00
Joshua Colp 2b675ce122 Merge "chan_dahdi.c: Fix bounds check regression." into 13 2016-12-19 18:27:48 -06:00
Joshua Colp 4a8766f490 Merge "chan_sip: Reorder unload_module to deal with stuck TCP threads." into 13 2016-12-19 16:19:11 -06:00
zuul c8aff2c51b Merge "app_queue: Ensure member is removed from pending when hanging up." into 13 2016-12-19 12:41:09 -06:00
Martin Tomec d13be4eff6 app_queue: Ensure member is removed from pending when hanging up.
In some cases member is added to pending_members, and the channel
is hung up before any extension state change. So the member would
stay in pending_members forever. So when we call do_hang, we
should also remove member from pending.

ASTERISK-26621 #close

Change-Id: Iae476b5c06481db18ebe0fa594b3e80fdc9a7d54
2016-12-19 10:38:53 +01:00
George Joseph 815f755155 pjproject_bundled: Make build single threaded
There were just too many issues in various environments with
multi threaded building of pjproject.  It doesn't really speed
things up anyway since asterisk is already being compiled in
parallel.

Change-Id: Ie5648fb91bb89b4224b6bf43a0daa1af793c4ce1
2016-12-18 14:23:17 -07:00
Corey Farrell 493849dcd7 chan_sip: Reorder unload_module to deal with stuck TCP threads.
In some situations TCP threads may become frozen.  This creates the
possibility that Asterisk could segfault if they become unfrozen after
chan_sip has been dlclose'd.  This reorders the unload_module process to
allow abort if threads do not exit within 5 seconds.

High level order as follows:
1) Unregister from the core to stop new requests.
2) Signal threads to stop
3) Clear config based tables (but do not free the table itself).
4) Verify that threads have shutdown, cancel unload if not.
5) Clean all remaining resources.

ASTERISK-26586

Change-Id: Ie23692041d838fbd35ece61868f4c640960ff882
2016-12-17 11:32:14 -05:00
David M. Lee ab447f8a6a configure: fix with-pjproject-bundled
The AC_ARG_WITH macro's shell variable is withval; not enableval. Purely
coincidentally, the option would work when --enable-dev-mode is given.

Also fixed a portability problem with bootstrap.sh, since -printf is not
a portable option for find.

Change-Id: I0f0e5b1a934b5af5737713834361e9c95b96b376
2016-12-16 07:53:11 -06:00
Richard Mudgett 35736d419a autosupport: Add 'pjproject show buildopts'
Change-Id: I8aa55a7c3fb175235ddc7f85e9457d5102d06fa7
2016-12-15 13:26:43 -06:00
Richard Mudgett 4b285d226d chan_dahdi.c: Fix bounds check regression.
Caused by ASTERISK-25494

Change-Id: I1fc408c1a083745ff59da5c4113041bbfce54bcb
2016-12-14 14:22:56 -06:00
Richard Mudgett 9114574188 res_pjsip: Add/update ERROR msg if invalid URI.
ASTERISK-24499

Change-Id: Ie305153e47e922233b2ff24715e0e326e5fa3a6c
2016-12-14 11:30:58 -06:00
Richard Mudgett 75a6afbec5 MESSAGE: Flush Message/ast_msg_queue channel alert pipe.
ASTERISK-25083

Change-Id: Id54baa57a8dbca84e29f28bcd2ffc0a5ac12d8b2
2016-12-14 11:30:58 -06:00
George Joseph 91485734a4 res_sorcery_memory_cache: Change an error to a debug message
When a sorcery user calls ast_sorcery_delete on an object that
may have already expired from the cache, res_sorcery_memory_cache
spits out an ERROR.  Since this can happen frequently and validly when
an inbound registration expires after the cache entry expired, the
errors are unnecessary and misleading.  Changed to a debug/1.

Change-Id: Idf3a67038c16e3da814cf612ff4d6d18ad29ecd7
2016-12-14 08:26:37 -06:00
George Joseph cd46e86491 pjproject_bundled: Retry download if previously saved tarball is bad
If a tarball is corrupted during download, the makefile will attempt to
download it again. If the tarball somehow gets corrupted after it's
downloaded however, the makefile was just failing.  We now
retry the download.

ASTERISK-26653 #close

Change-Id: I1b24d454852d80186f60c5a65dc4624ea8a1c359
2016-12-09 07:14:09 -07:00
Joshua Colp 791c15942b Merge "Fix typo in chan_sip" into 13 2016-12-09 05:33:16 -06:00
Joshua Colp c7eb439953 Merge "chan_sip: Delete unneeded check" into 13 2016-12-09 05:32:09 -06:00
zuul 5f9316e143 Merge "Small code cleanup in chan_sip" into 13 2016-12-09 03:25:12 -06:00
zuul 949a4a443a Merge "res_pjsip: Fix 'A = B != C' kind." into 13 2016-12-08 21:54:37 -06:00
Joshua Colp 939010fc15 Merge "res_pjsip_registrar: AMI Add RegistrationInboundContactStatuses command" into 13 2016-12-08 18:42:06 -06:00
Badalyan Vyacheslav 22820e10fe chan_sip: Delete unneeded check
P is always true. We check it before

Change-Id: Iee61cda002a9f61aee26b9f66c5f9b59e3389efb
2016-12-08 16:55:51 -06:00
Badalyan Vyacheslav 6aa2c5e5f9 Small code cleanup in chan_sip
The conditional expressions of the 'if' operators situated
alongside each other are identical.

Change-Id: I2cf7c317b106ec14440c7f1b5dcfbf03639f748a
2016-12-08 16:54:47 -06:00
Badalyan Vyacheslav b596fac838 Fix typo in chan_sip
The conditional expressions of the 'if' operators
situated alongside each other are identical.

Change-Id: I652b6dcddb3be007e669a6aa8107edb31a1ddafb
2016-12-08 16:54:06 -06:00
Badalyan Vyacheslav 483ed9f1aa res_pjsip: Fix 'A = B != C' kind.
Consider reviewing the expression of the 'A = B != C' kind.
The expression is calculated as following: 'A = (B != C)'

Change-Id: Ibaa637dfda47d51a20e26069d3103e05ce80003d
2016-12-08 13:22:13 -06:00
Kevin Harwell f9644de0bd Merge "res_format_attr_opus: Fix crash when fmtp contains spaces." into 13 2016-12-08 11:07:12 -06:00
Walter Doekes 41c6319c4e chan_sip: Do not allow non-SP/HTAB between header key and colon.
RFC says SIP headers look like:

    HCOLON  =  *( SP / HTAB ) ":" SWS
    SWS     =  [LWS]                    ; sep whitespace
    LWS     =  [*WSP CRLF] 1*WSP        ; linear whitespace
    WSP     =  SP / HTAB                ; from rfc2234

chan_sip implemented this:

    HCOLON  =  *( LOWCTL / SP ) ":" SWS
    LOWCTL  = %x00-1F                   ; CTL without DEL

This discrepancy meant that SIP proxies in front of Asterisk with
chan_sip could pass on unknown headers with \x00-\x1F in them, which
would be treated by Asterisk as a different (known) header.  For
example, the "To\x01:" header would gladly be forwarded by some proxies
as irrelevant, but chan_sip would treat it as the relevant "To:" header.

Those relying on a SIP proxy to scrub certain headers could mistakenly
get unexpected and unvalidated data fed to Asterisk.

This change fixes so chan_sip only considers SP/HTAB as valid tokens
before the colon, making it agree on the headers with other speakers of
SIP.

ASTERISK-26433 #close
AST-2016-009

Change-Id: I78086fbc524ac733b8f7f78cb423c91075fd489b
2016-12-08 08:18:28 -06:00
Joshua Colp 888142e891 res_format_attr_opus: Fix crash when fmtp contains spaces.
When an opus offer or answer was received that contained an
fmtp line with spaces between the attributes the module would
fail to properly parse it and crash due to recursion.

This change makes the module handle the space properly and
also removes the recursion requirement.

ASTERISK-26579

Change-Id: I01f53e5d9fa9f1925a7365f8d25071b5b3ac2dc3
2016-12-08 11:46:30 +00:00
George Joseph ebc67d3053 res_pjsip_registrar: AMI Add RegistrationInboundContactStatuses command
The PJSIPShowRegistrationsInbound AMI command was just dumping out
all AORs which was pretty useless and resource heavy since it had
to get all endpoints, then all aors for each endpoint, then all
contacts for each aor.

PJSIPShowRegistrationInboundContactStatuses sends ContactStatusDetail
events which meets the intended purpose of the other command and has
significantly less overhead.  Also, some additional fields that were
added to Contact since the original creation of the ContactStatusDetail
event have been added to the end of the event.

For compatibility purposes, PJSIPShowRegistrationsInbound is left
intact.

ASTERISK-26644 #close

Change-Id: I326f12c9ecb52bf37ba03f0748749de4da01490a
2016-12-07 18:11:11 -06:00
Joshua Colp 738203f6e6 Merge "Bundled pjproject: Fix finding SIP transactions." into 13 2016-12-07 13:38:10 -06:00
Richard Mudgett d506874477 Bundled pjproject: Fix finding SIP transactions.
Occasionally SIP message transactions are not found when they should be.
In the particular case an incoming INVITE transaction is CANCELed but the
INVITE transaction cannot be found so a 481 response is returned for the
CANCEL.  The problematic calls have a '_' character in the Via branch
parameter.

The problem is in the pjproject PJ_HASH_USE_OWN_TOLOWER feature's code.
The problem with the "own tolower" code is that it does not calculate the
same hash value as when the pj_tolower() function is used.  The "own
tolower" code will erroneously modify the ASCII characters '@', '[', '\\',
']', '^', and '_'.  Calls to pj_hash_calc_tolower() can use the
PJ_HASH_USE_OWN_TOLOWER substitute algorithm when enabled.  Calls to
pj_hash_get_lower(), pj_hash_set_lower(), and pj_hash_set_np_lower() call
find_entry() which never uses the PJ_HASH_USE_OWN_TOLOWER algorithm.  As a
result you may not be able to find a hash tabled entry because the
calculated hash values would differ.

* Simply disable PJ_HASH_USE_OWN_TOLOWER.

ASTERISK-26490 #close

Change-Id: If89bfdb5f301b8b685881a9a2a6e0c3c5af32253
2016-12-07 06:15:52 -06:00
George Joseph 4b233675d8 pjproject_bundled: Fix missing inclusion of symbols
Added back in a -g3, and an -O3 when DONT_OPTIMIZE is not set, to
the CFLAGS.  Not sure how they went missing.

Also fixed an uninstall problem where we weren't removing the
symlink from libasteriskpj.so.2 to libasteriskpj.so.  While I was
there, I fixed it for libasteriskssl as well.

Change-Id: I9e00873b1e9082d05b5549d974534b48a2142556
2016-12-06 11:19:27 -07:00
Joshua Colp f08095ef18 Merge "res_pjsip_outbound_registration.c: Filter redundant statsd reporting." into 13 2016-12-06 05:34:38 -06:00
Joshua Colp b9a79a56c7 Merge "Remove files that got merged in error somehow to the 13 branch." into 13 2016-12-05 11:43:21 -06:00
Richard Mudgett 580f83dac7 Remove files that got merged in error somehow to the 13 branch.
Change-Id: Id79e2226c31084f9252d5aede9050d3cf13322c8
2016-12-02 12:05:44 -06:00
Richard Mudgett 61ba2a014a res_pjsip_outbound_registration.c: Filter redundant statsd reporting.
Increasing the testsuite shutdown timeout before forcibly killing
Asterisk allowed more events to be sent out.  Some tests failed as
a result.  The tests/channels/pjsip/statsd/registrations failed
because we now get the statsd events that a comment in the test
configuration stated couldn't be intercepted.  Unfortunately, we
get a variable number of events because of internal status state
transition races generating redundant statsd events.

We were reporting redundant statsd PJSIP.registrations.state changes
for internal state changes that equated to the same thing publicly.

* Made update_client_state_status() filter out redundant statsd
updates.

ASTERISK-26527

Change-Id: If851c7d514bb530d9226e4941ba97dcf52000646
2016-12-02 11:49:12 -06:00
Joshua Colp fdf0a2afb0 Merge "res_pjsip/chan_sip: Advertise 'ws' in the SIP URI transport parameter" into 13 2016-12-02 11:30:09 -06:00
Joshua Colp 8d56016ae4 Merge "tcptls: Use new certificate upon sip reload" into 13 2016-12-02 07:56:51 -06:00
Joshua Colp 28b76ed667 Merge "PJPROJECT logging: Made easier to get available logging levels." into 13 2016-12-02 05:38:05 -06:00
Joshua Colp c3a509be7e Merge "res_rtp: Fix regression when IPv6 is not available." into 13 2016-12-01 15:51:06 -06:00
Joshua Colp cd5e9a89d1 Merge "res_calendar_caldav: Add support reading gmail calendar" into 13 2016-12-01 15:28:09 -06:00
Joshua Colp bddc60df73 Merge "Frame deferral: Re-queue deferred frames one-at-a-time." into 13 2016-12-01 10:38:34 -06:00
Joshua Colp 662a4741e2 Merge "OpenSSL 1.1.0 support" into 13 2016-12-01 05:08:52 -06:00
Guido Falsi 2ceb609edb res_rtp: Fix regression when IPv6 is not available.
The latest Release candidate fails to create RTP streams when IPv6
is not available. Due to the changes made in September the ast_sockaddr
structure passed around to create these streams is always of AF_INET6
type, causing failure when used for IPv4. This patch adds a utility
function to check for availability of IPv6 and applies such check
at startup to determine how to create the ast_sockaddr structures.

ASTERISK-26617 #close

Change-Id: I627a4e91795e821111e1cda523f083a40d0e0c3e
2016-11-30 20:04:31 +00:00
Eduardo S. Libardi 53459cdaa9 res_calendar_caldav: Add support reading gmail calendar
The response from gmail calendar includes the string name
"caldav:calendar-data". res_calendar_caldav implements
the example included in RFC 4791: string "C:calendar-data".
When reading the calendar, res_calendar_caldav compare the
string and if does not match just discards the event.
This commit compares the response to both strings,
successfully loading gmail calendar events.
Writing to gmail calendar is working prior to this fix.

ASTERISK-26624
Reported by: Eduardo S. Libardi

Change-Id: Ia1eef10552ae616efb645d390f5ffe81260d7d4a
2016-11-30 14:16:10 -05:00
Richard Mudgett 44fe4a5769 PJPROJECT logging: Made easier to get available logging levels.
Use of the new logging is as simple as issuing the new CLI command or
setting the new pjproject.conf option.

Other options that can affect the logging are how you have the pjproject
log levels mapped to Asterisk log types in pjproject.conf and if you have
configured Asterisk to log the DEBUG type messages.  Altering the
pjproject.conf level mapping shouldn't be necessary for most installations
as the default mapping is sensible.  Configuring Asterisk to log the DEBUG
message type is standard practice for collecting debug information.

* Added CLI "pjproject set log level" command to dynamically adjust the
maximum pjproject log message level.

* Added CLI "pjproject show log level" command to see the currently set
maximum pjproject log message level.

* Added pjproject.conf startup section "log_level" option to set the
initial maximum pjproject log message level so all messages could be
captured from initialization.

* Set PJ_LOG_MAX_LEVEL to 6 to compile in all defined logging levels into
bundled pjproject.  Pjproject will use the currently set run time log
level to determine if a log message is generated just like Asterisk
verbose and debug logging levels.

* In log_forwarder(), made always log enabled and mapped pjproject log
messages.  DEBUG mapped log messages are no longer gated by the current
Asterisk debug logging level.

* Removed RAII_VAR() from res_pjproject.c:get_log_level().

ASTERISK-26630 #close

Change-Id: I6dca12979f482ffb0450aaf58db0fe0f6d2e5389
2016-11-30 13:13:58 -06:00
Mark Michelson 17b0b91afa Frame deferral: Re-queue deferred frames one-at-a-time.
The recent change that made frame deferral into an API had a behavior
change to it. When frame deferral was completed, we would take all of
the deferred frames and queue them all onto the channel in one call to
ast_queue_frame_head(). Before frame deferral was API-ized, places that
performed manual frame deferral would actually take each deferred frame
and queue them onto the channel.

This change in behavior caused the confbridge_recording test to start
failing consistently. Without going too crazily deep into the details,
a channel was getting "stuck" in an ast_safe_sleep(). An AMI redirect
was attempting to break it out of the sleep, but because there were more
frames in the channel read queue than expected, the channel ended up
being unable to break from its sleep loop.

By restoring the behavior of individual frame queuing after deferral,
the test starts passing again.

Note, this points to a potential underlying issue pointing to an
"unbalance" that can occur when queuing multiple frames at once,
and so a follow-up issue is being created to investigate that
possibility.

Change-Id: Ied5dacacda06d343dea751ed5814a03364fe5a7d
2016-11-30 10:48:39 -06:00
zuul eec82c6221 Merge "chan_pjsip: fix switching sending codec when asymmetric_rtp_codec=no" into 13 2016-11-30 10:48:13 -06:00
zuul 3d43e5ed3c Merge "chan_sip: Fix segfault during module unload" into 13 2016-11-30 07:56:43 -06:00
Tzafrir Cohen b0c9f07f04 OpenSSL 1.1.0 support
OpenSSL 1.1.0 includes some major changes in the interface. See
https://wiki.openssl.org/index.php/1.1_API_Changes .

Status: Right now there are still a few deprecation notes with OpenSSL
1.1.0. But it's a start.

Changes:
* CRYPTO_LOCK is no longer available. Replace it with its value for now.
  I don't completely understand what it is used for there.
* Remove several functions from libasteriskssl that seem to no longer be
  needed.
* Structures have become opaque and are accesses with accessors.
* ERR_remove_thread_state() no longer needed.
* SSLv2 code now could no longer be used in 1.1.

ASTERISK-26109 #close

Change-Id: I5e29d477d486ca29b6aae0dc2f5dff960c1cb82b
2016-11-30 08:09:21 -05:00
Matt Jordan a33ed3327a res/res_pjsip: Fix documentation whitespace issues
Tabs > Spaces.

Change-Id: If1e43a71822615a898e958e0f8b2e882606f0bd0
2016-11-28 15:12:45 -06:00
Mark Michelson 2bae7f4ed9 Merge "build_tools: Fix download_externals to handle certified branches" into 13 2016-11-28 14:44:28 -06:00
zuul e6ecbdf001 Merge "autoconf: more variants for OSARCH linux-gnu" into 13 2016-11-28 14:38:55 -06:00
Matt Jordan 09c36a6535 res_pjsip/chan_sip: Advertise 'ws' in the SIP URI transport parameter
Per RFC 7118 5.2, the SIP URI 'transport' parameter should advertise
'ws' when WebSockets are to be used as the transport. This applies to
both secure and insecure WebSockets.

There were two bugs in Asterisk with respect to this:

(1) The most egregious occurs in res_pjsip. There, we advertise 'ws' for
    insecure websockets and 'wss' for secure websockets. While this
    would seem to make sense - since 'WS' and 'WSS' are used for the Via
    Transport parameter - this is not the case for the SIP URI. This
    patch corrects that by registering the secure websockets with
    pjproject using the shorthand 'WS', and by returning 'ws' when asked
    for the transport parameter. Note that in pjproject, it is perfectly
    valid to have multiple transports use the same shorthand.

(2) In chan_sip, we return an upper-case version of the transport 'WS'
    instead of 'ws'. Since we should be strict in what we send and
    liberal in what we accept (within reason), this patch lower-cases
    the transport before appending it to the parameter.

ASTERISK-24330 #close
Reported by: cervajs, Inaki Baz Castillo

Change-Id: Iff77b645f8cc3b7cd35168a6676c26b147f22f42
2016-11-28 13:36:17 -06:00
George Joseph 29e887e9e1 build_tools: Fix download_externals to handle certified branches
download_externals wasn't handling the "certified/13.x" version
correctly.

Change-Id: I124d195bb117ca36fd7bf1150c630f3b474a9d9a
2016-11-28 10:06:51 -07:00
Tzafrir Cohen bfb8c962c4 autoconf: more variants for OSARCH linux-gnu
There are quite a few odd GNU/Linux platforms. Just call all of them
linux-gnu.

Specifically this fixes building the Debian platforms mips64el and x32.
And maybe also others.

ASTERISK-26546 #close

Change-Id: I06ec4bd7f0ee1c84b6b24d81538223b07c4174b1
2016-11-28 08:01:01 -05:00
Timo Teräs a1fa909033 codec_dahdi: Fix poll.h include.
POSIX defines poll.h. sys/poll.h should not be used as it is c-library
internal header which may or may not exist. Notably in musl including
sys/poll.h generates warning of being incorrect.

Change-Id: Ib318c1c7142a737bcf3caa4d8d72560bebe39252
2016-11-28 07:57:12 -05:00
Michael Kuron 0cc8351484 chan_sip: Fix segfault during module unload
If a TCP/TLS connection was pending (not accepted and not timed out) during
unload of chan_sip, Asterisk would segfault when trying to send a signal to
a thread whose thread ID hadn't been recorded yet. This commit fixes that by
recording the thread ID before calling the blocking connect() syscall.
This was a regression introduced by 776a14386a.

The above wasn't enough to fix the segfault, which was now delayed to the
point where connect() timed out. Therefore, it was necessary to also remove
the SA_RESTART flag from the SIGURG sigaction so that pthread_kill() could be
used to interruput the connect() syscall.
This was a regression introduced by 5d313f51b9.

ASTERISK-26586 #close

Change-Id: I76fd9d47d56e4264e2629bce8ec15fecba673e7b
2016-11-26 18:16:54 +01:00
zuul 5027b0d5e6 Merge "addons/chan_mobile: do not use strerror_r" into 13 2016-11-23 16:44:01 -06:00
gestoip2 8756ce64b7 res_rtp_asterisk: RTT miscalculation in RTCP
When retrieving RTCP stats for PJSIP channels, RTT values are unreliable.
RTT calculation is correct, but the data representation isn't.  RTT is
represented by a 32-bit fixed-point number with the integer part in the
first 16 bits and the fractional part in the last 16 bits.  In order to
get the RTT value, the fractional part is miscalculated, there is an
unnecessary 16 bit shift that causes overflow.  Besides this there is
another mistake, when transforming the integer value to the fixed point
fractional part via bitwise operation, that loses precision.

* RTT fractional part is no longer shifted, avoiding overflow.

* RTT fractional part is transformed to its fixed-point value more
precisely.

* Fixed timeval2ntp() and ntp2timeval() second fraction conversions.

* Fixed NTP timestamp report logging.  The usec was inexplicably
multiplied by 4096.

ASTERISK-26566 #close
Reported by Hector Royo Concepcion

Change-Id: Ie09bdabfee75afb3f1b8ddfd963e5219ada3b96f
2016-11-22 21:20:17 -06:00
Michael Kuron 8e77d6f520 tcptls: Use new certificate upon sip reload
Previously, a TLS server socket would only be restarted upon sip reload if the
bind address had changed. This commit adds checking for changes to TLS
parameters like certificate, ciphers, etc. so they get picked up without
requiring a reload of the entire chan_sip module. This does not affect open
connections in any way, but new connections will use the new TLS parameters.
The changes also apply to HTTP and Manager.

ASTERISK-26604 #close

Change-Id: I169e86cefc6dcd627c915134015a6a1ab1aadbe6
2016-11-22 20:05:29 +01:00
Timo Teräs 86d824b7ff addons/chan_mobile: do not use strerror_r
The two reasons why it might be used are that some systems do not
implement strerror in thread safe manner, and that strerror_r returns
the error code in the string in case there's no error message.

However, all of asterisk elsewhere uses strerror() and assumes it
to be thread safe. And in chan_mobile the errno is also explicitly
printed so neither of the above reasons are valid.

The reasoning to remove usage is that there are actually two versions
of strerror_r: XSI and GNU. They are incompatible in their return
value, and there's no easy way to figure out which one is being
used. glibc gives you the GNU version if _GNU_SOURCE is defined,
but the same feature test macro is needed for other symbols. On
all other systems you assumedly get XSI symbol, and compilation warnings
as well as non-working error printing.

Thus the easiest solution is to just remove strerror_r and use
strerror as rest of the code. Alternative is to introduce ast_strerror
in separate translation unit so it can request the XSI symbol in
glibc case, and replace all usage of strerror.

Change-Id: I84d35225b5642d85d48bc35fdf399afbae28a91d
2016-11-22 11:23:13 -05:00
George Joseph 425da14927 build: Backport addition of librt check to configure.ac
A while back, a master-only change was made to check for librt which
should probably have been cherry-picked to 13 at that time.  Sometime
between then and now, part of that change did make it into 13 but it
was incomplete and non-functional.  This patch backports the rest
of the librt check and allows the link of libasteriskpj to use the
results.

Change-Id: I1424008fd8c90f389dda53162ec4a340b253a3c1
2016-11-21 08:44:18 -07:00
Joshua Colp b83c9ff2ad Merge "pjproject_bundled: Improve reliability of pjproject download" into 13 2016-11-21 06:23:58 -06:00
Joshua Colp 5c9680da9d Merge "main/app.c: Transmit Silence on ControlPlayback pause" into 13 2016-11-21 04:46:42 -06:00
Joshua Colp 9e5f76c1e1 Merge "build: Various OpenBSD issues" into 13 2016-11-18 12:37:59 -06:00
Joshua Colp 51d2d7c359 Merge "Bump ARI version to 1.10.0" into 13 2016-11-18 12:35:45 -06:00
Mark Michelson cb624b10ae Bump ARI version to 1.10.0
The video-related bridge changes mean that the version needs to be
bumped.

Change-Id: I41c4495068562bef03aa76728f188b8ac4bd393d
2016-11-18 10:56:50 -05:00
George Joseph 2a40c3a867 pjproject_bundled: Improve reliability of pjproject download
The download process now has a timeout which will cause wget to retry
if it stops retrieving data for 5 seconds and fetch and curl to timeout
if the whole retrieval take smore than 30 seconds.

If the tarball retrieval works, the MD5SUM file is retrieved from
the downloads site and the md5 checksum is verified.

If either the tarball retrieval or MD5SUM retrieval fails, or the
checksums don't match, the entire process is retried once.  If it
fails again, any incomplete tarball is deleted.

.DELETE_ON_ERROR: was also added to the Makefile.  Not only does
this delete the tarball on failure, it till also delete corrupted
library files from the pjproject source directory should they
fail to build correctly.

Tested all the way back to FreeBSD 9, CentOS 6, Debian 6 and
Ubuntu 14.

Change-Id: Iea7d33b96a31622ab1b6e54baebaf271959514e1
2016-11-18 08:01:21 -05:00
misha 12c4e664bc main/app.c: Transmit Silence on ControlPlayback pause
ASTERISK-26562 #close

Change-Id: Ie6cb0ffc2b8c775639ce7784fe96f4ea00cfa2f8
2016-11-17 12:28:25 -05:00
Mark Michelson bde3d022a3 manager: update minor version
Based on bridge video AMI event changes, bump the minor version of AMI.

Change-Id: I02586bd6cafc0baa33ea98c2f75356c0f5e03435
2016-11-17 10:50:58 -06:00
zuul 3135a745e3 Merge "res_pjsip_outbound_authenticator_digest.c: Fix memory pool leak." into 13 2016-11-16 23:20:10 -06:00
George Joseph d3f921ed51 Merge "res_format_attr_opus: Fix fmtp generation." into 13 2016-11-16 22:41:00 -06:00
George Joseph b213045fe4 build: Various OpenBSD issues
OpenBSD's 'find' doesn't take the -delete argument so you have to pipe
through 'xargs rm -rf'.

'echo -e' doesn't like \t starting a line. It just prints 't' which
causes the libasteriskpj.exports file to be garbage.  They were just
cosmetic so they were removed.

librt doesn't exist so the link of libasteriskpj.so fails. It's not
actually needed for linux anyway so -lrt was removed from the link.

res_rtp_asterisk was failing to load because of an undefined
DTLS_method. '|| defined(LIBRESSL_VERSION_NUMBER)' was added to the #if
so DTLSv1_method is used instead.

ASTERISK-26608

Change-Id: I926ec95b0b69633231e3ad1d6e803b977272c49c
2016-11-16 19:34:20 -07:00
George Joseph c877801e5d Merge "channel: Fix issues in hangup scenarios caused by frame deferral" into 13 2016-11-16 17:42:17 -06:00
George Joseph 404596b790 channel: Fix issues in hangup scenarios caused by frame deferral
ASTERISK-26343

Change-Id: I06dbf7366e26028251964143454a77d017bb61c8
2016-11-16 16:41:42 -07:00
Joshua Colp 19ca0e7fc8 Merge "codec_opus: Fix warning when Opus negotiated but codec_opus not loaded." into 13 2016-11-16 17:40:36 -06:00
zuul b745c326c2 Merge "res/ari/resource_bridges: Add the ability to manipulate the video source" into 13 2016-11-16 16:48:14 -06:00
Mark Michelson 2c031b67d3 res_format_attr_opus: Fix fmtp generation.
res_format_attr_opus assumed that the string being passed into it was
empty. It tried to determine if the only thing it had written was

a=fmtp:<num>

And if it had, it would reset the string. Its calculation was off when
working with chan_sip, though. chan_sip passes the entire built SDP
rather than an empty string. This resulted in always putting an empty
fmtp line in the SDP.

ASTERISK-26520 #close
Reported by scgm11

Change-Id: Ib2e8712d26a47067e5f36d5973577added01dbb5
2016-11-16 15:42:39 -06:00
Joshua Colp 4c1b9fbefe Merge "Revert "Revert "channel: Use frame deferral API for safe sleep.""" into 13 2016-11-16 15:39:00 -06:00
Joshua Colp d0a72d3779 Merge "Revert "Revert "autoservice: Use frame deferral API""" into 13 2016-11-16 15:38:55 -06:00
zuul 36b59ee9c1 Merge "Revert "Revert "AGI: Only defer frames when in an interception routine.""" into 13 2016-11-16 15:06:25 -06:00
zuul f68790d46a Merge "Revert "Revert "Add API for channel frame deferral.""" into 13 2016-11-16 15:06:24 -06:00
zuul f4f152f35c Merge "apps/app_echo: Only relay a single video source change frame" into 13 2016-11-16 15:06:23 -06:00
Richard Mudgett ed0f1afc8c codec_opus: Fix warning when Opus negotiated but codec_opus not loaded.
When Opus is negotiated but not loaded, the log is spammed with messages
because the system does not know how to calculate the number of samples in
a frame.

* Suppress the warning by supplying a function that assumes 20ms of
samples in the frame.  For pass through support it doesn't really seem to
matter what number of samples is returned anyway.

ASTERISK-26605 #close

Change-Id: Icf2273692f040dc2c45b01e72a790d11092f9e0f
2016-11-16 13:49:23 -06:00
Joshua Colp 4c3d25875f Merge "Add X.509 subject alternative name support to TLS certificate verification." into 13 2016-11-16 13:14:42 -06:00
Joshua Colp 6672fd5faa Merge "cli: Fix ast_el_read_char to work with libedit >= 3.1" into 13 2016-11-16 12:50:15 -06:00
Richard Mudgett e632222bc4 res_pjsip_outbound_authenticator_digest.c: Fix memory pool leak.
Responding to authentication challenges leaks PJSIP memory pools.

The leak was introduced with a pjproject 2.5.5 API change.
https://trac.pjsip.org/repos/ticket/1929 changed the API usage of
pjsip_auth_clt_init() to require the new API pjsip_auth_clt_deinit() to
clean up cached authentication allocations that get allocated with
pjsip_auth_clt_reinit_req().

ASTERISK-26516 #close

Change-Id: I4473141b8c3961d0dc91c382beb3876b3efb45c8
2016-11-16 12:02:10 -06:00
Joshua Colp c4baa50f9a Merge "file.c/__ast_file_read_dirs: Fix issues on filesystems without d_type" into 13 2016-11-16 11:12:16 -06:00
Alexei Gradinari cf6d13180e chan_pjsip: fix switching sending codec when asymmetric_rtp_codec=no
The sending codec is switched to the receiving codec and then
is switched back to the best native codec on EVERY receiving RTP packets.
This is because after call of ast_channel_set_rawwriteformat there is call
of ast_set_write_format which calls set_format which sets rawwriteformat
to the best native format.

This patch adds a new function ast_set_write_format_path which set
specific write path on channel and uses this function to switch
the sending codec.

ASTERISK-26603 #close

Change-Id: I5b7d098f8b254ce8f45546e6c36e5d324737f71d
2016-11-16 10:14:52 -05:00
George Joseph c92dcc76da file.c/__ast_file_read_dirs: Fix issues on filesystems without d_type
One of the code paths in __ast_file_read_dirs will only get executed if
the OS doesn't support dirent->d_type OR if the filesystem the
particular file is on doesn't support it.  So, while standard Linux
systems support the field, some filesystems like XFS do not.  In this
case, we need to call stat() to determine whether the directory entry
is a file or directory so we append the filename to the supplied
directory path and call stat.  We forgot to truncate path back to just
the directory afterwards though so we were passing a complete file name
to the callback in the dir_name parameter instead of just the directory
name.

The logic has been re-written to only create a full_path if we need to
call stat() or if we need to descend into another directory.

Change-Id: I54e4228bd8355fad65200c6df3ec4c9c8a98dfba
2016-11-15 19:20:16 -07:00
Maciej Szmigiero 7b96e8cc3d Add X.509 subject alternative name support to TLS certificate
verification.

This way one X.509 certificate can be used for hosts that
can be reached under multiple DNS names or for multiple hosts.

Signed-off-by: Maciej Szmigiero <mail@maciej.szmigiero.name>

ASTERISK-25063 #close

Change-Id: I13302c80490a0b44c43f1b45376c9bd7b15a538f
2016-11-15 20:56:43 +01:00
Matt Jordan 0790aa528a pjproject: Use a much higher limit for PJ_ICE_MAX_CHECKS
The PJ_ICE_MAX_CHECKS constant is used by pjproject to determine how
many pairs of local/remote candidates will be made. If for some reason
we reach this upper bound, ICE will generally fail and no media will
flow between the browser and Asterisk.

This patch makes PJ_ICE_MAX_CHECKS set to the total possible number of
pairs of candidates we'd theoretically allow, which is
PJ_ICE_MAX_CAND^2. Prior to this patch, we simply multiplied
PJ_ICE_MAX_CAND by two; on systems with multiple interfaces (I blame
Docker), this is far too low to allow WebRTC calls to succeed.

Setting this to be PJ_ICE_MAX_CAND^2 allowed WebRTC calls to succeed
even when the system Asterisk was running on had quite a few virtual
interfaces.

Change-Id: Icd4f17de0ac9d3a83dddfc8bf1cb7616bc107d55
2016-11-14 17:02:17 -05:00
Matt Jordan 993a6f96c7 apps/app_echo: Only relay a single video source change frame
In 9785e8d0, app_echo was updated to relay video source updates to the
channel for the purposes of displaying video in WebRTC tests.
Unfortunately, this can cause a Kafkaesque nightmare if two or more
Local channels are in a bridge together where their ends are in
app_echo. When this situation occurs, a video update sent into app_echo
will cause the video update to be relayed to the other Local channels,
causing another round of video updates, etc. In not much time at all,
the channel length queues will be overwhelmed, channel alert pipes will
fail, and all hell will break loose as Asterisk merrily continues to
throw more video update requests onto the channels.

This patch updates app_echo to *only* relay a single video update. Once
a video update has been made, all further video updates are dropped.
This meets the intended purpose of the original patch: if we get a video
update and we're in app_echo, go ahead and ask the sender to update
themselves. However, once we've got that video stream sync'd up, don't
keep spamming the world.

Change-Id: I9210780b08d4c17ddb38599d1c64453adfc34f74
2016-11-14 17:02:09 -05:00
Matt Jordan d23b4af477 res/ari/resource_bridges: Add the ability to manipulate the video source
In multi-party bridges, Asterisk currently supports two video modes:
 * Follow the talker, in which the speaker with the most energy is shown
   to all participants but the speaker, and the speaker sees the
   previous video source
 * Explicitly set video sources, in which all participants see a locked
   video source

Prior to this patch, ARI had no ability to manipulate the video source.
This isn't important for two-party bridges, in which Asterisk merely
relays the video between the participants. However, in a multi-party
bridge, it can be advantageous to allow an external application to
manipulate the video source.

This patch provides two new routes to accomplish this:
(1) setVideoSource: POST /bridges/{bridgeId}/videoSource/{channelId}
    Sets a video source to an explicit channel
(2) clearVideoSource: DELETE /bridges/{bridgeId}/videoSource
    Removes any explicit video source, and sets the video mode to talk
    detection

ASTERISK-26595 #close

Change-Id: I98e455d5bffc08ea5e8d6b84ccaf063c714e6621
2016-11-14 17:02:00 -05:00
George Joseph 404a62eeee Revert "Revert "channel: Use frame deferral API for safe sleep.""
This reverts commit 58c88cfbaa.

Change-Id: I72692e2b2e83ef6da9390075ff20b138b2c374b6
2016-11-14 14:22:43 -06:00
George Joseph 09d8febc91 Revert "Revert "autoservice: Use frame deferral API""
This reverts commit 1df434e2b4.

Change-Id: Id2b8a8bccbb4bbdd82b792275d4cd6f32563e401
2016-11-14 14:22:21 -06:00
George Joseph ffad2b44df Revert "Revert "AGI: Only defer frames when in an interception routine.""
This reverts commit 6be5d8de0d.

Change-Id: I4b548137f52ae0686d8f09e21496b778d1c6a797
2016-11-14 14:21:58 -06:00
George Joseph 2fefb6187f Revert "Revert "Add API for channel frame deferral.""
This reverts commit 6b5a7ced13.

Change-Id: I61d1dbb2e69e1977f684b7dfc8e98211024e1cd1
2016-11-14 15:21:26 -05:00
zuul a58d359701 Merge "res_pjsip.c: Rework endpt_send_request() req_wrapper code." into 13 2016-11-14 12:44:41 -06:00
George Joseph 5e0c224043 cli: Fix ast_el_read_char to work with libedit >= 3.1
Libedit 3.1 is not build with unicode on as a default and so the
prototype for the el_gets callback changed from expecting a char buffer
to accepting a wchar buffer.  If ast_el_read_char isn't changed,
the cli reads garbage from teh terminal.

Added a configure test for (*el_rfunc_t)(EditLine *, wchar_t *) and
updated ast_el_read_char to use the HAVE_ define to detemrine whether
to use char or wchar.

ASTERISK-26592 #close

Change-Id: I9099b46f68e06d0202ff80e53022a2b68b08871a
2016-11-14 13:20:26 -05:00
Joshua Colp ec17e96784 Merge "Fix closing rtp ports after call finished in chan_unistim." into 13 2016-11-14 08:05:38 -06:00
Joshua Colp d5774005fe Merge "res_pjsip: Fix tdata leaks in off nominal paths." into 13 2016-11-14 06:15:44 -06:00
Igor Goncharovskiy 3faca1d4ff Fix closing rtp ports after call finished in chan_unistim.
Fix ASTERISK-26565 by adding ast_rtp_instance_stop before
rtp instance destroy for chan_unistim. Also several fixes
for displayed text translation.

Change-Id: If42a03eea09bd1633471406bdc829cf98bf6affc
2016-11-11 23:02:11 -05:00
Joshua Colp 10e64a5fb8 Merge "res_pjsip_sdp_rtp: Reject offer of required SRTP without res_srtp." into 13 2016-11-11 15:17:55 -06:00
zuul cf08676c00 Merge "build: Fix default values for some SANITIZER options" into 13 2016-11-10 22:09:02 -06:00
Richard Mudgett 412d43fa21 res_pjsip.c: Rework endpt_send_request() req_wrapper code.
* Don't hold the req_wrapper lock too long in endpt_send_request().  We
could block the PJSIP monitor thread if the timeout timer expires.
sip_get_tpselector_from_endpoint() does a sorcery access that could take
awhile accessing a database.  pjsip_endpt_send_request() might take awhile
if selecting a transport.

* Shorten the time that the req_wrapper lock is held in the callback
functions.

* Simplify endpt_send_request() req_wrapper->timeout code.

* Removed some redundant req_wrapper->timeout_timer->id assignments.

Change-Id: I3195e3a8e0207bb8e7f49060ad2742cf21a6e4c9
2016-11-10 16:17:33 -06:00
Richard Mudgett 2e7fc56d3c res_pjsip: Fix tdata leaks in off nominal paths.
Change-Id: Ie83e06e88c2d60157775263b07e40b61718ac97b
2016-11-10 16:14:55 -06:00
Richard Mudgett da68b185b3 res_pjsip_registrar_expire.c: Remove extra linefeed in debug message.
Change-Id: I1f9adb911f23376503396ec8867e8005b755eb94
2016-11-10 14:23:46 -06:00
George Joseph ee73af1d88 Update for 13.12.2 2016-11-10 14:34:55 -05:00
Joshua Colp b70eb07c53 res_pjsip_sdp_rtp: Reject offer of required SRTP without res_srtp.
When optimistic SRTP was on it was possible for us to still
set up a call without an audio stream if an offer was received
with required SRTP.

This change makes it so this scenario will now fail with a 488
response.

ASTERISK-26575

Change-Id: I7d14187037681f48879bd20319ac79d0877318f3
2016-11-10 16:57:49 +00:00
Joshua Colp 71dc333565 app_queue: Add mention of 'ABANDON' variable to CHANGES.
ASTERISK-26558

Change-Id: I1127010181e79c8ac291f72f036cb8e430dc7f7e
2016-11-10 14:33:41 +00:00
George Joseph ccc8a37584 Merge "Revert "autoservice: Use frame deferral API"" into 13 2016-11-10 07:42:37 -06:00
George Joseph 07e7ac5119 Merge "Revert "Add API for channel frame deferral."" into 13 2016-11-10 07:42:36 -06:00
George Joseph 06045fc29e Merge "Revert "AGI: Only defer frames when in an interception routine."" into 13 2016-11-10 07:42:36 -06:00
George Joseph 9e13c3e2a1 Merge "Revert "channel: Use frame deferral API for safe sleep."" into 13 2016-11-10 07:42:35 -06:00
George Joseph 6b5a7ced13 Revert "Add API for channel frame deferral."
This reverts commit 9231a56cf3.
Multiple testsuite failures were detected after the fact.

Change-Id: I3bac8d7c3ddb69a4ddf6c5d6de0ffa5ff7ff3af7
2016-11-10 08:41:55 -05:00
George Joseph 6be5d8de0d Revert "AGI: Only defer frames when in an interception routine."
This reverts commit 5c10091f3d.
Multiple testsuite failures were detected after the fact.

Change-Id: I397a841acc17ae230c512449cd6bed89d2ef3b73
2016-11-10 08:41:43 -05:00
George Joseph 1df434e2b4 Revert "autoservice: Use frame deferral API"
This reverts commit 2e3a354575.
Multiple testsuite failures were detected after the fact.

Change-Id: Ia45fa4633fae74dca345b24bb6722737c63035de
2016-11-10 08:41:25 -05:00
George Joseph 58c88cfbaa Revert "channel: Use frame deferral API for safe sleep."
This reverts commit 44f7e25239.
Multiple testsuite failures were detected after the fact.

Change-Id: I56299087da22128a95f0c8f3955f740890d7ca65
2016-11-10 08:40:59 -05:00
Joshua Colp 44fd077739 Merge "app_queue: new variable set when abandoned" into 13 2016-11-10 06:52:41 -06:00
George Joseph a562fbe618 build: Fix default values for some SANITIZER options
2 of the sanitizers didn't have default values so in systems that
don't support sanitizers menuselect would spit out warnings.  They
were harmless but confusing.  They've now been set to "0".

Change-Id: I08dc495e3b83f1feac3160b421f538c375fc5d58
2016-11-09 17:18:00 -07:00
George Joseph dfcb2b6c24 Merge "res_pjsip_session: Do not call session supplements when it's too late." into 13 2016-11-09 13:23:59 -06:00
Sebastian Gutierrez 7fd5031c1c app_queue: new variable set when abandoned
sets the variable ABANDONED to TRUE if the call was not answered.

ASTERISK-26558

Change-Id: I4729af9bff4eba436d8a776afd3374065d0036d3
2016-11-08 21:42:24 -03:00
Mark Michelson e043d1a55c res_pjsip_session: Do not call session supplements when it's too late.
res_pjsip_sesssion was hooking into transaction and invite state
changes. One of the reasons for doing so was due to the
PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the
message sending process, and so we should call session supplements to
alter the outgoing message.

In reality, this event was meant to indicate that the message either
a) had already been sent, or
b) required a DNS lookup and would be sent when the DNS query
completed.

In case (a), this meant we were altering an already-sent
request/response for no reason. In case (b), this potentially meant we
could be trying to alter a request/response at the same time that the
DNS resolution completed. In this case, it meant we might be stomping on
memory being used by the thread actually sending the message. This
caused potential crashes and memory corruption.

This patch removes the calls to session supplements from the case where
the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to
alter the message at this point is too late, and it can cause nothing
but harm to try to do it. Because there were no longer any calls to the
handle_outgoing() function, it has been removed.

Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92
2016-11-08 10:48:32 -06:00
Mark Michelson 44f7e25239 channel: Use frame deferral API for safe sleep.
This is another case where manual frame deferral can be replaced with
centralized routines instead.

Change-Id: I42cdf205f8f29a7977e599751a57efbaac07c30e
2016-11-08 07:15:31 -07:00
Mark Michelson 2e3a354575 autoservice: Use frame deferral API
Rather than use manual frame deferral, just let the channel API do it
for us.

ASTERISK-26343

Change-Id: I688386f36e765dbc07be863943a43f26bd5eac49
2016-11-08 07:15:22 -07:00
Mark Michelson 5c10091f3d AGI: Only defer frames when in an interception routine.
AGI recently was modified to defer important frames. This was because
when AGI was used in a connected line interception routine, the
resulting connected line frame would end up getting discarded by the
AGI.

However, this caused bad behavior in other cases. Specifically, during a
transfer, if someone attempted to manually set the Caller ID on a
channel in an AGI, the deferred connected line frame would end up
overwriting what had been manually set in the AGI.

Since the initial issue was specific to interception routines, this
change removes the manual frame deferral from AGI and instead uses the
new frame deferral API in interception routines.

ASTERISK-26343 #close
Reported by Morton Tryfoss

Change-Id: Iab7d39436d0ee99bfe32ad55ef91e9bd88db4208
2016-11-08 07:14:20 -07:00
zuul 3870e8d76d Merge "automon: restore mixing of the both channels after recording stops" into 13 2016-11-08 07:58:28 -06:00
zuul 7477c95749 Merge "Add API for channel frame deferral." into 13 2016-11-08 07:58:25 -06:00
Joshua Colp 093eadf46a Merge "chan_ooh323: reset rrq count on gk registration" into 13 2016-11-08 04:59:03 -06:00
Joshua Colp 0310845acd Merge "chan_ooh323: Fixes to work right with Cisco devices" into 13 2016-11-08 04:58:25 -06:00
Joshua Colp 77e56bc2e0 Merge "stasis_recording/stored: remove calls to deprecated readdir_r function." into 13 2016-11-08 04:57:47 -06:00
Joshua Colp dc04c1725f Merge "res_stasis: Don't unsubscribe from a NULL bridge." into 13 2016-11-07 19:48:23 -06:00
Joshua Colp 58df0ccc0e Merge "res_http_websocket: Increase the buffer size for non-LOW_MEMORY systems" into 13 2016-11-07 19:32:05 -06:00
Joshua Colp 768bac97cc Merge "res_stasis: Set a video source mode on Stasis created bridges" into 13 2016-11-07 18:23:26 -06:00
Joshua Colp 87c884965c Merge "main/bridge: Add some verbose logging for video source changes" into 13 2016-11-07 16:53:27 -06:00
Joshua Colp 222cee2410 Merge "main/bridge_channel: Fix channel reference leak on video source" into 13 2016-11-07 16:31:45 -06:00
Joshua Colp 814d8a99d1 Merge "bridges/bridge_softmix: Remove SSRC changes on join/leave; update video source" into 13 2016-11-07 14:23:35 -06:00
Mark Michelson 9231a56cf3 Add API for channel frame deferral.
There are several places in Asterisk that have duplicated logic
for deferring important frames until later.

This commit adds a couple of API calls to facilitate this automatically.

ast_channel_start_defer_frames(): Future reads of deferrable frames on
this channel will be deferred until later.

ast_channel_stop_defer_frames(): Any frames that have been deferred get
requeued onto the channel.

ASTERISK-26343

Change-Id: I3e1b87bc6796f222442fa6f7d1b6a4706fb33641
2016-11-07 12:25:59 -06:00
Kevin Harwell a3614d75f6 Revert "chan_sip: Fix lastrtprx always updated"
This reverts commit 93332cb1d0.

Unfortunately, the aforementioned commit caused a regression (incoming calls
would eventually disconnect). Thus it is being removed.

ASTERISK-26523 #close
ASTERISK-25270

Change-Id: Ibf5586adc303073a8eac667a4cbfdb6be184a64d
2016-11-07 12:27:17 -05:00
zuul 64e71fcf68 Merge "pjproject_bundled: Fix issue with libasteriskpj needing libresample" into 13 2016-11-07 10:18:59 -06:00
Alexander Anikin a9ac1f5de4 chan_ooh323: Fixes to work right with Cisco devices
Changed output packets queue processing algo to one read-one write
instead of all read-all send

Remove h.245 tunneling parameter from ReleaseComplete packet

ASTERISK-24400 #close
Reported by: Dmitry Melekhov
Tested by: Dmitry Melekhov

Change-Id: I0b31933b062a21011dbac9a82b8bcfe345f406f6
2016-11-07 10:01:33 -05:00
Alexander Anikin 0ee249075a chan_ooh323: reset rrq count on gk registration
reset registration attempts count on success registration on gatekeeper

Change-Id: I5f47351852e0ca76c9ac78421659600e0f106336
2016-11-07 09:59:03 -05:00
zuul f02647ebbd Merge "chan_ooh323: Fix infinite loop on read second part of H.225 packet" into 13 2016-11-07 07:50:38 -06:00
zuul 3a4baca35a Merge "rtp_engine: Allow more than 32 dynamic payload types." into 13 2016-11-07 06:38:25 -06:00
Michael Kuron 59c23e1768 automon: restore mixing of the both channels after recording stops
This is a regression over Asterisk 11, introduced by
2dc8a06006. Previously, recordings started via
the automon DTMF code would automatically be mixed together using sox because
app_monitor would be called with the m option. This commit restores this
behavior.

Change-Id: Ibaf58684285c3f1b6ca3714524e6d638ae3b3759
2016-11-06 10:48:32 +01:00
Matt Jordan e79acaeb75 res_http_websocket: Increase the buffer size for non-LOW_MEMORY systems
Not surprisingly, using Respoke (and possibly other systems) it is
possible to blow past the 16k limit for a WebSocket packet size. This
patch bumps it up to 32k, which, at least for Respoke, is sufficient.
For now.

Because 32k is laughable on a LOW_MEMORY system (as is 16k, for that
matter), this patch adds a LOW_MEMORY directive that sets the buffer to
8k for systems who have asked for their reduced memory availability to
be considered.

Change-Id: Id235902537091b58608196844dc4b045e383cd2e
2016-11-04 15:49:50 -05:00
Matt Jordan 7a83196985 res_stasis: Set a video source mode on Stasis created bridges
When a bridge is created via ARI (through res_stasis), no video source
mode is set by default. As a result, any endpoint sending video media
won't ever see any video reflected back to it.

This patch defaults a bridge to a 'follow the talker' video mode.
Further work can be done to add routes that allow for the video mode to
be controlled through the /bridges resource.

Change-Id: I7e9d530a5d7a97a4524a9ee4e468e1a6b3443866
2016-11-04 15:49:32 -05:00
Matt Jordan e7dc536b7a main/bridge_channel: Fix channel reference leak on video source
When a channel is made the video source, the bridge holds a reference to
it. Whenever the video source changes, that reference is released.
However, a ref leak does occur if the channel leaves the bridge (such as
being hung up) while it is the video source, as the bridge never
releases the ref in such a case.

This patch adds a line to the bridge_channel_internal_join routine such
that, when a channel finishes its time in the bridge, it notifies the
bridge via ast_bridge_remove_video_src that if it is a video source its
reference should be released.

ASTERISK-26555 #close

Change-Id: I3a2f5238a9d2fc49c591f0e65199d782ab0be76a
2016-11-04 15:49:18 -05:00
Matt Jordan 7c824b955d main/bridge: Add some verbose logging for video source changes
It's actually quite useful to see the source of a video stream change.
This doesn't happen terribly often, even with talk detection - but when
it does, it's nice to know which channel is now providing your video
stream.

As a verbose 5 level message, it shouldn't be terribly spammy or costly
to have, and is 'lower level' then most other verbose messages that the
bridge system emits.

ASTERISK-26555

Change-Id: Ia1c20ecafa9670171fd38bddcf3beccae47fb15c
2016-11-04 15:49:00 -05:00
Matt Jordan fd6af2dee8 bridges/bridge_softmix: Remove SSRC changes on join/leave; update video source
WebRTC clients really, really want to know the SSRC of the media they're
getting. Changing the SSRC is generally not a good thing.

bridge_softmix, starting in Asterisk 12, started changing the SSRC of
parties as they joined or left the bridge. With most phones, this isn't
a problem: phones just play back the stream they're getting. With WebRTC
clients, however, the SSRC is tied to a media stream that may be
negotiated. When a new SSRC just shows up, the media can be dropped.

As it turns out, the SSRC change shouldn't even be necessary. From the
perspective of the client, it's still talking to Asterisk with the same
media stream: why indicate that the far party has suddenly changed to a
different source of media?

This patch opts to just remove the SSRC changes. With this patch, video
clients that join/leave a softmix bridge actually get the video stream
instead of freaking out.

ASTERISK-26555

Change-Id: I27fec098b32e7c8718b4b65f3fd5fa73527968bf
2016-11-04 15:48:31 -05:00
Kevin Harwell bd4d7d8ad0 stasis_recording/stored: remove calls to deprecated readdir_r function.
The readdir_r function has been deprecated and should no longer be used. This
patch removes the readdir_r dependency (replaced it with readdir) and also moves
the directory search code to a more centralized spot (file.c)

Also removed a strict dependency on the dirent structure's d_type field as it
is not portable. The code now checks to see if the value is available. If so,
it tries to use it, but defaults back to using the stats function if necessary.

Lastly, for most implementations of readdir it *should* be thread-safe to make
concurrent calls to it as long as different directory streams are specified.
glibc falls into this category. However, since it is possible that there exist
some implementations that are not safe, locking has been added for those other
than glibc.

ASTERISK-26412
ASTERISK-26509 #close

Change-Id: Id8f54689b1e2873e82a09d0d0d2faf41964e80ba
2016-11-04 13:58:21 -05:00
Kevin Harwell cb30963d22 Revert "chan_sip: Fix lastrtprx always updated"
This reverts commit 93332cb1d0.

Unfortunately, the aforementioned commit caused a regression (incoming calls
would eventually disconnect). Thus it is being removed.

ASTERISK-26523 #close
ASTERISK-25270

Change-Id: Ibf5586adc303073a8eac667a4cbfdb6be184a64d
2016-11-04 10:59:38 -05:00
Joshua Colp 3a1f9c5dab res_stasis: Don't unsubscribe from a NULL bridge.
A NULL bridge has special meaning in res_stasis for
unsubscribing. It means that a subscription to ALL
bridges should be removed. This should not be done
as part of the normal subscription management in
the res_stasis channel loop.

ASTERISK-26468

Change-Id: I6d5bea8246dd13a22ef86b736aefbf2a39c15af0
2016-11-03 21:08:58 +00:00
Alexander Anikin eceab15f33 chan_ooh323: Fix infinite loop on read second part of H.225 packet
Fix logic on read second part of H.225 packet. There was infinite loop on
wrong connections due to read before poll.

Change-Id: I42b4bf75c46e4a5c5df5c5ca1f0bd74b8944e7ff
2016-11-03 13:48:21 -05:00
George Joseph a9992da4aa pjproject_bundled: Fix issue with libasteriskpj needing libresample
libresample is only needed by pjproject if we're building pjsua, which
we only do if TEST_FRAMEWORK is selected.  It's required by pjsua to
process audio which is needed by some testsuite tests.  Unfortunately,
pjproject relies on a newer version of libresample than the version
that ships by most distros so we need to compile the version that's
bundled with pjproject.  Since we only need it for pjsua, we DON'T want
it's symbols exposed when we actually build asterisk.

There was a problem however... TEST_FRAMEWORK is only known AFTER we've
already run ./configure on both asterisk and pjproject but pjproject's
./configure needs to test it to know whether to set up to build
libresample or not.  The previous way of figuring this out was to
always tell ./configure "yes" but not actually build the library.  This
caused an issue where building libasteriskpj was being told to include
libresample but it wasn't actually there.

The solution is to still do a default pjproject configure during an
asterisk ./configure but if makeopts or menuselect.makeopts changes
subsequently, we now reconfigure pjproject, taking into account the
current state of TEST_FRAMEWORK.  Previously, if makeopts or
menuselect.makeopts changed, only a recompile of pjproject was done.

Change-Id: I9b5d84c61384a3ae07fe30e85c49698378cc4685
2016-11-03 12:14:53 -05:00
Joshua Colp 57a9797e0a Merge "chan_sip: add missing account code" into 13 2016-11-02 17:32:36 -05:00
Sebastian Gutierrez 714412f6c4 chan_sip: add missing account code
Added missing account to AMI event of sip show peers

ASTERISK-26176 #close

Change-Id: Ieb6c2c80a838a1b59c82103eba4c63ba238dc482
2016-11-02 10:42:57 -05:00
Alexander Traud 0cf1778eed rtp_engine: Allow more than 32 dynamic payload types.
The dynamic range (96-127) allows 32 RTP Payload Types. RFC 3551 section 3
allows to reassign other ranges. Consequently, when the dynamic range is
exhausted, you can go for "rtp_pt_dynamic = 35" (or 0) in asterisk.conf. This
enables the range 35-63 (or 0-63) giving room for another 29 (or 64) payload
types.

ASTERISK-26311 #close

Change-Id: I7bc96ab764bc30098a178b841cbf7146f9d64964
(cherry picked from commit 9ac53877f6)
2016-11-02 09:47:55 -05:00
Joshua Colp d971647949 app_dial: Fix incorrect device state when channel is picked up.
Given the scenario where multiple channels are dialed using Dial()
but the caller is picked up using PickupChan() all outgoing channels
except the channel specified to PickupChan() would be marked
as ringing until the call had been hung up.

When using the PickupChan application the channel executing the
application is swapped into place of another channel. As part
of this process the channel is answered. The Dial application
has explicit logic which checks if the channel is answered,
cancels all other outgoing channels, and bridges. This logic is
different than the normal logic that is executed when an outgoing
channel is answered. This different logic failed to publish dial
events stating that the other outgoing channels had been canceled.
As a result references to the outgoing channels were held onto by
the dial masquerade process until the call had been ended and
the channels had gone away. This would result in the channels
appearing in the "core show channels" list despite not being present
anymore and would also result in incorrect device state.

This change makes it so that this logic also publishes
dial events stating that the other outgoing channels have been
canceled.

ASTERISK-26549

Change-Id: Iea7168e6e82f7d4609ec0366153804e4f55ea64f
2016-11-02 09:16:25 -05:00
Joshua Colp 18974927e5 Merge "res_pjsip_sdp_rtp: Limit number of formats to defined maximum." into 13 2016-11-02 08:31:02 -05:00
Joshua Colp 49fe410cc0 Merge "bundled pjproject: Fix DNS write to freed memory." into 13 2016-11-02 05:24:34 -05:00
Joshua Colp 3f3f6d091e Merge "res/stasis: Add CLI commands for displaying/debugging ARI apps" into 13 2016-11-02 05:23:51 -05:00
zuul e59a775fb4 Merge "define PATH_MAX for HURD" into 13 2016-11-01 22:30:41 -05:00
zuul ba72bfb76c Merge "netsock.c: fix includes for HURD" into 13 2016-11-01 21:15:09 -05:00
zuul c674415ad8 Merge "pjproject_bundled: Fix compile of pjsua so it handles audio" into 13 2016-11-01 19:30:34 -05:00
Joshua Colp 820ab579e2 Merge "codecs.conf.sample: Add sample and option descriptions for codec_opus" into 13 2016-11-01 17:30:17 -05:00
Richard Mudgett afecb2cfc0 bundled pjproject: Fix DNS write to freed memory.
PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS
patch.

The patch below fixes a write to freed memory under cartain DNS lookup
conditions.

0006-r5477-svn-backport-Fix-DNS-write-on-freed-memory.patch

ASTERISK-26516
Reported by:  Richard Mudgett

Change-Id: Ifdfae9ecf1e41b53080f33aab44ce1a220f349c5
2016-11-01 14:35:22 -05:00
zuul ed89866e76 Merge "chan_sip: Incorrect display option Outbound reg. retry 403" into 13 2016-11-01 14:28:22 -05:00
Joshua Colp 5f188bb7a8 res_pjsip_sdp_rtp: Limit number of formats to defined maximum.
The res_pjsip_sdp_rtp module did not restrict the number of
formats added to a media stream in the SDP to the defined
limit. If allow=all was used with additional loaded codecs this
could result in the next media stream being overwritten some.

This change restricts the module to limit it to the defined
maximum and also increases the maximum in our bundled pjproject.

ASTERISK-26541 #close

Change-Id: I0dc5f59d3891246cafa2f3df5ec406f088559ee8
2016-11-01 13:21:03 -05:00
Tzafrir Cohen 94c9496ed5 netsock.c: fix includes for HURD
ASTERISK-25070

Change-Id: I43bf94d2d36d3d8a8d0df40cd6c027d65a462814
2016-11-01 12:37:58 -05:00
Tzafrir Cohen c1c9487375 define PATH_MAX for HURD
PATH_MAX is not guaranteed to be defined. In parctice, all but the HURD
define it to a constant. It is indeed not safe to assume there won't be
longer paths and Asterisk generally does err safely on such cases.

So even for HURD we'll just pretend PATH_MAX is 4096.

ASTERISK-25070 #close

Change-Id: I53d10ba18c34c132bcb640a5fd8e0da1d9b22db3
2016-11-01 12:22:53 -05:00
Kevin Harwell 50fa868ab8 codecs.conf.sample: Add sample and option descriptions for codec_opus
codecs.conf.sample was missing codec opus's configuration options, descriptions,
and examples. This patch adds the configuration options and examples to
codecs.conf.sample that can be used with codec_opus.

ASTERISK-26538 #close

Change-Id: I1d89bb5e01d3e3b5bd78951b8dd0ff077a83dc8b
2016-11-01 11:03:22 -05:00
Grachev Sergey b3f10b7b94 chan_sip: Incorrect display option Outbound reg. retry 403
If in sip.conf (general section) set option register_retry_403=no,
the command "sip show settings" return value:
Outbound reg. retry 403:0
If in sip.conf (general section) set option register_retry_403=yes,
the command "sip show settings" return value:
Outbound reg. retry 403:-1

* In static char "sip show settings" for "Outbound.reg. retry 403"
option use AST_CLI_YESNO

ASTERISK-26476 #close

Change-Id: I3c14272f05f1067bd2aeaa8b3ef9cf8fcb12dcf9
2016-11-01 11:14:06 -04:00
Matt Jordan 29692d4aa4 res/stasis: Add CLI commands for displaying/debugging ARI apps
This patch adds three new CLI commands:
 - ari show apps: list the registered ARI applications
 - ari show app: show detailed information about an ARI application
 - ari set debug: dump events being sent to an ARI application

Note that while these CLI commands live in the res_stasis module, we use
the 'ari' family for these commands. This was done as most users of
Asterisk aren't aware of the semantic differences between ARI and
res_stasis, and some 'ari' CLI commands already exist.

ASTERISK-26488 #close

Change-Id: I51ad6ff0cabee0d69db06858c13f18b1c513c9f5
2016-11-01 09:06:54 -05:00
George Joseph a36a7d0cf4 pjproject_bundled: Fix compile of pjsua so it handles audio
In order for pjsua and its python binding to actually negotiate
audio for the testsuite tests, it needs g711 and resample.  The
pj* libraries themselves do not.  Unfortunately, pjproject relies
on a brand new libresample that most distros don't ship so we need
to use the libresample already bundled with pjproject.  Only the pjsua
executable and the _pjsua.so python library are linked with it so it
shouldn't interfere with asterisk itself.

Also it was pointed out that apply_patches couldn't handle multiple
patches that depended on each other during the dry-run, so the
dry-run was removed.

Change-Id: I24f397462b486dcdde0dcafe40e6c55a6593f098
2016-10-31 15:12:57 -06:00
Etienne Lessard 42bd70b29f manager: Add documentation for NewConnectedLine event.
The NewConnectedLine event has been added by commit fe7671f, but the
documentation was missing.

ASTERISK-26537 #close

Change-Id: I7fc331f18caa28492da9303e576f70884ca8c9e6
2016-10-31 13:53:34 -05:00
Joshua Colp 55435e211b Merge "bundled pjproject: Crashes while resolving DNS names." into 13 2016-10-31 11:37:55 -05:00
zuul 86720ec0aa Merge "astobj2: Declare private variable data_size for AO2_DEBUG only." into 13 2016-10-31 10:13:45 -05:00
Corey Farrell 30b1bc77d2 vector: Prevent NULL argument to memcpy.
Headers declare that memcpy does not accept NULL argument for the first
two parameters.  Add a conditional block to prevent memcpy and ast_free
from running on vectors with NULL element array.

ASTERISK-26526 #close

Change-Id: I988a476bb5fcfcbd3f6d6c6b3e7769e4f9629b71
2016-10-30 14:33:12 -04:00
Corey Farrell b96f18560b astobj2: Declare private variable data_size for AO2_DEBUG only.
Every ao2 object contains storage for a private variable data_size,
though the value is never read if AO2_DEBUG is disabled.  This change
makes the variable conditional, reducing memory usage.

ASTERISK-26524 #close

Change-Id: If859929e507676ebc58b0f84247a4231e11da07f
2016-10-29 11:31:15 -04:00
George Joseph 6b1c55dc9b pjproject_bundled: Fix issue where "/version.mak" wasn't found
main/Makefile includes third-party/pjproject/build.mak but
doesn't set PJDIR beforehand so "include $(PJDIR)/version.mak"
evaluates to "/version.mak".  Fix is to set PJDIR in main/Makefile
before the include.

Change-Id: I0f7c67d60209049056fe9c4b041bf0463aa95604
2016-10-28 15:59:19 -06:00
zuul a9977758c9 Merge "Fix shutdown crash caused by modules being left open." into 13 2016-10-28 15:13:42 -05:00
Richard Mudgett d7f457e4c1 bundled pjproject: Crashes while resolving DNS names.
PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS
patch.

The patches below fix the DNS lookup race condition crash caused by
attempting to send the same message twice for the single DNS lookup.

0006-r5471-svn-backport-Various-fixes-for-DNS-IPv6.patch
0006-r5473-svn-backport-Fix-pending-query.patch

The patch below removes a cached DNS response from the hash table when
another thread is referencing the old entry.  The table still contained
the entry when it was destroyed which can result in inexplicable crashes.

0006-r5475-svn-backport-Remove-DNS-cache-entry.patch

ASTERISK-26344 #close
Reported by: Ian Gilmour

ASTERISK-26387 #close
Reported by: Harley Peters

Change-Id: I17fde80359e66f65a91341ceca58d914d0f61cc4
2016-10-28 14:55:08 -05:00
Rusty Newton 87903a6848 SAC documentation: don't specify transports for endpoints and registrations
Removing explicit transport definition for endpoints and registrations. It
isn't necessary and isn't generally advised.

ASTERISK-26514 #close

Change-Id: Ifdec5e631962438a4683600968dfa4bfd15909fb
2016-10-28 09:54:56 -05:00
Joshua Colp 6012db0e05 Merge "res_pjsip_sdp_rtp: Fix address family of explicit media_address." into 13 2016-10-28 05:33:02 -05:00
Corey Farrell f373de3020 Fix shutdown crash caused by modules being left open.
It is only safe to run ast_register_cleanup callbacks when all modules
have been unloaded.  Previously these callbacks were run during graceful
shutdown, making it possible to crash during shutdown.

ASTERISK-26513 #close

Change-Id: Ibfa635bb688d1227ec54aa211d90d6bd45052e21
2016-10-28 01:11:21 -04:00
Joshua Colp e8a3af2629 Merge "pjsip: Fix a few media bugs with reinvites and asymmetric payloads." into 13 2016-10-27 16:51:33 -05:00
zuul 66044dd606 Merge "res_pjsip_caller_id: Fix crash on session timers UPDATE on inbound calls." into 13 2016-10-27 16:48:05 -05:00
zuul 12ee2fd58d Merge "pjproject_bundled: Remove usage of tar's --strip-components option" into 13 2016-10-27 15:05:15 -05:00
Mark Michelson 7d7b52c434 Update for 13.12.1 2016-10-27 13:48:03 -05:00
zuul f20b5ef36e Merge "app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS." into 13 2016-10-27 13:26:59 -05:00
Joshua Colp 9c761b8f45 app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS.
When executing the MailboxExists dialplan application and
MAILBOX_EXISTS dialplan function the passed in temporary voice
mailbox was not cleared, causing it to try to free garbage.

ASTERISK-26503 #close

Change-Id: Ie21ccfa1b80b9c59318e596f6b8e17da2b5a7cb3
2016-10-27 10:13:48 -05:00
George Joseph 61a5c3460e pjproject_bundled: Remove usage of tar's --strip-components option
Older versions of tar don't support the --strip-components option so
instead of doing 'tar --strip-components=1 -C source', we now just
untar to the tarball's root directory (pjproject-<version>) and
rename that directory to 'source'.

Also fixed an issue where the pjproject source directory is a hard
coded absolute pathname.

ASTERISK-26510 #close
ASTERISK-22480 #close

Change-Id: I9ec92952507a91ff4e4d01e0149e09fd8e8f32b0
2016-10-27 08:28:16 -06:00
Joshua Colp 675c71ae8c res_pjsip_caller_id: Fix crash on session timers UPDATE on inbound calls.
The res_pjsip_caller_id module wrongly assumed that a
saved From header would always exist on sessions. This
is true until an inbound call is received and a session
timer causes an UPDATE to be sent. In this case there will
be no saved From header and a crash will occur. This change
makes it fall back to the From header of the outgoing request
if no saved From header is present.

ASTERISK-26307 #close

Change-Id: Iccc3bc8d243b5ede9b81abf960292930c908d4fa
2016-10-27 13:23:03 +00:00
Joshua Colp 46863c9d9a Merge "test_astobj2_thrash: Fix multithreaded issues" into 13 2016-10-26 18:00:42 -05:00
Joshua Colp dc13003dd9 Merge "chan_pjsip: segfault on already disconnected session" into 13 2016-10-26 09:14:39 -05:00
Joshua Colp 14496ce1e5 app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS.
When executing the MailboxExists dialplan application and
MAILBOX_EXISTS dialplan function the passed in temporary voice
mailbox was not cleared, causing it to try to free garbage.

ASTERISK-26503 #close

Change-Id: Ie21ccfa1b80b9c59318e596f6b8e17da2b5a7cb3
2016-10-26 12:52:47 +00:00
Joshua Colp e0bc17edff pjsip: Fix a few media bugs with reinvites and asymmetric payloads.
When channel format changes occurred as a result of an RTP
re-negotiation the bridge was not informed this had happened.
As a result the bridge technology was not re-evaluated and the
channel may have been in a bridge technology that was incompatible
with its formats. The bridge is now unbridged and the technology
re-evaluated when this occurs.

The chan_pjsip module also allowed asymmetric codecs for sending
and receiving. This did not work with all devices and caused one
way audio problems. The default has been changed to NOT do this
but to match the sending codec to the receiving codec. For users
who want asymmetric codecs an option has been added, asymmetric_rtp_codec,
which will return chan_pjsip to the previous behavior.

The codecs returned by the chan_pjsip module when queried by
the bridge_native_rtp module were also not reflective of the
actual negotiated codecs. The nativeformats are now returned as
they reflect the actual negotiated codecs.

ASTERISK-26423 #close

Change-Id: I6ec88c6e3912f52c334f1a26983ccb8f267020dc
2016-10-26 12:47:59 +00:00
Joshua Colp f534f67f52 res_pjsip_sdp_rtp: Fix address family of explicit media_address.
When an explicit media_address is provided the address family
in the SDP needs to be set to reflect it.

ASTERISK-26309

Change-Id: Ib9350cc91c120eb2f96f0623d3907d12af67eb79
2016-10-26 11:32:04 +00:00
Mark Michelson 226a7e36c5 Update for 13.12.0 2016-10-25 14:13:02 -05:00
George Joseph 3a2092b722 test_astobj2_thrash: Fix multithreaded issues
The test uses 4 threads to grow, count, lookup and shrink 15K objects
in a container.  If there's only 1 execution engine available, the test
will complete in <50ms.  If each threads gets its own execution engine,
the test may timeout after 60 seconds because the count thread does a
locked ao2_callback on the whole container in a tight loop with only
a sched_yield to give up time.  The lock contention makes the test
execution times wildly variable and mostly timeout.  2 execution
engines are OK, 3 results in about 33% failure rate and >=4 causes
a 80% failure rate.

To fix, the sched_yield was changed to a usleep(500).

Also, the number of buckets specified for the container was an even
number so that was changed to the next prime number greater than
(MAX_HASH_ENTRIES / 100).  That's 151 currently.

Change-Id: I50cd2344161ea61bfe4b96d2a29a6ccf88385c77
2016-10-25 11:31:46 -05:00
Joshua Colp 2bd8af6d0b Merge "pjsip: Support dual stack automatically." into 13 2016-10-25 05:29:08 -05:00
zuul 2203a50042 Merge "pjproject_bundled: Fixed various build issues" into 13 2016-10-24 21:55:30 -05:00
Joshua Colp 5677e18631 Merge "typo: s/paranthesis/parenthesis/ in a comment" into 13 2016-10-24 18:21:17 -05:00
Joshua Colp 578e34b445 Merge "ARI: Detect duplicate channel IDs" into 13 2016-10-24 18:20:33 -05:00
Pascal Cadotte Michaud 640203802e typo: s/paranthesis/parenthesis/ in a comment
Change-Id: I7c1f4eb051177ee22cbe97e063d4a3effe29be30
2016-10-24 17:48:17 -05:00
George Joseph 9b3557e054 pjproject_bundled: Fixed various build issues
* CFLAGS is now properly set when using older gcc.
* All third-party pjproject targets have been removed.  This fixes
  an issue with older libsrtp in some distros.
* Manually removing the source directory now causes a rebuild.
* EXTERNALS_CACHE_DIR is now properly checked.
* Whitespace fixes.

Change-Id: I98fec6847efc5602a9f41cb95096fd660a49fa60
2016-10-24 14:05:41 -06:00
Joshua Colp bb982480d8 pjsip: Support dual stack automatically.
This change adds support for dual stack automatically. No
configuration is required and the IP address and version
in the SIP messages and SDP will be automatically changed
based on the transport over which the message is being
sent. RTP usage has also been changed to listen on both
IPv4 and IPv6 simultaneously to allow media to flow, and
to allow ICE support on both simultaneously. This also
allows failover between IPv6 and IPv4 to work as expected.

ASTERISK-26309 #close

Change-Id: I235a421d8f9a326606d861b449fa6fe3a030572d
2016-10-23 13:51:42 +00:00
Mark Michelson eff97808fb ARI: Detect duplicate channel IDs
ARI and AMI allow for an explicit channel ID to be specified
when originating channels. Unfortunately, there is nothing in
place to prevent someone from using the same ID for multiple
channels. Further complicating things, adding ID validation to channel
allocation makes it impossible for ARI to discern why channel allocation
failed, resulting in a vague error code being returned.

The fix for this is to institute a new method for channel errors to be
discerned. The method mirrors errno, in that when an error occurs, the
caller can consult the channel errno value to determine what the error
was. This initial iteration of the feature only introduces "unknown" and
"channel ID exists" errors. However, it's possible to add more errors as
needed.

ARI uses this feature to determine why channel allocation failed and can
return a 409 error during origination to show that a channel with the
given ID already exists.

ASTERISK-26421

Change-Id: Ibba7ae68842dab6df0c2e9c45559208bc89d3d06
2016-10-20 12:50:02 -05:00
snuffy c2036c827c Fix issue with CLI not returning to prompt after running "features show"
ASTERISK-26444 #close

Change-Id: I91d645b7e6e5dba35f8c410df2be77a8c0e3acb8
2016-10-19 17:55:39 -05:00
zuul 87483f3545 Merge "utils.c: Fix ast_set_default_eid for multiple platforms" into 13 2016-10-19 17:35:50 -05:00
zuul a2af51fab1 Merge "res_rtp_asterisk: Add ice_blacklist option" into 13 2016-10-19 15:02:16 -05:00
zuul ad2dde8106 Merge "chan_sip: Support nat=auto_comedia or nat=force_rport,auto_comedia." into 13 2016-10-19 10:57:01 -05:00
Joshua Colp 1bde92f68c Merge "CDR: Alter destruction pattern for CDR chains." into 13 2016-10-19 08:31:42 -05:00
Michael Walton 3c62b60e56 res_rtp_asterisk: Add ice_blacklist option
Introduces ice_blacklist configuration in rtp.conf. Subnets listed in the
form ice_blacklist = <subnet spec>, e.g. ice_blacklist =
192.168.1.0/255.255.255.0, are excluded from ICE host, srflx and relay
discovery. This is useful for optimizing the ICE process where a system
has multiple host address ranges and/or physical interfaces and certain
of them are not expected to be used for RTP. Multiple ice_blacklist
configuration lines may be used. If left unconfigured, all discovered
host addresses are used, as per previous behavior.

Documention in rtp.conf.sample.

ASTERISK-26418 #close

Change-Id: Ibee88f80d7693874fda1cceaef94a03bd86012c9
2016-10-19 12:14:53 +00:00
Mark Michelson 012fda29d2 CDR: Alter destruction pattern for CDR chains.
CDRs form chains. When the root of the chain is destroyed, it then
unreferences the next CDR in the chain. That CDR is destroyed, and it
then unreferences the next CDR in the chain. This repeats until the end
of the chain is reached. While this typically does not cause any sort of
problems, it is possible in strange scenarios for the CDR chain to grow
way longer than expected. In such a scenario, the destruction pattern
can result in a stack overflow.

This patch fixes the problem by switching from a recursive pattern to an
iterative pattern for destruction. When the root CDR is destroyed, it is
responsible for iterating over the rest of the CDRs and unreferencing
each one. Other CDRs in the chain, since they are not the root, will
simply destroy themselves and be done. This causes the stack depth not
to increase.

ASTERISK-26421 #close
Reported by Andrew Nagy

Change-Id: I3ca90c2b8051f3b7ead2e0e43f60d2c18fb204b8
2016-10-18 16:58:02 -05:00
zuul 6adc293b14 Merge "cli: Auto-complete File not Module for core set debug." into 13 2016-10-18 12:34:41 -05:00
zuul 0384bae66f Merge "chan_rtp: Set a sane default rtp engine for unicast." into 13 2016-10-18 12:24:53 -05:00
Alexei Gradinari 6d462b9eaf chan_pjsip: segfault on already disconnected session
On heavy loaded system the TCP/TLS incoming calls could be
disconnected by pjproject while these calls are being
processed by asterisk.

This patch uses functions pjsip_inv_add_ref/pjsip_inv_dec_ref
to inform pjproject that an INVITE session is in use.

ASTERISK-26482 #close

Change-Id: Ia2e3e2f75358cdb530252a9ce158af3d5d9fdf33
2016-10-18 10:04:54 -04:00
Joshua Colp c25163993d Merge "menuselect: invalid test for GTK2" into 13 2016-10-18 08:17:43 -05:00
Alexander Traud 662b560c35 cli: Auto-complete File not Module for core set debug.
Since Asterisk 1.8, the command "core set debug" on the command-line interface
asks not for a file (.c) but a module name. This change shows modules (.so) on
the auto-completion via a tabulator or the question mark. Now, when you
partially type a module name, TAB or ?, you get the correct candidiates.

ASTERISK-26480

Change-Id: I1213f1dd409bd4ff8de08ad80cb0c73cafb1bae0
2016-10-18 03:34:59 -05:00
zuul 633c9062ab Merge "res/ari: Add the Asterisk EID field to outgoing events" into 13 2016-10-17 23:58:31 -05:00
zuul 1a8a15e931 Merge "app_queue: Added initialization for "context" parameter" into 13 2016-10-17 15:45:43 -05:00
Mark Michelson df75b647da Update for 13.12.0-rc1 2016-10-17 14:08:19 -05:00
Tzafrir Cohen 6f5880913f menuselect: invalid test for GTK2
configuire.ac was only checking for the existence of pkg-config
and not the gtk2 package itself.  Now it calls AST_PKG_CONFIG_CHECK
for gtk+-2.0.

ASTERISK-26356 #close

Change-Id: I8079d515d6ea99f9ab320a7eaa71c2aaa101ccd5
2016-10-17 12:39:16 -05:00
George Joseph 546ec4b038 pjproject_bundled: Add patch to address SSL crash
Addresses crashes when an attempt is made to operate on an SSL socket
after the socket has been closed.

ASTERISK-26477 #close

Change-Id: I421305b357558b4f9e690210dc0f4831ef4b3002
2016-10-17 11:55:35 -05:00
Moises Silva 644fad7477 chan_rtp: Set a sane default rtp engine for unicast.
ASTERISK-26439

Change-Id: I7f5ee2eeba8906e9ecb3293dbe3a747770bb5011
2016-10-17 08:13:57 -05:00
Matt Jordan 42cfdcd1b7 res/ari: Add the Asterisk EID field to outgoing events
This patch adds the Asterisk EID field to all outgoing ARI events.
Because this field should be added to all events as they are
transmitted, it is appended to the JSON message just prior to it being
handed off to the application message handler. This makes it somewhat
resilient to both new events being added to ARI, as well as other
potential event transport mechanisms.

ASTERISK-26470 #close

Change-Id: Ieff0ecc24464e83f3f44e9c3e7bd9a5d70b87a1d
2016-10-17 08:13:46 -05:00
George Joseph 74d9385273 utils.c: Fix ast_set_default_eid for multiple platforms
ast_set_default_eid was searching for ethX, emX, enoX, ensX and even
pciD#U interface names.  While this was a good attempt, it wasn't
inclusive enough to capture interfaces like enp6s0 or ens6d1, etc.

Rather than relying on interface names, we now simply find the first
interface returned by the OS that has a hardware address and that
address isn't all 0x00 or all 0xff.  The code IS different for BSD,
Solaris and Linux based on what method is available for enumerating
interfaces.

Tested on:
FreeBSD9
CentOS6
Ubuntu14
Fedora24

I was unable to test on Solaris at this time but the code for Solaris
is used elsewhere at Digium.

Change-Id: Iaa6db87ca78a9a375e47d70e043ae08c1448cb72
2016-10-16 17:33:10 -06:00
Michael Kuron f1fd873df0 chan_sip: Only send video on outgoing channel if incoming channel supports it
Previously, the settings videosupport=always and videosupport=yes behaved
identically and unconditionally caused a video offer to be sent in the SDP on
an outgoing call. This was a regression introduced with commit
5a1d90e1fb in Asterisk 1.6.1.

This commit restores correct behavior: videosupport=always causes a video offer
to be sent unconditionally, while videosupport=yes will only offer video on an
outbound channel if the incoming channel it is bridged to also supports video.
That way, the device receiving the outgoing call can display the correct user
interface elements for audio or video and will not unnecessarily show a blank
video window on an audio-only call.

ASTERISK-17470 #close

Change-Id: I782f4409d436114dbc97061c3570c0cd24f7c3ae
2016-10-15 12:17:12 +02:00
zuul d1d446b237 Merge "Fix issues with bundled pjproject cached download." into 13 2016-10-14 18:48:56 -05:00
Leandro Dardini 0306869399 app_queue: Added initialization for "context" parameter
When using Asterisk Realtime Architecture, empty fields are skipped and the
default values are used. If the "context" parameter in queue was set and then
cleared from the database, the old value remains in memory and it continues
to be used. This change initialize the "context" parameter with an empty value,
allowing clearing the parameter.

ASTERISK-26462 #close

Change-Id: I64be73d5044ce38dd02408bd0e53de965ef65905
2016-10-14 17:49:36 -05:00
zuul 3bdd7c0e38 Merge "Audit ast_json_pack() calls for needed UTF-8 checks." into 13 2016-10-14 17:17:12 -05:00
zuul 8d12d6021b Merge "json: Check party id name, number, subaddresses for UTF-8." into 13 2016-10-14 16:29:53 -05:00
zuul 05c6ab0d8f Merge "json: Add UTF-8 check call." into 13 2016-10-14 12:54:52 -05:00
zuul 4d1cb6a46d Merge "res_config_mysql: Fix several issues related to recent table changes" into 13 2016-10-14 12:46:48 -05:00
zuul 0fa6036b97 Merge "aoc.c: Whitespace cleanup" into 13 2016-10-14 11:01:22 -05:00
zuul 1b9ef66c50 Merge "app_queue.c: Fix clearing of pause reason string." into 13 2016-10-14 09:07:22 -05:00
Corey Farrell ce4cfd2eca Fix issues with bundled pjproject cached download.
Previously when testing I had a preexisting makeopts in ASTTOPDIR.  The
ordering of configure.ac causes --with-externals-cache to be processed
after third-party configure.  In cases where the Asterisk clone is
cleaned it would cause pjproject to be downloaded to /tmp.  This
moves processing of the externals cache and sounds cache to happen
before third-party configure.

This also addresses a possible issue with the third-party Makefile.  If
TMPDIR is set by the environment it would override the path given to
--with-externals-cache.

ASTERISK-26416

Change-Id: Ifab7f35bfcd5a31a31a3a4353cc26a68c8c6592d
2016-10-14 07:48:32 -05:00
Richard Mudgett 3c54328c57 Audit ast_json_pack() calls for needed UTF-8 checks.
Added needed UTF-8 checks before constructing json objects in various
files for strings obtained outside the system.  In this case string values
from a channel driver's peer and not from the user setting channel
variables.

* aoc.c: Fixed type mismatch in s_to_json() for time and granularity json
object construction.

ASTERISK-26466
Reported by: Richard Mudgett

Change-Id: Iac2d867fa598daba5c5dbc619b5464625a7f2096
2016-10-13 18:11:37 -05:00
Richard Mudgett 7f8f125738 json: Check party id name, number, subaddresses for UTF-8.
* Updated unit test as ast_json_name_number() is now NULL tolerant.

ASTERISK-26466 #close
Reported by: Richard Mudgett

Change-Id: I7d4e14194f8f81f24a1dc34d1b8602c0950265a6
2016-10-13 18:11:36 -05:00
Richard Mudgett 9621c9bcbc json: Add UTF-8 check call.
Since the json library does not make the check function public we
recreate/copy the function in our interface module.

ASTERISK-26466
Reported by: Richard Mudgett

Change-Id: I36d3d750b6f5f1a110bc69ea92b435ecdeeb2a99
2016-10-13 18:11:36 -05:00
Richard Mudgett e4bb9f9a37 aoc.c: Whitespace cleanup
* In s_to_json() removed unnecessary ast_json_ref() to ast_json_null()
when creating the type json object.  The ref is a noop.

Change-Id: I2be8b836876fc2e34a27c161f8b1c53b58a3889a
2016-10-13 15:42:01 -05:00
Richard Mudgett bcac905bd3 app_queue.c: Fix clearing of pause reason string.
The pause reason is not always cleared when it should be cleared.

* Made set_queue_member_pause() always clear pause reason if not pausing
with a reason string.

Change-Id: I993dad19626ec017478a230e980989438b778c53
2016-10-13 15:41:17 -05:00
Richard Mudgett ee4ae2b648 app_minivm.c: Fix malformed ast_json_pack() call.
Change-Id: I082b239022fac462666e52a14a44304748908dc0
2016-10-13 15:40:09 -05:00
George Joseph 90ae4e4337 res_config_mysql: Fix several issues related to recent table changes
Unlike any of the other database drivers, res_config_mysql checks that
the table definition matches the requirements for every insert and
update statement.  Since all requirements are forced to 'char', any
column that isn't a char, like ps_contacts' expiration_time,
qualify_timeout, etc., will throw a warning.  It's kinda harmless but
very misleading.  Since no other driver does those checks on insert
or update, they've been removed from res_config_mysql.  Also, all
the logic that actually attempted to ALTER the table to fix the issue
has been removed.  With the move to alembic, the auto-alter
functionality is not only unnecessary, it's also dangerous.

The other issue is that res_config_mysql calls the mysql_insert_id
function inside store_mysql.  Presumably the intention was to return
the number of rows inserted DESPITE A NOTE IN THE CODE THAT THE VALUE
IS NON_PORTABLE AND MAY CHANGE.  That value is then returned to
config realtime as the number of rows inserted.  Guess what?  The value
changed.  It now only returns the number of rows inserted if there's an
auto increment column on the table, which ps_contacts doesn't have.
Otherwise it returns 0.  So now, the insert worked but we tell config
realtime and sorcery that no rows were inserted.  That call to
mysql_insert_id was removed and we now always return 1 if the insert
succeeded.  We're only inserting 1 row at a time anyway.  If the insert
fails, we still return -1.

ASTERISK-26362 #close
Reported-by: Carlos Chavez

Change-Id: I83ce633efdb477b03c8399946994ee16fefceaf4
2016-10-12 15:30:40 -06:00
zuul 3633c7926c Merge "bundled_pjproject: Add tests for programs used by the Makefile, et al." into 13 2016-10-12 11:04:56 -05:00
Torrey Searle 86c15db6a1 res_fax: Fix a tight race condition causing fax to crash in audio fallback
When T.38 gets rejected and G711 failback occurs there is a period of
time where neither AST_FAX_TECH_T38 nor AST_FAX_TECH_AUDIO is set,
leading to a crash.

Change-Id: Icc3f457b2292d48a9d7843dac0028347420cc982
2016-10-12 06:53:54 -05:00
Joshua Colp 2fbc0531e0 Merge "Add text of cdr directory into README.md for ast-db-manage" into 13 2016-10-12 05:32:12 -05:00
zuul 2971c1b4eb Merge "audiohooks: Remove redundant codec translations when using audiohooks" into 13 2016-10-11 18:39:11 -05:00
Rodrigo Ramírez Norambuena 29b7a5b00f Add text of cdr directory into README.md for ast-db-manage
Change-Id: I68321c4bea50730c39fdb486e5f23aeadd1ad636
2016-10-11 17:06:59 -05:00
zuul 39dbe7aba4 Merge "vector: After remove element recheck index" into 13 2016-10-11 16:51:30 -05:00
Joshua Colp 64b43d4474 Merge "app_dial: Add the "Q" option to set the cause on unanswered channels" into 13 2016-10-11 14:57:59 -05:00
zuul 5e19935395 Merge "astobj2: Add backtrace to log_bad_ao2." into 13 2016-10-11 13:57:54 -05:00
George Joseph f919edc4e2 app_dial: Add the "Q" option to set the cause on unanswered channels
The "Q" option will set the cause on the unanswered channels when
another channel answers.  It overrides the default of
ANSWERED_ELSEWHERE.

NOTE:  chan_sip does not support setting the cause on a CANCEL to
anything other than ANSWERED_ELSEWHERE.

ASTERISK-26446 #close

Change-Id: I71742e0919aaa16784c30a2b2e73fbeed7672e47
2016-10-11 11:05:16 -06:00
Alexander Traud a859bcb49c chan_sip: Support nat=auto_comedia or nat=force_rport,auto_comedia.
In the SIP channel driver chan_sip, auto_comedia was expected to be used in
tandem with auto_force_rport. Or stated differently: Only when auto_force_rport
was chosen (the default), auto_comedia worked. This change allows auto_comedia
to be set independently of the state of (auto_)force_rport. For example,
nat=force_rport,auto_comedia is useful for IPv4/IPv6 Dual Stack deployments
when IPv6 clients are behind a Firewall.

ASTERISK-26457 #close

Change-Id: Ib29d66c6dbb61648e371e01fc36c6978ddae5bc2
2016-10-11 07:08:49 -05:00
zuul da78600feb Merge "res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge" into 13 2016-10-11 06:47:59 -05:00
Badalyan Vyacheslav a884b26392 vector: After remove element recheck index
Small fix. It is necessary to double-check
the index that we just removed because there
is a new element.

ASTERISK-26453 #close

Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7
2016-10-11 06:43:34 -05:00
zuul d75beaa04a Merge "cel_odbc: Fix memory leak on module unload" into 13 2016-10-10 20:52:38 -05:00
Torrey Searle 349c34f72a res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge
If a bridge switched to P2P when a DTMF was in progress it
was possible for the DTMF to continue being sent indefinitely.

Change-Id: I7e2a3efe0d59d4b214ed50cd0b5d0317e2d92e29
2016-10-10 16:59:30 -05:00
zuul f2e392a3d2 Merge "pjproject_bundled: Add MALLOC_DEBUG capability" into 13 2016-10-10 15:21:33 -05:00
Badalyan Vyacheslav 9da3489d24 res_pjsip_config_wizard: Memory leak in module_unload
Fixed a memory leak. It removes only the first element.
Added a useful feature in vector.h to remove all items
under the CMP through a callback function / macro.

ASTERISK-26453 #close

Change-Id: I84508353463456d2495678f125738e20052da950
2016-10-10 11:04:42 -05:00
Badalyan Vyacheslav fa2885b3ff cel_odbc: Fix memory leak on module unload
Change-Id: Ic7a1236eba2408090fdabb5f717b5fa455ead715
2016-10-09 22:32:18 -05:00
zuul f809850aa0 Merge "alembic: Allow cdr, config and voicemail to exist in the same schema" into 13 2016-10-09 18:39:56 -05:00
George Joseph e6b0053d75 bundled_pjproject: Add tests for programs used by the Makefile, et al.
Added tests for bzip2, tar, patch, sed and nm to configure.ac.

Set DOWNLOAD_TO_STDOUT to a working command line regardless of
whether the download program is wget, curl or fetch.

Added a 'configure.m4' file to the third-party directory which takes
care of calling any third-party project setup.  Had to move some
pjproject_bundled stuff up in configure.ac so it was called before
the third-party configure macro.

The pjproject tarball is now downloaded to the externals_cache_dir if
it was specified on the ./configure command line

Removed regeneration of the pjproject aconfigure file.  It was only
needed for an old patch that no longer applies.

Converted the tests for symbols to explicit tests since we know that
they're now available in the bundled version.  Saves a little time
during configure.

ASTERISK-26416 #close
Reported-by: Corey Farrell

Change-Id: Id1d94251c0155f8dd41b7de7067f35cfbaafbb9b
2016-10-09 17:36:34 -06:00
George Joseph 0dc0356e39 pjproject_bundled: Add MALLOC_DEBUG capability
pjproject_bundled will now use the asterisk memory debugging APIs
if MALLOC_DEBUG is turned on in menuselect.

Because this required stubs for the executable programs and the python
bindings, some Makefile reorganization was needed to properly handle
the dependencies.  As a result, the makefile now individually makes
each of the pjproject libraries separately instead of making them all
in 1 shot.  The only visible change is that there are separate status
lines printed for each library instead oif 1 for all libs.  Also, the
making of the pjproject dependency files was eliminated.  They're not
needed for building unless you're actively modifying pjproject source
files and it makes the build process faster.  Finally, any issues with
parallel builds should be resolved again making the build faster.

Change-Id: Icc5e3d658fbfb00e0a46b44c66dcc2522d5171b0
2016-10-09 17:14:37 -06:00
Corey Farrell dd873bcada astobj2: Add backtrace to log_bad_ao2.
* Compile __ast_assert_failed unconditionally.
* Use __ast_assert_failed to log messages from log_bad_ao2
* Remove calls to ast_assert(0) that happen after log_bad_ao2 was run.

Change-Id: I48f1af44b2718ad74a421ff75cb6397b924a9751
2016-10-07 18:32:16 -04:00
George Joseph 86550f9c17 alembic: Allow cdr, config and voicemail to exist in the same schema
cdr, config and voicemail are all separate alembic trees.  Because
alembic's default is to use a table named 'alembic_version' to store
the current tree revision, the 3 trees can't exist in the same schema
without stepping on each other.

Now each tree uses 'alembic_version_<tree_name>' as the version table.
Each tree's env.py script now first checks for 'alembic_version'.  If
it finds it AND its revision is in the tree's history, the script
renames it to 'alembic_version_<tree_name>'.  Regardless, the script
then continues with the migration using 'alembic_version_<tree_name>'
and creates that table if it's not found.  The result is that if an
existing 'alembic_version' table was found but it didn't belong to this
tree, it's left alone and 'alembic_version_<tree_name>' is used or
created.

WARNING:  If multiple trees are using the same schema, they MUST NOT
CRU or D any objects with names that might exist in the other trees.
An example would be 'yesno_values' type.  If two trees perform
operations on it, one tree could pull it out from under the other.
Thankfully we currently don't share any names among cdr, config and
voicemail.

NOTE:  Since the env.py scripts in each tree were identical, a common
env.py has been placed in the ast-db-manage directory and a symlink
to it has been placed in each tree directory.

ASTERISK-24311 #close
Reported-by: Dafi Ni

Change-Id: I4d593f000350deb5d21a14fa1e9bc3896844d898
2016-10-07 06:47:11 -06:00
Alexander Traud f166681c12 chan_sip: Honor support of Symmetric Response (rport) for SIP requests.
In the SIP channel driver chan_sip, the default is "auto_force_rport". When no
NAT was detected, for example in case of IPv6, Asterisk uses the IP address
from the headers within the SIP-REGISTER for subsequent SIP signaling. When
the remote party specifies support for Symmetric Response (RFC 3581) via the
parameter "rport", Asterisk should not extract the port from the SIP headers
but reuse the port of the transport. This did not happen because of a typo.

ASTERISK-26438 #close

Change-Id: If6e7891848aaf96666dee5305695f7c6667cd5a6
2016-10-05 04:35:23 -05:00
Michael Walton 430f6e5388 audiohooks: Remove redundant codec translations when using audiohooks
The main frame read and write handlers in main/channel.c don't use the
optimum placement in the processing flow for calling audiohooks
callbacks, as far as codec translation is concerned. This change places
the audiohooks callback code:
 * After the channel read translation if the frame is not linear before
the translation, thereby increasing the chance that the frame is linear
as required by audiohooks
 * Before the channel write translation if the frame is linear at this
point
This prevents the audiohooks code from instantiating additional
translation paths to/from linear where a linear frame format is already
available, saving valuable CPU cycles

ASTERISK-26419

Change-Id: I6edd5771f0740e758e7eb42558b953f046c01f8f
2016-10-05 15:41:41 +13:00
Joshua Colp b0b106a473 Merge "Remove "format_ogg_opus: New format"" into 13 2016-09-29 16:14:19 -05:00
Kevin Harwell 2449d2877c Remove "format_ogg_opus: New format"
This reverts commit 40aa28131b.

ASTERISK-26426 #close

Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5
2016-09-29 14:31:53 -05:00
George Joseph f0a2e628d6 download_externals: Fix issue with re-install
Needed to ignore an xmlstarlet return code for optional element.

Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873
Reported-by: Dan Jenkins
2016-09-27 15:11:39 -06:00
George Joseph 1e8b3d00ce Merge "codec_opus: Add download ability to menuselect" into 13 2016-09-27 14:11:41 -05:00
George Joseph 269ee510c9 Merge "codec_opus: Replace res_format_attr_opus with the one from codec_opus" into 13 2016-09-27 14:11:26 -05:00
George Joseph 0674f319b9 Merge "format_ogg_opus: New format" into 13 2016-09-27 14:11:11 -05:00
zuul 1497e29c4f Merge "chan_sip: Resolve externhost not to IPv6; instead go for IPv4." into 13 2016-09-27 13:34:16 -05:00
George Joseph 5258c067ae codec_opus: Add download ability to menuselect
Updated codecs/codecs.xml to add codec_opus to the external
download list.

ASTERISK-26409

Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4
2016-09-27 09:52:24 -05:00
George Joseph a5af8709c8 codec_opus: Replace res_format_attr_opus with the one from codec_opus
Preparation

ASTERISK-26409

Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3
(cherry picked from commit 59f7662a93)
2016-09-27 09:52:24 -05:00
George Joseph 44c0c51cf1 format_ogg_opus: New format
Add Ogg/Opus playback support.

This uses libopusfile in order to be able to read .opus files and play
them back.

Writing/recording support is not present at this time.

ASTERISK-26409

Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955
2016-09-27 09:52:24 -05:00
George Joseph 0ab443007b build_tools: Add ability to download variants to download_externals
Some external packages have multiple variants that apply to different
builds of asterisk.  The DPMA for instance has a "bundled" variant that
needs to be downloaded if asterisk was configured with
--with-pjproject-bundled.

There are 2 ways to specify variants:

If you need the user to make the decision about which variant to
download, simply create multiple menuselect "member" entries like so...

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

<member name="res_digium_phone-bundled" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

Note that the second entry has "-<variant>" appended to the name.
You can then use the existing menuselect facilities to restrict which
members to enable or disable.  Youy probably don't want the user to
enable multiple at the same time.

If you want to hide the details of the variants, the better way to
do it is to create 1 member with "variant" elements.

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
  <member_data>
    <downloader>
      <variants>
        <variant tag="bundled"
          condition='[[ "$PJPROJECT_BUNDLED" = "yes" ]]'/>
      </variants>
    </downloader>
  </member_data>
</member>

The condition must be a bash expression suitable for use with an "if"
statement.  Any environment variable can be used plus those available
in makeopts.

In this case, if asterisk was configured with --with-pjproject-bundled
the bundled variant will be automatically downloaded.  Otherwise the
normal version will be downloaded.

Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e
2016-09-25 13:40:35 -05:00
zuul 9b0e6f9c86 Merge "channels/chan_pjsip: fix HANGUPCAUSE function bug." into 13 2016-09-23 18:06:43 -05:00
zuul 52e3c6c2e0 Merge "chan_sip: Address runaway when realtime peers subscribe to mailboxes" into 13 2016-09-23 17:38:26 -05:00
Aaron An a0a17a8c6f channels/chan_pjsip: fix HANGUPCAUSE function bug.
HANGUPCAUSE not return 'SIP 200 Ok' when dialed channel answered.
This patch change the call order of ast_queue_control_data
and ast_queue_control in chan_pjsip_incoming_response.

ASTERISK-26396 #close
Reported by: AaronAn
Tested by: AaronAn

Change-Id: Ide2d31723d8d425961e985de7de625694580be61
2016-09-23 14:11:05 -05:00
Alexander Traud 0502675e5c chan_sip: Resolve externhost not to IPv6; instead go for IPv4.
For the channel driver chan_sip, you specify externhost=example.com in sip.conf
when your Asterisk is behind a NAT and your IP address is assigned dynamically.
Or stated differently: You do not have a static IP address to use "externaddr"
directly. This NAT support is quite handy but just about IPv4. Previously,
Asterisk resolved "externhost" to any IP version. When the first DNS answer
resolved to an IPv6, Asterisk sent an IPv6 in SIP/SDP for origin (o=) and
connection (c=). This happened in outgoing SIP-REGISTER and while answering
SIP-INVITE. If the remote peer is IPv4-only, it might not handle o=/c= with an
IPv6. This change makes sure, no IPv6 is resolved anymore for "externhost".

ASTERISK-18232 #close
Reported by: Jacek Kowalski
Tested by: Alexander Traud
patches:
 changes.patch submitted by Alessandro Crespi

Change-Id: If68eedbeff65bd1c1d8a9ed921c02ba464b32dac
2016-09-23 09:59:14 -05:00
George Joseph 0056bcaebd chan_sip: Address runaway when realtime peers subscribe to mailboxes
Users upgrading from asterisk 13.5 to a later version and who use
realtime with peers that have mailboxes were experiencing runaway
situations that manifested as a continuous stream of taskprocessor
congestion errors, memory leaks and an unresponsive chan_sip.

A related issue was that setting rtcachefriends=no NEVER worked in
asterisk 13 (since the move to stasis).  In 13.5 and earlier, when a
peer tried to register, all of the stasis threads would block and
chan_sip would again become unresponsive.  After 13.5, the runaway
would happen.

There were a number of causes...
* mwi_event_cb was (indirectly) calling build_peer even though calls to
  mwi_event_cb are often caused by build_peer.
* In an effort to prevent chan_sip from being unloaded while messages
  were still in flight, destroy_mailboxes was calling
  stasis_unsubscribe_and_join but in some cases waited forever for the
  final message.
* add_peer_mailboxes wasn't properly marking the existing mailboxes
  on a peer as "keep" so build_peer would always delete them all.
* add_peer_mwi_subs was unsubscribing existing mailbox subscriptions
  then just creating them again.

All of this was causing a flood of subscribes and unsubscribes on
multiple threads all for the same peer and mailbox.

Fixes...
* add_peer_mailboxes now marks mailboxes correctly and build_peer only
  deletes the ones that really are no longer needed by the peer.
* add_peer_mwi_subs now only adds subscriptions marked as "new" instead
  of unsubscribing and resubscribing everything.  It also adds the peer
  object's address to the mailbox instead of its name to the subscription
  userdata so mwi_event_cb doesn't have to call build_peer.

With these changes, with rtcachefriends=yes (the most common setting),
there are no leaks, locks, loops or crashes at shutdown.

rtcachefriends=no still causes leaks but at least it doesn't lock, loop
or crash.  Since making rtcachefriends=no work wasnt in scope for this
issue, further work will have to be deferred to a separate patch.

Side fixes...
 * The ast_lock_track structure had a member named "thread" which gdb
   doesn't like since it conflicts with it's "thread" command.  That
   member was renamed to "thread_id".

ASTERISK-25468 #close

Change-Id: I07519ef7f092629e1e844f855abd279d6475cdd0
2016-09-23 07:53:10 -05:00
zuul 7cce1a7817 Merge "core: Ensure presencestate subtype and message are NULL." into 13 2016-09-22 08:43:38 -05:00
Joshua Colp d7587a67eb Merge "res_odbc: Make pooling option deprecation notice more useful." into 13 2016-09-22 07:10:50 -05:00
zuul 94b705f9fb Merge "cdr_mysql: fix UTC support" into 13 2016-09-21 17:26:35 -05:00
Joshua Colp 323aff3a09 core: Ensure presencestate subtype and message are NULL.
When retrieving presence state information there is no
guarantee that the subtype and message passed in are
set to NULL. This change ensures they are.

ASTERISK-26397 #close

Change-Id: I61f8187972d5d8bbd7d6b7f4daa4f4f7e8237b23
2016-09-21 20:03:37 +00:00
zuul 81bb672861 Merge "logger: Fix default console settings." into 13 2016-09-21 12:07:59 -05:00
Joshua Colp 10c180760c res_odbc: Make pooling option deprecation notice more useful.
This changes the notice for the deprecation of the old
pooling options to point to the new option for doing
pooling. This gives a clearer direction as to what to
look into.

ASTERISK-26389 #close

Change-Id: I2ca9cdfdcd75aec170a7db9d5ff69a4cd25b7c10
2016-09-21 11:05:34 -05:00
zuul 5cb3fc5d67 Merge "core: Fix LOW_MEMORY missing symbol ast_pbx_uuid_get." into 13 2016-09-21 09:57:50 -05:00
Tzafrir Cohen 42cc267016 cdr_mysql: fix UTC support
* Make 'cdrzone=UTC' work properly.
* Fix the documentation of cdr_mysql.conf: it's cdrzone and not timezone

ASTERISK-26359 #close

Change-Id: I2a6f67b71bbbe77cac31a34d0bbfb1d67c933778
2016-09-21 09:29:05 -05:00
Joshua Colp f16ab19292 odbc: Remove options that are no longer applicable.
The pooling, shared_connection, limit, and idlecheck options
are no longer used in res_odbc.

ASTERISK-26389

Change-Id: I2fde7b467d01f9d1c82cc0a339bb4f7e1dd6bbe6
2016-09-21 13:46:36 +00:00
zuul a6b05e6371 Merge "asterisk.c: Non-root users also get the astcanary after core restart." into 13 2016-09-21 07:36:40 -05:00
Corey Farrell c9ce299b64 core: Fix LOW_MEMORY missing symbol ast_pbx_uuid_get.
Move the function outside the conditional block that excludes
LOW_MEMORY.

ASTERISK-26273 #close

Change-Id: Ic290fa128222c410c3531107e30efacabc8493b4
2016-09-20 16:17:42 -04:00
Joshua Colp 77fafd1534 Merge "sd_notify (systemd status notifications) support" into 13 2016-09-20 14:03:15 -05:00
zuul 177557bc00 Merge "res_pjsip_multihomed: Change Contact port to listening port." into 13 2016-09-20 12:50:30 -05:00
Corey Farrell 610eb4c189 logger: Fix default console settings.
When logger.conf is missing or invalid we should be printing notices,
warnings and errors to the console.  The logmask was incorrectly
calculated.

Change-Id: Ibaa9465a8682854bc1a5e9ba07079bea1bfb6bb3
2016-09-20 12:01:57 -05:00
Tzafrir Cohen 36092ee3a0 sd_notify (systemd status notifications) support
sd_notify() is used to notify systemd of changes to the status of the
process. This allows the systemd daemon to know when the process
finished loading (and thus only start another program after Asterisk has
finished loading).

To use this, use a systemd unit with 'Type=notify' for Asterisk.

This commit also adds the function ast_sd_notify(), a wrapper around
sd_notify that does nothing if not built with systemd support.

Also adds support for libsystemd detection in the configure script.

Change-Id: Ied6a59dafd5ef331c5c7ae8f3ccd2dfc94be7811
(cherry picked from commit 07b95f7c65)
2016-09-20 08:00:14 -06:00
Walter Doekes 9372d32100 asterisk.c: Non-root users also get the astcanary after core restart.
Without this change, a 'core restart' would kill the astcanary forever
if you're not running as root. Both with and without this patch, the
scheduling priority was still SCHED_RR after restart.

Additionally, the astcanary is now spawned if you start with high
priority and Asterisk doesn't get a chance to lower it. For example
through: `chrt -r 10 sudo -u asterisk asterisk -c`

Also reap killed astcanary processes on core restart.

ASTERISK-26352 #close

Change-Id: Iacb49f26491a0717084ad46ed96b0bea5f627a55
2016-09-20 02:05:27 -05:00
zuul 34461b89ac Merge "asterisk.c: When astcanary dies on linux, reset priority on all threads." into 13 2016-09-19 18:03:13 -05:00
zuul 0bd4398b8a Merge "Fix showing of swap details when sysinfo() is available" into 13 2016-09-19 17:21:03 -05:00
zuul 9383beb073 Merge "res_config_odbc.c: Fix buffer size limitation creating invalid SQL." into 13 2016-09-19 15:21:39 -05:00
Walter Doekes e96448e991 asterisk.c: When astcanary dies on linux, reset priority on all threads.
Previously only the canary checking thread itself had its priority set
to SCHED_OTHER. Now all threads are traversed and adjusted.

ASTERISK-19867 #close
Reported by: Xavier Hienne

Change-Id: Ie0dd02a3ec42f66a78303e9c1aac28f7ed9aae39
2016-09-19 14:24:49 -05:00
Timo Teräs 01884a7af6 Fix showing of swap details when sysinfo() is available
If sysinfo() is available, but not sysctl() or swapctl() the
printing code for swap buffer sizes is incorrectly omitted.
The above condition happens with musl c-library.

Fix #if rule to consider defined(HAVE_SYSINFO). And also
remove the redundant || defined(HAVE_SYSCTL) which was
incorrectly there to start with. Now swap information is
displayed only if an actual libc function to get it is
available.

This also fixes warnings previously seen with musl libc:

   [CC] asterisk.c -> asterisk.o
asterisk.c: In function 'handle_show_sysinfo':
asterisk.c:773:6: warning: variable 'totalswap' set but not used
 [-Wunused-but-set-variable]
  int totalswap = 0;
      ^~~~~~~~~
asterisk.c:770:11: warning: variable 'freeswap' set but not used
 [-Wunused-but-set-variable]
  uint64_t freeswap = 0;
           ^~~~~~~~

Change-Id: I1fb21dad8f27e416c60f138c6f2bff03fb626eca
2016-09-16 08:58:55 -05:00
Richard Mudgett cdbad152c7 res_config_odbc.c: Fix buffer size limitation creating invalid SQL.
Creating ODBC SQL queries resulted in queries too large to fit into the
supplied buffer.  The resulting truncated buffer contained an invalid SQL
query.

* Made SQL query generation code use a thread storage buffer that can
increase in size as needed.

* Fixed bad multi-line warning messages.

ASTERISK-26263 #close
Reported by: Jeppe Ryskov Larsen

Change-Id: I23f3cdd43c2dac80bed3ded4dd77d18cb17f21ae
2016-09-15 18:06:45 -05:00
Joshua Colp 449719be00 res_pjsip_multihomed: Change Contact port to listening port.
The res_pjsip_multihomed module determines what interface and transport
a request is going out on and updates the SIP message accordingly with
the address information. This currently incorrectly updates the Contact
header for connectionful protocols to the ephemeral connection port,
instead of the bound address for the listening socket which can actually
accept the connection back. If the remote side attempts to connect back on
the epehemeral port it will fail.

This change makes it so the port is updated to the bound port on
connectionful protocols and is maintained on UDP (as there can be
multiple of those).

ASTERISK-26374 #close

Change-Id: I50f8dab65b9f75117d73ba5f6bbcf6c9871854ab
2016-09-15 08:26:06 -05:00
George Joseph 4d64b176eb pjproject_bundled: Prevent SERVFAIL from marking name server bad
A name server that returns "Server Failure" is indicating only that
the server couldn't process that particular request.  We should NOT
assume that the name server is incapable of serving other requests.

Here's the scenario we've been encountering...

* 2 local name servers configured in resolv.conf.
* An OPTIONS request causes a request for A and AAAA records to go out
  to both nameservers.
* The A responses both come back successfully resolved.
* Because of an issue at some upstream nameserver, the AAAA responses
  for that particular query come back as "SERVFAIL" from both local
  name servers.
* Both local servers are marked as bad and no further queries can be
  sent until the 60 second ttl expires.  Only previously cached results
  can be used.
* In this case, 60 seconds is just enough time for another OPTIONS
  request to go out to the same host so the cycle repeats.

We could set the bad ttl really low but that also affects REFUSED and
NOTAUTH which probably DO signal a real server issue.  Besides, even
a really low bad ttl would be an issue on a pbx.

Although we use our own resolver in 14 and master and don't have this
issue there, Teluu has merged this patch upstream so it's appropriate
to cherry-pick to 14 and master to keep pjproject consistent.


Change-Id: Ie03ba902288e274aff23f9b9bb2786e1e8be09e0
2016-09-15 08:23:16 -05:00
zuul 11d05fc369 Merge "res_pjsip_transport_management: Convert time in log message to seconds." into 13 2016-09-14 22:59:07 -05:00
zuul 1ddaa825ec Merge "chan_sip: Fix session timeout on retransmit of non-UDP packets" into 13 2016-09-14 19:21:50 -05:00
zuul f0baa12538 Merge "rtp: Preserve timestamps on video frames." into 13 2016-09-14 17:29:33 -05:00
zuul 139d86c8ab Merge "sip_to_pjsip.py: Map legacy_useroption_parsing." into 13 2016-09-14 15:03:49 -05:00
Joshua Colp 1cac856e17 rtp: Preserve timestamps on video frames.
Currently when receiving video over RTP we store only
a calculated samples on the frame. When starting the video
it can take some time for this calculation to actually yield
a value as it requires constant changing timestamps. As well
if a video frame passes over multiple RTP packets this calculation
will fail as the timestamp is the same as the previous RTP
packet and the number of samples calculated will be 0.

This change preserves the timestamp on the frame and allows
it to pass through the core. When sending the video this timestamp
is used instead of a new one being calculated.

ASTERISK-26367 #close

Change-Id: Iba8179fb5c14c9443aee4baf670d2185da3ecfbd
2016-09-14 12:58:04 -05:00
zuul a5f7b07579 Merge "res_pjsip: Add ignore_uri_user_options option." into 13 2016-09-14 12:54:24 -05:00
Joshua Colp 9df4056d70 res_pjsip_transport_management: Convert time in log message to seconds.
ASTERISK-26375 #close

Change-Id: I46496af5cae41413e76d44d2068a7431279f09dc
2016-09-14 09:53:25 -05:00
Steve Davies 98e42cc662 chan_sip: Fix session timeout on retransmit of non-UDP packets
Change-Id I1cd33453c77c56c8e1394cd60a6f17bb61c1d957 Enable Session-Timers for
SIP over TCP (and TLS) also disables SIP retransmits in chan_sip for non-UDP
connections, allowing the TCP layer to handle the retransmits. Unfortunately,
this caused sessions to be terminated with a retransmit timeout becasue it
stopped at the point of the first retrans call.

This patch waits for the 64*T1 timer to expire instead.

ASTERISK-19968

Change-Id: I844f26801aada10bc94e9bebe6e151f0a8443204
2016-09-13 10:55:43 -05:00
zuul efba4a7b9c Merge "chan_sip: Allow target refresh (Contact update) on re-INVITE." into 13 2016-09-13 09:59:13 -05:00
zuul 3d7cbaa675 Merge "res_pjsip_messaging.c: Misc cleanups and fixes." into 13 2016-09-13 09:04:08 -05:00
Richard Mudgett 0388882cdb app_queue: Fix CLI "queue show" and AMI Queues action output truncation.
The output of CLI "queue show" and AMI Queues action is truncated and
"failed to extend from 240 to 327" messages are generated if the queue
member and interface names are lengthy.

* Increase the string buffer size from 240 to 512 in order to accommodate
for more information fields added to the output since v1.8.

ASTERISK-26360 #close
Reported by: Richard Mudgett

Change-Id: Id99c03cf5362453b80491a4b3b0434cb67aa966d
2016-09-12 12:26:47 -05:00
zuul c833c1fda1 Merge "contrib: Let safe_asterisk script continue without /dev/tty9." into 13 2016-09-12 09:03:48 -05:00
Walter Doekes da8ba990d1 chan_sip: Allow target refresh (Contact update) on re-INVITE.
Previously, the Contact was stored only on initial INVITE and on any
18X and 200. That meant that after re-INVITEs from *us* the Contact
could get updated, but after re-INVITEs from the *peer*, it did not.

This changeset fixes this inconsistency, properly allowing target
refreshes through re-INVITES (RFC3261, 12.2).

If your strictrtp setting allows it, this change allows you to switch
the source IP of a connected/calling device mid-call with a simple
re-INVITE from the new IP.

ASTERISK-26358 #close

Change-Id: Ibb8512054ab27c8c3d2514022568fde943bf2435
2016-09-12 03:40:54 -05:00
Richard Mudgett e9ddab4685 sip_to_pjsip.py: Map legacy_useroption_parsing.
Map the sip.conf general section legacy_useroption_parsing to the
new pjsip.conf global ignore_uri_user_options.

ASTERISK-26316
Reported by: Kevin Harwell

Change-Id: I78108a31995db19d41f4e1a07b3324692c5363fc
2016-09-09 17:10:02 -05:00
Richard Mudgett 30af92e78d res_pjsip: Add ignore_uri_user_options option.
This implements the chan_sip legacy_useroption_parsing option but with a
better name.

* Made the caller-id number and redirecting number strings obtained from
incoming SIP URI user fields always truncated at the first semicolon.
People don't care about anything after the semicolon showing up on their
displays even though the RFC allows the semicolon.

ASTERISK-26316 #close
Reported by: Kevin Harwell

Change-Id: Ib42b0e940dd34d84c7b14bc2e90d1ba392624f62
2016-09-09 17:09:54 -05:00
Walter Doekes 7ed5dc2c58 contrib: Let safe_asterisk script continue without /dev/tty9.
If you use the safe_asterisk script, it uses hardcoded defaults before
running configurable values from /etc/asterisk/startup.d. The hardcoded
default has TTY=9. Some containerized environments don't have such a
TTY, and safe_asterisk would stop.

The custom configuration from /etc/asterisk/startup.d/* isn't read until
after it stopped, so changing TTY in a custom config did not help.

This changeset changes safe_asterisk to continue if the TTY setting was
untouched and /dev/tty9 and /dev/vc/9 aren't found.

Change-Id: I2c7cdba549b77f418a0af4cb1227e8e6fe4148fc
2016-09-09 06:30:27 -05:00
Joshua Colp 7580a736bb res_pjsip: Only invoke unidentified endpoint logic when unidentified.
The code was incorrectly invoking the unidentified logic when
an endpoint had actually been identified, causing log messages
to be output.

ASTERISK-26349 #close

Change-Id: Id8104fc9e3d138d5e8b6f6977ecc08765fd17d4f
2016-09-09 10:43:58 +00:00
Joshua Colp efcfc4c1ee chan_sip: Don't allocate new RTP instances on top of old ones.
In some scenarios dialog_initialize_rtp can be called multiple times on
the same dialog.  This can cause RTP instances to be leaked along with
multiple file descriptors for each instance.

This change makes it so the existing RTP instances are destroyed and
not overwritten, stopping the memory leak.

ASTERISK-26272 #close
patches:
  ASTERISK-26272-13.patch submitted by Corey Farrell (license 5909)

Change-Id: Id529de1184c68f2f4d254ab41a1f458dafdb5f73
2016-09-09 10:31:00 +00:00
Mark Michelson f1ffc22933 res_pjsip: Do not crash on ACKs from unknown endpoints.
The endpoint identification PJSIP module is intended to identify which
endpoint an incoming request is from. If an endpoint is not identified,
then an artificial endpoint is used in its place when proceeding.

The problem is that the ACK request type is an exception to the rule.
The artificial endpoint is not used when processing an ACK. This results
in the possibility of having a NULL endpoint being used further on.

The reason ACK is an exception is an attempt not to spam security logs
with unidentified requests. Presumably, you've already logged the
unidentified request on the preceeding INVITE.

Up until Asterisk 13.10, retrieving a NULL endpoint in this fashion
didn't cause an issue. A new change in 13.10 added endpoint ACL checking
shortly after endpoint identification. Because we are accessing a NULL
endpoint, this ACL check resulted in a crash.

The fix here is to be sure to retrieve the artificial endpoint for all
request types. ACKs still do not generate unidentified request security
events.

ASTERISK-26264 #close
Reported by nappsoft

AST-2016-006

Change-Id: Ie0c795ae2d72273decb972dd74b6a1489fb6b703
2016-09-09 10:30:46 +00:00
zuul fdb29f1b4e Merge "res_pjsip: Allow global headers to be overridden." into 13 2016-09-08 13:06:59 -05:00
zuul 02ff55626e Merge "ConfBridge: Make some announcements asynchronous." into 13 2016-09-07 20:05:09 -05:00
zuul 7180de3f16 Merge "followme: initialize all config items on reload" into 13 2016-09-07 17:23:49 -05:00
Richard Mudgett 23d6ec7417 res_pjsip_messaging.c: Misc cleanups and fixes.
* Eliminated RAII_VAR in get_outbound_endpoint().

* Simplify update_to() coding.  However, this function can only be a NoOp
because the To string can only be a URI and not a name-address formatted
string.

* Simplify update_from() coding.  Also fixed a code path modifying the
from string when the caller could still want to use the original string.

* Fixed msg_data_create() incompletely removing the "pjsip:" to then add
back the "sip:" string if needed.  The code didn't handle the "pjsip:sip:"
case because it left the colon after pjsip in the string.

Change-Id: I68a09a665f6d4daa9eaa59069045ab69122e28db
2016-09-07 16:02:28 -05:00
Joshua Colp 5f19657710 res_pjsip: Allow global headers to be overridden.
Currently when you add global headers from the dialplan both
the header in the dialplan and the globally configured header
are added to the resulting SIP INVITE. This change makes it
so the headers in the dialplan take precedence and are the
only ones added.

Change-Id: I36f864298f38db3632ad503edc11267cb8ffb3ad
2016-09-07 21:01:30 +00:00
zuul 249a733c17 Merge "apps/app_dial: Fix crash on non-connect call paths for Privacy/Screening option" into 13 2016-09-07 15:49:31 -05:00
zuul 8925367291 Merge "res_pjsip_session: segfault on already disconnected session" into 13 2016-09-07 14:04:26 -05:00
zuul 4b66c74c94 Merge "apps/app_dial: Set the DIALSTATUS to NOANSWER on privacy option 5" into 13 2016-09-07 13:01:53 -05:00
Joshua Colp 89f7cd8182 Merge "build: Add download capability for external packages" into 13 2016-09-07 09:13:40 -05:00
Tzafrir Cohen 206d4f57dc followme: initialize all config items on reload
Some configuration directives were not initialized on reload, and hence
were not reset to default if they were removed from followme.conf.

ASTERISK-26288 #close

Change-Id: Ief829e16374ad1e0ecfd63e6ee4923b5a1d1c150
2016-09-07 06:43:28 -05:00
zuul 6d56b87642 Merge "chan_sip: Don't refuse calls with "optional crypto"; fall back to RTP." into 13 2016-09-06 23:01:10 -05:00
zuul 9e874d2cc8 Merge "res_pjsip_registrar.c: Reduce stack usage in find_aor_name()." into 13 2016-09-06 21:58:50 -05:00
zuul 6de392eb17 Merge "pjsip_configuration.c: Ignore repeated identify by methods." into 13 2016-09-06 19:45:06 -05:00
zuul 5a63bfc8fc Merge "config_global.c: Comments and a default expression adjustment." into 13 2016-09-06 16:55:33 -05:00
zuul 52335c3fe7 Merge "sip_to_pjsip.py: Map canreinvite as directmedia alias." into 13 2016-09-06 16:07:18 -05:00
zuul e3f549c2f6 Merge "sip_to_pjsip.py: Fix typo converting outboundproxy registration." into 13 2016-09-06 14:19:05 -05:00
zuul c8c83bcb37 Merge "sip_to_pjsip.py: Fix comment typo and tabs." into 13 2016-09-06 13:18:23 -05:00
zuul 899385d47b Merge "Sample configs: Eliminate false multiline comment block starts." into 13 2016-09-06 12:24:17 -05:00
George Joseph 117a7741c8 build: Add download capability for external packages
The DPMA and g729a, silk, siren7 and siren14 codecs hosted at
http://downloads.digium.com/pub/telephony/ are now listed in the
"External" sections of the "Resource Modules" and "Codec Translators"
pages in menuselect.  Any that are selected will automatically be
downloaded and installed when "make install" is run.  Their LICENSE and
README (if avaialble) files will be installed to
ASTVARLIBDIR/documentation/thirdparty/<product_name>.

Example use with codecs:

The codecs/codecs.xml file is a menuselect style xml file that lists
the codecs to be included.  Their support levels are 'external', which
triggers the download and install, and defaultenabled is no.  Also
because codec_g729a is actually in a directory named codec_g729 on the
download server, the newly added 'member_data' element is used to
override the default of the directory name being the package name.  You
can use the 'directory_name' attribute to keep default base URL
(http://downloads.digium.com/pub/telephony/) but use the new directory,
or you use the 'remote_url' attribute to specify a full URL to the
download directory.  In this case, you must still follow the same
subdirectory naming conventions as that used for the packages located
at 'http://downloads.digium.com/pub/telephony'.

A new configure option '--with-externals-cache' was added and like
'--with-sounds-cache' it allows the installer to cache tarballs so
they're not downloaded every time.

To assist with the download and install process, each external package
now has a manifest.xml file that, among other things, contains a package
version and checksums for each file in the tarball.  The manifest is
saved to both the cache directory and ASTMODDIR and together with the
manifest.xml on the downloads site, tells the install scripts whether
a download and/or update is needed.

bash and xmlstarlet are required for downloader operation.  If they're
not installed, the external items in menuselect will be unavailable.

Change-Id: Id3dcf1289ffd3cb0bbd7dfab3cafbb87be60323a
2016-09-06 10:39:19 -05:00
zuul 1b752842b9 Merge "format_cap.c: Fix CLI "core show channeltype Surrogate" crash." into 13 2016-09-06 09:00:09 -05:00
Walter Doekes d04ae7d1d8 chan_sip: Don't refuse calls with "optional crypto"; fall back to RTP.
Certain SNOM phones send so-called "optional crypto" in their SDP body.
Regular SRTP setup looks like this:

    m=audio 64620 RTP/SAVP 8 0 9 99 3 18 4 101
    a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:...

SNOM-style "optional crypto" looks like this:

    m=audio 61438 RTP/AVP 8 0 9 99 3 18 4 101
    a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:...

A crypto line is supplied, but the m-line does not have SAVP.

When res_srtp.so is *not* loaded, then chan_sip.so treats the optional
crypto as regular RTP, but when res_srtp.so *is* loaded, it refuses the
incoming call with the following message:

    WARNING: process_sdp: Failed to receive SDP offer/answer with
    required SRTP crypto attributes for audio

For platforms that want to start providing SRTP this presents a
compatibility problem.

This changeset lets chan_sip handle the SDP as if no crypto-line was
supplied: i.e. accept the call as regular RTP, just like it did before
res_srtp was loaded.

Now you'll get this informative warning instead:

    WARNING: Ignoring crypto attribute in SDP because RTP transport is
    insecure

ASTERISK-23989 #close
Reported by: Olle Johansson

Change-Id: I91a15ae05a0296e398d6b65f53bb11afde1d80e2
2016-09-06 02:56:22 -05:00
zuul 9470848fba Merge "app_mp3: Use correct buffer size and the same sample rate as the channel" into 13 2016-09-04 13:21:17 -05:00
Matt Jordan df3d0188e4 apps/app_dial: Fix crash on non-connect call paths for Privacy/Screening option
In any scenario in which the callee is not connected to the caller, the
current code in app_dial will crash due to raising a Dial End Stasis
Message after the callee channel has been hung up. This patch corrects
the error by simply moving the explicit hangup of the callee (peer)
channel until after the dial end message.

ASTERISK-25691 #close

Change-Id: I816a414014424d0d8c80e2a3cbef13ef8c63798d
2016-09-03 16:04:21 -05:00
Matt Jordan a64063cc97 apps/app_dial: Set the DIALSTATUS to NOANSWER on privacy option 5
If the callee selects option '5' using the Dial application's privacy
(P) option, the DIALSTATUS is erroneously set to ANSWER. This option
reflects the callee sending the caller to VoiceMail one time; the call
is definitely *not* ANSWERed in such a scenario. With this patch, the
DIALSTATUS is instead set to NOANSWER, which is the same DIALSTATUS that
is set when the 'send to VoiceMail every time' option is set.

ASTERISK-25691

Change-Id: Iaf0c9f0fa00545e7366443875e2bb7d9a89a1358
2016-09-03 16:02:37 -05:00
Richard Mudgett 03fc438f6e res_pjsip_registrar.c: Reduce stack usage in find_aor_name().
Change-Id: I8aebad1fdcf303bd115b59a4b57fbbd5b2267f09
2016-09-02 13:23:20 -05:00
Richard Mudgett b5e753227d pjsip_configuration.c: Ignore repeated identify by methods.
Change-Id: Ied0c06043d1dfef8fdc9c9a808cf89b118119838
2016-09-02 13:18:27 -05:00
Richard Mudgett 9b7501b6ad config_global.c: Comments and a default expression adjustment.
Change-Id: Ia6a58f8c73a30da6874b3f94364dce162d6f1ad3
2016-09-02 13:15:03 -05:00
Richard Mudgett 3314e1cec2 sip_to_pjsip.py: Map canreinvite as directmedia alias.
Change-Id: I48b8e150f96a3d2a24d8fc25fbe4f5aff9f4a6b2
2016-09-02 13:06:06 -05:00
Richard Mudgett 6372f40ba0 sip_to_pjsip.py: Fix typo converting outboundproxy registration.
Change-Id: I6f30e5f9fcf8469ba0079fbf884047d54c2c0b15
2016-09-02 13:04:23 -05:00
Richard Mudgett 11eb1afd2d sip_to_pjsip.py: Fix comment typo and tabs.
Change-Id: If35174614545727817d329c60ba4456c028941b5
2016-09-02 13:02:09 -05:00
Richard Mudgett 0f9b144c1a Sample configs: Eliminate false multiline comment block starts.
Change-Id: Ie627def9604ae30abd80754f9e6f09874825aec6
2016-09-02 13:00:08 -05:00
Richard Mudgett 8d1c535bd6 format_cap.c: Fix CLI "core show channeltype Surrogate" crash.
* Make ast_format_cap_get_names() NULL tolerant.

ASTERISK-26331 #close
Reported by: CGI.NET

Change-Id: Id67e93936dc8ec2a33a9d33655843d43b59285a3
2016-09-02 12:54:12 -05:00
Alexei Gradinari 9bca895469 res_pjsip_session: segfault on already disconnected session
On heavy loaded system the TCP/TLS incoming calls could be
disconnected by pjproject while these calls are being
processed by asterisk which could use the session's memory pools.
If the session in the disconnected state then the session memory
pools were already freed, so we get segfault.

This patch adds a lifetime control on an INVITE session to pjproject.
The lifetime of the session is manipulated by calling
pjsip_inv_add_ref/pjsip_inv_dec_ref.
This patch uses these functions to inform pjproject that the
session is in use.

This patch adds check if the session state is not disconnected
and also checks if the memory pool is not NULL.

This patch also places tasks 'session_end' and 'session_end_completion'
into session's serializer to avoid race condition.

ASTERISK-26291 #close

Change-Id: I4d28b1fb3b91f0492a911d110049d670fdc3c8d7
2016-09-01 18:03:59 -04:00
Mark Michelson 63feffa126 ConfBridge: Make some announcements asynchronous.
Confbridge announcements tend to block a channel while they are being
played. In some circumstances, this is warranted since you want that
particular channel not to hear the announcement (Example: "John Doe has
entered the conference"). For others it makes less sense.

This change first introduces methods for playing sounds asynchronously
into the conference. This is very similar to how synchronous sounds are
played, except the channel initiating the playback does not wait for the
sound to complete before moving on.

Asynchronous announcements are used for two circumstances:
* Sounds played for a user after they have left the bridge
* Sounds that play first to a single user and then the rest of the
  conference (if the channel and conference use the same language)

ASTERISK-26289 #close
Reported by Mark Michelson

Change-Id: Ie486bb3de1646d50894489030326a423e594ab0a
2016-09-01 13:38:58 -05:00
zuul 1bd571ef75 Merge "res_pjsip: qualify/unqualify added/deleted realtime endpoints" into 13 2016-09-01 13:21:56 -05:00
zuul 84b7bda139 Merge "sip_to_pjsip: Migrate IPv4/IPv6 (Dual Stack) configurations." into 13 2016-09-01 11:40:22 -05:00
Michael Kuron a002a4d2db app_mp3: Use correct buffer size and the same sample rate as the channel
Previously, the buffer used for MP3 streamed from HTTP servers had a size of
1 MB. For 8 kHz mono audio at 16 bit resolution, such a buffer covers about 1
minute. Only when the buffer is full does audio start to play.
For MP3 files streamed from a server, that is usually not a big deal as long as
the connection to the server is fast enough to supply that much data within a
second or two. For MP3 live streams however, it takes 1 minute to download 1
minute of audio, so without this change, app_mp3 wasn't really usable for MP3
live streams.
This commit changes the buffer size so that it covers 6 seconds of an MP3 file
streamed from a server and 0.5 seconds of an MP3 live stream. The latter is
identified by the use of a .m3u file extension.

app_mp3 so far only supported 8 kHz audio.
Now it always runs at the sample rate of the channel.

ASTERISK-26085 #close

Change-Id: Id1ee274733cd804a0edecf7450329b72f1235af0
2016-09-01 13:13:43 +02:00
Alexei Gradinari 308a65fe6c res_pjsip: qualify/unqualify added/deleted realtime endpoints
If the PJSIP endpoint's AOR with the permanent contact
was deleted from the realtime storage the res_pjsip module
continues trying to qualify this contact.
The error 'Unable to find an endpoint to qualify contact'
appeares every 'qualify_frequency' seconds.
This patch deletes this contact in this case.

The PJSIP endpoint's AOR with the permanent contact
is never qualified if it is added to realtime storage
after asterisk started.
This patch adds qualifying for the AOR's permanent contacts
on the first handling of this AOR.

ASTERISK-26319 #close

Change-Id: Ib93dded9121edb113076903d1aa95402f799f8fe
2016-08-30 15:02:05 -04:00
zuul 27989f22f3 Merge "res_pjsip: Default endpoints to the "offline" status." into 13 2016-08-29 18:09:24 -05:00
zuul cfab4d4d41 Merge "pjproject_bundled: Disable srtp use by pjmedia" into 13 2016-08-29 16:50:25 -05:00
zuul fcba60749c Merge "pbx.c: Prevent infinite recursion in manager_show_dialplan_helper." into 13 2016-08-29 15:39:24 -05:00
zuul 0542afa180 Merge "app_queue: Ensure member is removed from pending when hanging up." into 13 2016-08-29 13:40:58 -05:00
chrisderock 2fa168348e app_macro: Consider '~~s~~' as a macro start extension.
As described in issue ASTERISK-26282 the AEL parser creates macros with
extension '~~s~~'.  app_macro searches only for extension 's' so the
created extension cannot be found.  with this patch app_macro searches for
both extensions and performs the right extension.

ASTERISK-26282 #close

Change-Id: I939aa2a694148cc1054dd75ec0c47c47f47c90fb
2016-08-29 10:08:13 -05:00
Etienne Lessard 27951792c4 pbx.c: Prevent infinite recursion in manager_show_dialplan_helper.
Previously, if context A was including context B and context B was including
context A, i.e. if there was a circular dependency between contexts, then
calling manager_show_dialplan_helper could lead to an infinite recursion,
resulting in a crash.

This commit applies the same solution as the one implemented in the
show_dialplan_helper function. The manager_show_dialplan_helper and
show_dialplan_helper functions contain lots of code in common, but the former
was missing the "infinite recursion avoidance" code.

ASTERISK-26226 #close

Change-Id: I1aea85133c21787226f4f8442253a93000aa0897
2016-08-29 08:10:34 -04:00
Joshua Colp 1b91adf7a1 Merge "res_pjsip: Cache global config options." into 13 2016-08-27 05:03:14 -05:00
zuul ba3984753a Merge "channel: No hung-up on failing security requirements." into 13 2016-08-26 18:56:16 -05:00
George Joseph fb82fdb013 pjproject_bundled: Disable srtp use by pjmedia
The reason for the disable is that while Asterisk works fine with older
libsrtp versions, newer versions of pjproject won't compile with them.
Debian 6 for instance, has libsrtp 1.4.4 which is older than what
pjproject is expecting.

We don't use most of pjmedia but we DO use it for SDP negotiation.
Luckily disabling srtp in pjmedia doesn't interfere with it's ability
to negitiate a secure channel.  The proper crypto attributes are
negotiated in both directions.

ASTERISK-26279 #close

Change-Id: Id25a92cdf3df97a26c53cffae65b6b82de33c8e2
2016-08-26 13:34:22 -06:00
Alexander Traud 847bd47ff0 channel: No hung-up on failing security requirements.
In your Diaplan, if you specify
 same => n,Set(CHANNEL(secure_bridge_media)=1)
 same => n,Set(CHANNEL(secure_bridge_signaling)=1)
only the SIP channel driver chan_sip supports this. All other channels drivers
like res_pjsip fail. In case of failure, the original sRTP source code released
the whole channel, even if not hung-up, yet. This change does not release the
channel but instead hangs-up the channel.

ASTERISK-26306

Change-Id: I0489f0cb660fab6673b0db8af027d116e70a66db
2016-08-26 09:39:43 -05:00
Alexander Traud b59d3b48d0 sip_to_pjsip: Migrate IPv4/IPv6 (Dual Stack) configurations.
When using the migration script sip_to_pjsip.py, and your sip.conf is
configured with bindaddr=::, two transports are written to pjsip.conf, one for
0.0.0.0 (IPv4) and one for [::] (IPv6). That way, PJProject listens on the IPv4
and IPv6 wildcards; a IPv4/IPv6 Dual Stack configuration on a single interface
like in chan_sip.

Furthermore, the script internal functions "build_host" and "split_hostport"
did not parse Literal IPv6 addresses as expected (like [::1]:5060). This change
makes sure, even such addresses are parsed correctly.

ASTERISK-26309

Change-Id: Ia4799a0f80fc30c0550fc373efc207c3330aeb48
2016-08-26 06:15:30 -05:00
Joshua Colp f69f5cd3c4 app_queue: Ensure member is removed from pending when hanging up.
When dialing channels it is possible that they may not ever
leave the not in use state (Local channels in particular) by
the time we cancel them. If this occurs but we know they were
dialed we explicitly remove them from the pending members
container so that subsequent call attempts occur.

ASTERISK-26299 #close

Change-Id: I6ad0d17c36480c92cebf840626228ce3f7e4bd65
2016-08-25 22:54:51 +00:00
Richard Mudgett 5cd583d7a2 res_pjsip: Cache global config options.
We may check a global config option hundreds of times a second or more.
Asking sorcery for the global configuration from the config files backend
involves several allocations and container traversals.  Using realtime
without a memory cache is a lot worse because you have to lookup in the
realtime database each time to reconstitute the sorcery object.  With a
memory cache for realtime, there is about the same amount of overhead as
for config files.  Either way, it is still fairly expensive to access the
sorcery object that much.

* Cache the global config options so we can access them faster.  You must
now always perform a res_pjsip reload to change the global options.

Change-Id: Ice16c7a4cbca4614da344aaea21a072b86263ef7
2016-08-25 17:54:03 -05:00
Richard Mudgett 8b4b2500ee res_fax: Fix deadlock in ast_channel_get_t38_state().
ast_channel_get_t38_state() calls ast_channel_queryoption() with
AST_OPTION_T38_STATE.  If the passed in channel is a local channel then a
deadlock can happen if a channel lock is held when called.

* Made ast_channel_get_t38_state() callers not hold a channel lock before
calling.

* Update ast_channel_get_t38_state() doxygen to note that no channel locks
can be held when calling the function.

ASTERISK-26203 #close
Reported by: Etienne Lessard

ASTERISK-24822 #close
Reported by: David Brillert

ASTERISK-22732 #close
Reported by: Richard Mudgett

Change-Id: I49fd76fa9af628b4198009b5c0b82c8b03681214
2016-08-25 17:13:53 -05:00
Richard Mudgett e8d4f40022 res_fax: Fix deadlock setting FAXMODE channel variable.
ASTERISK-25980 added the FAXMODE channel variable to res_fax.c.
Unfortunately, it also introduced a deadlock potential because
set_channel_variables() which sets FAXMODE can be called during a
masquerade.  The ast_channel_get_t38_state() which gets the value used to
set FAXMODE cannot be called with the channel locked.  As a result, local
channels can deadlock because of how they must acquire the locks necessary
to operate.

The intent of FAXMODE is for dialplan to know how a fax was transferred
after the fax completes.  However, the previous patch sets FAXMODE to the
channel's current T.38 state AFTER the fax has completed and where T.38
may have already disconnected.

* Set FAXMODE based upon T.38 negotiations exchanged either with the fax
applications or the fax framehooks.

ASTERISK-26203
Reported by: Etienne Lessard

ASTERISK-24822
Reported by: David Brillert

ASTERISK-22732
Reported by: Richard Mudgett

Change-Id: Id525747254b64c1efe8b1b5973d52ff9719c2ae1
2016-08-25 17:13:53 -05:00
Richard Mudgett 35cf6c7702 res_fax.c: Fix deadlock in fax_gateway_indicate_t38().
fax_gateway_indicate_t38() calls ast_indicate_data() which cannot be
called with any channel locks already held.  A deadlock can happen if the
function is operating on a local channel.

* Made fax_gateway_indicate_t38() unlock the channel before calling
ast_indicate_data() since fax_gateway_indicate_t38() is always called with
the channel locked.

* Made fax_gateway_indicate_t38() return void since nothing cared about
its return value.

ASTERISK-26203
Reported by: Etienne Lessard

ASTERISK-24822
Reported by: David Brillert

ASTERISK-22732
Reported by: Richard Mudgett

Change-Id: I701ff2d26c5fc23e0d5a48a3fd98759a9fd09407
2016-08-25 17:13:52 -05:00
Richard Mudgett 50b2aa506f res_fax.c: Add chan locked precondition comments.
Change-Id: Ic10ae434536bbf7fb7055d6ab36cc50b8748a4e7
2016-08-25 17:13:52 -05:00
Richard Mudgett 038cbc0215 ast_framehook_detach() must be called with the channel locked.
The framehook container could become corrupted if the channel lock is not
held before calling.

Change-Id: If0a1c7ba0484ed3a191106a7516526b905952584
2016-08-25 17:13:52 -05:00
Richard Mudgett 88e9d05ef7 ast_framehook_attach() must be called with the channel locked.
The framehook container could become corrupted if the channel lock is not
held before calling.

Change-Id: I1a6b957a1f7b899eb29a186915f8cccab886a438
2016-08-25 17:13:52 -05:00
Joshua Colp 4e5b930d3f Merge "res_rtp_multicast: Fix SEGV in ast_multicast_rtp_create_options" into 13 2016-08-24 18:53:45 -05:00
George Joseph c9e83f6d0b res_rtp_multicast: Fix SEGV in ast_multicast_rtp_create_options
ast_multicast_rtp_create_options now checks for NULL or empty options

Change-Id: Ib845eae46a67a9787e89a87ebd1027344e5e0362
2016-08-24 14:53:38 -05:00
Corey Farrell cb8fd610e2 Fix checks for allocation debugging.
MALLOC_DEBUG should not be used to check if debugging is actually
enabled, __AST_DEBUG_MALLOC should be used instead.  MALLOC_DEBUG only
indicates that debugging is requested, __AST_DEBUG_MALLOC indicates it
is active.

Change-Id: I3ce9cdb6ec91b74ee1302941328462231be1ea53
2016-08-24 11:02:47 -05:00
Mark Michelson b8b5d52b5e ConfBridge: Rework announcer channel methodology
NOTE: This patch was submitted earlier and reverted because of a failing
test. The test has been patched so that it adjusts for the changes here,
so this is being resubmitted for review.

One feature that confbridge has is the ability to play sounds to all
participants in the conference. Prior to this commit, the algorithm for
this was as follows:

* Grab the playback lock
* Push the conference announcer channel into the bridge
* Play back the sound
* Pull the conference announcer channel from the bridge
* Release the playback lock

The issue here is that the act of adding the playback channel to the
bridge and removing it for each announcement is expensive. Amongst the
expenses:

* The announcer channel is imparted into the bridge, meaning a new
  thread is spun up for each playback.
* When the announcer is added or removed from the bridge, it results
  in the BRIDGEPEER channel variable being set on all channels in the
  bridge. This requires keeping the bridge locked and locking each
  individual channel in order to set it.
* There's also just the general overhead of adding the channel and
  removing it from the bridge. The bridge potentially has to reconfigure
  every single time

With this commit, the paradigm for playing back announcements has
shifted.

* The announcer channel is now added to the bridge when the conference
  is allocated, and it is hung up when the conference is destroyed.
* A taskprocessor is used to queue playbacks onto the announcer channel.
  This keeps the behavior from before where playbacks do not overlap.
* The announcer channel is no longer placed into the bridge as
  departable. Since we are not constantly removing the channel from
  the bridge, it is safe to add the channel using an independent thread
  and simply hang the channel up when it is time for the conference to
  be destroyed.

The use of the taskprocessor for playbacks opens up the interesting
possibility of having asynchronous announcements played. In this commit,
however, the behavior is still exactly the same as it previously was.

ASTERISK-26289
Reported by Mark Michelson

Change-Id: Ica9fa4907c2f3728cdd1cf0bc564ef4eb40754a0
2016-08-23 13:02:00 -05:00
Joshua Colp b9897e237e Merge "Revert "ConfBridge: Rework announcer channel methodology"" into 13 2016-08-23 05:54:29 -05:00
Joshua Colp d5d7cbfcfb Revert "ConfBridge: Rework announcer channel methodology"
This reverts commit 0cdeb2bfb0.

Change-Id: I18ba73b6d4dc0b994f4ffb01ae0b6cfad36ac636
2016-08-23 05:54:18 -05:00
zuul 5bae285de4 Merge "ConfBridge: Rework announcer channel methodology" into 13 2016-08-22 20:36:28 -05:00
Mark Michelson c16ef02318 res_pjsip: Default endpoints to the "offline" status.
A recent change attempted to optimize startup by not updating contact
status. Instead, code responsible for qualifying contacts updates the
status as it becomes known. The code even accounts for contacts/AORs
that are not set to be qualified.

The problem, though, is when there are no contacts associated with an
endpoint. A common case is when an endpoint is set to register its
contacts but has not done so yet. In this case, prior to registration,
the endpoint's device state will appear to be "not in use" and hints
associated with that device will appear to be "idle". In actuality, the
device state and hint should both appear as "unavailable". The reason
for the failure is that the optimization change made all persistent
endpoint states set to "unknown".

The fix here is to change the hard-coded "unknown" to be "offline"
instead. The default state will be offline until the qualifying code
determines that the contact is actually online. This way, if there are
no contacts at all, then the state stays as offline, and device state
and hints appear correctly.

ASTERISK-26269 #close
Reported by nappsoft

Change-Id: Ie99b84169393983453076f5e9c0d35ff313a456a
2016-08-22 17:08:19 -05:00
zuul e0c807c33d Merge "compilation failed with -Werror=maybe-uninitialized" into 13 2016-08-22 12:35:33 -05:00
zuul 903a8f17cf Merge "res_odbc_transaction: add dep on generic_odbc" into 13 2016-08-22 11:00:02 -05:00
David M. Lee e54dcf4fd5 res_odbc_transaction: add dep on generic_odbc
When res_odbc_transaction depended on res_odbc, it got the generic_odbc
headers and libs implicitly. Now that it no longer depends on res_odbc,
its dependency on generic_odbc must be explicit.

Change-Id: I9db88f7af7388437f49903d3008ba8d4890d5911
2016-08-21 18:54:26 -05:00
Alexander Traud be38c95def pjproject_bundled: Allow IPv4/IPv6 (Dual Stack) configurations.
PJProject supports a lot of platforms even Windows, some with different defaults
when it comes to IPv6. In many Linux platforms like Ubuntu 16.04 LTS,
"/proc/sys/net/ipv6/bindv6only" is set to 0 (false). Different than in Windows.

Because of this, if configured with just an IPv6 address/transport, PJProject
listens to both IPv4 and IPv6. However, this is not supported by the PJProject
team. As consequence, you end-up with IPv4-mapped IPv6 addresses in SDP,
incompatible with IPv4-only clients. Technically, you end-up with an IPv6-only
server which accepts incoming connections on IPv4.

If you try to configure two transports, one with IPv4 and one with IPv6 on the
same interface, as expected by the PJProject team, the IPv4 transport is not
able to bind because the IPv6 transport listens to both already.

One solution would be to change "/proc/sys/net/ipv6/bindv6only" system-wide.
Then, you are able to configure two transports, one for each IP version on the
same interface. That way, you get a server which works with IPv4 clients and
IPv6 clients at the same time over the same interface.

Here, this change sets this parameter directly within PJProject to match the
expectations of the PJProject team in any case. This allows IPv4/IPv6 Dual Stack
servers out of the box like in chan_sip. This change was accepted by the
PJProject team as <http://trac.pjsip.org/repos/changeset/5403> and is expected
to arrive in the next version, PJProject 2.6.0. Until then, this change is
incorporated in the bundled PJProject of Asterisk.

ASTERISK-26309

Change-Id: I3335d8718f79f4b2feae91b5b005a3ce684a63ae
2016-08-20 14:25:35 -05:00
zuul 8778e22b15 Merge "sip_to_pjsip: Map externhost/ip to Transports." into 13 2016-08-19 17:32:34 -05:00
zuul fcc49d760f Merge "res_ari: Add http prefix to generated docs" into 13 2016-08-19 16:57:06 -05:00
zuul 6b3e96e479 Merge "res_odbc: Correct the dependency relationship with res_odbc_transaction" into 13 2016-08-19 15:52:34 -05:00
zuul d4a4a23818 Merge "sip.conf: tlsclientmethod is using sslv23 as default." into 13 2016-08-19 15:47:40 -05:00
Mark Michelson 0cdeb2bfb0 ConfBridge: Rework announcer channel methodology
One feature that confbridge has is the ability to play sounds to all
participants in the conference. Prior to this commit, the algorithm for
this was as follows:

* Grab the playback lock
* Push the conference announcer channel into the bridge
* Play back the sound
* Pull the conference announcer channel from the bridge
* Release the playback lock

The issue here is that the act of adding the playback channel to the
bridge and removing it for each announcement is expensive. Amongst the
expenses:

* The announcer channel is imparted into the bridge, meaning a new
  thread is spun up for each playback.
* When the announcer is added or removed from the bridge, it results
  in the BRIDGEPEER channel variable being set on all channels in the
  bridge. This requires keeping the bridge locked and locking each
  individual channel in order to set it.
* There's also just the general overhead of adding the channel and
  removing it from the bridge. The bridge potentially has to reconfigure
  every single time

With this commit, the paradigm for playing back announcements has
shifted.

* The announcer channel is now added to the bridge when the conference
  is allocated, and it is hung up when the conference is destroyed.
* A taskprocessor is used to queue playbacks onto the announcer channel.
  This keeps the behavior from before where playbacks do not overlap.
* The announcer channel is no longer placed into the bridge as
  departable. Since we are not constantly removing the channel from
  the bridge, it is safe to add the channel using an independent thread
  and simply hang the channel up when it is time for the conference to
  be destroyed.

The use of the taskprocessor for playbacks opens up the interesting
possibility of having asynchronous announcements played. In this commit,
however, the behavior is still exactly the same as it previously was.

ASTERISK-26289
Reported by Mark Michelson

Change-Id: Ic5cd2c4b98a1eaa1715eb7a5b35d62f1a76d78a5
2016-08-19 15:24:20 -05:00
zuul 16cb686fac Merge "rest-api: Swagger scripts were not replacing format variable in file brief" into 13 2016-08-19 14:11:37 -05:00
zuul f46f88157e Merge "sip_to_pjsip: Add cert_file." into 13 2016-08-19 12:16:05 -05:00
zuul d49043c092 Merge "res_format_attr_g729: Add annexb=no format parameter to SDPs" into 13 2016-08-19 11:28:25 -05:00
Alexei Gradinari b494b9f88c compilation failed with -Werror=maybe-uninitialized
The compilation failed for devmode
--enable DONT_OPTIMIZE
--enable BETTER_BACKTRACES
--enable DO_CRASH
--enable TEST_FRAMEWORK

res_pjsip/pjsip_configuration.c: In function dtls_handler:
res_pjsip/pjsip_configuration.c:974:20: error:
back may be used uninitialized in this function [-Werror=maybe-uninitialized]
int size = strlen(front);
           ^
cc1: all warnings being treated as errors

Change-Id: I7f082ead0312792a577ec7c73015ba64dabca580
2016-08-19 11:21:01 -04:00
zuul 504da21d47 Merge "res_pjsip: Add contact_user to endpoint" into 13 2016-08-19 08:13:32 -05:00
zuul 6bea2a55e8 Merge "ari: Add documentation that path parameters are case-sensitive" into 13 2016-08-19 08:05:12 -05:00
Alexander Traud a628009eb9 sip_to_pjsip: Add cert_file.
When using the migration script sip_to_pjsip.py, cert_file was not migrated to
pjsip.conf. A previous change regarding this contained a copy/paste error.

ASTERISK-22374

Change-Id: I0fa72e9412117d53b4284fc6b83fa5b2b95ba03b
2016-08-19 04:08:09 -05:00
Alexander Traud b1fe070d0b sip.conf: tlsclientmethod is using sslv23 as default.
When 'tlsclientmethod' is not specified in sip.conf, chan_sip uses the OpenSSL
SSLv23_method. This was documented incorrectly in the file sip.conf.sample.

SSLv23_method got its name in the 90s. Today, with OpenSSL 1.0.2, this method
enables (just) the secure TLSv1.0 and TLSv1.2. Or stated differently, that
function should have been called 'secure_method' or 'automatic_method' back in
the 90s.

Consequently please, specify 'tlsclientmethod=tlsv1' in your sip.conf only if
you face a server which has problems like not falling back to TLSv1.0
automatically.

ASTERISK-24425

Change-Id: I502ce6146b4504cadfd3973af8d6ec3994f54fa3
2016-08-19 02:54:10 -05:00
Joshua Colp 5d4ce33e8c Merge "sip_to_pjsip: Write cos and tos." into 13 2016-08-18 18:55:29 -05:00
Kevin Harwell ff2378c735 rest-api: Swagger scripts were not replacing format variable in file brief
Given resource paths did not have 'json' substituted in for the '{format}'. For
some auto generated documentation/comment strings it resulted in something like
the following:

"... REST handler for /api-docs/sounds.{format}"

This patch makes sure the resource api's path is properly substituted.

ASTERISK-25472 #close

Change-Id: Ie3e950a35db4043e284019d6c9061f3b03922e23
2016-08-18 17:16:43 -05:00
Kevin Harwell 43f400ef95 res_format_attr_g729: Add annexb=no format parameter to SDPs
Historically, Asterisk has always specified annexb=no for the g729 format.
However, when using res_pjsip no format attribute was specified. This patch
makes it so the SDP now contains a format attribute line with annexb=no.

Note, that this means only g729a is negotiated. Even for pass through support.
According to rfc7261 the type of annex used (a or b) is dependent upon the
answerer. However, Asterisk being a back to back user agent makes this tricky
to support at this time, thus we only allow annex 'a' for now.

ASTERISK-26228 #close
patches:
  res_format_attr_g729.c submitted by Jason Parker (license 4993)

Change-Id: I76bc20cc0a01af01536e9915afef319c269c22d0
2016-08-18 17:15:04 -05:00
George Joseph 4c1ae07d51 res_odbc: Correct the dependency relationship with res_odbc_transaction
The MODULEINFO dependencies between these 2 modules was reversed.
res_odbc should depend on res_odbc_transaction, not the other way
around.

ASTERISK-25984 #close

Change-Id: Ifcfbb49c0b51cf6640a5446d47cd6c48caf1331f
2016-08-18 14:27:58 -06:00
Kevin Harwell cab6975b02 sip_to_pjsip: Set correct tls transport method
A recent update had a copy/paste error where the unused variable 'val' was
being passed to the set_value function instead of the 'method' value itself.

This patch passes in the right variable.

ASTERISK-22374

Change-Id: I895b7b3779ce4442bc58b8ec40d59dd29bb43f06
2016-08-18 12:10:27 -05:00
Joshua Colp 43254c2db7 Merge "sip_to_pjsip: Parse register even with transport." into 13 2016-08-18 11:50:11 -05:00
Joshua Colp e3d72c7aee Merge "sip_to_pjsip: Write local_net, contact_acl, contact_deny, and contact_permit." into 13 2016-08-18 11:49:47 -05:00
Joshua Colp e1ef9e697e Merge "sip_to_pjsip: Map (session-)timers correctly." into 13 2016-08-18 11:49:04 -05:00
Joshua Colp f5165fd0aa Merge "sip_to_pjsip: Add cert_file and ca_list_path." into 13 2016-08-18 11:48:43 -05:00
Joshua Colp 9426627452 Merge "sip_to_pjsip: Write username even without authname." into 13 2016-08-18 11:48:13 -05:00
Joshua Colp 02f5d30739 Merge "sip_to_pjsip: Map the TLS method correctly." into 13 2016-08-18 11:47:38 -05:00
Joshua Colp 1ae280ed6c Merge "sip_to_pjsip: Add compactheaders, timerb, timert1, and useragent." into 13 2016-08-18 11:46:25 -05:00
Joshua Colp 02f2937f48 Merge "sip_to_pjsip: Write media_encryption." into 13 2016-08-18 11:46:02 -05:00
Joshua Colp 3a22938d12 Merge "sip_to_pjsip: Add defaultexpiry, maxexpiry, and minexpiry." into 13 2016-08-18 11:45:41 -05:00
Alexander Traud 2381ddde63 sip_to_pjsip: Map the TLS method correctly.
When using the migration script sip_to_pjsip.py and tlsclientmethod is not set
in sip.conf, the default value of chan_sip (sslv23) is copied to pjsip.conf, to
overwrite the default of the PJProject (tlsv1). This makes sure, res_pjsip is
offering/using not just TLSv1.0 but TLSv1.2 as well.

ASTERISK-22374

Change-Id: Ie530a3dae9926ae14f3920a21be1e2edb15bda4f
2016-08-18 08:32:54 -05:00
Alexander Traud 6500f5e138 sip_to_pjsip: Add compactheaders, timerb, timert1, and useragent.
When using the migration script sip_to_pjsip.py, no section of type=system or
type=general were created. Therefore the keys compactheaders, timerb, timert1,
and useragent were not migrated to pjsip.conf.

ASTERISK-22374

Change-Id: I318a453843227ea36bf130d392d4abd7bd26b5a1
2016-08-18 08:31:34 -05:00
Alexander Traud 21e9c69e56 sip_to_pjsip: Map (session-)timers correctly.
When using the migration script sip_to_pjsip.py, session-timers=accept and
session-timers=refuse were mapped to wrong values.

ASTERISK-22374

Change-Id: Ie4e90d5f6a29aff07837b7fe5bc8aea5fb6fc092
2016-08-18 08:30:27 -05:00
Alexander Traud c9a97398f7 sip_to_pjsip: Write username even without authname.
When using the migration script sip_to_pjsip.py, now the (mandatory) username is
written to pjsip.conf, even if there was no (optional) authname in the register
string in sip.conf.

ASTERISK-22374

Change-Id: Ie53e1997104cd2674821688b8a8247249f5e156f
2016-08-18 08:29:00 -05:00
Alexander Traud 60275359bc sip_to_pjsip: Parse register even with transport.
When using the migration script sip_to_pjsip.py and the register string
started with a transport in sip.conf - like tls://... - register was not parsed
correctly and therefore not migrated correctly to pjsip.conf.

ASTERISK-22374

Change-Id: I44c12104eea2bd8558ada6d25d77edfecd92edd2
2016-08-18 08:27:59 -05:00
Alexander Traud 0d479232eb sip_to_pjsip: Write local_net, contact_acl, contact_deny, and contact_permit.
When using the migration script sip_to_pjsip.py, those keys got missing. These
keys might appear several times and the function "merge_value" tried to collect
those. However, because these keys have different names in sip.conf and
pjsip.conf, "merge_value" was not able to find the new key name in sip.conf.
This change lets "merge_value" search with the old key name in sip.conf and
write with the new key name in pjsip.conf.

ASTERISK-22374

Change-Id: Ie53c5278ae6f1cb8fa7e96c5289877d46981d9d2
2016-08-18 08:27:04 -05:00
Alexander Traud cbc1b2d020 sip_to_pjsip: Map externhost/ip to Transports.
When using the migration script sip_to_pjsip.py, the externhost or externip of
sip.conf were erroneously written to Endpoints instead to Transports.

ASTERISK-22374

Change-Id: I2c5873386cfc388899fa9cf2368639dd12f1b8e4
2016-08-18 08:25:56 -05:00
Alexander Traud 5f33e99534 sip_to_pjsip: Add defaultexpiry, maxexpiry, and minexpiry.
When using the migration script sip_to_pjsip.py, defaultexpiry, maxexpiry, and
minexpiry were not migrated to pjsip.conf.

ASTERISK-22374

Change-Id: I007fbf543dcadc96fc3ed71c54da502bcb209b7b
2016-08-18 08:25:04 -05:00
Alexander Traud 231ea0350d sip_to_pjsip: Write media_encryption.
When using the migration script sip_to_pjsip.py, encryption=yes got missing and
media_encryption=sdes was not written to pjsip.conf, because of a typo.

ASTERISK-22374

Change-Id: I0fc3e55dc512a57603ae0fef41baacccf2a35c05
2016-08-18 08:24:13 -05:00
Alexander Traud 23eb065121 sip_to_pjsip: Write cos and tos.
When using the migration script sip_to_pjsip.py, both tos_sip and cos_sip got
missed, because of a typo. Therefore, cos and tos were not written to
pjsip.conf. Furthermore, that revealed a misuse of an internal function, caused
by a copy-and-paste error.

ASTERISK-22374

Change-Id: Id245ebadf70ab9776eb280c026288540af3af5c2
2016-08-18 08:23:28 -05:00
Alexander Traud 0b675a208b sip_to_pjsip: Add cert_file and ca_list_path.
When using the migration script sip_to_pjsip.py, cert_file and ca_list_path were
not migrated to pjsip.conf.

ASTERISK-22374

Change-Id: I4612877d190b7f86a48698cefbf5c4db6c265825
2016-08-18 08:22:35 -05:00
Richard Mudgett 1cd12d73a6 res_pjsip_session.c: Fix unbound srv failover tests.
Commit 1b666549f3 broke the srv failover
functionality if a TCP connection gets disconnected.  Under these
conditions, session_inv_on_state_changed() gets a
PJSIP_EVENT_TRANSPORT_ERROR and restarts the INVITE transaction on a new
transport.  Unfortunately, session_inv_on_tsx_state_changed() also gets
the same PJSIP_EVENT_TRANSPORT_ERROR event and unconditionally terminates
the session.

* Made session_inv_on_tsx_state_changed() complete terminating the session
on PJSIP_EVENT_TRANSPORT_ERROR only if the session state is still
PJSIP_INV_STATE_DISCONNECTED.

ASTERISK-26305 #close
Reported by: Richard Mudgett

Change-Id: If736e766b5c55b970fa38ca6c8a885caf27b897d
2016-08-17 16:38:19 -05:00
George Joseph 329507fe20 res_pjsip: Add contact_user to endpoint
contact_user, when specified on an endpoint, will override the user
portion of the Contact header on outgoing requests.

Change-Id: Icd4ebfda2f2e44d3ac749d0b4066630e988407d4
2016-08-17 14:39:32 -06:00
Torrey Searle 6f448f32fe res_ari: Add http prefix to generated docs
updated the uri handler to include the url prefix of the http server
this enables res_ari to add it to the uris when generating docs

Change-Id: I279335a2625261a8492206c37219698f42591c2e
2016-08-17 15:33:05 +00:00
Alexander Traud 56e0aed177 BuildSystem: Detect ca_list_path capabilities in external PJProject.
Since Asterisk 13.8, pj_ssl_cert_load_from_files2 got detected only in the
bundled PJProject but not in an external PJProject. Therefore, ca_list_path
could not be used in pjsip.conf. With this change, pj_ssl_cert_load_from_files2
is detected again to enable ca_list_path again.

ASTERISK-26303 #close

Change-Id: I4a4a0cdc5cdff33730911fb4cfc0498c069043d0
2016-08-17 06:23:24 -05:00
George Joseph 2edcfcf1eb ari: Add documentation that path parameters are case-sensitive
Added to api.wiki.mustache so that the generated object pages
have the notation in the table header as well as under each method
that has path parameters.

ASTERISK-25492 #close

Change-Id: I36c46c6dc0c9ac350470394a999a1b19ef3fcdaf
2016-08-16 11:24:29 -06:00
zuul 455bc78901 Merge "Refactor usage pattern of xmldoc info tag." into 13 2016-08-16 12:15:24 -05:00
Joshua Colp 5c24677127 Merge "res_sorcery_config.c: Cleanup ao2 container usage idioms." into 13 2016-08-16 09:09:43 -05:00
Joshua Colp d85310e3e8 Merge "sorcery.c: Minor optimizations." into 13 2016-08-16 09:09:37 -05:00
zuul 7ed9bc8169 Merge "sorcery.c: Tweak some container declaration formatting." into 13 2016-08-16 09:06:51 -05:00
zuul 643aac69a7 Merge "chan_sip: Fix lastrtprx always updated" into 13 2016-08-16 08:23:48 -05:00
zuul 050b90769a Merge "core: Entity ID is not set or invalid" into 13 2016-08-16 06:43:54 -05:00
zuul 6c4c31456f Merge "pbx.c: Additional fixes to ast_context_remove_extension_callerid2." into 13 2016-08-16 04:51:32 -05:00
Corey Farrell f4e28b3a09 Refactor usage pattern of xmldoc info tag.
This updates func_channel.c and main/message.c to use a generic xpointer
include instead of including info from each channel driver.  Now the
name attribute of info is CHANNEL or CHANNEL_EXAMPLES to be included in
documentation for func_channel.  Setting the name attribute of info to
MessageToInfo or MessageFromInfo causes it to be included in the
MessageSend application and AMI action.

Change-Id: I89fd8276a3250824241a618009714267d3a8d1ea
2016-08-15 19:02:04 -04:00
Joshua Colp 8cc34aa480 Merge "app_dial: Improve documentation" into 13 2016-08-15 16:39:17 -05:00
Joshua Colp 10fa55576d Merge "manager: Add <see-also> tags to relate interrelated events/actions together" into 13 2016-08-15 16:39:11 -05:00
Joshua Colp 952edd30d1 Merge "manager: Add <see-also> tags to relate Bridge related events,actions, and apps" into 13 2016-08-15 16:39:06 -05:00
Joshua Colp b4828cb125 Merge "manager: Add <see-also> tags to relate AoC events and actions" into 13 2016-08-15 16:38:59 -05:00
Joshua Colp 274794eb1e Merge "manager: Add <see-also> tags to relate UserEvent actions/apps/events" into 13 2016-08-15 16:38:53 -05:00
Joshua Colp ccd73a2dbd Merge "res_agi: Improve documentation" into 13 2016-08-15 16:38:43 -05:00
zuul ebdc880eb3 Merge "manager: Add <see-also> links between related events" into 13 2016-08-15 15:46:05 -05:00
zuul 9a55d541aa Merge "func_channel: Reorganize documentation" into 13 2016-08-15 15:15:58 -05:00
Richard Mudgett a8d9a53bae res_sorcery_config.c: Cleanup ao2 container usage idioms.
Change-Id: Iad24b335fb121a2bc7f1d048ab7420569edcba5a
2016-08-15 13:10:35 -05:00
Richard Mudgett 74a91b9ee5 sorcery.c: Minor optimizations.
* Remove some unused parameters from internal functions:
sorcery_wizard_create()
sorcery_wizard_update()
sorcery_wizard_delete()

* Created the struct sorcery_observer_invocation ao2 object without a lock
since it is not needed in sorcery_observer_invocation_alloc().

* Cleanup generic ao2 container sorcery object id hash, sort, and cmp
functions.

Change-Id: Iff71d75f52bc1b8cee955456838c149faaa4f92e
2016-08-15 13:09:30 -05:00
Richard Mudgett 29beb2890c sorcery.c: Tweak some container declaration formatting.
* Tweak sorcery_object_type_alloc() formatting.
* Tweak ast_sorcery_init() formatting.

Change-Id: Ib02430023f15268cd7a2ea53f2c331213e4d3944
2016-08-15 13:02:48 -05:00
Corey Farrell 9b822293bd pbx.c: Additional fixes to ast_context_remove_extension_callerid2.
Do not check registrar of the first extension head.  We should only check
the registrar when we match the priority.

Additionally fix a couple calls to strcmp which used the input callerid
instead of the clean version ex.cidmatch.

ASTERISK-26233

Change-Id: I17ea6881a18f40840ae9c1f5394aab1fbb3769f1
2016-08-15 11:12:31 -05:00
Alexei Gradinari 403c794684 core: Entity ID is not set or invalid
The Exchanging Device and Mailbox States could not working
if the Entity ID (EID) is not set manually and can't be obtained
from ethernet interface.

This patch replaces debug message to warning
and addes missing description about option 'entityid' to
asterisk.conf.sample.

With this patch the asterisk also:
(1) decline loading the modules which won't work without EID:
    res_corosync and res_pjsip_publish_asterisk.
(2) warn if EID is empty on loading next modules:
    pbx_dundi, res_xmpp

Starting with v197 systemd/udev will automatically assign "predictable"
names for all local Ethernet interfaces.
This patch also addes some new ethernet prefixes "eno" and "ens".

ASTERISK-26164 #close

Change-Id: I72d712f1ad5b6f64571bb179c5cb12461e7c58c6
2016-08-15 10:08:43 -04:00
cjack 93332cb1d0 chan_sip: Fix lastrtprx always updated
Packets are read regulary, when there is no data in buffer fr->frametype
is AST_FRAME_NULL. There was no check of frametype and lastrtprx always 
updated and, therefore, rtptimeout did not work at all.

ASTERISK-25270 #close

Change-Id: If3b5ca0dbb822582a86eb7d01dcae4e83448c41d
2016-08-15 07:21:42 -05:00
Joshua Colp 2735ec899a manager: Clarify that dialplan manipulation actions are under system class.
ASTERISK-26246 #close

Change-Id: Id673b9786389f9d2a87f638ce1a25161f5f31657
2016-08-15 12:17:51 +00:00
Matt Jordan f59bd47ed3 app_dial: Improve documentation
* Add some helpful <literal> and other embedded paragraph tags

* Document some of the lesser known channel variables set by Dial

* Add examples for some common Dial uses, along with some more
  challenging but useful options

Change-Id: Ib2fb9301e8e044d14fbb2815ec64161f19bbfbc1
2016-08-14 13:03:47 -05:00
Matt Jordan 4facaac408 manager: Add <see-also> tags to relate interrelated events/actions together
Change-Id: Idbac539205aa732bf786c4f765577d8e9ff28ba4
2016-08-13 22:03:56 -05:00
Matt Jordan 232d4fe24f manager: Add <see-also> tags to relate Bridge related events,actions, and apps
Change-Id: I67e6b79fa3102e494b5fe6cc7510472249080e85
2016-08-13 22:03:56 -05:00
Matt Jordan 63c0b2f7c9 manager: Add <see-also> tags to relate AoC events and actions
Change-Id: Iea89a36222712148c1775c05ed0ad1049d67a70e
2016-08-13 20:26:50 -05:00
Matt Jordan 0422667d6c manager: Add <see-also> tags to relate UserEvent actions/apps/events
Change-Id: I80f8a981f62f50e74609c69c49edcaca6c95efa4
2016-08-13 20:26:50 -05:00
Matt Jordan f9e734974b res_agi: Improve documentation
* Groups of AGI commands that have similar functionality now reference
  each other, and all reference the AGI application for ease of wiki
  reference.

* The documentation for the AGI application has been improved, in
  particular noting the various AGI types and how they are invoked.

* A warning message has been added to DeadAGI, noting that it is
  deprecated.

Change-Id: I479ccdee8a7393f01b18692c3d4ab7e6bdd1875d
2016-08-13 20:26:50 -05:00
Matt Jordan 781bb410d0 manager: Add <see-also> links between related events
This patch adds some see-also references between related AMI events. It
focuses primarily on those events that are guaranteed to come in pairs,
such as DTMFBegin/DTMFEnd, as well as those that occur during the life
cycle of an Asterisk channel, such as Newchannel/Hangup.

Change-Id: Iaab600477052018d0f8c03d0c624c0856e9ff1f3
2016-08-13 20:26:38 -05:00
zuul 2dc23297a9 Merge "res_pjsip: Fail global load if debug or default_from_user are empty" into 13 2016-08-12 18:49:54 -05:00
zuul 8633259301 Merge "res_pjsip_caller_id: Copy header name to short header name" into 13 2016-08-12 15:55:20 -05:00
zuul 03b7d04298 Merge "Run mandatory cleanup when startup fails." into 13 2016-08-12 13:59:46 -05:00
zuul 3ea349e2bd Merge "location.c: Misc fixes and cleanups." into 13 2016-08-12 13:10:47 -05:00
Matt Jordan cfd6852d39 func_channel: Reorganize documentation
* Following the example of the PJSIP channel driver, the channel
  technology specific documentation has been moved to the respective
  channel drivers that provide that functionality. This has the benefit
  of locating the documentation of items with those modules that provide
  it.

* Examples of using the CHANNEL function for both standard items as well
  as for PJSIP have been added.

* The 'max_forwards' standard item has been documented.

Change-Id: Ifaa79a232c8ac99cf8da6ef6cc7815d398b1b79b
2016-08-12 11:15:38 -05:00
zuul b3586baeea Merge "app_queue: Prevent crash when a call is forwarded to an invalid location" into 13 2016-08-12 08:52:10 -05:00
zuul ce7357237c Merge "res_pjsip res_pjsip_mwi: Misc fixes and cleanups." into 13 2016-08-12 05:35:57 -05:00
zuul 0383500afb Merge "pjsip_distributor.c: Add missing allocation failure check." into 13 2016-08-12 03:03:51 -05:00
zuul ee150b697f Merge "alembic: add auth_username to endpoint's identify_by enum" into 13 2016-08-12 01:27:31 -05:00
zuul 4a05856f40 Merge "res_pjsip: Make aor named lock a mutex." into 13 2016-08-11 23:14:38 -05:00
Corey Farrell cb043249b6 Run mandatory cleanup when startup fails.
Errors during startup result in an exit.  These error branches should be
calling ast_run_atexit(0) to ensure mandatory cleanup is run.

ASTERISK-26267 #close

Change-Id: If226f2326ae2df7add20040696132214cf2bb680
2016-08-11 23:11:33 -04:00
George Joseph 4d5e96ab53 res_pjsip_caller_id: Copy header name to short header name
When compact_headers was set, we were sending a zero-length header name
for PAI and RPID because we always forced the short header name length
to 0.  We did this because we cloned the header from "From" and wanted
to clear "f" from the sname.  By cloning however, we bypass pjproject's
automatic logic that sets sname to name if there's no compact form of
the header, which there isn't for PAI and RPID.  So now we force sname
to be the same as name right after we set name.

res_pjsip_diversion needed the same treatment for the Diversion header.

ASTERISK-26241 #close

Change-Id: I633ec139630cd83809aae00336cee4a10077e467
2016-08-11 13:16:41 -06:00
George Joseph 143df33110 res_pjsip: Fail global load if debug or default_from_user are empty
If debug was specified in the global configuration but left blank,
the logger would treat it as a wildcard and log all hosts.  If
default_from_user was empty, a crash would result.

The global apply handler now checks for empty strings.

ASTERISK-26239 #close
ASTERISK-26238 #close

Change-Id: Ie75727f5cd5808845d92cc81f5713842fb203336
2016-08-11 11:32:43 -06:00
Richard Mudgett 1fc5c90014 res_pjsip res_pjsip_mwi: Misc fixes and cleanups.
* Eliminated RAII_VAR() usage in
ast_sip_persistent_endpoint_update_state().

* Added a missing allocation failure check to
persistent_endpoint_find_or_create().

* Made persistent_endpoint_find_or_create() create the new object without
a lock as it isn't needed.

* Cleaned up some ao2 container allocation idioms.

* Reordered res_pjsip_mwi.c load_module() and unload_module()

Change-Id: If8ce88fbd82a0c72a37a2388f74f77237a6a36a8
2016-08-11 12:14:53 -05:00
Richard Mudgett 73052e5732 location.c: Misc fixes and cleanups.
* Eliminated most RAII_VAR() usage.

* Added several missing allocation failure checks.

* Made ast_sip_for_each_contact() allocate the wrapper ao2 object without
a lock as it is not needed.

Change-Id: Ie20913365156c95dd79e5d471cfd25e99ae880bc
2016-08-11 12:12:48 -05:00
Richard Mudgett 9d4bd3d763 taskprocessor.c: Tweak high water checks.
* The high water check in ast_taskprocessor_alert_set_levels() would
trigger immediately if the new high water level is zero and the queue was
empty.

* The high water check in taskprocessor_push() was off by one.

Change-Id: I687729fb4efa6a0ba38ec9c1c133c4d407bc3d5d
2016-08-11 11:59:08 -05:00
Richard Mudgett e1248c3075 res_pjsip: Make aor named lock a mutex.
The named aor lock was always being locked for writes so a rwlock adds no
benefit and may be slower because rwlocks are biased toward read locking.

Change-Id: I8c5c2c780eb30ce5441832257beeb3506fd12b28
2016-08-11 11:57:51 -05:00
Richard Mudgett 6e40334d89 pjsip_distributor.c: Add missing allocation failure check.
Change-Id: I932ab2cea845e534d9ff318035b6de39972d3b28
2016-08-11 11:56:24 -05:00
Matt Jordan a3c5488ff4 app_queue: Prevent crash when a call is forwarded to an invalid location
When a call forward attempt is made from a Queue member, the current
code will hang up the forwarding channel in an off-nominal condition
prior to raising the Stasis events informing the rest of Asterisk that
the call was forwarded. This will result in a slew of dreaded FRACKs,
most likely leading to a crash.

This patch modifies the code such that we don't hang up the forwarding
channel even in an off-nominal condition until we've safely raised the
Stasis messages.

ASTERISK-25797 #close

Change-Id: Ife5abed351691fd79105321636eaa8ea8dcdba38
2016-08-11 11:16:48 -05:00
zuul 1a3cc84371 Merge "channels/chan_pjsip: Add PJSIP_SEND_SESSION_REFRESH" into 13 2016-08-11 11:15:00 -05:00
Kevin Harwell 5913929d31 alembic: add auth_username to endpoint's identify_by enum
A new identify_by option was added recently, auth_username. However, this
setting was not added as an allowable choice in the database enumeration
value.

This patch updates the current enumeration, adding in the new setting.

ASTERISK-26268 #close

Change-Id: Ib4788e8485e4cd40172ec0abbf5810a147ab8bf8
2016-08-11 10:59:15 -05:00
zuul 134db75e67 Merge "alembic/sqlalchemy: auto increment only allowed on a single column" into 13 2016-08-10 21:15:15 -05:00
zuul dbc78c9fab Merge "pjsip: Fix deadlock with suspend taskprocessor on masquerade" into 13 2016-08-10 19:19:08 -05:00
Alexei Gradinari 1589452fdc pjsip: Fix deadlock with suspend taskprocessor on masquerade
If both channels which should be masqueraded
are in the same serializer:
1st channel will be locked waiting condition 'complete'
2nd channel will be locked waiting condition 'suspended'

On heavy load system a chance that both channels will be in
the same serializer 'pjsip/distibutor' is very high.

To reproduce compile res_pjsip/pjsip_distributor.c with
DISTRIBUTOR_POOL_SIZE=1

Steps to reproduce:
1. Party A calls Party B (bridged call 'AB')
2. Party B places Party A on hold
3. Party B calls Voicemail app (non-bridged call 'BV')
4. Party B attended transfers Party A to voicemail using REFER.
5. When asterisk masquerades calls 'AB' and 'BV',
   a deadlock is happened.

This patch adds a suspension indicator to the taskprocessor.
When a session suspends/unsuspends the serializer
it sets the indicator to the appropriate state.
The session checks the suspension indicator before
suspend the serializer.

ASTERISK-26145 #close

Change-Id: Iaaebee60013a58c942ba47b1b4930a63e686663b
2016-08-10 16:01:23 -04:00
Joshua Colp c864ebab52 Merge "res_rtp_asterisk: Cache local RTCP address." into 13 2016-08-10 14:00:38 -05:00
Kevin Harwell f6ec94cca6 alembic/sqlalchemy: auto increment only allowed on a single column
The extensions table defined two columns (id and priority) as primary key
autoincrement columns. However only one is allowed when defining the primary
key.

This patch removes the autoincrement attribute from the priority column since
it does not need to be as such and really should not have been on there in the
first place.

This patch also removes 'context', 'exten', and 'priority' from the primary key
index and creates a new combined unique contraint index on them.

ASTERISK-26183 #close

Change-Id: Ib9c712c612a4d7ec1edb0dcb77f1bae0905a470b
2016-08-10 13:50:13 -05:00
Matt Jordan 5f815f9dba channels/chan_pjsip: Add PJSIP_SEND_SESSION_REFRESH
This patch adds a new PJSIP specific dialplan function,
PJSIP_SEND_SESSION_REFRESH. When invoked on a PJSIP channel, the media
session will be refreshed via either an UPDATE or re-INVITE request.
When used in conjunction with the PJSIP_MEDIA_OFFER dialplan function,
the formats in use on a PJSIP channel can be re-negotiated and changed
dynamically after call setup.

ASTERISK-26277 #close

Change-Id: Ib98fe09ba889aafe26d58d32f0fd1323f8fd9b1b
2016-08-10 11:20:11 -05:00
Mark Michelson a119bab6a6 res_rtp_asterisk: Cache local RTCP address.
When an RTCP packet is sent or received, res_rtp_asterisk generates a
Stasis event that contains the RTCP report as well as the local and
remote addresses that the report pertains to.

The addresses are determined using ast_find_ourip(). For the local
address, this will typically result in a lookup of the hostname of the
server, and then a DNS lookup of that hostname. If you do not have the
host in /etc/hosts, then this results in a full DNS lookup, which can
potentially block for some time.

This is especially problematic when performing RTCP reads, since those
are done on the same thread responsible for reading and writing media.

This patch addresses the issue by performing a lookup of the local
address when RTCP is allocated. We then use this cached local address
for the Stasis events when necessary.

ASTERISK-26280 #close
Reported by Mark Michelson

Change-Id: I3dd61882c2e57036f09f0c390cf38f7c87e9b556
2016-08-09 16:19:34 -05:00
zuul 5a5b949333 Merge "res_pjsip_mwi: fix unsolicited mwi blocks PJSIP stack" into 13 2016-08-09 16:19:13 -05:00
Joshua Colp 926c1c72bd Merge "res_pjsip_outbound_publish: Use a serializer shutdown group for unload." into 13 2016-08-09 14:44:24 -05:00
Alexei Gradinari a06a1af0eb res_pjsip_mwi: fix unsolicited mwi blocks PJSIP stack
The PJSIP taskprocessors could be overflowed on startup
if there are many (thousands) realtime endpoints
configured with unsolicited mwi.
The PJSIP stack could be totally unresponsive for a few minutes
after boot completed.

This patch creates a separate PJSIP serializers pool for mwi
and makes unsolicited mwi use serializers from this pool.
This patch also adds 2 new global options to tune taskprocessor
alert levels: 'mwi_tps_queue_high' and 'mwi_tps_queue_low'.

This patch also adds new global option 'mwi_disable_initial_unsolicited'
to disable sending unsolicited mwi to all endpoints on startup.
If disabled then unsolicited mwi will start processing
on next endpoint's contact update.

ASTERISK-26230 #close

Change-Id: I4c8ecb82c249eb887930980a800c9f87f28f861a
2016-08-08 13:53:32 -04:00
Joshua Colp bf21359292 Merge "app_voicemail: Add taskprocessor alert level options." into 13 2016-08-08 12:32:52 -05:00
Joshua Colp 485fd27f7c res_pjsip_outbound_publish: Use a serializer shutdown group for unload.
This change replaces the custom unload process for the outbound
publish module with the common serializer shutdown group.

ASTERISK-25217 #close

Change-Id: I280a0384d860c486202d87d2d674394cca77ffb6
2016-08-04 15:16:33 +00:00
Corey Farrell 805f105f88 Add missing checks during startup.
This ensures startup is canceled due to allocation failures from the
following initializations.
* channel.c: ast_channels_init
* config_options.c: aco_init

ASTERISK-26265 #close

Change-Id: I911ed08fa2a3be35de55903e0225957bcdbe9611
2016-08-03 16:39:46 -04:00
Alexei Gradinari ea71bd6e3e app_voicemail: Add taskprocessor alert level options.
On heavy loaded system with IMAP or DB storage,
'app_voicemail' taskprocessor queue could reach 500 scheduled tasks.
It could happen when the IMAP or DB server dies or is unreachable.
It could happen on startup when there are many (thousands)
realtime endpoints configured with unsolicited mwi.
If the taskprocessor queue reaches the high water level
then the alert is triggered and pjsip stops processing new requests
until the queue reaches the low water level to clear the alert.

This patch adds 2 new 'general' configuration options
to tune taskprocessor alert levels:
'tps_queue_high' - Taskprocessor high water alert trigger level.
'tps_queue_low' - Taskprocessor low water clear alert level

ASTERISK-26229 #close

Change-Id: I766294fbffedf64053c0d9ac0bedd3109f043ee8
2016-08-03 14:56:45 -05:00
Joshua Colp 9dc8cfabd5 astconfigparser: Really handle case where line is simply a comment.
The regular expression would match causing the code that handled
the line if it was merely a comment to never get executed.

Change-Id: I3e4022481037ebcba9905587fe8c764b4ce21819
2016-08-03 14:47:04 +00:00
zuul 9db6cdba1a Merge "asterisk.c: Add auto generation and persistence of UUID" into 13 2016-08-02 19:05:42 -05:00
zuul bc43220fc6 Merge "Remove SILK payload mappings from Asterisk core." into 13 2016-08-02 18:32:11 -05:00
Joshua Colp 2a0f42c494 Merge "res_pjsip: SIP/SDP origin (o=) contained square brackets on IP6 transports." into 13 2016-08-02 15:59:51 -05:00
George Joseph ad3e65433c asterisk.c: Add auto generation and persistence of UUID
Upcoming features will require the generation and persistence
of a UUID.

Change-Id: I3ec0062427e133217db6ef496a4216f427c3b92d
2016-08-02 14:20:10 -06:00
Joshua Colp 85f9642420 Merge "menuselect: Add an opaque "member_data" string to the acceptable xml" into 13 2016-08-02 14:17:22 -05:00
Joshua Colp f1b0286aa4 Merge "rest-api: Code out of sync with the model" into 13 2016-08-02 13:36:18 -05:00
Kevin Harwell efc4034d72 rest-api: Code out of sync with the model
Change-Id: Idccaa26fd4a423d47d013ee592b8fa6a0349c006
2016-08-02 13:02:24 -05:00
Joshua Colp 9d59de79c9 Merge "sorcery: Use more compatible regex for local expressions." into 13 2016-08-02 12:21:12 -05:00
Mark Michelson f6821fbaec Remove SILK payload mappings from Asterisk core.
SILK is a bit of a hog when it comes to using up our limited number of
dynamic payload types in the RTP engine. By freeing up four slots, it
allows for other codecs to potentially take the place.

Now, codec_silk.so will dynamically use the payload slots in the RTP
engine when it loads.

A better fix would be make RTP dynamic payload types actually
dynamic. However, at this stage of Asterisk 14 development, this is a
risky move that would be imprudent.

Change-Id: I5774e09408f9a203db189529eabdc0d3f4c1e612
(cherry picked from commit d50895c7b0)
2016-08-02 10:50:34 -05:00
Joshua Colp 829b4ba8b3 Merge "pjproject: fixed a few bugs" into 13 2016-08-02 09:34:39 -05:00
Joshua Colp 102d28c11a sorcery: Use more compatible regex for local expressions.
This changes the use of an empty regex for both res_sorcery_config
and res_sorcery_memory to "." instead. This is a more compatible
regular expression which also works on FreeBSD.

ASTERISK-26206 #close

Change-Id: Ia9166dd176f1597555ba22b6931180d0626c1388
2016-08-02 10:25:16 +00:00
Alexander Traud b78d10a2df res_pjsip: SIP/SDP origin (o=) contained square brackets on IP6 transports.
ASTERISK-26256 #close

Change-Id: I3fd68df561f81fdb8c6c497d465b50c12422f058
2016-08-02 03:15:54 -05:00
George Joseph 1f95c011c7 menuselect: Add an opaque "member_data" string to the acceptable xml
Change-Id: Id5ac43b95c8d7395f3be37f983632169db3d1afe
2016-08-01 15:13:17 -06:00
zuul 104b17eea9 Merge "Replace strdupa with more portable ast_strdupa" into 13 2016-08-01 15:36:50 -05:00
zuul 1e64f4a295 Merge "menuselect: Various menuselect enhancements" into 13 2016-08-01 15:26:10 -05:00
zuul b8fb794e53 Merge "astconfigparser: Handle case where line is simply a comment." into 13 2016-08-01 15:05:04 -05:00
David M. Lee df42f64d62 Replace strdupa with more portable ast_strdupa
The strdupa function is a GNU extension, and not widely portable. We
have an ast_strdupa function used within Asterisk which is preferred.
I pulled the definition up from menuselect.c into the menuselect.h
header file so it can be shared across menuselect.

Change-Id: I9593c97f78386b47dc1e83201e80cb2f62b36c2e
2016-08-01 10:53:19 -06:00
George Joseph 56a07fbab9 menuselect: Various menuselect enhancements
* Add 'external' as a support level.
* Add ability for module directories to add entries to the menu
  by adding members to the <module_prefix>/<module_prefix>.xml file.
* Expand the description field to 3 lines in the ncurses implementation.
* Allow the description field to wrap in the newt implementation.
* Add description field to the gtk implementation.

Change-Id: I7f9600a1984a42ce0696db574c1051bc9ad7c808
(cherry picked from commit 90f445729d)
2016-08-01 11:46:36 -05:00
zuul 948a9b615f Merge "pbx.c: Fix handling of '-' in extension name and callerid" into 13 2016-08-01 10:25:19 -05:00
zuul f2a93dc9f2 Merge "pjproject_bundled: Update for pjproject 2.5.5" into 13 2016-07-29 11:30:42 -05:00
zuul c2aed1c6e0 Merge "pbx.c: Allow dangerous functions when adding a hint to dialplan." into 13 2016-07-29 06:27:20 -05:00
Joshua Colp 7f9369c1b6 astconfigparser: Handle case where line is simply a comment.
Change-Id: I2dea5815363f4d787d709228a04f33baee383ef5
2016-07-29 06:48:32 -03:00
Joshua Colp cc5660406c Merge "dsp.c: Add fax and DTMF detection unit tests." into 13 2016-07-28 19:40:42 -05:00
Joshua Colp cc825e54b0 Merge "dsp.c: Added descriptive comments to Goertzel calculations." into 13 2016-07-28 19:40:37 -05:00
Joshua Colp 323042d99d Merge "dsp.c: Fix incorrect format reference typo." into 13 2016-07-28 19:40:33 -05:00
zuul d5e380b8fb Merge "dsp.c: Correct DTMF twist dsp.conf documentation." into 13 2016-07-28 19:34:53 -05:00
Joshua Colp 78de6eabbc Merge "astconfigparser.py: Update with realtime fixes." into 13 2016-07-28 19:18:00 -05:00
Corey Farrell 57e9c66819 pbx.c: Fix handling of '-' in extension name and callerid
This adds a two strings to ast_exten.  name to go with exten and
cidmatch_display to go with cidmatch.  The new fields contain input used
to add the extension in the first place.  The existing fields now
contain stripped input that excludes insignificant spaces and dashes.
These stripped fields should always be used for comparisons.  The
unstripped fields should normally be used for display, but displaying
stripped values will not cause runtime errors.

Note the actual string is only stored twice if it contains dashes.  If
no dashes are found then both 'char *' fields point to the same memory.
So this change has a minimum effect on memory usage.

The existing functions ast_get_extension_name and
ast_get_extension_cidmatch return unstripped values as they did before
this change.  Other similar bugs likely still exist where unstripped
extensions are saved outside pbx.c then passed back in.

ASTERISK-26233 #close

Change-Id: I6cd61ce57acc1570ca6cc14960c4c3b0a9eb837f
2016-07-28 20:00:23 -04:00
Richard Mudgett 873fc0fda5 pbx.c: Allow dangerous functions when adding a hint to dialplan.
We can allow dangerous functions when adding a hint since altering
dialplan is itself a privileged activity.  Otherwise, we could never
execute dangerous functions.

ASTERISK-25996 #close
Reported by: Andrew Nagy

Change-Id: I4929ff100ad1200a0198262d069a34f2296e77ba
2016-07-28 15:10:18 -05:00
zuul 7883f128d5 Merge "rtp_engine: Failed assertion and wrong name given for codec" into 13 2016-07-28 13:14:16 -05:00
Alexei Gradinari f00525a6f6 pjproject: fixed a few bugs
This patch fixes the issue in pjsip_tx_data_dec_ref()
when tx_data_destroy can be called more than once,
and checks if invalid value (e.g. NULL) is passed to.

This patch updates array limit checks and docs
in pjsip_evsub_register_pkg() and pjsip_endpt_add_capability().

Change-Id: I4c7a132b9664afaecbd6bf5ea4c951e43e273e40
2016-07-28 11:04:55 -04:00
George Joseph 972cee2e4c pjproject_bundled: Update for pjproject 2.5.5
Add more --disable-* switches to Makefile.rules including
--disable-opus which was causing bundled pjproject to fail with
"undefined reference" errors in libasteriskpj.

Changed PJ_ENABLE_EXTRA_CHECK to 1.

Removed 2 obsolete patches and added a new one.
The new one was merged by Teluu on 6/27/2016.

ASTERISK-26148 #close

Change-Id: Ib8af6c6a9d31f7238ce65b336134c2efdc855063
2016-07-28 07:04:12 -06:00
David M. Lee 8902a51d59 Portably sscanf tv_usec
In a timeval, tv_usec is defined as a suseconds_t, which could be
different underlying types on different platforms. Instead of trying to
scanf directly into the timeval, scanf into a long int, then copy that
into the timeval.

Change-Id: I29f22d049d3f7746b6c0cc23fbf4293bdaa5eb95
2016-07-27 12:48:17 -05:00
Kevin Harwell 852e763571 rtp_engine: Failed assertion and wrong name given for codec
Fixed an assert check that would trigger when the passed in value was negative.
The negative value was being cast to an unsigned value. This resulted in the
check failing.

Also fixed another problem when loading formats in the engine. When setting the
mime type the format's name was being passed in instead of the codec's name.

Change-Id: I1a201cd419ba4d8e9a40d337e36b6fbe1737192c
2016-07-27 12:45:30 -05:00
Richard Mudgett e8c34680ca dsp.c: Add fax and DTMF detection unit tests.
* Add fax amplitude and frequency sweep tests.
* Add DTMF amplitude and twist unit tests.

Change-Id: I8d77c9a1eec89e440d715f998c928687e870c3f7
2016-07-26 17:51:06 -05:00
Richard Mudgett c1f240b818 dsp.c: Added descriptive comments to Goertzel calculations.
* Added doxygen to describe some struct members and what is going on in
the code.

Change-Id: I2ec706a33b52aee42b16dcc356c2bd916a45190d
2016-07-26 17:51:05 -05:00
Richard Mudgett 003a52fd62 dsp.c: Fix incorrect format reference typo.
Change-Id: Ia131da3ec29acf385cb43a586a29ecc975eb3896
2016-07-26 17:51:05 -05:00
Richard Mudgett 4c0a0cbe02 dsp.c: Correct DTMF twist dsp.conf documentation.
Change-Id: Idf97e3a72f1edc5fca58f2fa7b20785922be0cae
2016-07-26 17:50:47 -05:00
Joshua Colp 87433c2566 astconfigparser.py: Update with realtime fixes.
When configuring SIP URIs in the pjsip.conf file it is
necessary to escape the semicolon so the parser does not
treat it as a comment. This change allows this to work in
the astconfigparser implementation.

A secondary bug where some data was lost if a configuration
option included a "=" in its value was also fixed.

A bug where sections would be considered equal despite
being different has also been fixed.

Change-Id: If229f656ef22050b50e7b34e90c4bffe796431f8
2016-07-26 19:29:52 -03:00
Richard Mudgett 159e437e5a dsp.c: Fix erroneous fax tone detection.
The Goertzel calculations get less accurate the lower the signal level
being worked with becomes because there is less resolution remaining.
If it is too low we can erroneously detect a tone where none really
exists.  The searched for fax frequencies not only need to be so much
stronger than the background noise they must also be a minimum strength.

* Add needed minimum threshold test to tone_detect().

* Set TONE_THRESHOLD to allow low volume frequency spread detection.

ASTERISK-26237 #close
Reported by: Richard Mudgett

Change-Id: I84dbba7f7628fa13720add6a88eae3b129e066fc
2016-07-25 23:20:41 -05:00
zuul 7ec9819403 Merge "Fix sqlalchemy error regarding identifier length." into 13 2016-07-23 16:54:27 -05:00
zuul 17e0e058ca Merge "chan_sip: Enable Session-Timers for SIP over TCP (and TLS)." into 13 2016-07-22 16:55:13 -05:00
Mark Michelson eda95236d1 Fix sqlalchemy error regarding identifier length.
sqlalchemy was complaining:

sqlalchemy.exc.IdentifierError: Identifier
'ps_contacts_qualifyfreq_exptime' exceeds maximum length of 30
characters

This fixes the problem by changing the index name to be
"ps_contacts_qualifyfreq_exp" instead.

ASTERISK-26227 #close
Reported by Mark Michelson

Change-Id: I0ed784f87504be2a59ee8d3242ef6f625d5ed1a9
2016-07-22 14:44:50 -05:00
zuul 8d6a7b89bd Merge "res_pjsip: Whitespace and comment cleanup." into 13 2016-07-22 07:13:13 -05:00
Alexander Traud 66c9dfb272 chan_sip: Enable Session-Timers for SIP over TCP (and TLS).
Asterisk defaults to timers=accept/refresher=uas. In that scenario, only in that
scenario, Sessions-Timers (RFC 4028) had no effect via TCP. This change enables
Session-Timers for SIP over TCP (and for SIP over TLS).

However with longer international calls via TCP, the SIP channel might break,
because all hops on the Internet route must stay online (have not a single power
outage, for example). Therefore with Session-Timers enabled (which are enabled
at default), you might see dropped calls. Consequently even with this change,
you might be better-off going for session-timers=refuse in your sip.conf.

ASTERISK-19968 #close

Change-Id: I1cd33453c77c56c8e1394cd60a6f17bb61c1d957
2016-07-22 12:50:12 +02:00
Joshua Colp 0de05c2938 Merge "chan_sip: Prevent deadlock when issuing "sip show channels"" into 13 2016-07-22 04:47:13 -05:00
zuul e3fbb4e099 Merge "res_pjsip_pubsub: fixed a bug when pjsip_tx_data_dec_ref is called twice." into 13 2016-07-22 02:22:03 -05:00
Richard Mudgett 33716106e0 res_pjsip: Whitespace and comment cleanup.
Change-Id: I11139a4a95df34e223ba622aa6227e33ab8f6c38
2016-07-21 23:30:57 -05:00
zuul 80a9899100 Merge "chan_dahdi.c: Fix deadlock potential in fax redirection." into 13 2016-07-21 19:27:12 -05:00
zuul 2b001fd6aa Merge "chan_sip.c: Fix deadlock potential in fax redirection." into 13 2016-07-21 19:18:20 -05:00
zuul 00ed6b74ea Merge "chan_pjsip.c: Fix deadlock potential in fax redirection." into 13 2016-07-21 19:07:05 -05:00
zuul ffbaefa48f Merge "res_fax.c: Fix deadlock potential in FAXOPT(faxdetect) framehook." into 13 2016-07-21 18:35:12 -05:00
Joshua Colp 0b8448a74b Merge changes from topic 'ASTERISK-26214' into 13
* changes:
  res_fax: Fix FAXOPT(faxdetect) timeout option.
  chan_dahdi: Add faxdetect_timeout option.
2016-07-21 18:26:39 -05:00
George Joseph 52ab0bf258 chan_sip: Prevent deadlock when issuing "sip show channels"
sip_show_channels locks the dialogs container first then locks each
sip_pvt so it can spit out the details.  The rest of sip dialog
processing locks the sip_pvt first then locks the dialogs container
if it needs to.  Both lock in the order they need but deadlocks can
result.  To fix, sip_show_channels and sip_show_channelstats have
been converted to use an iterator rather than ao2_callback.  This way
the container is locked only while getting the next entry and is
unlocked when the callback is called.

ASTERISK-23013 #close

Change-Id: Id9980419909e811f89484950ed46ef117b9eb990
2016-07-21 17:06:35 -05:00
Joshua Colp efebb1b9e0 Merge "res_pjsip: Add fax_detect_timeout endpoint option." into 13 2016-07-21 16:54:32 -05:00
zuul dec1e31f45 Merge "Add conditional support for noreturn functions." into 13 2016-07-21 15:09:52 -05:00
Alexei Gradinari 5997ec7c9e res_pjsip_pubsub: fixed a bug when pjsip_tx_data_dec_ref is called twice.
This patch removed call of pjsip_tx_data_dec_ref in send_notify
if send_request failed.
The pjsip_dlg_send_request deletes the message on error by itself.

It seems this patch fixes next issues:
ASTERISK-26199
ASTERISK-26166
ASTERISK-26174

Change-Id: I8b05917c93d993f95d604c042ace5f1a5500f59a
2016-07-21 11:21:05 -04:00
zuul d4242d6250 Merge "Makefile: Retain XML Declaration and DTD in docs." into 13 2016-07-20 12:14:41 -05:00
zuul 7dacb14c03 Merge "Unit tests: Use AST_TEST_DEFINE in conditional code only." into 13 2016-07-20 11:31:50 -05:00
zuul 290269bb23 Merge "res_rtp_asterisk: Count a roll-over of the sequence number even on lost packets." into 13 2016-07-20 09:58:05 -05:00
zuul 7ce180a754 Merge "res_pjsip_mwi: remove unneeded check on endpoint's contacts." into 13 2016-07-20 09:58:00 -05:00
Corey Farrell 7fdf7c3d4c Add conditional support for noreturn functions.
This adds support for tagging functions with the noreturn attribute.
If DO_CRASH is enabled then ast_do_crash never returns.  If AST_DEVMODE
and DO_CRASH are enabled then failed assertions never return.  This can
resolve a large number of false positives with static analyzers.

ASTERISK-26220 #close

Change-Id: Icfb61e5fe54574eced4c3e88b317244f467ec753
2016-07-19 23:35:41 -04:00
Richard Mudgett dcb8aa8c1c chan_dahdi.c: Fix deadlock potential in fax redirection.
The dahdi_handle_dtmf() and my_handle_dtmf() have the potential to
deadlock if an incoming fax happens during the Playback or similar
application.

* Fixed the potential deadlock by not calling ast_async_goto() with the
channel lock held.

ASTERISK-26216 #close
Reported by: Richard Mudgett

Change-Id: I9144b84ade5f96690996624ec8a2d40c56af40aa
2016-07-19 13:27:32 -05:00
Richard Mudgett fa91cf3eec chan_sip.c: Fix deadlock potential in fax redirection.
The sip_read() has the potential to deadlock if an incoming fax happens
during the Playback or similar application.

* Fixed the potential deadlock by not calling ast_async_goto() with the
channel lock held.

* Made always eat the fax detection frame whether there is a fax extension
or not.

ASTERISK-26216
Reported by: Richard Mudgett

Change-Id: I6d3f5cccd4b77c3aa6ffc1a54c0f6bde61c9278e
2016-07-19 13:27:32 -05:00
Richard Mudgett 2e1bdc3775 chan_pjsip.c: Fix deadlock potential in fax redirection.
The chan_pjsip_cng_tone_detected() has the potential to deadlock if an
incoming fax happens during the Playback or similar application.

* Fixed the potential deadlock by not calling ast_async_goto() with the
channel lock held.

* Made always eat the fax detection frame whether there is a fax extension
or not.

ASTERISK-26216
Reported by: Richard Mudgett

Change-Id: I32aecbb4818af646dc5a619f0dc040e9b1f222e5
2016-07-19 13:27:31 -05:00
Richard Mudgett 628e8c91d5 res_fax.c: Fix deadlock potential in FAXOPT(faxdetect) framehook.
The fax_detect_framehook() has the potential to deadlock if an incoming
fax happens during the Playback or similar application.

* Fixed the potential deadlock by not calling ast_async_goto() with the
channel lock held.

* Made always eat the fax detection frame whether there is a fax extension
or not.

* Made only detach the framehook if we detected a fax and not on other
possible frames.

ASTERISK-26216
Reported by: Richard Mudgett

Change-Id: I99da35c26d1cd802626ffb4c1b4eb5b015581b6d
2016-07-19 13:27:31 -05:00
Richard Mudgett 676aeede36 res_fax: Fix FAXOPT(faxdetect) timeout option.
The fax detection timeout option did not work because basically the wrong
variable was checked in fax_detect_framehook().  As a result, the timer
would timeout immediately and disable fax detection.

* Fixed ignoring negative timeout values.  We'd complain and then go right
on using the negative value.

* Fixed destroy_faxdetect() in the off-nominal case of an incomplete
object creation.

* Added more range checking to FAXOPT(gateway) timeout parameter.

ASTERISK-26214 #close
Reported by: Richard Mudgett

Change-Id: Idc5e698dfe33572de9840bc68cd9fc043cbad976
2016-07-19 10:32:15 -05:00
Richard Mudgett 652130feb2 chan_dahdi: Add faxdetect_timeout option.
The new option allows the channel driver's faxdetect option to timeout on
a call after the specified number of seconds into a call.  The new feature
is disabled if the timeout is set to zero.  The option is disabled by
default.

* Don't clear dsp_features after passing them to the dsp code in
my_pri_ss7_open_media().  We should still remember them especially for the
new faxdetect_timeout option.

ASTERISK-26214
Reported by: Richard Mudgett

Change-Id: Ieffd3fe788788d56282844774365546dce8ac810
2016-07-19 10:32:15 -05:00
Richard Mudgett 851b1c3a17 res_pjsip: Add fax_detect_timeout endpoint option.
The new endpoint option allows the PJSIP channel driver's fax_detect
endpoint option to timeout on a call after the specified number of
seconds into a call.  The new feature is disabled if the timeout is set
to zero.  The option is disabled by default.

ASTERISK-26214
Reported by: Richard Mudgett

Change-Id: Id5a87375fb2c4f9dc1d4b44c78ec8735ba65453d
2016-07-19 10:32:14 -05:00
Alexander Traud 021d4892cd Makefile: Retain XML Declaration and DTD in docs.
Since Asterisk 12, the documentation got an XML Stylesheet. Because of a typo,
the XML Declaration and DTD were overwritten by this.

ASTERISK-26212 #close

Change-Id: If5ee4625068042e98ab3fcb22a25e2f15d0c68bd
2016-07-19 05:07:01 -05:00
Corey Farrell c8e41d14a1 Unit tests: Use AST_TEST_DEFINE in conditional code only.
If AST_TEST_DEFINE is not conditional to TEST_FRAMEWORK it produces dead
code.  This places all existing unit tests into a conditional block if
they weren't already.

ASTERISK-26211 #close

Change-Id: I8ef83ee11cbc991b07b7a37ecb41433e8c734686
2016-07-18 19:39:39 -04:00
Alexander Traud e404f51b42 res_rtp_asterisk: Count a roll-over of the sequence number even on lost packets.
With this change, the initial RTP sequence number is randomly chosen not between
0 and 65535 (0xffff) but 0 and 32767 (0x7fff). This assures, the roll-over
counter (ROC) synchronization is not lost for sRTP, when the very first RTP
packets get lost; see http://srtp.sourceforge.net/faq.html#Q6

ASTERISK-26207 #close

Change-Id: I9a527e3aa3ce8f3becc5131d7ba32b57b5845464
2016-07-18 05:47:20 -05:00
Alexander Traud 5f24874ebb Makefile: Suppress echoing of target 'config' again.
ASTERISK-26038 #close

Change-Id: I5746cf639f3fdc6332e8a97cf01f979e30bf403f
2016-07-18 04:24:06 -05:00
zuul 962c7ef5d9 Merge "app_queue: Only remove queue member from pending when state changes." into 13 2016-07-15 12:26:52 -05:00
Corey Farrell 76d4983c15 features.c: Remove unneeded adsi.h include.
adsi.h is no longer used by features.c since parking was moved to a
module.

Change-Id: I2248b8a455225a17cb6ddaafd6c20c511a1eaf59
2016-07-14 22:22:55 -04:00
zuul 4b2031226d Merge "Update support for SILK format." into 13 2016-07-14 18:54:51 -05:00
Alexei Gradinari cb58f853e1 res_pjsip_mwi: remove unneeded check on endpoint's contacts.
The function create_mwi_subscriptions_for_endpoint checks
if there is active contacts by retrieving aors and contacts.

This function is used to create all unsolicited mwi subscriptions
on startup and is used when contact added.

In both cases it's not necessary to check if there are contacts.
The contacts are needed when asterisk sends mwi.

ASTERISK-26200 #close

Change-Id: I98e43bdc97f3c0829951cd9bf5f3c6348c6ac1fa
2016-07-14 19:06:34 -04:00
Mark Michelson 28501051b4 Update support for SILK format.
This commit adds scaffolding in order to support the SILK audio format
on calls. Roughly, this is what is added:

* Cached silk formats. One for each possible sample rate.
* ast_codec structures for each possible sample rate.
* RTP payload mappings for "SILK".

In addition, this change overhauls the res_format_attr_silk file in the
following ways:

* The "samplerate" attribute is scrapped. That's native to the format.
* There are far more checks to ensure that attributes have been
  allocated before attempting to reference them.
* We do not SDP fmtp lines for attributes set to 0.

These changes make way to be able to install a codec_silk module and
have it actually work. It also should allow for passthrough silk calls
in Asterisk.

Change-Id: Ieeb39c95a9fecc9246bcfd3c45a6c9b51c59380e
2016-07-14 15:54:21 -05:00
zuul 714ceb88df Merge "translate: explicit format destination not properly set" into 13 2016-07-14 13:40:42 -05:00
Joshua Colp 8892029a03 Merge "threadpool: Fix leak in ast_threadpool_serializer_group error path." into 13 2016-07-14 12:42:17 -05:00
zuul b4976b9038 Merge "pbx: Fix leak of timezone for time based includes." into 13 2016-07-14 12:05:21 -05:00
zuul 64a09963be Merge "BuildSystem: Avoid obsolete warning with pthread.m4 on autoconf." into 13 2016-07-14 12:05:20 -05:00
zuul b12aee68be Merge "res_rtp_asterisk: Enable Forward Secrecy (PFS) for DTLS." into 13 2016-07-14 09:55:08 -05:00
zuul 3c1a40eb8d Merge "stasis_endpoint.c: Fix contactstatus_to_json()." into 13 2016-07-14 08:02:29 -05:00
Joshua Colp 43b5f8d57b app_queue: Only remove queue member from pending when state changes.
It is possible for a not in use state change to occur multiple
times causing a queue member to be removed from the pending call
container prematurely.

The first not in use state change will remove the queue member
from the container. At this moment the member may be called and
placed in the pending container. After this another not in use
state change can be received which will remove it from the
container. Despite being called at this point the code will
incorrectly see that there are no pending calls to it.

This change only removes it from the pending container if the
state has actually changed.

ASTERISK-26133 #close
patches:
  app_queue.diff submitted by Richard Miller (license 5685)

Change-Id: Ie5a7f17a44f98e9159e9b85009ce3f8393aa78c0
2016-07-14 07:53:07 -05:00
zuul 56668e3e9c Merge "pjsip_options.c: Fix container operation." into 13 2016-07-14 07:48:30 -05:00
zuul 91148fdd4f Merge "pjsip_configuration.c: Misc cleanups." into 13 2016-07-14 07:34:04 -05:00
Corey Farrell a17b071e36 pbx: Fix leak of timezone for time based includes.
Create include_free to run ast_destroy_timing and ast_free, use that in
all places that freed an ast_include structure.  This fixes a couple of
paths that previously did not run ast_destroy_timing.

ASTERISK-26196 #close

Change-Id: I1671bd111bef0dc113e8bf8f77f89fcfc395d838
2016-07-14 02:59:45 -05:00
zuul 436fc7ca2b Merge "chan_sip: Fix reference leak in mwi_event_cb" into 13 2016-07-13 22:11:42 -05:00
zuul 8c3d301dc6 Merge "res/res_pjsip_session: Check for presence of an active negotiator" into 13 2016-07-13 21:44:12 -05:00
Joshua Colp ca98b6cea2 Merge "res/res_pjsip_pubsub: Add additional debug statements" into 13 2016-07-13 18:53:02 -05:00
Joshua Colp 355fc081e6 Merge "res/res_corosync: Raise a Stasis message on node join/leave events" into 13 2016-07-13 18:52:56 -05:00
Kevin Harwell 8cef8f35e7 translate: explicit format destination not properly set
If the destination format's name differed from the codec name then the
translator's explict_dst field would be improperly set. In some circumstances
it would end up setting it to a newly created format that has the same name
as the codec when it actually needed to be the given destination codec.

This could cause the translation path to use the wrong format. For instance,
if an endpoint had specified 'myulaw' as a format the translator could end up
using a 'ulaw' format (with whatever/default settings) instead. If the format
attribute settings differed between the two then there may unexpected results
during processing.

This patch removes the name check when building the translation path. This
should make it always set the translator's explicit_dst to the given destination
format as long as the sample rate and types match.

Change-Id: Iaf8a03831d68e657d89569d54b505074efbefab5
2016-07-13 18:00:40 -05:00
Richard Mudgett afbd10b0c5 stasis_endpoint.c: Fix contactstatus_to_json().
The roundtrip_usec json member is optional.  If it isn't present then
don't put it into the converted json structure where ast_json_pack()
will choke on it.

Change-Id: I39bb2f86154ef54591270c58bfda8635070f9ea0
2016-07-13 14:37:10 -05:00
Corey Farrell 2be13d62fd chan_sip: Fix reference leak in mwi_event_cb
Cleanup the peer reference when stasis_subscription_final_message is
true.  Also free peer_name even if peer exists, after reload a new
peer_name will be allocated.

ASTERISK-26193 #close

Change-Id: If7ecd52facdc5c227f701c760841e3f6ca53cc69
2016-07-13 15:07:36 -04:00
Alexander Traud 332beb27d8 res_rtp_asterisk: Enable Forward Secrecy (PFS) for DTLS.
Since July 2014, TLS based protocols (SIP over TLS, Secure WebSockets, HTTPS)
support PFS thanks to ASTERISK-23905. In July 2015, the same feature was added
for DTLS. The source code from main/tcptls.c should have been re-used to ease
security audits. Therefore, this change rolls back the change from July 2015 and
re-uses the code from July 2014. This has the additional benefits to work under
CentOS 7 and enabling not just ECDHE but DHE based cipher suites as well.

ASTERISK-25659 #close
Reported by: StefanEng86, urbaniak, pay123
Tested by: sarumjanuch, traud
patches:
res_rtp_asterisk.patch submitted by sarumjanuch
dtls_centos_step_1.patch submitted by traud
dtls_centos_step_2.patch submitted by traud

Change-Id: I537cadf4421f092a613146b230f2c0ee1be28d5c
2016-07-13 11:48:21 -05:00
Corey Farrell 672a64bda3 threadpool: Fix leak in ast_threadpool_serializer_group error path.
ast_threadpool_serializer_group leaks a reference to ser when listener
is allocated but tps is not.  Although listener takes the reference to
ser cleanup functions are not run without tps.

ASTERISK-26191 #close

Change-Id: Ie3ccf69a3f1e676c2ef62a77067c0cb57dc9a585
2016-07-13 12:30:58 -04:00
Richard Mudgett fea201f7e6 pjsip_options.c: Fix container operation.
aor_observer_deleted() needs to operate on all contacts found for the
deleted AOR instead of only the first one found.  This is really only a
problem if there is more than one contact for the AOR.

Change-Id: Id24ac0d5e8c931330231fb45dd2a331a84339dc1
2016-07-13 11:22:49 -05:00
Richard Mudgett 02877b4b4f pjsip_configuration.c: Misc cleanups.
* Fix some whitespace in various routines.

* Rename i to iter in persistent_endpoint_update_state().

* Fix off-nominal copy/paste message wording in
persistent_endpoint_contact_deleted_observer()

Change-Id: Id8e34f5d09e7eebac3af22501c44c1110a3e29d8
2016-07-13 11:22:49 -05:00
Alexander Traud 148cd1b319 BuildSystem: Avoid obsolete warning with pthread.m4 on autoconf.
Updated the macro-set autoconf/ax_pthread.m4 to its latest upstream version.

ASTERISK-26046 #close

Change-Id: I11abc11d17acd2b6a8a5a5be8ae8e0949dab9cc7
2016-07-13 09:01:13 -05:00
zuul 8cea01ab1b Merge "res_pjsip: Fix statsd regression." into 13 2016-07-13 07:28:31 -05:00
zuul 08f5f10f8f Merge "BuildSystem: Allow own CFLAGS on ./configure." into 13 2016-07-13 06:13:27 -05:00
zuul f5aa9f8034 Merge "install_prereq: Checkout of libSRTP 1.5.x." into 13 2016-07-12 19:19:38 -05:00
zuul 1cfe9514bd Merge "chan_sip: Fix reference leaks in error paths." into 13 2016-07-12 18:09:42 -05:00
zuul afd7aba585 Merge "res_sorcery_realtime: fix bug when successful UPDATE is treated as failed" into 13 2016-07-12 17:33:37 -05:00
zuul daec52a8e6 Merge "res_pjsip: Added "subscribe_context" to endpoint" into 13 2016-07-12 17:10:57 -05:00
zuul f0eb5a8b8b Merge "BuildSystem: Avoid obsolete warning with libcurl.m4 on autoconf." into 13 2016-07-12 15:44:35 -05:00
zuul f3b7339260 Merge "func_odbc: Fix connection deadlock." into 13 2016-07-12 15:28:26 -05:00
Richard Mudgett 97b4c7a5b4 res_pjsip: Fix statsd regression.
The ASTERISK-25904 change-id I8fad8aae9305481469c38d2146e1ba3a56d3108f
patch introduced several regressions when the newly created "Updated"
state goes out for each endpoint registration refresh.

1) It restarted any OPTIONS RTT ping cycle.

2) It would interfere with a currently active ping and throw off that
ping's resulting RTT calculation.

3) It cleared the RTT time each time the endpoint was refreshed.

4) The cleared RTT time was sent out as a statsd update each time.

5) It created two AMI events for each update.

* Revert the original patch and reimplement it.  Now the current contact
status state is re-sent instead of the state being momentarily toggled
every time the endpoint refreshes its registration.  The statsd events are
not created for the re-sent refresh because they are sent after every
OPTIONS ping.

ASTERISK-26160 #close
Reported by: Matt Jordan

Change-Id: Ie072be790fbb2a8f5c1c874266e4143fa31f66d1
2016-07-12 11:52:10 -05:00
Alexander Traud 3be6fa1e4b BuildSystem: Allow own CFLAGS on ./configure.
Before this change, make failed with the error
Unknown value '' found in build_tools/menuselect-deps for NATIVE_ARCH
when CFLAGS were supplied to the configure script. This was introduced with
<https://reviewboard.asterisk.org/r/1852/> which disabled BUILD_NATIVE when
CFLAGS were supplied. Those who need different -march= values, please, go for
./configure
make menuselect.makeopts or make menuselect
./menuselect/menuselect --disable BUILD_NATIVE

ASTERISK-25289 #close

Change-Id: Ic6365d5a97bb9b3556858f06432a8d1cfa83eebc
2016-07-12 04:00:55 -05:00
Richard Mudgett 5ee205d8bb ast_expr2: Fix off-nominal memory leak.
Thanks to ibercom for pointing out a memory leak that was missed
in the earlier patch for the issue.

ASTERISK-26119
Reported by: Alexei Gradinari

Change-Id: I9a151f5c4725d97fb82a9e938bc73dc659532b71
2016-07-11 13:51:17 -05:00
Alexander Traud f5e9872016 install_prereq: Checkout of libSRTP 1.5.x.
Since 5th November 2014, the master branch of libSRTP changed the prefix of
several member names and is not compatible with the source code in Asterisk
anymore. Therefore instead, this change checks out the latest version of the
libSRTP 1.5.x branch. Furthermore now, libSRTP is compiled with OpenSSL as
backend. This makes AES-GCM and AES-IN possible.

ASTERISK-22131 #close

Change-Id: I2e396cdc01da0ff610686e398ed210ca7408f7d6
2016-07-11 10:19:59 -05:00
Joshua Colp 17efed6cf7 func_odbc: Fix connection deadlock.
The func_odbc module was modified to ensure that the
previous behavior of using a single database connection
was maintained. This was done by getting a single database
connection and holding on to it. With the new multiple
connection support in res_odbc this will actually starve
every other thread from getting access to the database as
it also maintains the previous behavior of having only
a single database connection.

This change disables the func_odbc specific behavior if
the res_odbc module is running with only a single database
connection active. The connection is only kept for the
duration of the request.

ASTERISK-26177 #close

Change-Id: I9bdbd8a300fb3233877735ad3fd07bce38115b7f
2016-07-10 21:42:02 -03:00
Corey Farrell 06ba533bc7 chan_sip: Fix reference leaks in error paths.
* get_sip_pvt_from_replaces leaks sip_pvt_ptr on any error.
* build_peer leaks peer on failure to allocate the endpoint.

This patch fixes get_sip_pvt by using an RAII_VAR, build_peer is fixed
with an unref in the appropriate place.

ASTERISK-26184 #close

Change-Id: I728b424648ad041409f7d90880f4c28b3ce2ca12
2016-07-09 14:32:27 -04:00
zuul 8019f32129 Merge "chan_sip/res_pjsip_t38: Handle a request to negotiate T.38 after it is enabled." into 13 2016-07-08 14:05:13 -05:00
zuul f3fd648be6 Merge "REF_DEBUG: Prevent logging of container node objects." into 13 2016-07-08 06:46:58 -05:00
Corey Farrell 9d4e664f62 REF_DEBUG: Prevent logging of container node objects.
Using AO2_CONTAINER_ALLOC_OPT_DUPS_REPLACE can result in an unref being
recorded to the refs log for the node being replaced.  This prevents
logging of those unrefs since they would produce errors in
refcounter.py.

ASTERISK-26181 #close

Change-Id: Ie4fded84e8a1a58b3a59ce59dfd7eb0da3ddc5d4
2016-07-07 13:41:25 -04:00
Scott Griepentrog e26bd15e7a PJSIP: provide valid tcp nodelay option for reuse
When using TCP transport with chan_pjsip, the TCP_NODELAY
option value was allocated on the stack, then passed as a
pointer to the tcp transport configuration structure, and
later re-used on subsequently created sockets when it was
no longer valid.  This patch changes the allocation to be
a static.

ASTERISK-26180 #close
Reported by: Scott Griepentrog

Change-Id: I3251164c7f710dbdab031282f00e30a9770626a0
2016-07-07 11:28:31 -05:00
Joshua Colp 77b0145a25 chan_sip/res_pjsip_t38: Handle a request to negotiate T.38 after it is enabled.
Some T.38 implementations may send another re-invite after the initial
one which adds additional negotiation details (such as the max bitrate).
Currently this will fail when passthrough is being done in chan_sip as we
do nothing if T.38 is already active.

Other handlers of T.38 inside of Asterisk (such as res_fax) handle this
scenario so this change adds support for it to chan_sip and res_pjsip_t38.
If a request to negotiate is received while T.38 is already enabled a
new re-INVITE is sent and negotiation is done again.

ASTERISK-26179 #close

Change-Id: I0298494d3da6df3219bbfa4be9aa04015043145c
2016-07-07 13:00:07 -03:00
Alexei Gradinari b4a9fa2c9e res_sorcery_realtime: fix bug when successful UPDATE is treated as failed
If the SQL UPDATE statement changes nothing then SQLRowCount returns 0.
This value should be treated as success.
But the function sorcery_realtime_update treats it as failed.

This bug was found using stress tests on PJSIP.
If there are 2 consecutive SIP REGISTER requests with the same contact data
during 1 second then res_pjsip_registrar adds contact location on 1st request
and tries to update contact location on 2nd.
The update fails and res_pjsip_registrar even removes correct contact location.

The test "object_update_uncreated" was removed from test_sorcery_realtime.c
because it's now a valid situation.

This patch also adds missing debug of extra SQL parameter.

ASTERISK-26172 #close

Change-Id: I05a7f3051455336c9dda29efc229decf86071303
2016-07-07 10:02:45 -04:00
Matt Jordan 1dfd3fc995 res/res_pjsip_session: Check for presence of an active negotiator
It is possible in a hypothetical situation for a session refresh to be
invoked on a PJSIP when the negotiatior on the INVITE session has not
yet been established. While this shouldn't occur with existing uses of
ast_sip_session_refresh, the crashes that occur due to improperly
calling PJSIP functions that expect a non-NULL negotiatior are
avoidable. PJSIP will create the negotiator in pjsip_inv_reinvite; this
means that simply checking for the presence of the negotiator before
passing it to other PJSIP functions that use it is allowable. As such,
this patch adds checks for the presence of the negotiator before calling
PJSIP functions that assume it is non-NULL.

Change-Id: I1028323e7e01b0a531865e5412a71b6f6ec4276d
2016-07-06 07:22:47 -05:00
Matt Jordan 9dd0aeeb44 res/res_pjsip_pubsub: Add additional debug statements
When something very sad and wrong occurs, it's challenging sometimes to
figure out why. This patch adds some additional debug statements on
off-nominal paths to try and make debugging easier.

Change-Id: I7bffb73cc733b6f80193a23340881db4a102b640
2016-07-06 07:22:47 -05:00
Matt Jordan 1ec4f8dd00 res/res_corosync: Raise a Stasis message on node join/leave events
When res_corosync detects that a node leaves or joins, it currently is
informed of this via Corosync callbacks. However, there are a few
limitations with the information presented:
(1) While we have information that Corosync is aware of - such as the
    Corosync nodeid - that information is really only useful inside of
    Corosync or res_corosync. There's no way to translate a Corosync
    nodeid to some other internally useful unique identifier for the
    Asterisk instance that just joined or left the cluster.
(2) While res_corosync is notified of the instance joining or leaving
    the cluster, it has no mechanism to inform the Asterisk core or
    other modules of this event. This limits the usefulness of res_corosync
    as a heartbeat mechanism for other modules.

This patch addresses both issues.

First, it adds the notion of a cluster discovery message both within the
Stasis message bus, as well as the binary event messages that
res_corosync uses to transmit data back and forth within the cluster.
When Asterisk joins the cluster, it sends a discovery message to the other
nodes in the cluster, which correlates the Corosync nodeid along with
the Asterisk EID. res_corosync now maintains a hash of Corosync nodeids
to Asterisk EIDs, such that it can map changes in cluster state with the
Asterisk instance that has that nodeid. Likewise, when an Asterisk
instance receives a discovery message from a node in the cluster, it now
sends its own discovery message back to the originating node with the
local Asterisk EID. This lets Asterisk instances within the cluster
build a complete picture of the other Asterisk instances within the
cluster.

Second, it publishes the discovery messages onto the Stasis message bus.
Said messages are published whenever a node joins or leaves the cluster.
Interested modules can subscribe for the ast_cluster_discovery_type()
message under the ast_system_topic() and be notified when changes in
cluster state occur.

Change-Id: I9015f418d6ae7f47e4994e04e18948df4d49b465
2016-07-06 07:22:46 -05:00
Alexei Gradinari 2c16a81dd5 res_pjsip: Added "subscribe_context" to endpoint
If specified, incoming SUBSCRIBE requests will be searched for the matching
extension in the indicated context. If no "subscribe_context" is specified,
then the "context" setting is used.

ASTERISK-25471 #close

Change-Id: I3fb7a15f5bc154079bd348c08b7ad1cdd2d5e514
2016-07-05 12:59:27 -04:00
Alexander Traud a1bd57884d BuildSystem: Avoid obsolete warning with libcurl.m4 on autoconf.
Updated the macro-set autoconf/libcurl.m4 to its latest upstream version. This
avoids a warning about an obsolete macro on AC_HELP_STRING, because Asterisk is
using AS_HELP_STRING everywhere else already.

ASTERISK-26046

Change-Id: I8299faf504ceaeee3e39930c59293809e116c631
2016-07-04 06:02:16 -05:00
Joshua Colp ac6824e4c3 Merge "res_pjsip_session.c: Don't send extra BYE if SDP invalid." into 13 2016-07-01 11:16:21 -05:00
Joshua Colp 12b754ca36 Merge "res_pjsip_session.c: End call on initial invalid SDP negotiation." into 13 2016-07-01 11:16:16 -05:00
Joshua Colp 65d0c0beb1 Merge "res_pjsip.c: Register PJMEDIA error code decoder." into 13 2016-07-01 11:16:12 -05:00
Joshua Colp 643086dbc9 Merge "res_pjsip_session.c: Remove unused parameter from handle_incoming()." into 13 2016-07-01 11:16:06 -05:00
Joshua Colp 9e72f29ddd Merge "res_pjsip: Add missing NULL checks when using pjsip_inv_end_session()." into 13 2016-07-01 11:15:59 -05:00
Joshua Colp d8b8dca04b Merge "features: Fix channel datastore access." into 13 2016-07-01 09:59:40 -05:00
Joshua Colp 7ed680cf92 Merge "res_pjsip: improve realtime performance #2" into 13 2016-06-30 15:53:16 -05:00
Richard Mudgett 640fbbbe28 features: Fix channel datastore access.
Found as a result of the testsuite tests/callparking test crashing.

Several calls to ast_get_chan_featuremap_config() and
ast_get_chan_features_xfer_config() did not lock the channel before
calling so the channel's datastore list was accessed without the lock's
protection.  Apparently another thread deleted a datastore on the
channel's list while the crashing thread was walking the list.  Crash at
0xdeaddead due to MALLOC_DEBUG's memory filler value as a result.

* Add missing channel locks to calls that were not already protected
as the doxygen for those calls indicates.

Change-Id: Id273b3d305cc616406c353cbc841b2b7655efaa1
2016-06-30 15:31:20 -05:00
Richard Mudgett 359134c8d3 res_pjsip_session.c: Don't send extra BYE if SDP invalid.
When an answer SDP is invalid we were disconnecting the outgoing call and
sending two BYE requests.  The first BYE was sent by PJPROJECT because of
the invalid SDP answer.  The second BYE was sent by Asterisk because it
thought the canceled call was the result of the RFC5407 section 3.1.2 race
condition.

* Made not send the BYE on a canceled session if the SDP negotiation is
incomplete because PJPROJECT has already sent a BYE for the failed
negotiation.

ASTERISK-25772 #close
Reported by:  Dmitriy Serov

Change-Id: I44ad0bd0605e8eeb7035c890d6f97a1331f1a836
2016-06-30 12:27:20 -05:00
Richard Mudgett 5fabcf2ca1 res_pjsip_session.c: End call on initial invalid SDP negotiation.
When an incoming call defers SDP negotiation and then sends us an invalid
SDP in the ACK, we need to send a BYE to disconnect the call.  In this
case SDP negotiation has failed and we don't have valid media streams
negotiated.

ASTERISK-25772

Change-Id: Ia358516b0fc1e6c4c139b78246f10b9da7a2dfb8
2016-06-30 12:27:20 -05:00
Richard Mudgett 38a4e983dc res_pjsip.c: Register PJMEDIA error code decoder.
Registering the PJMEDIA error codes allows errors found when parsing an
incoming SDP to be easier to figure out.

"Missing SDP rtpmap for dynamic payload type (PJMEDIA_SDP_EMISSINGRTPMAP)"
is much easier to understand than "Unknown error 220030".

ASTERISK-25772

Change-Id: I44b2dcea656fedd7593171be9e845880a2c70ca0
2016-06-30 12:09:10 -05:00
Richard Mudgett 1952434df5 res_pjsip_session.c: Remove unused parameter from handle_incoming().
Change-Id: Iedd182d189ec947c42edc2c66c4bda3c22060daa
2016-06-30 12:09:10 -05:00
Richard Mudgett 28928ba5c4 res_pjsip: Add missing NULL checks when using pjsip_inv_end_session().
pjsip_inv_end_session() is documented as being able to return the
passed in tdata parameter set to NULL on success.

Change-Id: I09d53725c49b7183c41bfa1be3ff225f3a8d3047
2016-06-30 12:09:10 -05:00
George Joseph 43a78100c0 configure: Fix HAVE_PJSIP_EVSUB_GRP_LOCK not set with external pjproject
There was a typo in configure.ac preventing HAVE_PJSIP_EVSUB_GRP_LOCK
from getting set when using an external pjproject.

ASTERISK-26099 #close
Reported-by: Ross Beer

Change-Id: I709af70428e125fb5ccd44b171d25dd29141f0ae
2016-06-30 07:25:09 -06:00
Joshua Colp 77c49ac1a1 Merge "pjproject/patches/config_site: Increase the max number of ICE candidates" into 13 2016-06-29 18:11:30 -05:00
Matt Jordan 99eff80e76 hep.conf.sample: Default 'enabled' to 'no'
Following the principle of least surprise, we should not be sending
massive numbers of PJSIP and RTCP HEP packets out into the ether to some
only-slightly-random IP address. Having 'enabled' set to 'no' in the
sample configuration file should prevent this from happening for those
who run 'make samples'.

ASTERISK-26159 #close

Change-Id: I1753a64ca83a3442a6ebdc31061f8185c062d9b1
2016-06-29 16:18:05 -05:00
Matt Jordan 78960975f2 pjproject/patches/config_site: Increase the max number of ICE candidates
When negotiating ICE candidates with WebRTC capable endpoints, many
networks will result in a browser offering ICE candidates that exceeds
the default number of max candidates, 16. This patch bumps the max
candidates to 32, with the max checks at twice the number of candidates.
In practice, this has shown to be sufficient for browser/WebRTC
negotiation.

Change-Id: Ifd8da8b315f5ae14814d4ce20e10d2e6355020e5
2016-06-29 15:09:02 -05:00
zuul 999ce35bae Merge "codecs: Fix ABI incompatibility created by adding format_name to ast_codec" into 13 2016-06-29 14:38:11 -05:00
zuul 272c02d4ed Merge "siren: Add format attribute modules for Siren7 and Siren14." into 13 2016-06-29 11:24:25 -05:00
Joshua Colp 289d301c9f Merge "BuildSystem: Avoid obsolete warning with AC_TYPE_SIGNAL on autoconf." into 13 2016-06-29 10:17:30 -05:00
Joshua Colp c49b07aa63 Merge "BuildSystem: Fix a few issues hightlighted by gcc 6.x" into 13 2016-06-29 05:13:19 -05:00
George Joseph d07c8a0504 codecs: Fix ABI incompatibility created by adding format_name to ast_codec
Adding format_name even to the end of ast_codec caused issued with
binary codec modules because the pointer would be garbage in asterisk
when they registered.  So, the ast_codec structure was reverted and an
internal_ast_codec structure was created just for use in codec.c.  A new
internal-only API was also added (__ast_codec_register_with_format) so
that codec_builtin could register codecs with the format_name in a
separate parameter rather than in the ast_codec structure.

ASTERISK-26144 #close
Reported-by: Alexei Gradinari

Change-Id: I6df1b08f6a6ae089db23adfe1ebc8636330265ba
2016-06-28 13:38:28 -06:00
George Joseph f3d236ca7f BuildSystem: Fix a few issues hightlighted by gcc 6.x
gcc 6.1.1 caught a few more issues.
Made sure the unit tests still pass for the func_env and stdtime
issues.

ASTERISK-26157 #close

Change-Id: I6664d8f34a45bc1481d2a854481c7878b0c1cf8e
2016-06-28 13:56:38 -05:00
Matt Jordan 9d5b0934d9 configs/basic-pbx/modules.conf: Remove 'bad' modules
This patch removes the following modules:
 - pbx_functions: It never existed.
 - res_pjsip_log_forwarder: It no longer exists.
 - res_hep_pjsip: The base HEP module wasn't loaded, and most basic PBXs
                  aren't going to be installing HOMER
 - res_pjsip_phoneprov_provider: The basic res_phoneprov module isn't
                  loaded, and we aren't configured to make use of the
                  module

Change-Id: Id91f68cae7c9c8c3d370029fe1268cb51e4ff5a5
2016-06-28 10:33:30 -05:00
Joshua Colp 1dfc286418 siren: Add format attribute modules for Siren7 and Siren14.
This change removes hardcoded SDP parsing and generation for
Siren7 and Siren14 from chan_sip and moves it to format attribute
modules so it can also be used by chan_pjsip.

With this the fmtp lines for both are added with the bitrate
information.

ASTERISK-26021

Change-Id: Ibb004eda37a14c0a35ef0613f6237977fc800037
2016-06-23 10:03:01 -03:00
Alexander Traud 5f0a098243 BuildSystem: Avoid obsolete warning with AC_TYPE_SIGNAL on autoconf.
Removed the obsolete macro AC_TYPE_SIGNAL because Asterisk does not use K&R C
but requires ANSI C anyway.

ASTERISK-26046

Change-Id: I914c014385e1862102d90fe7650621def78db02e
2016-06-23 04:36:09 -05:00
zuul 73e2186195 Merge "res_fax: Fix reference leak in fax_v21_session_new." into 13 2016-06-22 21:50:19 -05:00
zuul 5a568df73d Merge "res_rtp_asterisk: Fix a self-comparison identified by gcc 6" into 13 2016-06-22 19:23:16 -05:00
zuul b044195e31 Merge "chan_unistim: Fix memcpy in get_to_address" into 13 2016-06-22 18:50:52 -05:00
Joshua Colp 5a73c115c8 Merge "BuildSystem: Avoid obsolete warning with AC_FUNC_SETVBUF_REVERSED on autoconf." into 13 2016-06-22 17:26:01 -05:00
zuul 43612a84c8 Merge "Fix Alembic upgrades." into 13 2016-06-22 15:22:44 -05:00
zuul 08a4699367 Merge "res_pjproject.c: Replace inlined DEBUG_ATLEAST() with macro." into 13 2016-06-22 15:16:18 -05:00
Corey Farrell 3d904659ec res_fax: Fix reference leak in fax_v21_session_new.
fax_v21_session_new created a session details object but only released
the allocation reference during error conditions.  fax_session_new adds
it's own reference to details if needed so the caller is always
responsible for cleaning it's own reference.

ASTERISK-26141 #close

Change-Id: Ie7fc52a83b6596ce9ce2d5a2bd9f3e204f48fc88
2016-06-22 16:09:09 -04:00
zuul dab39a6813 Merge "test_res_pjsip_scheduler: Add 'depends' on pjproject in MODULEINFO" into 13 2016-06-22 14:29:26 -05:00
George Joseph 48db4c2159 res_rtp_asterisk: Fix a self-comparison identified by gcc 6
gcc 6 caught a previously unidentified self-comparison in
ice_candidate_cmp.  Fixed it and re-ordered the predicates for better
short-circuiting.

ASTERISK-26140 #close

Change-Id: I3da713c568e24064430257b3502fbdafd35af7a7
2016-06-22 12:41:57 -06:00
George Joseph bc69b03316 chan_unistim: Fix memcpy in get_to_address
A code block only enabled when HAVE_PKTINFO is not defined (FreeBSD)
was using a pointer to a pointer as the destination of a memcpy and a
'&' instead of '*' in the sizeof.

ASTERISK-26138 #close

Change-Id: Id4927ff256c0e470bdf7bcfc025146a2f656e708
2016-06-22 12:28:58 -06:00
Mark Michelson 1b79e2deff Fix Alembic upgrades.
A non-existent constraint was being referenced in the upgrade script.
This patch corrects the problem by removing the reference.

This patch fixes another realtime problem as well. Our Alembic scripts
store booleans as yes or no values. However, Sorcery tries to insert
"true" or "false" instead. This patch updates Sorcery to use "yes" and
"no"

ASTERISK-26128 #close

Change-Id: I366dbbf91418a9cb160b3ca74b0e59b5ac284bec
2016-06-22 12:21:11 -05:00
Alexander Traud e30602587c BuildSystem: Avoid obsolete warning with AC_FUNC_SETVBUF_REVERSED on autoconf.
Removed the obsolete macro AC_FUNC_SETVBUF_REVERSED because Asterisk does not
support the platform SVR2 from the year 1987 anymore.

ASTERISK-26046

Change-Id: I28161b037feb2d29ab46ed20e785928460226c22
2016-06-22 10:58:25 -05:00
George Joseph 77da168e58 test_res_pjsip_scheduler: Add 'depends' on pjproject in MODULEINFO
Since the file was missing the depends on pjproject, it wasn't
picking up the pjproject related include path.  If there was no
system installed pjproject and pjproject-bundled was used, a compile
would fail because pjsip.h wasn't found.

ASTERISK-26139 #close

Change-Id: I2ee64a999051452bc198c4e2c168c70769cd3757
2016-06-22 09:51:14 -06:00
Alexei Gradinari b3c787d1dd res_pjsip: improve realtime performance #2
The patch removes updating all Endpoints' status on startup.
Instead, only non-qualified aors with static contact
and non-qualified non-expired contacts are retrieved from the realtime to
update the endpoint status to ONLINE.
The endpoint name was added to the contact object to simply find the endpoint
that created this contact.

The status of endpoints with qualified aors will be updated by 'qualify'
functions.

ASTERISK-26061 #close

Change-Id: Id324c1776fa55d3741e0c5457ecac0304cb1a0df
2016-06-22 10:08:37 -04:00
Torrey Searle dfcd466bf0 res_rtp_asterisk: fix memory leak in dtls
ensure that cert bios get freed after creating the fingerprint

ASTERISK-26129 #close

Change-Id: I44d23aea07dce80176ca1ff877c5ace9452ef451
2016-06-22 02:22:22 -05:00
zuul d155d82747 Merge "res_pjsip_pubsub: Address SEGV when attempting to terminate a subscription" into 13 2016-06-21 21:07:45 -05:00
Joshua Colp 6a2deb4d21 Merge "res_rtp_asterisk: Use latest DTLS version available by underlying platform." into 13 2016-06-21 19:49:20 -05:00
zuul 5280813846 Merge "res_pjsip_session: Handle race condition at shutdown with timer." into 13 2016-06-21 19:04:29 -05:00
Richard Mudgett c982da0641 res_pjproject.c: Replace inlined DEBUG_ATLEAST() with macro.
Change-Id: I8799fb0a347ad76e747dafd0eacf1ea1086b9a8c
2016-06-21 17:57:58 -05:00
Joshua Colp d19169396c Merge "PJSIP: provide transport type with received messages" into 13 2016-06-21 15:24:59 -05:00
George Joseph 6a568bcc66 res_pjsip_pubsub: Address SEGV when attempting to terminate a subscription
Occasionally under load we'll attempt to send a final NOTIFY on a
subscription that's already been terminated and a SEGV will occur
down in pjproject's evsub_destroy function.  This is a result of a
race condition between all the paths that can generate a notify
and/or destroy the underlying pjproject evsub object:

 * The client can send a SUBSCRIBE with Expires: 0.
 * The client can send a SUBSCRIBE/refresh.
 * The subscription timer can expire.
 * An extension state can change.
 * An MWI event can be generated.
 * The pjproject transaction timer (timer_b) can expire.

Normally when our pubsub_on_evsub_state is called with a terminate,
we push a task to the serializer and return at which point the dialog
is unlocked.  This is usually not a problem because the task runs
immediately and locks the dialog again.  When the system is heavily
loaded though, there may be a delay between the unlock and relock
during which another event may occur such as the subscription timer
or timer_b expiring, an extension state change, etc.  These may also
cause a terminate to be processed and if so, we could cause pjproject
to try to destroy the evsub structure twice.  There's no way for us to
tell that the evsub was already destroyed and the evsub's group lock
can't tolerate this and SEGVs.

The remedy is twofold.

 * A patch has been submitted to Teluu and added to the bundled
   pjproject which adds add/decrement operations on evsub's group lock.

 * In res_pjsip_pubsub:
   * configure.ac and pjproject-bundled's configure.m4 were updated
     to check for the new evsub group lock APIs.
   * We now add a reference to the evsub group lock when we create
     the subscription and remove the reference when we clean up the
     subscription.  This prevents evsub from being destroyed before
     we're done with it.
   * A state has been added to the subscription tree structure so
     termination progress can be tracked through the asyncronous tasks.
   * The pubsub_on_evsub_state callback has been split so it's not doing
     double duty.  It now only handles the final cleanup of the
     subscription tree.  pubsub_on_rx_refresh now handles both client
     refreshes and client terminates.  It was always being called for
     both anyway.
   * The serialized_on_server_timeout task was removed since
     serialized_pubsub_on_rx_refresh was almost identical.
   * Missing state checks and ao2_cleanups were added.
   * Some debug levels were adjusted to make seeing only off-nominal
     things at level 1 and nominal or progress things at level 2+.

ASTERISK-26099 #close
Reported-by: Ross Beer.

Change-Id: I779d11802cf672a51392e62a74a1216596075ba1
2016-06-21 12:47:36 -06:00
Alexander Traud ef97911a1c res_rtp_asterisk: Use latest DTLS version available by underlying platform.
Do not use DTLSv1_method() but DTLS_method() when available in OpenSSL of the
underlying platform. This change enables DTLS 1.2 since OpenSSL 1.0.2, for
WebRTC (DTLS-SRTP via SIP-over-WebSockets). This change enables AEAD-based
cipher-suites.

ASTERISK-26130 #close

Change-Id: I41f24448d6d2953e8bdb97c9f4a6bc8a8f055fd0
2016-06-21 13:24:56 -05:00
Scott Griepentrog 69d58a1e37 PJSIP: provide transport type with received messages
The receipt of a SIP MESSAGE may occur over any transport including TCP
and TLS. When the message is received, the original URI is added to the
message in the field PJSIP_RECVADDR, but this is insufficient to ensure
a reply message can reach the originating endpoint. This patch adds the
PJSIP_TRANSPORT field populated with the transport type.

ASTERISK-26132 #close

Change-Id: I28c4b1e40d573a056c81deb213ecf53e968f725e
2016-06-21 10:56:12 -05:00
Alexander Traud cbfa9f771e BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf.
Some configure scripts used both AC_HELP_STRING and its replacement
AS_HELP_STRING. For consistency and to avoid obsolete warnings, those were
changed to AS_HELP_STRING.

ASTERISK-26046

Change-Id: I8aad4fd2bdee40aa2a31ce3339a1eb33ff4f5b0f
2016-06-21 08:14:19 -05:00
zuul b0e71c6571 Merge "fix: memory leaks, resource leaks, out of bounds and bugs" into 13 2016-06-21 07:02:17 -05:00
zuul 9856b4afe0 Merge "app_voicemail.c: Fix IMAP compile error." into 13 2016-06-20 15:00:53 -05:00
Joshua Colp ba0d9e7f7a res_pjsip_session: Handle race condition at shutdown with timer.
When shutting down res_pjsip_session will get unloaded before res_pjsip.
The act of unloading unregisters all the PJSIP services and sets
their module IDs to -1. In some cases it is possible for a timer to
occur after this happens which calls into res_pjsip_session. The
res_pjsip_session module can then try to get the session from the
INVITE session using the module ID. Since the module ID is now -1
this fails.

This change stores a copy of the module ID and uses it for the timer
callback scenario. If the module ID is -1 the callback immediately
returns but if the module ID is valid then it continues as normal.

This works as the original ID of the module is guaranteed to still
be valid when used with the INVITE session.

ASTERISK-26127 #close

Change-Id: I88df72525c4e9ef9f19c13aedddd3ac4a335c573
2016-06-20 16:21:49 -03:00
Richard Mudgett c1512f4108 app_voicemail.c: Fix IMAP compile error.
Fix compile error introduced by the patch for
ASTERISK-26045

Change-Id: I5b02876266f2824f4cec2b54d6ff4db5de5778d3
2016-06-20 12:17:08 -05:00
Alexei Gradinari 5134a8043a fix: memory leaks, resource leaks, out of bounds and bugs
ASTERISK-26119 #close

Change-Id: Iecbf7d0f360a021147344c4e83ab242fd1e7512c
2016-06-20 13:06:00 -04:00
Joshua Colp fe8aab6959 Merge "http: leverage 'bindaddr' for TLS in http.conf" into 13 2016-06-20 12:03:45 -05:00
zuul db91fb74db Merge "ARI: Ensure announcer channels are destroyed." into 13 2016-06-20 11:39:45 -05:00
Mark Michelson cfebe3b94a ARI: Ensure announcer channels are destroyed.
Announcer channels were not being destroyed because the
stasis_app_control structure that referenced them was not being
destroyed. The control structure was not being destroyed because it was
not being unlinked from its container. It was not being unlinked from
its container because the after bridge callback for the announcer
channel was not being run. The after bridge callback was not being run
because the after bridge datastore was not being removed from the
channel on destruction. The channel was not being destroyed because the
hangup that used to destroy the channel was now only reducing the
reference count to one. The reference count of the channel was only
being reduced to one because the stasis_app_control structure was
holding the final reference...

The control structure used to not keep a reference to the channel, so
that loop described above did not happen.

The solution is to manually remove the control structure from its
container when the playback on a bridge is complete.

ASTERISK-26083 #close
Reported by Joshua Colp

Change-Id: I0ddc0f64484ea0016245800b409b567dfe85cfb4
2016-06-20 09:33:45 -05:00
Alexander Traud 76516bd79d http: leverage 'bindaddr' for TLS in http.conf
The internal HTTP/WebSocket server supports both TCP and TLS, which can be
activated separately via the file http.conf. The source code intends to re-use
the TCP parameter 'bindaddr' for TLS, even if 'tlsbindaddr' is not specified
explicitly. This did not work because of a typo. This change resolves this typo.

ASTERISK-26126 #close

Change-Id: I5efb0409ae12044dfb3495b6b97b6d40a8c9c51f
2016-06-20 08:10:10 -05:00
zuul 4d52b4c3e5 Merge "chan_sip: bigger buffers for headers, better failure mode" into 13 2016-06-16 17:21:51 -05:00
Vasil Kolev 89cc86fc38 chan_sip: bigger buffers for headers, better failure mode
Currently chan_sip can give weird messages if the contacts don't
fit in the From: or To: headers. This fix changes the from,to and
invite variables to use ast_str, allocates and deallocates them and
resizes them if needed.

ASTERISK-26069 #close

Change-Id: I1b68fcbddca6f6cc7d7a92fe1cb0d5430282b2b3
2016-06-16 14:47:08 -05:00
Richard Mudgett d53a36ff33 res_pjsip_transport_management.c: Misc cleanups to survive shutdown.
* In unload_module(), reordered destroying things to minimize the window
that the global transports container could be used by other threads on
shutdown.  When shutting down you need to stop things in the opposite
order of creation.

* Put the global transports container into an AO2_GLOBAL_OBJ_STATIC to
eliminate the crash potential by other threads using the container on
shutdown.

* Made struct monitored_transport.sip_received not use
ast_atomic_fetchadd_int() since it is used as a boolean value that is only
set TRUE.  It was previously incremented for every received SIP message
and could theoretically overflow.

* In monitored_transport_state_callback(), allocated the monitored
transport object without a lock since the lock was unused.

* In keepalive_global_loaded(), removed releasing the transports container
if the keepalive_thread could not be started.  I set it up to be tried
again if the user reloads the configuration.

Change-Id: I8d12d16ef564290fa6d25a32334bb5ce8fdf87ff
2016-06-15 14:39:51 -05:00
Richard Mudgett 03953d8034 res_pjsip.c: Add check that timer actually got scheduled.
Change-Id: Iabaa2e5dccf0762c258101ea0eb1487cf6959ad1
2016-06-14 16:25:07 -05:00
zuul 97a8576d16 Merge "res_pjsip_session.c: Reorganize ast_sip_session_terminate()." into 13 2016-06-14 13:36:44 -05:00
Richard Mudgett 32ab98116e res_rtp_multicast.c: Fix warning message typo.
Change-Id: Ic9928208b9957e09866abe3d9649030942ec52b3
2016-06-13 13:33:53 -05:00
Joshua Colp e80354caab Merge "chan_rtp: Backport changes from master." into 13 2016-06-13 11:59:31 -05:00
Joshua Colp 9c2664d624 Merge "chan_rtp.c: Copy file from chan_multicast_rtp.c" into 13 2016-06-13 11:59:19 -05:00
Richard Mudgett 0429c53368 res_pjsip_session.c: Reorganize ast_sip_session_terminate().
Change-Id: I68a2128bcba4830985d2d441e70dfd1ac5bd712b
2016-06-10 17:35:29 -05:00
Richard Mudgett 5823f279f3 chan_rtp: Backport changes from master.
* Deprecate chan_multicast_rtp.

Change-Id: Ib5a45e58c75ee8abd0b4f9575379b5321feb853e
2016-06-10 17:24:00 -05:00
Richard Mudgett dde58df318 chan_rtp.c: Copy file from chan_multicast_rtp.c
Change-Id: I1119b53f2152ab1cbec74b5be7ea44844dbda8ef
2016-06-10 16:20:45 -05:00
Alexander Traud ca38a3cbb4 core: Not the configured but granted number of possible file descriptors.
With CLI "core show settings", simply the parameter maxfiles of the file
asterisk.conf was shown. If that parameter was not set, nothing was displayed
although the environment might have set a default number itself. Or if maxfiles
were not granted (completely), still maxfiles was shown. Now, the maximum number
of possible file descriptors in the environment is shown.

ASTERISK-26097

Change-Id: I2df5c58863b5007b34b77adbe28b885dfcdf7e0b
2016-06-10 14:07:03 -05:00
Joshua Colp c2f68787a3 Merge "cel: Ensure only one dial status per channel exists." into 13 2016-06-10 05:09:18 -05:00
Joshua Colp ff018e28a0 Merge "res_pjsip_registrar.c: Eliminate rx REGISTER request race condition." into 13 2016-06-09 20:25:22 -05:00
Joshua Colp ecc186a4cc Merge "stasis: Add setting subscription congestion levels." into 13 2016-06-09 20:25:15 -05:00
Joshua Colp e842a99e7c Merge "sorcery: Add setting object type congestion levels." into 13 2016-06-09 20:25:09 -05:00
zuul 1ac47c5aae Merge "taskprocessors: Implement high/low water mark alerts." into 13 2016-06-09 20:12:30 -05:00
zuul 2204a6e6f1 Merge "res_pjsip_session: Use distributor serializer for incoming calls." into 13 2016-06-09 20:12:28 -05:00
zuul 935d53fa08 Merge "res_pjsip_pubsub.c: Recreate subscriptions using distributor serializer." into 13 2016-06-09 19:41:20 -05:00
zuul 51ff79bdeb Merge "res_pjsip_pubsub.c: Use distributor serializer for incoming subscriptions." into 13 2016-06-09 19:41:13 -05:00
zuul 7e2dbcd771 Merge "pjsip_distributor.c: Consistently pick a serializer for messages." into 13 2016-06-09 18:48:04 -05:00
zuul 54be8fd149 Merge "pjsip_distributor.c: Ignore messages until fully booted." into 13 2016-06-09 18:47:07 -05:00
Joshua Colp caf6cccc5c cel: Ensure only one dial status per channel exists.
CEL wrongly assumed that a channel would only have a single dial
event on it. This is incorrect. Particularly in a queue each
call attempt to a member will result in a dial event, adding
a new dial status in CEL without removing the old one. This
would cause the container to grow with only one dial status
being removed when the channel went away. The other dial status
entries would remain leaking memory.

This change fixes the memory leak by ensuring that only one dial
status will only ever exist for each channel.

The behavior during the scenario where multiple events are received
has also been improved. For failure cases the first failure will
be the dial status. If an answer dial status is received, though,
it will take priority and the dial status for the channel will be
answer.

Memory usage has also been decreased by storing the minimal
amount of information and the code has been cleaned up slightly.

ASTERISK-25262 #close

Change-Id: I5944eb923db17b6a0faa7317ff6abc9307c009fe
2016-06-09 16:45:48 -03:00
zuul 8438315428 Merge "chan_pjsip: Lock channel when checking for RTP changes." into 13 2016-06-09 13:54:01 -05:00
Mark Michelson 715ef071a1 chan_pjsip: Lock channel when checking for RTP changes.
bridge_native_rtp can call into an RTP-capable channel driver in order
for the driver to update information about who the channel is
communicating with. For SIP channel drivers, this means deactivating
RTCP and sending a reinvite so that the endpoints can communicate
directly.

bridge_native_rtp does the right thing and has the channel locked when
calling into the channel driver. chan_pjsip can't alter session
properties in this thread, though. chan_pjsip queues a task on the
session serializer in order to update properties there.

The problem is that this queued task was not locking the channel. This
meant that the queued task could attempt to deactivate RTCP at the same
time that the channel thread was attempting to process an incoming RTCP
packet. This could lead to a crash.

This patch fixes the issue by locking the channel in the queued task
when altering RTP properties.

ASTERISK-26092 #close
Reported by Niklas Larsson

Change-Id: I3464e226a3c41f6b915f97891e07fa1599e2a159
2016-06-09 10:37:53 -05:00
George Joseph a99ddc6a0d build: Fix ast_sockaddr initialization to be more portable
A change to glibc 2.22 changed the order of the sockadddr_storage
members which caused the places where we do an initialization of
ast_sockaddr with '{ { 0, 0, } }' to fail compilation.  Those
initializers (which we shouldn't have been using anyway) have been
replaced with memsets.

Change-Id: Idd1b3b320903d8771bfe221f0b015685de628fa4
2016-06-09 09:50:00 -05:00
zuul bd3b6e9f19 Merge "astfd: Not maximum size of a single file but maximum file descriptors." into 13 2016-06-09 08:21:35 -05:00
zuul c09af61c76 Merge "BuildSystem: Avoid 'ar cru' and use 'ar cr' instead." into 13 2016-06-08 22:50:39 -05:00
Joshua Colp 9d8a174092 Merge "res_hep_{pjsip|rtcp}: Decline module loads if res_hep had not loaded" into 13 2016-06-08 19:03:05 -05:00
Joshua Colp f834852137 Merge "Fix #include poll.h and sys/cdefs.h" into 13 2016-06-08 16:18:34 -05:00
Matt Jordan eabb398d71 res_hep_{pjsip|rtcp}: Decline module loads if res_hep had not loaded
A crash can occur in res_hep_pjsip or res_hep_rtcp if res_hep has not
loaded and does not have a configuration file. Previously when this
occurred, checks were put in to see if the configuration was loaded
successfully. While this is a good idea - and has been added to the
offending function in res_hep - the reality is res_hep_pjsip and
res_hep_rtcp have no business running if res_hep isn't also running.

As such, this patch also adds a function to res_hep that returns whether
or not it successfully loaded. Oddly enough, ast_module_check returns
"everything is peachy" even if a module declined its load - so it cannot
be solely relied on. res_hep_pjsip and res_hep_rtcp now also check this
function to see if they should continue to load; if it fails, they
decline their load as well.

ASTERISK-26096 #close

Change-Id: I007e535fcc2e51c2ca48534f48c5fc2ac38935ea
2016-06-08 12:26:29 -05:00
Alexander Traud 0d84421f93 astfd: Not maximum size of a single file but maximum file descriptors.
With menuselect "DEBUG_FD_LEAKS" and CLI "core show fd", the maximum size of a
single file was shown. Now, the maximum number of possible file descriptors is
shown.

ASTERISK-26097

Change-Id: Icf98d145774b38cac144ca76d19eaef42ce659a3
2016-06-08 13:00:23 +02:00
zuul c9b873add8 Merge "ari/resource_channels: Add 'formats' to channel create/originate" into 13 2016-06-08 00:11:29 -05:00
Timo Teräs 9c5a0b814b Fix #include poll.h and sys/cdefs.h
POSIX defines poll.h, sys/poll.h should not be used at is c-library
internal header which may or may not exist. Notable in musl it
generates warning of being incorrect. And add explict include of
sys/cdefs.h where needed.

Change-Id: I142930df53fe7585a06b854b6faddc5301e024be
2016-06-07 19:01:26 -05:00
Richard Mudgett 9c35f34301 res_pjsip_registrar.c: Eliminate rx REGISTER request race condition.
This patch fixes a race condition processing received REGISTER requests
and their retransmissions caused by REGISTER requests being processed by
two threads.  The "sip_transaction Unable to register REGISTER transaction
(key exists)" message is a notable symptom of this issue.

This issue was more likely to happen before the pjsip/distributor
serializers were created.  Instead of steps one and two below placing the
REGISTER messages into the same pjsip/distributor they were placed in
random pjsip/default serializers.

1) REGISTER requests come in and get placed on the pjsip/distributor
serializer.

2) Before the first request is processed a retransmission comes in and is
placed on the same pjsip/distributor serializer.

3) The first request goes up the pjsip stack and is then shunted off to
the pjsip/aor/<aor> serializer.

4) Before the first request is completed processing in the pjsip/aor/<aor>
serializer, the second request goes up the pjsip stack and is also shunted
off to the pjsip/aor/<aor> serializer.

5) The first request completes processing and sends out its response.

6) The second request completes processing and tries to send out its
response but pjlib complains that the REGISTER transaction key already
exists.

7) Sadness ensues.

* The race is eliminated by removing the pjsip/aor/<aor> serializer and
continuing the processing in the pjsip/distributor serializer.  Now any
retransmissions queued in the pjsip/distributor serializer will be
processed after the first message is completely processed.

ASTERISK-26088 #close
Reported by:  Richard Mudgett

Change-Id: I842d714346088bf717ea27437f1dd85bff0bab5a
2016-06-07 18:57:36 -05:00
Richard Mudgett 557333ea4c stasis: Add setting subscription congestion levels.
Stasis subscriptions and message routers create taskprocessors to process
the event messages.  API calls are needed to be able to set the congestion
levels of these taskprocessors for selected subscriptions and message
routers.

* Updated CDR, CEL, and manager's stasis subscription congestion levels
based upon stress testing.  Increased the congestion levels to reduce the
potential for bursty call setup/teardown activity from triggering the
taskprocessor overload alert.  CDRs in particular need an extra high
congestion level because they can take awhile to process the stasis
messages.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: Id0a716394b4eee746dd158acc63d703902450244
2016-06-07 18:57:36 -05:00
Richard Mudgett 110d772467 sorcery: Add setting object type congestion levels.
Sorcery creates taskprocessors for object types to process object observer
callbacks.  An API call is needed to be able to set the congestion levels
of these taskprocessors for selected object types.

* Updated PJSIP's contact and contact_status sorcery object type observer
default congestion levels based upon stress testing.  Increased the
congestion levels to reduce the potential for bursty register/unregister
and subscribe/unsubscribe activity from triggering the taskprocessor
overload alert.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I4542e83b556f0714009bfeff89505c801f1218c6
2016-06-07 18:57:36 -05:00
Richard Mudgett 610eee2a36 taskprocessors: Implement high/low water mark alerts.
When taskprocessors get backed up, there is a good chance that we are
being overloaded and need to defer adding new work to the system.

* Implemented a high/low water alert mechanism for modules to check if the
system is being overloaded and take appropriate action.  When a
taskprocessor is created it has default congestion levels set.  A
taskprocessor can later have those congestion levels altered for specific
needs if stress testing shows that the taskprocessor is a symptom of
overloading or needs to handle bursty activity without triggering an
overload alert.

* Add CLI "core show taskprocessor" low/high water columns.

* Fixed __allocate_taskprocessor() to not use RAII_VAR().  RAII_VAR() was
never a good thing to use when creating a taskprocessor because of the
nature of how its references needed to be cleaned up on a partial
creation.

* Made res_pjsip's distributor check if the taskprocessor overload alert
is active before placing a message representing brand new work onto a
distributor serializer.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I182f1be603529cd665958661c4c05ff9901825fa
2016-06-07 18:57:36 -05:00
Richard Mudgett 26e3492246 res_pjsip_session: Use distributor serializer for incoming calls.
We must continue using the serializer that the original INVITE came in on
for the dialog.  There may be retransmissions already enqueued in the
original serializer that can result in reentrancy and message sequencing
problems.

Outgoing call legs create the pjsip/outsess/<endpoint> serializers for
their dialogs.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I24d7948749c582b8045d5389ba3f6588508adbbc
2016-06-07 13:16:19 -05:00
Richard Mudgett ceb1007ed7 res_pjsip_pubsub.c: Recreate subscriptions using distributor serializer.
* Resolves potential reentrancy problems if system restarted in the middle
of subscription message transactions.

* Fixes memory leak recreating persistent subscriptions when the
subscription resource tree could not be created.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I71e34d7ae8ed35a694f1030e820e2548c48697be
2016-06-07 13:16:19 -05:00
Richard Mudgett 27bafc3a8b res_pjsip_pubsub.c: Use distributor serializer for incoming subscriptions.
We must continue using the serializer that the original SUBSCRIBE came in
on for the dialog.  There may be retransmissions already enqueued in the
original serializer that can result in reentrancy and message sequencing
problems.  The "sip_transaction Unable to register SUBSCRIBE transaction
(key exists)" message is a notable symptom of this issue.

Outgoing subscriptions still create the pjsip/pubsub/<endpoint>
serializers for their dialogs.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I18b00bb74a56747b2c8c29543a82440b110bf0b0
2016-06-07 13:16:19 -05:00
Richard Mudgett 16b08444da pjsip_distributor.c: Consistently pick a serializer for messages.
Incoming messages that are not part of a dialog or a recognized response
to one of our requests need to be sent to a consistent serializer.  Under
load we may be queueing retransmissions before we can process the original
message.  We don't need to throw these messages onto random serializers
and cause reentrancy and message sequencing problems.

* Created a pool of pjsip/distributor serializers that get picked by
hashing the call-id and remote tag strings of the received messages.

* Made ast_sip_destroy_distributor() destroy items in the reverse order of
creation.

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I2ce769389fc060d9f379977f559026fbcb632407
2016-06-07 13:16:19 -05:00
Richard Mudgett 993b769524 pjsip_distributor.c: Ignore messages until fully booted.
We should not be processing any incoming messages until we are fully
booted.  We may not have dialplan or other needed configuration loaded
yet.

ASTERISK-26089 #close
Reported by: Scott Griepentrog

ASTERISK-26088
Reported by:  Richard Mudgett

Change-Id: I584aefb4f34b885a8927e1f13a2c64babd606264
2016-06-07 13:16:18 -05:00
zuul ae8f6e996e Merge "res_odbc: Implement a connection pool." into 13 2016-06-07 12:09:19 -05:00
Joshua Colp 321a9b128f res_odbc: Implement a connection pool.
Testing has shown that our usage of UnixODBC is problematic
due to bugs within UnixODBC itself as well as the heavy weight
cost of connecting and disconnecting database connections, even
when pooling is enabled.

For users of UnixODBC 2.3.1 and earlier crashes would occur due
to insufficient protection of the disconnect operation. This was
fixed in UnixODBC 2.3.2 and above.

For users of UnixODBC 2.3.3 and higher a slow-down would occur
under heavy database use due to repeated connection establishment.
A regression is present where on each connection the database
configuration is cached again, with the cache growing out of
control.

The connection pool implementation present in this change helps
to mitigate these issues by reducing how much we connect and
disconnect database connections. We also solve the issue of
crashes under UnixODBC 2.3.1 by defaulting the maximum number of
connections to 1, returning us to the previous working behavior.
For users who may have a fixed version the maximum concurrent
connection limit can be increased helping with performance.

The connection pool works by keeping a list of active connections.
If the connection limit has not been reached a new connection is
established. If the connection limit has been reached then the
request waits until a connection becomes available before
continuing.

ASTERISK-26074 #close
ASTERISK-26054 #close

Change-Id: I6774bf4bac49a0b30242c76a09c403d2e856ecff
2016-06-07 11:58:03 -03:00
Alexander Traud c6ee4a0f44 res_srtp: Instead of libSRTP use OpenSSL as random source.
Since libSRTP 1.5, its Random Number Generator (RNG) is not maintained anymore.
Therefore, the symbol RAND_bytes is used instead of crypto_get_random.

ASTERISK-24436 #close

Change-Id: Iea0bae4d4e3c9aa0926ea442b6484b5159789d96
2016-06-07 05:48:02 -05:00
Alexander Traud d38b8e6399 BuildSystem: Avoid 'ar cru' and use 'ar cr' instead.
In several internal library projects, the files are archived with the help of
'ar cr'. Only the projects editline and the Objective Open H.323 stack
implementation in C (ooh323c) use 'ar cru' instead. Recently, some platforms
changed the default parameters of AR which creates "/usr/bin/ar: `u' modifier
ignored since `D' is the default (see `U')". For consistency and to avoid this
message all projects use 'ar cr' now.

ASTERISK-26091 #close

Change-Id: I710a9b1c01c1b5a1931a646098c044c8161ead40
2016-06-07 02:34:44 -05:00
zuul 93237209eb Merge "core/dial: New channel variable FORWARDERNAME" into 13 2016-06-06 07:27:30 -05:00
George Joseph c27c232057 ari/resource_channels: Add 'formats' to channel create/originate
If you create a local channel and don't specify an originator channel
to take capabilities from, we automatically add all audio formats to
the new channel's capabilities. When we try to make the channel
compatible with another, the "best format" functions pick the best
format available, which in this case will be slin192.  While this is
great for preserving quality, it's the worst for performance and
overkill for the vast majority of applications.

In the absense of any other information, adding all formats is the
correct thing to do and it's not always possible to supply an
originator so a new parameter 'formats' has been added to the channel
create/originate functions. It's just a comma separated list of formats
to make availalble for the channel. Example: "ulaw,slin,slin16".
'formats' and 'originator' are mutually exclusive.

To facilitate determination of format names, the format name has been
added to "core show codecs".

ASTERISK-26070 #close

Change-Id: I091b23ecd41c1b4128d85028209772ee139f604b
2016-06-03 17:31:39 -05:00
Joshua Colp cda3385409 alembic: Fix migration.
The 81b01a191a46_pjsip_add_contact_reg_server.py script was attempting
to use UniqueConstraint and failing. It was not imported and after
importing it also continued to fail.

I've changed the script to use the explicit name of the constraint
instead.

Change-Id: I2438b0be90b7ce583b47dd27983c0c1a02cea5b9
2016-06-02 06:59:06 -03:00
Joshua Colp 4665aa89e3 Merge "pjsip_distributor.c: Use correct rdata info access method (Part 2)." into 13 2016-06-01 19:40:06 -05:00
zuul 49b1be8952 Merge "logging,cdr,cel: Fix stringfield memory leak." into 13 2016-06-01 16:11:33 -05:00
zuul c4771ffb7c Merge "pjproject_bundled: Move to pjproject 2.5" into 13 2016-06-01 15:12:19 -05:00
Richard Mudgett e2132dd358 logging,cdr,cel: Fix stringfield memory leak.
The stringfields refactor to allow adding stringfields to the end of a
structure (f6f4cf459f) exposed some
incomplete cleanup code by some stringfield users.

The most noticeable leaker is the logging system where there is a leak for
every log message generated.

ASTERISK-26078 #close
Reported by:  Etienne Lessard
Patches:
      jira_asterisk_26078_v13.patch (license #5621) patch uploaded
      by Richard Mudgett

Change-Id: If6a08b31336b492c3de6f9dfd07c447f8d5a8782
2016-06-01 13:57:53 -05:00
Alexei Gradinari 2de58c6d01 core/dial: New channel variable FORWARDERNAME
Added a new channel variable FORWARDERNAME which indicates which
channel was responsible for a forwarding requests received on dial attempt.

Fixed a bug in the app_queue: FORWARD_CONTEXT is not used.

ASTERISK-26059 #close

Change-Id: I34e93e8c1b5e17776a77b319703c48c8ca48e7b2
2016-05-31 18:07:40 -04:00
Richard Mudgett b2ce0e354b pjsip_distributor.c: Use correct rdata info access method (Part 2).
The pjproject doxygen for rdata->msg_info.info says to call
pjsip_rx_data_get_info() instead of accessing the struct member directly.
You need to call the function mostly because the function will generate
the struct member value if it is not already setup.

Change-Id: I4d519385a577f3e9d9193a88125e493cf17fa799
2016-05-31 13:34:26 -05:00
zuul acb614d5ae Merge "res_pjsip_mwi_body_generator: Re-order the body items" into 13 2016-05-31 12:39:45 -05:00
Joshua Colp e3c9ad6382 Merge "res_pjsip: add "via_addr", "via_port", "call_id" to contact" into 13 2016-05-31 07:41:43 -05:00
zuul eff382c72b Merge "res_pjsip: Add clarifying documentation to PJSIP_HEADER help text" into 13 2016-05-31 07:17:16 -05:00
zuul 856d6e34c3 Merge "res_pjsip: chatty verbose messages" into 13 2016-05-31 06:18:51 -05:00
George Joseph fe305ccf01 res_pjsip_mwi_body_generator: Re-order the body items
Re-ordered the body items so Message-Account is second.

Messages-Waiting: no
Message-Account: sip:1571@<IP Removed>:5060
Voice-Message: 0/0 (0/0)

ASTERISK-26065 #close
Reported-by: Ross Beer

Change-Id: If5d35a64656eac98c2dd5e490cc0b2807bed80c3
2016-05-30 18:27:35 -06:00
George Joseph e8abfdcdc5 pjproject_bundled: Move to pjproject 2.5
Although all the patches we had against 2.4.5 were applied by Teluu,
a new bug was introduced preventing re-use of tcp and tls transports
This patch removes all the previous patches against 2.4.5, updates
the version to 2.5, and adds a new patch to correct the transport
re-use problem.

Change-Id: I0dc6c438c3910f7887418a5832ca186aea23d068
2016-05-30 17:15:40 -06:00
Rusty Newton 37d039fdf3 res_pjsip: Add clarifying documentation to PJSIP_HEADER help text
Added notes about when you can read or write headers. Specifically
about being able to read on the inbound channel and write on an
outbound channel.

ASTERISK-26063 #close
Reported by: Private Name
Tested by: Rusty Newton

Change-Id: Ibeb64af17d1f6451028b3c29855a3f151a01d8c5
2016-05-27 12:42:40 -05:00
Joshua Colp dc230f3b8f Merge "app_voicemail: fix bugs, imap mm_status log change to debug" into 13 2016-05-26 17:30:57 -05:00
Richard Mudgett 03d5b3ce5c pjsip_distributor.c: Use correct rdata info access method.
The pjproject doxygen for rdata->msg_info.info says to call
pjsip_rx_data_get_info() instead of accessing the struct member directly.
You need to call the function mostly because the function will generate
the struct member value if it is not already setup.

Change-Id: Iafe8b01242b7deb0ebfdc36685e21374a43936d2
2016-05-26 12:25:37 -05:00
Alexei Gradinari 859bbec09b app_voicemail: fix bugs, imap mm_status log change to debug
Fixed some bugs:
- create dirpath when save downloading message from IMAP storage.
- create IMAP folder if not exists when saving to IMAP storage
- check if file successfully opened before write to it
- some IMAP checks
- remove non-standard flag 'Unseen'
etc

Change to debug IMAP mm_status log instead of verbose.

Remove unused X-Asterisk-VM-Caller-channel message header
for security reason. The clients should not know name of peer/endpoint.

ASTERISK-26045 #close

Change-Id: I7f83d88b69b36934e2539c114b9fb612deed971b
2016-05-26 10:20:57 -04:00
Alexei Gradinari 230686f4ec res_pjsip: add "via_addr", "via_port", "call_id" to contact
As res_pjsip_nat rewrites contact's address, only the last Via header
can contain the source address of registered endpoint.
Also Call-Id header may contain the source address of registered
endpoint.

Added "via_addr", "via_port", "call_id" to contact.
Added new fields ViaAddress, CallID to AMI event ContactStatus.

ASTERISK-26011

Change-Id: I36bcc0bf422b3e0623680152d80486aeafe4c576
2016-05-25 10:56:14 -04:00
Alexei Gradinari 04c12561a7 res_pjsip: chatty verbose messages
There are a lot of verbose messages about Endpoint and Contact status
changes if there are many dynamic endpoints.
The patch sets verbose level 2 for Endpoint status changes
and verbose level 3 for Contact status changes.

ASTERISK-26055 #close

Change-Id: Ie64e261ddbbc41bfff0f0190241152cc123fe6d7
2016-05-25 09:38:01 -05:00
Corey Farrell a42bea3314 threadpool: Fix potential data race.
worker_start checked for ZOMBIE status without holding a lock.  All
other read/write of worker status are performed with a lock, so this
check should do the same.

ASTERISK-25777 #close

Change-Id: I5e33685a5c26fdb300851989a3b82be8c4e03781
2016-05-24 16:30:18 -04:00
zuul 87fe6b1622 Merge "func_odbc: single database connection should be optional" into 13 2016-05-24 09:00:20 -05:00
zuul 06c6478ad8 Merge "Makefile: remove OSARCH check for init install" into 13 2016-05-23 16:16:14 -05:00
zuul 373e68539b Merge "func_curl: Don't trim response text on non-ASCII characters" into 13 2016-05-23 09:27:29 -05:00
zuul 80d1fc859e Merge "parking.h: Update ast_parking_park_call() doxygen to reality." into 13 2016-05-23 06:39:12 -05:00
Tzafrir Cohen a32616d60c Makefile: remove OSARCH check for init install
There are more specific checks for the platform.

Specifically this allows installing OS/X init scripts.

ASTERISK-26038 #close

Change-Id: If08933621145b10362a0cfe73c079301d9c13f50
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-21 14:55:05 -05:00
Ivan Poddubny 9ddaab789e func_curl: Don't trim response text on non-ASCII characters
The characters 0x80-0xFF were trimmed as well as 0x00-0x20 because of
a signed comparison.

ASTERISK-25669 #close
Reported by: Jesper
patches:
  strings.curl.trim.patch submitted by Jesper (License 5518)

Change-Id: Ia51e169f24e3252a7ebbaab3728630138ec6f60a
2016-05-21 08:53:43 -05:00
Richard Mudgett 9453d1187a parking.h: Update ast_parking_park_call() doxygen to reality.
ASTERISK-26029

Change-Id: I2db14d102a48d3224010e6d1c69e856373cc1260
2016-05-20 17:55:40 -05:00
Alexei Gradinari cd89501d48 func_odbc: single database connection should be optional
func_odbc was changed in Asterisk 13.9.0
to make func_odbc use a single database connection per DSN
because of reported bug ASTERISK-25938
with MySQL/MariaDB LAST_INSERT_ID().

This is drawback in performance when func_odbc is used
very often in dialplan.

Single database connection should be optional.

ASTERISK-26010

Change-Id: I57d990616c957dabf7597dea5d5c3148f459dfb6
2016-05-20 13:25:45 -04:00
Mark Michelson c0b190dd9a res_pjsip: Match dialogs on responses better.
When receiving an incoming response to a dialog-starting INVITE, we were
not matching the response to the INVITE dialog. Since we had not
recorded the to-tag to the dialog structure, the PJSIP-provided method
to find the dialog did not match.

Most of the time, this was not a problem, because there is a fall-back
that makes the response get routed to the same serializer that the
request was sent on. However, in cases where an asynchronous DNS lookup
occurs in the PJSIP core, the thread that sends the INVITE is not
actually a threadpool serializer thread. This means we are unable to
record a serializer to handle the incoming response.

Now, imagine what happens when an INVITE is sent on a non-serialized
thread, and an error response (such as a 486) arrives. The 486 ends up
getting put on some random threadpool thread. Eventually, a hangup task
gets queued on the INVITE dialog serializer. Since the 486 is being
handled on a different thread, the hangup task can execute at the same
time that the 486 is being handled. The hangup task assumes that it is
the sole owner of the INVITE session and channel, so it ends up
potentially freeing the channel and NULLing the session's channel
pointer. The thread handling the 486 can crash as a result.

This change has the incoming response match the INVITE transaction, and
then get the dialog from that transaction. It's the same method we had
been using for matching incoming CANCEL requests. By doing this, we get
the INVITE dialog and can ensure that the 486 response ends up being
handled by the same thread as the hangup, ensuring that the hangup runs
after the 486 has been completely handled.

ASTERISK-25941 #close
Reported by Javier Riveros

Change-Id: I0d4cc5d07e2a8d03e9db704d34bdef2ba60794a0
2016-05-20 09:39:10 -05:00
Joshua Colp ddcf983e39 res_sorcery_astdb: Filter fields to only the registered ones.
This change introduces the same filtering that is done in res_sorcery_realtime
to the res_sorcery_astdb module. This allows persisted sorcery objects
that may contain unknown fields to still be read in from the AstDB
and used. This is particularly useful when switching between different
versions of Asterisk that may have introduced additional fields.

ASTERISK-26014 #close

Change-Id: Ib655130485a3ccfd635b7ed5546010ca14690fb2
2016-05-19 19:47:21 -03:00
Joshua Colp 3296d2d194 Merge "res_pjsip_empty_info: Respond to empty SIP INFO packets" into 13 2016-05-19 15:12:02 -05:00
Joshua Colp f09f923514 Merge "res_pjsip_outbound_publishing: After unloading the library won't load again" into 13 2016-05-19 13:33:08 -05:00
Joshua Colp 4e4a991d90 Merge "res_pjsip: Endpoint IP Access Controls" into 13 2016-05-19 11:54:03 -05:00
snuffy 39fedfa423 res_pjsip_empty_info: Respond to empty SIP INFO packets
Some SBCs require responses to empty SIP INFO packets
after establishing call via INVITE, if not responded to
they may drop your call after unspecified timeout of X minutes.

They are identified by having no Content-Type, check for this
and respond with 200 - OK message.

ASTERISK-24986 #close
Reported-by: Ilya Trikoz, Federico Santulli

Change-Id: Ib27e4f07151e5aef28fa587e4ead36c5b87c43e0
2016-05-19 09:06:30 -03:00
Joshua Colp 7d986ff3f6 Merge "res_pjsip_outbound_publish: Ref leak in off nominal callback paths" into 13 2016-05-19 05:56:31 -05:00
Joshua Colp 1b7ba9bb00 Merge "udptl: Don't eat sequence numbers until OK is received" into 13 2016-05-19 05:33:35 -05:00
Joshua Colp 4a04a5a3ec Merge "res/res_hep_pjsip: Fix reported local IP address when bound to 'any'" into 13 2016-05-19 05:18:32 -05:00
Joshua Colp 811a54836d Merge "res_pjsip_outbound_publish: state potential dropped on reloads/realtime fetches" into 13 2016-05-19 05:13:38 -05:00
Joshua Colp cceccd68ad Merge "res_pjsip_outbound_publish: Potential crash due to off nominal path" into 13 2016-05-19 05:12:46 -05:00
Joshua Colp 4509aa890f Merge "res_pjsip_outbound_publish: Won't unload if condition wait times out" into 13 2016-05-18 19:17:43 -05:00
Joshua Colp 480b8cda30 Merge "chan_sip: Prevent extra Session-Expires headers from being added" into 13 2016-05-18 15:37:59 -05:00
George Joseph 935e0496c4 udptl: Don't eat sequence numbers until OK is received
Scenario:
Local fax -> Asterisk w/ firewall -> Provider -> Remote fax

* Local fax starts rtp call to remote fax
* Remote fax starts t38 call back to local fax.
* Local fax sends t38 no-signal to Asterisk before sending an OK.
* udptl processes the frame and increments the expected sequence number.
* chan_sip drops the frame because the call isn't up so nothing goes out
  the external interface to open the port for incoming packets.
* Local fax sends OK and Asterisk sends OK to the remote fax.
* Remote fax sends t38 packets which are dropped by the firewall.
* Local fax re-sends t38 no-signal with the same sequence number.
* udptl drops the frame because it thinks it's a dup.
* Still no outgoing packets to open the firewall.
* t38 negotiation fails.

The patch drops frames t38 received before udptl sequence processing
when the call hasn't been answered yet.  The second no-signal frame
is then seen as new and is relayed out the external interface which
opens the port and allows negotiation to continue.

ASTERISK-26034 #close

Change-Id: I11744b39748bd2ecbbe8ea84cdb4f3c5943c5af9
2016-05-18 14:05:47 -05:00
George Joseph 77e8ec162b chan_sip: Prevent extra Session-Expires headers from being added
When chan_sip does a re-INVITE to refresh a session and authentication
is required, the INVITE with the Authorization header containes a
second Session-Expires header without the ";refersher=" parameter.
This is causing some proxies to return a 400.  Also, when Asterisk is
the uas and the refresher, it is including the Session-Expires and
Min-SE headers in OPTIONS messages which is not allowed per RFC4028.

This patch (based on the reporter's) Checks to see if a Session-Expires
header is already in the message before adding another one.  It also
checks that the method is INVITE or UPDATE.

ASTERISK-26030 #close

Change-Id: I58a7b07bab5a3177748d8a7034fb8ad8e11ce1d9
2016-05-17 11:58:18 -05:00
George Joseph 3f6ef63099 res_pjsip_outbound_registration: Clean up state when registration is deleted
Nothing was cleaning up the registration state object when ast_sorcery_delete
was called on a registration.  So, the registration was deleted from sorcery
but the state object went right on refreshing the registration (or failing
to refresh the registration) with the peer.

* Added a 'deleted' observer on registration that removes the state object.

ASTERISK-25964 #close
Reported-by Matt Jordan

Change-Id: I2db792145cdb1f72ebbf57dd9099596dbbf12c23
2016-05-16 20:43:54 -05:00
zuul bcb133ce93 Merge "configs/samples/pjsip.conf.sample: Fix typo" into 13 2016-05-16 13:53:02 -05:00
George Joseph b6f9392a12 res_pjsip: Set TCP_NODELAY on TCP transports
Although it's perfectly legal to place multiple SIP messages in the same packet,
it can cause problems because the Linux default is to enable Path MTU Discovery
which sets the Don't Fragment bit on the packets. If adding a second message to
the packet causes the MTU to be exceeded, and the destination isn't equipped to
send a FRAGMENTATION NEEDED response to a large packet, the packet will just be
dropped.

We can't specifically tell the stack to send only 1 message per packet, but we
can turn on TCP_NODELAY when we create the transport. This will at least tell
the stack to send packets as soon as possible.

ASTERISK-26005 #close
Reported-by: Ross Beer

Change-Id: I820f23227183f2416ca5e393bec510e8fe1c8fbd
2016-05-15 18:05:34 -06:00
Matt Jordan 361a16f316 configs/samples/pjsip.conf.sample: Fix typo
A ':' is not a valid token for starting a comment.

Change-Id: I123592d93a83d1bdde3e352822881eb9da85e5ad
2016-05-14 21:48:56 -05:00
Matt Jordan f91a7dc993 res/res_hep_pjsip: Fix reported local IP address when bound to 'any'
When bound to an 'any' address, e.g., 0.0.0.0, PJSIP reports as its
local address the 'any' address, as opposed to the IP address we
actually received the packet on. This can cause some confusion in Homer,
as it will dutifully report what we send it.

This patch uses the PJSIP inspection routines to determine which IP
address we probably received the packet on based on the remote party's
IP address. In the event that this fails, it falls back to the IP
address natively reported by the transport.

Change-Id: I076f835d2aef489e1ee1d01595b211eb2ce62da3
2016-05-14 19:54:11 -05:00
zuul 12db14b9b1 Merge "logger: Add PID to syslog messages." into 13 2016-05-14 19:50:44 -05:00
Sean Bright 9de5cd209e res_ari: Correct Location headers returned by some ARI resources
The Location headers returned by:

 * /bridges/{bridgeId}/play
 * /bridges/{bridgeId}/record
 * /channels/{channelId}/play
 * /channels/{channelId}/record

Did not have the '/ari' prefix, and in the case of the 'play' resources, were
using 'playback' instead of 'playbacks.'

Change-Id: I957c58a3a1471bf477dae7c67faa1b74fcd9241c
2016-05-14 13:46:56 -04:00
zuul e6a946400f Merge "res_hep: Provide an option to pick the UUID type" into 13 2016-05-14 09:47:33 -05:00
zuul c735ce1a05 Merge "config_transport: Tell pjproject to allow all SSL/TLS protocols" into 13 2016-05-13 17:57:52 -05:00
Alexei Gradinari 524a302974 res_pjsip: Endpoint IP Access Controls
With the old SIP module we can use IP access controls per peer.
PJSIP module missing this feature.

This patch added next configuration Endpoint options:
    "acl" - list of IP ACL section names in acl.conf
    "deny" - List of IP addresses to deny access from
    "permit" - List of IP addresses to permit access from
    "contact_acl" - List of Contact ACL section names in acl.conf
    "contact_deny" - List of Contact header addresses to deny
    "contact_permit" - List of Contact header addresses to permit

This patch also better logging failed request:
    add custom message instead of "No matching endpoint found"
    add SIP method to logging

ASTERISK-25900

Change-Id: I456dea3909d929d413864fb347d28578415ebf02
2016-05-13 12:38:20 -04:00
Matt Jordan 89ae4466ea res_hep: Provide an option to pick the UUID type
At one point in time, it seemed like a good idea to use the Asterisk
channel name as the HEP correlation UUID. In particular, it felt like
this would be a useful identifier to tie PJSIP messages and RTCP
messages together, along with whatever other data we may eventually send
to Homer. This also had the benefit of keeping the correlation UUID
channel technology agnostic.

In practice, it isn't as useful as hoped, for two reasons:
1) The first INVITE request received doesn't have a channel. As a
   result, there is always an 'odd message out', leading it to be
   potentially uncorrelated in Homer.
2) Other systems sending capture packets (Kamailio) use the SIP Call-ID.
   This causes RTCP information to be uncorrelated to the SIP message
   traffic seen by those capture nodes.

In order to support both (in case someone is trying to use res_hep_rtcp
with a non-PJSIP channel), this patch adds a new option, uuid_type, with
two valid values - 'call-id' and 'channel'. The uuid_type option is used
by a module to determine the preferred UUID type. When available, that
source of a correlation UUID is used; when not, the more readily available
source is used.

For res_hep_pjsip:
 - uuid_type = call-id: the module uses the SIP Call-ID header value
 - uuid_type = channel: the module uses the channel name if available,
                        falling back to SIP Call-ID if not
For res_hep_rtcp:
 - uuid_type = call-id: the module uses the SIP Call-ID header if the
                        channel type is PJSIP and we have a channel,
                        falling back to the Stasis event provided
                        channel name if not
 - uuid_type = channel: the module uses the channel name

ASTERISK-25352 #close

Change-Id: Ide67e59a52d9c806e3cc0a797ea1a4b88a00122c
2016-05-13 07:44:20 -05:00
zuul 1705c5d2ba Merge "pjsip_distributor: Add missing newline to NOTICE" into 13 2016-05-13 06:21:34 -05:00
Joshua Colp dd9900849b Merge "basic-cfg: asterisk.conf: don't set languages" into 13 2016-05-13 04:54:06 -05:00
zuul 8143a00c69 Merge "basic-cfg: asterisk.conf: defaults of options" into 13 2016-05-12 23:18:43 -05:00
zuul 515f49747c Merge "basic-cfg: asterisk.conf: remove [directories]" into 13 2016-05-12 23:18:41 -05:00
zuul bf3c7a891a Merge "basic-cfg: asterisk.conf: debug level 5 spams" into 13 2016-05-12 22:20:41 -05:00
zuul 25db2a8bf5 Merge "followme: delete the right recorded name file" into 13 2016-05-12 22:03:40 -05:00
Joshua Colp a83bf5dabd Merge "Use doubles instead of floats for conversions when comparing strings." into 13 2016-05-12 19:20:07 -05:00
Tzafrir Cohen a73d79c22f basic-cfg: asterisk.conf: remove [directories]
A minimal configuration does not need to explicitly spell out the
directories. The built-in defaults will do just fine. In many cases
they are wrong.

Change-Id: Id1a671e5c5e9923765a4156b57f9f7e263fdd26c
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-12 16:53:23 -05:00
Tzafrir Cohen 1c56de9453 basic-cfg: asterisk.conf: defaults of options
Note the default of remmed-out options. To clarify that those values are
not the defaults.

Change-Id: I849c29b7a710f0abc37355fcb5bfee335ae30738
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-12 16:53:14 -05:00
Tzafrir Cohen d7af591c59 basic-cfg: asterisk.conf: debug level 5 spams
Don't suggest users to use debug level 5, which spews (usually
non-useful) debug information. Reduce the suggestion to (an
arbitrarily-selected) level 2.

Change-Id: Ib53195f78945970956ff59ef13fa89b90e0fcd60
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-12 16:53:06 -05:00
Tzafrir Cohen 9b7db18fc1 basic-cfg: asterisk.conf: don't set languages
* No need to set language in a miniml configuration. 'en' will do just
  fine.
* It would be useful to have an example of setting it to a different
  language.
* Setting the documentation language explicitly is likewise not
  required. Setting it to a different value is not common. At least
  until there is a set of translated documentation.

Change-Id: I94d91ea34e129925f25af81ef8dc0906fb568cb7
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-12 16:52:59 -05:00
Tzafrir Cohen eec539a46e followme: delete the right recorded name file
FollowMe with the option a records the name of the caller and plays it
to the callee. However it has failed to clean up that recorded file
as it tried to delete the file name without the '.sln' extension.

ASTERISK-26008 #close

Change-Id: I79d7b1be7d5cde57bf076d9389e2a8a4422776ec
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2016-05-12 16:52:50 -05:00
zuul 95285c6d23 Merge "res_pjsip_outbound_registration: generate correct Contact URI for TLS" into 13 2016-05-12 15:05:42 -05:00
Mark Michelson 02d30e171e Use doubles instead of floats for conversions when comparing strings.
In 13.9.0, there was an issue where PJSIP contacts added to an AOR would
be deleted at seemingly random times.

One reason this was happening was because of an operation to retrieve
the contacts whose expiration time was less than or equal to the current
time. When retrieving existing contacts, the contact's expiration time
and the current time were converted from a string to a float, and those
two floats were compared.

On some systems, including mine, this conversion was horribly off. For
instance, I could regularly see the string "1463079214" get converted
into 1463079168.000000. When switching from using a float to using a
double, the conversion was as expected.

Why was the conversion to float off? My best guess is that the
conversion to float was attempting to store the entire value in the 23
bit significand of the IEEE-754 floating point number. In particular, if
you take only the 23 most significant bits of 1463079214, you get the
messed up 1463079168 that we were seeing in the conversion. It likely
was possible to get a more precise value by composing the number using
an exponent, but the conversion did not work that way. With a double,
you have a 52 bit significand, allowing the entire value to fit there,
and thereby allowing an accurate conversion.

ASTERISK-26007 #close
Reported by Greg Siemon

Change-Id: I83ca7944aae8b7cd994b254c78ec02411d321070
2016-05-12 14:36:25 -05:00
George Joseph e2df15bae9 pjsip_distributor: Add missing newline to NOTICE
There was a newline missing from the end of the "no matching endpoint" notice.

Change-Id: Idc11fe5bc0354072291663dbffe648c471e39181
2016-05-12 08:15:24 -06:00
Sebastian Damm a94a12bbf7 res_pjsip_outbound_registration: generate correct Contact URI for TLS
There are two types of SIP URIs indicating a secure transport:
* sips:user@example.org
* sip:user@example.org;transport=tls

When using a sips URI, Asterisk checks incoming INVITEs and answers from
the other side for sips URIs, and rejects the packet if there are only
sip URIs. So Asterisk should only generate a sips Contact URI if the
other side supports it.

This patch makes Asterisk generate either a sip or sips Contact URI
depending on the format of the server URI.

If you want a sip URI, use:
server_uri=sip:example.org\;transport=tls

If you want a sips URI, use:
server_uri=sips:example.org

ASTERISK-25990 #close
Reported-by: Sebastian Damm

Change-Id: I5ae57d6531ce940b5fc64d5cd2673e60db0f9ba2
2016-05-12 05:34:24 -05:00
Alexei Gradinari 36d66a23e0 logger: Add PID to syslog messages.
During refactoring of this support the addition of
the PID to messages was removed. This change adds it
back in.

ASTERISK-25538 #close

Change-Id: Ie2d43b0652e59b7ac319a7dba94501540d70ba36
2016-05-12 05:12:05 -05:00
Matt Jordan 37214b0bdf configure: Fix errors with AST_UNDEFINED_SANITIZER/AST_LEAK_SANITIZER
When running on a system that does not support or use AST_UNDEFINED_SANITIZER
or AST_LEAK_SANITIZER, the configure script would incorrectly set those
constants to a blank value, e.g., 'AST_UNDEFINED_SANITIZER='. This would
cause menuselect to error out, complaining that a blank value is not a
valid option. This patch corrects the issue by setting the value to 0 if
the options that those constants enable/disable is not found.

Change-Id: Ib39814aaf940f308d500c1e026edb3d70de47fba
2016-05-11 14:07:17 -05:00
zuul a01ce2b889 Merge "res_pjsip: improve realtime performance" into 13 2016-05-11 12:22:10 -05:00
Kevin Harwell 49b25a0956 res_pjsip_outbound_publish: state potential dropped on reloads/realtime fetches
When reloading, or fetching realtime data, if the "apply" failed for any
numerous reasons the current state object would not be maintained. This
potentially resulted in publishes being stopped for some states/clients when
they should not have been.

This patch makes it so the current state object is kept upon any type of reload/
fetch failures.

Change-Id: Iab6020c116d628ed2ae81183e987e2eaa3c90b30
2016-05-11 11:42:02 -05:00
Kevin Harwell 1b5c91b7be res_pjsip_outbound_publish: Potential crash due to off nominal path
It was possible for the explicit publish destroy function to be called without
the pjsip client ever being initialized. This fix checks to make sure there is
a client to destroy before attempting.

Change-Id: I8eea1bfa3bd472149bfc255310be2a6248688f5c
2016-05-11 11:41:39 -05:00
Kevin Harwell 10de553c9d res_pjsip_outbound_publishing: After unloading the library won't load again
The same thing was happening in res_pjsip_publish_asterisk. When the library
was unloaded it did not unregister the object type from sorcery. Subsequent
loads resulted in a failed load due to the sorcery type already existing.

Change-Id: Ifdc25e94e4cd40bc5a19eb4d0a00b86c2e9fedc9
2016-05-11 11:41:21 -05:00
Kevin Harwell 1a833b9739 res_pjsip_outbound_publish: Ref leak in off nominal callback paths
There were a few spots where the client object's reference was being leaked in
sip_outbound_publish_callback. This patch cleans up those leaks.

Change-Id: I485d0bc9335090f373026f77c548042e258461df
2016-05-11 11:41:06 -05:00
Kevin Harwell 4752ef02e0 res_pjsip_outbound_publish: Won't unload if condition wait times out
When res_pjsip_outbound_publish unloads it has to wait for all current
publishing objects to get done. However if the wait condition times out
then it does not fail the unload. This sometimes results in an infinite
loop check while unloading. This patch now fails the unload operation if
the condition times out.

Change-Id: Id57b8cbed9d61222690fcba1e4f18e259df4c7ec
2016-05-11 11:40:42 -05:00
zuul 81773ceb9c Merge "res_fax/t38_gateway: Peer V.21 session is created on wrong channel" into 13 2016-05-11 10:19:50 -05:00
Joshua Colp 2d4c818ac1 Merge "app_confbridge: Add a regcontext option for confbridge bridge profiles." into 13 2016-05-10 04:48:44 -05:00
zuul 577d65b701 Merge "res_pjsip_authenticator_digest: Don't use source port in nonce verification" into 13 2016-05-09 22:34:39 -05:00
Joshua Colp 7561ffa64a Merge "pjproject_bundled: Check for python-dev and TEST_FRAMEWORK" into 13 2016-05-09 20:11:30 -05:00
Kevin Harwell 4d063814ba res_pjsip_authenticator_digest: Don't use source port in nonce verification
From the issue reporter:
"res_pjsip_outbound_authenticator_digest builds a nonce that is a hash of
the timestamp, the source address, the source port, a server UUID that is
calculated at startup, and the authentication realm.

Rather than caching nonces that we create, we instead attempt to re-calculate
the nonce when receiving an incoming request with authentication. We then
compare the re-calculated nonce to the incoming nonce, and if they don't match,
then authentication has failed early.

The problem is that it is possible, especially when using TCP, to receive two
requests from the same endpoint but have differing source ports for those
requests. Asterisk itself commonly will use different source ports for
outbound TCP requests."

This patch removes the source port dependency when building the nonce.

ASTERISK-25978 #close

Change-Id: I871b5f4adce102df1c4988066283095ec509dffe
2016-05-09 14:15:26 -05:00
George Joseph fb6227a372 config_transport: Tell pjproject to allow all SSL/TLS protocols
The default tls settings for pjproject only allow TLS 1, TLS 1.1 and TLS 1.2.
SSL is not allowed.   So, even if you specify "sslv3" for a transport method,
it's silently ignored and one of the TLS protocols is used.  This was a new
behavior of pjsip_tls_setting_default() in 2.4 (when tls.proto was added) that
we never caught.

Now we need to set tls.proto = 0 after we call pjsip_tls_setting_default().
This tells pjproject to set the socket protocol to match the method.

ASTERISK-26004 #close

Change-Id: Icfb55c1ebe921298dedb4b1a1d3bdc3ca41dd078
2016-05-09 11:29:13 -05:00
zuul 0f54a5ee98 Merge "res_pjsip: module load priority" into 13 2016-05-09 11:03:14 -05:00
zuul 5261151286 Merge "file: Ensure nativeformats remains valid for lifetime of use." into 13 2016-05-09 08:27:51 -05:00
Jaco Kroon 2db17a793c app_confbridge: Add a regcontext option for confbridge bridge profiles.
This patch allows for having app_confbridge register the name of the
conference as an extension into a specific context, similar to
regcontext for chan_sip.  This variant is not quite as involved as the
one in chan_sip and doesn't allow for multiple contexts or custom
extensions, you can only specify the context and the conference name
will always be used as the extension to register.

ASTERISK-25989 #close

Change-Id: Icacf94d9f2b5dfd31ef36f6cb702392619a7902f
2016-05-09 08:17:59 -05:00
zuul 60cc53ecb3 Merge "stasis_endpoints: Add new Status and Headers to ContactStatus" into 13 2016-05-09 06:46:16 -05:00
George Joseph 2a7130b8b0 pjproject_bundled: Check for python-dev and TEST_FRAMEWORK
The pjsua and pjsystest apps are now built only if TEST_FRAMEWORK is set.
The python bindings are now built only if TEST_FRAMEWORK is set and a
python development package is installed.

libresample was also disabled.

ASTERISK-25993 #close
Reported-by: Joshua Colp

Change-Id: If4e91c503a02f113d5b71bc8b972081fa3ff6f03
2016-05-08 19:32:23 -06:00
Alexei Gradinari 72eb7c8301 res_pjsip: module load priority
The res_pjsip_authenticator_digest, res_pjsip_endpoint_identifier_*
and res_pjsip_registrar modules should load ASAP
to avoid "No matching endpoint found" for legitimate endpoint.

ASTERISK-25994

Change-Id: Iac95d95ad031e0be104189d29e923a2ad7c24a1b
2016-05-06 09:27:39 -04:00
Chris Trobridge dd00c71aae config_options.c: Expand #ifdef to contain whole if statement.
ASTERISK-25956 #close

Change-Id: If6961ec54be276d5ab4f012ee7e7b420cb45de38
2016-05-06 04:28:58 -05:00
Alexei Gradinari e6eb17efd9 stasis_endpoints: Add new Status and Headers to ContactStatus
ASTERISK-25903 added a new headers to AMI Event ContactStatusDetail.
ASTERISK-25904 added a new Status to AMI Event ContactStatusDetail.
These additions should be also in stasis_endpoints
to include in command "manager show event ContactStatus"

Change-Id: I7610ad02a998e1f26c20caa27aa50279d0164f6a
2016-05-05 16:30:44 -04:00
zuul 3fd8113386 Merge "pjsip: Added "reg_server" to contacts (fixed alembic)" into 13 2016-05-05 13:15:16 -05:00
Joshua Colp fa11f4c920 file: Ensure nativeformats remains valid for lifetime of use.
It is possible for the nativeformats of a channel to change
throughout its lifetime. As a result a user of it needs to either
ensure the channel is locked when accessing the formats or keep
a reference to the nativeformats themselves.

This change fixes the file playback support so it keeps a
reference to the nativeformats when accessing things.

ASTERISK-25998 #close

Change-Id: Ie45b65475e1481ddf05b874ee48f63e39fff8915
2016-05-05 13:01:12 -03:00
Alexei Gradinari 9c2032240e res_pjsip: improve realtime performance
This patch modified pjsip_options to retrieve only
permament contacts for aor if the qualify_frequency is > 0
and persisted contacts if the qualify_frequency is > 0.

This patch also fixed a bug in res_sorcery_astdb.
res_sorcery_astdb doesn't save object data retrived from astdb.

ASTERISK-25826

Change-Id: I1831fa46c4578eae5a3e574ee3362fddf08a1f05
2016-05-05 10:45:28 -05:00
zuul 168a7b3dd8 Merge "res_fax: add FAXMODE variable" into 13 2016-05-05 09:18:34 -05:00
Alexei Gradinari fe38d21c2a pjsip: Added "reg_server" to contacts (fixed alembic)
ASTERISK-25931

Change-Id: Icc4321a88f5c93ff809da3f372eebbf69c6a8549
2016-05-04 17:11:17 -04:00
zuul 8aef2c4156 Merge "res_pjsip/AMI: add contact.updated event" into 13 2016-05-03 21:42:12 -05:00
Joshua Colp 3fa70be0f5 Merge "app_voicemail: always copy dynamic struct to avoid race condition" into 13 2016-05-03 19:14:31 -05:00
zuul 2970f72dff Merge "pjproject_bundled: Various fixes discovered during testing of OSes" into 13 2016-05-03 19:11:12 -05:00
Alexei Gradinari 7a14e669f0 res_pjsip/AMI: add contact.updated event
With the old SIP module AMI sends PeerStatus event on every
successfully REGISTER requests, ie, on start registration,
update registration and stop registration.

With PJSIP AMI sends ContactStatus only when status is changed.
Regarding registration:
on start registration - Created
on stop registration - Removed
but on update registration nothing

This patch added contact.updated event.

ASTERISK-25904

Change-Id: I8fad8aae9305481469c38d2146e1ba3a56d3108f
2016-05-03 17:35:27 -04:00
Alexei Gradinari 06d4ac0355 res_fax: add FAXMODE variable
The app_fax set FAXMODE variable, but res_fax missing this feature.
This patch add FAXMODE variable which is set to either "audio" or "T38".

ASTERISK-25980

Change-Id: Ie3dcbfb72cc681e9e267a60202f7fb8723a51b6b
2016-05-03 17:20:18 -04:00
Alexei Gradinari 2d17fe06c5 res_fax/t38_gateway: Peer V.21 session is created on wrong channel
The channel and peer V.21 sessions are created on the same channel now.
The peer V.21 session should be created only on peer channel
when one of channel can handle T.38.

Also this patch enable debug for T.38 gateway session
if global fax debug enabled.

ASTERISK-25982

Change-Id: I78387156ea521a77eb0faf170179ddd37a50430e
2016-05-03 16:43:09 -04:00
Joshua Colp 3677409116 Merge "pjsip: Added "reg_server" to contacts." into 13 2016-05-03 12:41:23 -05:00
Diederik de Groot a2f19d82a8 configs/basic-pbx/asterisk.conf: contains incorrect path separator
Note: When packagers use these files (as an example) the paths are never
really used when they are split using '='.

Note: Thirdparty applications will also have trouble parsing the file when
expecting '=>'.

Change-Id: I0ada647f588e81f023fb1333ca15a1a333fd6004
2016-05-03 11:56:44 -05:00
George Joseph f39089f17c pjproject_bundled: Various fixes discovered during testing of OSes
For all OSes:
* Disabled third-party codecs in pjproject and added
  '--disable-speex-codec --disable-speex-aec --disable-gsm-codec' to the
  configure options since we don't use the pjsip codec capability.

FreeBSD:
* Added FreeBSD support to install_prereq.
* Changed pjproject/configure.m4 to use $GNU_MAKE instead of hardcoding "make".
* Added __progname and environ to asterisk.exports.in.
* Reverted the use of ldconfig to create shared library symlinks to ln.
* Only enable epoll in pjproject if `uname -s` is Linux.
* Added a patch to pjproject to take the name of the 'make' command from
  an environment variable if supplied.  This is needed for the python bindings.
  (merged by Teluu into pjproject trunk 5/3/2016)
FreeBSD support isn't complete.  Still some general issues regarding
make/gmake having nothing to do with pjproject.  With some handholding it DOES
build successfully.

CentOS:
Added 'patch' and 'bzip2' to install_prereq PACKAGES_RH.
CentOS 6/7 32/64 build and run the pjsip testsuite successfully.

Ubuntu:
No changes required.
Ubuntu 15/16 32/64 build and run the pjsip testsuite successfully.

Debian:
No changes required.
Debian 6/7/8 32/64 build and run the pjsip testsuite successfully.

There will utimately be a follow-up patch to create an install_prereq for
the testsuite as I've discovered a few missing requirements.

ASTERISK-25968 #close

Change-Id: I5756a07facfc63798115a5e73a8709382fe9259c
2016-05-03 06:54:29 -06:00
Andrew Nagy 8028fc7585 app_voicemail: always copy dynamic struct to avoid race condition
Voicemail email addresses can be corrupt or voicemail
emails can end up being sent to the wrong email address if asterisk is
reading voicemail.conf during a reload and processing an email at the
same time. This patch always copies the struct that would otherwise only
be copied once.

ASTERISK-24463 #close
Reported by: John Campbell
Tested by: Etienne Lessard
Tested by: Andrew Nagy
Change-Id: I3a0643813116da84e2617291903d0d489b7425fb
2016-05-03 07:24:21 -03:00
Alexei Gradinari 3cb8934de0 pjsip: Added "reg_server" to contacts.
If the Asterisk system name is set in asterisk.conf, it will be stored
into the "reg_server" field in the ps_contacts table to facilitate
multi-server setups.

ASTERISK-25931

Change-Id: Ia8f6bd2267809c78753b52bcf21835b9b59f4cb8
2016-05-02 09:59:08 -03:00
zuul 69ced86c6c Merge "pjproject_bundled: Disable PJSIP_UNESCAPE_IN_PLACE" into 13 2016-04-29 15:08:33 -05:00
Joshua Colp d65023b5a5 Merge "res_pjsip: Start body generator users after suppliers." into 13 2016-04-29 13:11:37 -05:00
zuul 3e5666eadc Merge "res_pjsip_pubsub.c: Fix body generator registration race." into 13 2016-04-29 13:06:27 -05:00
zuul 72ee8c1bf9 Merge "chan_sip: Make autocreated peers send PeerStatus events" into 13 2016-04-29 12:13:57 -05:00
Joshua Colp 1ce30f1fb5 Merge "res_pjsip_outbound_publish.c: Remove redundant flag check." into 13 2016-04-29 04:57:32 -05:00
zuul cc8a50631e Merge "res_pjsip_pubsub.c: Add useful information to some messages." into 13 2016-04-28 23:01:59 -05:00
zuul 2ae097f144 Merge "res_pjsip_pubsub.h: Fix doxygen association." into 13 2016-04-28 22:43:32 -05:00
zuul 28e6978e82 Merge "res_pjsip: Add ability to identify by Authorization username" into 13 2016-04-28 17:49:56 -05:00
Richard Mudgett 7992923c70 res_pjsip: Start body generator users after suppliers.
Change-Id: I8f0b57841feaab56c8a4e821b5ccb4e05e5fbadb
2016-04-28 17:12:36 -05:00
Richard Mudgett 5dc0e082b2 res_pjsip_pubsub.c: Add useful information to some messages.
Change-Id: Ia0b2e15773894c599e5c5748bbc70e99f434192a
2016-04-28 17:06:01 -05:00
Richard Mudgett f9e416f053 res_pjsip_pubsub.c: Fix body generator registration race.
Change-Id: Id8752073ef06472a2fd96080f4009fac42843e67
2016-04-28 17:03:07 -05:00
Richard Mudgett b1b2019046 res_pjsip_pubsub.h: Fix doxygen association.
Change-Id: I110d3e3572598289fcd4215d966cf0c858f98632
2016-04-28 17:00:46 -05:00
Richard Mudgett b7f07fdff5 res_pjsip_outbound_publish.c: Remove redundant flag check.
Change-Id: I0da80a3c3e0eae0c52ff27e7412ba027d6f52353
2016-04-28 16:58:54 -05:00
George Joseph 719ece5659 pjproject_bundled: Disable PJSIP_UNESCAPE_IN_PLACE
When pjsip_parse_uri is called with PJSIP_UNESCAPE_IN_PLACE enabled,
the input uri string will become corrupted if it contains escape sequences.
It's not possible to automatically strdup or strdupa the input string because
the output uri pj_str_t's will have pointers to chunks of the input string.
Getting around this would require more memory management code and wouldn't
be worth the savings of doing the unescape in place.

ASTERISK-25970 #close
Reported-by: Dmitriy Serov

Change-Id: I28dc0e599b5108f7959b9c46dc8278371b372f88
2016-04-28 15:54:07 -06:00
Joshua Colp 86fb803257 Merge "func_odbc: Check connection status before executing queries." into 13 2016-04-28 06:50:55 -05:00
George Joseph 38bed4515d res_pjsip: Add ability to identify by Authorization username
A feature of chan_sip that service providers relied upon was the ability to
identify by the Authorization username.  This is most often used when customers
have a PBX that needs to register rather than identify by IP address.  From my
own experiance, this is pretty common with small businesses who otherwise
don't need a static IP.

In this scenario, a register from the customer's PBX may succeed because From
will usually contain the PBXs account id but an INVITE will contain the caller
id.  With nothing recognizable in From, the service provider's Asterisk can
never match to an endpoint and the INVITE just stays unauthorized.

The fixes:

A new value "auth_username" has been added to endpoint/identify_by that
will use the username and digest fields in the Authorization header
instead of username and domain in the the From header to match an endpoint,
or the To header to match an aor.  This code as added to
res_pjsip_endpoint_identifier_user rather than creating a new module.

Although identify_by was always a comma-separated list, there was only
1 choice so order wasn't preserved.  So to keep the order, a vector was added
to the end of ast_sip_endpoint.  This is only used by res_pjsip_registrar
to find the aor.  The res_pjsip_endpoint_identifier_* modules are called in
globals/endpoint_identifier_order.

Along the way, the logic in res_pjsip_registrar was corrected to match
most-specific to least-specific as res_pjsip_endpoint_identifier_user does.

The order is:

username@domain
username@domain_alias
username

Auth by username does present 1 problem however, the first INVITE won't have
an Authorization header so the distributor, not finding a match on anything,
sends a securty_alert.  It still sends a 401 with a challenge so the next
INVITE will have the Authorization header and presumably succeed.  As a result
though, that first security alert is actually a false alarm.

To address this, a new feature has been added to pjsip_distributor that keeps
track of unidentified requests and only sends the security alert if a
configurable number of unidentified requests come from the same IP in a
configurable amout of time.  Those configuration options have been added to
the global config object.  This feature is only used when auth_username
is enabled.

Finally, default_realm was added to the globals object to replace the hard
coded "asterisk" used when an endpoint is not yet identified.

The testsuite tests all pass but new tests are forthcoming for this new
feature.

ASTERISK-25835 #close
Reported-by: Ross Beer

Change-Id: I30ba62d208e6f63439600916fcd1c08a365ed69d
2016-04-27 15:22:29 -06:00
Joshua Colp a16aa467f5 Merge "config: Fix ast_config_text_file_save2 writability check for missing files" into 13 2016-04-27 16:20:31 -05:00
Joshua Colp e0e03cd2c8 Merge "res_pjsip: disable multi domain to improve realtime performace" into 13 2016-04-27 14:03:53 -05:00
Mark Michelson 677d5b5151 func_odbc: Check connection status before executing queries.
A recent change to func_odbc made it so that a single connection was
maintained per DSN. The problem was that the code was optimistic about
the health of the connection after initially opening it and did nothing
to re-connect in case the connection had died.

This change adds a check before executing a query to ensure that the
connection to the database is still up and running.

ASTERISK-25963 #close
Reported by Ross Beer

Change-Id: Id33c86eb04ff48ca088bb2e3086c27b3b683491d
2016-04-27 13:23:37 -05:00
Alexei Gradinari df3639700a res_pjsip: disable multi domain to improve realtime performace
This patch added new global pjsip option 'disable_multi_domain'.
Disabling Multi Domain can improve Realtime performance by reducing
number of database requests.

ASTERISK-25930 #close

Change-Id: I2e7160f3aae68475d52742107949a799aa2c7dc7
2016-04-27 10:58:25 -05:00
Joshua Colp e5c5fac8f1 Merge "res_pjsip: Add serialized scheduler (res_pjsip/pjsip_scheduler.c)" into 13 2016-04-27 10:12:31 -05:00
zuul b4ddcc0e94 Merge "chan_sip: Give more time for TCP/TLS threads to stop." into 13 2016-04-27 08:50:35 -05:00
Joshua Colp 949bf6b282 chan_sip: Give more time for TCP/TLS threads to stop.
The unload process currently tells each TCP/TLS to terminate but
does not wait for them to do so. This introduces a race condition
where the container holding the threads may be destroyed before
the threads are able to remove themselves from it. When they
finally do the container is invalid and can't be used causing a
crash.

A previous change existed which waited a bit to wait for any
stranglers to finish. This change extends this and waits longer.

ASTERISK-25961 #close

Change-Id: Idc6262b670ca49ede32061159e323b7b63c6f3c6
2016-04-26 13:15:37 -03:00
Joshua Colp 6959f5484b app_queue: Fix crash when unloading module.
When unloading the app_queue module the members in each queue are
destroyed and as part of this they are removed from the pending
members container. Unfortunately a crash would occur as the container
was destroyed before the members were removed.

This change tweaks ordering so the container destruction occurs
after the members are destroyed.

ASTERISK-16115

Change-Id: I48c728668c55aee3d05b751a5d450fb57e87f44b
2016-04-26 05:52:43 -05:00
Joshua Colp 9d8f59aaf2 Merge changes from topic 'system_stress_patches' into 13
* changes:
  test_message.c: Wait longer in case dialplan also processes the test message.
  Manager: Short circuit AMI message processing.
  manager.c: Eliminate most RAII_VAR usage.
  manager_channels.c: Fix allocation failure crash.
2016-04-26 04:57:07 -05:00
Joshua Colp 4efc6b4315 Merge changes from topic 'system_stress_patches' into 13
* changes:
  Bridge system: Fix memory leaks and double frees on impart failure.
  bridge_softmix.c: Fix crash if channel fails to join mixing tech.
2016-04-26 04:56:36 -05:00
George Joseph b38f1146e5 config: Fix ast_config_text_file_save2 writability check for missing files
A patch I did back in 2014 modified ast_config_text_file_save2 to check the
writability of the main file and include files before truncating and re-writing
them.  An unintended side-effect of this was that if a file doesn't exist,
the check fails and the write is aborted.

This patch causes ast_config_text_file_save2 to check the writability of the
parent directory of missing files instead of checking the file itself.  This
allows missing files to be created again.  A unit test was also added to
test_config to test saving of config files.

The regression was discovered when app_voicemail's passwordlocation=spooldir
feature stopped working.

ASTERISK-25917 #close
Reported-by: Jonathan Rose

Change-Id: Ic4dbe58c277a47b674679e49daed5fc6de349f80
2016-04-25 18:16:58 -05:00
Joshua Colp 83dadc4683 Merge "app_queue: queue members can receive multiple calls" into 13 2016-04-25 17:47:02 -05:00
kkm 29bab0d1a4 chan_sip: Make autocreated peers send PeerStatus events
Since Stasis has been introduced, an attempt to send AMI messages by an
autocreated peer caused a crash, and all events from autocreated peers were
semi-inadvertently disabled altogether in 0b83761. This change restores the
disabled functionality.

ASTERISK-25950

Change-Id: Iecc350f23db603fadb2f302064643ebe9664e974
2016-04-25 17:31:50 -05:00
zuul 6c28e8c827 Merge "Fix case sensitive actions in AMI QueueSummary and QueueStatus" into 13 2016-04-25 14:18:09 -05:00
Kevin Harwell c345e530f4 app_queue: queue members can receive multiple calls
It was possible for a queue member that is a member of at least 2 or more
queues to receive mulitiple calls at the same time. This happened because
of a race between when a member was being rung and when the device state
notified the other queue(s) member object of the state change.

This patch makes it so when a queue member is being rung it gets added to
a global pool of queue members. If that same member is tried again, e.g.
from another queue, and it is found to already exist in the pending member
container then it will not ring that member.

ASTERISK-16115 #close

Change-Id: I546dd474776d158c2b6be44205353dee5bac7e48
2016-04-25 12:39:47 -05:00
zuul a8f8e3c340 Merge "res_agi: Prevent run_agi from eating frames it shouldn't" into 13 2016-04-25 11:49:18 -05:00
DarkS c0688a6398 Fix case sensitive actions in AMI QueueSummary and QueueStatus
ASTERISK-25954 #close
Reported by: Javier Acosta

Change-Id: I00be83d45cc7e8385de2523012bd196aafeeb256
2016-04-25 11:24:56 -05:00
George Joseph eb7c581806 res_agi: Prevent run_agi from eating frames it shouldn't
The run_agi function is eating control frames when it shouldn't be. This is
causing issues when an AGI is run from CONNECTED_LINE_SEND_SUB in a blond
transfer.

Alice calls Bob. Bob attended transfers to Charlie but hangs up before Charlie
answers.

Alice gets the COLP UPDATE indicating Charlie but Charlie never gets an UPDATE
and is left thinking he's connected to Bob.

In this case, when CONNECTED_LINE_SEND_SUB runs on Alice's channel and it calls
an AGI, the extra eaten frames prevent CONNECTED_LINE_SEND_SUB from running on
Charlie's channel.

The fix was to accumulate deferrable frames in the "forever" loop instead of
dropping them, and re-queue them just before running the actual agi command
or exiting.

ASTERISK-25951 #close

Change-Id: I0f4bbfd72fc1126c2aaba41da3233a33d0433645
2016-04-25 08:55:11 -06:00
zuul 13ee3402ed Merge "func_odbc: Use one connection per DSN." into 13 2016-04-24 20:14:32 -05:00
zuul 84d2e4fb42 Merge "Remove reference to non-existent sip.conf option" into 13 2016-04-22 18:55:42 -05:00
zuul 77ae5cd7fd Merge "res_stasis: Handle re-enter stasis bridge with swap channel." into 13 2016-04-22 18:55:41 -05:00
zuul 09f8f8daa1 Merge "bridge: Hold off more than one imparting channel at a time." into 13 2016-04-22 18:29:19 -05:00
Richard Mudgett ebf0724a83 test_message.c: Wait longer in case dialplan also processes the test message.
Bumped the wait from 1 second to 5 seconds.  The test message was hitting my
default call handler and failing the test because it took longer.

Change-Id: I3a03737f25e92983de00548fcc7bbc50dd7544ba
2016-04-22 16:44:05 -05:00
Richard Mudgett ba63aa7c9e Manager: Short circuit AMI message processing.
Improve AMI message processing performance if there are no consumers
listening for the messages.  We now skip creating the AMI event message
text strings.

Change-Id: I7b22fc5ec4e500d00635c1a467aa8ea68a1bb2b3
2016-04-22 16:44:05 -05:00
Richard Mudgett d5ee6acf28 manager.c: Eliminate most RAII_VAR usage.
* Made ast_manager_event_blob_create() not allocate the ao2 event object
with a lock as it is not needed.

Change-Id: I8e11bfedd22c21316012e0b9dd79f5918f644b7c
2016-04-22 16:44:05 -05:00
Richard Mudgett 7303e3dc96 manager_channels.c: Fix allocation failure crash.
An earlier allocation failure failed to create a channel snapshot for the
AMI HangupRequest/SoftHangupRequest event which resulted in a crash in
channel_hangup_request_cb().  Where the stasis message gets generated
cannot tell if the NULL snapshot returned was because of an allocation
failure or the channel was a dummy channel.

* Made channel_hangup_request_cb() check if the channel blob has a
snapshot and exit if it doesn't.

* Eliminated the RAII_VAR usage in channel_hangup_request_cb().

Change-Id: I0b6a1c4e95cbb7d80b2a7054c6eadecc169dfd24
2016-04-22 16:44:05 -05:00
Richard Mudgett 1e93f3d723 Bridge system: Fix memory leaks and double frees on impart failure.
You cannot reference the passed in features struct after calling
ast_bridge_impart().  Even if the call fails.

Change-Id: I902b88ba0d5d39520e670fb635078a367268ea21
2016-04-22 16:44:04 -05:00
Richard Mudgett 5e388d4188 bridge_softmix.c: Fix crash if channel fails to join mixing tech.
softmix_bridge_join() failed because of an allocation failure.  To address
this, the softmix bridge technology now checks if the channel failed to
join softmix successfully.  In addition, the bridge now begins the process
of kicking the channel out of the bridge so we don't have channels
partially in the bridge for very long.

* Fix the test_channel_feature_hooks.c unit tests.  The test channel must
have a valid codec to join the simple_bridge technology.  This patch makes
joining a bridge more strict by not allowing partially joined channels to
remain in the bridge.

Change-Id: I97e2ade6a2bcd1214f24fb839fda948825b61a2b
2016-04-22 16:44:04 -05:00
Mark Michelson 068ae54c76 func_odbc: Use one connection per DSN.
res_odbc was changed in Asterisk 13.8.0 to remove connection management,
opting instead to let unixodbc maintain open connections and return
those to Asterisk as requested.

This was a boon for realtime, since it meant that multiple threads could
potentially run parallel queries since they could each be using their
own database connections.

However, on the user-facing side, func_odbc, there were some inherent
behaviors being relied on that no longer hold true after the change.
One such reported behavior was that MySQL's LAST_INSERTED_ID() works
per-connection. This means that if Asterisk uses separate connections
for every database operation, whereas before it used one connection for
everything, we have broken expectations and functionality.

The fix provided in this patch is to make func_odbc use a single
database connection per DSN. This way, user-facing database usage will
have the same behavior as it did pre-13.8.0. However, realtime, which is
the real workhorse of database interaction, will continue to let
unixodbc manage connections.

ASTERISK-25938 #close
Reported by Edwin Vandamme

Change-Id: Iac961fe79154c6211569afcdfec843c0c24c46dc
2016-04-22 14:30:18 -05:00
Leif Madsen 6aeefa89bc Remove reference to non-existent sip.conf option
Option was removed in commit 7f883ef495

ASTERISK-25927 #close

Change-Id: I92f9b0196d9fc41d1d58354c07340c465ef1fcf8
2016-04-22 13:14:19 -05:00
Joshua Colp 6112a94d03 Merge "res_pjsip_callerid: Clear out display name if id->name is not valid" into 13 2016-04-21 16:25:00 -05:00
Diederik de Groot e750ea9b5b lock.c: Check *lt before dereferencing it
*lt is NULL if t->tracking == 0

ASTERISK-25948 #close

Change-Id: I4a81af28f9c82a74aa82413d772a7dc8fa6f45ba
2016-04-21 11:35:37 -05:00
Richard Mudgett a036c35903 res_stasis: Handle re-enter stasis bridge with swap channel.
We lose the fact that there is a swap channel if there is one.  We
currently wind up rejoining the stasis bridge as a normal join after the
swap channel has already been kicked from the bridge.

This patch preserves the swap channel so the AMI/ARI events can note that
the channel joining the bridge is swapping with another channel.  Another
benefit to swaqpping in one operation is if there are any channels that
get lonely (MOH, bridge playback, and bridge record channels).  The lonely
channels won't leave before the joining channel has a chance to come back
in under stasis if the swap channel is the only reason the lonely channels
are staying in the bridge.

ASTERISK-25947 #close
Reported by: Richard Mudgett

ASTERISK-24649
Reported by: John Bigelow

ASTERISK-24782
Reported by: John Bigelow

Change-Id: If37ea508831d1fed6dbfac2f191c638fc0a850ee
2016-04-20 15:45:46 -05:00
Richard Mudgett 9942d50aa5 bridge: Hold off more than one imparting channel at a time.
An earlier patch blocked the ast_bridge_impart() call until the channel
either entered the target bridge or it failed.  Unfortuantely, if the
target bridge is stasis and the imprted channel is not a stasis channel,
stasis bounces the channel out of the bridge to come back into the bridge
as a proper stasis channel.  When the channel is bounced out, that
released the block on ast_bridge_impart() to continue.  If the impart was
a result of a transfer, then it became a race to see if the swap channel
would get hung up before the imparted channel could come back into the
stasis bridge.  If the imparted channel won then everything is fine.  If
the swap channel gets hung up first then the transfer will fail because
the swap channel is leaving the bridge.

* Allow a chain of ast_bridge_impart()'s to happen before any are
unblocked to prevent the race condition described above.  When the channel
finally joins the bridge or completely fails to join the bridge then the
ast_bridge_impart() instances are unblocked.

ASTERISK-25947
Reported by: Richard Mudgett

ASTERISK-24649
Reported by: John Bigelow

ASTERISK-24782
Reported by: John Bigelow

Change-Id: I8fef369171f295f580024ab4971e95c799d0dde1
2016-04-20 15:45:38 -05:00
Joshua Colp b1b3460783 Merge "pjproject: Add patch for removing strip of '[]' from header params" into 13 2016-04-20 08:17:21 -05:00
George Joseph 516c626a7d res_pjsip_callerid: Clear out display name if id->name is not valid
When create_new_id_hdr creates a new RPID or PAI header, it starts by cloning
the From header, then it overwrites the display name and uri from the channel's
connected.id.  If the connected.id.name wasn't valid, create_new_id_hdr was
leaving the display name from the From header in the new RPID or PAI header.
On an attended transfer where the originator had a caller id number set but not
a display name, the re-INVITE to the final transferee had the number of the
originator but the display name of the transferer.

Added a check to clear out the display name in the new header if
connected.id.name was invalid.

ASTERISK-25942 #close

Change-Id: I60b4bf7a7ece9b7425eba74151c0b4969cd2738b
2016-04-19 17:06:15 -06:00
Joshua Colp 08f6408dc6 Merge "PJSIP: Remove PJSIP parsing functions from uri length validation." into 13 2016-04-19 15:19:35 -05:00
Joshua Colp ded3794fc6 app_talkdetect: Make the module core supported.
This module is used as part of testsuite tests to confirm
stuff works. I'm accordingly marking it as core as it is
required by those tests.

Change-Id: I558e7af7679b22b8ed641d7dd37ee4ca35b11e88
2016-04-19 15:02:18 -03:00
Mark Michelson efae187217 PJSIP: Remove PJSIP parsing functions from uri length validation.
The PJSIP parsing functions provide a nice concise way to check the
length of a hostname in a SIP URI. The problem is that in order to use
those parsing functions, it's required to use them from a thread that
has registered with PJLib.

On startup, when parsing AOR configuration, the permanent URI handler
may not be run from a PJLib-registered thread. Specifically, this could
happen when Asterisk was started in daemon mode rather than
console-mode. If PJProject were compiled with assertions enabled, then
this would cause Asterisk to crash on startup.

The solution presented here is to do our own parsing of the contact URI
in order to ensure that the hostname in the URI is not too long. The
parsing does not attempt to perform a full SIP URI parse/validation,
since the hostname in the URI is what is important.

ASTERISK-25928 #close
Reported by Joshua Colp

Change-Id: Ic3d6c20ff3502507c17244a8b7e2ca761dc7fb60
2016-04-19 09:45:15 -06:00
Joshua Colp 9a22ef81af Merge "app_queue: Frequent segfaults in function can_ring_entry()" into 13 2016-04-19 09:49:11 -05:00
Joshua Colp 47adff8977 Merge "stasis_bridge.c: Update stasis bridge push diagnostic messages." into 13 2016-04-19 09:42:50 -05:00
Joshua Colp a048a0ffbd Merge "res_pjsip_transport_management: Allow unload to occur." into 13 2016-04-19 09:40:42 -05:00
Joshua Colp c922846c6d Merge "bridge_channel.c: Ignore role setup failure in channel push." into 13 2016-04-19 09:37:30 -05:00
Mark Michelson f436b9ab11 res_pjsip_registrar: Fix bad memory-ness with user_agent.
Recent changes to the PJSIP registrar resulted in tests failing due to
missing AOR_CONTACT_ADDED test events. The reason for this was that the
user_agent string had junk values in it, resulting in being unable to
generate the event.

I'm going to be honest here, I have no idea why this was happening. Here
are the steps needed for the user_agent variable to get messed up:
* REGISTER is received
* First contact in the REGISTER results in a contact being removed
* Second contact in the REGISTER results in a contact being added
* The contact, AOR, expiration, and user agent all have to be passed as
  format parameters to the creation of a string. Any subset of those
  parameters would not be enough to cause the problem.

Looking into what was happening, the thing that struck me as odd was
that the user_agent variable was meant to be set to the value of the
User-Agent SIP header in the incoming REGISTER. However, when removing a
contact, the user_agent variable would be set (via ast_strdupa inside a
loop) to the stored contact's user_agent. This means that the
user_agent's value would be incorrect when attempting to process further
contacts in the incoming REGISTER.

The fix here is to use a different variable for the stored user agent
when removing a contact. Correcting the behavior to be correct also
means the memory usage is less weird, and the issue no longer occurs.

ASTERISK-25929 #close
Reported by Joshua Colp

Change-Id: I7cd24c86a38dec69ebcc94150614bc25f46b8c08
2016-04-19 08:23:54 -05:00
Joshua Colp 49bfdc9ac0 res_pjsip_transport_management: Allow unload to occur.
At shutdown it is possible for modules to be unloaded that wouldn't
normally be unloaded. This allows the environment to be cleaned up.

The res_pjsip_transport_management module did not have the unload
logic in it to clean itself up causing the res_pjsip module to not
get unloaded. As a result the res_pjsip monitor thread kept going
processing traffic and timers when it shouldn't.

Change-Id: Ic8cadee131e3b2c436a81d3ae8bb5775999ae00a
2016-04-18 15:49:07 -03:00
Richard Mudgett f4693d1897 bridge_channel.c: Ignore role setup failure in channel push.
We have to setup the channel roles after the bridge class push is called
because the bridge class push callback may have set roles on the incoming
channel.  Since we have already partially pushed the channel into the
bridge and reversing what we have already done could be problematic, the
only thing we can do is press on to complete pushing the channel into the
bridge.

* Ignore any channel role setup errors after pushing the channel into a
bridge.  The channel may behave incorrectly in the bridge but we can no
longer abort the push at this time.

Change-Id: I08a97082b729052ee65cdca6bb730cf1289ede00
2016-04-18 10:51:56 -05:00
Jaco Kroon 22335fe18a chan_sip: Don't verify table if rtupdate=no
If rtupdate=no do not verify sipregs/peers table has updatable fields.

ASTERISK-25934 #close

Change-Id: Iaa2c53037b93daccc7e7333c40d61861847b856d
2016-04-18 05:34:51 -05:00
Joshua Colp c7732a2600 Merge "Codecs: strip codec name while parsing allow/disallow options" into 13 2016-04-18 05:31:09 -05:00
ibercom 3b9d8b60b2 app_queue: Frequent segfaults in function can_ring_entry()
ASTERISK-25888 #close

Change-Id: I007a2f2dd99823e04fb5be3ff01f02b0a2956117
2016-04-18 05:06:27 -05:00
Richard Mudgett 724acb6ce7 stasis_bridge.c: Update stasis bridge push diagnostic messages.
Change-Id: I195b14994c9dcccb9452491ca20a885d2a54605a
2016-04-15 20:24:46 -05:00
Joshua Colp 56c8182913 Merge "app_voicemail/IMAP: function 'save_to_folder' creates wrong folder" into 13 2016-04-15 13:21:21 -05:00
Mark Michelson 5f78801859 transport management: Register thread with PJProject.
The scheduler thread that kills idle TCP connections was not registering
with PJProject properly and causing assertions if PJProject was built in
debug mode.

This change registers the thread with PJProject the first time that the
scheduler callback executes.

AST-2016-005

Change-Id: I5f7a37e2c80726a99afe9dc2a4a69bdedf661283
2016-04-14 14:25:13 -05:00
George Joseph 9740277713 res_pjsip: Add serialized scheduler (res_pjsip/pjsip_scheduler.c)
There are several places that do scheduled tasks or periodic housecleaning,
each with its own implementation:

* res_pjsip_keepalive has a thread that sends keepalives.
* pjsip_distributor has a thread that cleans up expired unidentified requests.
* res_pjsip_registrar_expire has a thread that cleans up expired contacts.
* res_pjsip_pubsub uses ast_sched directly and then calls ast_sip_push_task.
* res_pjsip_sdp_rtp also uses ast_sched to send keepalives.

There are also places where we should be doing scheduled work but aren't.
A good example are the places we have sorcery observers to start registration
or qualify.  These don't work when changes are made to a backend database
without a pjsip reload.  We need to check periodically.

As a first step to solving these issues, a new ast_sip_sched facility has
been created.

ast_sip_sched wraps ast_sched but only uses ast_sched as a scheduled queue.
When a task is ready to run, ast_sip_task_pusk is called for it. This ensures
that the task is executed in a PJLIB registered thread and doesn't hold up the
ast_sched thread so it can immediately continue processing the queue.  The
serializer used by ast_sip_sched is one of your choosing or a random one from
the res_pjsip pool if you don't choose one.

Another feature is the ability to automatically clean up the task_data when the
task expires (if ever).  If it's an ao2 object, it will be dereferenced, if
it's a malloc'd object it will be freed.  This is selectable when the task is
scheduled.  Even if you choose to not auto dereference an ao2 task data object,
the scheduler itself maintains a reference to it while the task is under it's
control.  This prevents the data from disappearing out from under the task.

There are two scheduling models.

AST_SIP_SCHED_TASK_PERIODIC specifies that the invocations of the task occur at
the specific interval.  That is, every "interval" milliseconds, regardless of
how long the task takes.  If the task takes longer than the interval, it will
be scheduled at the next available multiple of interval.  For exmaple: If the
task has an interval of 60 secs and the task takes 70 secs (it better not),
the next invocation will happen at 120 seconds.

AST_SIP_SCHED_TASK_DELAY specifies that the next invocation of the task should
start "interval" milliseconds after the current invocation has finished.

Also, the same ast_sched facility for fixed or variable intervals exists.  The
task's return code in conjunction with the AST_SIP_SCHED_TASK_FIXED or
AST_SIP_SCHED_TASK_VARIABLE flags controls the next invocation start time.

One res_pjsip.h housekeeping change was made.  The pjsip header files were
added to the top.  There have been a few cases lately where I've needed
res_pjsip.h just for ast_sip calls and had compiles fail spectacularly because
I didn't add the pjsip header files to my source even though I never referenced
any pjsip calls.

Finally, a few new convenience APIs were added to astobj2 to make things a
little easier in the scheduler.  ao2_ref_and_lock() calls ao2_ref() and
ao2_lock() in one go.  ao2_unlock_and_unref() does the reverse. A few macros
were also copied from res_phoneprov because I got tired of having to duplicate
the same hash, sort and compare functions over and over again. The
AO2_STRING_FIELD_(HASH|SORT|CMP)_FN macros will insert functions suitable for
aor_container_alloc into your source.

This facility can be used immediately for the situations where we already have
a thread that wakes up periodically or do some scheduled work.  For the
registration and qualify issues, additional sorcery and schema changes would
need to be made so that we can easily detect changed objects on a periodic
basis without having to pull the entire database back to check.  I'm thinking
of a last-updated timestamp on the rows but more on this later.

Change-Id: I7af6ad2b2d896ea68e478aa1ae201d6dd016ba1c
2016-04-14 13:07:40 -06:00
Joshua Colp 13cb5ea73f Merge "res_pjsip_transport_management: Kill idle TCP connections." into 13 2016-04-14 13:02:47 -05:00
Joshua Colp 120493d5c0 Merge "Rename res_pjsip_keepalive res_pjsip_transport_management" into 13 2016-04-14 13:01:13 -05:00
Joshua Colp 6c9c714bb6 Merge "AST-2016-004: Fix crash on REGISTER with long URI." into 13 2016-04-14 13:00:14 -05:00
Mark Michelson 7fb3724a77 res_pjsip_transport_management: Kill idle TCP connections.
"Idle" here means that someone connects to us and does not send a SIP
request. PJProject will not automatically time out such connections, so
it's up to Asterisk to do it instead.

When we receive an incoming TCP connection, we will start a timer
(equivalent to transaction timer D) waiting to receive an incoming
request. If we do not receive a request in that timeframe, then we will
shut down the TCP connection.

ASTERISK-25796 #close
Reported by George Joseph

AST-2016-005

Change-Id: I7b0d303e5d140d0ccaf2f7af562071e3d1130ac6
2016-04-14 11:58:04 -05:00
Mark Michelson 707fd4dcd0 Rename res_pjsip_keepalive res_pjsip_transport_management
ASTERISK-25796
Reported by George Joseph

AST-2016-005

Change-Id: Id322a05f927392293570599730050bc677d99433
2016-04-14 07:34:13 -05:00
Mark Michelson 0b4bb19e0b AST-2016-004: Fix crash on REGISTER with long URI.
Due to some ignored return values, Asterisk could crash if processing an
incoming REGISTER whose contact URI was above a certain length.

ASTERISK-25707 #close
Reported by George Joseph

Patches:
	0001-res_pjsip-Validate-that-URIs-don-t-exceed-pjproject-.patch

AST-2016-004

Change-Id: I0ed3898fe7ab10121b76c8c79046692de3a1be55
2016-04-14 07:15:47 -05:00
Richard Mudgett f6e080c6a4 bridge_softmix.c: Fix crash if could not allocate the dsp.
Fix off nominal crash where we could not setup the channel to process
frames for the softmix bridge technology because of allocation failure.

Change-Id: Ic307a8386e46bf551e48fcd1eb97276714d56372
2016-04-13 20:59:43 -05:00
Joshua Colp 1f853df29c Merge "app_voicemail: Fix test_voicemail_notify_endl test." into 13 2016-04-13 05:20:22 -05:00
George Joseph cf15a2f2d3 pjproject: Add patch for removing strip of '[]' from header params
From the patch submitted to Teluu on 4/12/2016
<<<<<<<<<
The wholesale stripping of '[]' from header parameters causes issues if
something (like a port) occurs after the final ']'.

'[2001🅰️:b]' will correctly parse to '2001🅰️:b'
'[2001🅰️:b]:8080' will correctly parse to '2001🅰️:b' but the scanner is left
with ':8080' and parsing stops with a syntax error.

I can't even find a case where stripping the '[]' is a good thing anyway.  Even
if you continued to parse and resulted in a string that looks like this...
'2001🅰️🅱️8080', it's not valid.

This came up in Asterisk because Kamailio sends us a Contact with an alias
URI parameter that has an IPv6 address in it like this:
Contact: <sip:1171@127.0.0.1:5080;alias=[2001:1:2::3]~43691~6>
which should be legal but causes a syntax error because of the characters
after the final ']'.  Even if it didn't, the '[]' should still not be stripped.

I've run the Asterisk Test Suite for PJSIP (252 tests) many of which are IPv6
enabled.  No issues were caused by removing the code that strips the '[]'.
>>>>>>>>>>>

ASTERISK-25123 #close
Reported-by: Anthony Messina

Change-Id: I5cb33f4ebf07ee1f2b26d07caae715e2ec65595a
2016-04-12 14:41:43 -06:00
Joshua Colp 4ab4fc9141 Merge "res_pjsip_dialog_info: Add missing "direction" attribute in NOTIFY event" into 13 2016-04-12 13:28:47 -05:00
Joshua Colp daa086fae4 app_voicemail: Fix test_voicemail_notify_endl test.
The test_voicemail_notify_endl test checks the end-of-line
characters of an email message to confirm that they are consistent.
The test wrongfully assumed that reading from the email message
into a buffer will always result in more than 1 character being
read. This is incorrect. If only 1 character was read the test
would go outside of the buffer and access other memory causing
a crash.

The test now checks to ensure that 2 or more characters are read
in ensuring the test stays within the buffer.

ASTERISK-25874 #close

Change-Id: Ic2c89cea6e90f2c0bc2d8138306ebbffd4f8b710
2016-04-12 10:21:56 -05:00
zuul 70c788ec5e Merge "res_pjsip: Add headers to AMI Event ContactStatusDetail" into 13 2016-04-12 07:35:01 -05:00
Alexei Gradinari f896136460 app_voicemail/IMAP: function 'save_to_folder' creates wrong folder
If try to move message to Cust1 (number 5)
the function 'save_to_folder' tries to create Greeting folder instead of Cust1.

This patch fixed it by setting GREETINGS_FOLDER = -1

ASTERISK-24927 #close

Change-Id: I03d1a761894bcc2d130ec9b003bbcddc28e25c51
2016-04-11 22:30:53 -05:00
Alexei Gradinari 70b7673f09 res_pjsip: Add headers to AMI Event ContactStatusDetail
* Added Useragent and RegExpire headers to AMI Event
ContactStatusDetail with associated documentation.

ASTERISK-25903 #close

Change-Id: If3d121e943e588d016ba51d4eb9c6a421a562239
2016-04-11 22:24:50 -05:00
zuul cf1c0277b5 Merge "res_pjsip_outbound_publish: Add transport for outbound PUBLISH" into 13 2016-04-11 21:26:28 -05:00
zuul 600148b5b0 Merge "alembic: Remove batch operations (and sqlite support)" into 13 2016-04-11 20:43:18 -05:00
Joshua Colp 5eec2386cf Merge "core_unreal: Fix hangupcauses not getting set on Local channels" into 13 2016-04-11 18:02:42 -05:00
zuul df40173a00 Merge "res_pjsip contact: Lock expiration/addition of contacts" into 13 2016-04-11 16:29:38 -05:00
Alexei Gradinari 64ecd41c8f Codecs: strip codec name while parsing allow/disallow options
Failed registration using PJSIP/Realtime if one of the codec name
in allow/disallow option is wrong or contains space.

This patch strip codec name.

ASTERISK-25914

Change-Id: Ifdf02de94e5ddbce305640f6f0666084a3b9283d
2016-04-11 17:25:08 -04:00
Jaco Kroon 3f6c4667b8 core_unreal: Fix hangupcauses not getting set on Local channels
ASTERISK-25912 #close

Change-Id: I8e72e6894feaf36c9450f2788d205d07baec23aa
2016-04-11 14:55:32 -05:00
zuul f2edcfe62e Merge "app_voicemail/IMAP: IMAP access FATAL error: Out of memory" into 13 2016-04-11 14:10:51 -05:00
George Joseph fe7e48db03 res_pjsip contact: Lock expiration/addition of contacts
Contact expiration can occur in several places:  res_pjsip_registrar,
res_pjsip_registrar_expire, and automatically when anyone calls
ast_sip_location_retrieve_aor_contact.  At the same time, res_pjsip_registrar
may also be attempting to renew or add a contact.  Since none of this was locked
it was possible for one thread to be renewing a contact and another thread to
expire it immediately because it was working off of stale data.  This was the
casue of intermittent registration/inbound/nominal/multiple_contacts test
failures.

Now, the new named lock functionality is used to lock the aor during contact
expire and add operations and res_pjsip_registrar_expire now checks the
expiration with the lock held before deleting the contact.

ASTERISK-25885 #close
Reported-by: Josh Colp

Change-Id: I83d413c46a47796f3ab052ca3b349f21cca47059
2016-04-11 13:00:14 -05:00
zuul 736a2c303d Merge "lock: Add named lock capability" into 13 2016-04-11 12:56:40 -05:00
George Joseph 0c414eaf35 pjproject: Add patch to fix Via IPv6 parsing
There's a bug in pjproject's sip_parser where the ":" wasn't correctly
interpreted. This is causing IPv6 addresses in the "received" parameter of the
Via header to cause a syntax check failure.

This patch was submitted to Teluu on 4/10/2016.

ASTERISK-25910 #close
Reported-by: Anthony Messina

Change-Id: Ic7e4c4aa14ded61860401ec349f5177568c4d922
2016-04-10 13:16:42 -06:00
George Joseph 772ff3048f lock: Add named lock capability
Locking some objects like sorcery objects can be tricky because the underlying
ao2 object may not be the same for all callers.  For instance, two threads that
call ast_sorcery_retrieve_by_id on the same aor name might actually get 2
different ao2 objects if the underlying wizard had to rehydrate the aor from a
database. Locking one ao2 object doesn't have any effect on the other even if
those objects had locks in the first place.

Named locks allow access control by keyspace and key strings.  Now an "aor"
named "1000" can be locked and any other thread attempting to lock "aor" "1000"
will wait regardless of whether the underlying ao2 object is the same or not.
Mutex and rwlocks are supported.

This capability will initially be used to lock an aor when multiple threads may
be attempting to prune expired contacts from it.

Change-Id: If258c0b7f92b02d07243ce70e535821a1ea7fb45
2016-04-08 12:50:58 -06:00
Alexei Gradinari fd601f26f7 res_pjsip_outbound_publish: Add transport for outbound PUBLISH
The first available transport of the appropriate type is used now.
This patch adds new config option 'transport' for outbound-publish.
If transport is set then outbound PUBLISH requests will use this transport.

ASTERISK-25901 #close

Change-Id: Ib389130489b70e36795b0003fa5fd386e2680151
2016-04-08 13:44:53 -05:00
zuul e7e16b7465 Merge "pbx.c: Minor code rearangements." into 13 2016-04-08 11:18:33 -05:00
Alexei Gradinari 5f768d2a9c res_pjsip_dialog_info: Add missing "direction" attribute in NOTIFY event
BLF pickup isn't working on Cisco SPA and Snom phones
if the direction="recipient" attribute is missing in 'dialog' tag.

This patch adds direction="recipient" if extension state is
Ringing.

ASTERISK-24601 #close

Change-Id: I5b2c097ca29fd59e92ba237ca5d397cb1b0bcd8c
2016-04-08 05:48:51 -05:00
Richard Mudgett 82638fb0c7 pbx.c: Minor code rearangements.
* Pull out a loop invariant.

* Convert an else-if ladder to a switch statement.

Change-Id: I0a95cfa9474a4600b9865f7b444534d275b37e95
2016-04-07 17:12:49 -05:00
Alexei Gradinari bc320df173 app_voicemail/IMAP: IMAP access FATAL error: Out of memory
Sometimes uw-imap function 'mail_fetchbody' returns huge len
which then pass to uw-imap function 'rfc822_base64'.
uw-imap tries to allocate huge memory and abort() on fail.

This patch check the len.
If the len more than max size (128 Mbytes) log error.
This patch also set variables len, newlen to avoid uninizialezed len.
This patch also check pointer returned by rfc822_base64.

ASTERISK-25899 #close

Change-Id: I4a0e7d655f11abef6a5224e2169df6d5c1f1caca
2016-04-07 17:10:30 -05:00
Richard Mudgett 2ef8a954b3 pbx: Update doxygen for extension state watchers.
Change-Id: Id1403b12136de62a272c01bb355aef65fd2c2d1e
2016-04-07 16:16:22 -05:00
George Joseph d312fdeb1b alembic: Remove batch operations (and sqlite support)
Because SQLite doesn't support full ALTER capabilities, alembic scripts
require batch operations.  However, that capability wasn't available until
0.7.0 which some distributions haven't reached yet.  Therefore, the batch
operations introduced in commit 86d6e44cc (review 2319) have been reverted
and SQLite is unsupported again, for now anyway.

Tested the full upgrade and downgrade on MySQL/Mariadb and Postgresql.

ASTERISK-25890 #close
Reported-by: Harley Peters

Change-Id: I82eba5456736320256f6775f5b0b40133f4d1c80
2016-04-07 13:36:10 -05:00
Joshua Colp 901e8d78c4 res_pjsip_registrar_expire: Fix race condition at shutdown.
When shutting down, the PJSIP sorcery is destroyed. The registrar
expiration module queries the PJSIP sorcery to determine what
to expire. As there was no synchronization between termination
of the expiration thread and the unloading of the module it was
possible for the thread to try to access the PJSIP sorcery after
it had been destroyed.

This change ensures that the thread is shut down before allowing
the module to be considered unloaded.

Change-Id: I69fd239edbaaf160c2d37ae00d3ac06e5596fe8b
2016-04-07 13:42:01 -03:00
Joshua Colp 8207372e66 res_pjsip: Fix configuration setting of "regcontext".
Due to a merge problem two options were swapped causing the
regcontext setting to not get set.

Change-Id: Icb33edc668e7357bacbaec2861a6b5ac64edaff1
2016-04-06 18:28:49 -03:00
Jacek Konieczny 0735a4d6d7 frame.c: Copy the whole subclass in ast_frdup().
The problem is ast_frdup() does not copy whole frame.subclass for voice,
video and image frames, only the format is copied.  For video frames, the
subclass structure contains the .frame_ending flag used to put the RTP
marker where it needs to be.

ASTERISK-25894 #close

Change-Id: I812ca90e84ed5d4f473b997d0dd0d3c5a915fe33
2016-04-06 11:12:48 -05:00
Joshua Colp 587a97a515 Merge "res_pjsip: Handle deferred SDP hold/unhold properly." into 13 2016-04-06 07:03:37 -05:00
Mark Michelson c61dca6419 res_pjsip: Handle deferred SDP hold/unhold properly.
Some SIP devices indicate hold/unhold using deferred SDP reinvites. In
other words, they provide no SDP in the reinvite.

A typical transaction that starts hold might look something like this:

* Device sends reinvite with no SDP
* Asterisk sends 200 OK with SDP indicating sendrecv on streams.
* Device sends ACK with SDP indicating sendonly on streams.

At this point, PJMedia's SDP negotiator saves Asterisk's local state as
being recvonly.

Now, when the device attempts to unhold, it again uses a deferred SDP
reinvite, so we end up doing the following:

* Device sends reinvite with no SDP
* Asterisk sends 200 OK with SDP indicating recvonly on streams
* Device sends ACK with SDP indicating sendonly on streams

The problem here is that Asterisk offered recvonly, and by RFC 3264's
rules, if an offer is recvonly, the answer has to be sendonly. The
result is that the device is not taken off hold.

What is supposed to happen is that Asterisk should indicate sendrecv in
the 200 OK that it sends. This way, the device has the freedom to
indicate sendrecv if it wants the stream taken off hold, or it can
continue to respond with sendonly if the purpose of the reinvite was
something else (like a session timer refresher).

The fix here is to alter the SDP negotiator's state when we receive a
reinvite with no SDP. If the negotiator's state is currently in the
recvonly or inactive state, then we alter our local state to be
sendrecv. This way, we allow the device to indicate the stream state as
desired.

ASTERISK-25854 #close
Reported by Robert McGilvray

Change-Id: I7615737276165eef3a593038413d936247dcc6ed
2016-04-05 16:12:47 -05:00
Joshua Colp edf2ce2eff Merge "config: Allow filters when appending to a category" into 13 2016-04-05 15:29:14 -05:00
Joshua Colp 05a9b3eaf7 Merge "res_http_websocket: Make core supported." into 13 2016-04-05 11:40:54 -05:00
George Joseph 50b0922a22 config: Allow filters when appending to a category
In sorcery based config files where there are multiple categories with the same
name, you can't use the (+) operator to reliably append to a category because
config.c stops looking when it finds the first one with the same name.

Example:

[1000]
type = endpoint

[1000]
type = aor

[1000](+)
authenticate_qualify = yes

This config will fail because config.c appends authenticate_qualify to the
first category it finds, the endpoint, and that's not valid for endpoint.

Solution:

The capability to find a category that contains a certain variable already
exists so the only real change was to parse anything after the '+' that's not a
comma, as a filter string.

[1000]
type = endpoint

[1000]
type = aor

[1000](+type=aor)
authenticate_qualify = yes

This now works as expected.

Although the following example doesn't make any sense for pjsip, you can even
specify multiple filters:

[1000](+type=aor&qualify_frequency=10)

ASTERISK-25868 #close
Reported-by: Nick Repin

Change-Id: I10773da4c79db36fbf1993961992af63d3441580
2016-04-05 11:23:50 -05:00
Joshua Colp cb56ef8069 res_http_websocket: Make core supported.
Websockets are a core part of ARI support and as such this
module should also be core supported.

Change-Id: I8f9283c6a167152761b92984779bb39e3db51a9c
2016-04-05 12:21:32 -03:00
Joshua Colp 2b84290386 Merge "stringfields: Refactor to allow fields to be added to the end of structures" into 13 2016-04-05 10:10:52 -05:00
Joshua Colp bb7214180c Merge "res_rtp_asterisk: Use separate SRTP session for RTCP with DTLS" into 13 2016-04-05 05:37:09 -05:00
George Joseph f6f4cf459f stringfields: Refactor to allow fields to be added to the end of structures
String fields are great, except that you can't add new ones without breaking
ABI compatibility because it shifts down everything else in the structure.
The only alternative is to add your own char * field to the end of the
structure and manage the memory yourself which isn't ideal, especially since
you then can't use the OPT_STRINGFIELD_T type.

Background:

The reason string fields had to be declared inside the
AST_DECLARE_STRING_FIELDS block was to facilitate iteration over all declared
fields for initialization, compare and copy.  Since AST_DECLARE_STRING_FIELDS
declared the pool, then the fields, then the manager, you could use the offsets
of the pool and manager and iterate over the sequential addresses in between to
access the fields. The actual pool, field allocation and field set operations
don't actually care where the field is.  It's just iteration over the fields
that was the problem.

Solution: Extended String Fields

An extended string field is one that is declared outside the
AST_DECLARE_STRING_FIELDS block but still (anywhere) inside the parent
structure.  Other than using AST_STRING_FIELD_EXTENDED instead of
AST_STRING_FIELD, it looks the same as other string fields.  It's storage comes
from the pool and it participates in string field compare and copy operations
peformed on the parent structure. It's also a valid target for the
OPT_STRINGFIELD_T aco option type.

Implementation:

To keep track of the extended fields and make sure that ABI isn't broken, the
existing embedded_pool pointer in the manager structure was repurposed to be a
pointer to a separate header structure that contains the embedded_pool pointer
plus a vector of fields.  The length of the manager structure didn't change and
the embedded_pool pointer isn't used in the macros, only the stringfields C
code.  A side benefit of this is that changing the header structure in the
future won't break ABI.

ast_string_fields_init initializes the normal string fields and appends them to
the vector, and subsequent calls to ast_string_field_init_extended initialize
and append the extended fields. Cleanup, ast_string_fields_cmp, and
ast_string_fields_copy can now work on the vector instead of sequentially
traversing the addresses between the pool and manager.

The total size of a structure using string fields didn't change, whether using
extended fields or not, nor have the offsets of any structure members, either
inside the original block or outside.  Adding an extended field to the end of a
structure is the same as adding a char *.

Details:

The stringfield C code was pulled out from utils.c and into stringfields.c.
It just made sense.

Additional work was done in ast_string_field_init and
ast_calloc_with_stringfields to handle the allocation of the new header
structure and the vector, and the associated cleanup.  In the process some
additional NULL pointer checking was added.

A lot of work was done in stringfields.h since the logic for compare and copy
is there.  Documentation was added as well as somne additional NULL checking.

The ability to call ast_calloc_with_stringfields with a number of structures
greater than 1 never really worked.  Well, the calloc worked but there was no
way to access the additional structures or clean them up.  It was agreed that
there was no use case for requesting more than 1 structure so an ast_assert
was added to prevent it and the iteration code removed.

Testing:

The stringfield unit tests were updated to test both normal and extended
fields.  Tests for ast_string_field_ptr_set_by_fields and
ast_calloc_with_stringfields were also added.

As an ABI test, 13 was compiled from git and the res_pjsip_* modules, except
res_pjsip itself, saved off.  The patch was then added and a full compile and
install was performed.  Then the older res_pjsip_* moduled were copied over the
installed versions so res_pjsip was new and the rest were old.  No issues.

contact->aor, which is a char * at the end of contact, was then changed to an
extended string field and a recompile and reinstall was performed, again
leaving stock versions of the the res_pjsip_* modules.  Again, no issues with
the res_pjsip_* modules using the old stringfield implementation and with
contact->aor as a char *, and res_pjsip itself using the new stringfield
implementation and contact->aor being an extended string field.

Finally, several existing string fields were converted to extended string
fields to test OPT_STRINGFIELD_T.  Again, no issues.

Change-Id: I235db338c5b178f5a13b7946afbaa5d4a0f91d61
2016-04-04 18:07:18 -06:00
Joshua Colp cac6453e9a Merge "res_pjsip_mwi: Fix segv caused by 16c7d8e74a9af13f98c3c22aa9c43ce39965f6b7" into 13 2016-04-04 18:21:29 -05:00
Joshua Colp 5de637df4d Merge "install_prereq: Fix check_installed_debs remove subversion" into 13 2016-04-04 18:21:02 -05:00
George Joseph fe448ac8a7 res_pjsip_mwi: Fix segv caused by 16c7d8e74a
I forgot the new voicemail_extension wasn't a stringfield and didn't check
for NULL where I should have.

Change-Id: I029482d5c2ab72474838750461bd46b0809c90fb
2016-04-04 17:04:15 -06:00
Joshua Colp 3c91a76a3b Merge "res_pjsip_mwi: Allow subscribe to vm access extension as an alias" into 13 2016-04-04 14:16:44 -05:00
Joshua Colp 072bf78ba3 Merge "res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited" into 13 2016-04-04 14:16:02 -05:00
George Joseph 9d4318f798 install_prereq: Fix check_installed_debs remove subversion
check_installed_debs wasn't handling virtual packages like libsrtp-dev and
libresample-dev and on multiarch systems it was accidentally filtering out all
packages if any :i386 packages were found instead of just filtering out the
:i386 packages themselves.

Change-Id: Ifd68da0d1ee30cc84df14de3f9b9079d7c3cecda
2016-04-04 13:45:07 -05:00
George Joseph 566601837e utils.c: Fix typo in handle_show_locks
ast_cli_allow_on_shutdown(e) should have been ast_cli_allow_at_shutdown(e).

Change-Id: I4f092495c0b2bfd85c2651e0b5877bf4d05d9faf
2016-04-01 12:09:50 -06:00
zuul e9db9ebeae Merge "chan_sip: Do not send all codecs on INVITE. Do not break on Session-Timers." into 13 2016-03-31 17:03:53 -05:00
zuul e8c6cf8947 Merge "res_stasis: Add control ref to playback and recording structs." into 13 2016-03-31 13:39:03 -05:00
Joshua Colp b602886c6b Merge "pjproject_bundled: Fix use of LDCONFIG for shared library link creation" into 13 2016-03-31 12:35:49 -05:00
Joshua Colp cb9b7f6b1b Merge "res_stasis: Fix crash on a hanging up channel." into 13 2016-03-31 08:16:15 -05:00
Joshua Colp 2b5dfe668a Merge "res_stasis_recording.c: Cleanup stasis_app_recording_find_by_name()." into 13 2016-03-31 07:16:10 -05:00
Joshua Colp 6ad59a69f8 Merge "res_rtp_asterisk: Fix placement of txcount increment" into 13 2016-03-31 07:04:48 -05:00
zuul 61d03df059 Merge "core_unreal.c: Add clarification comment about channel ref." into 13 2016-03-31 00:48:46 -05:00
zuul 6be8b89b2f Merge "res_stasis.c: Protect channel datastore list from stasis end." into 13 2016-03-31 00:48:38 -05:00
George Joseph 964f54bd5d pjproject_bundled: Fix use of LDCONFIG for shared library link creation
LDCONFIG apparently isn't set to something sane on all systems so the creation
of the shared library links fails.  Instead of just testing for non-blank,
main/Makefile now checks that LDCONFIG is actually executable and reverts to
LN if it isn't.

This applies to both libasteriskpj and libasteriskssl.

Thanks to 'abelbeck' for pointing out that the issue was LDCONFIG.

ASTERISK-25873 #close
Reported-by: Hans van Eijsden

Change-Id: I25b76379bc637726ec044b2c0e709b56b3701729
2016-03-30 17:43:56 -06:00
Richard Mudgett 5f73c2ef0a res_stasis.c: Protect channel datastore list from stasis end.
Change-Id: Ifadc469590bd4d5368e19d3763db3bd1f80fdb95
2016-03-30 16:33:03 -05:00
Richard Mudgett 74d63f56ee res_ari: Cannot get control also means channel is unavailable.
The only caller of ari_bridges_play_found() has this note:

If ari_bridges_play_found fails because the channel is unavailable for
playback, The channel will be removed from the playback list soon.  We can
keep trying to get channels from the list until we either get one that
will work or else there isn't a channel for this bridge anymore, in which
case we'll revert to ari_bridges_play_new.

Change-Id: Ib068141b367ccaa17be0dab4181c98e26c5127d6
2016-03-30 16:31:05 -05:00
Richard Mudgett cf49b44090 res_stasis_recording.c: Cleanup stasis_app_recording_find_by_name().
Change-Id: Ic7d93c402c498677a122505558859c853d4e5ac7
2016-03-30 16:28:58 -05:00
Richard Mudgett 7f53f1d89e core_unreal.c: Add clarification comment about channel ref.
Change-Id: I0be0627260cd8d6b6c3cc345949dcfdf32eff1f3
2016-03-30 16:26:36 -05:00
Richard Mudgett ecf4102d02 res_stasis: Add control ref to playback and recording structs.
The stasis_app_playback and stasis_app_recording structs need to have a
struct stasis_app_control ref.  Other threads can get a reference to the
playback and recording structs from their respective global container.
These other threads can then use the control pointer they contain after
the control struct has gone.

* Add control ref to stasis_app_playback and stasis_app_recording structs.

With the refs added, the control command queue can now have a circular
control reference which will cause the control struct to never get
released if the control's command queue is not flushed when the channel
leaves the Stasis application.  Also the command queue needs better
protection from adding commands if the control->is_done flag is set.

* Flush the control command queue on exit.

ASTERISK-25882 #close

Change-Id: I3cf1fb59cbe6f50f20d9e35a2c07ac07d7f4320d
2016-03-30 16:23:40 -05:00
Richard Mudgett a179aba65e res_stasis: Fix crash on a hanging up channel.
* Give the struct stasis_app_control ao2 object a ref to the channel held
in the object.  Now the channel will still be around if a thread needs to
post a stasis message instead of crash because the topic was destroyed.

* Moved stopping any lingering silence generator out of the struct
stasis_app_control destructor and made it a part of exiting the Stasis
application.  Who knows which thread the destructor will be called under
so it cannot affect the channel's silence generator.  Not only was the
channel unprotected when the silence generator was stopped, stasis may no
longer even control the channel.

ASTERISK-25882

Change-Id: I21728161b5fe638cef7976fa36a605043a7497e4
2016-03-30 16:23:40 -05:00
George Joseph 16c7d8e74a res_pjsip_mwi: Allow subscribe to vm access extension as an alias
Background:

If your extension is 1000 and the voicemail access extension is 1571 and you
dial 1571, usually a dialplan rule calls voicemailmain with your extension and
you are placed directly in your mailbox.  Therefore most admins program the
voicemail (or other speed dial) button on their phones to the access extension.
Some phones (Snom at least) use whatever is programmed there to also subscribe
for MWI and so can't dial one number and subscribe to another.  This works fine
in chan_sip because chan_sip completely ignores the user portion of the
SUBSCRIBE message request URI.  If it can match the peer, is subscribes to the
peer's mailbox.  The user could be set to anything or nothing and you'd still
get subscribed to your mailbox.

Issue:

chan_pjsip actually uses the user portion of the URI to find an aor and its
mailboxes.  Therefore a subscribe to 1571 results in a 404.  Sure, you can
create an aor for 1571 but you certainly can't add your entire voicemail
system's mailboxes to it and everyone would get notified of every MWI.

Solution:

When an MWI subscribe comes in and an aor can't be found that matches the
resource directly, check the resource against the endpoint's aors.  If an aor
is found that has a voicemail_extension that matches the resource, use it.

ASTERISK-25865
Reported-by: Ross Beer

Change-Id: I770ea185f751f1ada888fafb4b452115f1c06e9e
2016-03-30 13:31:38 -06:00
George Joseph d8f0bc3572 res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited
res_pjsip_mwi was missing the chan_sip "vmexten" functionality which adds
the Message-Account header to the MWI NOTIFY.  Also, specifying mailboxes
on endpoints for unsolicited mwi and on aors for subscriptions required
that the admin know in advance which the client wanted.  If you specified
mailboxes on the endpoint, subscriptions were rejected even if you also
specified mailboxes on the aor.

Voicemail extension:
* Added a global default_voicemail_extension which defaults to "".
* Added voicemail_extension to both endpoint and aor.
* Added ast_sip_subscription_get_dialog for support.
* Added ast_sip_subscription_get_sip_uri for support.

When an unsolicited NOTIFY is constructed, the From header is parsed, the
voicemail extension from the endpoint is substituted for the user, and the
result placed in the Message-Account field in the body.

When a subscribed NOTIFY is constructed, the subscription dialog local uri
is parsed, the voicemail_extension from the aor (looked up from the
subscription resource name) is substituted for the user, and the result
placed in the Message-Account field in the body.

If no voicemail extension was defined, the Message-Account field is not added
to the NOTIFY body.

mwi_subscribe_replaces_unsolicited:
* Added mwi_subscribe_replaces_unsolicited to endpoint.

The previous behavior was to reject a subscribe if a previous internal
subscription for unsolicited MWI was found for the mailbox.  That remains the
default.  However, if there are mailboxes also set on the aor and the client
subscribes and mwi_subscribe_replaces_unsolicited is set, the existing internal
subscription is removed and replaced with the external subscription.  This
allows an admin to configure mailboxes on both the endpoint and aor and allows
the client to select which to use.

ASTERISK-25865 #close
Reported-by: Ross Beer

Change-Id: Ic15a9415091760539c7134a5ba3dc4a6a1217cea
2016-03-30 12:17:29 -06:00
Joshua Colp e1fdb0a6da Merge "res_pjsip/pjsip_options: Fix From generation on outgoing OPTIONS" into 13 2016-03-30 10:52:44 -05:00
George Joseph 8dc8d6ceb8 res_rtp_asterisk: Fix placement of txcount increment
Commit 1bce690ccb was incrementing txcount
for rtcp packets as well as rtp packets and that was causing sender reports
to be generated instead of receiver reports in cases where no rtp was actually
being sent.

Moved the txcount increment from __rtp_sento, which handles both rtp and rtcp,
to rtp_sento which only handles rtp packets.

Discovered by the hep/rtcp-receiver test.

Change-Id: Ie442e4bb947a68847a676497021ba10ffaf376d5
2016-03-30 08:46:32 -06:00
George Joseph c7eb18d865 chan_pjsip: Add 'pjsip show channelstats'
Added the ability to show channel statistics to chan_pjsip (cli_functions.c)

Moved the existing 'pjsip show channel(s)' functionality from
pjsip_configuration to cli_functions.c.  The stats needed chan_pjsip's
private header so it made sense to move the existing channel commands as well.

Now using stasis_cache_dump to get the channel snapshots rather than retrieving
all endpoints, then getting each one's channel snapshots.  Much more efficient.

Change-Id: I03b114522126d27434030b285bf6d531ddd79869
2016-03-29 14:35:17 -05:00
zuul e595f02f83 Merge "res_rtp_asterisk: Fix packet stats on bridged connection" into 13 2016-03-29 14:28:36 -05:00
George Joseph 1583559a06 res_pjsip/pjsip_options: Fix From generation on outgoing OPTIONS
No one seemed to notice but every time an OPTIONS goes out, it goes
out with a From of "asterisk" (or whatever the default from_user is set to),
even if you specify an endpoint.

The issue had several causes...
qualify_contact is only called with an endpoint if called from the CLI.
If the endpoint is NULL, qualify_contact only looks up the endpoint if
authenticate_qualify=yes. Even then, it never passes it on to
ast_sip_create_request where the From header is set.  Therefore From
is always "asterisk" (or whatever the default from_user is set to).
Even if ast_sip_create_request were to get an endpoint, it only sets
the From if endpoint->from_user is set.

The fix is 4 parts...

First, create_out_of_dialog_request was modified to use the endpoint id
if endpoint was specified and from_user is not set.

Second, qualify_contact was modified to always look up an endpoint if
one wasn't specified regardless of authenticate_qualify.  It then passes
the endpoint on to create_out_of_dialog_request.

Third (and most importantly), find_an_endpoint was modified to find
an endpoint by using an "aors LIKE %contact->aor%" predicate with
ast_sorcery_retrieve_by_fields.  As such, this patch will only work
if the sorcery realtime optimizations patch goes in.  Otherwise we'd
be pulling the entire endpoints database every time we send an OPTIONS.
Since we already know the contact's aor, the on_endpoint callback was also
modified to just check if the contact->aor is an exact match to one of
the endpoint's.

Finally, since we now have an endpoint for every OPTIONS request,
res_pjsip/endpt_send_request (which handles out-of-dialog reqests) was
updated to get the transport from the endpoint and set it on tdata.
Now the correct transport is used.

Change-Id: I2207e12bb435e373bd1e03ad091d82e5aba011af
2016-03-29 13:59:56 -05:00
Joshua Colp 7b7e3909e4 Merge "sorcery/res_pjsip: Refactor for realtime performance" into 13 2016-03-29 13:16:17 -05:00
Joshua Colp e0a916d6f5 Merge "app_echo: forward and generate VIDUPDATE frames" into 13 2016-03-29 12:46:38 -05:00
Jacek Konieczny 0cfab30b28 res_rtp_asterisk: Use separate SRTP session for RTCP with DTLS
Asterisk uses separate UDP ports for RTP and RTCP traffic and RFC 5764
explicitly states:

  There MUST be a separate DTLS-SRTP session for each distinct pair of
  source and destination ports used by a media session

This means RTP keying material cannot be used for DTLS RTCP, which was
the reason why RTCP encryption would fail.

ASTERISK-25642

Change-Id: I7e8779d8b63e371088081bb113131361b2847e3a
2016-03-29 09:29:45 -05:00
zuul 3528a9a42e Merge "res_parking: Misc fixes." into 13 2016-03-29 08:53:45 -05:00
Jacek Konieczny 6a9c18fb59 app_echo: forward and generate VIDUPDATE frames
When using app_echo via WebRTC with VP8 video the video would appear
only after a few minutes, because there would be nothing to request
a full reference frame.

This fixes the problem in both ways:
- echos any VIDUPDATE frames received on the channel
- sends one such frame when first video frame is to be forwarded

This makes the echo work with Firefox and Chrome WebRTC implementation.

ASTERISK-25867 #close

Change-Id: I73bda87bf7532ee8bfb28d917045a21034908c1e
2016-03-29 11:20:17 +02:00
George Joseph 1bce690ccb res_rtp_asterisk: Fix packet stats on bridged connection
rxcount, txcount, rxoctetcount and txoctetcount weren't being calculated
for bridged streams because the calulations were being done after the
bridged short-circuit.  Actually, rxoctetcount wasn't ever being calculated.

Moved the calculations so they occur for all valid received packets and
all transmitted packets.  Also added rxoctetcount and txoctetcount to
ast_rtp_instance_stat.

Change-Id: I08fb06011a82d38c3b4068867a615068fbe59cbb
2016-03-28 11:23:08 -06:00
Joshua Colp c88c09a920 Merge "res_parking: Fix blind transfer dynamic lots creation." into 13 2016-03-26 14:25:53 -05:00
zuul 3974bf1ef0 Merge "res_parking: Cleanup find_channel_parking_lot_name() usage." into 13 2016-03-26 11:33:01 -05:00
Richard Mudgett 50f90d4099 res_parking: Fix blind transfer dynamic lots creation.
Blind transfers to a recognized parking extension need to use the parker's
channel variable values to create the dynamic parking lot.  This is
because there is always only one parker while the parkee may actually be a
multi-party bridge.  A multi-party bridge can never supply the needed
channel variables to create the dynamic parking lot.  In the multi-party
bridge blind transfer scenario, the parker's CHANNEL(parkinglot) value and
channel variables are inherited by the local channel used to park the
bridge.

* In park_common_setup(), make use the parker instead of the parkee to
supply the dynamic parking lot channel variable values.  In all but one
case, the parkee is the same as the parker.  However, in the recognized
parking extension blind transfer scenario for a two party bridge they are
different channels.  For consistency, we need to use the parker channel.

* In park_local_transfer(), pass the CHANNEL(parkinglot) value to the
local channel when blind transferring a multi-party bridge to a recognized
parking extension.

* When a local channel starts a call, the Local;2 side needs to inherit
the CHANNEL(parkinglot) value from Local;1.

The DTMF one-touch parking case wasn't even trying to create dynamic
parking lots before it aborted the attempt.

* In parking_park_call(), add missing code to create a dynamic parking
lot.

A DTMF bridge hook is documented as returning -1 to remove the hook.
Though the hook caller is really coded to accept non-zero.  See the
ast_bridge_hook_callback typedef.

* In feature_park_call(), don't remove the DTMF one-touch parking hook
because of an error.

ASTERISK-24605 #close
Reported by:  Philip Correia
Patches:
      call_park.patch (license #6672) patch uploaded by Philip Correia

Change-Id: I221d3a8fcc181877a1158d17004474d35d8016c9
2016-03-26 02:43:48 -05:00
George Joseph 5aa5c49413 sorcery/res_pjsip: Refactor for realtime performance
There were a number of places in the res_pjsip stack that were getting
all endpoints or all aors, and then filtering them locally.

A good example is pjsip_options which, on startup, retrieves all
endpoints, then the aors for those endpoints, then tests the aors to see
if the qualify_frequency is > 0.  One issue was that it never did
anything with the endpoints other than retrieve the aors so we probably
could have skipped a step and just retrieved all aors. But nevermind.

This worked reasonably well with local config files but with a realtime
backend and thousands of objects, this was a nightmare.  The issue
really boiled down to the fact that while realtime supports predicates
that are passed to the database engine, the non-realtime sorcery
backends didn't.

They do now.

The realtime engines have a scheme for doing simple comparisons. They
take in an ast_variable (or list) for matching, and the name of each
variable can contain an operator.  For instance, a name of
"qualify_frequency >" and a value of "0" would create a SQL predicate
that looks like "where qualify_frequency > '0'".  If there's no operator
after the name, the engines add an '=' so a simple name of
"qualify_frequency" and a value of "10" would return exact matches.

The non-realtime backends decide whether to include an object in a
result set by calling ast_sorcery_changeset_create on every object in
the internal container.  However, ast_sorcery_changeset_create only does
exact string matches though so a name of "qualify_frequency >" and a
value of "0" returns nothing because the literal "qualify_frequency >"
doesn't match any name in the objset set.

So, the real task was to create a generic string matcher that can take a
left value, operator and a right value and perform the match. To that
end, strings.c has a new ast_strings_match(left, operator, right)
function.  Left and right are the strings to operate on and the operator
can be a string containing any of the following: = (or NULL or ""), !=,
>, >=, <, <=, like or regex.  If the operator is like or regex, the
right string should be a %-pattern or a regex expression.  If both left
and right can be converted to float, then a numeric comparison is
performed, otherwise a string comparison is performed.

To use this new function on ast_variables, 2 new functions were added to
config.c.  One that compares 2 ast_variables, and one that compares 2
ast_variable lists.  The former is useful when you want to compare 2
ast_variables that happen to be in a list but don't want to traverse the
list.  The latter will traverse the right list and return true if all
the variables in it match the left list.

Now, the backends' fields_cmp functions call ast_variable_lists_match
instead of ast_sorcery_changeset_create and they can now process the
same syntax as the realtime engines.  The realtime backend just passes
the variable list unaltered to the engine.  The only gotcha is that
there's no common realtime engine support for regex so that's been noted
in the api docs for ast_sorcery_retrieve_by_fields.

Only one more change to sorcery was done...  A new config flag
"allow_unqualified_fetch" was added to reg_sorcery_realtime.
"no": ignore fetches if no predicate fields were supplied.
"error": same as no but emit an error. (good for testing)
"yes": allow (the default);
"warn": allow but emit a warning. (good for testing)

Now on to res_pjsip...

pjsip_options was modified to retrieve aors with qualify_frequency > 0
rather than all endpoints then all aors.  Not only was this a big
improvement in realtime retrieval but even for config files there's an
improvement because we're not going through endpoints anymore.

res_pjsip_mwi was modified to retieve only endpoints with something in
the mailboxes field instead of all endpoints then testing mailboxes.

res_pjsip_registrar_expire was completely refactored.  It was retrieving
all contacts then setting up scheduler entries to check for expiration.
Now, it's a single thread (like keepalive) that periodically retrieves
only contacts whose expiration time is < now and deletes them.  A new
contact_expiration_check_interval was added to global with a default of
30 seconds.

Ross Beer reports that with this patch, his Asterisk startup time dropped
from around an hour to under 30 seconds.

There are still objects that can't be filtered at the database like
identifies, transports, and registrations.  These are not going to be
anywhere near as numerous as endpoints, aors, auths, contacts however.

Back to allow_unqualified_fetch.  If this is set to yes and you have a
very large number of objects in the database, the pjsip CLI commands
will attempt to retrive ALL of them if not qualified with a LIKE.
Worse, if you type "pjsip show endpoint <tab>" guess what's going to
happen? :)  Having a cache helps but all the objects will have to be
retrieved at least once to fill the cache.  Setting
allow_unqualified_fetch=no prevents the mass retrieve and should be used
on endpoints, auths, aors, and contacts.  It should NOT be used for
identifies, registrations and transports since these MUST be
retrieved in bulk.

Example sorcery.conf:

[res_pjsip]
endpoint=config,pjsip.conf,criteria=type=endpoint
endpoint=realtime,ps_endpoints,allow_unqualified_fetch=error

ASTERISK-25826 #close
Reported-by: Ross Beer
Tested-by: Ross Beer

Change-Id: Id2691e447db90892890036e663aaf907b2dc1c67
2016-03-25 19:19:39 -06:00
Richard Mudgett 05fc3a96d1 res_parking: Cleanup find_channel_parking_lot_name() usage.
Change-Id: I8f7a8890aef27824301c642d4d15407ac83e6f02
2016-03-25 18:30:41 -05:00
Richard Mudgett a4189763ab res_parking: Misc fixes.
res/parking/parking_applications.c:

* Add malloc fail checks in setup_park_common_datastore().

* Fix playing parking failed announcement to only happen on non-blind
transfers in park_app_exec().  It could never go out before because a test
was provedly always false.

res/parking/parking_bridge.c:

* Fix NULL tolerance in generate_parked_user() because
bridge_parking_push() can theoretically pass a NULL parker channel if the
parker channel went away for some reason.

* Clarify some weird code dealing with blind_transfer in
bridge_parking_push().

res/parking/parking_bridge_features.c:

* Made park_local_transfer() set BLINDTRANSFER on the Local;1 channel
which will be bulk copied to the Local;2 channel on the subsequent
ast_call().  The additional advantage is if the parker channel has the
BLINDTRANSFER and ATTENDEDTRANSFER variables set they are now guaranteed
to be overridden.

res/parking/parking_manager.c:

* Fix AMI Park action input range checking of the Timeout header in
manager_park().

* Reduced locking scope to where needed in manager_park().

res/res_parking.c:

* Fix some off nominal missing unlocks by eliminating the returns.

Change-Id: Ib64945bc285acb05a306dc12e6f16854898915ca
2016-03-25 18:27:20 -05:00
Philip Correia 6f95b5eda1 res_parking: Update parking documentation for dynamic parking lots.
* Remove duplicate res_parking.conf courtesytone config option
documentation.

ASTERISK-24596 #close
Reported by:  Philip Correia

ASTERISK-24605
Reported by:  Philip Correia
Patches:
      call_park_app_doc.patch (license #6672) patch uploaded by Philip Correia

Change-Id: I90a92a891c6494dc08173e675856afcc4764c5b5
2016-03-25 18:24:30 -05:00
zuul 01150597f6 Merge "pjproject-bundled: Cleanups for reported issues" into 13 2016-03-25 18:11:37 -05:00
zuul f3b154d7d2 Merge "progdocs: Exclude ./third-party from documentation generation" into 13 2016-03-25 15:05:39 -05:00
zuul 096e7a88ce Merge "core/logging: Fix broken syslog levels on older glibc." into 13 2016-03-25 13:38:37 -05:00
zuul 36d016b1ab Merge "musiconhold: Only warn if music class is not found in memory and database." into 13 2016-03-24 21:13:57 -05:00
zuul 8271a06dde Merge "Restrict CLI/AMI commands on shutdown." into 13 2016-03-24 19:55:50 -05:00
Alexander Traud 81ce60f6d4 chan_sip: Do not send all codecs on INVITE. Do not break on Session-Timers.
Asterisk 13.7.0 included a fix for ASTERISK-24543, not to send all those
codecs, which the caller did not request/support. That fix was not complete
because on the second Session Timer all codecs were sent again. Some VoIP/SIP
clients interpreted that complete codec-list as a change in the SIP session.
Because of that, Asterisk did not send the RTP audio via NAT anymore which
created a non-audio scenario after the second Session Timer fired.

ASTERISK-24543 #close

Change-Id: I1881827816ab7fd47eb4287a95961179b34a0b66
2016-03-24 14:23:11 -05:00
zuul d3af5320d4 Merge "config: fix flags in uint option handler" into 13 2016-03-24 13:28:21 -05:00
Gianluca Merlo c6e4c48e67 config: fix flags in uint option handler
The configuration unsigned integer option handler sets flags for the
parser as if the option should be a signed integer (PARSE_INT32),
leading to errors on "out of range" values. Fix flags (PARSE_UINT32).

A fix to res_pjsip is also present which stops invalid flags from
being passed when registering sorcery object fields for qualify
status.

ASTERISK-25612 #close

Change-Id: I96b539336275e0e72a8e8033487d2c3344debd3e
2016-03-24 13:14:33 -03:00
Mark Michelson 59c8e189fd Restrict CLI/AMI commands on shutdown.
During stress testing, we have frequently seen crashes occur because a
CLI or AMI command attempts to access information that is in the process
of being destroyed.

When addressing how to fix this issue, we initially considered fixing
individual crashes we observed. However, the changes required to fix
those problems would introduce considerable overhead to the nominal
case. This is not reasonable in order to prevent a crash from occurring
while Asterisk is already shutting down.

Instead, this change makes it so AMI and CLI commands cannot be executed
if Asterisk is being shut down. For AMI, this is absolute. For CLI,
though, certain commands can be registered so that they may be run
during Asterisk shutdown.

ASTERISK-25825 #close

Change-Id: I8887e215ac352fadf7f4c1e082da9089b1421990
2016-03-24 09:29:07 -05:00
Walter Doekes ff3eebf454 musiconhold: Only warn if music class is not found in memory and database.
The log message when a MusicOnHold music class was not found was changed
from debug level to WARNING level in Asterisk 11.19 and 13.5.  For those
using realtime musiconhold, this message is wrong because it warns
before checking the database.

This changeset delays the warning until after the database has been
checked.

Reported-by: Conrad de Wet
ASTERISK-25444 #close

Change-Id: I6cfb2db2f9cfbd2bb3d30566ecae361c4abf6dbf
2016-03-24 13:45:06 +01:00
Walter Doekes 82e55e4883 core/logging: Fix broken syslog levels on older glibc.
The fix to ASTERISK-25407 introduced the usage of LOG_MAKEPRI. However
this macro is broken in older glibc (< 2.17); it would left-shift the
facility a second time, causing the resultant priority to become
invalid.

The syslog manpage mentions nothing about LOG_MAKEPRI and suggests this:

    The priority argument is formed by ORing the facility and the level
    values [...].

ASTERISK-25510 #close
Reported by: Michael Newton

Change-Id: Ia89debe7fac5ad090c7ef595c0707f31bb1e3d03
2016-03-24 06:34:20 -05:00
George Joseph d963a33749 pjproject-bundled: Cleanups for reported issues
PortAudio should no longer be required
PJSIP_MAX_PKT_LEN is now 6000
Older autoconf issue fixed. (CentOS 6)

Change-Id: I463fa9586cbe7c6b3b603289f535bd8e361611dd
2016-03-23 08:02:13 -06:00
Francesco Castellano c5170677e7 chan_sip.c: Space after port causes unnecessary resolution attempt
check_via() already skips leading blanks where the sent-by address (with the
optional port) should be placed.

Since RFC 3261 allows for blanks between the port ant the Via parameters:
> https://tools.ietf.org/html/rfc3261#section-20.42
(actually it allows a lot of blanks more ;-)). I just switched from
ast_skip_blanks() to ast_strip() on the local copy of the string.

ASTERISK-21301 #close

Change-Id: Ie5b8fe5a07067b7c0dc9bcdd1707e99b23b02b06
2016-03-23 08:58:43 -05:00
zuul 7d6782cc0f Merge "func_aes: fix misuse of strlen on binary data" into 13 2016-03-21 15:19:01 -05:00
George Joseph 51deadee38 progdocs: Exclude ./third-party from documentation generation
We don't need pjproject's documentation embedded in Asterisk's.

Change-Id: Iea6f5a621c0f4e3168dda3321eaab258d9f24a17
2016-03-19 16:49:25 -06:00
Gianluca Merlo aa2fcd244e func_aes: fix misuse of strlen on binary data
The encryption code for AES_ENCRYPT evaluates the length of the data to
be encoded in base64 using strlen. The data is binary, thus the length
of it can be underestimated at the first NULL character.
Reuse the write pointer offset to evaluate it, instead.

ASTERISK-25857 #close

Change-Id: If686b5d570473eb926693c73461177b35b13b186
2016-03-19 07:21:14 -05:00
Kevin Harwell 6a40520fe9 chan_pjsip: ref leak when checking direct_media_glare
Fix the reference leak introduced in the following commit:

9444ddadf8

ASTERISK-25849

Change-Id: I5cfefd5ee6c1c3a1715c050330aaa10e4d2a5e85
2016-03-18 15:09:30 -05:00
Kevin Harwell 9444ddadf8 chan_pjsip: transfers with direct media reinvite has wrong address/port
During a transfer involving direct media a race occurs between when the
transferer channel is swapped out, initiating rtp changes/updates, and the
subsequent reinvites.

When Alice, after speaking with Charlie (Bob is on hold), connects Bob and
Charlie invites are sent to each in order to establish the call between them.
Bob is taken off hold and Charlie is told to have his media flow through
Asterisk. However, if before those invites go out the bridge updates Bob's
and/or Charlie's rtp information with direct media data (i.e. address, port)
then the invite(s) will contain the remote data in the SDP instead of the
Asterisk data.

The race occurs in the native bridge glue code when updating the peer. The
direct_media_address can get set twice before sending out the first invite
during call connection. This can happen because the checking/setting of the
direct_media_address happened in one thread while the sending of the invite(s)
happened in another thread.

This fix removes the race condition by moving the checking/setting of the
direct_media_address to be in the same thread as the sending of the invites(s).
This serializes the checking/setting and sending so they can no longer happen
out of order.

ASTERISK-25849 #close

Change-Id: Idfea590175e74f401929a601dba0c91ca1a7f873
2016-03-18 11:16:32 -05:00
zuul 65ad761130 Merge "install_prereq: Check if is installed aptitude otherwise to install." into 13 2016-03-17 17:42:42 -05:00
zuul d444a2713f Merge "install_prereq: Update repositories before install on Debian systems" into 13 2016-03-17 17:31:13 -05:00
Rodrigo Ramírez Norambuena 88240f98d9 install_prereq: Update repositories before install on Debian systems
When to install packages the indexed local is more old of the
version of software on the repository they have been upgraded by security
update then get the package will give 404 not found.

The patch prevent by update local index to repository for aptitude before
install.

ASTERISK-25495 #close

Reporte by: Rodrigo Ramírez Norambuena

Change-Id: I645959e553aac542805ced394cac2dca964051fa
(cherry picked from commit 88f3dbaec9)
2016-03-17 14:19:12 -05:00
Rodrigo Ramírez Norambuena efcf9a96db install_prereq: Check if is installed aptitude otherwise to install.
If in Debian or system based, dont have aptitude installed the script do
nothing. This patch checked if aptitude  installed, if not installed.

Also, if execute script with all packages installed yet, the script not show
nothing and return exit 1 because the command 'grep' get nothing from pipe from
'awk'.

ASTERISK-25113 #close
Reported By: Rodrigo Ramírez Norambuena <decipher.hk@gmail.com>

Change-Id: Iebdff55805d3917166e5e08e0a1e2176f36ff27f
(cherry picked from commit 6737ded058)
2016-03-17 14:19:03 -05:00
Sergio Medina Toledo 2b1b8e382a res_pjsip_refer.c: Fix seg fault in process of Refer-to header.
The "Refer-to" header of an incoming REFER request is parsed by
pjsip_parse_uri().  That function requires the URI parameter to be NULL
terminated.  Unfortunately, the previous code added the NULL terminator by
overwriting memory that may not be safe.  The overwritten memory results
could be benign, memory corruption, or a segmentation fault.  Now the URI
is NULL terminated safely by copying the URI to a new chunk of memory with
the correct size to be NULL terminated.

ASTERISK-25814 #close

Change-Id: I32565496684a5a49c3278fce06474b8c94b37342
2016-03-17 13:12:29 -05:00
zuul aeef52db9f Merge "Add initial support to build Docker images" into 13 2016-03-17 12:34:03 -05:00
Richard Mudgett de04308ae4 chan_sip.c: Fix mwi resub deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023 #close

Change-Id: I96d429c57a48861fd8bde63dd93db4e92dc3adb6
2016-03-16 14:53:00 -05:00
Richard Mudgett 5f6627a8a4 chan_sip.c: Fix registration timeout and expire deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023

Change-Id: I2e40de89efc8ae6e8850771d089ca44bc604b508
2016-03-16 14:53:00 -05:00
Richard Mudgett 32bd7a64f9 chan_sip.c: Fix t38id deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023

Change-Id: If595e4456cd059d7171880c7f354e844c21b5f5f
2016-03-16 14:53:00 -05:00
Richard Mudgett 43556b800b chan_sip.c: Fix reinviteid deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023

Change-Id: I9c11b9d597468f63916c99e1dabff9f4a46f84c1
2016-03-16 14:53:00 -05:00
Richard Mudgett 38c1cdab2c chan_sip.c: Fix packet retransid deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

* Fix retrans_pkt() to call check_pendings() with both the owner channel
and the private objects locked as required.

* Refactor dialog retransmission packet list to safely remove packet
nodes.  The list nodes are now ao2 objects.  The list has a ref and the
scheduled entry has a ref.

ASTERISK-25023

Change-Id: I50926d81be53f4cd3d572a3292cd25f563f59641
2016-03-16 14:53:00 -05:00
Richard Mudgett e4ad55c888 chan_sip.c: Fix waitid deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

* Made always run check_pendings() under the scheduler thread so scheduler
ids can be checked safely.

ASTERISK-25023

Change-Id: Ia834d6edd5bdb47c163e4ecf884428a4a8b17d52
2016-03-16 14:53:00 -05:00
Richard Mudgett 98d5669c28 chan_sip.c: Fix session timers deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023

Change-Id: I6d65269151ba95e0d8fe4e9e611881cde2ab4900
2016-03-16 14:53:00 -05:00
Richard Mudgett 9cb8f73226 chan_sip.c: Fix autokillid deadlock potential.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

* Fix clearing autokillid in __sip_autodestruct() even though we could
reschedule.

ASTERISK-25023

Change-Id: I450580dbf26e2e3952ee6628c735b001565c368f
2016-03-16 14:53:00 -05:00
Richard Mudgett c5c7f48a15 chan_sip.c: Fix provisional_keepalive_sched_id deadlock.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Stopping a scheduled event can result in a deadlock if the scheduled event
is running when you try to stop the event.  If you hold a lock needed by
the scheduled event while trying to stop the scheduled event then a
deadlock can happen.  The general strategy for resolving the deadlock
potential is to push the actual starting and stopping of the scheduled
events off onto the scheduler/do_monitor() thread by scheduling an
immediate one shot scheduled event.  Some restructuring may be needed
because the code may assume that the start/stop of the scheduled events is
immediate.

ASTERISK-25023

Change-Id: I98a694fd42bc81436c83aa92de03226e6e4e3f48
2016-03-16 14:53:00 -05:00
Richard Mudgett f959d84dfd chan_sip.c: Adjust how dialog_unlink_all() stops scheduled events.
This patch is part of a series to resolve deadlocks in chan_sip.c.

* Make dialog_unlink_all() unschedule all items at once in the sched
thread.

ASTERISK-25023

Change-Id: I7743072fb228836e8228b72f6dc46c8cc50b3fb4
2016-03-16 14:53:00 -05:00
Richard Mudgett 5f3225ddcc chan_sip.c: Clear scheduled immediate events on unload.
This patch is part of a series to resolve deadlocks in chan_sip.c.

The reordering of chan_sip's shutdown is to handle any immediate events
that get put onto the scheduler so resources aren't leaked.  The typical
immediate events at this time are going to be concerned with stopping
other scheduled events.

ASTERISK-25023

Change-Id: I3f6540717634f6f2e84d8531a054976f2bbb9d20
2016-03-16 14:53:00 -05:00
Richard Mudgett 7a74971771 sip/dialplan_functions.c: Fix /channels/chan_sip/test_sip_rtpqos crash.
This patch is part of a series to resolve deadlocks in chan_sip.c.

Delaying destruction of the chan_sip sip_pvt structures caused the
/channels/chan_sip/test_sip_rtpqos unit test to crash.  That test
registers a special test ast_rtp_engine with the rtp engine module.  When
the unit test completes it cleans up by unregistering the test
ast_rtp_engine and exits.  Since the delayed destruction of the sip_pvt
happens after the unit test returns, the destructor tries to call the rtp
engine destroy callback of the test ast_rtp_engine auto variable which no
longer exists on the stack.

* Change the test ast_rtp_engine auto variable to a static variable.  Now
the variable can still exist after the unit test exits so the delayed
sip_pvt destruction can complete successfully.

ASTERISK-25023

Change-Id: I61e34a12d425189ef7e96fc69ae14993f82f3f13
2016-03-16 14:53:00 -05:00
zuul 9157014c04 Merge "sched.c: Ensure oldest expiring entry runs first." into 13 2016-03-16 14:28:38 -05:00
zuul c9cd4b9aa7 Merge "app_stasis: Don't hang up if app is not registered" into 13 2016-03-16 14:15:42 -05:00
zuul 739c28357e Merge "chan_sip.c: Simplify sip_pvt destructor call levels." into 13 2016-03-16 12:14:24 -05:00
Andrew Nagy d2c09ed73b app_stasis: Don't hang up if app is not registered
This prevents pbx_core from hanging up the channel if the app isn't
registered.

ASTERISK-25846 #close

Change-Id: I63216a61f30706d5362bc0906b50b6f0544aebce
2016-03-16 11:17:54 -05:00
zuul 6186306852 Merge "pjproject: Pass (dont_)optimize flags to pjproject and fix pjsua" into 13 2016-03-15 17:29:12 -05:00
zuul 40df2805f7 Merge "chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full()." into 13 2016-03-15 17:29:10 -05:00
zuul f4785cd2bc Merge "build_system: Split COMPILE_DOUBLE from DONT_OPTIMIZE" into 13 2016-03-15 15:22:54 -05:00
Richard Mudgett b2d2906445 sched.c: Ensure oldest expiring entry runs first.
This patch is part of a series to resolve deadlocks in chan_sip.c.

* Updated sched unit test to check new behavior.

ASTERISK-25023

Change-Id: Ib69437327b3cda5e14c4238d9ff91b2531b34ef3
2016-03-15 12:01:50 -05:00
zuul dcebcaa3da Merge "build: Add configure check for proto field of PJSIP TLS transport setting." into 13 2016-03-15 10:27:00 -05:00
Joshua Colp 6d309cd2cd Merge "res_pjsip_refer.c: Delay sending the initial SIP Notify with frag 100" into 13 2016-03-15 08:47:37 -05:00
Richard Mudgett 9ae21b510f chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full().
Change-Id: I90f04208a089f95488a2460185a8dbc3f6acca12
2016-03-14 13:47:51 -05:00
Richard Mudgett 56bcb97a3c chan_sip.c: Simplify sip_pvt destructor call levels.
Remove destructor calling destroy_it calling really_destroy_it
for no benefit.  Just make the destructor the really_destroy_it
function.

Change-Id: Idea0d47b27dd74f2488db75bcc7f353d8fdc614a
2016-03-14 13:46:11 -05:00
Joshua Colp 677a65fcbb build: Add configure check for proto field of PJSIP TLS transport setting.
Older versions of PJSIP do not have the proto field on the TLS transport
setting structure. This change adds a configure check so even if it is
not present we will still be able to build.

Change-Id: Ibf3f47befb91ed1b8194bf63888baa6fee05aba9
2016-03-14 12:36:58 -03:00
George Joseph 32f0a3d52a build_system: Split COMPILE_DOUBLE from DONT_OPTIMIZE
I can't ever recall actually needing the intermediate files or the checking
that a double compile produces.  What I CAN remember is every DONT_OPTIMIZE
build needing 3 invocations of gcc instead of 1 just to do the checks and
produce those intermediate files.

Having said that, Richard pointed out that the reason for the double compile
was that there were cases in the past where a submitted patch failed to compile
because the submitter never tried it with the optimizations turned on.

To get the best of both worlds, COMPILE_DOUBLE has been split into its own
option.  If DONT_OPTIMIZE is turned on, COMPILE_DOUBLE will also be selected
BUT you can then turn it off if all you need are the debugging symbols.  This
way you have to make an informed decision about disabling COMPILE_DOUBLE.

To allow COMPILE_DOUBLE to be both auto-selected and turned off, a new feature
was added to menuselect.  The <use> element can now contain an "autoselect"
attribute which will turn the used member on but not create a hard dependency.
The cflags.xml implementation for COMPILE_DOUBLE looks like this...

<member name="DONT_OPTIMIZE" displayname="Disable Optimizations ...">
	<use autoselect="yes">COMPILE_DOUBLE</use>
	<support_level>core</support_level>
</member>
<member name="COMPILE_DOUBLE" displayname="Pre-compile with ...>
	<depend>DONT_OPTIMIZE</depend>
	<support_level>core</support_level>
</member>

When DONT_OPTIMIZE is turned on, COMPILE_DOUBLE is turned on because
of the use.
When DONT_OPTIMIZE is turned off, COMPILE_DOUBLE is turned off because
of the depend.
When COMPILE_DOUBLE is turned on, DONT_OPTIMIZE is turned on because
of the depend.
When COMPILE_DOUBLE is turned off, DONT_OPTIMIZE is left as is because
it only uses COMPILE_DOUBLE, it doesn't depend on it.

I also made a few tweaks to the ncurses implementation to move things
left a bit to allow longer descriptions.

Change-Id: Id49ca930ac4b5ec4fc2d8141979ad888da7b1611
2016-03-13 14:53:35 -06:00
George Joseph 38499e7125 pjproject: Pass (dont_)optimize flags to pjproject and fix pjsua
The pjproject Makefile now uses the Asterisk optimization flags which
are determined by the setting of the DONT_OPTMIZE menuselect flag.
The Makefile was also restructured so a change to the top level
menuselect.makeopts will result in a rebuild of pjproject.

Also, "--disable-resample" was removed from the pjproject configure
options.  Without resample, pjsua (which is used by the testsuite)
can't make audio calls.  When it can't, it segfaults.

Change-Id: I24b0a4d0872acef00ed89b3c527a713ee4c2ccd4
2016-03-12 14:13:15 -07:00
Walter Doekes 336cae73cc app_chanspy: Fix occasional deadlock with ChanSpy and Local channels.
Channel masquerading had a conflict with autochannel locking.

When locking autochannel->channel, the channel is fetched from the
autochannel and then locked. During the fetch, the autochannel -- which
has no locks itself -- can be modified by someone who owns the channel
lock. That means that the value of autochan->channel cannot be trusted
until you hold the lock.

In practice, this caused problems with Local channels getting
masqueraded away while the ChanSpy attempted to get info from that
channel. The old channel which was about to get removed got locked, but
the new (replaced) channel got unlocked (no-op). Because the replaced
channel was now locked (and would never get unlocked), it couldn't get
removed from the channel list in a timely manner, and would now cause
deadlocks when iterating over the channel list.

This change checks the autochannel after locking the channel for changes
to the autochannel. If the channel had been changed, the lock is
reobtained on the new channel.

In theory it seems possible that after this fix, the lock attempt on the
old (wrong) channel can be on an already destroyed lock, maybe causing
a crash. But that hasn't been observed in the wild and is harder induce
than the current deadlock.

Thanks go to Filip Frank for suggesting a fix similar to this and
especially to IRC user hexanol for pointing out why this deadlock was
possible and testing this fix. And to Richard for catching my rookie
while loop mistake ;)

ASTERISK-25321 #close

Change-Id: I293ae0014e531cd0e675c3f02d1d118a98683def
2016-03-11 23:03:08 +01:00
Joshua Colp ed34bbdf9b Merge "install_prereq: Add packages for bundled pjproject" into 13 2016-03-10 07:35:14 -06:00
zuul 9263ea0b13 Merge "res_pjsip_caller_id: Anonymize 'From' when caller id presentation is prohibited" into 13 2016-03-08 20:36:50 -06:00
zuul f74ac9d5b6 Merge "pjproject_bundled: Remove --with-external-pa from configure options." into 13 2016-03-08 17:04:57 -06:00
George Joseph 875d5e9872 pjproject_bundled: Remove --with-external-pa from configure options.
Not sure why it was there in the first place as we already specify
--disable-sound.

Change-Id: Ia80a40e8b1e1acc287955ab11ba1fbd0c7d4cff9
2016-03-07 20:34:12 -07:00
George Joseph 530cff5f5f res_pjsip: Strip spaces from items parsed from comma-separated lists
Configurations like "aors = a, b, c" were either ignoring everything after "a"
or trying to look up " b".  Same for mailboxes,  ciphers, contacts and a few
others.

To fix, all the strsep(&copy, ",") calls have been wrapped in ast_strip.  To
facilitate this, ast_strip, ast_skip_blanks and ast_skip_nonblanks were
updated to handle null pointers.

In some cases, an ast_strlen_zero() test was added to skip consecutive commas.

There was also an attempt to ast_free an ast_strdupa'd string in
ast_sip_for_each_aor which was causing a SEGV.  I removed it.

Although this issue was reported for realtime, the issue was in the res_pjsip
modules so all config mechanisms were affected.

ASTERISK-25829 #close
Reported-by: Mateusz Kowalski

Change-Id: I0b22a2cf22a7c1c50d4ecacbfa540155bec0e7a2
2016-03-07 12:15:58 -07:00
George Joseph 3c8076a83b install_prereq: Add packages for bundled pjproject
RedHat/CentOS needs python-devel
Debian/Ubuntu needs automake, libsrtp-dev and python-dev

Ubuntu also needed libncurses5-dev for cmenuselect so while not
needed for pjproject, I adedd it anyway.

Change-Id: Idf5fa16e2d87c687439621507e122cb9461d7089
2016-03-05 16:42:07 -07:00
zuul 6e58f83d8d Merge "third_party/Makefile.rules: Replace unsupported != operator with $(shell ...)" into 13 2016-03-04 07:04:13 -06:00
Joshua Colp cb70ed7214 Merge "config_transport: Fix objects returned by ast_sip_get_transport_states" into 13 2016-03-04 05:44:03 -06:00
zuul 772036b525 Merge "alembic: Fix downgrade and tweak for sqlite" into 13 2016-03-03 21:05:30 -06:00
George Joseph 27f32cd0a6 res_pjsip_caller_id: Anonymize 'From' when caller id presentation is prohibited
Per RFC3325, the 'From' header is now anonymized on outgoing calls when
caller id presentation is prohibited.

TID = trust_id_outbound
PRO = Set(CALLERID(pres)=prohib)
USR = endpoint/from_user
DOM = endpoint/from_domain
PAI = YES(privacy=off), NO(not sent), PRI(privacy=full) (assumes send_pai=yes)

Conditions          |Result
--------------------|----------------------------------------------------
TID PRO USR DOM     |PAI    FROM
--------------------|----------------------------------------------------
Y   Y   abc def.ghi |PRI    "Anonymous" <sip:abc@def.ghi>
Y   Y   abc         |PRI    "Anonymous" <sip:abc@anonymous.invalid>
Y   Y       def.ghi |PRI    "Anonymous" <sip:anonymous@def.ghi>
Y   Y               |PRI    "Anonymous" <sip:anonymous@anonymous.invalid>

Y   N   abc def.ghi |YES    <sip:abc@def.ghi>
Y   N   abc         |YES    <sip:abc@<ip_address>>
Y   N       def.ghi |YES    "Caller Name" <sip:<caller_exten>@def.ghi>
Y   N               |YES    "Caller Name" <sip:<caller_exten>@<ip_address>>

N   Y   abc def.ghi |NO     "Anonymous" <sip:abc@def.ghi>
N   Y   abc         |NO     "Anonymous" <sip:abc@anonymous.invalid>
N   Y       def.ghi |NO     "Anonymous" <sip:anonymous@def.ghi>
N   Y               |NO     "Anonymous" <sip:anonymous@anonymous.invalid>

N   N   abc def.ghi |YES    <sip:abc@def.ghi>
N   N   abc         |YES    <sip:abc@<ip_address>>
N   N       def.ghi |YES    "Caller Name" <sip:<caller_exten>@def.ghi>
N   N               |YES    "Caller Name" <sip:<caller_exten>@<ip_address>>

ASTERISK-25791 #close
Reported-by: Anthony Messina

Change-Id: I2c82a5ca1413c2c00fb62ea95b0ae8e97af54dc9
2016-03-03 19:32:33 -07:00
zuul 9b0a96b947 Merge "loader: Retry dlopen when loading fails" into 13 2016-03-03 19:57:41 -06:00
George Joseph 7cf7b0a4f9 third_party/Makefile.rules: Replace unsupported != operator with $(shell ...)
Apparently the != operator is fairly new so I've replaced it with
the old $(shell ...) syntax.

Change-Id: I16b2e1878a4f91e7e9740abd427f9639f933c479
Reported-by: Richard Mudgett
2016-03-03 17:50:51 -06:00
zuul d2be16472e Merge "bridge.c: Crash during attended transfer when missing a local channel half" into 13 2016-03-03 16:42:04 -06:00
George Joseph 53f57001f2 loader: Retry dlopen when loading fails
Although we use the RTLD_LAZY flag when calling dlopen
the first time on a module, this only defers resolution
for function calls.  Pointer references to functions are
determined at link time so dlopen expects them to be there.
Since we don't cross-module link, pointers to functions
in other modules won't be available and dlopen will fail.

Doing a "hardened" build also causes problems because it
typically sets "-z now" on the ld command line which
overrides RTLD_LAZY at run time.

If the failing module isn't a GLOBAL_SYMBOLS module, then
dlopen will be called again after all the GLOBAL_SYMBOLS
modules have been loaded and they'll eventually resolve.

If the calling module IS a GLOBAL_SYMBOLS module itself
and a third module depends on it, then there's an issue
because the second time through the dlopen loop,
GLOBAL_SYMBOLS modules aren't given any special treatment
and since the order in which dlopen is called isn't
deterministic, the dependent may again be tried before the
module it needs is loaded.

Simple solution:  Save modules that fail load_resource
because of a dlopen error in a list and retry them
immediately after the first pass. Keep retrying until
the failed list is empty or we reach a #defined max
retries. Error messages are suppressed until the final
pass which also gets rid of those confusing error messages
about module failures that are later corrected.

Change-Id: Iddae1d97cd2f00b94e61662447432765755f64bb
2016-03-03 15:37:48 -06:00
zuul 039ea76a8a Merge "res_pjsip_dtmf_info: NULL terminate the message body." into 13 2016-03-03 14:51:13 -06:00
Kevin Harwell 40d9e9e238 bridge.c: Crash during attended transfer when missing a local channel half
It's possible for the transferer channel to get hung up early during the
attended transfer process. For instance, a phone may send a "bye" immediately
upon receiving a sip notify that contains a sip frag 100 (I'm looking at you
Jitsi). When this occurs a race begins between the transferer being hung up
and completion of the transfer code.

If the channel hangs up too early during a transfer involving stasis bridging
for instance, then when the created local channel goes to look up its swap
channel (and associated datastore) it can't find it (since it is no longer in
the bridge) thus it fails to enter the stasis application. Consequently, the
created local channel(s) hang up as well. If the timing is just right then the
bridging code attempts to add the message link with missing local channel(s).
Hence the crash.

Unfortunately, there is no great way to solve the problem of the unexpected
"bye". While we can't guarantee we won't receive an early hangup, and in this
case still fail to enter the stasis application, we can make it so asterisk
does not crash.

This patch does just that by locking the local channel structure, checking
that the local channel's peer has not been lost, and then continuing. This
keeps the local channel's peer from being ripped out from underneath it by
the local/unreal hangup code while attempting to set the stasis message link.

ASTERISK-25771

Change-Id: Ie6d6061e34c7c95f07116fffac9a09e5d225c880
2016-03-03 13:55:24 -06:00
Kevin Harwell ff3da61c35 res_pjsip_refer.c: Delay sending the initial SIP Notify with frag 100
During the transfer process, some phones (okay it was the Jitsi softphone,
but maybe others are out there) send a "bye" immediately after receiving a
SIP Notify. When a "bye" is received early for some types of transfers the
transferer channel may no longer be available during late stage transfer
processing.

For instance, during an attended transfer involving stasis bridging at one
point the created local channel looks for an associated swap channel in
order to retrieve the stasis application name. If the transferer has hung
up then the local channel will fail to find it. The local channel then has
no way to know which stasis app to enter, so it fails and hangs up as well.
Thus the transfer does not complete as expected.

This patch delays the sending of the initial notify in order to give the
transfer process enough time to gather the necessary data for a successful
transfer.

ASTERISK-25771

Change-Id: I09cfc9a5d6ed4c007bc70625e0972b470393bf16
2016-03-03 12:08:13 -06:00
zuul 9e896540c8 Merge "build-system: Allow building with static pjproject" into 13 2016-03-03 11:16:48 -06:00
Joshua Colp 26b8f2692e res_pjsip_dtmf_info: NULL terminate the message body.
PJSIP does not ensure that when printing the message body the
buffer will be NULL terminated. This is problematic when searching
for the signal and duration values of the DTMF.

This change ensures the buffer is always NULL terminated.

Change-Id: I52653a1a60c93092d06af31a27408d569cc98968
2016-03-03 12:42:57 -04:00
Joshua Colp 2dc79e13be Merge "func_callerid.c: Update REDIRECTING reason documentation." into 13 2016-03-03 08:47:43 -06:00
Joshua Colp 86124f63c8 Merge "SIP diversion: Fix REDIRECTING(reason) value inconsistencies." into 13 2016-03-03 08:47:36 -06:00
Joshua Colp 3b6b164f2e Merge "res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref." into 13 2016-03-03 05:32:51 -06:00
zuul d6e274b97d Merge "res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm reason." into 13 2016-03-02 20:25:34 -06:00
Joshua Colp f4670c6a76 Merge "CHAOS: cleanup possible null vars on msg alloc failure" into 13 2016-03-02 18:12:00 -06:00
George Joseph 86d6e44cc1 alembic: Fix downgrade and tweak for sqlite
Downgrade had a few issues.  First there was an errant 'update' statement in
add_auto_dtmf_mode that looks like it was a copy/paste error.  Second, we
weren't cleaning up the ENUMs so subsequent upgrades on postgres failed
because the types already existed.

For sqlite...  sqlite doesn't support ALTER or DROP COLUMN directly.
Fortunately alembic batch_operations takes care of this for us if we
use it so the alter and drops were converted to use batch operations.

Here's an example downgrade:

    with op.batch_alter_table('ps_endpoints') as batch_op:
        batch_op.drop_column('tos_audio')
        batch_op.drop_column('tos_video')
        batch_op.add_column(sa.Column('tos_audio', yesno_values))
        batch_op.add_column(sa.Column('tos_video', yesno_values))
        batch_op.drop_column('cos_audio')
        batch_op.drop_column('cos_video')
        batch_op.add_column(sa.Column('cos_audio', yesno_values))
        batch_op.add_column(sa.Column('cos_video', yesno_values))

    with op.batch_alter_table('ps_transports') as batch_op:
        batch_op.drop_column('tos')
        batch_op.add_column(sa.Column('tos', yesno_values))
    # Can't cast integers to YESNO_VALUES, so dropping and adding is required
        batch_op.drop_column('cos')
        batch_op.add_column(sa.Column('cos', yesno_values))

Upgrades from base to head and downgrades from head to base were tested
repeatedly for postgresql, mysql/mariadb, and sqlite3.

Change-Id: I862b0739eb3fd45ec3412dcc13c2340e1b7baef8
2016-03-02 15:48:27 -07:00
George Joseph 6f0d7ce9db config_transport: Fix objects returned by ast_sip_get_transport_states
ast_sip_get_transport_states was returning a container of internal_state
objects instead of ast_sip_transport_state objects.  This was causing
transport lookups to fail, most noticably in res_pjsip_nat, which
couldn't find the correct external addresses.  This was causing contacts
to go out with internal ip addresses.

ASTERISK-25830 #close
Reported-by: Sean Bright

Change-Id: I1aee6a2fd46c42e8dd0af72498d17de459ac750e
2016-03-02 15:05:08 -07:00
Scott Griepentrog 1ea7a5a774 CHAOS: cleanup possible null vars on msg alloc failure
In message.c, if msg_alloc fails to init the string field,
vars may be null, so use a null tolerant cleanup.

In res_pjsip_messaging.c, if msg_data_create fails, mdata
will be null, so use a null tolerant cleanup.

ASTERISK-25323

Change-Id: Ic2d55c2c3750d5616e2a05ea92a19c717507ff56
2016-03-02 12:00:37 -06:00
Scott Griepentrog 3c37c7071f CHAOS: prevent crash on failed strdup
This patch avoids crashing on a null pointer
if the strdup() allocation fails.

ASTERISK-25323

Change-Id: I3f67434820ba53b53663efd6cbb42749f4f6c0f5
2016-03-02 11:59:33 -06:00
Richard Mudgett 9633be9d25 func_callerid.c: Update REDIRECTING reason documentation.
Change-Id: I6e8d39b0711110a4bceafa652e58b30465e28386
2016-03-01 20:13:40 -06:00
Richard Mudgett 4165ea7778 SIP diversion: Fix REDIRECTING(reason) value inconsistencies.
Previous chan_sip behavior:

Before this patch chan_sip would always strip any quotes from an incoming
reason and pass that value up as the REDIRECTING(reason).  For an outgoing
reason value, chan_sip would check the value against known values and
quote any it didn't recognize.  Incoming 480 response message reason text
was just assigned to the REDIRECTING(reason).

Previous chan_pjsip behavior:

Before this patch chan_pjsip would always pass the incoming reason value
up as the REDIRECTING(reason).  For an outgoing reason value, chan_pjsip
would send the reason value as passed down.

With this patch:

Both channel drivers match incoming reason values with values documented
by REDIRECTING(reason) and values documented by RFC5806 regardless of
whether they are quoted or not.  RFC5806 values are mapped to the
equivalent REDIRECTING(reason) documented value and is set in
REDIRECTING(reason).  e.g., an incoming RFC5806 'unconditional' value or a
quoted string version ('"unconditional"') is converted to
REDIRECTING(reason)'s 'cfu' value.  The user's dialplan only needs to deal
with 'cfu' instead of any of the aliases.

The incoming 480 response reason text supported by chan_sip checks for
known reason values and if not matched then puts quotes around the reason
string and assigns that to REDIRECTING(reason).

Both channel drivers send outgoing known REDIRECTING(reason) values as the
unquoted RFC5806 equivalent.  User custom values are either sent as is or
with added quotes if SIP doesn't allow a character within the value as
part of a RFC3261 Section 25.1 token.  Note that there are still
limitations on what characters can be put in a custom user value.  e.g.,
embedding quotes in the middle of the reason string is silly and just
going to cause you grief.

* Setting a REDIRECTING(reason) value now recognizes RFC5806 aliases.
e.g., Setting REDIRECTING(reason) to 'unconditional' is converted to the
'cfu' value.

* Added missing malloc() NULL return check in res_pjsip_diversion.c
set_redirecting_reason().

* Fixed potential read from a stale pointer in res_pjsip_diversion.c
add_diversion_header().  The reason string needed to be copied into the
tdata memory pool to ensure that the string would always be available.
Otherwise, if the reason string returned by reason_code_to_str() was a
user's reason string then the string could be freed later by another
thread.

Change-Id: Ifba83d23a195a9f64d55b9c681d2e62476b68a87
2016-03-01 20:13:39 -06:00
Richard Mudgett 41f4af4ce5 res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm reason.
Change-Id: Id6350b3c7d4ec8df7ec89863566645e2b0f441fd
2016-03-01 20:13:39 -06:00
Richard Mudgett 4c5998ff55 res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref.
* Fix double unref of other_party channel in off nominal path.

* This is unlikely to be a real problem.  However, for safety,
in handle_incoming_request() keep the datastore ref with the
other_party channel ref until we are finished with the other_party
channel.

Change-Id: I78f22547bf0bb99fb20814ceab75952bd857f821
2016-03-01 20:08:26 -06:00
George Joseph b59956a875 build-system: Allow building with static pjproject
Background here:
http://lists.digium.com/pipermail/asterisk-dev/2016-January/075266.html

From CHANGES:
 * To help insure that Asterisk is compiled and run with the same known
   version of pjproject, a new option (--with-pjproject-bundled) has been
   added to ./configure.  When specified, the version of pjproject specified
   in third-party/versions.mak will be downloaded and configured.  When you
   make Asterisk, the build process will also automatically build pjproject
   and Asterisk will be statically linked to it.  Once a particular version
   of pjproject is configured and built, it won't be configured or built
   again unless you run a 'make distclean'.

   To facilitate testing, when 'make install' is run, the pjsua and pjsystest
   utilities and the pjproject python bindings will be installed in
   ASTDATADIR/third-party/pjproject.

   The default behavior remains building with the shared pjproject
   installation, if any.

Building:

   All you have to do is include the --with-pjproject-bundled option on
   the ./configure command line (and remove any existing --with-pjproject
   option if specified).  Everything else is automatic.

Behind the scenes:

   The top-level Makefile was modified to include 'third-party' in the
   list of MOD_SUBDIRS.

   The third-party directory was created to contain any third party
   packages that may be needed in the future.  Its Makefile automatically
   iterates over any subdirectories passing on targets.

   The third-party/pjproject directory was created to house the pjproject
   source distribution.  Its Makefile contains targets to download, patch
   configure, generate dependencies, compile libs, apps and python bindings,
   sanitized build.mak and generate a symbols list.

   When bootstrap.sh is run, it automatically includes the configure.m4
   file in third-party/pjproject.  This file has a macro to download and
   conifgure pjproject and get and set PJPROJECT_INCLUDE, PJPROJECT_DIR
   and PJPROJECT_BUNDLED.  It also tests for the capabilities like
   PJ_TRANSACTION_GRP_LOCK by parsing preprocessor output as opposed to
   trying to compile.  Of course, bootstrap.sh is only run once and the
   configure file is incldued in the patch.

   When configure is run with the new options, the macro in configure.m4
   triggers the download, patch, conifgure and tests.  No compilation is
   performed at this time.  The downloaded tarball is cached in /tmp so
   it doesn't get downloaded again on a distclean.

   When make is run in the top-level Asterisk source directory, it will
   automatically descend all the subdirectories in third_party just as it
   does for addons, apps, etc.  The top-level Makefile makes sure that
   the 'third-party' is built before 'main' so that dependencies from the
   other directories are built first.

   When main does build, a new shared library (libasteriskpj) is created that
   links statically to the pjproject .a files and exports all their symbols.
   The asterisk binary links to that, just as it does with libasteriskssl.

   When Asterisk is installed, the pjsua and pjsystest apps, and the pjproject
   python bindings are installed in ASTDATADIR/third-party/pjproject.  This
   will facilitate testing, including running the testsuite which will be
   updated to check that directory for the pjsua module ahead of the system
   python library.

Modules should continue to depend on pjproject if they use pjproject APIs
directly.  They should not care about the implementation.  No changes to any
res_pjsip modules were made.

Change-Id: Ia7a60c28c2e9ba9537c5570f933c1ebcb20a3103
2016-03-01 09:33:17 -07:00
zuul d1495bc0eb Merge "chan_sip.c: Fix T.38 issues caused by leaving a bridge." into 13 2016-02-29 18:30:38 -06:00
zuul 84d1036205 Merge "res_pjsip_t38.c: Back out part of an earlier fix attempt." into 13 2016-02-29 18:09:56 -06:00
zuul 5393a4963a Merge "bridge core: Add owed T.38 terminate when channel leaves a bridge." into 13 2016-02-29 18:09:53 -06:00
zuul dbf52dd7d7 Merge "channel api: Create is_t38_active accessor functions." into 13 2016-02-29 18:00:19 -06:00
zuul 4c85d7b612 Merge "bridge_channel: Don't settle owed events on an optimization." into 13 2016-02-29 17:51:10 -06:00
zuul 94f3198c90 Merge "channel.c: Route all control frames to a channel through the same code." into 13 2016-02-29 17:03:48 -06:00
zuul 414e297648 Merge "res_pjsip_mwi: Turn some NOTICEs and WARNINGs into debug 1s." into 13 2016-02-29 16:55:35 -06:00
Richard Mudgett 18a323e542 chan_sip.c: Fix T.38 issues caused by leaving a bridge.
chan_sip could not handle AST_T38_TERMINATED frames being sent to it when
the channel left the bridge.  The action resulted in overlapping outgoing
reINVITEs.  The testsuite tests/fax/sip/directmedia_reinvite_t38 was not
happy.

* Force T.38 to be remembered as locally bridged.  Now when the channel
leaves the native RTP bridge after T.38, the channel remembers that it has
already reINVITEed the media back to Asterisk.  It just needs to terminate
T.38 when the AST_T38_TERMINATED arrives.

* Prevent redundant AST_T38_TERMINATED from causing problems.  Redundant
AST_T38_TERMINATED frames could cause overlapping outgoing reINVITEs if
they happen before the T.38 state changes to disabled.  Now the T.38 state
is set to disabled before the reINVITE is sent.

ASTERISK-25582 #close

Change-Id: I53f5c6ce7d90b3f322a942af1a9bcab6d967b7ce
2016-02-29 12:58:48 -06:00
Richard Mudgett 263a39f2cc res_pjsip_t38.c: Back out part of an earlier fix attempt.
This backs out item 4 of the 4875e5ac32
commit.  Item 4 added the t38_bye_supplement.  Unfortunately, the frame
that it puts into the bridge may or may not be processed by the time the
bridged peer is kicked out of the bridge.  If it is processed then all is
well.  However, if it is not processed then that channel is stuck in fax
mode until it hangs up or maybe if it joins another bridge for T.38
faxing.

ASTERISK-25582

Change-Id: Ib20a03ecadf1bf8a0dcadfadf6c2f2e60919a9f7
2016-02-29 12:50:19 -06:00
Richard Mudgett 221422be50 bridge core: Add owed T.38 terminate when channel leaves a bridge.
The channel is now going to get T.38 terminated when it leaves the
bridging system and the bridged peers are going to get T.38 terminated as
well.

ASTERISK-25582

Change-Id: I77a9205979910210e3068e1ddff400dbf35c4ca7
2016-02-29 12:50:19 -06:00
Richard Mudgett 0a5bc64491 channel api: Create is_t38_active accessor functions.
ASTERISK-25582

Change-Id: I69451920b122de7ee18d15bb231c80ea7067a22b
2016-02-29 12:50:19 -06:00
Richard Mudgett 513638a5f4 bridge_channel: Don't settle owed events on an optimization.
Local channel optimization could cause DTMF digits to be duplicated.
Pending DTMF end events would be posted to a bridge when the local channel
optimizes out and is replaced by the channel further down the chain.  When
the real digit ends, the channel would get another DTMF end posted to the
bridge.

A -- LocalA;1/n -- LocalA;2/n -- LocalB;1 -- LocalB;2 -- B

1) LocalA has the /n flag to prevent optimization.
2) B is sending DTMF to A through the local channel chain.
3) When LocalB optimizes out it can move B to the position of LocalB;1
4) Without this patch, when B swaps with LocalB;1 then LocalB;1 would
settle an owed DTMF end to the bridge toward LocalA;2.
5) When B finally ends its DTMF it sends the DTMF end down the chain.
6) Without this patch, A would hear the DTMF digit end when LocalB
optimizes out and when B ends the original digit.

ASTERISK-25582

Change-Id: I1bbd28b8b399c0fb54985a5747f330a4cd2aa251
2016-02-29 12:50:19 -06:00
Richard Mudgett 7c4495cb70 channel.c: Route all control frames to a channel through the same code.
Frame hooks can conceivably return a control frame in exchange for an
audio frame inside ast_write().  Those returned control frames were not
handled quite the same as if they were sent to ast_indicate().  Now it
doesn't matter if you use ast_write() to send an AST_FRAME_CONTROL to a
channel or ast_indicate().

ASTERISK-25582

Change-Id: I5775f41421aca2b510128198e9b827bf9169629b
2016-02-29 12:50:19 -06:00
George Joseph 48d713a832 sorcery: Refactor create, update and delete to better deal with caches
The ast_sorcery_create, update and delete function have been refactored
to better deal with caches and errors.

The action is now called on all non-caching wizards first. If ANY succeed,
the action is called on all caching wizards and the observers are notified.
This way we don't put something in the cache (or update or delete) before
knowing the action was performed in at least 1 backend and we only call the
observers once even if there were multiple writable backends.

ast_sorcery_create was never adding to caches in the first place which
was preventing contacts from getting added to a memory_cache when they
were created.  In turn this was causing memory_cache to emit errors if
the contact was deleted before being retrieved (which would have
populated the cache).

ASTERISK-25811 #close
Reported-by: Ross Beer

Change-Id: Id5596ce691685a79886e57b0865888458d6e7b46
2016-02-29 11:31:18 -06:00
George Joseph ee947d4a7a res_pjsip_mwi: Turn some NOTICEs and WARNINGs into debug 1s.
There are a few cases where we're emitting notices or warnings
for things that really need neither, like a client retrying to subscribe
to mwi when they're not conifgured for it.  They get a 404 so there's no
need for non-debug messages.

Change-Id: I05e38a7ff6c2f2521146f4be6a79731b9864e61f
2016-02-27 16:54:02 -06:00
zuul d35c494df1 Merge "res_pjsip/config_transport: Allow reloading transports." into 13 2016-02-27 10:26:47 -06:00
George Joseph 6e70e8ccdb res_sorcery_memory_cache: Fix SEGV in some CLI commands
A few of the CLI commands weren't checking for enough arguments
and were SEGVing.

Change-Id: Ie6494132ad2fe54b4f014bcdc112a37c36a9b413
2016-02-25 13:17:04 -07:00
Leif Madsen 4417f64d83 Add initial support to build Docker images
This work-in-progress is the first step to being able to reliably
build Asterisk containers from the Asterisk source. I'm submitting
this based on feedback gained at AstriDevCon 2015.

Information about how to use this is provided in contrib/docker/README.md
and will result in a local Asterisk container being built right from
your source. I believe this can eventually be automated via
hub.docker.com.

Change-Id: Ifa070706d40e56755797097b6ed72c1e243bd0d1
2016-02-25 14:19:25 -05:00
zuul 0985f44363 Merge "chan_sip.c: Suppress T.38 SDP c= line if addr is the same." into 13 2016-02-24 19:05:11 -06:00
Joshua Colp f159f6ec07 Merge "res_config_sqlite3: Fix crashes when reading peers from sqlite3 tables" into 13 2016-02-24 18:35:15 -06:00
Richard Mudgett e7a6abbbd3 rtp_engine.h: Remove extraneous semicolons.
Change-Id: Ib462633d396fa941379dfef648dcd2245e350084
2016-02-23 16:45:43 -06:00
Richard Mudgett 6656afffa0 chan_sip.c: Suppress T.38 SDP c= line if addr is the same.
Use the correct comparison function since we only care if the address
without the port is the same.

Change-Id: Ibf6c485f843a1be6dee58a47b33d81a7a8cbe3b0
2016-02-23 16:40:20 -06:00
Christof Lauber ea9deff996 res_config_sqlite3: Fix crashes when reading peers from sqlite3 tables
Introduced realloaction of ast_str buf in sqlite3_escape functions in case
the returned buffer from threadstorage was actually too small.

Change-Id: I3c5eb43aaade93ee457943daddc651781954c445
2016-02-23 16:01:52 -06:00
zuul aa637f0a91 Merge "res_pjsip_config_wizard: Add command to export primitive objects" into 13 2016-02-23 12:25:13 -06:00
Joshua Colp 56561c386a Merge "res_pjproject: Add ability to map pjproject log levels to Asterisk log levels" into 13 2016-02-22 10:54:53 -06:00
George Joseph d2a1457e0b res_pjsip/config_transport: Allow reloading transports.
The 'reload' mechanism actually involves closing the underlying
socket and calling the appropriate udp, tcp or tls start functions
again.  Only outbound_registration, pubsub and session needed work
to reset the transport before sending requests to insure that the
pjsip transport didn't get pulled out from under them.

In my testing, no calls were dropped when a transport was changed
for any of the 3 transport types even if ip addresses or ports were
changed. To be on the safe side however, a new transport option was
added (allow_reload) which defaults to 'no'.  Unless it's explicitly
set to 'yes' for a transport, changes to that transport will be ignored
on a reload of res_pjsip.  This should preserve the current behavior.

Change-Id: I5e759850e25958117d4c02f62ceb7244d7ec9edf
2016-02-19 17:56:27 -07:00
zuul b4fdf93d06 Merge "Fix failing threadpool_auto_increment test." into 13 2016-02-18 19:00:27 -06:00
zuul 25b1613b52 Merge "res_pjsip_outbound_publish: Fix processing 412 response" into 13 2016-02-18 18:22:50 -06:00
George Joseph 6b921f706d res_pjproject: Add ability to map pjproject log levels to Asterisk log levels
Warnings and errors in the pjproject libraries are generally handled by
Asterisk.  In many cases, Asterisk wouldn't even consider them to be warnings
or errors so the messages emitted by pjproject directly are either superfluous
or misleading.  A good exampe of this are the level-0 errors pjproject emits
when it can't open a TCP/TLS socket to a client to send an OPTIONS.  We don't
consider a failure to qualify a UDP client an "ERROR", why should a TCP/TLS
client be treated any differently?

A config file for res_pjproject has bene added (pjproject.conf) and a new
log_mappings object allows mapping pjproject levels to Asterisk levels
(or nothing).  The defaults if no pjproject.conf file is found are the same
as those that were hard-coded into res_pjproject initially: 0,1 = LOG_ERROR,
2 = LOG_WARNING, 3,4,5 = LOG_DEBUG<level>

Change-Id: Iba7bb349c70397586889b8f45b8c3d6c6c8c3898
2016-02-18 16:30:18 -06:00
zuul 37c273f0de Merge "app_queue: fix Calculate talktime when is first call answered" into 13 2016-02-18 14:43:59 -06:00
Alexei Gradinari f295088764 res_pjsip_outbound_publish: Fix processing 412 response
When Asterisk receives a 412 (Conditional Request Failed) response
it has to recreate publish session.
There is bug in res_pjsip_outbound_publish.c
The function sip_outbound_publish_client_alloc is called with wrong object
while processing 412 (Conditional Request Failed) response.
This patch fixes it.

ASTERISK-25229 #close

Change-Id: I3b62f2debf6bb1e5817cde7b13ea39ef2bf14359
2016-02-18 12:04:23 -06:00
Mark Michelson f1f79812c1 Fix failing threadpool_auto_increment test.
The threadpool_auto_increment test fails infrequently for a couple of
reasons
* The threadpool listener was notified of fewer tasks being pushed than
  were actually pushed
* The "was_empty" flag was set to an unexpected value.

The problem is that the test pushes three tasks into the threadpool.
Test expects the threadpool to essentially gather those three tasks, and
then distribute those to the threadpool threads. It also expects that as
the tasks are pushed in, the threadpool listener is alerted immediately
that the tasks have been pushed. In reality, a task can be distributed
to the threadpool threads quicker than expected, meaning that the
threadpool has already emptied by the time each subsequent task is
pushed. In addition, the internal threadpool queue can be delayed so
that the threadpool listener is not alerted that a task has been pushed
even after the task has been executed.

From the test's point of view, there's no way to be able to predict
exactly the order that task execution/listener notifications will occur,
and there is no way to know which listener notifications will indicate
that the threadpool was previously empty.

For this reason, the test has been updated to only check the things it
can check. It ensures that all tasks get executed, that the threads go
idle after the tasks are executed, and that the listener is told the
proper number of tasks that were pushed.

Change-Id: I7673120d74adad64ae6894594a606e102d9a1f2c
2016-02-18 11:15:22 -06:00
Rodrigo Ramírez Norambuena 79dc5e2f00 app_queue: fix Calculate talktime when is first call answered
Fix calculate of average time for talktime is wrong when is completed the
first call beacuse the time for talked would be that call.

ASTERISK-25800 #close

Change-Id: I94f79028935913cd9174b090b52bb300b91b9492
2016-02-17 15:04:16 -06:00
Richard Mudgett 5a3a857dd6 cel.c: Fix mismatch in ast_cel_track_event() return type.
The return type of ast_cel_track_event() is not large enough to return all
64 potential bits of the event enable mask.  Fortunately, the defined CEL
events do not really need all 64 bits and the return value is only used to
determine if the requested CEL event is enabled.

* Made the ast_cel_track_event() return 0 or 1 only so the return value
can fit inside an int type instead of zero or a truncated 64 bit non-zero
value.

Change-Id: I783d932320db11a95c7bf7636a72b6fe2566904c
2016-02-17 13:33:42 -06:00
George Joseph 87ab65c557 res_odbc: Fix exports.in for missing symbols
res_odbc.exports.in was missing a few symbols.
Changed to wildcards.

Change-Id: Ieadd76df24e43ea92577f651d478a0f7b742c30c
2016-02-16 15:37:48 -07:00
George Joseph c0f3062031 res_statsd: Fix exports.in for missing symbols
res_statsd.export.in was missing the _va variations of the log
functions causing Asterisk to crash in res_pjsip if OPTIONAL_API
wasn't enabled.

ASTERISK-25727 #close
Reported-by: Gergely Dömsödi

Change-Id: I395729f9f51bdd33c5ca757f5f96ebedad74077b
2016-02-16 11:20:57 -07:00
George Joseph 5e848dae7b res_pjsip_config_wizard: Add command to export primitive objects
A new command (pjsip export config_wizard primitives) has been added that
will export all the pjsip objects it created to the console or a file
suitable for reuse in a pjsip.conf file.

ASTERISK-24919 #close
Reported-by: Ray Crumrine

Change-Id: Ica2a5f494244b4f8345b0437b16d06aa0484452b
2016-02-15 21:36:57 -06:00
George Joseph 34c64707d1 res_pjsip_caller_id: Fix segfault when replacing rpid or pai header
If the PJSIP_HEADER dialplan function adds a PAI or RPID header and send_rpid
or send_pai is set, res_pjsip_caller_id attemps to retrieve, parse and modify
the header added by the dialplan function.  Since the header added by the
dialplan function is generic string, there are no virtual functions to parse
the uri and we get a segfault when we try.  Since the modify, was really only
an overwrite, we now just delete the old header if it was type PJSIP_H_OTHER
and recreate it.

This raises a question for another time though:  What should happen with
duplicate headers?  Right now res_pjsip_header_funcs doesn't check for dups
so if it's session supplement is loaded after res_pjsip_caller_id's (or any
other module that adds headers), there'll be dups in the message.

ASTERISK-25337 #close

Change-Id: I5e296b52d30f106b822c0eb27c4c2b0e0f71c7fa
2016-02-15 15:53:25 -06:00
Joshua Colp 9c28acd9db Merge "Fix creation race of contact_status structures." into 13 2016-02-15 15:30:05 -06:00
Mark Michelson ebe167f792 Fix creation race of contact_status structures.
It is possible when processing a SIP REGISTER request to have two
threads end up creating contact_status structures in sorcery.
contact_status is created using a "find or create" function. If two
threads call into this at the same time, each thread will fail to find
an existing contact_status, and so both will end up creating a new
contact status.

During testing, we would see sporadic failures because the
PJSIP_CONTACT() dialplan function would operate on a different
contact_status than what had been updated by res_pjsip/pjsip_options.

The fix here is two-fold:
1) The "find or create" function for contact_status now has a lock
around the entire operation. This way, if two threads attempt the
operation simultaneously, the first to get there will create the object,
and the second will find the object created by the first thread.

2) res_sorcery_memory has had its create callback updated so that it
will not allow for objects with duplicate IDs to be created.

Change-Id: I55b1460ff1eb0af0a3697b82d7c2bac9f6af5b97
2016-02-15 13:46:18 -06:00
Joshua Colp 1c4f2a920d res_pjsip_pubsub: Move where the subscription is stored to after initialized.
A problem arose when testing the AMI subscription listing actions where it
was possible for a subscription that had not been fully initialized to be
listed. This was problematic as the underlying listing code would crash.

This change makes it so the subscription tree is fully set up before it is
added to the list of subscriptions. This ensures that when the listing actions
get the subscription it is valid.

ASTERISK-25738 #close

Change-Id: Iace2b13641c31bbcc0d43a39f99aba1f340c0f48
2016-02-15 14:52:22 -04:00
Joshua Colp 1cddd954f9 Merge "res_pjsip: Refactor load_module/unload_module" into 13 2016-02-12 16:58:19 -06:00
zuul 953ba9da88 Merge "res_pjsip: Handle pjsip_dlg_create_uas deprecation" into 13 2016-02-12 16:50:16 -06:00
Corey Farrell ac00c6bc2d main/asterisk.c: Reverse #if statement in listener() to fix code folding.
listener() opens the same code block in two places (#if and #else).  This
confuses some folding editors causing it to think that an extra code block
was opened.  Folding in 'geany' causes all code after listener() to be
folded as if it were part of that procedure.

ASTERISK-24813 #close

Change-Id: I4b8c766e6c91e327dd445e8c18f8a6f268acd961
2016-02-12 09:34:27 -05:00
George Joseph b1b797e0e7 res_pjsip: Refactor load_module/unload_module
load_module was just too hairy with every step having to clean up all
previous steps on failure.

Some of the pjproject init calls have now been moved to a separate
load_pjsip function and the unload_pjsip function was enhanced to clean
up everything if an error happened at any stage of the load process.

In the process, a bunch of missing pj_shutdowns, serializer_pool_shutdowns
and ast_threadpool_shutdowns were also corrected.

Change-Id: I5eec711b437c35b56605ed99537ebbb30463b302
2016-02-11 18:44:53 -06:00
zuul 8c15f309c2 Merge "Resources/res_phoneprov: fix memory leak and heap-use-after-free" into 13 2016-02-11 16:45:59 -06:00
Badalyan Vyacheslav 20e9792fbc Resources/res_phoneprov: fix memory leak and heap-use-after-free
* heap-use-after-free happens when we free "cfg"
but then use "value" which refers to it

* A memory leak occurs because in some cases
it is not released "defaults"

ASTERISK-25721 #close
Reported by: Badalyan Vyacheslav
Tested by: Badalyan Vyacheslav

Change-Id: I3807d3f4726df6864430ec144cf6265d3f538469
2016-02-11 19:59:02 +00:00
Sean Bright 962a9d61f8 func_iconv: Ensure output strings are properly terminated.
ASTERISK-25272 #close
Reported by: Etienne Lessard
patches:
 AST-25272.patch submitted by Etienne Lessard (license #6394)

Change-Id: Id75ad202300960a1e91afe15e319d992936ecc17
2016-02-11 11:25:54 -06:00
Joshua Colp 249d80f120 Merge "res_pjsip: Fix infinite recursion when loading transports from realtime" into 13 2016-02-11 06:09:49 -06:00
George Joseph c1bf014ea0 res_pjsip: Handle pjsip_dlg_create_uas deprecation
Pjproject has deprecated pjsip_dlg_create_uas in 2.5 and replaced it with
pjsip_dlg_create_uas_and_inc_lock which, as the name implies, automatically
increments the lock on the returned dialog.  To account for this, configure.ac
now detects the presence of pjsip_dlg_create_uas_and_inc_lock and res_pjsip.c
has an #ifdef HAVE_PJSIP_DLG_CREATE_UAS_AND_INC_LOCK to decide whether to use
the original call or the new one.  If the new one was used, the ref count is
decremented before returning.

ASTERISK-25751 #close
Reported-by Josh Colp

Change-Id: I1be776b94761df03bd0693bc7795a75682615ca8
2016-02-10 16:27:00 -06:00
Joshua Colp 0e25e4a924 Merge "Build: Fix menuselect USAN conflicts" into 13 2016-02-10 15:39:53 -06:00
Badalyan Vyacheslav bd07b6f0dd Build: Added testing compiler to support the system sanitizes
In older versions of the compiler was not sanitizes.
Compilers other than GCC can not support the Usan and TSAN
or have other options for *FLAGS.

ASTERISK-25767 #close
Reported by: Badalyan Vyacheslav
Tested by: Badalyan Vyacheslav

Change-Id: Iefce6608221fa87884b82ae3cb5649b7b1804916
2016-02-09 23:51:05 -06:00
Badalyan Vyacheslav e9e896abd1 Build: Fix menuselect USAN conflicts
USAN can be used together with other sanitizers.

Reported by: Badalyan Vyacheslav
Tested by: Badalyan Vyacheslav

Change-Id: I3bffa350d70965c3026651dba3a12414d0aaa45f
2016-02-09 22:15:33 -06:00
Corey Farrell 93e8ed0154 Simplify and fix conditional in FD_SET.
FD_SET contains a conditional statement to protect against buffer
overruns.  The statement was overly complicated and prevented use
of the last array element of ast_fdset.  We now just verify the fd
is less than ast_FDMAX.

Change-Id: I41895c0b497b052aef5bf49d75c817c48b326f40
2016-02-09 14:39:20 -06:00
Joshua Colp a7c8d4cd6b tests/test_sorcery_memory_cache_thrash: Improve termination process.
When terminating the threads thrashing a sorcery memory cache each
would be told to stop and then we would wait on them. During at
least one thrashing test this was problematic due to the specific
usage pattern in use. It would take some time for termination of the
thread to occur.

This would occur due to contention between the threads retrieving
and the threads updating the cache. As the retrieving threads are
given priority it may be some time before the updating threads
are able to proceed.

This change makes it so all threads are told to stop and then each
are joined to ensure they stop. This way all the threads should
stop at around the same time instead of waiting for one to stop,
the next to stop, then the next, and so on. As a result of this
the execution time for each thrash test is much closer to their
expected value than previously seen as well.

Change-Id: I04a53470b0ea4170b8819180b0bd7475f3642827
2016-02-09 11:24:51 -06:00
George Joseph 2451d4e455 res_pjsip: Fix infinite recursion when loading transports from realtime
Attempting to load a transport from realtime was forcing asterisk into an
infinite recursion loop.  The first thing transport_apply did was to do a
sorcery retrieve by id for an existing transport of the same name. For files,
this just returns the previous object from res_sorcery_config's internal
container, if any.  For realtime, the res_sourcery_realtime driver looks in the
database and finds the existing row but now it has to rehydrate it into a
sorcery object which means calling... transport_apply.  And so it goes.

The main issue with loading from realtime (apart from the loop) was that
transport stores structures and pointers directly in the ast_sip_transport
structure instead of the separate ast_transport_state structure.  This patch
separates those items into the ast_sip_transport_state structure.  The pattern
is roughly the same as res_pjsip_outbound_registration.

Although all current usages of ast_sip_transport and ast_sip_transport_state
were modified to use the new ast_sip_get_transport_state API, the original
items are left in ast_sip_transport and kept updated to maintain ABI
compatability for third-party modules.  They are marked as deprecated and
noted that they're now in ast_sip_transport_state.

ASTERISK-25606 #close
Reported-by: Martin Moučka

Change-Id: Ic7a836ea8e786e8def51fe3f8cce855ea54f5f19
2016-02-08 18:08:32 -07:00
Joshua Colp 78fa818c1b Merge "chan_misdn: Fix a few issues causing compile errors" into 13 2016-02-08 05:56:44 -06:00
Richard Mudgett 6f978fbfe5 app_confbridge: Only use b_profile options from the conference.
A user cannot set new bridge options after the conference is created by
the first user.  Attempting to do so is documented as undefined behavior.

This patch ensures that the bridge profile options used are from the
conference and not what a subsequent user may have tried to set.

Change-Id: I1b6383eba654679e5739d5a8de98199cf074a266
2016-02-05 12:01:28 -06:00
George Joseph ec8fd6714d chan_misdn: Fix a few issues causing compile errors
Change-Id: I54b48c24d7ca88ed80496fdfd142d08772a7ab98
2016-02-05 11:58:26 -06:00
Joshua Colp 1fca224533 Merge "pjsip/alembic: Add missing columns to system and registration" into 13 2016-02-05 11:50:28 -06:00
Joshua Colp c9e1c203b5 Merge "app_confbridge.c: Replace inlined code with existing function." into 13 2016-02-05 11:49:39 -06:00
Joshua Colp 2177dbea50 Merge topic 'ASTERISK-20987' into 13
* changes:
  app_confbridge: Add ability to get the muted conference state.
  app_confbridge.c: Update CONFBRIDGE and CONFBRIDGE_INFO documentation.
  app_confbridge: Make non-admin users join a muted conference muted.
2016-02-05 11:49:10 -06:00
Mark Michelson 6a799cd78f Check for OpenSSL defines before trying to use them.
The SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TLSv1_2 defines did not exist prior
to OpenSSL version 1.0.1. A recent commit attempts to, by default, set
these options, which can cause problems on systems with older OpenSSL
installations.

This commit adds a configure script check for those defines and will not
attempt to make use of those if they do not exist. We will print a
warning urging the user to upgrade their OpenSSL installation if those
defines are not present.

Change-Id: I6a2eb9a43fd0738b404d8f6f2cf4b5c22d9d752d
2016-02-04 16:57:38 -06:00
George Joseph 953d1cc11a pjsip/alembic: Add missing columns to system and registration
ps_systems needed disable_tcp_switch
ps_registrations needed line and endpoint

ASTERISK-25737 #close

Change-Id: Iaf9c2d69e62243d9fa53104c28c5339c47d4ac19
2016-02-04 14:23:35 -06:00
Mark Michelson c5e7d5c105 Merge "logging: Remove/fix some message annoyances" into 13 2016-02-04 14:10:55 -06:00
Joshua Colp 6cac364284 Merge "res_stasis_device_state: Fix refcounting error." into 13 2016-02-04 12:35:52 -06:00
Joshua Colp 014fc9ef65 Merge "res_xmpp: Does not connect in component mode" into 13 2016-02-04 12:26:58 -06:00
Mark Michelson 23829b3253 res_stasis_device_state: Fix refcounting error.
Device state subscription lifetimes were governed by when the
subscription was established and unsubscribed from. However, it is
possible that at the time of unsubscription, there could be device state
events still in flight. When those device state events occur, the device
state callback could attempt to dereference a freed pointer. Crash.

This change ensures that the lifetime of the device state subscription
does not end until the underlying stasis subscription has confirmed that
its final message has been sent.

Change-Id: I25a0f1472894c1a562252fb7129671478e25e9b2
2016-02-04 11:39:10 -06:00
Sean Bright 4e8e6d3922 res_rtp_asterisk: Allow ICE host candidates to be overriden
During ICE negotiation the IPs of the local interfaces are sent to the remote
peer as host candidates. In many cases Asterisk is behind a static one-to-one
NAT, so these host addresses will be internal IP addresses.

To help in hiding the topology of the internal network, this patch adds the
ability to override the host candidates by matching them against a
user-defined list of replacements.

Change-Id: I1c9541af97b83a4c690c8150d19bf7202c8bff1f
2016-02-03 18:02:09 -05:00
Kevin Harwell f55f79edba Merge "AST-2016-003 udptl.c: Fix uninitialized values." into 13 2016-02-03 15:17:33 -06:00
Kevin Harwell 4834d460d6 Merge "AST-2016-002 chan_sip.c: Fix retransmission timeout integer overflow." into 13 2016-02-03 15:16:52 -06:00
Richard Mudgett c6b1b2b1c8 AST-2016-003 udptl.c: Fix uninitialized values.
Sending UDPTL packets to Asterisk with the right amount of missing
sequence numbers and enough redundant 0-length IFP packets, can make
Asterisk crash.

ASTERISK-25603 #close
Reported by: Walter Doekes

ASTERISK-25742 #close
Reported by: Torrey Searle

Change-Id: I97df8375041be986f3f266ac1946a538023a5255
2016-02-03 15:08:15 -06:00
Joshua Colp f8acadde2c AST-2016-001 http: Provide greater control of TLS and set modern defaults.
This change exposes the configuration of various aspects of the TLS
support and sets the default to the modern standards.

The TLS cipher is now set to the best values according to the
Mozilla OpSec team, different TLS versions can now be disabled, and
the cipher order can be forced to be that of the server instead of
the client.

ASTERISK-24972 #close

Change-Id: I0a10f2883f7559af5e48dee0901251dbf30d45b8
2016-02-03 15:07:56 -06:00
Richard Mudgett 3c81a052c8 AST-2016-002 chan_sip.c: Fix retransmission timeout integer overflow.
Setting the sip.conf timert1 value to a value higher than 1245 can cause
an integer overflow and result in large retransmit timeout times.  These
large timeout times hold system file descriptors hostage and can cause the
system to run out of file descriptors.

NOTE: The default sip.conf timert1 value is 500 which does not expose the
vulnerability.

* The overflow is now detected and the previous timeout time is
calculated.

ASTERISK-25397 #close
Reported by: Alexander Traud

Change-Id: Ia7231f2f415af1cbf90b923e001b9219cff46290
2016-02-03 15:04:50 -06:00
George Joseph 2a6ee8caeb logging: Remove/fix some message annoyances
test_dlinklists doesn't need to NOTICE everyone that every macro worked.

res_phoneprov doesn't need to VERBOSE everyone that a phoneprov extension or
provider was registered.

res_odbc was missing a newline at the end of one message.

Change-Id: I6c06361518ef3711821795e535acd439782a995e
2016-02-03 13:07:07 -07:00
Joshua Colp 73159cb45f Merge "res_sorcery_realtime: Fix regex regression." into 13 2016-02-03 10:14:40 -06:00
Mark Michelson 389a94eda2 Merge "chan_sip.c: AMI & CLI notify methods get different values of asterisk's own ip." into 13 2016-02-02 15:59:00 -06:00
Mark Michelson 32fc784284 res_sorcery_realtime: Fix regex regression.
A regression was introduced where searching for realtime PJSIP objects
by regex by starting the regex with a leading "^" would cause no items
to be returned.

This was due to a change which attempted to drop the requirement for a
leading "^" to be present due to how some CLI commands formulate their
regexes. However, the change, rather than simply eliminating the
requirement, caused any regexes that did begin with "^" to end up not
returning the expected results.

This change fixes the problem by inspecting the regex and formulating
the realtime query differently depending on if it begins with "^".

ASTERISK-25702 #close
Reported by Nic Colledge

Patches:
    realtime_retrieve_regex.patch submitted by Alexei Gradinari License #5691

Change-Id: I055df608a6e6a10732044fa737a9fe8dca602693
2016-02-02 10:52:29 -06:00
Karsten Wemheuer 0405c31756 res_xmpp: Does not connect in component mode
The module res_xmpp does not accept usernames in the form used in component
mode (XEP-0114). In component mode there is no @something in the name.
In component mode the connection is now not dropped anymore.

If the xmpp server sends out a "stream" tag before handshake is finished,
the connection gets dropped in res_xmpp. Now this tag will be ignored and
the connection will be established.

After connecting there will be an exchange of presence states. This does
not work as expected in component mode. The responsible function
"xmpp_pak_presence" is left before the states get sent out. Sending
presence states in component mode is now moved to the top of the function.

ASTERISK-25735 #close

Change-Id: I70e036f931c3124ebb2ad1e56f93ed35cfdd9d5c
2016-02-02 06:48:01 -06:00
Joshua Colp f6551868be Merge "res_odbc: Remove connection management" into 13 2016-02-02 06:46:58 -06:00
George Joseph 8804d0973c build_system: Fix some warnings highlighted by clang
Fix some warnings found with clang.

Change-Id: I5195b6189b148c2ee3ed4a19d015a6d4ef3e77bd
2016-02-01 18:20:05 -07:00
George Joseph 109b0aff6b res/Makefile: Fix bug in "clean" target for ari
The "clean" target was attempting to clean res/ari from inside
the res directory which doesn't remove anything.  Removed the res/
prefix.

Change-Id: Ib1a518d54efa81b9fd5a42742d43cc3767435bf6
2016-02-01 13:19:41 -06:00
George Joseph a85fab7c44 pjsip/alembic: Fix definition of qualify_timeout
A recent commit set qualify_timeout to Decimal which isn't supported.
This path corrects it to Float.

Change-Id: I038f5274ba8cb60f8518a5845ce448d49306aadf
2016-01-31 19:13:58 -07:00
StefanEng86 aa9348ab9a chan_sip.c: AMI & CLI notify methods get different values of asterisk's own ip.
When I ask asterisk to send a SIP NOTIFY message to a sip peer using either a)
AMI action: SIPnotify or b) cli command: sip notify <cmd> <peer>, I expect
asterisk to include the same value for its own ip in both cases a) and b),
but it seems a) produces a contact header like Contact:
<sip:asterisk@192.168.1.227:8060> whereas b) produces a contact header like
<sip:asterisk@127.0.0.1:8060>. 0.0.0.0:8060 is my udpbindaddr in sip.conf

My guess is that manager_sipnotify should call
ast_sip_ouraddrfor(&p->sa, &p->ourip, p) the same way sip_cli_notify does,
because after applying this patch, both cases a) and b) produce
the contact header that I expect: <sip:asterisk@192.168.1.227:8060>

Reported by: Stefan Engström
Tested by: Stefan Engström

Change-Id: I86af5e209db64aab82c25417de6c768fb645f476
2016-01-31 10:25:05 -06:00
Mark Michelson 65bd4fcc3f res_odbc: Remove connection management
Asterisk by default will create a single database connection and share
it among all threads that attempt to access the database. In previous
versions of Asterisk, this was tolerable, because the most used channel
driver, chan_sip, mostly accessed the database from a single thread.
With PJSIP, however, many threads may be attempting to perform database
operations, and there is the potential for many more database accesses,
meaning the concurrency is a horrible bottleneck if only one connection
is shared.

Asterisk has a connection pooling facility built into it, but the
implementation has flaws. For one, there is a strict limit on the number
of simultaneous connections that could be made to the database. Anything
beyond the maximum would result in a failed operation. Attempting to
predict what the maximum should be is nearly impossible even for someone
intimately familiar with Asterisk's threading model. In addition, use of
transactions in the dialplan can cause some severe bugs if connection
pooling is enabled.

This commit seeks to fix the concurrency problem by removing all
connection management code from Asterisk and leaving that to the
underlying unixODBC code instead. Now, Asterisk does not share a single
connection, nor does it try to maintain a connection pool. Instead, all
Asterisk ever does is request a connection from unixODBC and allow
unixODBC to either allocate those connections or retrieve them from a
pool.

Doing this has a bit of a ripple effect. For one, since connections are
not long-lived objects, several of the safeguards that previously
existed have been removed. We don't have to worry about trying to use a
connection that has gone stale. In every case, when we request a
connection, it has just been made and we don't need to perform any
sanity checks to be sure it's still active.

Another major player affected by this change is transactions.
Transactions and their respective connections were so tightly coupled
that it was almost pornographic. This code change moves
transaction-related code to its own file separate from the core ODBC
functionality. This way, the core of ODBC does not even have to know
that transactions exist.

In making this large change, I had to look at a lot of code and
understand it. When making this change, I discovered several places
where the behavior is definitely not ideal, but it seemed outside the
scope of this change to be fixing it. Instead, any place where I saw
some sort of room for improvement has had a XXX comment added explaining
what could be altered to improve it.

Change-Id: I37a84def5ea4ddf93868ce8105f39de078297fbf
2016-01-29 08:32:35 -06:00
Joshua Colp 9711ad0de6 Merge "build_system: Prevent goals needing makeopts from running when it's missing" into 13 2016-01-29 08:06:14 -06:00
Mark Michelson afdf8e5d5c Merge "config: Allow options to register when documentation is unavailable." into 13 2016-01-28 15:56:33 -06:00
Richard Mudgett 2a9e623ff9 config_options.c: Fix warning message wording.
Change-Id: I915ea437936320393afde0e7552cf0a980a6b2e4
2016-01-28 12:44:43 -06:00
Richard Mudgett ed3c9c1512 app_confbridge.c: Replace inlined code with existing function.
Change-Id: Ida5594e9f8d7c1fc18eeb733a11f8fb96326da51
2016-01-27 16:33:49 -06:00
Richard Mudgett 1d0abf86e7 app_confbridge: Add ability to get the muted conference state.
* Added CONFBRIDGE_INFO(muted,) for querying the muted conference state.

* Added Muted header to AMI ConfbridgeListRooms action response list
events to indicate the muted conference state.

* Added Muted column to CLI "confbridge list" output to indicate the muted
conference state and made the locked column a yes/no value instead of a
locked/unlocked value.

ASTERISK-20987
Reported by: hristo

Change-Id: I4076bd8ea1c23a3afd4f5833e9291b49a0c448b1
2016-01-27 16:30:49 -06:00
Richard Mudgett f0d40afa69 app_confbridge.c: Update CONFBRIDGE and CONFBRIDGE_INFO documentation.
Change-Id: Ic1f9e22ba1f2ff3b3f5cb017c5ddcd9bd48eccc7
2016-01-27 14:35:16 -06:00
Richard Mudgett 3e51e5c7fd app_confbridge: Make non-admin users join a muted conference muted.
ASTERISK-20987 #close
Reported by: hristo

Change-Id: Ic61a2b524ab3a4cfadf227fc6b3506527bc03f38
2016-01-27 14:35:16 -06:00
George Joseph 9da18af992 res_pjsip: Add res_pjproject dependency to UPGRADE.txt and samples
Since res_pjsip now depends on res_pjproject, this is now mentioned
in UPGRADE.txt and the basic-pbx modules.conf has been updated.

Change-Id: I42826597d5e10f08e518208860c44c96e52f1b2d
2016-01-27 13:22:14 -06:00
George Joseph aee8448bc2 build_system: Prevent goals needing makeopts from running when it's missing
The Makefile only optionally includes makeopts so when goals like uninstall that
dont depend on anything else are run after a distclean, rules like
'rm -f "$(DESTDIR)$(ASTMODDIR)/"*' get run as 'rm -f ""/*' which attempts
to remove everything in the root directory.

Although there's a rule defined for makeopts which prints a message and does
an 'exit 1', since '-include makepopts' was specified (with the -), the exit
was ignored letting the rest of the rules run.

This patch makes makeopts required unless the goal has the string 'clean' in it.

ASTERISK-25730 #close
Reported-by: George Joseph

Change-Id: I1bce59a7ea4f48e7a468e22b2abbb13c63417ac7
2016-01-27 09:31:05 -07:00
Joshua Colp 4cc784eb04 Merge "Stasis: Use custom structure when setting variables." into 13 2016-01-26 11:25:36 -06:00
Joshua Colp f22074e5d9 config: Allow options to register when documentation is unavailable.
The config options framework is strict in that configuration options must
be documented unless XML documentation support is not available. In
practice this is useful as it ensures documentation exists however in
off-nominal cases this can cause strange problems.

If it is expected that a config option has a non-zero or non-empty
default value but the config option documentation is unavailable
this reasonable expectation will not be met. This can cause obscure
crashes and weirdness depending on how the code handles it.

This change tweaks the behavior to ensure that the config option
is still allowed to register, apply default values, and be set when
devmode is not enabled. If devmode is enabled then the option can
NOT be set.

This also does not remove the initial documentation error message that
is output on load when registering the configuration option.

ASTERISK-25725 #close

Change-Id: Iec42fca6b35f31326c33fcdc25473f6fd7bc8af8
2016-01-26 13:10:50 -04:00
Mark Michelson 4a3275abb9 Stasis: Use custom structure when setting variables.
A recent change to queue channel variable setting to the Stasis control
queue caused a regression. When setting channel variables, it is
possible to give a NULL channel variable value in order to unset the
variable (i.e. remove it from the channel variable list). The change
introduced a call to ast_variable_new(), which is not tolerant of NULL
channel variable values.

This new change switches from using ast_variable to using a custom
channel variable struct that is lighter weight and NULL value-tolerant.

Change-Id: I784d7beaaa3c036ea936d103e7caf0bb1562162d
2016-01-26 10:22:59 -06:00
Matt Jordan c9a0f4f8ff Merge "res_pjsip_pubsub: Prevent crash from AMI command on freed subscription." into 13 2016-01-26 07:05:35 -06:00
Rusty Newton b2c8a99f9e sounds/Makefile: Incremented core and extra sounds versions to 1.5
Core and extra sounds 1.5 was recently released! The tarballs contain
change descriptions however I figure more people will see this one so
I'll try to be a bit detailed. Approximately 60 sounds were moved from Extra
to Core for en, en_GB, fr and added for languages that didn't already
have Extra sound sets (it,ja,ru).

In addition all of the English and Russian sounds have been completely
re-recorded.

Sounds moved and added:
activated,added,all-circuits-busy-now,astcc-followed-by-pound
at-tone-time-exactly,call-forwarding,call-fwd-no-ans,call-fwd-on-busy
,call-fwd-unconditional,calling,call-waiting,cancelled,
cannot-complete-as-dialed,check-number-dial-again,conf-full,de-activated
,disabled,do-not-disturb,enabled,enter-num-blacklist,entr-num-rmv-blklist
,extension,feature-not-avail-line,for,from-unknown-caller,goodbye,hello
,if-correct-press,im-sorry,info-about-last-call,is,is-in-use,is-set-to
,location,number,number-not-answering,num-was-successfully,one-moment-please
,please-try-again,pls-hold-while-try,pls-try-call-later,pm-invalid-option
,privacy-to-blacklist-last-caller,removed,simul-call-limit-reached
,something-terribly-wrong,sorry,sorry-youre-having-problems,speed-dial
,speed-dial-empty,telephone-number,time,to-call-this-number,to-extension
,to-listen-to-it,to-rerecord-it,unidentified-no-callback,with,you-entered
,your

There were also a few random fixes here and there to file names for a few
of the languages.

ASTERISK-25068 #close

Change-Id: I2b594344ec585d7dfd922b40c1af43b1508828b3
2016-01-26 06:11:31 -06:00
Mark Michelson 8261bda1bf res_pjsip_pubsub: Prevent crash from AMI command on freed subscription.
A test recently uncovered that running an ill-timed AMI command to show
inbound subscriptions could cause a crash since Asterisk will try to
operate on a freed subscription.

The fix for this is to remove the subscription tree from the list of
subscriptions at the time that we are sending our final NOTIFY request
out. This way, as the subscription is in the process of dying, it is
inaccessible from AMI.

Change-Id: Ic0239003d8d73e04c47c12dd2a7e23867e5b5b23
2016-01-25 16:51:25 -06:00
Corey Farrell a6823bb0c4 chan_sip: Fix buffer overrun in sip_sipredirect.
sip_sipredirect uses sscanf to copy up to 256 characters to a stacked buffer
of 256 characters.  This patch reduces the copy to 255 characters to leave
room for the string null terminator.

ASTERISK-25722 #close

Change-Id: Id6c3a629a609e94153287512c59aa1923e8a03ab
2016-01-25 12:06:28 -05:00
Joshua Colp fcb6c1737d Merge "Stasis: Use control queue to prevent crash." into 13 2016-01-23 10:07:44 -06:00
Mark Michelson 1003c2eb05 Stasis: Fix potential memory leak of control data.
When queuing tasks onto the Stasis control queue, you can pass an
arbitrary data pointer and a function to free that data. All ARI
commands that use the Stasis control queue made the assumption that the
destructor function would be called in all paths, whether the task was
queued successfully or not. However, this was not correct. If a task was
queued onto a control structure that was already completed, the
allocated data would not be freed properly.

This patch corrects this by making sure that all return paths call the
data destructor.

Change-Id: Ibf06522094f8e5c4cce652537dc5d7222b1c4fcb
2016-01-22 15:08:58 -06:00
Mark Michelson eedd77fda0 Stasis: Use control queue to prevent crash.
A crash occurred when attempting to set a channel variable on a channel
that had already been hung up. This is because there is a small window
between when a control is grabbed and when the channel variable is set
that the channel can be hung up.

The fix here is to queue the setting of the channel variable onto the
control queue. This way, the manipulation of the channel happens in a
thread where it is safe to be done.

In this change, I also noticed that the setting of bridge roles on
channels was being done outside of the control queue, so I also changed
those operations to be done in the control queue.

ASTERISK-25709 #close
Reported by Mark Michelson

Change-Id: I2a0a4d51bce6fba6f1d9954e40935e42f366ea78
2016-01-22 14:55:28 -06:00
Richard Mudgett 1c95b211a0 logger.c: Fix buffer overrun found by address sanitizer.
The null terminator of the tail struct member was not being allocated
when no logger.conf config file is installed.

ASTERISK-25714 #close
Reported by: Badalian Vyacheslav

Change-Id: I45770fdd08af39506a3bc33ba279c4f16e047a30
2016-01-22 11:50:41 -06:00
Matt Jordan a0d3932e2a Merge "Build System: Add support for checking alembic branches." into 13 2016-01-21 20:56:58 -06:00
Matt Jordan c3f4afe40c Merge "res/res_pjsip/presence_xml.c: Add missing 2nd call presence state case." into 13 2016-01-21 17:25:22 -06:00
Corey Farrell 6ff945ab87 Build System: Add support for checking alembic branches.
* Add 'check-alembic' target to root Makefile.
* Create build_tools/make_check_alembic to do the actual checks.

ASTERISK-25685

Change-Id: Ibb3cae7d1202ac23dc70b0f3b5801571ad46b004
2016-01-21 18:11:07 -05:00
Richard Mudgett 02035212de res/res_pjsip/presence_xml.c: Add missing 2nd call presence state case.
ASTERISK-25712 #close
Reported by: Richard Mudgett

Change-Id: I70634df24f8c6c3a2c66c45af61d021e4999253f
2016-01-21 15:56:47 -06:00
Diederik de Groot c68c66c61f main/asterisk.c: ast_el_read_char
Make sure buf[res] is not accessed at res=-1 (buffer underrun).
Address Sanitizer will complain about this quite loudly.

ASTERISK-24801 #close

Change-Id: Ifcd7f691310815a31756b76067c56fba299d3ae9
2016-01-21 15:25:07 -06:00
Richard Mudgett f87c3275cc res_pjsip: Add CLI "pjsip dump endpt [details]"
Dump the res_pjsip endpt internals.

In non-developer mode we will not document or make easily accessible the
"details" option even though it is still available.  The user has to know
it exists to use it.  Presumably they would also be aware of the potential
crash warning below.

Warning: PJPROJECT documents that the function used by this CLI command
may cause a crash when asking for details because it tries to access all
active memory pools.

Change-Id: If2d98a3641c9873364d1daaad971376311aef3cb
2016-01-21 12:39:28 -06:00
Mark Michelson 09a6354f9e Merge topics 'increase_taskprocessor_timeout', 'fix_taskprocessor_unrefs' into 13
* changes:
  taskprocessor.c: Increase CLI "core ping taskprocessor" timeout.
  taskprocessor.c: Fix some taskprocessor unrefs.
2016-01-20 14:18:45 -06:00
Joshua Colp a2928b6093 Merge "res_pjproject: Add module providing pjproject logging and utils" into 13 2016-01-20 11:46:14 -06:00
Joshua Colp de3d988b9e Merge "funcs/func_cdr: Correctly report high precision values for duration and billsec" into 13 2016-01-20 10:33:19 -06:00
Joshua Colp d1113e0f56 Merge "pjsip_loging_refactor: Rename res_pjsip_log_forwarder to res_pjproject" into 13 2016-01-20 10:32:41 -06:00
Matt Jordan 46b2de55f9 funcs/func_cdr: Correctly report high precision values for duration and billsec
When CDRs were refactored, func_cdr's ability to report high precision values
for duration and billsec (the 'f' option) was broken. This was due to func_cdr
incorrectly interpreting the duration/billsec values provided by the CDR engine
in milliseconds, as opposed to seconds. Since the CDR engine only provides
duration and billsec in seconds, and does not expose either attribute with
sufficient precision to merely pass back the underlying value, this patch fixes
the bug by re-calculating duration and billsec with microsecond precision based
on the start/answer/end times on the CDR.

ASTERISK-25179 #close

Change-Id: I8bc63822b496537a5bf80baf6102c06206bee841
2016-01-20 08:08:20 -06:00
George Joseph 137fe5ae01 res_pjproject: Add module providing pjproject logging and utils
res_pjsip_log_forwarder has been renamed to res_pjproject
and enhanced as follows:

As a follow-on to the recent 'Add CLI "pjsip show buildopts"' patch,
a new ast_pjproject_get_buildopt function has been added.  It
allows the caller to get the value of one of the buildopts.

The initial use case is retrieving the runtime value of
PJ_MAX_HOSTNAME to insure we don't send a hostname greater
than pjproject can handle.  Since it can differ between
the version of pjproject that Asterisk was compiled against
and the version of pjproject that Asterisk is running against,
we can't use the PJ_MAX_HOSTNAME macro directly in Asterisk
source code.

Change-Id: Iab6e82fec3d7cf00c1cf6185c42be3e7569dee1e
2016-01-20 06:13:41 -07:00
Matt Jordan 113adf336a Merge "test_threadpool: Wait for each task to complete and fix memory leak." into 13 2016-01-19 19:37:13 -06:00
Joshua Colp b5c13c1545 test_threadpool: Wait for each task to complete and fix memory leak.
This change makes the thread_timeout_thrash unit test wait for
each task to complete. This fixes the problem where the test would
prematurely end when all threads were gone and a new one had to be
started to handle the last task. It also increases the thrasing as
it is now more likely for each task to encounter the above scenario.

This also fixes a memory leak where the data for each task was not
being freed.

ASTERISK-25611 #close

Change-Id: I5017d621a4dc911f509074c16229b86bff2fb3c6
2016-01-19 19:18:10 -04:00
Richard Mudgett 0ab89182d9 taskprocessor.c: Increase CLI "core ping taskprocessor" timeout.
Change-Id: I4892d6acbb580d6c207d006341eaf5e0f8f2a029
2016-01-19 16:37:12 -06:00
Richard Mudgett a2a8ea3330 taskprocessor.c: Fix some taskprocessor unrefs.
You have to call ast_taskprocessor_unref() outside of the taskprocessor
implementation code.  Taskprocessor use since v12 has become more
transient than just the singleton uses in earlier versions.

Change-Id: If7675299924c0cc65f2a43a85254e6f06f2d61bb
2016-01-19 16:30:56 -06:00
Richard Mudgett d604a9afc8 Fix alembic branches on v13.
Change-Id: I313449b609ede18ad1e1763a655dd23b9210a8e0
2016-01-19 13:44:31 -06:00
Joshua Colp 80e901396e Merge "Remove res/ari/* content during 'make clean'." into 13 2016-01-18 19:27:44 -06:00
Joshua Colp e7b83fa76e Merge "pjsip/alembic: Fix qualify_timeout column definition" into 13 2016-01-18 19:24:40 -06:00
George Joseph a0c79f3a4f pjsip_loging_refactor: Rename res_pjsip_log_forwarder to res_pjproject
Change-Id: I5387821f29e5caa0cba0b7d62b0fc0d341e7e20b
2016-01-18 17:45:48 -07:00
Mark Michelson e50c6f32cc Merge "Update version number in features.conf.sample" into 13 2016-01-18 17:31:35 -06:00
Rusty Newton 018ccf680b func_channel: Add help text for undocumented CHANNEL function arguments
Adding help text documentation for:
* hangupsource
* appname
* appdata
* exten
* context
* channame
* uniqueid
* linkedid

ASTERISK-24097 #close
Reported by: Steven T. Wheeler
Tested by: Rusty Newton

Change-Id: Ib94b00568b0433987df87d5b67ea529b5905754d
2016-01-17 11:49:43 -06:00
Joshua Colp 33af878768 Merge "main/config: Clean config maps on shutdown." into 13 2016-01-17 11:44:28 -06:00
Daniel Journo 5644bca9f9 Update version number in features.conf.sample
Update the version number in the comments from Asterisk 12 to Asterisk 12+

Change-Id: Ie692ac8cda3c993c3bf10f27f51a1cca3317ec7b
2016-01-16 20:06:40 +00:00
Joshua Colp d690b88a1e Merge "bridge_basic: don't play an attended transfer fail sound after target hangs up" into 13 2016-01-16 08:29:51 -06:00
Joshua Colp aaa52a2a05 Merge "bridge_basic: don't cache xferfailsound during an attended transfer" into 13 2016-01-16 08:29:23 -06:00
Joshua Colp 0aa47e11e1 Merge "taskprocessor.c: Simplify ast_taskprocessor_get() return code." into 13 2016-01-16 08:28:10 -06:00
Corey Farrell 3f5f30cf82 main/config: Clean config maps on shutdown.
ASTERISK-25700 #close

Change-Id: I096da84f9c62c6095f68bcf98eac4b7c7868e808
2016-01-15 19:59:59 -06:00
Kevin Harwell 660fedecb7 bridge_basic: don't cache xferfailsound during an attended transfer
The xferfailsound was read from the channel at the beginning of the transfer,
and that value is "cached" for the duration of the transfer. Therefore, changing
the xferfailsound on the channel using the FEATURE() dialplan function does
nothing once the transfer is under way.

This makes it so the transfer code instead gets the xferfailsound configuration
options from the channel when it is actually going to be used.

This patch also fixes a potential memory leak of the props object as well as
making sure the condition variable gets initialized before being destroyed.

ASTERISK-25696 #close

Change-Id: Ic726b0f54ef588bd9c9c67f4b0e4d787934f85e4
2016-01-15 17:45:51 -06:00
Richard Mudgett 9cda1de34d taskprocessor.c: Simplify ast_taskprocessor_get() return code.
Change-Id: Id5bd18ef1f60ef8be453e677e98478298358a9d1
2016-01-15 12:36:34 -06:00
Richard Mudgett a79af2b312 astmm.c: Add more stats to CLI "memory show" commands.
* Add freed regions totals to allocations and summary.

* Add totals for all allocations and not just the selected allocations.

Change-Id: I61d5a5112617b0733097f2545a3006a344b4032a
2016-01-14 19:37:36 -06:00
Kevin Harwell 83feb7db3b bridge_basic: don't play an attended transfer fail sound after target hangs up
If the attended transfer destination answers (picks call up or goes to
voicemail) and then hangs up on the transferer then transferer hears the
fail sound.

This patch makes it so the fail sound is not played when the transfer
destination/target hangs up after answering.

ASTERISK-25697 #close

Change-Id: I97f142fe4fc2805d1a24b7c16143069dc03d9ded
2016-01-14 16:00:50 -06:00
Mark Michelson 935d641f3b Remove res/ari/* content during 'make clean'.
'make clean' and 'make distclean' can leave behind .o files in the
res/ari/ directory. One observed consequence of this is that running
Asterisk with MALLOC_DEBUG can cause Asterisk to crash immediately on
startup sometimes.

By ensuring that we are making a clean build, we can be sure that stale
files are not being included in the build and causing problems when
build options should have caused files to be re-built.

ASTERISK-25683 #close
Reported by yaron nahum

Change-Id: I1f48baa904d2468eddeefb42ee68a56af7adc7b7
2016-01-14 13:22:46 -06:00
Joshua Colp 236896f391 Merge "pjsip: Add option global/regcontext" into 13 2016-01-14 06:32:04 -06:00
Daniel Journo 46f21df302 pjsip/alembic: Fix qualify_timeout column definition
Corrects the qualify_timeout column type from Integer to Decimal

ASTERISK-25686 #close
Reported-by: Marcelo Terres

Change-Id: I757d0e3c011ee9be6cd5abd48bc92441a405d3c8
2016-01-13 21:58:22 +00:00
Mark Michelson caba57631d Merge "app: Queue hangup if channel is hung up during sub or macro execution." into 13 2016-01-13 15:10:42 -06:00
Joshua Colp 32b29d7b02 app: Queue hangup if channel is hung up during sub or macro execution.
This issue was exposed when executing a connected line subroutine.
When connected or redirected subroutines or macros are executed it is
expected that the underlying applications and logic invoked are fast
and do not consume frames. In practice this constraint is not enforced
and if not adhered to will cause channels to continue when they shouldn't.
This is because each caller of the connected or redirected logic does not
check whether the channel has been hung up on return. As a result the
the hung up channel continues.

This change makes it so when the API to execute a subroutine or
macro is invoked the channel is checked to determine if it has hung up.
If it has then a hangup is queued again so the caller will see it
and stop.

ASTERISK-25690 #close

Change-Id: I1f9a8ceb1487df0389f0d346ce0f6dcbcaf476ea
2016-01-13 12:58:36 -04:00
Mark Michelson f18ad96b77 Merge "res_pjsip_log_forwarder.c: Add CLI "pjsip show buildopts"." into 13 2016-01-13 09:48:54 -06:00
Sean Bright e7cfda0b38 res_musiconhold: Prevent multiple simultaneous reloads.
There are two ways in which the reload() function in res_musiconhold can be
called from the CLI:

  * module reload res_musiconhold.so
  * moh reload

In the former case, the module loader holds a lock that prevents multiple
concurrent calls, but in the latter there is no such protection.

This patch changes the 'moh reload' CLI command to invoke the module loader
directly, rather than call reload() explicitly.

ASTERISK-25687 #close

Change-Id: I408968b4c8932864411b7f9ad88cfdc7b9ba711c
2016-01-13 07:50:19 -06:00
Richard Mudgett 5586abc957 res_pjsip_log_forwarder.c: Add CLI "pjsip show buildopts".
PJPROJECT has a function available to dump the compile time
options used when building the library.

* Add CLI "pjsip show buildopts" command.

* Update contrib/scripts/autosupport to get pjproject information.

Change-Id: Id93a6a916d765b2a2e5a1aeb54caaf83206be748
2016-01-12 20:24:15 -06:00
Joshua Colp 092c0db493 Merge "pjsip_sdp_rtp: Add option endpoint/bind_rtp_to_media_address" into 13 2016-01-12 19:45:34 -06:00
Joshua Colp b91dfcd1fb Merge "res_pjsip: Create human friendly serializer names." into 13 2016-01-12 13:59:42 -06:00
Joshua Colp b41f69dcbc Merge "res_sorcery_realtime: Remove leading ^ requirement." into 13 2016-01-12 13:59:32 -06:00
Joshua Colp 56d1162dc2 Merge topic 'update_taskprocessor_commands' into 13
* changes:
  Sorcery: Create human friendly serializer names.
  Stasis: Create human friendly taskprocessor/serializer names.
  taskprocessor.c: New API for human friendly taskprocessor names.
  taskprocessor.c: Sort CLI "core show taskprocessors" output.
2016-01-12 13:25:40 -06:00
Joshua Colp 25c0ed2f64 Merge "taskprocessor.c: Fix CLI "core show taskprocessors" output format." into 13 2016-01-12 13:18:51 -06:00
Joshua Colp 3bf8c5140d Merge topic 'update_taskprocessor_commands' into 13
* changes:
  taskprocessor.c: Fix CLI "core show taskprocessors" unref.
  taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock.
2016-01-12 13:18:28 -06:00
Joshua Colp 569595c899 Merge "ccss.c: Replace space in taskprocessor name." into 13 2016-01-12 13:17:47 -06:00
Mark Michelson 4cd58c3b20 res_sorcery_realtime: Remove leading ^ requirement.
res_sorcery_realtime's search-by-regex callback performed a check to
ensure that the passed-in regex began with a caret (^). If it did not,
then no results would be returned.

This callback only started to become used when "like" support was added
to PJSIP CLI commands. The CLI command for listing objects would pass an
empty regex ("") to the sorcery backend if no "like" statement was
present. For most sorcery backends, this resulted in returning all
objects. However, for realtime, this resulted in returning no objects.

This commit seeks to fix the regression by removing the requirement from
res_sorcery_realtime for the passed-in-regex to begin with a caret.

ASTERISK-25689 #close
Reported by Marcelo Terres

Change-Id: I22b4dc5d7f3f11bb29ac2e42ef94682e9bab3b20
2016-01-12 13:04:49 -06:00
Joshua Colp ace79fadad Merge "app_queue: Add member flag "in_call" to prevent reading wrong lastcall time" into 13 2016-01-12 06:05:24 -06:00
George Joseph 219c204a41 pjsip_sdp_rtp: Add option endpoint/bind_rtp_to_media_address
On a system with multiple ip addresses in the same subnet, if a
transport is bound to a specific ip address and endpoint/media_address
 is set, the SIP/SDP will have the correct address in all fields but
the rtp stream MAY still originate from one of the other ip addresses,
most probably the "primary" ip address.  This happens because
 res_pjsip_sdp_rtp/create_rtp always calls ast_instance_new with
the "all" ip address (0.0.0.0 or ::).

The new option causes res_pjsip_sdp_rtp/create_rtp to call
ast_rtp_instance_new with the endpoint's media_address (if specified)
instead of the "all" address.  This causes the packets to originate from
the specified address.

ASTERISK-25632
ASTERISK-25637
Reported-by: Olivier Krief
Reported-by: Dan Journo

Change-Id: I3dfaa079e54ba7fb7c4fd1f5f7bd9509bbf8bd88
2016-01-11 18:39:55 -06:00
Mark Michelson f9a275fef4 Merge "Revert "pjsip_location: Delete contact_status object when contact is deleted"" into 13 2016-01-11 17:43:43 -06:00
Joshua Colp 77a46ac84d Merge "pbx: Deadlock between contexts container and context_merge locks" into 13 2016-01-11 17:37:12 -06:00
Joshua Colp 8ec4d20fa9 Merge "pbx_dundi: Run cleanup on failed load." into 13 2016-01-11 16:54:49 -06:00
Daniel Journo 22801a06ee pjsip: Add option global/regcontext
Added new global option (regcontext) to pjsip. When set, Asterisk will
dynamically create and destroy a NoOp priority 1 extension
for a given endpoint who registers or unregisters with us.

ASTERISK-25670 #close
Reported-by: Daniel Journo

Change-Id: Ib1530c5b45340625805c057f8ff1fb240a43ea62
2016-01-11 22:42:57 +00:00
Joshua Colp ddc9c1f720 Merge "res_crypto: Perform cleanup at shutdown." into 13 2016-01-11 16:35:14 -06:00
Joshua Colp 85fdbcefae Merge "res_calendar: Cleanup scheduler context at unload." into 13 2016-01-11 14:35:40 -06:00
Joshua Colp 672920d0cf Merge "manager: Cleanup manager_channelvars during shutdown." into 13 2016-01-11 14:35:20 -06:00
Joshua Colp 85145be4b8 Merge "devicestate: Cleanup engine thread during graceful shutdown." into 13 2016-01-11 14:35:01 -06:00
Kevin Harwell 1600ebca7d pbx: Deadlock between contexts container and context_merge locks
Recent changes (ASTERISK-25394 commit 2bd27d1222)
introduced the possibility of a deadlock. Due to the mentioned modifications
ast_change_hints now needs to keep both merge/delete and state callbacks from
occurring while it executes. Unfortunately, sometimes ast_change_hints can be
called with the contexts container locked. When this happens it's possible for
another thread to grab the context_merge_lock before the thread calling into
ast_change_hints does and then try to obtain the contexts container lock. This
of course causes a deadlock between the two threads. The thread calling into
ast_change_hints waits for the other thread to release context_merge_lock and
the other thread is waiting on that one to release the contexts container lock.

Unfortunately, there is not a great way to fix this problem. When hints change,
the subsequent state callbacks cannot run at the same time as a merge/delete,
nor when the usual state callbacks do. This patch alleviates the problem by
having those particular callbacks (the ones run after a hint change) occur in a
serialized task. By moving the context_merge_lock to a task it can now safely be
attempted or held without a deadlock occurring.

ASTERISK-25640 #close
Reported by: Krzysztof Trempala

Change-Id: If2210ea241afd1585dc2594c16faff84579bf302
2016-01-11 13:45:56 -06:00
Corey Farrell 0fc3dad965 devicestate: Cleanup engine thread during graceful shutdown.
ASTERISK-25681 #close

Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1
2016-01-10 18:10:37 -05:00
Corey Farrell f34dd10495 manager: Cleanup manager_channelvars during shutdown.
ASTERISK-25680 #close

Change-Id: I3251d781cbc3f48a6a7e1b969ac4983f552b2446
2016-01-10 14:51:00 -05:00
Corey Farrell 1d3a1167fc res_calendar: Cleanup scheduler context at unload.
ASTERISK-25679 #close

Change-Id: I839159bf6882cccc1b23494c7aa2bc2a2624613f
2016-01-10 13:32:48 -06:00
Joshua Colp 3a160cdbf6 res_rtp_asterisk: Revert DTLS negotiation changes.
Due to locking issues within pjnath these changes are being
reverted until pjnath can be changed.

ASTERISK-25645

Revert "res_rtp_asterisk.c: Fix DTLS negotiation delays."

This reverts commit 24ae124e4f.

Change-Id: I2986cfb2c43dc14455c1bcaf92c3804f9da49705

Revert "res_rtp_asterisk: Resolve further timing issues with DTLS negotiation"

This reverts commit 965a0eee46.

Change-Id: Ie68fafde27dad4b03cb7a1e27ce2a8502c3f7bbe
2016-01-09 20:36:42 -04:00
George Joseph 4b10fc9173 Revert "pjsip_location: Delete contact_status object when contact is deleted"
This reverts commit 0a9941de9d.

Matt,

This patch causes another problem and should not have been needed.
Before this patch, persistent_endpoint_contact_deleted_observer WAS
deleting the contact_status when ast_sip_location_delete_contact was
called.  By deleting it yourself in ast_sip_location_delete_contact
it was gone before the observer could run and the observer therefore
was throwing an error and not sending stasis/AMI/statsd messages.

So, I don't think this was the cause of your original issue.  I also
had verified the contact AMI and statsd lifecycle and it was working.
I'll double check now though.

ASTERISK-25675
Reported-by: Daniel Journo

Change-Id: Ib586a6b7f90acb641b0c410f659743ab90e84f1a
2016-01-09 17:08:46 -07:00
Corey Farrell 79b4309881 pbx_dundi: Run cleanup on failed load.
During failed startup of pbx_dundi no cleanup was performed.  Add a call
to unload_module before returning AST_MODULE_LOAD_DECLINE.

ASTERISK-25677 #close

Change-Id: I8ffa226fda4365ee7068ac1f464473f1a4ebbb29
2016-01-09 18:07:08 -06:00
Corey Farrell a5406b1f9e res_crypto: Perform cleanup at shutdown.
This change causes res_crypto to unregister CLI at shutdown while still
preventing the module from being unloaded.

ASTERISK-25673 #close

Change-Id: Ie5d57338dc2752abfc0dd05d0eec86413f2304fc
2016-01-09 13:39:00 -06:00
Joshua Colp 573b37c658 Merge "include/asterisk/time.h: Renamed global declaration:tv" into 13 2016-01-09 11:15:32 -06:00
Richard Mudgett cf8e7a580b res_pjsip: Create human friendly serializer names.
PJSIP name formats:
pjsip/aor/<aor>-<seq> -- registrar thread pool serializer
pjsip/default-<seq> -- default thread pool serializer
pjsip/messaging -- messaging thread pool serializer
pjsip/outreg/<registration>-<seq> -- outbound registration thread pool
serializer
pjsip/pubsub/<endpoint>-<seq> -- pubsub thread pool serializer
pjsip/refer/<endpoint>-<seq> -- REFER thread pool serializer
pjsip/session/<endpoint>-<seq> -- session thread pool serializer
pjsip/websocket-<seq> -- websocket thread pool serializer

Change-Id: Iff9df8da3ddae1132cb2ef65f64df0c465c5e084
2016-01-08 22:08:35 -06:00
Richard Mudgett 4276f185f0 Sorcery: Create human friendly serializer names.
Sorcery name formats:
sorcery/<type>-<seq> -- Sorcery thread pool serializer

Change-Id: Idc2e5d3dbab15c825b97c38c028319a0d2315c47
2016-01-08 22:03:28 -06:00
Richard Mudgett f02ac1b7f9 Stasis: Create human friendly taskprocessor/serializer names.
Stasis name formats:
subm:<topic>-<seq> -- Stasis subscription mailbox task processor
subp:<topic>-<seq> -- Stasis subscription thread pool serializer

Change-Id: Id19234b306e3594530bb040bc95d977f18ac7bfd
2016-01-08 22:03:28 -06:00
Richard Mudgett ec1f1c6742 taskprocessor.c: New API for human friendly taskprocessor names.
* Add new API call to get a sequence number for use in human friendly
taskprocessor names.

* Add new API call to create a taskprocessor name in a given buffer and
append a sequence number.

Change-Id: Iac458f05b45232315ed64aa31b1df05b875537a9
2016-01-08 22:02:51 -06:00
Richard Mudgett d8bc3e0c8b taskprocessor.c: Fix CLI "core show taskprocessors" output format.
Update the CLI "core show taskprocessors" output format to not be
distorted because UUID names are longer than previously used taskprocessor
names.

Change-Id: I1a5c82ce3e8f765a0627796aba87f8f7be077601
2016-01-08 20:12:35 -06:00
Richard Mudgett 2c4b7502de taskprocessor.c: Fix CLI "core show taskprocessors" unref.
Change-Id: I1d9f4e532caa6dfabe034745dd16d06134efdce5
2016-01-08 20:12:35 -06:00
Richard Mudgett 3b33ac7a46 taskprocessor.c: Sort CLI "core show taskprocessors" output.
Change-Id: I71e7bf57c7b908c8b8c71f1816348ed7c5a5d51e
2016-01-08 20:12:35 -06:00
Richard Mudgett 0fc32c4dd3 ccss.c: Replace space in taskprocessor name.
The CLI "core ping taskprocessor" command does not work very
well with taskprocessor names that have spaces in them.  You
have to put quotes around the name so using tab completion
becomes awkward.

Change-Id: I29e806dd0a8a0256f4e2e0a7ab88c9e19ab0eda0
2016-01-08 20:12:34 -06:00
Richard Mudgett 0e0c24ad78 taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock.
Change-Id: I78247e0faf978bf850b5ba4e9f4933ab3c59d17b
2016-01-08 20:12:34 -06:00
Diederik de Groot 0f79c8839b main: Use ast_strdup instead of strdup
Fix compile error in main/utils.c because strdup was used in dummy_start

Change-Id: Id61a6cf4f3cbf235450441e10e7da101a6335793
2016-01-08 13:57:34 -06:00
Diederik de Groot 4285dee778 include/asterisk/time.h: Renamed global declaration:tv
Renamed global declaration:tv to dummy_tv_var_for_types,
which would oltherwise cause 'shadow' warnings when 'tv'
was declared as a local variable elsewhere.

Added comment to note that dummy_tv_var_for_types is never
really exported and only used as a place holder.

ASTERISK-25627 #close

Change-Id: I9a6e17995006584f3627efe8988e3f8aa0f5dc28
2016-01-08 13:32:37 -06:00
Joshua Colp 01e5894388 Merge "PJSIP: Prevent deadlock due to dialog/transaction lock inversion." into 13 2016-01-07 16:57:07 -06:00
Mark Michelson 96094feab6 PJSIP: Prevent deadlock due to dialog/transaction lock inversion.
A deadlock was observed where the monitor thread was stuck, therefore
resulting in no incoming SIP traffic being processed.

The problem occurred when two 200 OK responses arrived in response to a
terminating NOTIFY request sent from Asterisk. The first 200 OK was
dispatched to a threadpool worker, who locked the corresponding
transaction. The second 200 OK arrived, resulting in the monitor thread
locking the dialog. At this point, the two threads are at odds, because
the monitor thread attempts to lock the transaction, and the threadpool
thread loops attempting to try to lock the dialog.

In this case, the fix is to not have the monitor thread attempt to hold
both the dialog and transaction locks at the same time. Instead, we
release the dialog lock before attempting to lock the transaction.

There have also been some debug messages added to the process in an
attempt to make it more clear what is going on in the process.

ASTERISK-25668 #close
Reported by Mark Michelson

Change-Id: I4db0705f1403737b4360e33a8e6276805d086d4a
2016-01-07 16:22:37 -06:00
Corey Farrell 52e9de0016 ast_format_cap_append_by_type: Resolve codec reference leak.
This resolves a reference leak caused by ASTERISK-25535.  The pointer
returned by ast_format_get_codec is saved so it can be released.

ASTERISK-25664 #close

Change-Id: If9941b1bf4320b2c59056546d6bce9422726d1ec
2016-01-07 10:51:26 -06:00
Joshua Colp eb3d083551 Merge "cel/cel_radius: Fix wrong pointer." into 13 2016-01-06 12:02:44 -06:00
Joshua Colp b1ee692568 Merge topic 'pbx-split' into 13
* changes:
  main/pbx: Move hangup handler routines to pbx_hangup_handler.c.
  main/pbx: Move dialplan application management routines to pbx_app.c.
  main/pbx: Move switch routines to pbx_switch.c.
2016-01-06 06:13:14 -06:00
Joshua Colp 2e61c3d97b Merge "main/pbx: Move timing routines to pbx_timing.c." into 13 2016-01-06 06:09:34 -06:00
Aaron An 86eae38d7e cel/cel_radius: Fix wrong pointer.
The macro ADD_VENDOR_CODE defined in the cel_radius.c should use the parameter
y not the address of y.

I capture the radius UDP packet via tcpdump, and the AV pairs are not correct,
then i review the source code and compare it with cdr/cdr_radius.c. Fix it and
 it works.

ASTERISK-25647 #close
Reported by: Aaron An
Tested by: Aaron An

Change-Id: I72889bccd8fde120d47aa659edc0e7e6d4d019f0
2016-01-06 06:07:49 -06:00
George Joseph 881dc862e0 asterisk.h: Add ASTERISK_REGISTER_FILE macro
The 11/13 branches and master use 2 different file version macros. 11/13
uses ASTERISK_FILE_VERSION but master uses ASTERISK_REGISTER_FILE. This
means a new file added to 11/13 can't just be cherry-picked to master
because the macro has to be changed.

To make cherry-picking possible, ASTERISK_REGISTER_FILE was added
to asterisk.h as a simple alias for ASTERISK_FILE_VERSION(__FILE__, NULL)
The "$Revision$" tag doesn't do anything since Asterisk moved to git so
just passing NULL as the verison works fine.  asterisk.h was also
annotated to deprecate ASTERISK_FILE_VERSION and suggest using
ASTERISK_REGISTER_FILE for all new files.

Finally, 2 recent file additions, pbx_builtins.c and pbx_functions.c,
were modified to use the new macro to make sure it actually worked.
'core show file version' showed the correct output.

Change-Id: I5867ed898818d26ee49bb6e5c7d4c1a45d4789a5
2016-01-05 15:10:09 -07:00
Matt Jordan 9016e51c03 Merge "main/pbx: Move variable routines to pbx_variables.c." into 13 2016-01-05 13:38:39 -06:00
George Joseph d228b62fd4 stasis_cache_pattern: Backport to 13
Somehow stasis_cache_pattern got out of sync between 13 and master
and it was causing duplicate channel message issues in 13 when
related to a specific endpoint. I.E. from statsd,
'endpoints.PJSIP.1174.channels 0|g' was being emitted twice.

Backporting stasis_cache_pattern from master to 13 solved
the issue and running the unit and testsuite tests confirmed
that no new ones were created.

ASTERISK-25317 #close

Change-Id: Ia8707462f62d15eed14541c37f332a7bbbceb548
2016-01-05 12:29:31 -06:00
Corey Farrell e462f0063f main/pbx: Move hangup handler routines to pbx_hangup_handler.c.
This is the sixth patch in a series meant to reduce the bulk of pbx.c.
This moves hangup handler management functions to their own source.

Change-Id: Ib25a75aa57fc7d5c4294479e5cc46775912fb104
2016-01-05 12:10:16 -05:00
Corey Farrell ab191d124c main/pbx: Move dialplan application management routines to pbx_app.c.
This is the sixth patch in a series meant to reduce the bulk of pbx.c.
This moves dialplan application management functions to their own source.

Change-Id: I444c10fb90a3cdf9f3047605d6a8aad49c22c44c
2016-01-05 12:09:38 -05:00
Corey Farrell 09a9b93896 main/pbx: Move switch routines to pbx_switch.c.
This is the fifth patch in a series meant to reduce the bulk of pbx.c.
This moves ast_switch functions to their own source.

Change-Id: Ic2592a18a5c4d8a3c2dcf9786c9a6f650a8c628e
2016-01-05 12:07:43 -05:00
Corey Farrell c608274a39 main/pbx: Move timing routines to pbx_timing.c.
This is the fourth patch in a series meant to reduce the bulk of pbx.c.
This moves pbx timing functions to their own source.

Change-Id: I05c45186cb11edfc901e95f6be4e6a8abf129cd6
2016-01-05 12:06:23 -05:00
Martin Tomec 338a8ffed6 app_queue: Add member flag "in_call" to prevent reading wrong lastcall time
Member lastcall time is updated later than member status. There was chance to
check wrapuptime for available member with wrong (old) lastcall time.
New boolean flag "in_call" is set to true right before connecting call, and
reset to false after update of lastcall time. Members with "in_call" set to true
are treat as unavailable.

ASTERISK-19820 #close

Change-Id: I1923230cf9859ee51563a8ed420a0628b4d2e500
2016-01-05 17:52:12 +01:00
Rodrigo Ramírez Norambuena e13719bff1 app_queue: Added reason pause of member
In app_queue added value Paused Reason on QueueMemberStatus when a member
on queue is paused and the reason was set.

ASTERISK-25480 #close
Reporte by: Rodrigo Ramírez Norambuena

Change-Id: Ia5db503482f50764c15e2020196c785f59d4a68e
2016-01-05 07:55:54 -04:00
Joshua Colp 937ba51659 Merge "voicemail: Move app_voicemail / res_mwi_external conflict to runtime" into 13 2016-01-05 05:56:04 -06:00
George Joseph 4ec85a9f07 voicemail: Move app_voicemail / res_mwi_external conflict to runtime
The menuselect conflict between app_voicemail and res_mwi_external
makes it hard to package 1 version of Asterisk.  There no actual
build dependencies between the 2 so moving this check to runtime
seems like a better solution.

The ast_vm_register and ast_vm_greeter_register functions in app.c
were modified to return AST_MODULE_LOAD_DECLINE instead of -1 if there
is already a voicemail module registered. The modules' load_module
functions were then modified to return DECLINE instead of -1 to the
loader.  Since -1 is interpreted by the loader as AST_MODULE_LOAD_FAILURE,
the modules were incorrectly causing Asterisk to stop so this needed
to be cleaned up anyway.

Now you can build both and use modules.conf to decide which voicemail
implementation to load.

The default menuselect options still build app_voicemail and not
res_mwi_external but if both ARE built, res_mwi_external will load
first and become the voicemail provider unless modules.conf rules
prevent it.  This is noted in CHANGES.

Change-Id: I7d98d4e8a3b87b8df9e51c2608f0da6ddfb89247
2016-01-04 16:28:48 -07:00
Corey Farrell 7fdcfd7724 main/pbx: Move variable routines to pbx_variables.c.
This is the third patch in a series meant to reduce the bulk of pbx.c.
This moves channel and global variable routines to their own source.

Change-Id: Ibe8fb4647db11598591d443a99e3f99200a56bc6
2016-01-04 17:26:40 -05:00
Richard Mudgett 80a8b2a4cd app_dial: Immediately exit dial if the caller is already hung up.
If a caller hangs up before dial is executed within an AGI then the AGI
has likely eaten all queued frames before executing the dial in DeadAGI
mode.  With the caller hung up and no pending frames from the caller's
read queue, dial would not know that the call has hung up until a called
channel answers.  It is rather annoying to whoever just answered the
non-existent call.

Dial should not continue execution in DeadAGI mode, hangup handlers, or
the h exten.

* Added a check early in dial to abort dialing if the caller has hungup.

ASTERISK-25307 #close
Reported by: David Cunningham

Change-Id: Icd1bc0764726ef8c809f76743ca008d0f102f418
2016-01-04 13:33:37 -06:00
Matt Jordan f42036bf6b Merge "main/cdr: Allow setting properties on a finalized CDR if it is the last one" into 13 2016-01-04 09:02:40 -06:00
Matt Jordan 4e1d9c4a20 Merge "main/cdr: Set the end time on a CDR if endbeforehexten is Yes" into 13 2016-01-04 09:02:36 -06:00
Matt Jordan 1087b0c6ed main/cdr: Allow setting properties on a finalized CDR if it is the last one
Prior to this patch, we explicitly disallowed setting any properties on a
finalized CDR. This seemed like a good idea at the time; in practice, it was
more restrictive.

There are weird and strange scenarios where setting a property on a finalized
CDR is definitely wrong. For example, we may Fork a CDR, finalizing the
previous one, then change a property. In said case, the old CDR is supposed
to now be 'immutable' (so to speak), and should not be updated. From the
perspective of the code, a forked CDR that is finalized is just finalized.
Hence why we decided these should not be updated.

In practice, it is much more common to want to set a property on a CDR in
the h extension or in a hangup handler. Disallowing a common scenario to make
an esoteric behaviour work isn't good. This patch fixes this by allowing
callers to set a property IF we are the last CDR in the chain. This preserves
the finalized CDR if it was forked, while allowing the more common case to
function.

ASTERISK-25458 #close

Change-Id: Icf3553c607b9f561152a41e6d8381d594ccdf4b9
2016-01-02 10:35:15 -06:00
Matt Jordan 1f23e65b89 main/cdr: Set the end time on a CDR if endbeforehexten is Yes
Prior to this patch, the CDR engine attempted to set the end time on a CDR
that was executing hangup logic and with endbeforehexten set to Yes by
calling a function that inspects the properties on the Party A snapshot to
determine if we are ready to set the end time. That always failed. This is
because a Party A snapshot is not updated for CDRs that are executing hangup
logic with endbeforehexten=Yes.

Instead of calling a function that looks at the Party A snapshot, we just
simply set the end time on the CDR. This is safe to call multiple times, and is
safe to call at this point as we know that (a) we are executing hangup logic,
and (b) we are supposed to set the end time at this point.

ASTERISK-25458

Change-Id: I0c27b493861f9c13c43addbbb21257f79047a3b3
2016-01-02 10:35:15 -06:00
Corey Farrell 2ffade4574 main/pbx: Move custom function routines to pbx_functions.c.
This is the second patch in a series meant to reduce the bulk of pbx.c.
This moves custom function management routines to their own source.

Change-Id: I34a6190282f781cdbbd3ce9d3adeac3c3805e177
2016-01-01 14:01:15 -05:00
Matt Jordan bc7c882326 Merge "main/pbx: Move pbx_builtin dialplan applications to pbx_builtins.c" into 13 2016-01-01 09:25:35 -06:00
Matt Jordan 5a75caa9e6 Merge "res_pjsip_history: Add a module that provides PJSIP history for debugging" into 13 2015-12-31 22:42:20 -06:00
George Joseph 20b8474f20 main/pbx: Move pbx_builtin dialplan applications to pbx_builtins.c
We joked about splitting pbx.c into multiple files but this first step was
fairly easy.  All of the pbx_builtin dialplan applications have been moved
into pbx_builtins.c and a new pbx_private.h file was added. load_pbx_builtins()
is called by asterisk.c just after load_pbx().

A few functions were renamed and are cross-exposed between the 2 source files.

Change-Id: I87066be3dbf7f5822942ac1449d98cc43fc7561a
2015-12-30 20:22:35 -07:00
Joshua Colp a68467d293 Merge "res_http_websocket.c: prevent avoidable disconnections caused by write errors" into 13 2015-12-30 18:43:42 -06:00
Joshua Colp 47d508e911 Merge "test_time: Provide a timeout when waiting." into 13 2015-12-28 16:06:55 -06:00
Matt Jordan e4a566918a tests/test_stasis_endpoints: Remove expected duplicate events
The cache_clear test was written to expect duplicate Stasis messages
sent from the technology endpoint to the all caching topic. This patch
fixes the test to no longer expect these duplicate messages.

ASTERISK-25137

Change-Id: I58075d70d6cdf42e792e0fb63ba624720bfce981
2015-12-28 15:11:02 -06:00
Joshua Colp a280400758 test_time: Provide a timeout when waiting.
The test_timezone_watch unit test is written to expect a
condition to be signaled when the inotify daemon thread runs.
There exists a small window where the test_timezone_watch
thread can signal the inotify daemon thread while it is not
reading on the underlying file descriptor. If this occurs
the test_timezone_watch thread will wait indefinitely for a
signal that will never arrive.

This change adds a timeout to the condition so it will return
regardless after a period of time.

Change-Id: Ifed981879df6de3d93acd3ee0a70f92546517390
2015-12-28 14:11:05 -06:00
George Joseph 3a1c4885be endpoint/stasis: Eliminate duplicate events on endpoint status change
When an endpoint is created, its messages are forwarded to both the tech
endpoint topic and the all endpoints topic. This is done so that various
parties interested in endpoint messages can subscribe to just the tech
endpoint and receive all messages associated with that particular technology,
as opposed to subscribing to the all endpoints topic. Unfortunately, when the
tech endpoint is created, it also forwards all of its messages to the all
topic. This results in duplicate messages whenever an endpoint publishes its
messages.

This patch resolves the duplicate message issue by creating a new function
for Stasis caching topics, stasis_cp_sink_create. In most respects, this acts
as a normal caching topic, save that it no longer forwards messages it receives
to the all endpoints topic. This allows it to act as an aggregation "sink",
while preserving the necessary caching behaviour.

ASTERISK-25137 #close
Reported-by: Vitezslav Novy

ASTERISK-25116 #close
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>

Change-Id: Ie47784adfb973ab0063e59fc18f390d7dd26d17b
2015-12-28 13:45:01 -06:00
Dade Brandon 136c537695 res_http_websocket.c: prevent avoidable disconnections caused by write errors
Updated ast_websocket_write to encode the entire frame in to one
write operation, to ensure that we don't end up with a situation
where the websocket header has been sent, while the body can not
be written.

Previous to August's patch in commit b9bd3c14, certain network
conditions could cause the header to be written, and then the
sub-sequent body to fail - which would cause the next successful
write to contain a new header, and a new body (resulting in
the peer receiving two headers - the second of which would be
read as part of the body for the first header).

This was patched to have both write operations individually fail
by closing the websocket.

In a case available to the submitter of this patch, the same
body which would consistently fail to write, would succeed
if written at the same time as the header.

This update merges the two operations in to one, adds debug messages
indicating the reason for a websocket connection being closed during
a write operation, and clarifies some variable names for code legibility.

Change-Id: I4db7a586af1c7a57184c31d3d55bf146f1a40598
2015-12-28 11:38:32 -08:00
Matt Jordan 5e99ba393e Merge "bridge_basic.c: Fix GOTO_ON_BLINDXFR" into 13 2015-12-28 09:44:24 -06:00
Matt Jordan 1a1f64f36f Merge "chan_sip.c: fix websocket_write_timeout default value" into 13 2015-12-28 09:44:10 -06:00
Joshua Colp efa0868295 Merge "res/res_pjsip_location: Delete contact_status object when contact is deleted" into 13 2015-12-28 09:02:20 -06:00
Matt Jordan 84b1475674 Merge "Remove res_jabber file that was left behind." into 13 2015-12-28 08:27:37 -06:00
Corey Farrell f2efbb5d75 Remove res_jabber file that was left behind.
Change-Id: I9d88fac0394d5bbaff0900a2ee911c4e4478846b
2015-12-27 23:38:37 -05:00
Matt Jordan dde7f3c1c4 res_pjsip_history: Add a module that provides PJSIP history for debugging
This patch adds a new module, res_pjsip_history, that provides a slightly
better way of debugging SIP message traffic on a busy Asterisk system. The
existing mechanisms all rely on passively dumping a SIP message to the CLI.
While this is perfectly fine for logging purposes and well controlled
environments, on many installations, the amount of SIP messages Asterisk
receives will quickly swamp the CLI. This makes it difficult to view/capture
those messages that you want to diagnose in real time.

This patch provides another way of handling this. When enabled, the module
will store SIP message traffic in memory. This traffic can then be queried
at leisure.

In order to make the querying useful, a CLI command has been implemented,
'pjsip show history', that supports a basic expression syntax similar to
SQL or other query languages. A small number of useful fields have been
added in this initial patch; additional fields can easily be added in
later improvements. Those fields are:
 - number: The entry index in the history
 - timestamp: The time the message was recieved
 - addr: The source/destination address of the message
 - sip.msg.request.method: The request method
 - sip.msg.call-id: The Call-ID header

Note - this is a resurrection of the module initially proposed on Review Board
here: https://reviewboard.asterisk.org/r/4053/

Change-Id: I39bd74ce998e99ad5ebc0aab3e84df3a150f8e36
2015-12-26 11:50:03 -06:00
Dade Brandon be050f2638 chan_sip.c: fix websocket_write_timeout default value
websocket_write_timeout was not being set to its default value
during sip config reload, which meant that prior to this commit,
1) the default value of 100 was not used, unless an invalid value
(or 1) was specified in sip.conf for websocket_write_timeout, and
2) if the websocket_write_timeout directive was removed from sip.conf
without a full restart of asterisk, then the previous value would
continue to be used indefinitely.

This essentially lead to a 0ms write timeout (the first write attempt
in ast_careful_fwrite must have succeeded) in websocket write requests
from chan_sip, unless websocket_write_timeout was explicitely set in sip.conf.

Changes to websocket_write_timeout still only apply to new websocket
sessions, after the sip reload -- timeouts on existing sessions are
not adjusted during sip reload.

Change-Id: Ibed3816ed29cc354af6564c5ab3e75eab72cb953
2015-12-25 08:07:14 -08:00
Richard Mudgett b3024cad10 bridge_basic.c: Fix GOTO_ON_BLINDXFR
Use of GOTO_ON_BLINDXFR would not work at all.  The target location would
never be executed by the transferring channel.

* Made feature_blind_transfer() call ast_bridge_set_after_go_on() with
valid context, exten, and priority parameters from the transferring
channel.

* Renamed some feature_blind_transfer() local variables for clarity.

ASTERISK-25641 #close
Reported by Dmitry Melekhov

Change-Id: I19bead9ffdc4aee8d58c654ca05a198da1e4b7ac
2015-12-24 14:41:44 -06:00
Matt Jordan 0a9941de9d res/res_pjsip_location: Delete contact_status object when contact is deleted
In 450579e908, a change was made that removed the deletion of the
'contact_status' object when a 'contact' object is deleted in sorcery.
This unfortunately means that the 'contact_status' object persists, even when
something has explicitly removed a contact. The result is that the state of
the contact will not be regenerated if that contact is re-created, and the
stale state will be reported/used for that contact. It also results in
no ContactStatusChanged events being generated for either ARI or AMI.

This patch restores the deletion logic that was removed. Doing so now
results in the expected events being generated again.

Change-Id: I28789a112e845072308b5b34522690e3faf58f07
2015-12-24 12:19:51 -06:00
Kevin Harwell 1e24a0ca8a res_rtp_asterisk: rtp->ice check not wrapped in HAVE_PJPROJECT ifdef
Change-Id: I19b49112e1b630bd04e859f14ccf96f8ebd6b151
2015-12-24 10:34:19 -06:00
Matt Jordan 15641cb6cd Merge "app_amd: Correct documentation to reflect functionality" into 13 2015-12-22 20:22:22 -06:00
Dade Brandon 1d3d20dd68 app_amd: Correct documentation to reflect functionality
Update documentation to reflect that maximum_number_of_words
has functionality inconsistent with the variable name (and inconsistent
with prior documentation.)

Update documentation for silence_threshold, which previously implied
that it was measuring time, rather than noise averages in the sample.

Update the comments in amd.conf.sample.

ASTERISK-25639 #close
Change-Id: I4b1451e5dc9cb3cb06d59b6ab872f5275ba79093
2015-12-21 16:03:42 -08:00
Dade Brandon 965a0eee46 res_rtp_asterisk: Resolve further timing issues with DTLS negotiation
Resolves an edge case dtls negotiation delay for certain networks which
somehow manage to drop the rtcp side's packet when these are both sent
ast_rtp_remote_address_set, causing it to have to time-out and restart
the handshake.

Move dtls pending bio flush in to it's own function, and call it from
ast_rtp_on_ice_complete, when we're rtp->ice, rather than when
ast_rtp_remote_address_set.

Keep the existing flush from the recent change to res_rtp_remote_address_set
if ice is not being used.

ASTERISK-25614 #close
Reported-by: XenCALL
Tested by: XenCALL

Change-Id: Ie2caedbdee1783159f375589b6fd3845c8577ba5
2015-12-21 11:31:26 -08:00
Matt Jordan 7ec9b5b98f Merge "app_queue: update RT members when the 1st call joins a queue with no agents" into 13 2015-12-19 10:48:05 -06:00
Joshua Colp e652a786d6 Merge "json: Audit ast_json_* usage for thread safety." into 13 2015-12-18 11:57:34 -06:00
Mark Michelson 03dab00d1d Merge topic 'alembic_fixes' into 13
* changes:
  Alembic: Increase column size of PJSIP AOR "contact".
  Alembic: Add PJSIP global keep_alive_interval.
2015-12-18 11:12:58 -06:00
Carlos Oliva ae428d8460 app_queue: update RT members when the 1st call joins a queue with no agents
If a call enters on a queue and the members on that queue are updated in
realtime (ex: using mysql inserting a new agent) the queue members are
never refreshed and the call will stay in the queue until other event occurs.
This happens only if this is the first call of the queue and there is no
agents servicing.
This patch prevent this issue, ensuring realtime members are updated if
there is one call in the queue and no available agents

ASTERISK-25442 #close

Change-Id: If1e036d013a5c1d8b0bf60d71d48fe98694a8682
2015-12-18 16:56:28 +01:00
Joshua Colp 62e49a7e20 Merge "res_sorcery_memory_cache: Add support for a full backend cache." into 13 2015-12-18 05:44:36 -06:00
Joshua Colp 59d5bb0613 res_sorcery_memory_cache: Add support for a full backend cache.
This change introduces the configuration option 'full_backend_cache'
which changes the cache to be a full mirror of the backend instead
of a per-object cache. This allows all sorcery retrieval operations
to be carried out against it and is useful for object types which
are used in a "retrieve all" or "retrieve some" pattern.

ASTERISK-25625 #close

Change-Id: Ie2993487e9c19de563413ad5561c7403b48caab5
2015-12-17 14:59:12 -04:00
Joshua Colp 51a2cab780 Merge "rtp_engine: Ignore empty filenames in DTLS configuration." into 13 2015-12-17 12:50:01 -06:00
Joshua Colp 0cefcabd58 rtp_engine: Ignore empty filenames in DTLS configuration.
When applying an empty DTLS configuration the filenames in the
configuration will be empty. This is actually valid to do and
each filename should simply be ignored.

Change-Id: Ib761dc235638a3fb701df337952f831fc3e69539
2015-12-17 12:25:47 -04:00
Joshua Colp 158a0a5422 chan_sip: Enable WebSocket support by default.
Per the documentation the WebSocket support in chan_sip is
supposed to be enabled by default but is not. This change
corrects that.

Change-Id: Icb02bbcad47b11a795c14ce20a9bf29649a54423
2015-12-17 10:10:43 -04:00
Joshua Colp a9d6fc571d json: Audit ast_json_* usage for thread safety.
The JSON library Asterisk uses, jansson, is not thread
safe for us in a few ways. To help with this wrappers for JSON
object reference count increasing and decreasing were added
which use a global lock to ensure they don't clobber over
each other. This does not extend to reference count manipulation
within the jansson library itself. This means you can't safely
use the object borrowing specifier (O) in ast_json_pack and
you can't share JSON instances between objects.

This change removes uses of the O specifier and replaces them
with the o specifier and an explicit ast_json_ref. Some cases
of instance sharing have also been removed.

ASTERISK-25601 #close

Change-Id: I06550d8b0cc1bfeb56cab580a4e608ae4f1ec7d1
2015-12-16 17:17:30 -04:00
Mark Michelson 53bd5a539a Alembic: Increase column size of PJSIP AOR "contact".
When running the PJSIP AMI "show_endpoint" test with automatic
conversion to realtime, the test would fail. This was because the AOR
"contact" column was sized at 40, and the configured contact was larger
than that.

This commit increases the size of the contact column to 255 characters.

Change-Id: Ia65bc7fd37699b7c0eaef9629a1a31eab9a24ba1
2015-12-16 11:28:14 -06:00
Mark Michelson da17dc4d75 Alembic: Add PJSIP global keep_alive_interval.
The keep_alive_interval option was added about a year ago, but no
alembic revision was created to add the appropriate column to the
database.

This commit fixes the problem and adds the column. This was discovered
by running the testsuite with automatic conversion to realtime enabled.

Change-Id: If3ef92a7c4f4844d08f8aae170d2178aec5c4c1a
2015-12-16 11:25:13 -06:00
Matt Jordan 280adca0a5 Merge "AMI: Fixed OriginateResponse message" into 13 2015-12-15 21:22:33 -06:00
server-pandora 24ae124e4f res_rtp_asterisk.c: Fix DTLS negotiation delays.
- Trigger pending DTLS packets to send out, once the RTP instance's remote
  address is set.
- Avoids locking the DTLS structure unnecessarily by only doing this if
  DTLS is passive.
- Add DTLS locks around the structurally sensitive calls in the SSL
  portion of __rtp_recvfrom, since dtls_srtp_check_pending does not lock
  inside of itself, and we're dealing with the SSL BIO in at least two
  threads.

WebRTC channels may receive a DTLS handshake before
ast_rtp_remote_address_set is called, which causes there to be a pending
response to send out.   Previous to 1ad827, this was handled by calling
dtls_srtp_check_pending on receipt of any RTP packet - a STUN or RTP
packet could trigger the pending handshake response.  Since that was
rightfully removed, whenever the DTLS handshake is received before the
remote address is set, we would have to wait until another SSL packet
arrives.

As of Chrome M47's optimizations to their handshake process, WebRTC
conversations between Chrome M47+ and Asterisk, where Asterisk is passive,
experience a 1 second delay without this patch, because the SSL handshake
is received before ICE negotation stores the remote_address, and the next
SSL packet isn't received until after a 1 second timeout in Chrome, which
causes a new handshake request.

ASTERISK-25614 #close

Change-Id: I547f1be7e302dbf71f6553dd8cbc0657b1d0b908
2015-12-15 07:31:12 -06:00
Richard Mudgett 36097a185d Fix sscanf() format string type mismatch.
ASTERISK-25615
Reported by: George Joseph

Change-Id: Ieff35307254ca193f3d473cff2e396ca57c7ce0b
2015-12-14 16:18:30 -06:00
Matt Jordan 77ac79b175 Merge "main/utils: Don't emit an ERROR message if the read end of a pipe closes" into 13 2015-12-14 06:45:03 -06:00
Matt Jordan 94f9927784 main/utils: Don't emit an ERROR message if the read end of a pipe closes
An ERROR or WARNING message should generally indicate that something has gone
wrong in Asterisk. In the case of writing to a file descriptor, Asterisk is not
in control of when the far end closes its reading on a file descriptor. If the
far end does close the file descriptor in an unclean fashion, this isn't a bug
or error in Asterisk, particularly when the situation can be gracefully
handled in Asterisk.

Currently, when this happens, a user would see the following somewhat cryptic
ERROR message:

  "utils.c: write() returned error: Broken pipe"

There's a few problems with this:
(1) It doesn't provide any context, other than 'something broke a pipe'
(2) As noted, it isn't actually an error in Asterisk
(3) It can get rather spammy if the thing breaking the pipe occurs often, such
    as a FastAGI server
(4) Spammy ERROR messages make Asterisk appear to be having issues, or can even
    mask legitimate issues

This patch changes ast_carefulwrite to only log an ERROR if we actually had one
that was reasonably under our control. For debugging purposes, we still emit
a debug message if we detect that the far side has stopped reading.

Change-Id: Ia503bb1efcec685fa6f3017bedf98061f8e1b566
2015-12-13 13:26:24 -06:00
George Joseph 5b867fa904 pjsip/config_transport: Check pjproject version at runtime for async ops
pjproject < 2.5.0 will segfault on a tls transport if async_operations
is greater than 1.  A runtime version check has been added to throw
an error if the version is < 2.5.0 and async_operations > 1.

To assist in the check, a new api "ast_compare_versions" was added
to utils which compares 2 major.minor.patch.extra version strings.

ASTERISK-25615 #close

Change-Id: I8e88bb49cbcfbca88d9de705496d6f6a8c938a98
Reported-by: George Joseph
Tested-by: George Joseph
2015-12-12 10:12:22 -07:00
Jonathan Rose 14b41115e3 chan_sip: Add TCP/TLS keepalive to TCP/TLS server
Adds the TCP Keep Alive option to TCP and TLS server sockets. Previously
this option was only being set on session sockets.
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
According to the link above, the SO_KEEPALIVE option is useful for knowing
when a TCP connected endpoint has severed communication without indicating
it or has become unreachable for some reason. Without this patch, keep
alive is not set on the socket listening for incoming TCP sessions and
in Komatsu's report this resulted in the thread listening for TCP becoming
stuck in a waiting state.

ASTERISK-25364 #close
Reported by: Hiroaki Komatsu

Change-Id: I7ed7bcfa982b367dc64b4b73fbd962da49b9af36
2015-12-10 14:13:42 -06:00
Joshua Colp c344fb02f4 Merge "res_pjsip: Add existence and readablity checks for tls related files" into 13 2015-12-10 07:13:32 -06:00
Joshua Colp 2be0d49042 Merge "app_meetme: Set default value for audio_buffers." into 13 2015-12-10 06:03:33 -06:00
pchero fe8011cc50 AMI: Fixed OriginateResponse message
When the asterisk sending OriginateResponse message,
it doesn't set the "Uniqueid".
And it didn't support correct response message for
Application originate.

ASTERISK-25624 #close

Change-Id: I26f54f677ccfb0b7cfd4967a844a1657fd69b74d
2015-12-10 01:17:14 +01:00
tcambron cd119ed4a2 res_chan_stats: Fix bug to send correct statistics to StatsD
Fixed a bug that originally would show a negative number of
active calls occuring in Asterisk. A gauge is persistent so
incrementing and decrementing it results in a more consistent
performance. Also changed to the call to StatsD to use
ast_statsd_log_string() so that a "+" could be sent to StatsD.

ASTERISK-25619 #close

Change-Id: Iaaeff5c4c6a46535366b4d16ea0ed0ee75ab2ee7
2015-12-09 15:57:35 -06:00
Corey Farrell ddf4dddf4f app_meetme: Set default value for audio_buffers.
The default value was never set for audio_buffers, causing bad
audio quality.  This ensures the default is always set.

ASTERISK-25569 #close

Change-Id: I2d2ee3e644120b0f9f6ea6ab9286d7d590942a44
2015-12-09 15:56:52 -06:00
Filip Jenicek 142d4fefb8 chan_sip: Check sip_pvt pointer in ast_channel_get_t38_state(c)
Asterisk may crash when calling ast_channel_get_t38_state(c)
on a locked channel which is being hung up.

ASTERISK-25609 #close

Change-Id: Ifaa707c04b865a290ffab719bd2e5c48ff667c7b
2015-12-09 08:55:15 -06:00
George Joseph 21962dad93 res_pjsip: Add existence and readablity checks for tls related files
Both transport and endpoint now check for the existence and readability
of tls certificate and key files before passing them on to pjproject.
This will cause the object to not load rather than waiting for pjproject
to discover that there's a problem when a session is attempted.

NOTE: chan_sip also uses ast_rtp_dtls_cfg_parse but it's located
in build_peer which is gigantic and I didn't want to disturb it.
Error messages will emit but it won't interrupt chan_sip loading.

ASTERISK-25618 #close

Change-Id: Ie43f2c1d653ac1fda6a6f6faecb7c2ebadaf47c9
Reported-by: George Joseph
Tested-by: George Joseph
2015-12-08 16:49:20 -07:00
Eugene Voityuk 28d9243079 chan_sip.c: Start ICE negotiation when response is sent or received.
The current logic for ICE negotiation starts it
when receiving an SDP with ICE candidates. This is
incorrect as ICE negotiation can only start when each 
call party have at least one pair of local and remote 
candidate. Starting ICE negotiation early would result 
in negotiation failure and ultimately no audio.

This change makes it so ICE negotiation is only started
when a response with SDP is received or when a response
with SDP is sent.

ASTERISK-24146

Change-Id: I55a632bde9e9827871b09141d82747e08379a8ca
2015-12-08 15:50:47 -06:00
Joshua Colp 246e513110 Merge "res_pjsip/config_transport: Prevent async_operations > 1 when protocol = tls" into 13 2015-12-08 13:18:00 -06:00
Joshua Colp 35cc249732 Merge "translate: Avoid a warning message when doing FEC within Opus Codec." into 13 2015-12-08 13:14:29 -06:00
George Joseph e03582a1c2 res_pjsip/config_transport: Prevent async_operations > 1 when protocol = tls
See ASTERISK-25615.
If the transport protocol is tls and async_operations > 1, pjproject
will segfault if more than one operation is attempted on the same socket.
Until this is fixed upstream, a check has been added to throw an error
if a tls transport config has async_operations set to > 1.

ASTERISK-25615

Change-Id: I76b9a5b2a5a0054fe71ca5851e635f2dca7685a6
Reported-by: George Joseph
Tested-by: George Joseph
2015-12-08 11:12:03 -07:00
Alexander Traud 876600ce6e codec_resample: Increase buffer for Opus Codec with FEC.
ASTERISK-25599 #close

Change-Id: Idbd187f711b2ec63dda949ca0f79aa0c1a0a0b6e
2015-12-08 08:43:05 -06:00
Alexander Traud 69e3d40ad7 translate: Avoid a warning message when doing FEC within Opus Codec.
ASTERISK-25616 #close

Change-Id: Ibe729aaf2e6e25506cff247cec5149ec1e589319
2015-12-08 03:51:18 -06:00
Richard Mudgett 2b992014dc chan_sip: Fix crash involving the bogus peer during sip reload.
A crash happens sometimes when performing a CLI "sip reload".  The bogus
peer gets refreshed while it is in use by a new call which can cause the
crash.

* Protected the global bogus peer object with an ao2 global object
container.

ASTERISK-25610 #close

Change-Id: I5b528c742195681abcf713c6e1011ea65354eeed
2015-12-07 10:55:54 -06:00
Joshua Colp eb9a353490 Merge "res_pjsip/contacts/statsd: Make contact lifecycle events more consistent" into 13 2015-12-07 07:51:28 -06:00
Matt Jordan 529535f0c2 Revert "bridges/bridge_t38: Add a bridging module for managing T.38 state"
This reverts commit 6614babea2.

Unfortunately, using a bridge to manage T.38 state will cause severe deadlocks
in core_unreal/chan_local. Local channels attempt to reach across both their
peer and the peer's bridge to inspect T.38 state. Given the propensity of
Local channel chains, managing the locking situation in such a scenario is
practically infeasible.

Change-Id: Ic687397ffea08dfb899345a443bd990ec3d0416a
2015-12-06 16:32:32 -06:00
George Joseph 450579e908 res_pjsip/contacts/statsd: Make contact lifecycle events more consistent
It will never be perfect or even pretty, mostly because of the differences
between static and dynamic contacts.

Created:

Can't use the contact or contact_status alloc functions
because the objects come and go regardless of the actual state.

Can't use the contact_apply_handler, ast_sip_location_add_contact or
a sorcery created handler because they only get called for dynamic
contacts.  Similarly, permanent_uri_handler only gets called for
static contacts.

So, Matt had it right. :)  ast_res_pjsip_find_or_create_contact_status is
the only place it can go and not have duplicated code.  Both
permanent_uri_handler and contact_apply_handler call find_or_create.

Removed:

Can't use the destructors for the same reason as above.  The only
place to put this is in persistent_endpoint_contact_deleted_observer
which I believe is the "correct" place but even that will handle only
dynamic contacts.  This doesn't called on shutdown however.  There is
no hook to use for static contacts that may be removed because of a
config change while asterisk is in operation.

I moved the cleanup of contact_status from ast_sip_location_delete_contact
to the handler as well.

Status Change and RTT:

Although they worked fine where they were (in update_contact_status) I
moved them to persistent_endpoint_contact_status_observer to make it
more consistent with removed.  There was logic there already to detect
a state change.

Finally, fixed a nit in permanent_uri_handler rmudgett reported
eralier.

ASTERISK-25608 #close

Change-Id: I4b56e7dfc3be3baaaf6f1eac5b2068a0b79e357d
Reported-by: George Joseph
Tested-by: George Joseph
2015-12-04 16:50:17 -07:00
Matt Jordan 9c0aaf0609 Merge "res_format_attr_vp8: In SDP, forward max-fr and max-fs for video-codec VP8." into 13 2015-12-04 11:34:12 -06:00
Matt Jordan ffb0643467 Merge "res_format_attr_opus: Update to latest RFC 7587." into 13 2015-12-04 11:34:07 -06:00
Matt Jordan e8f78f87a8 Merge "bridges/bridge_t38: Add a bridging module for managing T.38 state" into 13 2015-12-04 08:58:01 -06:00
Alexander Traud 5a18193dc0 res_format_attr_vp8: In SDP, forward max-fr and max-fs for video-codec VP8.
ASTERISK-25584 #close

Change-Id: Iae00071b4ff1ae76f24995aeac4d00284fd14f91
2015-12-04 08:57:50 -06:00
Alexander Traud 3e2178c05e res_format_attr_opus: Update to latest RFC 7587.
Beside that, the format-attribute module sends only non-default values in the
line fmtp, now. This avoids unnecessary overhead in SDP messages. Furthermore,
previously the parameter stereo was not parsed when being the first parameter.

ASTERISK-25583 #close

Change-Id: Iae85ba3e5960bfd5d51cf65bcffad00dd4875a73
2015-12-04 07:21:06 -06:00
Jonathan Rose 072d94183c Fix crash in audiohook translate to slin
This patch fixes a crash which would occur when an audiohook was
applied to a channel using an audio codec that could not be translated
to signed linear (such as when using pass-through codecs like OPUS or
when the codec translator module for the format in use is not loaded).

ASTERISK-25498 #close
Reported by: Ben Langfeld

Change-Id: Ib6ea7373fcc22e537cad373996136636201f4384
2015-12-03 16:04:39 -06:00
Joshua Colp cfb146e055 Merge "res_pjsip: Use a MD5 hash for static Contact IDs" into 13 2015-12-03 15:51:45 -06:00
Joshua Colp 59134eb7cb Merge "res_pjsip: Update logging to show contact->uri in messages" into 13 2015-12-03 12:39:08 -06:00
Joshua Colp 1d5ddb4b99 Merge "codec_resample: Increase buffer for Opus Codec." into 13 2015-12-03 12:38:08 -06:00
George Joseph 9184fbeb34 res_pjsip: Use a MD5 hash for static Contact IDs
When 90d9a70789 was merged, it mostly tested dynamic contacts created as
a result of registering a PJSIP endpoint. Contacts generated in this
fashion typically have a long alphanumeric string as their object identifier,
which maps reasonably well for StatsD. Unfortunately, this doesn't work in the
general case. StatsD treats both '.' and ':' characters as special characters.
In particular, having a ':' appear in the middle of a StatsD metric will
result in the metric being rejected.

This causes some obvious issues with SIP URIs.

The StatsD API should not be responsible for escaping the metric name passed
to it. The metric is treated as a single long string, and it would be
challenging to know what to escape in the string passed to the function.
Likewise, we don't want to escape the metric in PJSIP, as that involves
overhead that is wasted when either res_statsd isn't loaded or enabled.

This patch takes an alternative approach. The Contact ID has been changed
to be "aor@@uri_hash" instead of "aor@@uri". This (a) won't contain any of the
aforementioned special characters, (b) can be done on Contact creation,
which has minimal impact on run-time performance, and (c) also conforms to an
earlier commit that changed the ID for dynamic contacts.

The downside of this is that StatsD users will have to map SHA1 hashes back to
the Contacts that are emitting the statistics. To that end, the CLI commands
have been updated to include the first 10 characters of the MD5 hash, which
should be enough to match what is shown in Graphite (or some other StatsD
backend).

ASTERISK-25595 #close

Change-Id: Ic674a3307280365b4a45864a3571c295b48a01e2
Reported-by: Matt Jordan
Tested-by: George Joseph
2015-12-03 11:07:49 -07:00
Joshua Colp 8ab0c2107a Merge "res_sorcery_memory_cache.c: Fix off nominal ref leak." into 13 2015-12-03 05:51:17 -06:00
Joshua Colp 3b1452b542 Merge "sched.c: Make not return a sched id of 0." into 13 2015-12-03 05:50:43 -06:00
Joshua Colp 53d4f77064 Merge topic 'ASTERISK-25476' into 13
* changes:
  Audit improper usage of scheduler exposed by 5c713fdf18. (v13 additions)
  Audit improper usage of scheduler exposed by 5c713fdf18.
2015-12-03 05:50:04 -06:00
George Joseph ed9134282e res_pjsip: Update logging to show contact->uri in messages
An earlier commit changed the id of dynamic contacts to contain
a hash instead of the uri.  This patch updates status change
logging to show the aor/uri instead of the id.  This required
adding the aor id to contact and contact_status and adding
uri to contact_status.  The aor id gets added to contact and
contact_status in their allocators and the uri gets added to
contact_status in pjsip_options when the contact_status is
created or updated.

ASTERISK-25598 #close

Reported-by: George Joseph
Tested-by: George Joseph

Change-Id: I56cbec1d2ddbe8461367dd8b6da8a6f47f6fe511
2015-12-02 19:32:26 -07:00
Jonathan Rose eadad24b59 Unset BRIDGEPEER when leaving a bridge
Currently if a channel is transferred out of a bridge, the BRIDGEPEER
variable (also BRIDGEPVTCALLID) remain set even once the channel is
out of the bridge. This patch removes these variables when leaving
the bridge.

ASTERISK-25600 #close
Reported by: Mark Michelson

Change-Id: I753ead2fffbfc65427ed4e9244c7066610e546da
2015-12-02 12:57:04 -06:00
Richard Mudgett bb0b60619d res_sorcery_memory_cache.c: Fix off nominal ref leak.
Change-Id: If83d63cf11cbc6df9b15251848b01feb570ade49
2015-12-01 13:53:18 -06:00
Richard Mudgett e7c88e11aa sched.c: Make not return a sched id of 0.
According to the API doxygen a sched ID of 0 is valid.  Unfortunately, 0
was never returned historically and several users incorrectly coded usage
of the returned sched ID assuming that 0 was invalid.

ASTERISK-25476

Change-Id: Ib19c7ebb44ec9fd393ef6646dea806d4f34e3a20
2015-12-01 13:53:18 -06:00
Richard Mudgett 4aed349a7b Audit improper usage of scheduler exposed by 5c713fdf18. (v13 additions)
chan_sip.c:
* Initialize mwi subscription scheduler ids earlier because of ASTOBJ to
ao2 conversion.

* Initialize register scheduler ids earlier because of ASTOBJ to ao2
conversion.

chan_skinny.c:
* Fix more scheduler usage for the valid 0 id value.

ASTERISK-25476

Change-Id: If9f0e5d99638b2f9d102d1ebc9c5a14b2d706e95
2015-12-01 13:53:18 -06:00
Richard Mudgett 6d9156d10f Audit improper usage of scheduler exposed by 5c713fdf18.
channels/chan_iax2.c:
* Initialize struct chan_iax2_pvt scheduler ids earlier because of
iax2_destroy_helper().

channels/chan_sip.c:
channels/sip/config_parser.c:
* Fix initialization of scheduler id struct members.  Some off nominal
paths had 0 as a scheduler id to be destroyed when it was never started.

chan_skinny.c:
* Fix some scheduler id comparisons that excluded the valid 0 id.

channel.c:
* Fix channel initialization of the video stream scheduler id.

pbx_dundi.c:
* Fix channel initialization of the packet retransmission scheduler id.

ASTERISK-25476

Change-Id: I07a3449f728f671d326a22fcbd071f150ba2e8c8
2015-12-01 13:53:18 -06:00
Alexander Traud b76c196e13 codec_resample: Increase buffer for Opus Codec.
ASTERISK-25599 #close

Change-Id: I1f88a88c59fb4e1e62bbdbb100c7152d48e73f10
2015-12-01 07:59:19 -06:00
Matt Jordan 6614babea2 bridges/bridge_t38: Add a bridging module for managing T.38 state
When 4875e5ac32 was merged, it fixed several issues with a direct media bridge
transitioning to handling a T.38 fax. However, it uncovered a race condition
caused by the bridging core. When a channel involved in a T.38 fax leaves a
bridge, the frame queued by the channel driver that should inform the far side
that it is no longer in a T.38 fax may not make it across the bridge. The
bridging framework is *extremely* aggressive in tearing down the bridge, and
control frames that are currently in flight *may* get dropped.

This patch adds a new module to the bridging framework, bridge_t38. This module
maintains some notion of the T.38 state for the two channels in a bridge. When
the bridge detects that it is being torn down or when one of the two channels
leaves, it informs the respective channel(s) that they should stop faxing. This
ensures that channels switch back to audio if they survive and are ejected out
of a bridge while faxing.

ASTERISK-25582

Change-Id: If5b0bb478eb01c4607c9f4a7fc17c7957d260ea0
2015-11-30 20:11:43 -06:00
Niklas Larsson 3fcf160fae CHANGES: Fix a typo
Change-Id: Iceb3d9bb78140c376174a7bee197dfcf8ef9cda7
2015-11-27 10:24:57 -06:00
Matt Jordan 762dc9c89d Merge "fastagi: record file closed after sending result" into 13 2015-11-25 22:19:16 -06:00
Matt Jordan 5d80a6e714 Merge "main: Slight refactor of main. Improve color situation." into 13 2015-11-25 22:17:43 -06:00
Kevin Harwell 45efbf8503 fastagi: record file closed after sending result
The fastagi record-file testsuite test sometimes fails reporting an empty
recorded file. This was happening because Asterisk was sending the agi result
notification prior to actually closing the file and the data, being buffered,
had not been written to the file yet when the test attempts to check the file
size.

This patch makes it so the record file stream is closed prior to sending the
agi result notification.

ASTERISK-25593 #close

Change-Id: I6b2b3be3ae37f7c7b18e672c419a89b3b8513cde
2015-11-25 15:33:29 -06:00
Walter Doekes b2787876d6 main: Slight refactor of main. Improve color situation.
Several issues are addressed here:
- main() is large, and half of it is only used if we're not rasterisk;
  fixed by spliting up the daemon part into a separate function.
- Call ast_term_init from rasterisk as well.
- Remove duplicate code reading/writing asterisk history file.
- Attempt to tackle background color issues and color changes that
  occur. Tested by starting asterisk -c until the colors stopped
  changing at odd locations.

ASTERISK-25585 #close

Change-Id: Ib641a0964c59ef9fe6f59efa8ccb481a9580c52f
2015-11-25 20:29:42 +01:00
Matt Jordan e96604c902 Merge "Fixed some typos" into 13 2015-11-24 20:23:06 -06:00
David M. Lee 59881fbb99 Fixed some typos
Fixes some minor typos in the CHANGES file, plus an embarrasing typo in
the StatsD API.

Change-Id: I9ca4858c64a4a07d2643b81baa64baebb27a4eb7
2015-11-24 13:54:54 -06:00
Corey Farrell b75f587d15 res_pjsip_notify: Fix CLI usage info
The usage info for 'pjsip send notify' previously referenced the
chan_sip configuration sip_notify.conf.  Fix this to reference
the correct configuration pjsip_notify.conf.

ASTERISK-25590 #close

Change-Id: I3898271a8e8a8b1db201741e790ebe2c6bf5cdea
2015-11-24 14:07:12 -05:00
Joshua Colp 3f85a1be5a Merge "translate: Provide translation modules the result of SDP negotiation." into 13 2015-11-24 08:20:52 -06:00
Mark Michelson ba7665b070 Merge "res_sorcery_realtime.c: Fix crash from NULL sorcery object type." into 13 2015-11-23 18:04:53 -06:00
Richard Mudgett fc45f4040d res_sorcery_realtime.c: Fix crash from NULL sorcery object type.
If the sorcery object type is not found a NULL is returned.
Unfortunately, sorcery_realtime_filter_objectset() will crash after
complaining about not finding the object type and saying to expect errors.

* Use ao2_cleanup() instead of ao2_ref() to prevent the crash.

ASTERISK-25165
Reported by Corey Farrell

Change-Id: Ic3b64453ea3058cb68d5c26d97d4fe7b8eea2e97
2015-11-23 14:42:31 -06:00
Matt Jordan 7e4d948397 Merge "chan_pjsip: Handle T.38 faxes with direct media bridges" into 13 2015-11-23 13:33:06 -06:00
Matt Jordan 25332911fe Merge "res/res_endpoint_stats: Add module to emit endpoint StatsD statistics" into 13 2015-11-23 09:26:49 -06:00
Matt Jordan 6a7cb60a47 Merge "res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contacts" into 13 2015-11-23 09:26:35 -06:00
Matt Jordan 16437667eb Merge "res/res_pjsip_outbound_registration: Add registration statistics for StatsD" into 13 2015-11-23 09:26:15 -06:00
Matt Jordan 001b7f482b Merge "res_statsd: Add functions that support variable arguments" into 13 2015-11-23 08:43:29 -06:00
Matt Jordan 0f88f909ec Merge "StatsD: Add res_statsd compatibility" into 13 2015-11-22 22:38:21 -06:00
Matt Jordan 4875e5ac32 chan_pjsip: Handle T.38 faxes with direct media bridges
When a channel is in a direct media bridge, a re-INVITE may arrive that forces
Asterisk to re-negotiate the media to a T.38 fax. When this occurs, the bridge
must change its technology to a simple bridge, and re-INVITE the media back
to Asterisk.

Generally, this logic mostly already exists in Asterisk. However, prior to this
patch, there were a few bugs:
(1) The T.38 framehook currently prevents a channel capable of T.38 faxes from
    ever entering into a direct media bridge. This applies even when the only
    media being passed over the channel is audio. This patch fixes this bug
    by having the framehook specify that it defers caring about any frame type.
    This allows the channels to enter into a direct media bridge, which will
    be broken when a re-INVITE is received.
(2) When a re-INVITE is received, nothing instructed the bridging layer to
    re-inspect the allowed bridging technology. This now occurs when either
    a re-INVITE is received from a peer, or when a response is received from
    the far end (that is, when the T.38 state changes to either
    T38_PEER_REINVITE or T38_LOCAL_REINVITE).
(3) chan_pjsip needs to do a small amount of work to prevent a direct media
    bridge from being chosen when a T.38 session is in progress. When a T.38
    session supplement has a t38 datastore - which is added when we detect
    we should start thinking about T.38 on a channel - we now refuse a native
    RTP bridge.
(4) When a BYE request is received, we don't terminate the T.38 session. If
    the other side of a T.38 fax survives the hangup (due to the 'g' flag
    in Dial, for example), we don't currently re-INVITE the media on the
    other channel back to audio. This patch now has res_pjsip_t38 intercept
    BYE requests and inform the far side that the T.38 session is terminated.
    This naturally causes the correct re-INVITEs to be sent.

ASTERISK-25582

Change-Id: Iabd6aa578e633d16e6b9f342091264e4324a79eb
2015-11-22 22:35:08 -06:00
Joshua Colp fa969196b3 Merge "main/cli: Use proper string methods to check existence of context/exten/app" into 13 2015-11-21 11:36:48 -06:00
Joshua Colp 6dd8b67216 Merge "res/res_pjsip_t38: Add debug statements" into 13 2015-11-21 11:14:14 -06:00
Matt Jordan aa8f1b04b6 Merge "res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts." into 13 2015-11-21 10:57:12 -06:00
Matt Jordan 2b94d9a10d res/res_pjsip_t38: Add debug statements
This patch adds some debug statements to res_pjsip_t38. These statements help
to determine which SDP negotiation callbacks are being executed, and, when
a particular callback exits, why a callback may not have applied its logic
to the local or remote SDP.

Change-Id: I61b3fb9183b7ebbb5da8e9f48b59a5d9d7042d77
2015-11-21 08:50:53 -06:00
Matt Jordan af288b2d96 main/cli: Use proper string methods to check existence of context/exten/app
Because the context, extension, and application are stored in stringfields,
checking for them being NULL doesn't work so well. This patch uses the
appropriate string library call, ast_strlen_zero, to see if there is a value
in the context/exten/app values.

Change-Id: Ie09623bfdf35f5a8d3b23dd596647fe3c97b9a23
2015-11-20 22:02:45 -06:00
Mark Michelson 6fcd361540 Merge "res_pjsip_outbound_registration.c: Fix 423 response handling." into 13 2015-11-20 13:03:18 -06:00
Joshua Colp bdc7845a43 Merge "res_format_attr_h264: Do not reset string buffer." into 13 2015-11-20 09:20:51 -06:00
Matt Jordan d27aac0a9d res/res_endpoint_stats: Add module to emit endpoint StatsD statistics
This patch adds a module that emits StatsD statistics about Asterisk
endpoints. This includes:
 * A GUAGE statistic for endpoint states, tracking how many endpoints are in
   a particular state.
 * A GUAGE statistic for each endpoint, counting the number of channels
   currently associated with an endpoint.

ASTERISK-25572

Change-Id: If7e1333c5aeda8d136850b30c2101c0ee1c97305
2015-11-19 11:57:28 -06:00
Matt Jordan 90d9a70789 res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contacts
This patch adds the ability to send StatsD statistics related to the
state of PJSIP contacts. This includes:
 * A GUAGE statistic measuring the count of contacts in a particular state.
   This measures how many contacts are reachable, unreachable, etc.
 * The RTT time for each contact, if those contacts are qualified. This
   provides StatsD engines useful time-based data about each contact.

ASTERISK-25571

Change-Id: Ib8378d73afedfc622be0643b87c542557e0b332c
2015-11-19 11:57:28 -06:00
Matt Jordan 75097a0955 res/res_pjsip_outbound_registration: Add registration statistics for StatsD
This patch adds outbound registration statistics for StatsD. This includes
the following:
 * A GUAGE metric for the overall count of outbound registrations.
 * A GUAGE metric for each state an outbound registration can be in. As the
   outbound registrations change state, the overall count of how many
   outbound registrations are in the particular state is changed.

These statistics are particularly useful for systems with a large number of
SIP trunks, and where measuring the change in state of the trunks is useful
for monitoring.

ASTERISK-25571

Change-Id: Iba6ff248f5d1c1e01acbb63e9f0da1901692eb37
2015-11-19 11:57:28 -06:00
Matt Jordan 8f71263e72 res/res_pjsip_outbound_registration: Apply configuration on object type load
When Asterisk is configured to use a dynamic sorcery backend (such as
res_sorcery_astdb) with 'registration' objects, it will fail to create the
internal state objects associated with the registration objects on module
load. This is due to nothing actually querying for the specific objects
and calling their sorcery apply handler during module load.

This patch fixes that by calling get_registrations in the sorcery observer's
object_type_loaded handler. Doing this causes the sorcery backends to be
asked for the current state of all registration objects, which causes the
apply handler to be called and the internal run-time state to be created.

ASTERISK-25575 #close

Change-Id: Ie9306e797098c6d4da7bcf4a5434a15891508b23
2015-11-19 09:40:24 -06:00
Alexander Traud 0b508789ab translate: Provide translation modules the result of SDP negotiation.
Previously, a trancoding module did not have access to the joint but cached
format. Therefore, the module did not have access to the attributes negotiated
via SDP (line fmtp). Now, a translation module receives the joint format.

ASTERISK-25545 #close

Change-Id: Id6878a989b50573298dab115d3371ea369e1a718
2015-11-19 10:45:05 +01:00
Alexander Traud 1aa552b2a2 res_format_attr_h264: Do not reset string buffer.
When no parameter is present, Asterisk does not generate the line fmtp, as
expected. However, because a buffer was reset, even rtpmap and fmtp of previous
media codecs got removed. Now, Asterisk does not reset other codecs in case of
no parameter for H.264.

ASTERISK-25573 #close

Change-Id: I93811331f4a28c45418a9e14ee46c0debd47a286
2015-11-19 08:15:30 +01:00
Matt Jordan 3354b325c6 res_statsd: Add functions that support variable arguments
Often, the metric names of statistics we are generating for StatsD have some
dynamic component to them. This can be the name of a particular resource, or
some internal status label in Asterisk. With the current set of functions,
callers of the statsd API must first build the metric name themselves, then
pass this to the API functions. This results in a large amount of boilerplate
code and usage of either fixed length static buffers or dynamic memory
allocation, neither of which is desireable.

This patch adds two new functions to the StatsD API that support a printf
style format specifier for constructing the metric name. A dynamic string,
allocated in threadstorage, is used to build the metric name. This eases
the burden on users of the StatsD API.

Change-Id: If533c72d1afa26d807508ea48b4d8c7b32f414ea
2015-11-18 16:48:13 -06:00
Richard Mudgett d4a522d587 res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts.
Change-Id: Ie16f5053ebde0dc6507845393709b4d6a3ea526d
2015-11-18 13:21:25 -06:00
Richard Mudgett e44ab3816c res_pjsip_outbound_registration.c: Fix 423 response handling.
Receiving a 423 Interval Too Brief response after authentication for an
outbound registration attempt results in assuming that the registrar has
rejected the registration permanently.  If there are no configured retries
for fatal responses then the outbound registration is stopped for that
endpoint.

For registrations, PJSIP/PJPROJECT intercepts the handling of 423
responses and does not include any authentication in the updated
registration request.  When the updated request is challenged then the
Asterisk code assumes that we were challenged again because the peer
rejected the authentication we sent earlier.

* Made registration challenges keep track of the CSeq number to determine
if the received challenge response was for the request we thought we sent.
If the response's CSeq number differs from the CSeq number we last sent
with authentication then authenticate again because it is a challenge to a
different request.

Change-Id: I81b4bd36d1be095bab606e34b8b44e6302971b09
2015-11-18 13:21:25 -06:00
tcambron 1e0040b88f StatsD: Add res_statsd compatibility
Added a new api to res_statsd.c to allow it to receive a
character pointer for the value argument. This allows for a
'+' and a '-' to easily be sent with the value.

ASTERISK-25419
Reported By: Ashley Sanders

Change-Id: Id6bb53600943d27347d2bcae26c0bd5643567611
2015-11-18 10:07:19 -06:00
Matt Jordan ccf80f95a2 Merge "res_pjsip_rfc3326.c: Fix crash when channel goes away." into 13 2015-11-18 07:33:53 -06:00
Matt Jordan e3cb27d341 Merge "format: Register format-attribute module with cached formats." into 13 2015-11-17 14:35:06 -06:00
Matt Jordan 6c10d30d0e Merge "res/res_pjsip: Fix off nominal crash with requests that fail and have a timer" into 13 2015-11-17 12:59:32 -06:00
Joshua Colp 0843e6043e Merge "Confbridge: Add a user timeout option" into 13 2015-11-17 08:12:16 -06:00
Matt Jordan f62b642fe3 res/res_pjsip: Fix off nominal crash with requests that fail and have a timer
When a request is sent using pjsip_endpt_send_request and fails, a condition
exists where the request wrapper, which is an AO2 object, may be de-ref'd
more times than it should. This occurs when the request's callback is called,
and, in the callback, the timer on the PJSIP heap is cancelled. When that
occurs, the request wrapper's lifetime is decremented. When
pjsip_endpt_send_request fails, we unilaterally decrement the lifetime of
the request wrapper again, even though we've already cancelled the reference
associated with the timer.

This patch checks the return result of pj_timer_heap_cancel_if_active before
removing the reference associated with the timer. We now only decrement it
in this case if a timer is cancelled as a result of the function call.

Change-Id: I21332343a1a019c1117076f9bf2df27be2850102
2015-11-16 14:07:36 -06:00
Mark Michelson fdd2afcd16 Confbridge: Add a user timeout option
This option adds the ability to specify a timeout, in seconds, for a
participant in a ConfBridge. When the user's timeout has been reached,
the user is ejected from the conference with the CONFBRIDGE_RESULT
channel variable set to "TIMEOUT".

The rationale for this change is that there have been times where we
have seen channels get "stuck" in ConfBridge because a network issue
results in a SIP BYE not being received by Asterisk. While these
channels can be hung up manually via CLI/AMI/ARI, adding some sort of
automatic cleanup of the channels is a nice feature to have.

ASTERISK-25549 #close
Reported by Mark Michelson

Change-Id: I2996b6c5e16a3dda27595f8352abad0bda9c2d98
2015-11-16 13:59:29 -06:00
Alec Davis 7debb986a5 app_queue: (try_calling): mutex 'qe->chan' freed more times than we've locked!
commit aae45acbd (Mark Michelson 2015-04-15 10:38:02 -0500 6525)
refer ASTERISK-24958

above commit removed ast_channel_lock(qe->chan);
but failed to remove corresponding ast_channel_unlock(qe->chan);

ASTERISK-25561 #close
Reported Alec Davis

Change-Id: Ie05f4e2d08912606178bf1fded57cc022c7a2e1a
2015-11-16 13:23:05 -06:00
Joshua Colp afd9a89e5a hashtab: Add NULL check when destroying iterator.
The hashtab API is pretty NULL tolerant which has resulted
in remaining callers not doing much checks themselves.
Unfortunately the function to destroy an iterator does not
do a NULL check and will result in a crash if passed NULL.
This change fixes that.

ASTERISK-25552 #close

Change-Id: Ic1bf8eec3639e5a440f1c941d3ae3893ac6ed619
2015-11-14 08:06:35 -05:00
Richard Mudgett c0f2f8de45 res_pjsip_rfc3326.c: Fix crash when channel goes away.
If an authenticated incoming caller does not respond to our 200 OK INVITE
response with an ACK then PJSIP will hangup the call.  Unfortunately,
there is a chance that the session's channel will go away between one use
of the channel pointer and another when building the BYE request because
the BYE is being built by the monitor thread and not the call's serializer
thread.

* Added a check to ensure that the thread trying to add the Reason header
is the call's serializer thread.  This ensures that the channel will not
go away on us.

Change-Id: I866388d2b97ea2032eaae3f3ab3f1ca6cbd2df89
2015-11-13 15:31:02 -06:00
Mark Michelson 4f43b85c92 Taskprocessors: Increase high-water mark
In practical tests, we have seen certain taskprocessors, specifically
Stasis subscription taskprocessors, cross the recently-added high-water
mark and emit a warning. This high-water mark warning is only intended
to be emitted when things have tanked on the system and things are
heading south quickly. In the practical tests, the Stasis taskprocessors
sometimes had a max depth of 180 tasks in them, and Asterisk wasn't in
any danger at all.

As such, this ups the high-water mark to 500 tasks instead. It also
redefines the SIP threadpool request denial number to be a multiple of
the taskprocessor high-water mark.

Change-Id: Ic8d3e9497452fecd768ac427bb6f58aa616eebce
2015-11-13 15:33:20 -05:00
Alexander Traud d8d3991390 format: Register format-attribute module with cached formats.
In Asterisk 13, cached formats are created before their corresponding format-
attribute module is registered. Cached formats are involved when a local
extension is called. Therefore, ast_format_generate_sdp_fmtp did not work
on local extensions. This change affects the Opus Codec, H.263 (Plus), H.264,
and format-attribute modules provided externally.

ASTERISK-25160 #close

Change-Id: I1ea1f0483e5261e2a050112e4ebdfc22057d1354
2015-11-13 09:26:37 +01:00
Mark Michelson 367972e42d res_pjsip distributor: Don't send 503 response to responses.
When the SIP threadpool is backed up with tasks, we send 503 responses
to ensure that we don't try to overload ourselves. The problem is that
we were not insuring that we were not trying to send a 503 to an
incoming SIP response.

This change makes it so that we only send the 503 on incoming requests.

Change-Id: Ie2b418d89c0e453cc6c2b5c7d543651c981e1404
2015-11-12 12:21:24 -05:00
Joshua Colp cd51b0aeac Merge "res_pjsip: Deny requests when threadpool queue is backed up." into 13 2015-11-12 10:56:05 -06:00
Matt Jordan db93c357ce Merge "format_cap: Don't append the 'none' format when appending all." into 13 2015-11-12 10:54:04 -06:00
Mark Michelson 2f9cb7d62b res_pjsip: Deny requests when threadpool queue is backed up.
We have observed situations where the SIP threadpool may become
deadlocked. However, because incoming traffic is still arriving, the SIP
threadpool's queue can continue to grow, eventually running the system
out of memory.

This change makes it so that incoming traffic gets rejected with a 503
response if the queue is backed up too much.

Change-Id: I4e736d48a2ba79fd1f8056c0dcd330e38e6a3816
2015-11-12 11:41:27 -05:00
Joshua Colp 7ae22c2690 Merge "Further fixes to improper usage of scheduler" into 13 2015-11-12 07:56:30 -06:00
Joshua Colp 4e5bf12b33 format_cap: Don't append the 'none' format when appending all.
When appending all formats of a type all the codecs are iterated
and added. This operation was incorrectly adding the ast_format_none
format which is special in that it is supposed to be used when no
format is present. It shouldn't be appended.

ASTERISK-25535

Change-Id: I7b00f3bdf4a5f3022e483d6ece602b1e8b12827c
2015-11-12 09:46:54 -04:00
Steve Davies 07583c2888 Further fixes to improper usage of scheduler
When ASTERISK-25449 was closed, a number of scheduler issues mentioned in
the comments were missed. These have since beed raised in ASTERISK-25476
and elsewhere.

This patch attempts to collect all of the scheduler issues discovered so
far and address them sensibly.

ASTERISK-25476 #close

Change-Id: I87a77d581e2e0d91d33b4b2fbff80f64a566d05b
2015-11-12 11:44:17 +00:00
Joshua Colp b818d70533 threadpool: Handle worker thread transitioning to dead when going active.
This change adds handling of dead worker threads when moving them
to be active. When this happens the worker thread is removed from
both the active and idle threads container. If no threads are able
to be moved to active then the pool grows as configured.

A unit test has also been added which thrashes the idle timeout
and thread activation to exploit any race conditions between the
two.

ASTERISK-25546 #close

Change-Id: I6c455f9a40de60d9e86458d447b548fb52ba1143
2015-11-11 15:06:36 -04:00
Matt Jordan dac0bf063c Merge "rtp_engine: Init a format-attribute module to its RFC defaults." into 13 2015-11-11 08:09:51 -06:00
Matt Jordan e07f5a6133 Merge "res_pjsip_sdp_rtp: Enable Opus to be negotiated via SIP/SDP." into 13 2015-11-11 08:08:51 -06:00
Matt Jordan e098fb1813 Merge "ast_format_cap: Avoid format creation on module load, use cache instead." into 13 2015-11-11 08:07:58 -06:00
Matt Jordan bd157b9ca8 Merge "xmldoc: Improve xmldoc wrapping of 'core show ...' output." into 13 2015-11-11 08:06:51 -06:00
Alexander Traud 4bf84459c7 rtp_engine: Init a format-attribute module to its RFC defaults.
Previously, format-attribute modules relied on an existing fmtp line in SDP
negotiation. However, fmtp is optional for several formats like the Opus Codec.
Now, the format-attribute module is called with an empty fmtp, which allows the
module to initialise itself to RFC defaults. Furthermore now, Asterisk is able
to differentiate between internally and externally created formats.

ASTERISK-25537 #close

Change-Id: I28f680cef7fdf51c0969ff8da71548edad72ec52
2015-11-11 14:58:47 +01:00
Joshua Colp 18e61a6442 Merge "taskprocessor: Add high water mark warnings" into 13 2015-11-11 07:10:22 -06:00
Joshua Colp 3e0f161761 Merge "ast_format_cap_get_names: To display all formats, the buffer was increased." into 13 2015-11-10 14:58:24 -06:00
Joshua Colp 07189ee2c9 Merge "func_callerid: Document that CALLERID(pres) is available." into 13 2015-11-10 10:04:38 -06:00
Alexander Traud 1bff400df7 ast_format_cap_get_names: To display all formats, the buffer was increased.
ASTERISK-25533 #close

Change-Id: Ie1a9d1a6511b3f1a56b93d04475fbf8a4e40010a
2015-11-09 17:02:52 +01:00
Alexander Traud f3ac4d8090 ast_format_cap: Avoid format creation on module load, use cache instead.
Since Asterisk 13, formats are immutable and cached. However while loading a
module like chan_sip, some formats were created instead using cached ones.

ASTERISK-25535 #close

Change-Id: I479cdc220d5617c840a98f3389b3bd91e91fbd9b
2015-11-09 08:07:37 -05:00
Walter Doekes 6d1bdb9d3b func_callerid: Document that CALLERID(pres) is available.
CALLERPRES() says that it's deprecated in favor of CALLERID(num-pres)
and CALLERID(name-pres).  But for channel driver that don't make a
distinction between the two (e.g. SIP), it makes more sense to get/set
both at once.  This change reveals the availability of CALLERID(pres),
CONNECTEDLINE(pres), REDIRECTING(orig-pres), REDIRECTING(to-pres) and
REDIRECTING(from-pres).

ASTERISK-25373 #close

Change-Id: I5614ae4ab7d3bbe9c791c1adf147e10de8698d7a
2015-11-06 18:04:04 -05:00
Walter Doekes 8410336681 docs: Fix a few typo's in app docs (more then, resourse).
Change-Id: Iba57efadf6c0b822e762c7a001bc89611d98afd7
2015-11-06 16:46:21 -05:00
Walter Doekes 0d425f2eb4 xmldoc: Improve xmldoc wrapping of 'core show ...' output.
Previously, the wrapping did both lookahead and lookback, which,
together with color escape sequences, caused some lines to be wrapped
way earlier than other lines.  This led to inconsistent output.

This simplifies the wrapping code and makes it more sane: if maxcolumns
is hit, we simply jump back to the last space and wrap there.

ASTERISK-25527 #close

Change-Id: I56d01c6f9a812642b1b05535c98d4db48d17c957
2015-11-06 14:45:19 +01:00
Alexander Traud 33752e0837 res_pjsip_sdp_rtp: Enable Opus to be negotiated via SIP/SDP.
In SIP/SDP, Opus has two channels always (see RFC 7587 section 7). The actual
amount of channels is negotiated in-band. Therefore now, the Opus codec and its
attribute rtpmap are registered with two channels.

ASTERISK-24779 #close
Reported by: PowerPBX
Tested by: Alexander Traud
patches:
  asterisk-24779.patch submitted by Sean Bright (license #5060)

Change-Id: Ic7ac13cafa1d3450b4fa4987350924b42cbb657b
2015-11-06 08:02:05 -05:00
Jonathan Rose 6ff48319d9 taskprocessor: Add high water mark warnings
If a taskprocessor's queue grows large, this can indicate that there
may be a problem with tasks not leaving the processor or else that
the number of available task processors for a given type of task is
too low. This patch makes it so that if a taskprocessor's task queue
grows above 100 queued tasks that it will emit a warning message.
Warning messages are emitted only once per task processor.

ASTERISK-25518 #close
Reported by: Jonathan Rose

Change-Id: Ib1607c35d18c1d6a0575b3f0e3ff5d932fd6600c
2015-11-05 17:48:44 -05:00
Matt Jordan 506aea26e6 main/dial: Protect access to the format_cap structure of the requesting channel
When a dial attempt is made that involves a requesting channel, we previously
were not:
a) Protecting access to the native format capabilities structure on the
   requesting channel. That is inherently unsafe.
b) Reference bumping the lifetime of the format capabilities structure.

In both cases, something else could sneak in, blow away the format
capabilities, and we'd be holding onto an invalid format_cap structure. When
the newly created channel attempts to construct its format capabilities, things
go poorly.

This patch:
a) Ensures that we get a reference to the native format capabilities while
   the requesting channel is locked
b) Holds a reference to the native format capabilities during the creation
   of the new channel.

ASTERISK-25522 #close

Change-Id: I0bfb7ba8b9711f4158cbeaae96edf9626e88a54f
2015-11-04 14:31:28 -06:00
Corey Farrell d098d00424 Fix cli display of build options.
A previous commit reduced the AST_BUILDOPTS compiler define to
only include options that affected ABI.  This included some options
that were previously displayed by cli "core show settings".  This
change corrects the CLI display while still restricting buildopts.h
to ABI effecting options only.

ASTERISK-25434 #close
Reported by: Rusty Newton

Change-Id: Id07af6bedd1d7d325878023e403fbd9d3607e325
2015-11-04 09:24:00 -05:00
Matt Jordan afec1b1b64 res_pjsip/location: Destroy contact_status objects on contact deletion
The contact_status Sorcery objects are currently not destroyed when a contact
is deleted. This causes the contact's last known RTT/status to be 'sticky'
when the contact itself may no longer exist. This patch causes the
contact_status objects associated with both dynamic and static contacts to
be destroyed if the AoR holding those contacts is also destroyed (or via
other paths where a contact may be deleted.)

Change-Id: I7feec8b9278cac3c5263a4c0483f4a0f3b62426e
2015-11-04 07:44:26 -06:00
Matt Jordan 1cf699c848 Merge "pjsip_configuration: On delete, remove the persistent version of an endpoint" into 13 2015-11-04 07:44:14 -06:00
Matt Jordan 562556c79f Merge "main/stasis_endpoints: Fix ContactStatusChange JSON for roundtrip_usec field" into 13 2015-11-03 15:38:11 -06:00
Matt Jordan 715f770c9f pjsip_configuration: On delete, remove the persistent version of an endpoint
When an endpoint is deleted (such as through an API), the persistent endpoint
currently continues to lurk around. While this isn't harmful from a memory
consumption perspective - as all persistent endpoints are reclaimed on
shutdown - it does cause Stasis endpoint related operations to continue
to believe that the endpoint may or may not exist.

This patch causes the persistent endpoint related to a PJSIP endpoint to be
destroyed if the PJSIP endpoint is deleted.

Change-Id: I85ac707b4d5e6aad882ac275b0c2e2154affa5bb
2015-11-03 12:20:57 -05:00
Matt Jordan f0f190af08 main/stasis_endpoints: Fix ContactStatusChange JSON for roundtrip_usec field
The JSON packing for the ContactStatusChange event forgot to include the
roundtrip_usec field. As a result, the field never showed up in any event,
even when the data was available. This patch corrects that error by properly
packing the JSON blob with the data.

Change-Id: I8df80da659a44010afbd48f645967518ff5daa17
2015-11-03 08:15:16 -06:00
Corey Farrell 0393bd6bed chan_sip: Allow websockets to be disabled.
This patch adds a new setting "websockets_enabled" to sip.conf.
Setting this to false allows chan_sip to be used without causing
conflicts with res_pjsip_transport_websocket.

ASTERISK-24106 #close
Reported by: Andrew Nagy

Change-Id: I04fe8c4f2d57b2d7375e0e25826c91a72e93bea7
2015-11-03 08:52:52 -05:00
Mark Michelson 6fbffe42e1 res_pjsip: Set threadpool max size default to 50.
During a stress test of subscriptions, a huge blast of
subscription-related traffic resulted in the threadpool expanding to a
ridiculous number of threads. The balooning of threads resulted in an
increase of memory, which led to a crash due to being out of memory.

An easy fix for the particular test was to limit the size of the
threadpool, thus reining in the amount of memory that would be used. It
was decided that there really is no downside to having a non-infinite
default value for the maximum size of the threadpool, so this change
introduces 50 threads as the maximum threadpool size for the SIP
threadpool.

ASTERISK-25513 #close
Reported by John Bigelow

Change-Id: If0b9514f1d9b172540ce1a6e2f2ffa1f2b6119be
2015-11-02 17:19:21 -06:00
Joshua Colp 0071a993f0 Merge "pjsip_options: Schedule/unschedule qualifies on AoR creation/destruction" into 13 2015-11-02 16:02:18 -06:00
Matt Jordan 11e54b1932 pjsip_options: Schedule/unschedule qualifies on AoR creation/destruction
When an AoR is created or destroyed dynamically, the scheduled OPTIONS
requests that qualify the contacts on the AoR are not necessarily started
or destroyed, particularly for persistent contacts created for that AoR.
This patch adds create/update/delete sorcery observers for an AoR, which
schedule/unschedule the qualifies as expected.

Change-Id: Ic287ed2e2952a7808ee068776fe966f9554bdf7d
2015-11-02 07:52:34 -06:00
Matt Jordan 118d628e08 Makefile: Add a rule 'basic-pbx' that installs the Basic PBX configs
This patch adds a rule for installing the Super Awesome Company based 'Basic
PBX' configuration files. As part of adding this rule, a bit of the content
that makes up installing the configuration files under the 'samples' target
was refactored into a make subroutine for usage by additional later config
make targets.

Change-Id: I6c2e27906f73e2919a2b691da0be20ae70302404
2015-10-31 13:40:11 -05:00
Joshua Colp 9a021a42ad res_pjsip_pubsub: Fix assertion when UAS dialog creation fails.
When compiled with assertions enabled one will occur when destroying
the subscription tree when UAS dialog creation fails. This is because
the code assumes that a dialog will always exist on a subscription
tree when in reality during this specific scenario it won't.

This change makes it so a dialog is not removed from the subscription
tree if it is not present.

ASTERISK-25505 #close

Change-Id: Id5c182b055aacc5e66c80546c64804ce19218dee
2015-10-29 10:28:33 -03:00
Matt Jordan b640858e9b Merge "chan_sip: Do not send all codecs on INVITE." into 13 2015-10-29 08:26:45 -05:00
Joshua Colp ba566b0f0f Merge "res_pjsip: Add "like" processing to pjsip list and show commands" into 13 2015-10-28 06:30:56 -05:00
Alexander Traud 1256aedf66 chan_sip: Do not send all codecs on INVITE.
Since version 13, Asterisk sent all allowed codecs as callee, even when the
caller did not request/support them. In case of dynamic RTP payloads, this led
to the same ID for different codecs, which is not allowed by SIP/SDP. Now, the
intersection between the requested and the supported codecs is send again.

ASTERISK-24543 #close

Change-Id: Ie90cb8bf893b0895f8d505e77343de3ba152a287
2015-10-26 11:46:48 -05:00
Joshua Colp 31f13a1e93 Merge "build: GCC 5.1.x catches some new const, array bounds and missing paren issues" into 13 2015-10-26 11:32:22 -05:00
Matt Jordan 7d1a2b0839 Merge "format: Update the maximum packetization time for iLBC 30." into 13 2015-10-26 10:50:08 -05:00
Matt Jordan 6875944771 Merge "res_pjsip_pubsub: Prevent sending NOTIFY on destroyed dialog." into 13 2015-10-25 10:14:55 -05:00
Matt Jordan 131c3c181d Merge "res_pjsip_pubsub: Ensure dialog lock balance." into 13 2015-10-25 10:14:24 -05:00
Matt Jordan c7651da5d1 Merge "res_pjsip_pubsub: Prevent crashes on final NOTIFY." into 13 2015-10-25 10:12:58 -05:00
Matt Jordan 90f0ed5475 Merge "res_pjsip_pubsub: Remove serializer when sending final NOTIFY." into 13 2015-10-25 10:12:37 -05:00
Matt Jordan d9be087da4 Merge "res_pjsip_pubsub: Fix crash on destruction of empty subscription tree." into 13 2015-10-25 10:12:03 -05:00
Matt Jordan 4d576fe6d9 Merge "res_pjsip_pubsub: Solidify lifetime and ownership of objects." into 13 2015-10-25 10:10:55 -05:00
George Joseph 5f593e7c38 build: GCC 5.1.x catches some new const, array bounds and missing paren issues
Fixed 1 issue in each of the affected files.

ASTERISK-25494 #close
Reported-by: George Joseph
Tested-by: George Joseph

Change-Id: I818f149cd66a93b062df421e1c73c7942f5a4a77
2015-10-24 12:50:40 -06:00
George Joseph 162acd45f7 res_pjsip: Add "like" processing to pjsip list and show commands
Add the ability to filter output from pjsip list and show commands
using the "like" predicate like chan_sip.

For endpoints, aors, auths, registrations, identifyies and transports,
the modification was a simple change of an ast_sorcery_retrieve_by_fields
call to ast_sorcery_retrieve_by_regex.  For channels and contacts a
little more work had to be done because neither of those objects are
true sorcery objects.  That was just removing the non-matching object
from the final container.  Of course, a little extra plumbing in the
common pjsip_cli code was needed to parse the "like" and pass the regex
to the get_container callbacks.

Some of the get_container code in res_pjsip_endpoint_identifier was also
refactored for simplicity.

ASTERISK-25477 #close
Reported by: Bryant Zimmerman
Tested by: George Joseph

Change-Id: I646d9326b778aac26bb3e2bcd7fa1346d24434f1
2015-10-24 10:00:30 -06:00
Joshua Colp d818e6edce Merge "res_pjsip_outbound_registration: registration stops due to fatal 4xx response" into 13 2015-10-23 15:35:19 -05:00
Kevin Harwell c58091737d res_pjsip_outbound_registration: registration stops due to fatal 4xx response
During outbound registration it is possible to receive a fatal (any permanent/
non-temporary 4xx, 5xx, 6xx) response from the registrar that is simply due
to a problem with the registrar itself. Upon receiving the failure response
Asterisk terminates outbound registration for the given endpoint.

This patch adds an option, 'fatal_retry_interval', that when set continues
outbound registration at the given interval up to 'max_retries' upon receiving
a fatal response.

ASTERISK-25485 #close

Change-Id: Ibc2c7b47164ac89cc803433c0bbe7063bfa143a2
2015-10-23 09:43:20 -05:00
Joshua Colp 8315479929 Merge "chan_sip: Fix autoframing=yes." into 13 2015-10-23 06:51:54 -05:00
Joshua Colp 84f1068bab Merge topic 'fix_oom_crash' into 13
* changes:
  strings.c: Fix __ast_str_helper() to always return a terminated string.
  Add missing failure checks to ast_str_set_va() callers.
2015-10-23 06:51:32 -05:00
Joshua Colp 53ed5a0675 Merge "res_pjsip: Move URI validation to use time." into 13 2015-10-23 06:48:48 -05:00
Mark Michelson ebe69dee0d format_cap: Detect vector allocation failures.
A crash was seen on a system that ran out of memory due to Asterisk not
checking for vector allocation failures in format_cap.c. With this
change, if either of the AST_VECTOR_INIT calls fail, we will return a
value indicating failure.

Change-Id: Ieb9c59f39dfde6d11797a92b45e0cf8ac5722bc8
2015-10-22 17:10:30 -05:00
Mark Michelson 3b19efefef res_pjsip_pubsub: Prevent sending NOTIFY on destroyed dialog.
A certain situation can result in our attempting to send a NOTIFY on a
destroyed dialog. Say we attempt to send a NOTIFY to a subscriber, but
that subscriber has dropped off the network. We end up retransmitting
that NOTIFY until the appropriate SIP timer says to destroy the NOTIFY
transaction. When the pjsip evsub code is told that the transaction has
been terminated, it responds in kind by alerting us that the
subscription has been terminated, destroying the subscription, and then
removing its reference to the dialog, thus destroying the dialog.

The problem is that when we get told that the subscription is being
terminated, we detect that we have not sent a terminating NOTIFY
request, so we queue up such a NOTIFY to be sent out. By the time that
queued NOTIFY gets sent, the dialog has been destroyed, so attempting to
send that NOTIFY can result in a crash.

The fix being introduced here is actually a reintroduction of something
the pubsub code used to employ. We hold a reference to the dialog and
wait to decrement our reference to the dialog until our subscription
tree object is destroyed. This way, we can send messages on the dialog
even if the PJSIP evsub code wants to terminate earlier than we would
like.

In doing this, some NULL checks for subscription tree dialogs have been
removed since NULL dialogs are no longer actually possible.

Change-Id: I013f43cddd9408bb2a31b77f5db87a7972bfe1e5
2015-10-22 16:16:57 -05:00
Mark Michelson 0a346f095f res_pjsip_pubsub: Ensure dialog lock balance.
When sending a NOTIFY, we lock the dialog and then unlock the dialog
when finished. A recent change made it so that the subscription tree's
dialog pointer will be set NULL when sending the final NOTIFY request
out. This means that when we attempt to unlock the dialog, we pass a
NULL pointer to pjsip_dlg_dec_lock(). The result is that the dialog
remains locked after we think we have unlocked it. When a response to
the NOTIFY arrives, the monitor thread attempts to lock the dialog, but
it cannot because we never released the dialog lock. This results in
Asterisk being unable to process incoming SIP traffic any longer.

The fix in this patch is to use a local pointer to save off the pointer
value of the subscription tree's dialog when locking and unlocking the
dialog. This way, if the subscription tree's dialog pointer is NULLed
out, the local pointer will still have point to the proper place and the
dialog lock will be unlocked as we expect.

Change-Id: I7ddb3eaed7276cceb9a65daca701c3d5e728e63a
2015-10-22 16:16:56 -05:00
Mark Michelson ad39508095 res_pjsip_pubsub: Prevent crashes on final NOTIFY.
The SIP dialog is removed from the subscription tree when the final
NOTIFY is sent. However, after the final NOTIFY is sent, the persistence
update function still attempts to access the cseq from the dialog,
resulting in a crash.

This fix removes the subscription persistence at the same time that the
dialog is removed from the subscription tree. This way, there is no
attempt to update persistence when the subscription is being destroyed.

Change-Id: Ibb46977a6cef9c51dc95f40f43446e3d11eed5bb
2015-10-22 16:16:56 -05:00
Mark Michelson 067f408760 res_pjsip_pubsub: Remove serializer when sending final NOTIFY.
There have been crashes seen where a taskprocessor's listener is NULL
unexpectedly.

Looking at backtraces, the problem was specifically seen in PJSIP
serializers.

Subscriptions make the mistake of removing a serializer from a dialog
during subscription tree destruction. Since subscription trees are
reference-counted, guaranteeing the circumstances behind the destruction
are not possible. This makes it so that the dialog serializer can be
removed while not holding the dialog lock. This makes it possible for
the distributor to get a pointer to the dialog serializer and have that
serializer get freed out from under it.

The fix for this is to remove the serializer from a subscription dialog
when sending the final NOTIFY. This guarantees that the serializer is
removed with the dialog lock held. By doing this, we guarantee that if
the distributor gains access to the dialog's serializer, it will not be
possible for the serializer to get freed by another thread.

Change-Id: I21f5dac33529f65cec45679bdace60670800ff66
2015-10-22 16:16:29 -05:00
Mark Michelson 1bcc592765 res_pjsip_pubsub: Fix crash on destruction of empty subscription tree.
If an old persistent subscription is recreated but then immediately
destroyed because it is out of date, the subscription tree will have no
leaf subscriptions on it. This was resulting in a crash when attempting
to destroy the subscription tree.

A simple NULL check fixes this problem.

Change-Id: I85570b9e2bcc7260a3fe0ad85904b2a9bf36d2ac
2015-10-22 15:07:41 -05:00
Mark Michelson b3cc2bd7df res_pjsip_pubsub: Solidify lifetime and ownership of objects.
There have been crashes and general instability seen in the pubsub code,
so this patch introduces three changes to increase the stability.

First, the ownership model for subscriptions has been modified. Due to
RLS, subscriptions are stored in memory as a tree structure. Prior to my
patch, the PJSIP subscription was the owner of the subscription tree.
When the PJSIP subscription told us that it was terminating, we started
destroying the subscription tree along with all of the individual leaf
subscriptions that belong to the tree. The problem with this model is
that the two actors in play here, the PJSIP subscription and the
individual leaf subscriptions, need to have joint ownership of the
subscription tree. So now, the PJSIP subscription and the individual
leaf subscriptions each have a reference to the subscription tree. This
way, we will not actually free memory until no players are left that
care. The PJSIP subscription is a bigger stakeholder, in that if the
PJSIP subscription's reference to the subscription tree is removed, the
subscription tree instructs the leaf subscriptions to shut down and drop
their references to the subscription tree when possible. The individual
leaf subscriptions, upon being told to shut down, can drop their stasis
subscriptions or whatever they use to learn of new state, and then drop
their reference to the subscription tree once they are ready to die.

Second, the lifetime of a PJSIP subscription's reference to our
subscription tree has been altered. As I learned from doing a deep dive,
the PJSIP evsub code can tell Asterisk multiple times that the
subscription has been terminated, and not all of these times
are especially helpful. I have altered the message flow that we use for
SIP subscriptions such that we will always drop the PJSIP subscription's
reference to the subscription tree when we send the NOTIFY that
terminates a SIP subscription. This also means that we will now queue
NOTIFY requests to be sent after responding to incoming SUBSCRIBEs so
that we can have predictable state changes from the PJSIP evsub code.

Third, the synchronization of operations has been improved. PJSIP can
call into our code from a serializer thread (e.g. upon receiving an
incoming request) or from the monitor thread (e.g. when a subscription
times out). Because of this, there is the possibility of competing
threads stepping on each other. PJSIP attempts to do some
synchronization on its own by always keeping the dialog lock held when
it calls into us. However, since we end up pushing tasks into the
serializer, the result was that serialized operations were not grabbing
the dialog lock and could, as a result, step on something that was being
attempted by a different thread. Now we ensure that serialized
operations grab the dialog lock, then check for extenuating
circumstances, then proceed with their operation if they can.

Change-Id: Iff2990c40178dad9cc5f6a5c7f76932ec644b2e5
2015-10-22 15:07:41 -05:00
Richard Mudgett c8c65dfa41 strings.c: Fix __ast_str_helper() to always return a terminated string.
Users of functions which call __ast_str_helper() such as the ones listed
below are likely to not check the return value for failure so ensuring
that the string is always nil terminated is a good safety measure.

ast_str_set_va()
ast_str_append_va()
ast_str_set()
ast_str_append()

Change-Id: I36ab2d14bb6015868b49329dda8639d70fbcae07
2015-10-21 16:48:12 -05:00
Richard Mudgett b271d4a28a Add missing failure checks to ast_str_set_va() callers.
Change-Id: I0c2cdcd53727bdc6634095c61294807255bd278f
2015-10-21 16:48:12 -05:00
Joshua Colp 04030b0dd0 Merge "funcs/func_holdintercept: Actually add the HOLD_INTERCEPT function" into 13 2015-10-21 16:47:03 -05:00
Joshua Colp f2725c8b77 res_pjsip: Move URI validation to use time.
In a realtime based system with a limited number of threadpool threads
it is possible for a deadlock to occur. This happens when permanent
endpoint state is updated, which will cause database queries to be done.
These queries may result in URI validation being done which is done
synchronously using a PJSIP thread. If all PJSIP threads are in use
processing traffic they themselves may be blocked waiting to get the
permanent endpoint container lock when identifying an endpoint.

This change moves URI validation to occur at use time instead of
configuration time. While this comes at a cost of not seeing a problem
until you use it it does solve the underlying deadlock problem.

ASTERISK-25486 #close

Change-Id: I2d7d167af987d23b3e8199e4a68f3359eba4c76a
2015-10-21 14:26:53 -03:00
Alexander Traud 84ff075d41 format: Update the maximum packetization time for iLBC 30.
In September 2006, the maximum packetization time (ptime) were set to such a
low value, packetization was disabled for many codecs actually. This was fixed
for many codecs but not for iLBC 30. This enables packetization for iLBC which
can be enabled for example via allow=ilbc:60,gsm,alaw,ulaw in the file sip.conf.

ASTERISK-7803

Change-Id: I2ef90023d35efb7cb8fe96ed74f53f6846ffad12
2015-10-21 12:11:03 -05:00
Alexander Traud 869ef2a8ee chan_sip: Fix autoframing=yes.
With Asterisk 13, the structures ast_format and ast_codec changed. Because of
that, the paketization timing (framing) of the RTP channel moved away from the
formats/codecs. In the course of that change, the ptime of the callee was not
honored anymore, when the optional autoframing was enabled.

ASTERISK-25484 #close

Change-Id: Ic600ccaa125e705922f89c72212c698215d239b4
2015-10-21 09:54:15 -05:00
Matt Jordan 9fd2adc204 rest-api-templates: Wikify error code response reasons
Error response code descriptions may contain wiki markup that need to be
escaped. Without this patch, Confluence will reject the document being sent
and the responsible script will raise an exception.

Change-Id: I21fcb66fee7f6332381f2b99b1b0195dff215ee5
2015-10-20 22:24:36 -05:00
Matt Jordan 72cbb6df55 funcs/func_holdintercept: Actually add the HOLD_INTERCEPT function
When ab803ec342 was committed, it accidentally forgot to actually *add* the
HOLD_INTERCEPT function. This highlights two interesting points:
* Gerrit forces you to put the patch as it is going to into the repo up for
  review, which Review Board did not. Yay Gerrit.
* No one apparently bothered to use this feature, or else they don't know about
  it. I'm going to go with the latter explanation.

ASTERISK-24922

Change-Id: Ida38278f259dd07c334a36f9b7d5475b5db72396
2015-10-20 19:12:21 -05:00
Joshua Colp 7c560a9a31 Merge "contrib/scripts/autosupport: Update for Asterisk 13" into 13 2015-10-20 11:21:40 -05:00
Matt Jordan 9fc9777fa3 contrib/scripts/autosupport: Update for Asterisk 13
This patch adds some minor tweaks for autosupport to update it for Asterisk 13.
This includes:
* Finally removing most references to Zaptel
* Adding support for some additional 'core' commands, and fixing nomenclature
  that generally hasn't been used for some time
* Adding some PJSIP/SIP commands to gather endpoints/peers and active channels

Change-Id: Ic997b418cbd9313588b6608e50f47b0ce6f4f1f1
2015-10-19 20:15:54 -05:00
Matt Jordan 25ec63ab0c Merge topic 'ASTERISK-25461' into 13
* changes:
  config.c: Fix off-nominal memory leak.
  config.c: Fix potential memory corruption after [section](+).
  config.c: Fix #include after [section](+).
2015-10-16 10:35:59 -05:00
Joshua Colp 5db999d813 Merge "res_config_pgsql.c: Fix deadlock loading realtime configuration." into 13 2015-10-15 14:41:31 -05:00
Joshua Colp ebdfd38511 Merge "Build: Add menuselect options for using compiler sanitizers" into 13 2015-10-15 14:40:51 -05:00
Richard Mudgett dc6ec661b3 res_config_pgsql.c: Fix deadlock loading realtime configuration.
On v13, loading several thousand PJSIP endpoints on Asterisk start causes
a deadlock most of the time.

Thanks to mdu113 for discovering that there was a call to pgsql_exec() not
protected by the pgsql_lock reentrancy lock.

{quote}
I believe a code path exists that attempts to use pgsql connection without
locking pgsql_lock.  I believe what happens during that deadlock that I
see is two concurrent threads are both attempting to send query to pgsql,
one of the thread is using a code path without locking pgsql_lock.  If
they managed to send queries at the same time, it seems postgres ignores
one of the queries and replies only to the one of them.  If it happens so
that the thread holding the lock didn't receive the reply it will wait for
it (and hold the lock) forever (or at least for very long time), thus
completely blocking all access to db.
{quote}

* Added missing reentrancy locking around pgsql_exec() in find_table().

* Moved unlock of pgsql_lock in unload_module() to avoid locking inversion
between the psql_tables list lock and the pgsql_lock.

ASTERISK-25455 #close
Reported by:  mdu113
Patches:
      res_config_pgsql.c-connlock2.diff (license #5543) patch uploaded by mdu113

Change-Id: Id9e7cdf8a3b65ff19964b0cf942ace567938c4e2
2015-10-14 14:18:45 -05:00
Matt Jordan f8707ae9a5 channels/chan_sip: Set cause code to 44 on RTP timeout
To quote Olle:

"When issuing a hangup due to RTP timeouts the cause code is not set. I have
selected 44 based on Cisco's implementation..."

ASTERISK-25135 #close
Reported by: Olle Johansson
patches:
  rtp-timeout-cause-1.8.diff uploaded by Olle Johansson (License 5267)

Change-Id: Ia62100c55077d77901caee0bcae299f8dc7375fc
2015-10-13 14:25:06 -05:00
Ivan Poddubny 486b172b50 Build: Add menuselect options for using compiler sanitizers
This patch adds menuselect options for building Asterisk with
various sanitizers provided by gcc and clang.

When one of *SANITIZER flags is set in menuselect, the appropriate
option is added to CFLAGS ad LDFLAGS for the build.

Information on sanitizers in the project wiki:
https://github.com/google/sanitizers/wiki

GCC Manual:
https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html

Clang Compiler User's Manual:
http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation

ASTERISK-24718 #close
Reported by: Badalian Vyacheslav

Change-Id: Iafa51b792b7bcb20e848b99d16cf362d08590fa0
2015-10-12 13:31:32 -05:00
Richard Mudgett e14023ca35 config.c: Fix off-nominal memory leak.
Change-Id: I06e346e9a5c63cc5071e7eda537310c4b43bffe0
2015-10-12 13:05:14 -05:00
Richard Mudgett a99e821520 config.c: Fix potential memory corruption after [section](+).
The memory corruption could happen if the [section](+) is the last section
in the file with trailing comments.  In this case process_text_line() has
left *last_cat is set to newcat and newcat is destroyed.

Change-Id: I0d1d999f553986f591becd000e7cc6ddfb978d93
2015-10-12 13:04:59 -05:00
Richard Mudgett 8d31d2526b config.c: Fix #include after [section](+).
An #include right after a [section](+) would associate any variable
assignments before a new section in the #include with the wrong section.

* Fix section association by setting the current section to the appended
section.

* Fix '+' and '!' section flag interaction corner case depending upon
which flag came first.  If the '!' came first then it would be ignored.
If the '!' came after then it would affect the appended section.  The '!'
will now no longer be ignored.

ASTERISK-25461 #close
Reported by: Sean Pimental

Change-Id: Ic9d3191c8758048e2cbce6432f854b32531731c3
2015-10-12 13:04:43 -05:00
Joshua Colp 1c799b1f1e Merge "chan_pjsip: Fix crash on reINVITE before initial INVITE completes." into 13 2015-10-08 13:48:14 -05:00
Richard Mudgett 3329c714f7 res_pjsip: Fix deadlock when sending out-of-dialog requests.
The struct send_request_wrapper has a pjsip lock associated with it that
is created non-recursive.  There is a code path for the struct
send_request_wrapper lock that will attempt to lock it recursively.  The
reporter's deadlock showed that the thread calling endpt_send_request()
deadlocked itself right after the wrapper object got created.

Out-of-dialog requests such as MESSAGE, qualify OPTIONS, and unsolicited
MWI NOTIFY messages can hit this deadlock.

* Replaced the struct send_request_wrapper pjsip lock with the mutex lock
that can come with an ao2 object since all of Asterisk's mutexes are
recursive.  Benefits include removal of code maintaining the pjsip
non-recursive lock since ao2 objects already know how to maintain their
own lock and the lock will show up in the CLI "core show locks" output.

ASTERISK-25435 #close
Reported by: Dmitriy Serov

Change-Id: I458e131dd1b9816f9e963f796c54136e9e84322d
2015-10-07 12:07:58 -05:00
StefanEng86 a1435aa3fa res/res_rtp_asterisk.c: Fix incorrect assignment of frame->subclass.frame_ending
In ast_rtp_read, the value of the variable 'mark' which we try to assign to a
frame->subclass.frame_ending may be 0, 1 or (1<<23), but we should translate
it to 0 or 1.

ASTERISK-25451 #close
Change-Id: I53bdf5c026041730184a6a809009c028549ce626
2015-10-07 09:50:58 -05:00
Ivan Poddubny 3357678b94 func_presencestate: Return "not_set" when no data is set in AstDB
Return AST_PRESENCE_NOT_SET when CustomPresence AstDB key does not
exist, i.e. when a new CustomPresence is added in the dialplan.

ASTERISK-25400 #close
Reported by: Andrew Nagy

Change-Id: I6fb17b16591b5a55fbffe96f3994ec26b1b1723a
2015-10-07 01:46:36 -05:00
Matt Jordan b714b2152d res/res_rtp_asterisk: Fix assignment after ao2 decrement
When we decide we will no longer schedule an RTCP write, we remove the
reference to the RTP instance, then assign -1 to the stored scheduler ID
in case something else comes along and wants to see if anything is scheduled.

That scheduler ID is on the RTP instance. After 60a9172d7e was merged to
fix the regression introduced by 3cf0f29310, this improper assignment on a
potentially destroyed object started getting tripped on the build agents.

Frankly, this should have been crashing a lot more often earlier. I can only
assume that the timing was changed just enough by both changes to start
actually hitting this problem.

As it is, simply moving the assignment prior to the ao2 deference is sufficient
to keep the RTP instance from being referenced when it is very, truly,
aboslutely dead.

(Note that it is still good practice to assign -1 to the scheduler ID when we
know we won't be scheduling it again, as the ao2 deref *may* not always destroy
the ao2 object.)

ASTERISK-25449

Change-Id: Ie6d3cb4adc7b1a6c078b1c38c19fc84cf787cda7
2015-10-06 20:51:35 -05:00
Florian Sauerteig f939e2bd48 chan_sip: Fix port parsing for IPv6 addresses in SIP Via headers.
If a Via header containes an IPv6 address and a port number is ommitted,
as it is the standard port, we now leave the port empty and to not set it
to the value after the first colon of the IPv6 address.

ASTERISK-25443 #close

Change-Id: Ie3c2f05471cd006bf04ed15598589c09577b1e70
2015-10-06 16:34:07 -05:00
Richard Mudgett 426263a64d chan_pjsip: Fix crash on reINVITE before initial INVITE completes.
Apparently some endpoints attempt to send a reINVITE before completing the
initial INVITE transaction.  In this case PJSIP responds appropriately to
the reINVITE with a 491 INVITE request pending.  Unfortunately chan_pjsip
is using the initial INVITE transaction state to determine if an INVITE is
the initial INVITE or a reINVITE.  Since the initial INVITE transaction
has not been confirmed yet chan_pjsip thinks the reINVITE is an initial
INVITE and starts another PBX thread on the channel.  The extra PBX thread
ensures that hilarity ensues.

* Fix checks for a reINVITE on incoming requests to look for the presence
of a to-tag instead of the initial INVITE transaction state.

* Made caller_id_incoming_request() determine what to do if there is a
channel on the session or not.  After a channel is created it is too late
to just store the new party id on the session because the session's party
id has already been copied to the channel's caller id.

ASTERISK-25404 #close
Reported by: Chet Stevens

Change-Id: Ie78201c304a2b13226f3a4ce59908beecc2c68be
2015-10-06 16:10:16 -05:00
Matt Jordan 41b0e516e2 Merge "Fix improper usage of scheduler exposed by 5c713fdf18f" into 13 2015-10-06 08:30:02 -05:00
Matt Jordan 50fa9ff997 Fix improper usage of scheduler exposed by 5c713fdf18
When 5c713fdf18 was merged, it allowed for scheduled items to have an ID of
'0' returned. While this was valid per the documentation for the API, it was
apparently never returned previously. As a result, several users of the
scheduler API viewed the result as being invalid, causing them to reschedule
already scheduled items or otherwise fail in interesting ways.

This patch corrects the users such that they view '0' as valid, and a returned
ID of -1 as being invalid.

Note that the failing HEP RTCP tests now pass with this patch. These tests
failed due to a duplicate scheduling of the RTCP transmissions.

ASTERISK-25449 #close

Change-Id: I019a9aa8b6997584f66876331675981ac9e07e39
2015-10-06 07:39:57 -05:00
Debian Amtelco 8f777ab584 chan_pjsip: Add Referred-By header to the PJSIP REFER packet.
Some systems require the REFER packet to include a Referred-By header.
If the channel variable SIPREFERREDBYHDR is set, it passes that value as the
Referred-By header value.  Otherwise, it adds the current dialog’s local info.

Reported by: Dan Cropp
Tested by: Dan Cropp

Change-Id: I3d17912ce548667edf53cb549e88a25475eda245
2015-10-05 19:41:21 -05:00
Ivan Poddubny 74635b5638 manager: Fix GetConfigJSON returning invalid JSON
When GetConfigJSON was introduced back in 1.6, it returned each
section as an array of strings: ["key=value", "key2=value2"].
Afterwards, it was changed a few times and became
["key": "value", "key2": "value2"], which is not a correct JSON.
This patch fixes that by constructing a JSON object {} instead of
an array [].

Also, the keys "istemplate" and "tempates" that are used to
indicate templates and their inherited categories are now wrapped in
quotes.

ASTERISK-25391 #close
Reported by: Bojan Nemčić

Change-Id: Ibbe93c6a227dff14d4a54b0d152341857bcf6ad8
2015-10-03 08:09:21 -05:00
Joshua Colp b39e92f036 Merge "res_sorcery_memory_cache.c: Fix deadlock with scheduler." into 13 2015-10-02 16:28:39 -05:00
Joshua Colp d979834c85 Merge "res_sorcery_memory_cache.c: Replace inline code with function." into 13 2015-10-02 16:28:34 -05:00
Joshua Colp 45a7c9078d Merge "res_sorcery_memory_cache.c: Shutdown in a less crash potential order." into 13 2015-10-02 16:28:28 -05:00
Joshua Colp 17262a8c5c Merge "res_sorcery_memory_cache.c: Misc tweaks." into 13 2015-10-02 16:28:22 -05:00
Joshua Colp fd0186dc85 Merge "res_sorcery_memory_cache.c: Made use OBJ_SEARCH_MASK." into 13 2015-10-02 16:28:15 -05:00
Joshua Colp 64701bdb01 Merge "sched.c: Add warning about negative time interval request." into 13 2015-10-02 16:27:13 -05:00
Richard Mudgett 40c69e78f5 res_sorcery_memory_cache.c: Fix deadlock with scheduler.
A deadlock can happen when a sorcery object is being expired from the
memory cache when at the same time another object is being placed into the
memory cache.  There are a couple other variations on this theme that
could cause the deadlock.  Basically if an object is being expired from
the sorcery memory cache at the same time as another thread tries to
update the next object expiration timer the deadlock can happen.

* Add a deadlock avoidance loop in expire_objects_from_cache() to check if
someone is trying to remove the scheduler callback from the scheduler.

ASTERISK-25441 #close

Change-Id: Iec7b0bdb81a72b39477727b1535b2539ad0cf4dc
2015-10-01 17:25:37 -05:00
Richard Mudgett dfeb513e85 res_sorcery_memory_cache.c: Replace inline code with function.
Make sorcery_memory_cache_close() call remove_all_from_cache() instead of
partially inlining it.

ASTERISK-25441

Change-Id: I1aa6cb425b1a4307096f3f914d17af8ec179a74c
2015-10-01 17:25:37 -05:00
Richard Mudgett ced0a2d71b res_sorcery_memory_cache.c: Shutdown in a less crash potential order.
Basically you should shutdown in the opposite order of how you setup since
later setup pieces likely depend on earlier setup pieces.  e.g.,
Registering your external API with the rest of the system should be the
last thing setup and the first thing unregistered during shutdown.

Change-Id: I5715765b723100c8d3c2642e9e72cc7ad5ad115e
2015-10-01 17:25:37 -05:00
Richard Mudgett cc279eea11 res_sorcery_memory_cache.c: Misc tweaks.
Change-Id: I8cd32dffbb4f33bb0c39518d6e4c991e73573160
2015-10-01 17:25:37 -05:00
Richard Mudgett 9af3b613f6 res_sorcery_memory_cache.c: Made use OBJ_SEARCH_MASK.
Change-Id: Ibca6574dc3c213b29cc93486e01ccd51f5caa46c
2015-10-01 17:25:37 -05:00
Joshua Colp 56ed7b9dd5 res_rtp_asterisk: Move "Set role" warning to be debug.
In practice the set_role API callback can be invoked even
when no ICE is present on an RTP instance. This can occur
if ICE has not been enabled on it.

ASTERISK-25438 #close

Change-Id: I0e17e4316f0f0d7f095c78c3d4fd73a913b6ba69
2015-09-30 13:45:52 -05:00
Richard Mudgett ddebb217f0 sched.c: Add warning about negative time interval request.
Change-Id: Ib91435fb45b7f5f7c0fc83d0eec20b88098707bc
2015-09-30 10:44:32 -05:00
Matt Jordan 30df76b5c8 Merge "res/ari/config.c: Fix user sort compare function." into 13 2015-09-29 15:58:12 -05:00
Matt Jordan e00e3f2030 Merge "res/ari/config.c: Optimize conf_alloc() object init." into 13 2015-09-29 15:58:07 -05:00
Kevin Harwell d30939b6e8 ARI: Changed version from 1.8.0 to 1.9.0
Change-Id: I510991c60d28d171f47c4b58bba4947f7fc71b13
2015-09-29 14:53:58 -05:00
Richard Mudgett 5f19c9bade res/ari/config.c: Fix user sort compare function.
Made use the ao2 sort compare template function and OBJ_SEARCH_xxx
identifiers.

Change-Id: Ic53005dc5aafa7a36c72300dd89b75fb63c92f4c
2015-09-29 12:06:36 -05:00
Richard Mudgett 3a85764039 res/ari/config.c: Optimize conf_alloc() object init.
* Now conf_alloc() has more off nominal error checking.

* Eliminated RAII_VAR() use in conf_alloc().

* Eliminated a dubius shortcut when destroying cfg->general in
conf_destructor() that would cause a crash if cfg->general failed to get
allocated.

* Add some ACO registration section comments.

Change-Id: Ia40c2b1b2d0777d641605118ae019c5a73865e1a
2015-09-29 12:05:38 -05:00
Richard Mudgett 028033e5a8 res/ari/config.c: Fix conf_alloc() object init.
Need to finish initializing the string fields in the ao2 object before
putting any default strings into them.

ASTERISK-25383 #close
Reported by:  yaron nahum

Change-Id: I9f7f3a03f0c4991a01593abf8697b9a587c0ea84
2015-09-29 11:53:16 -05:00
Matt Jordan f6062ac616 Merge "app_queue.c: Force COLP update if outgoing channel name changed." into 13 2015-09-29 07:27:45 -05:00
Matt Jordan 9425eaa96d Merge "app_queue.c: Factor out a connected line update routine." into 13 2015-09-29 07:27:22 -05:00
Matt Jordan 549d726065 Merge "app_dial.c: Make 'A' option pass COLP updates." into 13 2015-09-29 07:26:58 -05:00
Matt Jordan 5efb96520b Merge "app_dial.c: Force COLP update if outgoing channel name changed." into 13 2015-09-29 07:26:08 -05:00
Joshua Colp 771757e338 Merge "translate: Fix transcoding while different in frame size." into 13 2015-09-28 14:12:57 -05:00
Joshua Colp bc856bda64 Merge "app_dial.c: Factor out a connected line update routine." into 13 2015-09-28 14:06:55 -05:00
Matt Jordan 9e7c554089 Merge "res/res_stasis: Fix accidental subscription to 'all' bridge topic" into 13 2015-09-28 08:36:04 -05:00
Joshua Colp 7a5ce4ad5a Merge "app_dial.c: Remove some no-op code." into 13 2015-09-28 06:49:41 -05:00
Matt Jordan 90165e306d res/res_stasis: Fix accidental subscription to 'all' bridge topic
When b99a705262 was merged, subscribing to a
NULL bridge will now cause app_subscribe_bridge to implicitly subscribe to
all bridges. Unfortunately, the res_stasis control loop did not check that
a bridge changing on a channel's control object was actually also non-NULL.
As a result, app_subscribe_bridge will be called with a NULL bridge when a
channel leaves a bridge. This causes a new subscription to be made to the
bridge. If an application has also subscribed to the bridge, the application
will now have two subscriptions:
(1) The explicit one created by the app
(2) The implicit one accidentally created by the control structure

As a result, the 'BridgeDestroyed' event can be sent multiple times. This
patch corrects the control loop such that it only subscribes an application
to a new bridge if the bridge pointer is non-NULL.

ASTERISK-24870

Change-Id: I3510e55f6bc36517c10597ead857b964463c9f4f
2015-09-27 20:51:33 -05:00
Scott Griepentrog e1223ff6db Scripts: check file versions of Asterisk and dependencies
To help in diagnosing mismatched modules and libraries, this
script scans for version, repository, and source information
and reports what is found.

ASTERISK-25376 #close
Reported by: Ashley Sanders

Change-Id: Ib0642d0fb96712476f59760d6d137a24633fe2d6
2015-09-25 15:10:03 -05:00
Richard Mudgett 6b1e7583c1 app_queue.c: Force COLP update if outgoing channel name changed.
* When a call is answered and the outgoing channel name has changed then
force a connected line update because the channel is no longer the same.
The channel was masqueraded into by another channel.  This is usually
because of a call pickup.

Note: Forwarded calls are handled in a controlled manner so the original
channel name is replaced with the forwarded channel.

ASTERISK-25423 #close
Reported by: John Hardin

Change-Id: Ie275ea9e99c092ad369db23e0feb08c44498c172
2015-09-25 12:31:38 -05:00
Richard Mudgett 6bf304bf25 app_queue.c: Factor out a connected line update routine.
Replace inlined code with update_connected_line_from_peer().

ASTERISK-25423
Reported by: John Hardin

Change-Id: I33bbd033596fcb0208d41d8970369b4e87b806f3
2015-09-25 12:31:24 -05:00
Richard Mudgett e36b5f1e8e app_dial.c: Make 'A' option pass COLP updates.
While the 'A' option is playing the announcement file allow the caller and
peer to exchange COLP update frames.

ASTERISK-25423
Reported by: John Hardin

Change-Id: Iac6cf89b56d26452c6bb88e9363622bbf23895f9
2015-09-25 12:31:10 -05:00
Richard Mudgett 747bfac895 app_dial.c: Force COLP update if outgoing channel name changed.
* When a call is answered and the outgoing channel name has changed then
force a connected line update because the channel is no longer the same.
The channel was masqueraded into by another channel.  This is usually
because of a call pickup.

Note: Forwarded calls are handled in a controlled manner so the original
channel name is replaced with the forwarded channel.

ASTERISK-25423
Reported by: John Hardin

Change-Id: I2e01f7a698fbbc8c26344a59c2be40c6cd98b00c
2015-09-25 12:30:53 -05:00
Richard Mudgett 14481d9aa0 app_dial.c: Factor out a connected line update routine.
Replace inlined code with update_connected_line_from_peer().

ASTERISK-25423
Reported by: John Hardin

Change-Id: Ia14f18def417645cd7fb453e1bdac682630a5091
2015-09-25 12:19:58 -05:00
Richard Mudgett bbeda190c3 app_dial.c: Remove some no-op code.
Change-Id: Ice1884a94315d3cb7e3bbd47a9fba76a27276c54
2015-09-25 11:27:54 -05:00
Joshua Colp 41f856e5a2 Merge "logger: Prevent duplicate dynamic channels from being added." into 13 2015-09-25 10:57:34 -05:00
Mark Michelson f050fa76eb logger: Prevent duplicate dynamic channels from being added.
There was a problem observed where the "logger add channel" CLI command
would allow for a channel with the same name to be added multiple times.
This would result in each message being written out to the same file
multiple times.

The problem was due to the difference in how logger channel filenames
are stored versus the format they are allowed to be presented when they
are added. For instance, if adding the logger channel "foo" through the
CLI, the result would be a logger channel with the file name
/var/log/asterisk/foo being stored. So when trying to add another "foo"
channel, "foo" would not match "/var/log/asterisk/foo" so we'd happily
add the duplicate channel.

The fix presented here is to introduce two new methods in the logger
code:
 * make_filename(): given a logger channel name, this creates the
   filename for that logger channel.
 * find_logchannel(): given a logger channel name, this calls
   make_filename() and then traverses the list of logchannels in order
   to find a match.

This change has made use of make_filename() and find_logchannel()
throughout to more consistently behave.

ASTERISK-25305 #close
Reported by Mark Michelson

Change-Id: I892d52954d6007d8bc453c3cbdd9235dec9c4a36
2015-09-24 15:03:18 -05:00
Mark Michelson 629458d349 Do not swallow frames on channels leaving bridges.
When leaving a bridge, indications on a channel could be swallowed by
the internal indication logic because it appears that the channel is on
its way to be hung up anyway. One such situation where this is
detrimental is when channels on hold are redirected out of a bridge. The
AST_CONTROL_UNHOLD indication from the bridging code is swallowed,
leaving the channel in question to still appear to be on hold.

The fix here is to modify the logic inside ast_indicate_data() to not
drop the indication if the channel is simply leaving a bridge. This way,
channels on hold redirected out of a bridge revert to their expected "in
use" state after the redirection.

ASTERISK-25418 #close
Reported by Mark Michelson

Change-Id: If6115204dfa0551c050974ee138fabd15f978949
2015-09-24 14:49:46 -05:00
Matt Jordan 0d95610ae2 Merge "ARI: Add events for Contact and Peer Status changes" into 13 2015-09-23 12:56:08 -05:00
Richard Mudgett 5f15cd93f0 app_page.c: Fix crash when forwarding with a predial handler.
Page uses the async method of dialing with the dial API.  When a call gets
forwarded there is no calling channel available.  If the predial handler
was set then the calling channel could not be put into auto-service
for the forwarded call because it doesn't exist.  A crash is the result.

* Moved the callee predial parameter string processing to before the
string is passed to the dial API rather than having the dial API do it.
There are a few benefits do doing this.  The first is the predial
parameter string processing doesn't need to be done for each channel
called by the dial API.  The second is in async mode and the forwarded
channel is to have the predial handler executed on it then the
non-existent calling channel does not need to be present to process the
predial parameter string.

* Don't start auto-service on a non-existent calling channel to execute
the predial handler when the dial API is in async mode and forwarding a
call.

ASTERISK-25384 #close
Reported by: Chet Stevens

Change-Id: If53892b286d29f6cf955e2545b03dcffa2610981
2015-09-22 17:09:19 -05:00
Matt Jordan b50e372394 ARI: Add events for Contact and Peer Status changes
This patch adds support for receiving events regarding Peer status changes
and Contact status changes. This is particularly useful in scenarios where
we are subscribed to all endpoints and channels, where we often want to know
more about the state of channel technology specific items than a single
endpoint's state.

ASTERISK-24870

Change-Id: I6137459cdc25ce27efc134ad58abf065653da4e9
2015-09-22 15:36:24 -05:00
Matt Jordan 3502c0431d res/res_stasis_device_state: Allow for subscribing to 'all' device state
This patch adds support for subscribing to all device state changes. This is
done either by subscribing to an empty device, e.g., 'eventSource=deviceState:',
or by the WebSocket connection specifying that it wants all state in the
system.

ASTERISK-24870

Change-Id: I9cfeca1c9e2231bd7ea73e45919111d44d2eda32
2015-09-22 13:54:51 -05:00
Matt Jordan 4c9f613309 ARI: Add the ability to subscribe to all events
This patch adds the ability to subscribe to all events. There are two possible
ways to accomplish this:
(1) On initial WebSocket connection. This patch adds a new query parameter,
    'subscribeAll'. If present and True, Asterisk will subscribe the
    applications to all ARI events.
(2) Via the applications resource. When subscribing in this manner, an ARI
    client should merely specify a blank resource name, i.e., 'channels:'
    instead of 'channels:12354'. This will subscribe the application to all
    resources of the 'channels' type.

ASTERISK-24870 #close

Change-Id: I4a943b4db24442cf28bc64b24bfd541249790ad6
2015-09-22 13:27:14 -05:00
Elazar Broad ec514ad64d core/logging: Fix logging to more than one syslog channel
Currently, Asterisk will log to the last configured syslog
channel in logger.conf. This is due to the fact that the
final call to openlog() supersedes all of the previous calls.
This commit removes the call to openlog() and passes the
facility to ast_log_vsyslog(), along with utilizing the
LOG_MAKEPRI macro to ensure that the message is routed to
the correct facility and with the correct priority.

ASTERISK-25407 #close
Reported by: Elazar Broad
Tested by: Elazar Broad

Change-Id: Ie2a2416bc00cce1b04e99ef40917c2011953ddd2
2015-09-22 07:40:57 -05:00
Matt Jordan 0ce661f0c0 Merge "app_record: RECORDED_FILE variable not being populated" into 13 2015-09-22 07:40:20 -05:00
Joshua Colp a45abbf3ce Merge "pbx: Update device and presence state when changing a hint extension." into 13 2015-09-22 05:30:08 -05:00
Kevin Harwell aeddee39fb app_record: RECORDED_FILE variable not being populated
The RECORDED_FILE variable is empty unless a '%d' is specified in the filename.
This patch makes it so the variable is always set to the filename.

ASTERISK-25410 #close

Change-Id: I4ec826d8eb582ae2ad184e717be8668b74d37653
2015-09-21 18:06:15 -05:00
Matt Jordan 960f00939a Merge "main/config_options: Check for existance of internal object before derefing" into 13 2015-09-21 08:08:29 -05:00
Matt Jordan efbd0f5a97 Merge "app_queue: AgentComplete event has wrong reason" into 13 2015-09-19 16:26:27 -05:00
Matt Jordan c7beb33ebb Merge "app_queue: Crash when transferring" into 13 2015-09-19 09:15:33 -05:00
Matt Jordan 16f1598b31 Merge "CHAOS: res_pjsip_diversion avoid crash if allocation fails" into 13 2015-09-19 09:15:17 -05:00
Joshua Colp c02f07b8c4 Merge "chan_sip: Fix From header truncation for extremely long CALLERID(name)." into 13 2015-09-19 08:31:46 -05:00
Joshua Colp 578429a54d Merge "CHAOS: avoid crash if string create fails" into 13 2015-09-19 08:22:51 -05:00
Joshua Colp 2bd27d1222 pbx: Update device and presence state when changing a hint extension.
When changing a hint extension without removing the hint first the
device state and presence state is not updated. This causes the state
of the hint to be that of the previous extension and not the current
one. This state is kept until a state change occurs as a result of
something (presence state change, device state change).

This change updates the hint with the current device and presence
state of the new extension when it is changed. Any state callbacks
which may have been added before the hint extension is changed are
also informed of the new device and presence state if either have
changed.

ASTERISK-25394 #close

Change-Id: If268f1110290e502c73dd289c9e7e7b27bc8432f
2015-09-19 08:20:20 -05:00
Scott Griepentrog c94f46080f CHAOS: avoid crash if string create fails
Validate string buffer allocation before using them.

ASTERISK-25323

Change-Id: Ib9c338bdc1e53fb8b81366f0b39482b83ef56ce0
2015-09-18 13:52:46 -05:00
Walter Doekes b59c4d82b5 chan_sip: Fix From header truncation for extremely long CALLERID(name).
The CALLERID(num) and CALLERID(name) and other info are placed into the
`char from[256]` in initreqprep. If the name was too long, the addr-spec
and params wouldn't fit.

Code is moved around so the addr-spec with params is placed there first,
and then fitting in as much of the display-name as possible.

ASTERISK-25396 #close

Change-Id: I33632baf024f01b6a00f8c7f35c91e5f68c40260
2015-09-18 03:04:41 -05:00
Richard Mudgett 4cc59533b9 CHAOS: res_pjsip_diversion avoid crash if allocation fails
Validate ast_malloc buffer returned before using it in
set_redirecting_value().

ASTERISK-25323

Change-Id: I15d2ed7cb0546818264c0bf251aa40adeae83253
2015-09-17 16:59:18 -05:00
Kevin Harwell 4fb95bbc4e app_queue: AgentComplete event has wrong reason
When a queued caller transfers an agent to another extension sometimes the
raised AgentComplete event has a reason of "caller" and sometimes "transfer".
Since a transfer has taken place this should always be transfer. This occurs
because sometimes the stasis hangup event arrives before the transfer event
thus writing a different reason out.

With this patch, when a hangup event is received during a transfer it will
check to see if the channel that is hanging up is part of a transfer. If so
it will return and let the subsequently received transfer event handler take
care of the cleanup.

ASTERISK-25399 #close

Change-Id: Ic63c49bd9a5ed463ea7a032fd2ea3d63bc81a50d
2015-09-17 16:47:33 -05:00
Scott Griepentrog fb6b5c684b PJSIP: avoid crash when getting rtp peer
Although unlikely, if the tech private is returned as
a NULL, chan_pjsip_get_rtp_peer() would crash.

ASTERISK-25323

Change-Id: Ie231369bfa7da926fb2b9fdaac228261a3152e6a
2015-09-17 13:15:20 -05:00
Joshua Colp a665b31281 Merge "res_pjsip_pubsub: Eliminate race during initial NOTIFY." into 13 2015-09-17 12:16:00 -05:00
Kevin Harwell 6409e7b11a app_queue: Crash when transferring
During some transfer scenarios involving queues Asterisk would sometimes
crash when trying to obtain a channel snapshot (could happen on caller or
member channels). This occurred because the underlying channel had already
disappeared when trying to obtain the latest snapshot.

This patch adds a reference to both the member and caller channels that
extends to the lifetime of the queue'd call, thus making sure the channels
will always exist when retrieving the latest snapshots.

ASTERISK-25185 #close
Reported by: Etienne Lessard

Change-Id: Ic397fa68fb4ff35fbc378e745da9246a7b552128
2015-09-17 11:31:15 -05:00
Mark Michelson fe5077b1f8 res_pjsip_pubsub: Eliminate race during initial NOTIFY.
There is a slim chance of a race condition occurring where two threads
can both attempt to manipulate the same area.

Thread A can be handling an incoming initial SUBSCRIBE request. Thread A
lets the specific subscription handler know that the subscription has
been established.

At this point, Thread B may detect a state change on the subscribed
resource and queue up a notification task on Thread C, the subscription
serializer thread.

Now Thread A attempts to generate the initial NOTIFY request to send to
the subscriber at the same time that Thread C attempts to generate a
state change NOTIFY request to send to the subscriber.

The result is that Threads A and C can step on the same memory area,
resulting in a crash. The crash has been observed as happening when
attempting to allocate more space to hold the body for the NOTIFY.

The solution presented here is to queue the subscription establishment
and initial NOTIFY generation onto the subscription serializer thread
(Thread C in the above scenario). This way, there is no way that a state
change notification can occur before the initial NOTIFY is sent, and if
there is a quick succession of NOTIFYs, we can guarantee that the two
NOTIFY requests will be sent in succession.

Change-Id: I5a89a77b5f2717928c54d6efb9955e5f6f5cf815
2015-09-17 11:03:13 -05:00
Alexander Traud b88c54fa4b translate: Fix transcoding while different in frame size.
When Asterisk translates between codecs, each with a different frame size (for
example between iLBC 30 and Speex-WB), too large frames were created by
ast_trans_frameout. Now, ast_trans_frameout is called with the correct frame
length, creating several frames when necessary. Affects all transcoding modules
which used ast_trans_frameout: GSM, iLBC, LPC10, and Speex.

ASTERISK-25353 #close

Change-Id: I2e229569d73191d66a4e43fef35432db24000212
2015-09-17 10:01:48 -05:00
Mark Michelson 5c713fdf18 scheduler: Use queue for allocating sched IDs.
It has been observed that on long-running busy systems, a scheduler
context can eventually hit INT_MAX for its assigned IDs and end up
overflowing into a very low negative number. When this occurs, this can
result in odd behaviors, because a negative return is interpreted by
callers as being a failure. However, the item actually was successfully
scheduled. The result may be that a freed item remains in the scheduler,
resulting in a crash at some point in the future.

The scheduler can overflow because every time that an item is added to
the scheduler, a counter is bumped and that counter's current value is
assigned as the new item's ID.

This patch introduces a new method for assigning scheduler IDs. Instead
of assigning from a counter, a queue of available IDs is maintained.
When assigning a new ID, an ID is pulled from the queue. When a
scheduler item is released, its ID is pushed back onto the queue. This
way, IDs may be reused when they become available, and the growth of ID
numbers is directly related to concurrent activity within a scheduler
context rather than the uptime of the system.

Change-Id: I532708eef8f669d823457d7fefdad9a6078b99b2
2015-09-15 13:25:44 -05:00
Matt Jordan 4fd0af298e Merge "res/res_pjsip_nat: Ignore REGISTER requests when looking for a Record-Route" into 13 2015-09-11 16:13:49 -05:00
Rodrigo Ramírez Norambuena 865377fc38 chan_sip.c: Validation on module reload
Change validation on reload module because now used the cli function for
reload. The sip_reload() function never fail and ever return NULL for this
reason on reload() now use the call the sip_reload() and return
AST_MODULE_LOAD_SUCCESS.

This problem is dectected on reload by PUT method on ARI, getting always
404 http code when the module is reloaded.

ASTERISK-25325 #close
Reporte by: Rodrigo Ramírez Norambuena

Change-Id: I41215877fb2cfc589e0d4d464000cf6825f4d7fb
2015-09-11 10:47:56 -05:00
Richard Mudgett e75aff53e6 res_pjsip_pubsub.c: Mark ast_sip_create_subscription() as not used.
Change-Id: I2b8db18eac36c01a5c7eb9467699124e203fd093
2015-09-10 13:13:39 -05:00
Richard Mudgett 4d91d01df1 res_pjsip_pubsub.c: Add some notification comments.
Change-Id: Ie62ff1f4b7adc1a12fa0303f53926af249b25e20
2015-09-10 13:13:38 -05:00
Richard Mudgett f36a9d1221 res_pjsip_pubsub.c: Set dlg_status code instead of sending SIP response.
We should not try to send a SIP response message because we may be
restoring a persistent subscription where we are not responding to a SIP
request.

Change-Id: Id89167ef90320c5563f37e632db0dda6cb9e7dec
2015-09-10 13:13:38 -05:00
Richard Mudgett 94582f8fab res_pjsip_pubsub.c: Fix off-nominal memory leak.
Fix off-nominal visited vector leak in build_resource_tree().

Change-Id: If0399c7941c9c0b1038bcfb7b9a371760977831c
2015-09-10 13:13:25 -05:00
Richard Mudgett 8b3ed52239 res_pjsip_pubsub.c: Fix one byte buffer overrun error.
ast_sip_pubsub_register_body_generator() did not account for the null
terminator set by sprintf() in the allocated output buffer.

Change-Id: I388688a132e479bca6ad1c19275eae0070969ae2
2015-09-10 13:10:20 -05:00
Richard Mudgett 4329bd1e4c res_pjsip_pubsub.c: Use ast_alloca() instead of alloca().
Change-Id: Ia396096b4fedc2874649ca11137612c3f55e83e3
2015-09-10 13:10:20 -05:00
Richard Mudgett a456a20ecf res_pjsip_pubsub.c: Add missing error return in load_module().
Change-Id: I15debd0f717f16ee2f78e7f56151c3b3b97b72fc
2015-09-10 13:10:20 -05:00
Richard Mudgett f58f4c6e27 res_pjsip/location.c: Use the builtin ao2_callback() match function instead.
Change-Id: I364906d6d2bad3472929986704a0286b9a2cbe3f
2015-09-10 13:10:20 -05:00
Mark Michelson 9d1f176e29 res_pjsip: Copy default_from_user to avoid crash.
The default_from_user retrieval function was pulling the
default_from_user from the global configuration struct in an unsafe way.
If using a database as a backend configuration store, the global
configuration struct is short-lived, so grabbing a pointer from it
results in referencing freed memory.

The fix here is to copy the default_from_user value out of the global
configuration struct.

Thanks go to John Hardin for discovering this problem and proposing the
patch on which this fix is based.

ASTERISK-25390 #close
Reported by Mark Michelson

Change-Id: I6b96067a495c1259da768f4012d44e03e7c6148c
2015-09-10 09:49:45 -05:00
Matt Jordan 1dd0e220bf res/res_pjsip_nat: Ignore REGISTER requests when looking for a Record-Route
We will only rewrite the Contact header if there is no Record-Route header in
the received request. If a malfunctioning proxy places a Record-Route header
into a REGISTER request, we will decide that we shouldn't update the IP/port
in the Contact header, and we will end up storing a contact with an AoR that
contains the NAT'd IP address.

While it is nice to have the proxy *not* send a Record-Route in a REGISTER
request, it's also a good idea to not process the header in a non-dialog
message. This patch updates the code to explicitly ignore the Record-Route
header in REGISTER requests.

ASTERISK-25387 #close

Change-Id: I4bd3bcccc4003d460cc354d986b0dea2e433ef3f
2015-09-10 08:39:21 -05:00
Joshua Colp 16fa1cbb6c Merge "ParkAndAnnounce: Add variable inheritance" into 13 2015-09-10 07:25:22 -05:00
Matt Jordan 4eedd9ef9d main/config_options: Check for existance of internal object before derefing
Asterisk can load and register an object type while still having an invalid
sorcery mapping. This can cause an issue when a creation call is invoked.
For example, mis-configuring PJSIP's endpoint identifier by IP address mapping
in sorcery.conf will cause the sorcery mechanism to be invalidated; however, a
subsequent ARI invocation to create the object will cause a crash, as the
internal type may not be registered as sorcery expects.

Merely checking for a NULL pointer here solves the issue.

Change-Id: I54079fb94a1440992f4735a9a1bbf1abb1c601ac
2015-09-09 19:22:04 -05:00
Matt Jordan 49b13d5624 Merge "chan_ooh323: Add ProgressIndicator IE with inband info available" into 13 2015-09-09 19:12:05 -05:00
Alexander Anikin 71408df2b8 chan_ooh323: Add ProgressIndicator IE with inband info available
Add ProgressIndicator IE with inband info present to Progress and
Alerting Q.931 message

ASTERISK-25227 #close
Reported by: Alexandr Dranchuk

Change-Id: I326ad13cb1db9a72b3fd902bafed3c28a3684203
2015-09-09 17:07:39 -05:00
Scott Griepentrog f72f9ceefc pjsip: avoid possible crash req_caps allocation failure
Make certain that the pjsip session has not failed to
allocate the format capabilities structure, which can
otherwise cause a crash when referenced.

ASTERISK-25323

Change-Id: I602790ba12714741165e441cc64a3ecde4cb5750
2015-09-09 13:13:23 -05:00
Joshua Colp 34ad877bac Merge "res_pjsip: Use hash for contact object identity instead of Contact URI." into 13 2015-09-09 05:52:54 -05:00
Jonathan Rose fbf720db91 ParkAndAnnounce: Add variable inheritance
In Asterisk 11, the announcer channel would receive channel variables
from the channel being parked by means of normal channel inheritance.
This functionality was lost during the big res_parking project in
Asterisk 12. This patch restores that functionality.

ASTERISK-25369 #close
Review: https://gerrit.asterisk.org/#/c/1180/

Change-Id: Ie47e618330114ad2ea91e2edcef1cb6f341eed6e
2015-09-08 17:21:51 -05:00
Matt Jordan 777f9adfc7 Merge "res_rtp_asterisk: Add more ICE debugging" into 13 2015-09-08 16:33:09 -05:00
David M. Lee 695f26cbb7 res_rtp_asterisk: Add more ICE debugging
In working through a recent ICE negotiation bug, I found the debug
logging in res_rtp_asterisk to be lacking. This patch adds a number of
debug and warning statements that were helpful.

Change-Id: I950c6d8f13a41f14b3d6334b4cafe7d4e997be80
2015-09-08 15:50:16 -05:00
Guido Falsi 4ed9c9a280 Core/General: Add #ifdef needed on FreeBSD.
pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED on FreeBSD
too.

ASTERISK-25310 #close
Reported by: Guido Falsi

Change-Id: Iae6befac9028b5b9795f86986a4a08a1ae6ab7c4
2015-09-08 15:48:16 -05:00
Joshua Colp 9c5a0035d9 Merge "res/res_pjsip: Purge contacts when an AoR is deleted" into 13 2015-09-08 14:03:49 -05:00
Joshua Colp 5469caa9dd res_pjsip: Use hash for contact object identity instead of Contact URI.
In the wild it is possible for Contact URIs to be quite long as
parameters can exist on them. This can present a problem when storing
them in the AstDB as the URI is used as part of the object name and
there is a fixed length limit for the AstDB. This will cause
the contact to not get stored.

This change uses the MD5 hash of the Contact URI as part of the
object name instead. This has a fixed length which is guaranteed
to not exceed the AstDB length limit.

ASTERISK-25295 #close

Change-Id: Ie8252a75331ca00b41b9f308f42cc1fbdf701a02
2015-09-08 09:23:28 -03:00
Alexander Anikin 480c443e26 chan_ooh323: call ast_rtp_instance_stop on ooh323_destroy
Call ast_rtp_instance_stop on ooh323_destroy to free resources
    allocated by rtp instance

    ASTERISK-25299 #close
    Report by: Alexandr Dranchuk

Change-Id: I455096bd7da016b871afe90af86067c2c7c9f33f
2015-09-07 13:47:42 -05:00
Matt Jordan c3e6debdb9 res/res_pjsip: Purge contacts when an AoR is deleted
When an AoR is deleted by an external mechanism, such as through ARI, we
currently do not remove dynamic contacts that were created for that AoR as a
result of a received REGISTER request. As a result, re-creating the AoR will
cause the dynamic contact to be interpreted as a persistent contact, leading
to some rather strange state being created for the contacts/endpoints.

This patch adds a sorcery observer for the 'aor' object. When a delete is
issued on the underlying sorcery object, the observer is called, and all
contacts created and persisted in sorcery for that AoR are also removed. Note
that we don't want to perform this action when an AO2 object that is an AoR is
destroyed, as the AoR can still exist in the backing storage (and we would
thus be removing valid contacts from an AoR that still "exists".)

ASTERISK-25381 #close

Change-Id: I6697e51ef6b2858b5d63401f35dc378bb0f90328
2015-09-07 11:15:59 -05:00
Matt Jordan 24be90c6d7 Merge "endpoint snapshot: avoid second cleanup on alloc failure" into 13 2015-09-05 18:48:31 -05:00
Matt Jordan 319fe8224f Merge "channels/pjsip/dialplan_functions: Add an option for extracting the SIP call-id" into 13 2015-09-05 18:44:04 -05:00
Joshua Colp 6a4d2b2e58 Merge "res_pjsip: Change default from user value." into 13 2015-09-05 15:57:07 -05:00
Joshua Colp 3070dd0660 Merge "Fix when remote candidates exceed PJ_ICE_MAX_CAND" into 13 2015-09-05 15:42:32 -05:00
Matt Jordan 78d0b9d97e channels/pjsip/dialplan_functions: Add an option for extracting the SIP call-id
This patch adds a new option to the CHANNEL function that allows for the
extraction of the SIP call-id. It is used in conjunction with the 'pjsip'
option, and will return the Call-ID of the INVITE request that established
the PJSIP channel.

ASTERISK-25352

Change-Id: I278d1f8bcfe3a53c5aa1dadebc14e92b0abd476a
2015-09-05 15:22:35 -05:00
David M. Lee 61c6c6aa6c Fix when remote candidates exceed PJ_ICE_MAX_CAND
We were passing the wrong count into pj_ice_sess_create_check_list(),
causing the create to fail if we ever received more than PJ_ICE_MAX_CAND
candidates.

Change-Id: I0303d8e1ecb20a8de9fe629a3209d216c4028378
2015-09-04 16:13:43 -05:00
Mark Michelson ac62928d6b res_pjsip: Change default from user value.
When Asterisk sends an outbound SIP request, if there is no direct
reason to place a specific value for the username in the From header,
Asterisk would generate a UUID. For example, this would happen when
sending outbound OPTIONS requests when qualifying or when sending
outbound INVITE requests when originating (if no explicit caller ID were
provided). The issue is that some SIP providers reject these sorts of
requests with a "Name too long" error response.

This patch aims to fix this by changing the default outbound username in
From headers to "asterisk". This value can be overridden by changing the
default_from_user option in the global options if desired.

ASTERISK-25377 #close
Reported by Mark Michelson

Change-Id: I6a4d34a56ff73ff4f661b0075aeba5461b7f3190
2015-09-04 14:40:38 -05:00
Scott Griepentrog 6002472a62 endpoint snapshot: avoid second cleanup on alloc failure
In ast_endpoint_snapshot_create(), a failure to init the
string fields results in two attempts to ao2_cleanup the
same pointer.  Removed RAII_VAR to eliminate problem.

ASTERISK-25375 #close
Reported by: Scott Griepentrog

Change-Id: If4d9dfb1bbe3836b623642ec690b6d49b25e8979
2015-09-04 09:33:33 -05:00
Martin Tomec d32e516c7c res/pjsip: Mark WSS transport as secure
Pjsip is refusing to use unsecure transport with "sips" in url.
WSS should be considered as secure transport.

ASTERISK-24602 #comment Partially fixed by setting WSS as secure

Change-Id: Iddac406c6deba6240c41a603b8859dfefe1a5353
2015-09-04 05:49:07 -05:00
Joshua Colp 2733638d0d Merge "res_pjsip: Fix contact refleak on stateful responses." into 13 2015-09-02 18:14:42 -05:00
Mark Michelson ad9cb6c2ce res_pjsip: Fix contact refleak on stateful responses.
When sending a stateful response, creation of the transaction can fail,
most commonly because we are trying to create a transaction from a
retransmitted request. When creation of the transaction fails, we end up
leaking a reference to a contact that was bumped when the response was
created.

This patch adds the missing deref and fixes the reference leak.

Change-Id: I2f97ad512aeb1b17e87ca29ae0abacb4d6395f07
2015-09-02 17:26:14 -05:00
Joshua Colp cc1363209e pbx: Fix crash when issuing "core show hints" with long pattern match.
When issuing the "core show hints" CLI command a combination of both
the hint extension and context is created. This uses a fixed size
buffer expecting that the extension will not exceed maximum extension
length. When the extension is actually a pattern match this constraint
does not hold true, and the extension may exceed the maximum extension
length. In this case extra characters are written past the end of the
fixed size buffer.

This change makes it so the construction of the combined hint extension
and context can not exceed the size of the buffer.

ASTERISK-25367 #close

Change-Id: Idfa1b95d0d4dc38e675be7c1de8900b3f981f499
2015-09-02 14:41:10 -03:00
Mark Michelson d58c8d73af res_pjsip_pubsub: re-re-fix persistent subscription storage.
A recent change to res_pjsip_pubsub switched to using pjsip_msg_print as
a means of writing an appropriate packet to persistent storage. While
this partially solved the issue, it had its own problems.
pjsip_msg_print will always add a Content-Length header to the message
it prints. Frequent restarts of Asterisk can result in persistent
subscriptions being written with five or more Content-Length headers. In
addition, sometimes some apparent corruption of individual headers could
be seen.

This aims to fix the problem by not running a parsed message through an
interpreter but rather by taking the raw message and saving it. The
logic for what to save is going to be different depending on whether a
SUBSCRIBE was received from the wire or if it was pulled from
persistence. When receiving a packet from the wire, when using a
streaming transport, the rdata->pkt_info.packet may contain multiple SIP
messages or fragments. However, the rdata->msg_info.msg_buf will always
contain the current SIP message to be processed. When pulling from
persistence, though, the rdata->msg_info.msg_buf will be NULL since no
transport actually handled the packet. However, since we know that we
will always ever pull one SIP message from persistence, we are free to
save directly from rdata->pkt_info.packet instead.

ASTERISK-25365 #close
Reported by Mark Michelson

Change-Id: I33153b10d0b4dc8e3801aaaee2f48173b867855b
2015-09-01 09:38:06 -05:00
Joshua Colp 4e3b3f25f6 Merge "Fix deadlock on presence state changes." into 13 2015-08-31 16:11:35 -05:00
Mark Michelson 03fe79f29e Fix deadlock on presence state changes.
A deadlock was observed where three threads were competing for different
locks:

* One thread held the hints lock and was attempting to lock a specific
  hint.
* One thread was holding the specific hint's lock and was attempting to
  lock the contexts lock
* One thread was holding the contexts lock and attempting to lock the
  hints lock.

Clearly the second thread was doing the wrong thing here. The fix for
this is to make sure that the hint's lock is not held on presence state
changes. Something similar is already done (and commented about) for
device state changes.

ASTERISK-25362 #close
Reported by Mark Michelson

Change-Id: I15ec2416b92978a4c0c08273b2d46cb21aff97e2
2015-08-31 15:24:17 -05:00
Matt Jordan 45b06a648b Merge "taskprocessor: Fix race condition between unreferencing and finding." into 13 2015-08-29 12:31:55 -05:00
Matt Jordan 545795ae0d Merge "res_pjsip_sdp_rtp: Fix multiple keepalive scheduled items." into 13 2015-08-29 12:30:50 -05:00
Joshua Colp a676ba2aad taskprocessor: Fix race condition between unreferencing and finding.
When unreferencing a taskprocessor its reference count is checked
to determine if it should be unlinked from the taskprocessors
container and its listener shut down. In between the time when the
reference count is checked and unlinking it is possible for
another thread to jump in, find it, and get a reference to it. If
the thread then uses the taskprocessor it may find that it is not
in the state it expects.

This change locks the taskprocessors container during almost the
entire unreference operation to ensure that any other thread which
may attempt to find the taskprocessor has to wait.

ASTERISK-25295

Change-Id: Icb842db82fe1cf238da55df92e95938a4419377c
2015-08-29 12:36:35 -03:00
Joshua Colp 1b1561f4c8 res_pjsip_sdp_rtp: Fix multiple keepalive scheduled items.
The keepalive support in res_pjsip_sdp_rtp currently assumes
that a stream will only be negotiated once. This is false.
If the stream is replaced and later added back it can be
negotiated again causing multiple keepalive scheduled items
to exist. This change explicitly deletes the existing
keepalive scheduled item before adding the new one.

The res_pjsip_sdp_rtp module also does not stop RTP
keepalives or timeout timer if the stream has been
replaced. This change adds a callback to the session media
interface to allow a media stream to be stopped without
the resources being destroyed. This allows the scheduled
items and RTP to be stopped when the stream no longer
exists.

ASTERISK-25356 #close

Change-Id: Ibe6a7cc0927c87326fd5f1c0d4ad889dbfbea1de
2015-08-28 22:22:45 -03:00
Joshua Colp 85e1cb51b2 sched: ast_sched_del may return prematurely due to spurious wakeup
When deleting a scheduled item if the item in question is currently
executing the ast_sched_del function waits until it has completed.
This is accomplished using ast_cond_wait. Unfortunately the
ast_cond_wait function can suffer from spurious wakeups so the
predicate needs to be checked after it returns to make sure it has
really woken up as a result of being signaled.

This change adds a loop around the ast_cond_wait to make sure that
it only exits when the executing task has really completed.

ASTERISK-25355 #close

Change-Id: I51198270eb0b637c956c61aa409f46283432be61
2015-08-28 21:57:14 -03:00
Mark Michelson b5801fe42c Merge "res_pjsip_session: Don't invoke session supplements twice for BYE requests." into 13 2015-08-28 12:29:26 -05:00
Joshua Colp c2df44ad3e Merge "res_pjsip: Add common ast_sip_get_host_ip API." into 13 2015-08-27 15:41:59 -05:00
Mark Michelson fdf096fff1 Merge "Chaos: make hangup NULL tolerant" into 13 2015-08-27 14:53:42 -05:00
Joshua Colp c2c7319082 res_pjsip_session: Don't invoke session supplements twice for BYE requests.
When a BYE request is received the PJSIP invite session implementation
creates and sends a 200 OK response before we are aware of it. This
causes the INVITE session state callback to be called into and ultimately
the session supplements run on the BYE request. Once this response has
been sent the normal transaction state callback is invoked which
invokes the session supplements on the BYE request again. This can
be problematic in particular with res_pjsip_rfc3326 as it may
attempt to update the hangup cause code on the channel while it is
in the process of being hung up.

This change makes it so the session supplements are only invoked
once by the INVITE session state callback.

ASTERISK-25318 #close

Change-Id: I69c17df55ccbb61ef779ac38cc8c6b411376c19a
2015-08-27 14:30:19 -03:00
Scott Griepentrog 6862c2a167 Chaos: handle failed allocation in get_media_encryption_type
If the ast_strndup() call fails to allocate a copy of the
transport string for parsing, fail gracefully.

ASTERISK-25323
Reported by: Scott Griepentrog

Change-Id: Ia4b905ce6d03da53fea526224455c1044b1a5a28
2015-08-26 15:32:28 -05:00
Scott Griepentrog f1cd636658 Chaos: make hangup NULL tolerant
In chan_pjsip_new, if allocation of the pvt
structure fails, ast_hangup is called.  But
it was written to assume pvt was valid, and
this change corrects that.

ASTERISK-25323
Reported by: Scott Griepentrog

Change-Id: I5f47860fe9cee4cd56abd3f79b108678ab72cc87
2015-08-26 15:19:20 -05:00
Joshua Colp c01111223f chan_sip: Allow call pickup to set the hangup cause.
The call pickup implementation in chan_sip currently sets the channel
hangup cause to "normal clearing" if call pickup is successfully
performed. This action overwrites the "answered elsewhere" hangup cause
set by the call pickup code and can result in the SIP device in
question showing a missed call when it should not.

This change sets the hangup cause to "normal clearing" as a
default initially but allows the call pickup to change it as
needed.

ASTERISK-25346 #close

Change-Id: I00ac2c269cee9e29586ee2c65e83c70e52a02cff
2015-08-26 06:09:27 -05:00
Joshua Colp 2a4eee0cd9 res_pjsip: Add common ast_sip_get_host_ip API.
Modules commonly used the pj_gethostip function for retrieving the
IP address of the host. This function does not cache the result and may
result in a DNS lookup occurring, or additional work. If the DNS
server is unreachable or network issues arise this can cause the
pj_gethostip function to block for a period of time.

This change adds an ast_sip_get_host_ip and ast_sip_get_host_ip_string
function which does the same thing but caches the host IP address at
module load time. This results in no additional work being done each
time the local host IP address is needed.

ASTERISK-25342 #close

Change-Id: I3205deb679b01fa5ac05a94b623bfd620a2abe1e
2015-08-25 13:54:26 -03:00
Mark Michelson d238cf33a9 Merge "res_pjsip_pubsub: On recreated notify fail deleted sub_tree is referenced" into 13 2015-08-24 17:16:25 -05:00
Mark Michelson d0f911f326 Merge "bridge: Kick channel from bridge if hung up during action." into 13 2015-08-24 17:11:56 -05:00
Joshua Colp 5f781cb799 Merge "res_pjsip/pjsip_configuration: Disregard empty auth values" into 13 2015-08-24 13:59:25 -05:00
Joshua Colp 7c4d0c3506 res_pjsip_pubsub: On recreated notify fail deleted sub_tree is referenced
When recreating a subscription it is possible for a freed sub_tree
to be referenced when the initial NOTIFY fails to be created.

Change-Id: I681c215309aad01b21d611c2de47b3b0a6022788
2015-08-24 13:06:09 -03:00
Joshua Colp 6c2dab1e88 bridge: Kick channel from bridge if hung up during action.
When executing an action in a bridge it is possible for the
channel to be hung up without the bridge becoming aware of it.
This is most easily reproducible by hanging up when the bridge
is streaming DTMF due to a feature timeout. This change makes
it so after action execution the channel is checked to determine
if it has been hung up and if it has it is kicked from the bridge.

ASTERISK-25341 #close

Change-Id: I6dd8b0c3f5888da1c57afed9e8a802ae0a053062
2015-08-24 08:21:37 -03:00
Matt Jordan bc6fe07f5c res_pjsip/pjsip_configuration: Disregard empty auth values
When an endpoint is backed by a non-static conf file backend (such as
the AstDB or Realtime), the 'auth' object may be returned as being an
empty string. Currently, res_pjsip will interpret that as being a valid
auth object, and will attempt to authenticate inbound requests. This
isn't desired; is an auth value is empty (which the name of an auth
object cannot be), we should instead interpret that as being an invalid
auth object and skip it.

ASTERISK-25339 #close

Change-Id: Ic32b0c6eb5575107d5164a8c40099e687cd722c7
2015-08-23 18:41:55 -05:00
Joshua Colp e0cf42f61e Merge topic 'ASTERISK-25215' into 13
* changes:
  app_queue.c: Extract some functions for simpler code.
  app_queue.c: Fix error checking in QUEUE_MEMBER() read.
2015-08-20 11:33:52 -05:00
Mark Michelson 53c3dab8ed Merge "contrib: script install_prereq should install sqlite3" into 13 2015-08-19 16:56:22 -05:00
Richard Mudgett 0582776f7f ari/ari_websockets.c: Fix ast_debug parameter type mismatch.
This is a type mismatch fix of the debugging commit
c63316eec1 made to find out why
a testsuite test was failing only on one of the continuous
integration build agents.

Change-Id: Iba34f6e87cec331f6ac80e4daff6476ea6f00a75
2015-08-19 12:19:18 -05:00
Scott Griepentrog 504213f542 contrib: script install_prereq should install sqlite3
Asterisk needs the sqlite 3 library, which is package
sqlite-devel in CentOS. By adding this package to the
script, a problem with configure failing is resolved.

ASTERISK-25331 #close
Reported by: Kevin Harwell

Change-Id: I90efaf6a01914fea03f21e5cdbd91c348f44b0ec
2015-08-19 10:35:31 -05:00
Matt Jordan 94d93e4d40 Merge "res_ari.c: Add missing off nominal unlock and remove a RAII_VAR()." into 13 2015-08-19 08:42:19 -05:00
Matt Jordan 1a5e087ecf Merge "res_http_websocket.c: Fix some off nominal path cleanup." into 13 2015-08-19 08:43:01 -05:00
Richard Mudgett 77518d5434 res_http_websocket.c: Fix some off nominal path cleanup.
* Remove extraneous unlock on off-nominal path.
* Add missing HTTP error reply.

Change-Id: I1f402bfe448fba8696b507477cab5f060ccd9b2b
2015-08-18 16:49:48 -05:00
Richard Mudgett c61547fee6 res_ari.c: Add missing off nominal unlock and remove a RAII_VAR().
Change-Id: I0c5e7b34057f26dadb39489c4dac3015c52f5dbf
2015-08-18 16:49:25 -05:00
Richard Mudgett bd867cd078 app_queue.c: Extract some functions for simpler code.
* Extract set_queue_member_pause() from set_member_paused() for simpler
and more consistent code.

* Extract set_queue_member_ringinuse() from
set_member_ringinuse_help_members() for simpler code.

Change-Id: Iecc1f4119c63347341d7ea6b65f5fc4963706306
2015-08-18 15:25:21 -05:00
Richard Mudgett e5f5b9f384 app_queue.c: Fix setting QUEUE_MEMBER 'paused' and 'ringinuse'.
Setting the 'paused' and 'ringinuse' options on a queue member using the
dialplan function QUEUE_MEMBER did not behave the same way as the
equivalent dialplan applications or AMI actions.

* Made queue_function_mem_write() call the set_member_paused() and
set_member_value() for the 'paused' and 'ringinuse' options respectively.
A beneficial side effect is that the queue name is now optional and sets
the value in all queues the interface is a member.

* Update QUEUE_MEMBER XML documentation.

* Fix error checking in QUEUE_MEMBER() write.

ASTERISK-25215 #close
Reported by: Lorne Gaetz

Change-Id: I3a016be8dc94d63a9cc155295ff9c9afa5f707cb
2015-08-18 15:25:21 -05:00
Richard Mudgett ded51e3d77 app_queue.c: Fix error checking in QUEUE_MEMBER() read.
Change-Id: I7294e13d27875851c2f4ef6818adba507509d224
2015-08-18 15:25:21 -05:00
Scott Griepentrog ab373f2cef CHAOS: prevent sorcery object with null id
When allocating a sorcery object, fail if the
id value was not allocated.

ASTERISK-25323
Reported by: Scott Griepentrog

Change-Id: I152133fb7545a4efcf7a0080ada77332d038669e
2015-08-17 11:05:26 -05:00
Mark Michelson b719f56c72 res_pjsip_sdp_rtp: Restore removed NULL check.
When sending an RTP keepalive, we need to be sure we're not dealing with
a NULL RTP instance. There had been a NULL check, but the commit that
added the rtp_timeout and rtp_hold_timeout options removed the NULL
check.

Change-Id: I2d7dcd5022697cfc6bf3d9e19245419078e79b64
2015-08-14 15:46:05 -05:00
Richard Mudgett cea5dc7b8a audiohook.c: Simplify variable usage in audiohook_read_frame_both().
Change-Id: I58bed58631a94295b267991c5b61a3a93c167f0c
2015-08-13 17:55:56 -05:00
Richard Mudgett b3a56bee83 audiohook.c: Fix MixMonitor crash when using the r() or t() options.
The built frame format in audiohook_read_frame_both() is now set to a
signed linear format before the rx and tx frames are duplicated instead of
only for the mixed audio frame duplication.

ASTERISK-25322 #close
Reported by Sean Pimental

Change-Id: I86f85b5c48c49e4e2d3b770797b9d484250a1538
2015-08-13 17:55:56 -05:00
Mark Michelson 8f3117ebaf Merge "chan_sip.c: wrong peer searched in sip_report_security_event" into 13 2015-08-13 16:12:23 -05:00
Kevin Harwell 25af2d71c8 chan_sip.c: wrong peer searched in sip_report_security_event
In chan_sip, after handling an incoming invite a security event is raised
describing authorization (success, failure, etc...). However, it was doing
a lookup of the peer by extension. This is fine for register messages, but
in the case of an invite it may search and find the wrong peer, or a non
existent one (for instance, in the case of call pickup). Also, if the peers
are configured through realtime this may cause an unnecessary database lookup
when caching is enabled.

This patch makes it so that sip_report_security_event searches by IP address
when looking for a peer instead of by extension after an invite is processed.

ASTERISK-25320 #close

Change-Id: I9b3f11549efb475b6561c64f0e6da1a481d98bc4
2015-08-13 15:01:30 -05:00
Joshua Colp e18c300550 res_http_websocket: When shutting down a session don't close closed socket
Due to the use of ast_websocket_close in session termination it is
possible for the underlying socket to already be closed when the
session is terminated. This occurs when the close frame is attempted
to be written out but fails.

Change-Id: I7572583529a42a7dc911ea77a974d8307d5c0c8b
2015-08-13 05:36:24 -05:00
Joshua Colp 0bc6fe6f7d Merge "res_http_websocket: Forcefully terminate on write errors." into 13 2015-08-12 13:42:59 -05:00
Mark Michelson d37488c7c3 Merge topic 'ASTERISK-25315' into 13
* changes:
  chan_dahdi.c: Flush the DAHDI write buffer after starting DTMF.
  chan_dahdi.c: Lock private struct for ast_write().
2015-08-12 13:37:39 -05:00
Joshua Colp f8df3589cd Merge "chan_sip: Fix negotiation of iLBC 30." into 13 2015-08-12 13:36:01 -05:00
Joshua Colp b4e9416138 res_http_websocket: Forcefully terminate on write errors.
The res_http_websocket module will currently attempt to close
the WebSocket connection if fatal cases occur, such as when
attempting to write out data and being unable to. When the
fatal cases occur the code attempts to write a WebSocket close
frame out to have the remote side close the connection. If
writing this fails then the connection is not terminated.

This change forcefully terminates the connection if the
WebSocket is to be closed but is unable to send the close frame.

ASTERISK-25312 #close

Change-Id: I10973086671cc192a76424060d9ec8e688602845
2015-08-12 06:49:59 -03:00
Richard Mudgett 256bc52b66 chan_dahdi.c: Flush the DAHDI write buffer after starting DTMF.
Pressing DTMF digits on a phone to go out on a DAHDI channel can result in
the digit not being recognized or even heard by the peer.

Phone -> Asterisk -> DAHDI/channel

Turns out the DAHDI behavior with DTMF generation (and any other generated
tones) is exposed by the "buffers=" setting in chan_dahdi.conf.  When
Asterisk requests to start sending DTMF then DAHDI waits until its write
buffer is empty before generating any samples for the DTMF tones.  When
Asterisk subsequently requests DAHDI to stop sending DTMF then DAHDI
immediately stops generating the DTMF samples.  As a result, the more
samples there are in the DAHDI write buffer the shorter the time DTMF
actually gets sent on the wire.  If there are more samples in the write
buffer than the time DTMF is supposed to be sent then no DTMF gets sent on
the wire.  With the "buffers=12,half" setting and each buffer representing
20 ms of samples then the DAHDI write buffer is going to contain around
120 ms of samples.  For DTMF to be recognized by the peer the actual sent
DTMF duration needs to be a minimum of 40 ms.  Therefore, the intended
duration needs to be a minimum of 160 ms for the peer to receive the
minimum DTMF digit duration to recognize it.

A simple and effective solution to work around the DAHDI behavior is for
Asterisk to flush the DAHDI write buffer when sending DTMF so the full
duration of DTMF is actually sent on the wire.  When someone is going to
send DTMF they are not likely to be talking before sending the tones so
the flushed write samples are expected to just contain silence.

* Made dahdi_digit_begin() flush the DAHDI write buffer after requesting
to send a DTMF digit.

ASTERISK-25315 #close
Reported by John Hardin

Change-Id: Ib56262c708cb7858082156bfc70ebd0a220efa6a
2015-08-11 13:51:42 -05:00
Richard Mudgett 800e0ea48d chan_dahdi.c: Lock private struct for ast_write().
There is a window of opportunity for DTMF to not go out if an audio frame
is in the process of being written to DAHDI while another thread starts
sending DTMF.  The thread sending the audio frame could be past the
currently dialing check before being preempted by another thread starting
a DTMF generation request.  When the thread sending the audio frame
resumes it will then cause DAHDI to stop the DTMF tone generation.  The
result is no DTMF goes out.

* Made dahdi_write() lock the private struct before writing to the DAHDI
file descriptor.

ASTERISK-25315
Reported by John Hardin

Change-Id: Ib4e0264cf63305ed5da701188447668e72ec9abb
2015-08-11 13:50:18 -05:00
Richard Mudgett c126afe18f res_pjsip.c: Fix crash from corrupt saved SUBSCRIBE message.
If the saved SUBSCRIBE message is not parseable for whatever reason then
Asterisk could crash when libpjsip tries to parse the message and adds an
error message to the parse error list.

* Made ast_sip_create_rdata() initialize the parse error rdata list.  The
list is checked after parsing to see that it remains empty for the
function to return successful.

ASTERISK-25306
Reported by Mark Michelson

Change-Id: Ie0677f69f707503b1a37df18723bd59418085256
2015-08-11 13:49:25 -05:00
Matt Jordan 47d9ff1741 Merge "res/res_format_attr_silk: Expose format attributes to other modules" into 13 2015-08-11 11:59:44 -05:00
Matt Jordan 532476738d Merge "main/format: Add an API call for retrieving format attributes" into 13 2015-08-11 11:59:39 -05:00
Alexander Traud f68c995bc9 chan_sip: Fix negotiation of iLBC 30.
iLBC 20 was advertised in a SIP/SDP negotiation. However, only iLBC 30 is
supported. Removes "a=fmtp:x mode=y" from SDP. Because of RFC 3952 section 5,
only iLBC 30 is negotiated now.

ASTERISK-25309 #close

Change-Id: I92d724600a183eec3114da0ac607b994b1a793da
2015-08-11 08:49:49 -05:00
Joshua Colp c57b78d4c9 Merge "Replace htobe64 with htonll" into 13 2015-08-10 11:39:05 -05:00
Joshua Colp f733bc10b1 Merge "res_pjsip_pubsub: More accurately persist packet." into 13 2015-08-10 09:03:18 -05:00
Matt Jordan 8e194047ac res/res_format_attr_silk: Expose format attributes to other modules
This patch adds the .get callback to the format attribute module, such
that the Asterisk core or other third party modules can query for the
negotiated format attributes.

Change-Id: Ia24f55cf9b661d651ce89b4f4b023d921380f19c
2015-08-09 18:42:00 -05:00
Matt Jordan a0f451c35e main/format: Add an API call for retrieving format attributes
Some codecs that may be a third party library to Asterisk need to have
knowledge of the format attributes that were negotiated. Unfortunately,
when the great format migration of Asterisk 13 occurred, that ability
was lost.

This patch adds an API call, ast_format_attribute_get, to the core
format API, along with updates to the unit test to check the new API
call. A new callback is also now available for format attribute modules,
such that they can provide the format attribute values they manage.

Note that the API returns a void *. This is done as the format attribute
modules themselves may store format attributes in any particular manner
they like. Care should be taken by consumers of the API to check the
return value before casting and dereferencing. Consumers will obviously
need to have a priori knowledge of the type of the format attribute as
well.

Change-Id: Ieec76883dfb46ecd7aff3dc81a52c81f4dc1b9e3
2015-08-09 17:56:48 -05:00
Matt Jordan c3bd7fb835 Merge "rtp_engine.c: Fix performance issue with several channel drivers that use RTP." into 13 2015-08-08 08:07:18 -05:00
David M. Lee 26f0559a94 Replace htobe64 with htonll
We don't have a compatability function to fill in a missing htobe64; but
we already have one for the identical htonll.

Change-Id: Ic0a95db1c5b0041e14e6b127432fb533b97e4cac
2015-08-07 23:40:48 -05:00
Scott Emidy df9ce36366 ARI: Retrieve existing log channels
An http request can be sent to get the existing Asterisk logs.

The command "curl -v -u user:pass -X GET 'http://localhost:8088
/ari/asterisk/logging'" can be run in the terminal to access the
newly implemented functionality.

* Retrieve all existing log channels

ASTERISK-25252

Change-Id: I7bb08b93e3b938c991f3f56cc5d188654768a808
2015-08-07 14:55:53 -05:00
Scott Emidy e9f1bc08cb ARI: Creating log channels
An http request can be sent to create a log channel
in Asterisk.

The command "curl -v -u user:pass -X POST
'http://localhost:088/ari/asterisk/logging/mylog?
configuration=notice,warning'" can be run in the terminal
to access the newly implemented functionality for ARI.

* Ability to create log channels using ARI

ASTERISK-25252

Change-Id: I9a20e5c75716dfbb6b62fd3474faf55be20bd782
2015-08-07 11:15:08 -05:00
Joshua Colp cf27200391 Merge "ARI: Deleting log channels" into 13 2015-08-07 10:41:22 -05:00
Joshua Colp 4b1bd40d7e Merge "res_pjsip: Ensure sanitized XML is NULL terminated." into 13 2015-08-07 10:23:40 -05:00
Scott Emidy 78364132ce ARI: Deleting log channels
An http request can be sent to delete a log channel
in Asterisk.

The command "curl -v -u user:pass -X DELETE 'http://localhost:8088
/ari/asterisk/logging/mylog'" can be run in the terminal
to access the newly implemented functionally for ARI.

* Able to delete log channels using ARI

ASTERISK-25252

Change-Id: Id6eeb54ebcc511595f0418d586ff55914bc3aae6
2015-08-06 17:41:11 -05:00
Mark Michelson e25569ef95 res_pjsip_pubsub: More accurately persist packet.
The pjsip_rx_data structure has a pkt_info.packet field on it that is
the packet that was read from the transport. For datagram transports,
the packet read from the transport will correspond to the SIP message
that arrived. For streamed transports, however, it is possible to read
multiple SIP messages in one packet.

In a recent case, Asterisk crashed on a system where TCP was being used.
This is because at some point, a read from the TCP socket resulted in a
200 OK response as well as an incoming SUBSCRIBE request being stored in
rdata->pkt_info.packet. When the SUBSCRIBE was processed, the
combination 200 OK and SUBSCRIBE was saved in persistent storage. Later,
a restart of Asterisk resulted in the crash because the persistent
subscription recreation code ended up building the 200 OK response
instead of a SUBSCRIBE request, and we attempted to access
request-specific data.

The fix here is to use the pjsip_msg_print() function in order to
persist SUBSCRIBE requests. This way, rather than using the raw socket
data, we use the parsed SIP message that PJSIP has given us. If we
receive multiple SIP messages from a single read, we will be sure only
to save off the relevant SIP message. There also is a safeguard put in
place to make sure that if we do end up reconstructing a SIP response,
it will not cause a crash.

ASTERISK-25306 #close
Reported by Mark Michelson

Change-Id: I4bf16f7b76a2541d10b55de82bcd14c6e542afb2
2015-08-06 13:13:29 -05:00
Joshua Colp 9182c9e4e6 Merge "res_rtp_asterisk.c: Fix off-nominal crash potential." into 13 2015-08-06 12:05:07 -05:00
Joshua Colp ba40b07ddc Merge topic 'misc_rtp_tweaks' into 13
* changes:
  rtp_engine.c: Must protect mime_types_len with mime_types_lock.
  res_pjsip_sdp_rtp.c: Fixup some whitespace.
2015-08-06 11:50:25 -05:00
Joshua Colp 8521a86367 res_pjsip: Ensure sanitized XML is NULL terminated.
The ast_sip_sanitize_xml function is used to sanitize
a string for placement into XML. This is done by examining
an input string and then appending values to an output
buffer. The function used by its implementation, strncat,
has specific behavior that was not taken into account.
If the size of the input string exceeded the available
output buffer size it was possible for the sanitization
function to write past the output buffer itself causing
a crash. The crash would either occur because it was
writing into memory it shouldn't be or because the resulting
string was not NULL terminated.

This change keeps count of how much remaining space is
available in the output buffer for text and only allows
strncat to use that amount.

Since this was exposed by the res_pjsip_pidf_digium_body_supplement
module attempting to send a large message the maximum allowed
message size has also been increased in it.

A unit test has also been added which confirms that the
ast_sip_sanitize_xml function is providing NULL terminated
output even when the input length exceeds the output
buffer size.

ASTERISK-25304 #close

Change-Id: I743dd9809d3e13d722df1b0509dfe34621398302
2015-08-06 07:03:28 -03:00
Joshua Colp c07fa843ec Merge "res_pjsip_sdp_rtp.c: Fix processing wrong SDP media list." into 13 2015-08-06 04:52:31 -05:00
Mark Michelson 56d11d4198 Merge "res_rtp_asterisk: Don't leak temporary key when enabling PFS." into 13 2015-08-05 12:45:09 -05:00
Joshua Colp 9a12804e59 res_rtp_asterisk: Don't leak temporary key when enabling PFS.
A change recently went in which enabled perfect forward secrecy for
DTLS in res_rtp_asterisk. This was accomplished two different ways
depending on the availability of a feature in OpenSSL. The fallback
method created a temporary instance of a key but did not free it.
This change fixes that.

ASTERISK-25265

Change-Id: Iadc031b67a91410bbefb17ffb4218d615d051396
2015-08-05 10:25:45 -05:00
Mark Michelson 27dc2094e9 res_http_websocket: Debug write lengths.
Commit 39cc28f6ea attempted to fix a
test failure observed on 32 bit test agents by ensuring that a cast from
a 32 bit unsigned integer to a 64 bit unsigned integer was happening in
a predictable place. As it turns out, this did not cause test runs to
succeed.

This commit adds several redundant debug messages that print the payload
lengths of websocket frames. The idea here is that this commit will not
cause tests to succeed for the faulty test agent, but we might deduce
where the fault lies more easily this way by observing at what point the
expected value (537) changes to some ungangly huge number.

If you are wondering why something like this is being committed to the
branch, keep in mind that in commit
39cc28f6ea I noted that the observed test
failures only happen when automated tests are run. Attempts to run the
tests by hand manually on the test agent result in the tests passing.

Change-Id: I14a65c19d8af40dadcdbd52348de3b0016e1ae8d
2015-08-04 09:47:34 -05:00
Matt Jordan 1aa23a5d1b Merge "res_http_websocket: Avoid passing strlen() to ast_websocket_write()." into 13 2015-08-03 11:51:56 -05:00
Mark Michelson 39cc28f6ea res_http_websocket: Avoid passing strlen() to ast_websocket_write().
We have seen a rash of test failures on a 32-bit build agent. Commit
48698a5e21 solved an obvious problem where
we were not encoding a 64-bit value correctly over the wire. This
commit, however, did not solve the test failures.

In the failing tests, ARI is attempting to send a 537 byte text frame
over a websocket. When sending a frame this small, 16 bits are all that
is required in order to encode the payload length on the websocket
frame. However, ast_websocket_write() thinks that the payload length is
greater than 65535 and therefore writes out a 64 bit payload length.
Inspecting this payload length, the lower 32 bits are exactly what we
would expect it to be, 537 in hex. The upper 32 bits, are junk values
that are not expected to be there.

In the failure, we are passing the result of strlen() to a function that
expects a uint64_t parameter to be passed in. strlen() returns a size_t,
which on this 32-bit machine is 32 bits wide. Normally, passing a 32-bit
unsigned value to somewhere where a 64-bit unsigned value is expected
would cause no problems. In fact, in manual runs of failing tests, this
works just fine. However, ast_websocket_write() uses the Asterisk
optional API, which means that rather than a simple function call, there
are a series of macros that are used for its declaration and
implementation. These macros may be causing some sort of error to occur
when converting from a 32 bit quantity to a 64 bit quantity.

This commit changes the logic by making existing ast_websocket_write()
calls use ast_websocket_write_string() instead. Within
ast_websocket_write_string(), the 64-bit converted strlen is saved in a
local variable, and that variable is passed to ast_websocket_write()
instead.

Note that this commit message is full of speculation rather than
certainty. This is because the observed test failures, while always
present in automated test runs, never occur when tests are manually
attempted on the same test agent. The idea behind this commit is to fix
a theoretical issue by performing changes that should, at the least,
cause no harm. If it turns out that this change does not fix the failing
tests, then this commit should be reverted.

Change-Id: I4458dd87d785ca322b89c152b223a540a3d23e67
2015-08-03 11:06:07 -05:00
Mark Duncan aed068844c res/res_rtp_asterisk: Add ECDH support
This will add ECDH support to Asterisk. It will
detect auto ECDH support in OpenSSL
(1.0.2b and above) during ./configure. If this is
available, it will use it,
otherwise it will fall back to prime256v1 (this
behavior is consistent with
other projects such as Apache and nginx).

This fixes WebRTC being broken in Firefox 38+ due
to Firefox now only supporting
ciphers with perfect forward secrecy.

ASTERISK-25265 #close

Change-Id: I8c13b33a2a79c0bde2e69e4ba6afa5ab9351465b
2015-08-03 09:58:02 -05:00
Joshua Colp 20ee33e22e Merge topic 'misc_rtp_tweaks' into 13
* changes:
  rtp_engine.h: No sense allowing payload types larger than RFC allows.
  rtp_engine.c: Minor tweaks.
  rtp_engine.h: Misc comment fixes.
  chan_sip.c: Tweak glue->update_peer() parameter nil value.
2015-08-03 08:43:50 -05:00
Mark Michelson e28fbebc57 Merge "ARI: Rotate log channels." into 13 2015-07-31 11:57:39 -05:00
Benjamin Ford 1ae762634c ARI: Rotate log channels.
An http request can be sent to rotate a specified log channel.
If the channel does not exist, an error response will be
returned.

The command "curl -v -u user:pass -X PUT 'http://localhost:8088
/ari/asterisk/logging/logChannelName/rotate'" can be run in the
terminal to access this new functionality.

* Added the ability to rotate log files through ARI

ASTERISK-25252

Change-Id: Iaefa21cbbc1b29effb33004ee3d89c977e76ab01
2015-07-31 11:43:47 -05:00
Richard Mudgett aeeb170fc4 rtp_engine.c: Fix performance issue with several channel drivers that use RTP.
ast_rtp_codecs_get_payload() gets called once or twice for every received
RTP frame so it would be nice to not allocate an ao2 object to then have
it destroyed shortly thereafter.  The ao2 object gets allocated only if
the payload type is not set by the channel driver as a negotiated value.
The issue affects chan_skinny, chan_unistim, chan_rtp, and chan_ooh323.

* Made static_RTP_PT[] an array of ao2 objects that
ast_rtp_codecs_get_payload() can return instead of an array of structs
that must be copied into a created ao2 object.

ASTERISK-25296 #close
Reported by: Richard Mudgett

Change-Id: Icb6de5cd90bfae07d44403a1352963db9109dac0
2015-07-30 20:34:24 -05:00
Richard Mudgett 84262749d2 res_rtp_asterisk.c: Fix off-nominal crash potential.
ASTERISK-25296
Reported by: Richard Mudgett

Change-Id: I08549fb7c3ab40a559f41a3940f3732a4059b55b
2015-07-30 20:34:24 -05:00
Richard Mudgett 1519eb44a7 rtp_engine.c: Must protect mime_types_len with mime_types_lock.
Change-Id: I44220dd369cc151ebf5281d5119d84bb9e54d54e
2015-07-30 20:34:24 -05:00
Richard Mudgett a93b7a927c res_pjsip_sdp_rtp.c: Fix processing wrong SDP media list.
Change-Id: I7c076826c2d3c6ae8c923ca73b7a71980cca11f2
2015-07-30 20:34:24 -05:00
Richard Mudgett 741fa0d26d res_pjsip_sdp_rtp.c: Fixup some whitespace.
Change-Id: Ib4eb7ef7dcaf93ddc26538f0a498aaf110d7a973
2015-07-30 20:34:24 -05:00
Richard Mudgett 89b21fd9a3 rtp_engine.h: No sense allowing payload types larger than RFC allows.
* Tweaked add_static_payload() to not use magic numbers.

Change-Id: I1719ff0f6d3ce537a91572501eae5bcd912a420b
2015-07-30 20:34:23 -05:00
Richard Mudgett 7427c7f13b rtp_engine.c: Minor tweaks.
* Fix off nominial ref leak of new_type in
ast_rtp_codecs_payloads_set_m_type().

* No need to lock static_RTP_PT_lock in
ast_rtp_codecs_payloads_set_m_type() and
ast_rtp_codecs_payloads_set_rtpmap_type_rate() before the payload type
parameter sanity check.

* No need to create ast_rtp_payload_type ao2 objects with a lock since the
lock is not used.

Change-Id: I64dd1bb4dfabdc7e981e3f61448beac9bb7504d4
2015-07-30 20:34:23 -05:00
Richard Mudgett e20f435b60 rtp_engine.h: Misc comment fixes.
Change-Id: If98139264d5d97427b4685ecbdc54518f725bc43
2015-07-30 20:34:23 -05:00
Richard Mudgett bc5d7f9c37 chan_sip.c: Tweak glue->update_peer() parameter nil value.
Change glue->update_peer() parameter from 0 to NULL to better indicate it
is a pointer.

Change-Id: I8ff2e5087f0e19f6998e3488a712a2470cc823bd
2015-07-30 20:34:23 -05:00
Richard Mudgett 13eb491e35 res_pjsip_session.c: Fix crashes seen when call cancelled.
Two testsuite tests crashed in the same place as a result of an INVITE
being CANCELed.

tests/channels/pjsip/resolver/srv/failover/in_dialog/transport_unspecified
tests/channels/pjsip/resolver/srv/failover/in_dialog/transport_tcp

The session pointer is no longer in the inv->mod_data[session_module.id]
location because the INVITE transaction has reached the terminated state.

ASTERISK-25297 #close
Reported by: Richard Mudgett

Change-Id: Idb75fdca0321f5447d5dac737a632a5f03614427
2015-07-30 17:08:09 -05:00
Joshua Colp 9be856e3c6 Merge "Add a test event for inband ringing." into 13 2015-07-30 16:56:00 -05:00
Mark Michelson 48698a5e21 res_http_websocket: Properly encode 64 bit payload
A test agent was continuously failing all ARI tests when run against
Asterisk 13. As it turns out, the reason for this is that on those test
runs, for some reason we decided to use the super extended 64 bit
payload length for websocket text frames instead of the extended 16 bit
payload length. For 64-bit payloads, the expected byte order over the
network is

7, 6, 5, 4, 3, 2, 1, 0

However, we were sending the payload as

3, 2, 1, 0, 7, 6, 5, 4

This meant that we were saying to expect an absolutely MASSIVE payload
to arrive. Since we did not follow through on this expected payload
size, the client would sit patiently waiting for the rest of the payload
to arrive until the test would time out.

With this change, we use the htobe64() function instead of htonl() so
that a 64-bit byte-swap is performed instead of a 32 bit byte-swap.

Change-Id: Ibcd8552392845fbcdd017a8c8c1043b7fe35964a
2015-07-29 14:35:58 -05:00
Mark Michelson 10ba72a927 Add a test event for inband ringing.
This event is necessary for the bridge_wait_e_options test to be able to
confirm that ringing is being played on the local channel that runs the
BridgeWait() application with the e(r) option.

ASTERISK-25292 #close
Reported by Kevin Harwell

Change-Id: Ifd3d3d2bebc73344d4b5310d0d55c7675359d72e
2015-07-29 12:23:43 -05:00
Mark Michelson c9099d06cc Merge "holding_bridge: ensure moh participants get frames" into 13 2015-07-28 17:05:49 -05:00
Jonathan Rose 8458b8d441 holding_bridge: ensure moh participants get frames
Currently, if a blank musiconhold.conf is used, musiconhold will fail
to start for a channel going into a holding bridge with an anticipation
of getting music on hold. That being the case, no frames will be written
to the channel and that can pose a problem for blind transfers in PJSIP
which may rely on frames being written to get past the REFER framehook.
This patch makes holding bridges start a silence generator if starting
music on hold fails and makes it so that if no music on hold functions
are installed that the ast_moh_start function will report a failure so
that consumers of that function will be able to respond appropriately.

ASTERISK-25271 #close

Change-Id: I06f066728604943cba0bb0b39fa7cf658a21cd99
2015-07-28 15:11:48 -05:00
Matt Jordan f78a4b52b8 Bump the ARI version to 1.8.0
Due to backwards compatible changes, the ARI version should be bumped to
1.8.0 prior to the release of 13.5.0. Note that a previous patch already
bumped the version of AMI for this release.

Change-Id: I419033bfbbc0d3533a29ccb32b2981f39e0883e7
2015-07-24 13:04:41 -05:00
Joshua Colp 2749721791 pjsip: Add rtp_timeout and rtp_timeout_hold endpoint options.
This change adds support for the 'rtp_timeout' and 'rtp_timeout_hold'
endpoint options. These allow the channel to be hung up if RTP
is not received from the remote endpoint for a specified number of
seconds.

ASTERISK-25259 #close

Change-Id: I3f39daaa7da2596b5022737b77799d16204175b9
2015-07-24 12:43:02 -03:00
Joshua Colp 1997b6f677 Merge "res_pjsip: Add rtp_keepalive to sample config file." into 13 2015-07-24 10:42:56 -05:00
Mark Michelson b4e19e414a res_pjsip: Add rtp_keepalive to sample config file.
Change-Id: I5f62d0c5684f8b2335f9f8ac2d79ee04fbdafb19
2015-07-24 09:46:53 -05:00
Mark Michelson f635520527 Local channels: Alternate solution to ringback problem.
Commit 54b25c80c8 solved an issue where a
specific scenario involving local channels and a native local RTP bridge
could result in ringback still being heard on a calling channel even
after the call is bridged.

That commit caused many tests in the testsuite to fail with alarming
consequences, such as not sending DialBegin and DialEnd events, and
giving incorrect hangup causes during calls.

This commit reverts the previous commit and implements and alternate
solution. This new solution involves only passing AST_CONTROL_RINGING
frames across local channels if the local channel is in AST_STATE_RING.
Otherwise, the frame does not traverse the local channels. By doing
this, we can ensure that a playtones generator does not get started on
the calling channel but rather is started on the local channel on which
the ringing frame was initially indicated.

ASTERISK-25250 #close
Reported by Etienne Lessard

Change-Id: I3bc87a18a38eb2b68064f732d098edceb5c19f39
2015-07-24 09:33:19 -05:00
Matt Jordan 4d8f47f4bf Merge "audiohook: Use manipulated frame instead of dropping it." into 13 2015-07-22 20:02:26 -05:00
Joshua Colp ff83c115c7 Merge "Local channels: Do not block control -1 payloads." into 13 2015-07-22 13:19:02 -05:00
Joshua Colp f509730cb9 audiohook: Use manipulated frame instead of dropping it.
Previous changes to sample rate support in audiohooks accidentally
removed code responsible for allowing the manipulate audiohooks
to work. Without this code the manipulated frame would be dropped
and not used. This change restores it.

ASTERISK-25253 #close

Change-Id: I3ff50664cd82faac8941f976fcdcb3918a50fe13
2015-07-22 14:24:47 -03:00
Mark Michelson 54b25c80c8 Local channels: Do not block control -1 payloads.
Control frames with a -1 payload are used as a special signal to stop
playtones generators on channels. This indication is sent both by
app_dial as well as by ast_answer() when a call is answered in case any
tones were being generated on a calling channel.

This control frame type was made to stop traversing local channel pairs
as an optimization, because it was thought that it was unnecessary to
send these indications, and allowing such unnecessary control frames to
traverse the local channels would cause the local channels to optimize
away less quickly.

As it turns out, through some special magic dialplan code, it is
possible to have a tones being played on a non-local channel, and it is
important for the local channel to convey that the tones should be
stopped. The result of having tones continue to be played on the
non-local channel is that the tones play even once the channel has been
bridged. By not blocking the -1 control frame type, we can ensure that
this situation does not happen.

ASTERISK-25250 #close
Reported by Etienne Lessard

Change-Id: I0bcaac3d70b619afdbd0ca8a8dd708f33fd2f815
2015-07-22 09:53:36 -05:00
Joshua Colp f1493f900e audiohook: Read the correct number of samples based on audiohook format.
Due to changes in audiohooks to support different sample rates the
underlying storage of samples is in the format of the audiohook
itself and not of the format being requested. This means that if a
channel is using G722 the samples stored will be at 16kHz. If
something subsequently reads from the audiohook at a format which
is not the same sample rate as the audiohook the number of samples
needs to be adjusted.

Given the following example:
1. Channel writing into audiohook at 16kHz (as it is using G722).
2. Chanspy reading from audiohook at 8kHz.

The original code would read 160 samples from the audiohook for
each 20ms of audio. This is incorrect. Since the audio in the
audiohook is at 16kHz the actual number needing to be read is 320.
Failure to read this much would cause the audiohook to reset
itself constantly as the buffer became full.

This change adjusts the requested number of samples by determining
the duration of audio requested and then calculating how many
samples that would be in the audiohook format.

ASTERISK-25247 #close

Change-Id: Ia91ce516121882387a315fd8ee116b118b90653d
2015-07-22 07:26:27 -03:00
Joshua Colp d16347f33b Merge "Documentation: A couple of trivial fixes in sip.conf.sample and func_cdr.c" into 13 2015-07-20 18:30:40 -05:00
Rusty Newton 62c64c3bd1 Documentation: A couple of trivial fixes in sip.conf.sample and func_cdr.c
* In sip.conf.sample fix sentence where we said that WS or WSS are supported
   transports for use in an outbound register definition. They are not
   supported in that case.
 * In func_cdr.c made it clear that the Disable option for CDR_PROP can be used
   to enable CDR on a channel.

ASTERISK-24867 #close
Reported by: Rusty Newton

ASTERISK-24853 #close
Reported by: PSDK

Change-Id: I3d698bc6302b9d00a0a995b5c4ad9a42d69b48ca
2015-07-20 12:45:39 -05:00
Mark Michelson d9094ddd73 res_pjsip: Add rtp_keepalive endpoint option.
This adds an "rtp_keepalive" option for PJSIP endpoints. Similar to the
chan_sip option, this specifies an interval, in seconds, at which we
will send RTP comfort noise frames. This can be useful for keeping RTP
sessions alive as well as keeping NAT associations alive during lulls.

ASTERISK-25242 #close
Reported by Mark Michelson

Change-Id: I06660ba672c0a343814af4cec838e6025cafd54b
2015-07-20 09:52:10 -05:00
Matt Jordan 34207887e6 Merge "chan_pjsip: Don't change formats when frame of unsupported format is received." into 13 2015-07-20 07:31:38 -05:00
Matt Jordan 8a1d9a9f83 Merge "res/res_musiconhold: Add a warning when MOH does not exist" into 13 2015-07-19 10:57:50 -05:00
Joshua Colp 29de5b497f Merge "pbx.c: Post AMI VarSet event if delete a non-empty dialplan variable." into 13 2015-07-19 09:54:39 -05:00
Michael Cargile a23adcca3d res/res_musiconhold: Add a warning when MOH does not exist
Change-Id: Ifdfbd0b97cf31478d29923ec30aabce28d01740b
2015-07-19 09:54:24 -05:00
Matt Jordan 03064daeb2 res/res_sorcery_config: Prevent crash from misconfigured sorcery.conf
Misconfiguring sorcery.conf with a 'config' wizard with no extra data
will currently crash Asterisk on startup, as the wizard requires a comma
delineated list to parse. This patch updates res_sorcery_config to check
for the presence of the data before it starts manipulating it.

Change-Id: I4c97512e8258bc82abe190627a9206c28f5d3847
2015-07-19 09:14:03 -05:00
Mark Michelson 1915aa5a54 Merge "sig_pri.h: force_restart_unavailable_chans in wrong scope" into 13 2015-07-17 12:44:00 -05:00
Joshua Colp 2c626ceb64 chan_pjsip: Don't change formats when frame of unsupported format is received.
Receipt of an RTP packet currently causes the formats on an PJSIP channel to
change to the format of the RTP packet. In some off-nominal cases it's possible
for this to be a format that has not been configured or negotiated. This change
makes it so only formats explicitly configured on the endpoint are allowed.

ASTERISK-25258 #close

Change-Id: If93d641fb6418a285928839300d7854cab8c1020
2015-07-17 14:34:59 -03:00
Patric Marschall abb14ac5b8 sig_pri.h: force_restart_unavailable_chans in wrong scope
In channels/sig_pri.h, struct sig_pri_span, the field
force_restart_unavailable_chans is only defined if

#if defined(HAVE_PRI_MCID) is true.

All other occurences of force_restart_unavailable_chans are outside of the

#if defined(HAVE_PRI_MCID)
endif

scope.

ASTERISK-25257 #close
Reported by: Patric Marschall

Change-Id: I071de89cc2cd0d85927a013036e235851f672549
2015-07-17 11:01:37 -05:00
Richard Mudgett 875aee4c09 pbx.c: Post AMI VarSet event if delete a non-empty dialplan variable.
ASTERISK-25256 #close
Reported by: Richard Mudgett

Change-Id: I0b6be720b66fa956f6a798cd22ef8934eb0c0ff3
2015-07-17 10:40:17 -05:00
Matt Jordan 9d7f689b4b Merge "ARI: Add support for push configuration of dynamic object" into 13 2015-07-17 09:23:44 -05:00
Matt Jordan 325d83f37f Merge "strings.h: Fix issues with escape string functions." into 13 2015-07-17 08:50:31 -05:00
Matt Jordan 8bcf6d2801 ARI: Add support for push configuration of dynamic object
This patch adds support for push configuration of dynamic, i.e.,
sorcery, objects in Asterisk. It adds three new REST API calls to the
'asterisk' resource:
 * GET /asterisk/{configClass}/{objectType}/{id}: retrieve the current
   object given its ID. This returns back a list of ConfigTuples, which
   define the fields and their present values that make up the object.
 * PUT /asterisk/{configClass}/{objectType}/{id}: create or update an
   object. A body may be passed with the request that contains fields to
   populate in the object. The same format as what is retrieved using
   the GET operation is used for the body, save that we specify that the
   list of fields to update are contained in the "fields" attribute.
 * DELETE /asterisk/{configClass}/{objectType}/{id}: remove a dynamic
   object from its backing storage.

Note that the success/failure of these operations is somewhat
configuration dependent, i.e., you must be using a sorcery wizard that
supports the operation in question. If a sorcery wizard does not support
the create or delete mechanisms, then the REST API call will fail with a
403 forbidden.

ASTERISK-25238 #close

Change-Id: I28cd5c7bf6f67f8e9e437ff097f8fd171d30ff5c
2015-07-16 20:37:58 -05:00
Matt Jordan 80eaf0b025 Merge "res_pjsip_session.c: Extract sip_session_defer_termination_stop_timer()." into 13 2015-07-16 20:33:38 -05:00
Matt Jordan 174f0e9d4d Merge "res_pjsip_session.c: Add some helpful comments and minor tweaks." into 13 2015-07-16 20:33:34 -05:00
Matt Jordan bba2c44ac4 Merge "res_pjsip_session.c: Fix off nominal crash potential in debug message." into 13 2015-07-16 20:33:30 -05:00
Richard Mudgett e31cb6b248 strings.h: Fix issues with escape string functions.
Fixes for issues with the ASTERISK-24934 patch.

* Fixed ast_escape_alloc() and ast_escape_c_alloc() if the s parameter is
an empty string.  If it were an empty string the functions returned NULL
as if there were a memory allocation failure.  This failure caused the AMI
VarSet event to not get posted if the new value was an empty string.

* Fixed dest buffer overwrite potential in ast_escape() and
ast_escape_c().  If the dest buffer size is smaller than the space needed
by the escaped s parameter string then the dest buffer would be written
beyond the end by the nul string terminator.  The num parameter was really
the dest buffer size parameter so I renamed it to size.

* Made nul terminate the dest buffer if the source string parameter s was
an empty string in ast_escape() and ast_escape_c().

* Updated ast_escape() and ast_escape_c() doxygen function description
comments to reflect reality.

* Added some more unit test cases to /main/strings/escape to cover the
empty source string issues.

ASTERISK-25255 #close
Reported by: Richard Mudgett

Change-Id: Id77fc704600ebcce81615c1200296f74de254104
2015-07-15 19:56:32 -05:00
Richard Mudgett 243c0d1609 parking_applications.c: Fix ast_verb() line terminator.
Change-Id: I8797238c71563e243c48c6145b4f1ae58f91f775
2015-07-15 19:32:25 -05:00
Richard Mudgett c782320c68 res_parking: Fix crash if ATTENDEDTRANSFER set empty before Park.
setup_park_common_datastore() was assuming that a non-NULL string returned
for the ATTENDEDTRANSFER and BLINDTRANSFER channel variables are not empty
strings.  Things got crashy as a result.

* Made setup_park_common_datastore() treat the channel variable values the
same whether they are NULL or empty for ATTENDEDTRANSFER and
BLINDTRANSFER.

ASTERISK-25254 #close
Reported by: Richard Mudgett

Change-Id: I9a9c174b33f354f35f82cc6b7cea8303adbaf9c2
2015-07-15 19:30:13 -05:00
Richard Mudgett 2735dd5b2d res_pjsip_session.c: Extract sip_session_defer_termination_stop_timer().
Change-Id: I9e115dee74bd72e06081d0ee73ecdeb886caa5fb
2015-07-15 10:55:52 -05:00
Richard Mudgett 3d0ca343ca res_pjsip_session.c: Add some helpful comments and minor tweaks.
Change-Id: I742aeeaf5f760593f323a00fb691affe22e35743
2015-07-15 10:55:52 -05:00
Richard Mudgett 8d08bb179c res_pjsip_session.c: Fix off nominal crash potential in debug message.
Change-Id: I09928297927ee85f7655289acee3a586816466bc
2015-07-15 10:55:52 -05:00
Joshua Colp 5086bdacfb Merge "apps/app_dictate: Fix typo in attribution" into 13 2015-07-15 10:48:40 -05:00
Mark Michelson ca41785774 Merge "ARI: Fixed unload mode for unload module." into 13 2015-07-15 10:44:08 -05:00
Matt Jordan 0a1a550593 apps/app_dictate: Fix typo in attribution
Last time I checked, it's "Sangoma", not "Samgoma". Thanks to Brian
(GameGamer43) for pointing that out.

Change-Id: I43d7b196f6d7a2b2517b84915e3a8dfbc2894106
2015-07-15 10:34:21 -05:00
Benjamin Ford 3384e64ef6 ARI: Fixed unload mode for unload module.
Changed the unload mode to AST_FORCE_SOFT from AST_FORCE_FIRM,
which would unload a module even if it was in use.

* Changed unload mode to proper mode

ASTERISK-25173

Change-Id: If2402487b5bce05d9770f25f65f5c8e292ad5533
2015-07-15 10:30:08 -05:00
Matt Jordan 00d858da87 Merge "res_pjsip_session.c: Fix crash on call disconnect." into 13 2015-07-14 22:17:45 -05:00
Matt Jordan 0b6ff77afb res/res_sorcery_astdb: Add a debugging message for when retrieval by ID fails
Having a debug message tell us that we attempted to look up an item but
failed is nice in circumstances when it isn't clear if the wizard was
queried correctly or not.

Change-Id: I2600c3bbea87f252196358f62e73f4c7da8632f7
2015-07-14 19:15:14 -05:00
Matt Jordan 2f0d6d346c res/res_pjsip_outbound_registration: Fix WARNING message
Newlines are nice.

Change-Id: Icf0d915db02882e47cd9077ed9009f5d44140d42
2015-07-14 19:15:14 -05:00
Matt Jordan cd2213f1ae res_pjsip/configuration: Fix a variety of default value problems
This patch fixes some bad default value handling in the following
settings:

* The 'message_context' and 'accountcode' settings are not mandatory. As
  such, we can allow their stringfield values to be empty.
* The 'media_encryption' setting applies a default value of 'none' to
  the setting, which it then can't parse or understand. Since the value
  is documented to be 'no', this will now apply that as the default
  value.

Change-Id: Ib9be7f97a7a5b9bc7aee868edf5acf38774cff83
2015-07-14 19:15:14 -05:00
Matt Jordan 2e4bdbd78a main/sorcery: Provide log messages when a wizard does not support an operation
If a sorcery wizard does not support one of the 'optional' CRUD
operations (namely the CUD), log a WARNING message so we are aware of
why the operation failed. This also removes an assert in this case, as
the CUD operation may have been triggered by an external system, in
which case it is not a programming error but a configuration error.

Change-Id: Ifecd9df946d9deaa86235257b49c6e5e24423b53
2015-07-14 19:15:13 -05:00
Richard Mudgett 653f2087e0 res_pjsip_session.c: Fix crash on call disconnect.
The crash fix for ASTERISK-25183 backported some code from master to try
to make sure that a BYE response is processed by the same serializer used
by the BYE request.  The identified race condition causing that backport
was the BYE request code had not finished processing after sending the BYE
before the BYE response came in for processing under a different thread.
Unfortunately, there is still a race condition.  Now the race condition is
between destroying the call session's serializer in
ast_taskprocessor_unreference() and using ast_taskprocessor_get() to get a
reference to the serializer for a BYE response.  Even worse, the new race
condition is a design limitation of the taskprocessor implementation that
didn't matter in versions before v12.  Back then, taskprocessors were only
destroyed when a module unloaded.  Now res_pjsip can destroy them when a
call ends.

However, as noted on the ASTERISK-25183 commit,
session_inv_on_state_changed() is disassociating the dialog from the
session when the invite dialog state becomes PJSIP_INV_STATE_DISCONNECTED.
This is a tad too soon because our BYE request transaction has not
completed yet.

* Split session_end() that is called by session_inv_on_state_changed() to
hold off session destruction until the BYE transaction timeout occurs or a
failed initial INVITE transaction timeout occurs in
session_inv_on_tsx_state_changed().

ASTERISK-25201 #close
Reported by: Matt Jordan

Change-Id: Iaf8dc8485fd8392a2a3ee4ad3b7f7f04a0dcc961
2015-07-14 15:47:52 -05:00
Benjamin Ford 1aafadf814 ARI: Added new functionality to reload a single module.
An http request can be sent to reload an Asterisk module. If the
module can not be reloaded or is not already loaded, an error
response will be returned.

The command "curl -v -u user:pass -X PUT 'http://localhost:8088
/ari/asterisk/modules/{moduleName}'" (or something similar, based
on configuration) can be run in the terminal to access this new
functionality.

For more information, see:
https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource

* Added new ARI functionality
* Asterisk modules can be reloaded through http requests

ASTERISK-25173

Change-Id: I289188bcae182b2083bdbd9ebfffd50b62f58ae1
2015-07-14 13:15:39 -05:00
Benjamin Ford 9dcae23cfc ARI: Added new functionality to unload a single module.
An http request can be sent to unload an Asterisk module. If the
module can not be unloaded or is already unloaded, an error response
will be returned.

The command "curl -v -u user:pass -X DELETE 'http://localhost:8088
/ari/asterisk/modules/{moduleName}'" (or something similar, depending
on configuration) can be run in the terminal to access this new
functionality.

For more information, see:
https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource

* Added new ARI functionality
* Asterisk modules can be unloaded through http requests

ASTERISK-25173

Change-Id: I535a95f5676deb02651522761ecbdc0b00b5ac57
2015-07-14 08:57:57 -05:00
Benjamin Ford c219a98d2b ARI: Added new functionality to load a single module.
An http request can be sent to load an Asterisk module. If the
module can not be loaded or is loaded already, an error response
will be returned.

The command curl -v -u user:pass -X POST 'http://localhost:8088/ari
/asterisk/modules/{moduleName}'" (or something similar, depending on
configuration) can be run in the terminal to access this new
functionality.

For more information, see:
https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource

* Added new ARI functionality
* Asterisk modules can be loaded through http requests

ASTERISK-25173

Change-Id: I9e05d5b8c5c666ecfef341504f9edc1aa84fda33
2015-07-13 16:03:06 -05:00
Mark Michelson 585d98fbb6 Merge "ARI: Added new functionality to get information on a single module." into 13 2015-07-13 15:15:44 -05:00
Mark Michelson ca65ddcd19 Merge "bridge.c: Fixed race condition during attended transfer" into 13 2015-07-13 14:51:22 -05:00
Benjamin Ford 73e35d20de ARI: Added new functionality to get information on a single module.
An http request can be sent to retrieve information on a single
module, including the resource name, description, use count, status,
and support level.

The command "curl -v -u user:pass -X GET 'http://localhost:8088/ari
/asterisk/modules/{moduleName}'" (or something similar, depending on
configuration) can be run in the terminal to access this new
functionality.

For more information, see:
https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource

* Added new ARI functionality
* Information on a single module can now be retrieved

ASTERISK-25173

Change-Id: Ibce5a94e70ecdf4e90329cf0ba66c33a62d37463
2015-07-13 14:27:40 -05:00
Kevin Harwell 97ee0ee6c6 bridge.c: Fixed race condition during attended transfer
During an attended transfer a thread is started that handles imparting the
bridge channel. From the start of the thread to when the bridge channel is
ready exists a gap that can potentially cause problems (for instance, the
channel being swapped is hung up before the replacement channel enters the
bridge thus stopping the transfer). This patch adds a condition that waits
for the impart thread to get to a point of acceptable readiness before
allowing the initiating thread to continue.

ASTERISK-24782
Reported by: John Bigelow

Change-Id: I08fe33a2560da924e676df55b181e46fca604577
2015-07-13 12:55:21 -05:00
Matt Jordan 6176ef782c Merge "main/format_cap: Parse capabilities generated by ast_format_cap_get_names" into 13 2015-07-13 12:53:54 -05:00
Matt Jordan bb76b88baf main/sorcery: Don't fail object set creation from JSON if field fails
Some individual fields may fail their conversion due to their default
values being invalid for their custom handlers. In particular,
configuration values that depend on others being enabled (and thus have
an empty default value) are notorious for tripping this routine up. An
example of this are any of the DTLS options for endpoints. Any of the
DTLS options will fail to be applied (as DTLS is not enabled), causing
the entire object set to be aborted.

This patch makes it so that we log a debug message when skipping a
field, and rumble on anyway.

ASTERISK-25238

Change-Id: I0bea13de79f66bf9f9ae6ece0e94a2dc1c026a76
2015-07-12 18:08:58 -05:00
Matt Jordan 5f13c2226a main/format_cap: Parse capabilities generated by ast_format_cap_get_names
We have a strange relationship between the parsing of format
capabilities from a string and their representation as a string. We
expect the format capabilities to be expressed as a string in the
following format:

allow = !all,ulaw,alaw
disallow = g722

While we would generate the string representation of those formats as:

allow = (ulaw|alaw)
disallow = (ulaw|alaw|g729...)

When the configuration framework needs to store values as a string, it
generates the format capabilities using the second representation; this
representation however cannot be parsed when the entry is rehydrated.
This patch fixes that by updating
ast_format_cap_update_by_allow_disallow to parse an entry as if it were
in the generated format if it has a leading '(' and a trailing ')'.

ASTERISK-25238

Change-Id: I904d43caf4cf45af06f6aee0c9e58556eb91d6ca
2015-07-12 17:54:48 -05:00
Matt Jordan 5c491a6295 Merge "tests/test_devicestate: Add additional tests for the device state API" into 13 2015-07-11 11:44:13 -05:00
Matt Jordan 4a5f23e716 Merge "res/res_sorcery_memory_cache: Fix test registration issues" into 13 2015-07-11 11:31:28 -05:00
Matt Jordan 3645ed0971 Merge "tests/test_sorcery_memory_cache_thrash: Fix test loading problems" into 13 2015-07-11 11:31:23 -05:00
Matt Jordan 2325b106fd tests/test_devicestate: Add additional tests for the device state API
This patch adds more tests that exercise the device state API. This includes:

* Tests that cover adding a device state provider, as well as deleting a
  device state provider. This also verifies that you cannot add an
  already added device state provider, and cannot delete an already
  deleted device state provider.
* A test that covers changing device state and receiving said updates
  from a device state subscriber. This also covers hitting both the
  device state cache as well as a custom device state provider.
* A test that covers converting device state to channel state and device
  state values to a string representation and back.
* A test that covers obtaining device state from an active channel and a
  channel driver that provides its own device state.

Change-Id: I2adca67ffb405cd8625a5d6df1e3f9b3d945c08d
2015-07-11 11:24:58 -05:00
Matt Jordan 328f0be806 main/devicestate: Prevent duplicate registration of device state providers
Currently, the device state provider API will allow you to register a
device state provider with the same case insensitive name more than
once. This could cause strange issues, as the duplicate device state
providers will not be queried when a device's state has to be polled.
This patch updates the API such that a device state provider with the
same name as one that has already registered will be rejected.

Change-Id: I4a418a12280b7b6e4960bd44f302e27cd036ceb2
2015-07-11 10:24:39 -05:00
Matt Jordan bee41eec62 res/res_sorcery_memory_cache: Fix test registration issues
Again, tests now need to not end with a newline. This patch makes it so
the tests can register again, unit tests will actually pass, and we can
stop wasting time trying to figure out why builds are failing when they
really aren't failing.

Change-Id: Ide519fbeba89f413c733446c5ff7b224fc4ce840
2015-07-10 22:25:00 -05:00
Matt Jordan e51d86682a Merge "ARI: Added new functionality to get all module information." into 13 2015-07-10 21:46:38 -05:00
Matt Jordan 4d738e9026 tests/test_sorcery_memory_cache_thrash: Fix test loading problems
Because unit tests now want descriptions to not end with a newline, the
sorcery memory cache thrash tests failed to register. This patch
corrects their descriptions.

Change-Id: Id004b1becfdeed8ee3c846f49beab76a5c0f68b6
2015-07-10 21:42:58 -05:00
Benjamin Ford 47ea312b24 ARI: Added new functionality to get all module information.
An http request can be sent to retrieve a list of all existing modules,
including the resource name, description, use count, status, and
support level.

The command "curl -v -u user:pass -X GET 'http://localhost:8088/ari/
asterisk/modules" (or something similar, depending on configuration)
can be run in the terminal to access this new functionality.

For more information, see:
https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource

* Added new ARI functionality
* Information on modules can now be retrieved

Change-Id: I63cbbf0ec0c3544cc45ed2a588dceabe91c5e0b0
2015-07-10 11:15:25 -05:00
Matt Jordan 37e1c479ca Merge "bridge_native_rtp.c: Don't start native RTP bridging after attended transfer." into 13 2015-07-10 09:29:29 -05:00
Joshua Colp d558b00c85 bridge_native_rtp.c: Don't start native RTP bridging after attended transfer.
The bridge_native_rtp module adds a frame hook to channels which are in
a native RTP bridge. This frame hook is used to intercept when a hold
or unhold frame traverses the bridge so native RTP can be stopped or
started as appropriate. This is expected but exposes a specific bug
when attended transfers are involved.

Upon completion of an attended transfer an unhold frame is queued up
to take one of the channels involved off hold. After this is done
the channel is moved between bridges.

When the frame hook is involved in this case for the unhold it
releases the channel lock and acquires the bridge lock. This
allows the bridge core to step in and move the channel
(potentially changing the bridging techology) from another thread.
Once completed the bridge lock is released by the bridge core.
The frame hook is then able to acquire the bridge lock and
wrongfully starts native RTP again, despite the channel no longer
being in the bridge or needing to start native RTP. In fact at
this point the frame hook is no longer attached to the channel.

This change makes it so the native RTP bridge data is available to
the frame hook when it is invoked. Whether the frame hook has
been detached or not is stored on the native RTP bridge data and
is checked by the frame hook before starting or stopping native
RTP bridging. If the frame hook has been detached it does nothing.

ASTERISK-25240 #close

Change-Id: I13a73186a05f4e5a764f81e5cd0ccec1ed1891d2
2015-07-09 14:18:02 -03:00
Joshua Colp b74b071369 res_sorcery_memory_cache: Backport to 13
Gerrit is complaining of conflicts when trying to create a patch series
of all of the cherry-picked master commits, so I have instead squashed
it all into one commit.

ASTERISK-25067 #close
Reported by: Matt Jordan

Change-Id: I6dda90343fae24a75dc5beec84980024e8d61eb9
2015-07-09 08:56:35 -05:00
Joshua Colp 7ff1ac8797 res_rtp_asterisk: Ensure DTLS timeout timer is -1 if DTLS is not used.
This change fixes a bug where the DTLS timeout timer would be
initialized to 0 if DTLS was not used for an RTP session.

ASTERISK-25103

Change-Id: If8d26bb054f1d300838850da5b8db9044c2fe2ac
2015-07-08 04:28:12 -05:00
Matt Jordan b842a8dabf Merge "res_pjsip_mwi.c: Use safer loop coding in mwi_subscription_mailboxes_str()." into 13 2015-07-07 20:38:42 -05:00
Matt Jordan 84a6ed05b7 Merge "res_pjsip_mwi.c: Fix MWI subscription memory corruption crash." into 13 2015-07-07 20:38:12 -05:00
Joshua Colp 7386a761c1 Merge "PJSIP XML, XPIDF: Fix buffer size overwrite memory corruption error." into 13 2015-07-07 17:38:59 -05:00
Joshua Colp 4c99310468 Merge topic 'res_pjsip_mwi_cleanups' into 13
* changes:
  res_pjsip_mwi.c: Eliminate a simple RAII_VAR.
  res_pjsip_mwi.c: Fix mid-line log message line breaks.
2015-07-07 17:24:36 -05:00
Joshua Colp f35d8f5670 Merge "PJSIP FAX: Fix T.38 automatic reject timer NULL channel pointer dereferences." into 13 2015-07-07 17:20:46 -05:00
Joshua Colp 618b97c143 Merge "res_pjsip_t38.c: Fix always false if test." into 13 2015-07-07 17:12:18 -05:00
Joshua Colp 2bc9245d9d Merge "res_pjsip: Need to use the same serializer for a pjproject SIP transaction." into 13 2015-07-07 17:11:26 -05:00
Joshua Colp 6d4227bbba Merge "res/res_http_websocket: Don't send HTTP response fragmented." into 13 2015-07-07 17:01:24 -05:00
Joshua Colp 05e8e14982 res_rtp_asterisk: Prevent simultaneous access to DTLS SSL context.
This change moves logic for setting up the DTLS SSL contexts to
when the SDP is done being processed instead of when ICE negotiation
completes. It also stops handshakes from being initiated when we
are acting as a server.

Manipulating the SSL context when ICE negotiation has completed
is problematic as the SSL context is not protected and if acting
as a client the remote side may have started DTLS negotiation
already.

The retransmission timeout timer code has also been split up
and simplified some. Both RTP and RTCP now have their own timers
and the points at which the timer is stopped and started is now
more specific. When a packet is sent the timer is started. When
a response is received but before it is processed the timer is
stopped. This provides a guarantee that the timeout is not
occurring while the response is processed.

ASTERISK-22805 #close
ASTERISK-24550 #close
ASTERISK-24651 #close
ASTERISK-24832 #close
ASTERISK-25103 #close
ASTERISK-25127 #close

Change-Id: Ib75ea2546f29d6efc3d2d37c58df6986c7bd9b91
2015-07-07 16:29:50 -03:00
Richard Mudgett 38bace4fbb res_pjsip_t38.c: Fix always false if test.
Calling t38_change_state() sets the t38 state so it makes little sense to
then check the state right after the call for something else.

* Made the code in t38_interpret_parameters() reject or exit T.38 mode as
intended but not implemented.

Change-Id: Ib281263a6ed44da9448132c4e6df1e183b8a3df2
2015-07-06 16:01:53 -05:00
Richard Mudgett 2f7688c788 res_pjsip_mwi.c: Use safer loop coding in mwi_subscription_mailboxes_str().
Change-Id: I6f39d809a6d1b47b35bb32b298f5a12f35d6f907
2015-07-06 15:59:52 -05:00
Richard Mudgett 74be3a50d7 res_pjsip_mwi.c: Eliminate a simple RAII_VAR.
Change-Id: Ib1843f81e826a6c760c424c88eb70c350d9d61da
2015-07-06 15:59:52 -05:00
Richard Mudgett 589e93617a res_pjsip_mwi.c: Fix mid-line log message line breaks.
* Add create_mwi_subscriptions_for_endpoint() doxygen comment.

Change-Id: I3c3f921f4ec749fb65b62d2f6fa0d4d1888b94e2
2015-07-06 15:59:52 -05:00
Richard Mudgett 0d67e04359 res_pjsip_mwi.c: Fix MWI subscription memory corruption crash.
MWI subscriptions can crash or corrupt memory when using the subscription
datastore to access the MWI subscription object because the datastore is
not holding a reference to the object.

* Give the subscription datastore a ref to the MWI subscription object.
It is unfortunate that the ref causes a circular ref chain that must be
explicitly broken to allow the memory to get released.  The loop is broken
when the subscription is shutdown and if the subscription setup fails.

ASTERISK-25168 #close
Reported by: Carl Fortin

Change-Id: Ice4fa823f138ff10a6c74d280699c41a82836d4f
2015-07-06 15:38:15 -05:00
Richard Mudgett 0422433f47 PJSIP XML, XPIDF: Fix buffer size overwrite memory corruption error.
When res_pjsip body generator modules were generating XML or XPIDF
response bodies, there was a chance that the generated body would be the
exact size of the supplied buffer.  Adding the nul string terminator would
then write beyond the end of the buffer and potentially corrupt memory.

* Fix MALLOC_DEBUG high fence violations caused by adding a nul string
terminator on the end of a buffer for XML or XPIDF response bodies.

* Made calls to pj_xml_print() safer if the XML prolog is requested.  Due
to a bug in pjproject, the return value could be -1 _or_
AST_PJSIP_XML_PROLOG_LEN if the supplied buffer is not large enough.

* Updated the doxygen comment of AST_PJSIP_XML_PROLOG_LEN to describe the
return value of pj_xml_print() when the supplied buffer is not large
enough.

ASTERISK-25168
Reported by: Carl Fortin

Change-Id: Id70e1d373a6a2b2bd9e678b5cbc5e55b308981de
2015-07-06 15:38:15 -05:00
Richard Mudgett 8ea214aed7 PJSIP FAX: Fix T.38 automatic reject timer NULL channel pointer dereferences.
When a caller calls a FAX number and then hangs up right after the call is
answered then the T.38 re-INVITE automatic reject timer may still be
running after the channel goes away.

* Added session NULL channel checks on the code paths that get executed by
t38_automatic_reject() to prevent a crash when the T.38 re-INVITE
automatic reject timer expires.

ASTERISK-25168
Reported by: Carl Fortin

Change-Id: I07b6cd23815aedce5044f8f32543779e2f7a2403
2015-07-06 15:38:05 -05:00
Richard Mudgett ada7346792 res_pjsip: Need to use the same serializer for a pjproject SIP transaction.
All send/receive processing for a SIP transaction needs to be done under
the same threadpool serializer to prevent reentrancy problems inside
pjproject and res_pjsip.

* Add threadpool API call to get the current serializer associated with
the worker thread.

* Pick a serializer from a pool of default serializers if the caller of
res_pjsip.c:ast_sip_push_task() does not provide one.

This is a simple way to ensure that all outgoing SIP request messages are
processed under a serializer.  Otherwise, any place where a pushed task is
done that would result in an outgoing out-of-dialog request would need to
be modified to supply a serializer.  Serializers from the default
serializer pool are picked in a round robin sequence for simplicity.

A side effect is that the default serializer pool will limit the growth of
the thread pool from random tasks.  This is not necessarily a bad thing.

* Made pjsip_distributor.c save the thread's serializer name on the
outgoing request tdata struct so the response can be processed under the
same serializer.

This is a cherry-pick from master.

**** ASTERISK-25115 Change-Id: Iea71c16ce1132017b5791635e198b8c27973f40a

NOTE: session_inv_on_state_changed() is disassociating the dialog from the
session when the invite dialog becomes PJSIP_INV_STATE_DISCONNECTED.
Unfortunately this is a tad too soon because our BYE request transaction
has not completed yet.

ASTERISK-25183 #close
Reported by: Matt Jordan

Change-Id: I8bad0ae1daf18d75b8c9e55874244b7962df2d0a
2015-07-06 12:52:36 -05:00
Joshua Colp cba550df7a Merge "chan_sip: Fix early call pickup channel leak." into 13 2015-07-04 19:09:51 -05:00
Joshua Colp 55137c3d12 res/res_http_websocket: Don't send HTTP response fragmented.
This change makes it so that when accepting a WebSocket
connection the HTTP response is sent as one packet instead of
fragmented. Browsers don't like it when you send it fragmented.

ASTERISK-25103

Change-Id: I9b82c4ec2949b0bce692ad0bf6f7cea9709e7f69
2015-07-04 20:24:48 -03:00
Matt Jordan 49f81ddb85 Makefile: Remove coverage files on 'make clean'
This patch updates a variety of Makefiles in Asterisk's build system to
remove .gcda and .gcno files when 'make clean' is executed. These files
are generated when '--enable-coverage' is passed to the Asterisk
configure script.

Change-Id: Ib70b41eea2ee2908885bff02e80faf9f40c84602
2015-07-04 07:29:53 -05:00
Joshua Colp a9f721303d Merge "chan_vpb.cc: Fix compiler warning Jenkins found." into 13 2015-07-02 09:47:49 -05:00
Walter Doekes e0f565663b chan_sip: Fix early call pickup channel leak.
When handle_invite_replaces() was called, and either ast_bridge_impart()
failed or there was no bridge (because the channel we're picking up was
still ringing), chan_sip would leak a channel.

Thanks Matt and Corey for checking the bridge path.

ASTERISK-25226 #close

Change-Id: Ie736bb182170a73eef5bcef0ab0376f645c260c8
2015-07-02 16:12:32 +02:00
Matt Jordan de3678c92e Merge "sorcery/realtime: Add a bit of debug and warning messages for bad configs" into 13 2015-07-02 08:02:01 -05:00
Joshua Colp ffde1073bb Merge "res_timing: Don't close FD 0 when out of open files." into 13 2015-07-02 07:53:35 -05:00
Joshua Colp 43926568c3 Merge "rtp_engine: Skip useless self-assignment in ast_rtp_engine_unload_format." into 13 2015-07-02 07:52:29 -05:00
Joshua Colp c2f4bf142f Merge "astfd: Fix buffer overflow in DEBUG_FD_LEAKS." into 13 2015-07-02 07:51:44 -05:00
Joshua Colp c5c5c2a4ae Merge "chan_mgcp: Don't call close on fd -1." into 13 2015-07-02 07:50:41 -05:00
Walter Doekes a5a262be78 chan_mgcp: Don't call close on fd -1.
ASTERISK-25220 #close

Change-Id: Ic48f3a82f51ada87f2fb0e016c9efe0ad56f1ee3
2015-07-02 06:22:13 -05:00
Walter Doekes b835312b4c rtp_engine: Skip useless self-assignment in ast_rtp_engine_unload_format.
When running valgrind on Asterisk, it complained about:

    ==32423== Source and destination overlap in memcpy(0x85a920, 0x85a920, 304)
    ==32423==    at 0x4C2F71C: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/...)
    ==32423==    by 0x55BA91: ast_rtp_engine_unload_format (rtp_engine.c:2292)
    ==32423==    by 0x4EEFB7: ast_format_attr_unreg_interface (format.c:1437)

The code in question is a struct assignment, which may be performed by
memcpy as a compiler optimization. It is changed to only copy the struct
contents if source and destination are different.

ASTERISK-25219 #close

Change-Id: I6d3546c326b03378ca8e9b8cefd41c16e0088b9a
2015-07-02 06:18:58 -05:00
Walter Doekes 6551e16e03 astfd: Fix buffer overflow in DEBUG_FD_LEAKS.
If DEBUG_FD_LEAKS was used and more file descriptors than the default of
1024 were available, some DEBUG_FD_LEAKS-patched functions would
overwrite memory past the fixed-size (1024) fdleaks buffer.

This change:
- adds bounds checks to __ast_fdleak_fopen and __ast_fdleak_pipe
- consistently uses ARRAY_LEN() instead of sizeof() or 1023 or 1024
- stores pointers to constants instead of copying the contents
- reorders the fdleaks struct for possibly tighter packing
- adds a tiny bit of documentation

ASTERISK-25212 #close

Change-Id: Iacb69e7701c0f0a113786bd946cea5b6335a85e5
2015-07-02 05:24:33 -05:00
Walter Doekes f4dd9560cf res_timing: Don't close FD 0 when out of open files.
This fixes so a failure to get a timer file descriptor does not cascade
to closing FD 0.

On error, both res_timing_kqueue and res_timing_timerfd would call the
destructor before setting the file handle. The file handle had been
initialized to 0, causing FD 0 to be closed. This in turn, resulted in
floods of "CLI>" messages and an unusable terminal.

ASTERISK-19277 #close
Reported by: Barry Chern

For the 13 branch, this was already fixed. This patch only ensures that
we do not attempt to close a negative file descriptor.

Change-Id: I147d7e33726c6e5a2751928d56561494f5800350
2015-07-02 12:10:22 +02:00
Richard Mudgett 78a1f4aa46 chan_vpb.cc: Fix compiler warning Jenkins found.
Change-Id: I0ec7fd10d56d90d5a60b12b5a7d6807f265ac5e0
2015-07-01 17:28:08 -05:00
Scott Griepentrog 6b16fbfc22 Channel alert pipe: improve diagnostic error return
When a frame is queued on a channel, any failure in
ast_channel_alert_write is logged along with errno.

This change improves the diagnostic message through
aligning the errno value with actual failure cases.

ASTERISK-25224
Reported by: Andrey Biglari

Change-Id: I1bf7b3337ad392789a9f02c650589cd065d20b5b
2015-07-01 16:55:50 -05:00
Matt Jordan 8e07ab145d sorcery/realtime: Add a bit of debug and warning messages for bad configs
When a mapping does not exist between a sorcery.conf defined object and
a realtime mapping in extconf, currently, the user will receive a slew
of ERROR messages that don't really tell what is happening. Some ERROR
messages may even be misleading, as they occur after the sorcery API has
already given up on the attempt to load and create the sorcery object.

This patch adds a bit of debug and a useful WARNING message for when a
wizard's open callback fails for a particular object type. In the bad
configurations that resulted in this patch, this provided a 'root cause'
WARNING message that pointed in the right direction of the configuration
problem.

Change-Id: I1cc7344f2b015b8b9c85a7e6ebc8cb4753a8f80b
2015-07-01 16:33:53 -05:00
Joshua Colp 69bfa518a0 Merge "res_sorcery_realtime: Fix leak of sorcery object type." into 13 2015-06-30 07:32:03 -05:00
Matt Jordan 4c0b26b9e8 Merge "channel: Remove ignore of answer on non-outgoing channels." into 13 2015-06-30 07:07:13 -05:00
Mark Michelson 156395e743 res_sorcery_realtime: Fix leak of sorcery object type.
This prevents a leak of a sorcery object type when realtime sorcery
objects are retrieved by fields or when multiple objects are retrieved.

The extent of this leak is that sorcery object types would be leaked.
These are allocated whenever an object type is registered with sorcery,
meaning that on module shutdown, these objects would be leaked. This
could be problematic if many reloads were performed, but it is not as
severe as if every sorcery object retrieved from realtime were being
leaked.

ASTERISK-25165 #close
Reported by Corey Farrell

Change-Id: I625c3b50eee4576670b7eeb013c81ad043b4b4f8
2015-06-29 14:35:08 -05:00
Matt Jordan bfa5d38a1b Merge "res_pjsip_nat: Adjust when contact should be rewritten." into 13 2015-06-29 11:57:00 -05:00
Matt Jordan d84247a481 Merge "res/res_corosync: Always decline module load, instead of failing" into 13 2015-06-29 11:16:01 -05:00
Matt Jordan a5e9c4e9b2 res/res_corosync: Always decline module load, instead of failing
Returns a 'failure' from the module load routine indicates to Asterisk
that it should abort loading completely. This is rarely - in fact,
really, never - a good option. Aborting load of Asterisk from a dynamic
module implies that the core, and the rest of the dynamic modules, don't
matter: we should abandon all processing.

res_corosync is really not that important.

This patch updates the module such that, if it fails to load, it
politely declines (emitting ERROR messages along the way), and allows
Asterisk to continue to function.

Note that this issue was keeping Asterisk unit tests from running on
certain build agents.

Change-Id: I252249e81fb9b1a68e0da873f54f47e21d648f0f
2015-06-26 22:02:42 -05:00
Matt Jordan 399cd8bcd9 main/pbx: Resolve case sensitivity regression in PBX hints
When 8297136f was merged for ASTERISK-25040, a regression was introduced
surrounding the case sensitivity of device names within hints.
Previously, device names - such as 'sip/foo' - were compared in a case
insensitive fashion. Thus, 'sip/foo' was equivalent to 'SIP/foo'. After
that patch, only the case sensitive name would match, i.e., 'SIP/foo'.
As a result, some dialplan hints stopped working.

This patch re-introduces case insensitive matching for device names in
hints.

ASTERISK-25040

ASTERISK-25202 #close

Change-Id: If5046a7d14097e1e3c12b63092b9584bb1e9cb4c
(cherry picked from commit 96bbcf495a)
2015-06-26 21:03:40 -05:00
Mark Michelson 24eec5a10b res_pjsip_nat: Adjust when contact should be rewritten.
A previous change made the contact only get rewritten if the dialog's
route set was not marked frozen. Unfortunately, while the intent of this
is correct, the dialog's route set actually gets marked as frozen
earlier than expected, especially for UAS dialogs.

Instead, the idea is that the contact needs to not be rewritten if there
is a pre-existing route set on the dialog. This is now accomplished by
checking the dialog's route set list instead of checking if the route
set is frozen.

Doing this causes some broken tests to begin passing again.

ASTERISK-25196
Reported by Mark Michelson

Change-Id: I525ab251fd40a52ede327a52a2810a56deb0529e
2015-06-26 16:17:35 -05:00
Richard Mudgett 0ec461a637 res_pjsip_outbound_registration.c: Add a serializer shutdown group.
The client_state objects contain a serializer used to send the outbound
REGISTER messages.  Once all those message transactions are complete then
the module can shutdown.

ASTERISK-24907 #close
Reported by: Kevin Harwell

Change-Id: Ibb2fe558f98190f2a06da830e0fadfa25516f547
2015-06-26 13:44:20 -05:00
Matt Jordan 0a1700d286 Merge "threadpool, res_pjsip: Add serializer group shutdown API calls." into 13 2015-06-26 13:35:07 -05:00
Matt Jordan d8e61c04a4 Merge "res_pjsip_outbound_registration.c: Fix handle_client_state_destruction() refs" into 13 2015-06-26 13:35:01 -05:00
Matt Jordan 9b70a078f6 Merge "res_pjsip_outbound_registration.c: Use ast_sorcery_object_unregister() API" into 13 2015-06-26 13:34:38 -05:00
Matt Jordan c69c8d4e80 Merge "res_pjsip_refer: Prevent sending duplicate headers." into 13 2015-06-26 11:27:00 -05:00
Matt Jordan e5499c3233 Merge "sorcery: Add ast_sorcery_object_unregister() API call." into 13 2015-06-26 11:26:06 -05:00
Matt Jordan dc067e585f Merge "res_pjsip_outbound_registration.c: Reorder load_module() and unload_module()." into 13 2015-06-26 11:25:38 -05:00
Mark Michelson 05a2cc1293 res_pjsip_refer: Prevent sending duplicate headers.
res_pjsip_refer will attempt to add Referred-By or Replaces headers to
outbound INVITEs at times. If the INVITE gets challenged for
authentication, then we will resend the INVITE. Prior to this patch, the
Referred-By or Replaces header would be re-added to the outbound INVITE,
resulting in duplicated headers.

ASTERISK-25204 #close
Reported by Mark Michelson

Change-Id: I59fb5c08b4d253c0dba9ee3d3950b5025358222d
2015-06-26 11:02:13 -05:00
Matt Jordan 71c1c559cf Merge "AMI: Add Linkedid to the standard channel snapshot AMI event headers." into 13 2015-06-26 10:59:04 -05:00
Mark Michelson 028fa54620 res_pjsip_nat: Rewrite route set when required.
When performing some provider testing, the rewrite_contact option was
interfering with proper construction of a route set when sending an ACK
after receiving a 200 OK response to an INVITE.

The initial INVITE was sent to address sip:foo. The 200 OK had a Contact
header with URI sip:bar. In addition, the 200 OK had Record-Route
headers for sip:baz and sip:foo, in that order. Since the Record-Route
headers had the lr parameter, the result should have been:

* Set R-URI of the ACK to sip:bar.
* Add Route headers for sip:foo and sip:baz, in that order.

However, the rewrite_contact option resulted in our rewriting the
Contact header on the 200 OK to sip:foo. The result was:

* R-URI remained sip:foo.
* We added Route headers for sip:foo and sip:baz, in that order.

The result was that sip:bar was not indicated in the ACK at all, so the
far end never received our ACK. The call eventually dropped.

The intention of rewrite_contact is to rewrite the most immediate
destination of our SIP request to be the same address on which we
received a request or response. In the case of processing a SIP response
with Record-Route headers, this means that instead of rewriting the
Contact header, we should instead rewrite the bottom-most Record-Route
header. In the case of processing a SIP request with Record-Route
headers, this means we rewrite the top-most Record-route header.
Like when we rewrite the Contact header, we also ensure to update
the dialog's route set if it exists.

ASTERISK-25196 #close
Reported by Mark Michelson

Change-Id: I9702157c3603a2d0bd8a8215ac27564d366b666f
2015-06-26 09:54:02 -05:00
Richard Mudgett 84c12f9e0c threadpool, res_pjsip: Add serializer group shutdown API calls.
A module trying to unload needs to wait for all serializers it creates and
uses to complete processing before unloading.

ASTERISK-24907
Reported by: Kevin Harwell

Change-Id: I8c80b90f2f82754e8dbb02ddf3c9121e5e966059
2015-06-25 14:37:08 -05:00
Richard Mudgett 602c4b74b5 res_pjsip_outbound_registration.c: Fix handle_client_state_destruction() refs
* handle_client_state_destruction() must always be passed a ref to
client_state because it will always unref client_state.
handle_registration_response() was not passing a client_state ref.

* Made the final un-REGISTER message get sent normally using the pjproject
register control structure in handle_client_state_destruction().  The
previous code attempted to short circuit the response handling for the
module to unload.  That doesn't work for a couple reasons.  One,
pjsip_regc_send() may call the registered callback before it returns and
unbalance the client_state ref count.  Two, the registered callback
handles any authentication for the un-REGISTER message.

* Made the distinction between internal registration state and external
registration status with sip_outbound_registration_status_str().  This is
necessary to avoid altering documented AMI messages with internal
changes.

* Removed references to client_state->client outside of the serializer
thread.  When handle_client_state_destruction() destroys the pjproject
register control structure that memory is freed and cannot be referenced
anymore.  These accesses were to provide information for debug and
off-nominal warning messages.

* In sip_outbound_registration_timer_cb() you should not access entry->id
after unrefing client_state because the passed in entry is normally
pointing to the timer entry in the client_state object.

ASTERISK-24907
Reported by: Kevin Harwell

Change-Id: Ia7b446d8644b6b4550ef5bea49527671de65183f
2015-06-25 14:37:08 -05:00
Richard Mudgett 8c6a95a9ac res_pjsip_outbound_registration.c: Use ast_sorcery_object_unregister() API
The sorcery pjsip 'registration' config object needs to be destroyed on
module unload.  Otherwise, a reload of res_pjsip could try to use
callbacks for a previously unloaded instance of the module provided by
ast_sorcery_object_register() or one of the variants.  Also, if
res_pjsip_outbound_registration were subsequently reloaded, the sorcery
config field objects would be registered in sorcery twice.

ASTERISK-24907
Reported by: Kevin Harwell

Change-Id: I304fad13dece2604af48353f6c6d9d5c7b064697
2015-06-25 14:36:12 -05:00
Joshua Colp e4a2ef9e4e channel: Remove ignore of answer on non-outgoing channels.
Due to the way that channels can now be moved around inside of
Asterisk it is possible for the outgoing flag of a channel to get
cleared before it has been answered. This results in the bridge
not receiving notification that the outgoing leg has been answered.

This most easily exhibits itself with DTMF based blond transfers.
Since the answer of the outgoing leg is ignored the other party
continues to receive both a locally generated ringing and the
media stream of the outgoing leg upon its answer. This results
in no media being heard.

This change removes the ignore of the answer and allows it
to pass through.

ASTERISK-25171 #close

Change-Id: I82aedcec4f89f34a2e5472086dfc9a6c775bca8e
2015-06-25 15:16:24 -03:00
Richard Mudgett 20f3d77ab9 sorcery: Add ast_sorcery_object_unregister() API call.
Find and unlink the specified sorcery object type to complement
ast_sorcery_object_register().  Without this function you cannot
completely unload individual modules that use sorcery for configuration.

ASTERISK-24907
Reported by: Kevin Harwell

Change-Id: I1c04634fe9a90921bf676725c7d6bb2aeaab1c88
2015-06-25 11:33:41 -05:00
Richard Mudgett 4313f32969 res_pjsip_outbound_registration.c: Reorder load_module() and unload_module().
It is best if the loading code creates and initializes the module's
infrastructure before letting the system know of its existence.  The
unloading code needs to reverse the actions of the loading code and in the
reverse order.

ASTERISK-24907
Reported by: Kevin Harwell

Change-Id: I5d151383e9787b5b60aa5e1627b10f040acdded4
2015-06-25 11:33:41 -05:00
Richard Mudgett 890c923786 AMI: Add Linkedid to the standard channel snapshot AMI event headers.
* The AMI version is bumped to 2.8.0.

ASTERISK-25189 #close
Reported by: John Hardin

Change-Id: I2b1778c3fdc1dca0ed55db4e3a639eddfb16c2ac
2015-06-25 11:17:09 -05:00
Mark Michelson db0521f905 Merge "res_pjsip_mwi: Set up unsolicited MWI upon registration." into 13 2015-06-25 09:52:04 -05:00
Joshua Colp 61658dd219 Merge "test.c: Add unit test registration checks for summary and description." into 13 2015-06-25 04:51:37 -05:00
Joshua Colp 282b5f3c85 Merge "Unit tests: Fix unit test description strings." into 13 2015-06-25 04:50:22 -05:00
Richard Mudgett 2602a7484b test.c: Add unit test registration checks for summary and description.
Added checks when a unit test is registered to see that the summary and
description strings do not end with a new-line '\n' for consistency.

The check generates a warning message and will cause the
/main/test/registrations unit test to fail.

* Updated struct ast_test_info member doxygen comments.

Change-Id: I295909b6bc013ed9b6882e85c05287082497534d
2015-06-24 17:12:19 -05:00
Richard Mudgett 2b0482d699 Unit tests: Fix unit test description strings.
Analyzing the code shows that the unit test summary and description
strings should not end with a new-line character.  Where these strings are
used in the code a new-line is provided for output.

Change-Id: I129284f5e7ca93d82532334076da4c462d3d9fba
2015-06-24 17:11:56 -05:00
Matt Jordan f31fb5d54e Merge "app_dial: Hold reference to calling channel formats when dialing outbound." into 13 2015-06-24 17:07:00 -05:00
Joshua Colp e99e654d75 app_dial: Hold reference to calling channel formats when dialing outbound.
Currently when requesting a channel the native formats of the
calling channel are provided to the core for usage when dialing
the outbound channel. This occurs without holding the channel lock
or keeping a reference to the formats. This is problematic as
the channel driver may end up changing the formats during this time.
In the case of chan_sip this happens when an SDP negotiation
completes.

This change makes it so app_dial keeps a reference to the native
formats of the calling channel which guarantees that they will
remain valid for the period of time needed.

ASTERISK-25172 #close

Change-Id: I2f0a67bd0d5d14c3bdbaae552b4b1613a283f0db
2015-06-24 13:50:55 -05:00
Matt Jordan 6264dbf02d Merge "res_pjsip_outbound_registration.c: Add missing line endings to CLI commands" into 13 2015-06-24 08:38:52 -05:00
Matt Jordan b240c3fa63 Merge "res_pjsip_outbound_registration.c: Eliminate simple RAII_VAR() usage." into 13 2015-06-24 08:38:36 -05:00
Matt Jordan d75d96f57d Merge "res_pjsip_outbound_registration.c: Misc code cleanups." into 13 2015-06-24 08:37:45 -05:00
Matt Jordan 681790ef01 Merge "bridge.c: Hangup attended transfer target if bridged" into 13 2015-06-23 11:36:35 -05:00
Joshua Colp 80e82dc97f res_pjsip_mwi: Set up unsolicited MWI upon registration.
The res_pjsip_mwi previously required a reload to set up the proper
subscriptions to allow unsolicited MWI to work. This change
makes it so the act of registering will also cause this to occur.
This is particularly useful if realtime is involved as no reload
needs to occur within Asterisk to cause the MWI information
to get sent.

ASTERISK-25180 #close

Change-Id: Id847b47de4b8b3ab8858455ccc2f07b0f915f252
2015-06-23 10:12:38 -03:00
Kevin Harwell 35a99b6394 bridge.c: Hangup attended transfer target if bridged
After completing an attended transfer the transfer target channel was not being
hung up after leaving the bridge. Added an explicit softhangup to hangup said
channel, but only if it was previously bridged.

ASTERISK-24782 #close
Reported by: John Bigelow

Change-Id: Idde9543d56842369384a5e8c00d72a22bbc39ada
2015-06-22 15:11:18 -05:00
Richard Mudgett 036bc0012f res_pjsip_outbound_registration.c: Add missing line endings to CLI commands
Change-Id: I39ae612746d892d2dbe86f3ff2d7027fa1da57f7
2015-06-22 14:12:59 -05:00
Richard Mudgett bec7435945 res_pjsip_outbound_registration.c: Eliminate simple RAII_VAR() usage.
Change-Id: I399cb9d61bbba706b48c98e0bf75e98984cd9a9e
2015-06-22 12:00:20 -05:00
Richard Mudgett c2519fdf1c res_pjsip_outbound_registration.c: Misc code cleanups.
* Break some long lines.

* Fix doxygen comment.

Change-Id: I8f12ba6822f84d5e7bb575280270cd7e2fefb305
2015-06-22 12:00:20 -05:00
Alexander Traud a419c69def chan_sip: Reload peer without its old capabilities.
On reload, previously allowed codecs were not removed. Therefore, it was not
possible to remove codecs while Asterisk was running. Furthermore, newly added
codecs got appended behind the previous codecs. Therefore, it was not possible
to add a codec with a priority of #1. This change removes the old capabilities
before the current ones are added.

ASTERISK-25182 #close
Reported by: Alexander Traud
patches:
 asterisk_13_allow_codec_reload.patch uploaded by Alexander Traud (License 6520)

Change-Id: I62a06bcf15e08e8c54a35612195f97179ebe5802
2015-06-22 09:49:50 -05:00
Joshua Colp 74616ae43d chan_sip: Destroy peers without holding peers container lock.
Due to the use of stasis_unsubscribe_and_join in the peer destructor
it is possible for a deadlock to occur when an event callback is
occurring at the same time.

This happens because the peer may be destroyed while holding the
peers container lock. If this occurs the event callback will never
be able to acquire the container lock and the unsubscribe will
never complete.

This change makes it so the peers that have been removed from the
peers container are not destroyed with the container lock held.

ASTERISK-25163 #close

Change-Id: Ic6bf1d9da4310142a4d196c45ddefb99317d9a33
2015-06-20 21:44:48 -03:00
Mark Michelson 9015bb4c8c Resolve race conditions involving Stasis bridges.
This resolves two observed race conditions.

First, a bit of background on what the Stasis application does:

1a Creates a stasis_app_control structure. This structure is linked into
   a global container and can be looked up using a channel's unique ID.
2a Puts the channel in an event loop. The event loop can exit either
   because the stasis_app_control structure has been marked done, or
   because of some other factor, such as a hangup. In the event loop, the
   stasis_app_control determines if any specific ARI commands need to be
   run on the channel and will run them from this thread.
3a Checks if the channel is bridged. If the channel is bridged, then
   ast_bridge_depart() is called since channels that are added to Stasis
   bridges are always imparted as departable.
4a Unlink the stasis_app_control from the container.

When an ARI command is received by Asterisk, the following occurs
1b A thread is spawned to handle the HTTP request
2b The stasis_app_control(s) that corresponds to the channel(s) in the
   request is/are retrieved. If the stasis_app_control cannot be
   retrieved, then it is assumed that the channel in question has exited
   the Stasis app or perhaps was never in Stasis in the first place.
3b A command is queued onto the stasis_app_control, and the channel's
   event loop thread is signaled to run the command.
4b While most ARI commands do nothing further, some, such as adding or
   removing channels from a bridge, will block until the command they
   issued has been completed by the channel's event loop.

The first race condition that is solved by this patch involves a crash
that can occur due to faulty detection of the channel's bridged status
in step 3a. What can happen is that in step 2a, the event loop may run
the ast_bridge_impart() function to asynchronously place the channel
into a bridge, then immediately exit the event loop because the channel
has hung up. In step 3a, we would detect that the channel was not
bridged and would not call ast_bridge_depart(). The reason that the
channel did not appear to be bridged was that the depart_thread that is
spawned by ast_bridge_impart() had not yet started. That is the thread
where the channel is marked as being bridged. Since we did not call
ast_bridge_depart(), the Stasis application would exit, and then the
channel would be destroyed Then the depart_thread would start up and
try to manipulate the destroyed channel, causing a crash.

The fix for this is to switch from using ast_channel_is_bridged() to
checking the NULLity of ast_channel_internal_bridge_channel() to
determine if ast_bridge_depart() needs to be called. The channel's
internal bridge_channel is set when ast_bridge_impart() is called and
is NULLed by the call to ast_bridge_depart(). If the channel's internal
bridge_channel is non-NULL, then the channel must have been imparted
into the bridge and needs to be departed, even if the actual bridging
operation has not yet started. By departing the channel when necessary,
the thread that is running the Stasis application will block until the
bridge gives the okay that the depart_thread has exited.

The second race condition that is solved by this patch involves a leak
of HTTP handler threads. The problem was that step 2b would successfully
retrieve a stasis_app_control structure. Then step 2a would exit the
channel from the event loop due to a hangup. Steps 3a and 4a would
execute, and then finally steps 3b and 4b would. The problem is that at
step 4b, when attempting to add a channel to a bridge, the thread would
block forever since the channel would never execute the queued command
since it was finished with the event loop. This meant that the HTTP
handling thread would be leaked, along with any references that thread
may have owned (in my case, I was seeing bridges leaked).

The fix for this is to hone in better on when the channel has exited the
event loop. The stasis_app_control structure has an is_done field that
is now set at each point where the channel may exit the event loop. If
step 2b retrieves a valid stasis_app_control structure but the control
is marked as done, then the attempted operation exits immediately since
there will be nothing to service the attempted command.

ASTERISK-25091 #close
Reported by Ilya Trikoz

Change-Id: If66265b73b4c9f8f58599124d777fedc54576628
2015-06-18 16:19:08 -05:00
Mark Michelson 723a9d4225 Parking: Add documentation for AMI ParkedCallSwap event.
This event was added some time ago in order to clarify when a channel
took the place of another channel in a parking lot. However, there was
no XML documentation added for the event. This patch adds the XML
documentation.

ASTERISK-24900 #close
Reported by Rusty Newton

Change-Id: I4cfe7777c4b94bbff91c9221c6096a7a02a92eac
2015-06-16 11:21:51 -05:00
Joshua Colp fd21dc34c2 Merge "res_pjsip: Add option to force G.726 to be treated as AAL2 packed." into 13 2015-06-16 07:51:13 -05:00
Corey Farrell 79bf56c78a func_pjsip_aor: Fix leaked contact from iterator.
ASTERISK-25162 #close

Change-Id: Id79aa3c6fe490016ee98efc97ac4c1d3f461f97e
2015-06-15 17:40:54 -04:00
Kevin Harwell 31c77b157b res_pjsip: Add option to force G.726 to be treated as AAL2 packed.
Some phones send g.726 audio packed for AAL2, which differs from what is
recommended by RFC 3351. If Asterisk receives audio formatted as such when
negotiating g.726 then it sounds a bit distorted. Added an option to
res_pjsip_endpoint that allows g.726 negotiated audio to be treated as g.726
AAL2 packed.

ASTERISK-25158 #close
Reported by: Steve Pitts

Change-Id: Ie7e21f75493d7fe53e75e12c971e72f5afa33615
2015-06-15 12:35:53 -05:00
mjordan de8c7f46ed main/cdr: Carry over the disable flag when 'disable all' is specified
The CDR_PROP function (as well as the NoCDR application) set the
'disable all' flag (AST_CDR_FLAG_DISABLE_ALL) on the current CDR. This
flag is supposed to be applied to all CDRs that are currently in the
chain, as well as all CDRs that may be created in the future. Currently,
however, the flag is only applied to the existing CDRs in the chain; new
CDRs do not receive the 'disable all' flag. In particular, this affects
parallel dials, which generate new CDRs for each pair of channels in
the dial attempt.

This patch carries over the 'disable all' flag when it is specified on a
CDR and a new CDR is generated for the chain.

ASTERISK-24344 #close

Change-Id: I91a0f0031e4d147bdf8a68ecd08304d506fb6a0e
2015-06-15 10:34:44 -05:00
Matt Jordan 78ea356e78 main/cdr: Copy context/exten on chained CDRs for parallel dials in subroutines
When a parallel dial occurs, a new CDR will be created for each dial
attempt that is made. In most circumstances, the act of creating each
CDR in the chain will include a step that updates the Party A snapshot,
which causes the context/extension of the Party A to be copied onto the
CDR object.

However, when the Party A is in a subroutine, we explicitly do *not*
copy the context/extension onto the CDR. This prevents the Macro or
GoSub routine name from blowing away the context/extension that the
channel was originally executing in. For the original CDR, this is not a
problem: the original CDR already recorded the last known 'good' state
of the channel just prior to it going into the subroutine. However, for
newly generated CDRs in a chain, there is no context/extension set on
them. Since we are in a subroutine, we will never set the Party A's
context/extension on the CDR, and we end up with a CDR with no
destination recorded on it.

This patch updates the creation of a chained CDR such that it copies
over the original CDR's context/extension. This is the last known "good"
state of the CDR, and is a reasonable starting point for the newly
generated CDR. In the case where we are not in a subroutine, subsequent
code will update the location of the CDR from the Party A information;
in the case where we are in a subroutine, the context/extension on the
original CDR is the correct information.

ASTERISK-24443 #close

Change-Id: I6a3ef0d6e458d3b9b30572feaec70f2964f3bc2a
2015-06-13 08:42:50 -05:00
Matt Jordan 0b8b952921 Merge "bridge: When performing a blonde transfer update connected line information." into 13 2015-06-13 08:36:41 -05:00
Mark Michelson 2618d1e638 Merge "chan_sip.c: Update dialog fromtag after request with auth" into 13 2015-06-12 16:02:25 -05:00
Mark Michelson 0b233ea61d Merge "app_directory: Fix crash when using the alias option 'a'." into 13 2015-06-12 16:01:54 -05:00
Damian Ivereigh 3f57f3f8ec chan_sip.c: Update dialog fromtag after request with auth
If a client sends and INVITE which is 401 rejected, then subsequently
sends a new INVITE with the auth info and uses a different fromtag
from the first INVITE, Asterisk will accept the new INVITE as part of
the original dialog - match_req_to_dialog() specifically ignores the
fromtag. However it does not update the stored dialog with the new
fromtag.

This results in Asterisk being unable to match future packets that are
part of this dialog (such as the ACK to the OK or the OK to the BYE),
and the call is dropped.

This problem was originally found when using an NEC-i SV8100-GE (NEC SIP
Card).

* After a successful match of a packet to the dialog, if the packet is
  not a SIP_RESPONSE, authentication is present and the fromtags are
  different, the stored fromtag is updated with the one from the recent
  INVITE.

ASTERISK-25154 #close
Reported by: Damian Ivereigh
Tested by: Damian Ivereigh

Change-Id: I5c16cf3b409e5ef9f2b2fe974b6bd2a45a6aa17e
2015-06-12 23:54:56 +10:00
Matt Jordan 30a0f2d9ac chan_pjsip: Set the context and extension on the channel when created
Prior to this patch, chan_pjsip was failing to pass the endpoint's
context and the desired extension to the ast_channel_alloc_* routine.
This caused a new channel snapshot to be issued without a context and
extension, which can cause some reporting issues for users of AMI, CEL,
and other APIs. The channel driver would later set the context and
extension on the channel such that the channel would start in the
correct location in the dialplan, but the information reported in the
initial event would be incorrect.

This patch modifies the channel driver such that it now passes the
context and extension directly into the allocation routine. This
provides the information in the new channel snapshot published over
Stasis.

ASTERISK-25156 #close
Reported by: cloos

Change-Id: Ic6f8542836e596db8f662071d118e8f934fdf25e
2015-06-11 19:04:48 -05:00
Joshua Colp dbb067279e bridge: When performing a blonde transfer update connected line information.
When performing a blonde transfer the code uses the old masquerade
mechanism to move a channel around. As a result of this certain information,
such as connected line, is moved between the channels involved. Upon
completion of the move a frame is queued which is supposed to update the
connected line information on the channel. This does not occur as the
code considers it a redundant update since the masquerade operation
updated the channel (but did not inform it of the new connected line
information). The code also does not queue a connected line update
to be handled by the thread handling the channel. Without this any
other channel that may be loosely involved does not know it is
talking to a different caller.

This change does the following to resolve this:

1. The indicated connected line information is cleared upon
completion of the masquerade operation when doing a blonde transfer.
This prevents the connected line update from being considered
redundant.

2. A connected line update frame is now queued upon the completion
of the masquerade operation so any other channel loosely involved
knows that there is a different caller.

ASTERISK-25157 #close
Reported by: Joshua Colp

Change-Id: Ibb8798184a1dab3ecd35299faecc420034adbf20
2015-06-11 19:02:25 -03:00
Richard Mudgett a2f4d03c87 app_directory: Fix crash when using the alias option 'a'.
The voicemail.conf mailbox key/value pair is defined as:
<mailbox>=[<password>[,<full-name>[,<email>[,<pager>[,<options>]]]]]
Where all fields in the value including the field values are optional.

Since the parsing code for the mailbox key/value pair is sloppy, this
patch tightens the parsing for the directory information.

* Renamed the 'pos' and 'bufptr' variables to 'name' and 'options'
respectively in search_directory_sub().  Those names make more sense.

* Made sure that search_directory_sub() is dealing with the voicemail.conf
mailbox options field if it even exists when looking for the 'hidefromdir'
and 'alias' options.

* Fix crash if a voicemail.conf mailbox is just
<mailbox>=<password>,<name> when the 'a' option is used.  If there were no
fields after the name then the 'options' pointer was not checked for NULL.

* Fix users.conf alias processing if the 'a' option is used.  The wrong
variable was used.

ASTERISK-25087 #close
Reported by: Chet Stevens

Change-Id: I86052ea77307beddddba5279824d39dc0d593374
2015-06-11 14:39:45 -05:00
Mark Michelson 006930ee51 Merge "res_pjsip.h: Fix some doxygen comments." into 13 2015-06-10 15:53:35 -05:00
Richard Mudgett a2b718f4f6 res_pjsip.h: Fix some doxygen comments.
Change-Id: I4615771077c3c6a0a7273da6d7b5f77af7e8d976
2015-06-10 13:29:58 -05:00
Richard Mudgett 32ddf6d86b taskprocessor.c: Remove extra unref from off-nominal path.
Change-Id: Iee3bd8c8a528776056972066698fe735f0f6cf60
2015-06-10 13:12:09 -05:00
Yousf Ateya cf98c744d5 chan_iax2: Prevent deadlock between hangup and sending lagrq/ping
channels/chan_iax.c: Prevent the deadlock between iax2_hangup and send_lagrq/
send_ping. This deadlock happens because the scheduled task send_lagrq(or
send_ping) starts execution after the call hangup procedure starts but before
it deletes the tasks in the scheduler.

The solution is to delete scheduled lagrq (and ping) task asynchronously
(i.e. schedule AST_SCHED_DEL for these tasks); By this, AST_SCHED_DEL will
be called in a new context (doesn't have callno locked).

This commit also cleans up the procedure of sending LAGRQ and PING.

main/sched.c: Do not assert when deleting non existant entry from scheduler.
This assert seems to be the reason for a lot of awkward code to avoid it.

ASTERISK-24983 #close
Reported by: Y Ateya

Change-Id: I03bec1fc8faacb89630269e935fa667c6d6c080c
2015-06-10 12:05:43 -05:00
Mark Michelson d55d17027c Merge "weakref attribute detection broken with gcc 4.6 and higher" into 13 2015-06-10 10:38:26 -05:00
Ivan Poddubny 8af6c9cf6b res_pjsip_transport_websocket: Fix use-after-free bugs.
This patch fixes use-after-free bugs caught by AddressSanitizer.

1. PJSIP transport manager may decide to destroy transport on its own.
For example, when the contact registered via websocket has not renewed
its registration in time. The transport was destoyed, but the websocket
listener thread was still active until the socket closes, and then tried
to call transport_shutdown on transport that has been freed.

Also, the transport destructor accessed wstransport->rdata.tp_info.pool
right after freeing memory that contained wstransport itself.

This patch converts transport to an ao2 object, allowing it to be
refcounted, so that it is available until both websocket listener and
pjsip transport manager are finished with it.

2. The websocket listener deletes the last reference on websocket session
when the tcp connection is closed, and it gets destroyed, but
the transport manager may still use it, for example when disconnect
happens in the middle of a SIP transaction.

A new reference to websocket session has been added that is released
with the transport to prevent this.

ASTERISK-25096 #close
Reported by: Josh Kitchens

ASTERISK-24963 #close
Reported by: Badalian Vyacheslav

Change-Id: Idc0b63eb6e459c1ddfb2430127d34b3c4d8d373b
2015-06-10 09:38:37 -05:00
ibercom 3046bc17ed weakref attribute detection broken with gcc 4.6 and higher
GCC 4.7 Manual:
http://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Function-Attributes.html

weakref ("target")

A weak reference is an alias that does not by itself require a definition
to be given for the target symbol.

ASTERISK-22559 #close
Reported by: Ibercom

Change-Id: I36a136cae947b65187a697533416f9ff9a0b8cdf
2015-06-10 04:24:31 -05:00
Matt Jordan 8ea1c0aa81 Merge "Fix unsafe uses of ast_context pointers." into 13 2015-06-09 06:57:47 -05:00
Matt Jordan e29f28e7a5 Merge "AMI: Escape string values." into 13 2015-06-08 13:16:13 -05:00
Corey Farrell 55c8daf88b Fix unsafe uses of ast_context pointers.
Although ast_context_find, ast_context_find_or_create and
ast_context_destroy perform locking of the contexts table,
any context pointer can become invalid at any time that the
contexts table is unlocked. This change adds locking around
all complete operations involving these functions.

Places where ast_context_find was followed by ast_context_destroy
have been replaced with calls ast_context_destroy_by_name.

ASTERISK-25094 #close
Reported by: Corey Farrell

Change-Id: I1866b6787730c9c4f3f836b6133ffe9c820734fa
2015-06-08 11:09:22 -04:00
Joshua Colp 720251f2b8 Merge "Fixes for OS X" into 13 2015-06-05 13:20:39 -05:00
ibercom e0090216db CLI: Cosmetic issue - core show uptime
Show uptime information ends with an unnecessary space.

Now NEEDCOMMA is better defined.

Change-Id: I11b360504a0703309ff51772ff8f672287f3c5a1
2015-06-05 02:16:24 -05:00
Mark Michelson 88212ccb7f res_pjsip: Prevent access of NULL channels.
It is possible to receive incoming requests or responses after the channel
on an ast_sip_session has been destroyed and NULLed out. Handlers of these
sorts of requests or responses need to be prepared for the possibility
that the channel is NULL or else they could cause a crash.

While several places have been amended to deal with NULL channels, there
were still a couple of places that needed updating.

res_pjsip_dtmf_info.c: When handling incoming INFO requests, we need to
return early if there is no channel on the session.

res_pjsip_session.c: When handling a 302 response, we need to stop the
redirecting attempt if there is no channel on the session.

ASTERISK-25148 #close
reported by Mark Michelson

Change-Id: Id1a75ffc3d0eaa168b0b28188fb54d6cf9fc47a9
2015-06-03 17:43:33 -05:00
Kevin Harwell f5d5aa67dc AMI: Escape string values.
So this issue is a bit complicated. Since it is possible to pass values to AMI
that contain a '\r\n' (or other similar sequences) these values need to be
escaped. One way to solve this is to escape the values and then pass the escaped
values to the AMI variable parameter string building function. However, this
puts the onus on the pre-build function to escape all string values. This
potentially requires a fair amount of changes along with a lot of string
allocations/freeing for all values.

Surely there is a way to push this complexity down a level into the string
building function itself? This of course is possible, but ends up requiring a
way to distinguish between strings that need to be escaped and those that don't.
The best way to handle this is by introducing a new format specifier in the
format string. For instance a %s (no escape) and %S (escape). However, that is
a bit weird and unexpected.

So faced with those possibilities this patch implements a limited version of the
first option. Instead of attempting to escape all string values this patch only
escapes those values that make sense. This approach limits the number of changes
and doesn't suffer from the odd format specifier problem.

ASTERISK-24934 #close
Reported by: warren smith

Change-Id: Ib55a5b84fe0481b0f2caaaab68c566f392c0aac0
2015-06-03 14:03:18 -05:00
George Joseph 5dc9fb4198 res_pjsip/location: Fix ref leak in contact_apply_handler
contact_apply_handler calls ast_res_pjsip_find_or_create_contact_status
to force the creation of a contact_status object whenever a new
contact is added but it didn't unref the returned object.

Added an ao2_cleanup(status) to plug the leak.

ASTERISK-25141

Change-Id: Icc1401cae142855a1abc86ab5179dfb3ee861c40
Reported-by: Corey Farrell
2015-06-03 12:17:58 -06:00
David M. Lee d908272b7e Fixes for OS X
* Add some type casting so tv_usec can really be a long, instead of
   some strange platform specific type.

 * Add some .dylib style files to .gitignore.

 * Switch from using -Xlinker to -Wl,. For [reasons unknown][], newer
   versions of GCC, when compiling the Homebrew formula for Asterisk,
   are not properly passing the -Xlinker options to the linker. Given
   that -Wl, does exactly the [same thing][], and does it properly, this
   patch changes the -Xlinker options to use -Wl, instead.

 [reasons unknown]: http://bit.ly/1SUbEYx
 [same thing]: https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

Change-Id: Id5e6b3c6cc86282ea5fca630dc3991137c5bf4dd
2015-06-02 16:27:51 -05:00
Matt Jordan bc70904c05 Merge "res_pjsip_session: Fix in-dialog authentication." into 13 2015-06-02 09:29:27 -05:00
Mark Michelson 1e3701a529 Merge "Fix buffer overflow in slin sample frames generation." into 13 2015-06-01 16:08:29 -05:00
Corey Farrell 9e7827e3ac pjsip_configuration: Fix leak in persistent_endpoint_update_state.
The loop to find the first available contact of an endpoint grabbed
contact from the iterator, then checked for offline state.  This
caused the first contact after the state was found to leak a reference.

ASTERISK-25141

Change-Id: Id0f1d87410fc63742db0594eb4b18b36e99aec08
2015-06-01 03:07:56 -05:00
Ivan Poddubny 888bb49618 Fix buffer overflow in slin sample frames generation.
The length of frames retured by sample functions was twice as large as
real, what caused global buffer overflow caught by AddressSanitizer.

ASTERISK-24717 #close
Reported by: Badalian Vyacheslav

Change-Id: Iec2fe682aef13e556684912f906bedf7c18229c6
2015-05-31 12:29:58 -05:00
George Joseph 857166b5e5 res_pjsip/location: Fix memory leak in permanent_uri_handler
When permanent_uri_handler was creating the contact status
object for each contact, it wasn't unreffing it at the
end of the loop.

ASTERISK-25141 #close
Reported-by: Corey Farrell

Change-Id: I7bb127994677bb3d459f87952f8425c9b9967b12
2015-05-29 15:33:03 -06:00
George Joseph 1558a89129 Revert "endpoint/stasis: Eliminate duplicate events on endpoint status change"
This reverts commit 35c699086a.

Change-Id: Ia98c2b4820cf579a5b9bb75e9e05d7a233205fb7
2015-05-29 14:52:23 -05:00
George Joseph 35c699086a endpoint/stasis: Eliminate duplicate events on endpoint status change
When an endpoint was created, it's messages were being forwarded to
both the tech endpoint topic and the all endpoints topic.  Since
the tech topic was also forwarded to all, this was resulting in
duplicate messages whenever an endpoint published.  This patch
causes the endpoint to only forward to the tech topic and lets
the tech topic forward to all.

To accomplish this, the existing stasis_cp_single_create function
(which both creates and forwards) was cloned and split into 2
functions, one that creates the topic and one that sets up the
forwarding.  This allows endpoint_internal_create to create
the topic from the endpoint_all cache without forwarding it there,
then allows it to do the forward to the tech's topic.

ASTERISK-25137 #close
Reported-by: Vitezslav Novy
ASTERISK-25116 #close
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>

Change-Id: I26d7d4926a0861748fd3bdffe316b75b549a801c
2015-05-27 16:14:55 -06:00
Richard Mudgett fe21f2e52f res_pjsip_session: Fix in-dialog authentication.
When the remote peer requires authentication for in-dialog requests then
re-INVITEs to the peer cause the call to be disconnected and other
in-dialog requests to the peer like MESSAGE just don't go through.

* Made session_inv_on_tsx_state_changed() handle in-dialog authentication
for re-INVITEs and other methods.  Initial INVITEs cannot be handled here
because the INVITE transaction must be restarted earlier.

* Pulled needed code from res/res_pjsip/pjsip_outbound_auth.c in
preparation for removing the file.  The generic outbound authentication
code did not work as well as anticipated.

* Created outbound_invite_auth() to only handle initial outbound INVITEs.
Re-INVITEs cannot be handled here.  The re-INVITE transaction is still in
progress and the PJSIP library cannot handle the overlapping INVITE
transactions.  Other method types should not be handled here as this code
only works on outgoing calls and we need to handle incoming and outgoing
calls.

ASTERISK-25131 #close
Reported by: Richard Mudgett

Change-Id: I12bdd7ddccc819b4ce4b091e826d1e26334601b0
2015-05-27 15:10:49 -05:00
George Joseph 262d590819 res_pjsip: Add AMI events for chan_pjsip contact lifecycle changes
Add a new ContactStatus AMI event.
Publish the following status/state changes:
Created
Removed
Reachable
Unreachable
Unknown

Contact URI, new status/state, aor and endpoint names, and the
last qualify rtt result are included in the event.

ASTERISK-25114 #close

Change-Id: Id25aae5f7122facba183273efb3e8f36c20fb61e
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-05-26 15:32:45 -06:00
Joshua Colp 87c03b792b Merge "Astobj2: Correctly treat hash_fn returning INT_MIN" into 13 2015-05-26 16:07:13 -05:00
Joshua Colp 5a42397018 sorcery: Fix cache creation callback.
The cache creation callback function expects to receive a sorcery_details
structure and not just a standalone object.

Change-Id: I3e4a5a137cb25292eb52d7a14cbb6daa09213450
2015-05-26 09:44:18 -03:00
Ivan Poddubny 97a6ce1717 Astobj2: Correctly treat hash_fn returning INT_MIN
The code in astobj2_hash.c wrongly assumed that abs(int) is always > 0.
However, abs(INT_MIN) = INT_MIN and is still negative, as well as
abs(INT_MIN) % num_buckets, and as a result this led to a crash.

One way to trigger the bug is using host=::80 or 0.0.0.128 in peer
configuration section in chan_sip or chan_iax.

This patch takes the remainder before applying abs, so that bucket
number is always in range.

ASTERISK-25100 #close
Reported by: Mark Petersen

Change-Id: Id6981400ad526f47e10bcf7b847b62bd2785e899
2015-05-25 02:17:48 -05:00
Matt Jordan b9826bf101 Merge "Stasis: Fix unsafe use of stasis_unsubscribe in modules." into 13 2015-05-24 13:56:12 -05:00
Ivan Poddubny 554bd1e39c res_pjsip_transport_websocket: Fix crash on receiving large SIP packets
Incoming SIP packets larger than PJSIP_MAX_PKT_LEN were themselves
truncated before passing to pjsip_tpmgr_receive_packet, but the length
was passed unaltered, thus causing memory corruption and segfault.

ASTERISK-25122 #close

Change-Id: I608a6b6b7f229eacc33a0a7d771d18e27e5b08ab
2015-05-23 05:18:53 -05:00
Corey Farrell 0d266cbe02 Stasis: Fix unsafe use of stasis_unsubscribe in modules.
Many uses of stasis_unsubscribe in modules can be reached through unload.
These have been switched to stasis_unsubscribe_and_join.

Some subscription callbacks do nothing, for these I've created a noop
callback function in stasis.c.  This is used by some modules that monitor
MWI topics in order to enable cache, since the callback does not become
invalid after dlclose it is safe to use stasis_unsubscribe on these, even
during module unload.

ASTERISK-25121 #close

Change-Id: Ifc2549fbd8eef7d703c222978e8f452e2972189c
2015-05-22 22:58:32 -04:00
Matt Jordan eaabc4d04c Merge "res/res_pjsip_pubsub: Note that 'dialog' is also a valid event type for RLS" into 13 2015-05-22 12:28:18 -05:00
Matt Jordan 4690bc81f7 Merge "res/res_pjsip_exten_state: Fix confusing NOTICE message" into 13 2015-05-22 12:25:06 -05:00
Matt Jordan 51ffed5e61 res/res_pjsip_pubsub: Note that 'dialog' is also a valid event type for RLS
In addition to specifying lists of 'presence' and 'message-summary',
users can also create lists of type 'dialog'. These should be treated in
the same fashion as 'presence'.

Change-Id: I583bb69cd9f88b0b29bf09ddaddeac4e84189f6e
2015-05-22 12:22:39 -05:00
Matt Jordan 7950b65e4f res/res_pjsip_exten_state: Fix confusing NOTICE message
When a SUBSCRIBE request is made to a dialplan hint that doesn't exist,
the current NOTICE message informing users of this swaps the context and
extension parameters. This can cause a bit of confusion.

Thanks to CptBurger in #asterisk for helping to point this out.

Change-Id: Ie584d1a58ae217385c87a450ca25b55ca0e36e43
2015-05-22 12:18:31 -05:00
Matt Jordan ea8620a51b Merge "res/ari: Register Stasis application on WebSocket attempt" into 13 2015-05-22 11:19:51 -05:00
Matt Jordan 5ac65ddfb4 res/ari: Register Stasis application on WebSocket attempt
Prior to this patch, when a WebSocket connection is made, ARI would not
be informed of the connection until after the WebSocket layer had
accepted the connection. This created a brief race condition where the
ARI client would be notified that it was connected, a channel would be
sent into the Stasis dialplan application, but ARI would not yet have
registered the Stasis application presented in the HTTP request that
established the WebSocket.

This patch resolves this issue by doing the following:
 * When a WebSocket attempt is made, a callback is made into the ARI
   application layer, which verifies and registers the apps presented in
   the HTTP request. Because we do not yet have a WebSocket, we cannot
   have an event session for the corresponding applications. Some
   defensive checks were thus added to make the application objects
   tolerant to a NULL event session.
 * When a WebSocket connection is made, the registered application is
   updated with the newly created event session that wraps the WebSocket
   connection.

ASTERISK-24988 #close
Reported by: Joshua Colp

Change-Id: Ia5dc60dc2b6bee76cd5aff0f69dd53b36e83f636
2015-05-22 11:12:03 -05:00
Joshua Colp 1b475a8410 Merge "res_pjsip: Refactor endpt_send_transaction (qualify_timeout)" into 13 2015-05-22 10:40:48 -05:00
Matt Jordan 02dfb118ba Merge "res_pjsip_outbound_registration: Check request URI for line." into 13 2015-05-22 10:38:26 -05:00
George Joseph 60e2fbfe62 res_pjsip: Refactor endpt_send_transaction (qualify_timeout)
This patch refactors the transaction timeout processing to eliminate
calling the lower level public pjsip functions and reverts to calling
pjsip_endpt_send_request again.  This is the result of me noticing
a possible incompatibility with pjproject-2.4 which was causing
contact status flapping.

The original version of this feature used the lower level calls to
get access to the tsx structure in order to cancel the transaction
when our own timer expires. Since we no longer have that access,
if our own timer expires before the pjsip timer, we call the callbacks
and just let the pjsip transaction take it's own course.  When the
transaction ends, it discovers the callbacks have already been run
and just cleans itself up.

A few messages in pjsip_configuration were also added/cleaned up.

ASTERISK-25105 #close

Change-Id: I0810f3999cf63f3a72607bbecac36af0a957f33e
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-05-22 10:18:07 -05:00
demon-ru 42476e6633 res_pjsip_outbound_registration: Check request URI for line.
When an inbound call is received the To header is checked
for the "line" option. Some remote servers will place this
in the request URI instead. This adds an additional check for
the option in the request URI.

ASTERISK-25072 #close
Reported by: Dmitriy Serov

Change-Id: Id4e44debbb80baad623b914a88574371575353c8
2015-05-22 09:51:33 -05:00
Corey Farrell e7edb59db6 res_mwi_external_ami: Use module version of AMI registration.
Use ast_manager_register_xml for res_mwi_external_ami manager
actions.  This ensures the module is held open while any of
the actions are being run.

ASTERISK-25117 #close
Reported by: Corey Farrell

Change-Id: Iececfdc2da498b2c32b9e09042f5f12292007ac7
2015-05-21 18:18:16 -05:00
Matt Jordan 9d8a462356 ARI: Update version to 1.7.0
This patch updates the version of ARI to 1.7.0 to reflect the backwards
compatible changes that will be introduced in 13.4.0.

Change-Id: I6c36e6144da426412f25828a868e4df916bff60a
2015-05-21 13:05:08 -05:00
Matt Jordan 620054c527 Merge "audiohook.c: Difference in read/write rates caused continuous buffer resets" into 13 2015-05-21 07:22:14 -05:00
Matt Jordan f5e195b44e Merge "Logger: Reset defaults before processing config." into 13 2015-05-21 07:21:44 -05:00
Matt Jordan e8a4e01c32 Merge "res/res_http_websocket: Add a pre-session established callback" into 13 2015-05-21 07:20:56 -05:00
Joshua Colp 3c98544543 Merge "main/sdp_srtp.c: allow SDP crypto tag to be up to 9 digits" into 13 2015-05-21 05:15:29 -05:00
Corey Farrell 9b6e228419 Logger: Reset defaults before processing config.
Reset options to default values before reloading config.  This ensures
that if a setting is removed or commented out of the configuration file
it is unset on reload.

ASTERISK-25112 #close
Reported by: Corey Farrell

Change-Id: Id24bb1fb0885c2c14cf8bd6f69a0c2ee7cd6c5bd
2015-05-20 21:22:34 -05:00
George Joseph 7fcf0a97b8 app_playback: Suppress warnings on playback if channel hung up
If a channel hangs up while an audio file is playing, there's
no need to clutter up the logs with a warning so suppress it
if ast_check_hangup returns true.

Also, change warning to debug/2 in file.c if writing a frame
fails.  Same reasoning.

Change-Id: I2e66191af3c5b6e951c98e8f1c3fe3cf2cf7ed89
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-05-20 18:05:20 -06:00
Kevin Harwell b1e8c0b9eb audiohook.c: Difference in read/write rates caused continuous buffer resets
Currently, everytime a sample rate change occurs (on read or write) the
associated factory buffers are reset. If the requested sample rate on a
read differed from that of a write then the buffers are continually reset
on every read and write. This has the side effect of emptying the buffer,
thus there being no data to read and then write to a file in the case of
call recording.

This patch fixes it so that an audiohook_list's rate always maintains the
maximum sample rate among hooks and formats. Audiohook sample rates are
only overwritten by this value when slin native compatibility is turned on.
Also, the audiohook sample rate can only overwrite the list's sample rate
when its rate is greater than that of the list or if compatibility is
turned off. This keeps the rate from constantly switching/resetting.

ASTERISK-24944 #close
Reported by: Ronald Raikes

Change-Id: Idab4dfef068a7922c09cc631dda27bc920a6c76f
2015-05-20 16:08:58 -05:00
Matt Jordan 4a450f863b Merge "Fix potential crash after unload of func_periodic_hook or test_message." into 13 2015-05-20 15:22:58 -05:00
Corey Edwards 17d6ede337 main/sdp_srtp.c: allow SDP crypto tag to be up to 9 digits
ASTERISK-24887 #close
Reported by: Makoto Dei
Tested by: tensai

Change-Id: I6a96f572adb17f76b3acafe503a01c48eb5dd9bf
2015-05-20 09:00:30 -05:00
Matt Jordan 31cc24aad6 res/res_http_websocket: Add a pre-session established callback
This patch updates http_websocket and its corresponding implementation
with a pre-session established callback. This callback allows for
WebSocket server consumers to be notified when a WebSocket connection is
attempted, but before we accept it. Consumers can choose to reject the
connection, if their application specific logic allows for it.

As a result, this patch pulls out the previously private
websocket_protocol struct and makes it public, as
ast_websocket_protocol. In order to preserve backwards compatibility
with existing modules, the existing APIs were left as-is, and new APIs
were added for the creation of the ast_websocket_protocol as well as for
adding a sub-protocol to a WebSocket server.

In particular, the following new API calls were added:
* ast_websocket_add_protocol2 - add a protocol to the core WebSocket
  server
* ast_websocket_server_add_protocol2 - add a protocol to a specific
  WebSocket server
* ast_websocket_sub_protocol_alloc - allocate a sub-protocol object.
  Consumers can populate this with whatever callbacks they wish to
  support, then add it to the core server or a specified server.

ASTERISK-24988
Reported by: Joshua Colp

Change-Id: Ibe0bbb30c17eec6b578071bdbd197c911b620ab2
2015-05-19 19:59:45 -05:00
snuffy f9114179e6 chan_pjsip: Fix crash during off-nominal when no endpoint specified.
Add missing return -1 when no endpoint name is specified.

ASTERISK-25086 #close
Reported by: snuffy

Change-Id: I9de76c2935a1f4e3f0cffe97a670106f5605e89e
2015-05-17 07:44:00 -05:00
George Joseph dd78ab42e4 res_pjsip_config_wizard/config: Fix template processing
The config wizard was always pulling the first occurrence of
a variable from an ast_variable list but this gets the template
value from the list instead of any overridden value.  This patch
creates ast_variable_find_last_in_list() in config.c and updates
res_pjsip_config_wizard to use it instead of
ast_variable_find_in_list.  Now the overridden values, where they
exist, are used instead of template variables.

Updated test_config to test the new API.

ASTERISK-25089 #close

Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
Change-Id: Ifa7ddefc956a463923ee6839dd1ebe021c299de4
2015-05-15 16:18:11 -06:00
snuffy 091b436007 cdr: Fix 'core show channel' CDR variable truncation.
When the new Bridging API was implemented, the workspace variable
changed to a malloc'd string, causing sizeof() to always be 8 (char).

Revert back to stored on stack string for workspace.

ASTERISK-25090 #close

Change-Id: I51e610ae87371df771ce7693a955510efb90f8f7
2015-05-15 09:59:06 -05:00
Joshua Colp 8697a49ef9 Merge "sorcery: Add API to insert/remove a wizard to/from an object type's list" into 13 2015-05-14 15:20:26 -05:00
Joshua Colp aea349a87e Merge "Message.c: Clear message channel frames on cleanup" into 13 2015-05-14 15:19:55 -05:00
Corey Farrell 6b7282ca40 Fix potential crash after unload of func_periodic_hook or test_message.
These modules save a pointer to the context they create on load, and
use that pointer to destroy the context at unload.  It is not safe
to save this pointer, it is replaced during load of pbx_config,
pbx_lua or pbx_ael.

This change causes the modules to pass NULL to ast_context_destroy,
a safer way to perform the unregistration since it does not use
a pointer that could become invalid.

ASTERISK-25085 #close
Reported by: Corey Farrell

Change-Id: I6a00ec8e38046058f97dc703e1adcde9bf517835
2015-05-14 05:41:22 -05:00
Joshua Colp 8f8d54a18e Merge "main/manager.c: Bugfix sort action_manager by alphabetically" into 13 2015-05-14 05:02:51 -05:00
Jonathan Rose 02c5130589 Message.c: Clear message channel frames on cleanup
The message channel is a special channel that doesn't actually process frames.
However, certain actions can cause frames to be placed in the channel's read
queue including the Hangup application which is called on the channel after
each message is processed. Since the channel will continually be reused for
many messages, it's necessary to flush these frames at some point.

ASTERISK-25083 #close
Reported by: Jonathan Rose

Change-Id: Idf18df73ccd8c220be38743335b5c79c2a4c0d0f
2015-05-13 17:41:16 -05:00
Joshua Colp 586da882bc Merge "app_voicemail: fix moving when old messages full" into 13 2015-05-13 15:44:39 -05:00
Jonathan Rose d49d64b79c app_voicemail: fix moving when old messages full
When completing voicemail playback of a message in the 'INBOX', the
message gets moved to the 'Old' messages folder. Without this patch, if
the 'Old' folder is already at its set limit, then the 'INBOX' message will
simply be deleted. With this patch, the flag to delete the message will be
removed if the save_to_folder function indicates that the message could
not be moved due to a full folder.

ASTERISK-25082 #close
Reported by: Jonathan Rose
Review: https://gerrit.asterisk.org/#/c/448/

Change-Id: I2be440a09f42e2d06d50975c40d1ad7f836ecb3f
2015-05-13 15:28:28 -05:00
Joshua Colp 51478575e4 Merge "General: Fix recent menuselect-related cross compile regression" into 13 2015-05-13 14:20:42 -05:00
Joshua Colp 5fcaf727cc Merge "res_config_mysql: Fix broken column type checking" into 13 2015-05-13 12:26:11 -05:00
Joshua Colp 6a12b0634b Merge "chan_dahdi/sig_pri: Fix crash on ISDN call hangup collision." into 13 2015-05-13 12:24:32 -05:00
Rodrigo Ramírez Norambuena 9b13536fed main/manager.c: Bugfix sort action_manager by alphabetically
Fix the alphabetic order added on ast_manager_register_struct. The order
for struct manager_action added is not working, this change fixes the
problem.

Change-Id: I149da0cd06c3c4445d7516cc303358e9f26f8b4b
2015-05-13 10:46:20 -05:00
Alexandre Fournier e67e8d5c7f res_config_mysql: Fix broken column type checking
MySQL configuration engine contains a bug in require_mysql(). This
function is used for column type checking in tables. This bug only
affects DATETIME, DATE and FLOAT types.

It came from mixing the first condition (switch-case-like
if/then/else), to check the expected column type, with the second
condition, to check the actual column type against the expected column
type. Both conditions must be checked separately in order to avoid the
execution of the wrong block.

ASTERISK-18252 #comment This patch might fix the issue
Reported by: Gareth Blades

ASTERISK-25041 #close
Reported by: Alexandre Fournier
Tested by: Alexandre Fournier

Change-Id: I0b8bf7e68ab938be8e6525a249260cb648cb0bfa
2015-05-13 06:40:57 -05:00
Yousf Ateya 16f602f5c2 res_rtp_asterisk: Correction for the limit which detects that a packet is DTLS.
First byte of DTLS packet shall be in range 20-63, not 20-64. Refer to RFC
https://tools.ietf.org/html/rfc5764#section-5.1.2 for correct values.

Change-Id: Iae6fa0d72b37c36a27fe40686e0ae6fba3afec31
2015-05-13 04:52:52 -05:00
Joshua Colp 62422712f7 Merge "cdr_pgsql: Use PQescapeStringConn for escaping names." into 13 2015-05-13 04:35:17 -05:00
Richard Mudgett c780b6e431 chan_dahdi/sig_pri: Fix crash on ISDN call hangup collision.
If an ISDN call is hungup by both sides at the same time a crash could
happen.

* Added missing NULL checks for the owner channel after calling
pri_queue_pvt_cause_data() in two places.  Code after those calls need to
check the owner channel pointer for NULL before use because
pri_queue_pvt_cause_data() needs to do deadlock avoidance to lock the
owner and the owner may get hung up.

ASTERISK-21893 #close
Reported by:  Alexandr Gordeev

Change-Id: Ica3e266ebc7a894b41d762326f08653e1904bb9a
2015-05-12 17:43:09 -05:00
Sebastian Kemper 6627de830b General: Fix recent menuselect-related cross compile regression
MAKE_MENUSELECT currently sets CC to CC, which is the compiler for the
target platform. But menuselect is to be run on the build system, so
BUILD_CC needs to be used instead - like it was in the past, before the
recent changes (https://reviewboard.asterisk.org/r/4370/). This is the
patch for ASTERISK-25074.

ASTERISK-25074 #close
Reported by: Sebastian Kemper
Tested by: Sebastian Kemper

Change-Id: I8a2b1fc5deb6ad2b80f49baca35b1b13d468ebf8
2015-05-12 14:05:32 -05:00
George Joseph 637c8f065e sorcery: Add API to insert/remove a wizard to/from an object type's list
Currently you can 'apply' a wizard to an object type but the wizard
always goes at the end of the object type's wizard list.  This patch
adds a new ast_sorcery_insert_wizard_mapping function that allows
you to insert a wizard anyplace in the list.  I.E.  You could
add a caching wizard to an object type and place it before all
wizards.

ast_sorcery_get_wizard_mapping_count and
ast_sorcery_get_wizard_mapping were added to allow examination
of the mapping list.

ast_sorcery_remove_mapping was added to remove a mapping by name.

As part of this patch, the object type's wizard list was converted
from an ao2_container to an AST_VECTOR_RW.

A new test was added to test_sorcery for this capability.

ASTERISK-25044 #close

Change-Id: I9d2469a9296b2698082c0989e25e6848dc403b57
2015-05-12 11:03:54 -05:00
Corey Farrell 3cdb7950f0 Fix processing of asterisk.conf debug=yes.
The code which reads asterisk.conf supports processing the debug
option with ast_true, but ast_true returns -1.  This causes debug
to still be off, convert to 1 so debug will be on as requested.

ASTERISK-25042
Reported by: Corey Farrell

Change-Id: I3c898b7d082d914b057e111b9357fde46bad9ed6
2015-05-12 09:37:09 -05:00
Rodrigo Ramírez Norambuena 6553a00770 cdr_pgsql: Use PQescapeStringConn for escaping names.
Use function PQescapeStringConn for escaping the name
of the table and schema instead of doing it manually.

Change-Id: I6709165e2d00463e9c813d24f17830ad4910b599
2015-05-12 08:16:21 -05:00
Joshua Colp 8523a5ed09 Merge "vector: Add REMOVE, ADD_SORTED and RESET macros" into 13 2015-05-12 05:38:58 -05:00
George Joseph ea917fefaf vector: Add REMOVE, ADD_SORTED and RESET macros
Based on feedback from Corey Farrell and Y Ateya, a few new
macros have been added...

AST_VECTOR_REMOVE which takes a parameter to indicate if
order should be preserved.

AST_VECTOR_ADD_SORTED which adds an element to
a sorted vector.

AST_VECTOR_RESET which cleans all elements from the vector
leaving the storage intact.

Change-Id: I41d32dbdf7137e0557134efeff9f9f1064b58d14
2015-05-11 14:47:46 -06:00
Ivan Poddubny d5864a358c pbx/pbx_spool: Fix issue when call files were executed too early
pbx_spool used to delete/move the call file upon successful outgoing
call completion, but did not delete it from in-memory list of files
(dirlist, used only when compiled with inotify/kqueue support).
That resulted in an extra attempt to process that filename after
retrytime seconds.
Then, if a new file with the same name appears that is scheduled
in future further than the completed one plus its retrytime,
then it gets executed earlier than expected.

This patch fixes remove_from_queue function to also remove the entry
from the dirlist.

ASTERISK-17069 #close
Reported by: Jeremy Kister

ASTERISK-24442 #close
Reported by: tootai

Change-Id: If9ec9b88073661ce485d6b008fd0b2612e49a28b
2015-05-11 20:32:25 +00:00
Rusty Newton 4dbd4021c9 configs/basic-pbx: Modified main IVR to play new Allison prompt.
The main IVR was playing demo-congrats. I've switched it over to the
basic-pbx-ivr-main file that we added in core sounds 1.4.27. This prompt
has Allison prompting the user with the actual IVR menu.

ASTERISK-24892 #close

Change-Id: Ifb749616ff8e156a1031ddaddfcc9244767a095d
2015-05-08 16:31:51 -05:00
Matt Jordan 7111ba6df4 Merge "tcptls: Avoiding ERR_remove_state in OpenSSL." into 13 2015-05-08 15:55:46 -05:00
Sean Bright 613a461c3d res_rtp_asterisk: Issue ERROR if res_srtp is not found.
While trying to get WebRTC working with chan_pjsip, I was running
into the following error:

    Attempted to set an invalid DTLS-SRTP configuration on RTP
    instance...

Josh helpfully pointed out that res_srtp.so might not be loaded, and
sure enough, it wasn't. This patch adds a ERROR indiciating as much
to hopefully help others having a similar problem.

Change-Id: I13aa477b47b299876728a21b130998a0ea6cd19f
2015-05-08 13:32:53 -05:00
Rusty Newton 394fcb5eab sounds: Add Swedish sounds to Makefile and XML
Added the necessary lines to the Makefile and sounds.xml so we'll have the
Swedish sounds in all available formats in menuselect.

See also: Swedish sounds were added into the core sounds release 1.4.27.

ASTERISK-24744 #close

Reported by: Tove Hjelm
Tested by: Rusty Newton

Change-Id: Ib6f4fd177afd1667b2402735034001d4d055a908
2015-05-08 12:54:46 -05:00
Joshua Colp 30c3b254c5 Merge "doc: Make progdocs play nice with git" into 13 2015-05-08 09:54:47 -05:00
Alexander Traud 2115f11b54 tcptls: Avoiding ERR_remove_state in OpenSSL.
ERR_remove_state was deprecated with OpenSSL 1.0.0 and was replaced by 
ERR_remove_thread_state. ERR_load_SSL_strings and ERR_load_BIO_strings were 
called by SSL_load_error_strings already and got removed. These changes allow 
OpenSSL forks like BoringSSL to be used with Asterisk.

ASTERISK-25043 #close
Reported by: Alexander Traud
patches:
  asterisk_with_BoringSSL.patch uploaded by Alexander Traud (License 6520)

Change-Id: If1c0871ece21a7e0763fafbd2fa023ae49d4d629
(cherry picked from commit 247fef6653)
2015-05-08 08:34:22 -05:00
George Joseph 5392e970d0 doc: Make progdocs play nice with git
Moved contrib/asterisk-ng-doxygen to doc/asterisk-ng-doxygen.in

Changed /Makefile to copy asterisk-ng-doxygen.in to
asterisk-ng-doxygen then modify it with version instead of
modifying asterisk-ng-doxygen directly.  Updated clean
targets as well.

Updated /.gitignore and doc/.gitignore.

Change-Id: I38712d3e334fa4baec19d30d05de8c6f28137622
2015-05-07 22:24:24 -06:00
Joshua Colp 1e44d1bef9 Merge "res_pjsip_exten_state: Fix race condition between sending NOTIFY and termination" into 13 2015-05-07 15:10:23 -05:00
Ivan Poddubny 608f0a94ee contrib/editors: Fix vim syntax highlighting of comments in config files
* Added a lookbehind to one-line comment matcher to skip escaped
   semicolons.
 * Added support for block comments.

Change-Id: Id17dfaeda8ed4be572e8107a0c010066584aaee7
2015-05-07 14:40:35 -05:00
Matt Jordan 22c6c12af2 Merge "vector: Additional enhancements and fixes" into 13 2015-05-07 13:30:11 -05:00
Joshua Colp d649d682c4 res_pjsip_exten_state: Fix race condition between sending NOTIFY and termination
The res_pjsip_exten_state module currently has a race condition between
processing the extension state callback from the PBX core and processing
the subscription shutdown callback from res_pjsip_pubsub. There is currently
no synchronization between the two. This can present a problem as while
the SIP subscription will remain valid the tree it points to may not.
This is in particular a problem as a task to send a NOTIFY may get queued
which will try to use the tree that may no longer be valid.

This change does the following to fix this problem:

1. All access to the subscription tree is done within the task that
sends the NOTIFY to ensure that no other thread is modifying or
destroying the tree. This task executes on the serializer for the
subscriptions.

2. A reference to the subscription serializer is kept to ensure it
remains valid for the lifetime of the extension state subscription.

3. The NOTIFY task has been changed so it will no longer attempt
to send a NOTIFY if the subscription has already been terminated.

ASTERISK-25057 #close
Reported by: Matt Jordan

Change-Id: I0b3cd2fac5be8d9b3dc5e693aaa79846eeaf5643
2015-05-07 09:32:58 -03:00
Matt Jordan 9322bc6ff6 Merge "chan_dahdi: Improve force_restart_unavailable_chans option description." into 13 2015-05-07 07:02:42 -05:00
Matt Jordan b1514362ef Merge "res_stasis_snoop: Spying on a single direction continually increases CPU" into 13 2015-05-07 06:39:20 -05:00
Joshua Colp 652ee2ff83 Merge "features: Fix crash when transferee hangs up during DTMF attended transfer." into 13 2015-05-07 06:28:00 -05:00
George Joseph 5f9aea8e3c vector: Additional enhancements and fixes
After using the new vector stuff for real I found...

A bug in AST_VECTOR_INSERT_AT that could cause a seg fault.

The callbacks needed to be closer to ao2_callback in behavior
WRT to CMP_MATCH and CMP_STOP behavior and the ability to return
a vector of matched entries.

A pre-existing issue with APPEND and REPLACE was also fixed.

I also added a new macro to test.h that acts like ast_test_validate
but also accepts a return code variable and a cleanup label.  As well
as printing the error, it sets the rc variable to AST_TEST_FAIL and
does a goto to the specified label on error.  I had a local version
of this in test_vector so I just moved it.

ASTERISK-25045

Change-Id: I05e5e47fd02f61964be13b7e8942bab5d61b29cc
2015-05-06 21:35:54 -06:00
Kevin Harwell 68513e00f7 res_stasis_snoop: Spying on a single direction continually increases CPU
Creating a snoop channel in ARI and spying only on a single direction (in or
out) results in CPU utilization continually increasing until the CPU is fully
consumed. This occurs because frames are being put in the opposing direction's
slin factory queue, but not being removed.

Fixed the problem by always reading and disposing of frames from the opposite
queue of the direction selected.

ASTERISK-24938 #closes

Change-Id: I935bfd15f1db958f364d9d6b3b45582c0113dd60
2015-05-06 16:09:33 -05:00
Richard Mudgett 904f5d98f6 chan_dahdi: Improve force_restart_unavailable_chans option description.
ASTERISK-25034
Reported by: Richard Mudgett

Change-Id: I1ff8f02124d2f4abd632a050da52c64285bb7f30
2015-05-06 16:05:31 -05:00
Joshua Colp d6ffbe39b0 Merge "app_queue: Fix queue_log EXITWITHTIMEOUT containing only 1 parameter" into 13 2015-05-06 07:42:05 -05:00
Matt Jordan dfb292ce3e Merge "res_ari_bridges: Add missing dependencies." into 13 2015-05-06 06:13:37 -05:00
Matt Jordan 50e90f9121 Merge "pbx_config: Register manager actions with module version of macro." into 13 2015-05-05 21:05:10 -05:00
Richard Mudgett be1260a35f features: Fix crash when transferee hangs up during DTMF attended transfer.
A crash happens with this sequence of steps:
1) Party A is connected to party B.
2) Party B starts a DTMF attended transfer.
3) Party A hangs up while party B is dialing party C.

When party A hangs up the bridge that party A and party B are in is
dissolved and party B is kicked out of the bridge.  When party B finishes
dialing party C he attempts to move to the new bridge with party C.  Since
party B is no longer in a bridge the attempted move dereferences a NULL
bridge_channel pointer and crashes.

* Made the hold(), unhold(), ringing(), and the bridge_move() functions
tolerant of the channel not being in a bridge.  The assertion that party B
is always in a bridge is not true if the bridged peer of party B hangs up
and dissolves the bridge.  Being tolerant of not being in a bridge allows
the peer hangup stimulus to be processed by the FSM.

* Made the bridge_move() function return void since where the return value
for a failed move was checked generated a FSM coding ERROR message for a
normal off-nominal condition.

* Eliminated most uses of RAII_VAR in bridge_basic.c.

ASTERISK-25003 #close
Reported by: Artem Volodin

Change-Id: Ie2c1b14e5e647d4ea6de300bf56d69805d7bcada
2015-05-05 18:17:54 -05:00
George Joseph 8b0f85ac06 test_vector: Fix build breakage caused by ASTERISK_REGISTER_FILE
My 13 version of test_vector had an ASTERISK_REGISTER_FILE() macro
call at the top which is only supported in master.  Once removed
builds are successful.

Change-Id: I7cac8b669bed6de543bbf4e2eec3cffc9741acdd
2015-05-05 14:42:26 -06:00
Ivan Poddubny 87263b47b5 app_queue: Fix queue_log EXITWITHTIMEOUT containing only 1 parameter
This patch fixes EXITWITHTIMEOUT queue_log entry to always come with 3
parameters: position, original position and waiting time.

ASTERISK-25038 #close
Reported by: Etienne Lessard

Change-Id: I0c62045922e26bee2125e93aee1dee17eee79618
2015-05-05 15:38:23 -05:00
Matt Jordan 2d9081b5ec Merge "stasis: Fix dial masquerade datastore lifetime" into 13 2015-05-05 13:13:10 -05:00
Matt Jordan 8ca25dfd7e Merge "vector: Traversal, retrieval, insert and locking enhancements" into 13 2015-05-05 12:45:43 -05:00
Corey Farrell 366ea63438 res_ari_bridges: Add missing dependencies.
Missed this module in the previous commit.  res_ari_bridges uses symbols
from res_stasis_playback and res_stasis_recording.

ASTERISK-25027 #close
Reported by: Corey Farrell

Change-Id: I90bf756abd25adfc4920d2869ebe7feb636b8c5f
2015-05-05 10:47:43 -04:00
Corey Farrell 69ae8cf0a4 pbx_config: Register manager actions with module version of macro.
Switch manager actions in pbx_config to use the registration macro that
passes the module pointer, allowing pbx_config reference to be bumped
while the manager actions run.

ASTERISK-25061 #close
Reported by: Corey Farrell

Change-Id: I422c50dd74814616ac10c5e9c6598a0b1bc2c44e
2015-05-05 10:27:15 -04:00
Joshua Colp 181ae3b8d9 stasis: Fix dial masquerade datastore lifetime
A recent change went into Asterisk which added reference counts to the
channels stored in a dial masquerade datastore. Unfortunately this
included a reference to the caller in a dialing operation. While all
of the dialed targets have the datastore removed from them upon dialing
completion this did not occur for the caller, causing it to have a
reference to itself that could go never go away (as it depended on
the destruction of the datastore which only happened when the channel
was destroyed). This resulted in the caller channel remaining on the
system despite it having hung up.

This change does the following to fix this issue:

1. The dial masquerade datastore is now removed from the caller upon
dialing completion, just like the dialed targets.
2. Upon destruction of the caller all the dialed targets are also
removed from the dial masquerade datastore (just in case).
3. The reference to the caller has been removed as it should not be
possible for the datastore to now be valid/useful after the lifetime
of the caller has ended.

ASTERISK-25025 #close

Change-Id: I1ef4ca5ca04980028604cc2af5d2992ac3431b3f
2015-05-05 07:34:19 -03:00
George Joseph 7a7e9733c2 vector: Traversal, retrieval, insert and locking enhancements
Renamed AST_VECTOR_INSERT to AST_VECTOR_REPLACE because it really
does replace not insert.  The few users of AST_VECTOR_INSERT were
refactored.  Because these are macros, there should be no ABI
compatibility issues.

Added AST_VECTOR_INSERT_AT that actually inserts an element into the
vector at a specific index pushing existing elements to the right.

Added AST_VECTOR_GET_CMP that can retrieve from the vector based
on a user-provided compare function.

Added AST_VECTOR_CALLBACK function that will execute a function
for each element in the vector.  Similar to ao2_callback and
ao2_callback_data functions although the vector callback can take
a variable number of arguments.  This should allow easy migration
to a vector where a container might be too heavy.

Added read/write locked vector and lock manipulation macros.

Added unit tests.

ASTERISK-25045 #close

Change-Id: I2e07ecc709d2f5f91bcab8904e5e9340609b00e0
2015-05-04 19:46:51 -05:00
Corey Farrell 040d2f8558 main/test.c: Add test to verify there were no registration errors.
This adds a test that will fail if any test failed to register. Also fail
if any test registration produced a warning about missing a leading or
trailing slash.

ASTERISK-25053 #close
Reported by: Corey Farrell

Change-Id: I93e50b8fcbcfa7f1f5b41b2c44a51685c09529c3
2015-05-04 18:13:36 -04:00
Matt Jordan 626bffc4c2 Merge "contrib/ast-db-manage: Add Postgres ENUM type support in auto DTMF mode update" into 13 2015-05-04 09:26:10 -05:00
Matt Jordan 87fb7fc165 Merge "cdr/cdr_csv.c: Add a new option to enable columns added in Asterisk 1.8" into 13 2015-05-04 09:26:01 -05:00
Matt Jordan 81c27127aa Merge "Format Interfaces: Prevent unload except by shutdown." into 13 2015-05-04 09:25:35 -05:00
Matt Jordan 743fed71fc Merge "res_odbc: Use negative connection cache for all connections" into 13 2015-05-04 07:46:06 -05:00
Martin Tomec 3dcec04ab5 res_odbc: Use negative connection cache for all connections
Apply the negative connection cache setting to all connections,
even those that are not pooled. This ensures that the connection
will not be re-established before the negative connection cache
time is met.

ASTERISK-22708 #close

Change-Id: I431cc2e8584ab0b6908b3523d0a0e18c9a527271
2015-05-04 06:47:26 -05:00
Matt Jordan 74799b3fe2 Merge "Remove unneeded uses of optional_api providers." into 13 2015-05-04 04:03:50 -05:00
Matt Jordan 78c02f8e88 Merge "Update configure.ac/Makefile for clang" into 13 2015-05-04 04:03:10 -05:00
Corey Farrell f38066fcad Format Interfaces: Prevent unload except by shutdown.
Format interfaces cannot be unregistered, so the modules that provide them
need to be held open except by shutdown.

ASTERISK-25054 #close
Reported by: Corey Farrell

Change-Id: Iadbd9675bf0d30b8fded5a739b163db3ea2db8f3
2015-05-03 22:08:14 -04:00
Matt Jordan e76a6a97bf contrib/ast-db-manage: Add Postgres ENUM type support in auto DTMF mode update
The upgrade script for auto DTMF mode (31cd4f4891ec) added in 88b0fa7755
failed to add ENUM support for Postgres databases. This requires a
specific import from the sqlalchemy.dialects.postgresql package. This
patch corrects this error, which allows for Postgres update scripts to
be generated.

ASTERISK-24706

Change-Id: I4742ac8efa533cd6f18e0bdd907b339a9aedf015
2015-05-03 20:28:52 -05:00
D Tucny 92120247e9 term: send proper reset sequence when black background is forced
When using the force black background command-line option or configuration
option an invalid reset sequence is sent following a coloured output item 
in the CLI, the result is that the colour is not 'turned off' and continues
until the next non-default coloured text output.

A reset sequence is already defined in term.c, but the ast_term_reset
function doesn't use it, instead building it's own invalid sequence and 
returning that.

This patch changes that behaviour, removing the building of a reset sequence
and instead using the pre-built constant 'enddata' which is a suitable reset
sequence for this purpose.

ASTERISK-24896 #close
Reported by: Dan Tucny

Change-Id: I56323899123ae3264900389cae1f5b252aa3bf43
2015-05-03 09:41:15 -05:00
Matt Jordan 13819a34c4 Merge "Build System: Prevent unneeded changes to asterisk/buildopts.h." into 13 2015-05-03 09:20:15 -05:00
Matt Jordan b518ba1c6c Merge "res_pjsip_dlg_options: Fix MODULEINFO section." into 13 2015-05-03 09:19:06 -05:00
Corey Farrell ad6ea29697 Remove unneeded uses of optional_api providers.
A few cases exist where headers of optional_api provders are included but
not needed.  This causes unneeded calls to ast_optional_api_use.

* Don't include optional_api.h from sip_api.h.
* Move 'struct ast_channel_monitor' to channel.h.
* Don't include monitor.h from chan_sip.c, channel.c or features.c.

The move of struct ast_channel_monitor is needed since channel.c depends on
it.  This has no effect on users of monitor.h since channel.h is included
from monitor.h.

ASTERISK-25051 #close
Reported by: Corey Farrell

Change-Id: I53ea65a9fc9693c89f8bcfd6120649bfcfbc3478
2015-05-02 20:25:11 -04:00
Matt Jordan 9888562c8c Merge "include/asterisk/channel.h: Fix typo" into 13 2015-05-02 10:19:08 -05:00
Matt Jordan b4000f2d44 Merge "Astobj2: Fix initialization order of refdebug and AO2_DEBUG." into 13 2015-05-02 10:17:26 -05:00
Rodrigo Ramírez Norambuena 525c8c8689 include/asterisk/channel.h: Fix typo
Change-Id: Ie584b85e16a94c255e60d0b1732ef9686464fef3
2015-05-02 02:28:13 -05:00
Corey Farrell 63196a8256 res_pjsip_dlg_options: Fix MODULEINFO section.
Removed the extra space before "MODULEINFO" in res_pjsip_dlg_options.
This extra space prevented any of the dependencies from being seen by
menuselect, so building with default options would fail if PJSIP was
not installed.

This also makes the tool that extracts information for menuselect
tolerant of multiple spaces in the future.

ASTERISK-25033 #close
Reported by: Peter Whisker

Change-Id: Iccd54846f70c4a7a50cb5bf70b7bb5cb4bab3698
2015-05-02 03:15:15 -04:00
Corey Farrell ac1f0090eb Build System: Prevent unneeded changes to asterisk/buildopts.h.
* Add AST_DEVMODE to BUILDOPTS
* Remove CFLAGS that do not effect ABI from BUILDOPTS.
* Use BUILDOPTS to generate AST_BUILDOPT_SUM.
* Remove loop that defined AST_MODULE_*

These changes ensure that only ABI effecting options are considered for
AST_BUILDOPT_SUM.  This also reduces unneeded full system rebuilds caused
by enabling or disabling one module that another is dependent on.

ASTERISK-25028
Reported by: Corey Farrell

Change-Id: I2c516d93df9f6aaa09ae079a8168c887a6ff93a2
2015-05-01 16:45:05 -04:00
Corey Farrell 5875bf183c Astobj2: Fix initialization order of refdebug and AO2_DEBUG.
This ensures that refdebug is initialized before AO2_DEBUG if
both are enabled, since AO2_DEBUG allocates a container.

This change also makes AO2_DEBUG initialization critical, a
failure will abort Asterisk startup.  This is needed since
the failure would be caused by reg_containers allocation
failure, and that would result in a segmentation fault by
ao2_container_register later in startup.

ASTERISK-25048 #close
Reported by: Corey Farrell

Change-Id: I9a243ea3fc5653b48b931ba6d61971cb2e530244
2015-05-01 15:40:45 -04:00
Matt Jordan 1b19c15f17 main/pbx: Improve performance of dialplan reloads with a large number of hints
The PBX core maintains two hash tables for hints: a container of the
actual hints (hints), along with a container of devices that are watching that
hint (hintdevices). When a dialplan reload occurs, each hint in the hints
container is destroyed; this requires a lookup in the container of devices to
find the device => hint mapping object. In the current code, this performs an
ao2_callback, iterating over each of the device to hint objects in the
hintdevices container. For a large number of hints, this is extremely
expensive: dialplan reloads with 20000 hints could take several minutes
in just this phase.

This patch improves the performance of this step in the dialplan reloads
by caching which devices are watching a hint on the hint object itself.
Since we don't want to create a circular reference, we just cache the
name of the device. This allows us to perform a smarter ao2_callback on
the hintdevices container during hint removal, hashing on the name of the
device and returning an iterator to the matching names. The overall
performance improvement is rather large, taking this step down to a number of
seconds as opposed to minutes.

In addition, this patch also registers the hint containers in the PBX
core with the astobj2 library. This allows for reasonable debugging to
hash collisions in those containers.

ASTERISK-25040 #close
Reported by: Matt Jordan

Change-Id: Iedfc97a69d21070c50fca42275d7b3e714e59360
2015-05-01 08:25:47 -05:00
Matt Jordan ec0f80b6e8 Merge "res_pjsip_outbound_authenticator_digest: Add missing outbound authenticator callback." into 13 2015-05-01 06:55:49 -05:00
Matt Jordan ed51fbbe9c Merge "Prevent potential crash on blond transfer." into 13 2015-05-01 06:55:15 -05:00
Corey Farrell 3efe0df044 Sample Configs: Fix syntax error in pjsip.conf
The sample pjsip.conf has a few comment lines that are missing the
semicolons at the start of the comment, causing the config to fail
load.

Change-Id: I776a38c916a7df7ee3e072fd0b21dbf4cc457352
2015-04-30 16:54:24 -04:00
Mark Michelson 077979618b Prevent potential crash on blond transfer.
Scenario:
Alice calls Bob. Bob performs a blond transfer to Carol. Carol rejects
the incoming call (or some other immediate circumstance causes Carol not
to answer the call)

What occurs in this case is that when the bridge between Alice and Bob
breaks, Alice is told to masquerade into Bob's channel that had placed
the call to Carol. The actual masquerade goes down without a hitch.
However, a channel fixup callback that attempts to publish dial events
over Stasis has a crash. The reason for this crash is that the datastore
on Bob's channel that placed the outbound call to Carol only had a bare
pointer to Carol's channel. Since Carol rejected the incoming call,
Carol's channel has been hung up and freed, meaning accessing her
channel results in a crash.

The fix here is simple. The dial fixup code has been altered to hold
references to the involved channels and to drop those references when
freeing data.

ASTERISK-25025 #close
Reported by Chet Stevens

Change-Id: I54eedda207b8ec7a69263353b43abe5746aea197
2015-04-30 15:42:01 -05:00
Mark Michelson 4b8cddfb36 res_pjsip_outbound_authenticator_digest: Add missing outbound authenticator callback.
The Asterisk 13 version of the fix for outbound registration was missing
a key component that set the outbound authenticator's callback that
creates an authenticated request based on an old request. This was
picked up by some outbound registration tests failing in the testsuite.

Change-Id: I5ca9379698c606da36bc38eaffccedaf64211ce3
2015-04-30 14:13:42 -05:00
Joshua Colp 415a0d0745 res_ari_device_states: Fix dependency on res_stasis_device_state.
The res_ari_device_states module depends on res_stasis_device_state,
not res_stasis_device_states.

Change-Id: I26e02ad37f9e36bcc859867e2fad1b90452ec3de
2015-04-30 15:42:15 -03:00
Mark Michelson e0c6f88010 Merge "chan_dahdi: Add the chan_dahdi.conf force_restart_unavailable_chans option." into 13 2015-04-30 11:11:11 -05:00
Matt Jordan d1bc86fc99 Merge "res_pjsip_outbound_registration: Add virtual line support." into 13 2015-04-30 10:53:36 -05:00
Richard Mudgett d3c310a28c chan_dahdi: Add the chan_dahdi.conf force_restart_unavailable_chans option.
Some telco switches occasionally ignore ISDN RESTART requests.  The fix
for ASTERISK-19608 added an escape clause for B channels in the restarting
state if the telco ignores a RESTART request.  If the telco fails to
acknowledge the RESTART then Asterisk will assume the telco acknowledged
the RESTART on the second call attempt requesting the B channel by the
telco.  The escape clause is good for dealing with RESTART requests in
general but it does cause the next call for the restarting B channel to be
rejected if the telco insists the call must go on that B channel.

chan_dahdi doesn't really need to issue a RESTART request in response to
receiving a cause 44 (Requested channel not available) code.  Sending the
RESTART in such a situation is not required (nor prohibited) by the
standards.  I think chan_dahdi does this for historical reasons to deal
with buggy peers to get channels unstuck in a similar fashion as the
chan_dahdi.conf resetinterval option.

* Add the chan_dahdi.conf force_restart_unavailable_chans compatability
option that when disabled will prevent chan_dahdi from trying to RESTART
the channel in response to a cause 44 code.

ASTERISK-25034 #close
Reported by: Richard Mudgett

Change-Id: Ib8b17a438799920f4a2038826ff99a1884042f65
2015-04-30 10:24:48 -05:00
Rodrigo Ramírez Norambuena 7f611fa0e8 cdr/cdr_csv.c: Add a new option to enable columns added in Asterisk 1.8
This patch adds a new option to cdr.conf, 'newcdrcolumns', that will handle CDR
columns added in Asterisk 1.8. The columns are:
 * peeraccount
 * linkedid
 * sequence
When enabled, the columns in the database entry will be populated with the data
from the CDR.

ASTERISK-24976 #close

Change-Id: I51a57063f4ae5e194a9d933a8df45dc8a4534f0b
2015-04-30 07:38:11 -04:00
Joshua Colp e332c7ed5e res_pjsip_outbound_registration: Fix double unref on error return.
When the PJSIP pjsip_regc_send function is invoked and an error
status returned the caller currently decrements the reference count
of the client state that it just incremented, assuming the
registration callback would not have been invoked. In practice
this is not correct. If the failure happens after the transaction
has been set up the callback will still be invoked. This will
cause the reference count to be incorrectly decremented twice, once
by the registration callback and second by the caller of
pjsip_regc_send.

This change makes it so that whether the callback is invoked or
not is known by the caller of pjsip_regc_send. Depending on
this it can know whether it is responsible for decrementing the
reference count of the client state or not.

ASTERISK-25037 #close
Reported by: Joshua Colp

Change-Id: I749dc12f3a22115c49c5d7d95ff42a5fa45319de
2015-04-30 08:27:21 -03:00
Diederik de Groot 9c3ed42875 Update configure.ac/Makefile for clang
Created autoconf/ast_check_raii.m4: contains AST_CHECK_RAII which
checks compiler requirements for RAII:
gcc: -fnested-functions support
clang: -fblocks (and if required -lBlocksRuntime)
The original check was implemented in configure.ac and now has it's
own file. This function also sets C_COMPILER_FAMILY to either gcc or
clang for use by makefile

Created autoconf/ast_check_strsep_array_bounds.m4 (contains
AST_CHECK_STRSEP_ARRAY_BOUNDS):
which checks if clang is able to handle the optimized strsep & strcmp
functions (linux). If not, the standard libc implementation should be
used instead. Clang + the optimized macro's work with:
strsep(char *, char []), but not with strsepo(char *, char *).
Instead of replacing all the occurences throughout the source code,
not using the optimized macro version seemed easier

See 'define __strcmp_gc(s1, s2, l2) in bits/string2.h':
llvm-comment: Normally, this array-bounds warning are suppressed for
macros, so that unused paths like the one that accesses __s1[3] are
not warned about.  But if you preprocess manually, and feed the
result to another instance of clang, it will warn about all the
possible forks of this particular if statement. Instead of switching
of this optimization, another solution would be to run the preproces-
sing step with -frewrite-includes, which should preserve enough
information so that clang should still be able to suppress the diag-
nostic at the compile step later on.

See also "https://llvm.org/bugs/show_bug.cgi?id=20144"
See also "https://llvm.org/bugs/show_bug.cgi?id=11536"

Makefile.rules: If C_COMPILER_FAMILY=clang then add two warning
suppressions:
-Wno-unused-value
-Wno-parentheses-equality
In an earlier review (reviewboard: 4550 and 4554), they were deemed a
nuisace and less than benefitial.

configure.ac:
Added AST_CHECK_RAII() see earlier
Added AST_CHECK_STRSEP_ARRAY_BOUNDS() see earlier
Removed moved content

ASTERISK-24917
Change-Id: I12ea29d3bda2254ad3908e279b7effbbac6a97cb
2015-04-30 10:42:36 +02:00
Matt Jordan 37a193da18 Merge "ARI: Fix missing dependencies." into 13 2015-04-29 16:44:00 -05:00
Matt Jordan 6a86b3555b Merge "res_fax: allow 2400 transmission rate according to v.27ter standard" into 13 2015-04-29 16:42:25 -05:00
Matt Jordan d4e207e27e main/rtp_engine: Fix DTLS double-free introduced by 0b6410c4f8
The patch in 0b6410c4f8 did correctly fix a memory leak of the DTLS
structures in the RTP engine. However, when a 'core reload' is issued, a
double free of the memory pointed to by the char *'s in the DTLS
configuration struct can occur, as ast_rtp_dtls_cfg_free does not set
the pointers to NULL when they are freed.

This patch sets those pointers to NULL, preventing a second call to
ast_rtp_dtls_cfg_free from corrupting memory.

ASTERISK-25022

Change-Id: I820471e6070a37e3c26f760118c86770e12f6115
2015-04-29 16:25:16 -05:00
Kevin Harwell 3fb6daeb55 res_fax: allow 2400 transmission rate according to v.27ter standard
A previous set of patches (see: ASTERISK-22790 & ASTERISK-23231) made it so
a v.27 modem was not allowed to have a minimum transmission rate of 2400 bits
per second. This reverts all or some of those patches since according to the
v.27ter standard a rate of 2400 bits per second is also supported.

One of the original patches also added 9600 bits per second support for v.27.
This patch also removes that since v.27ter only supports 2400/4800 bits per
second.

Also, since Asterisk specifically supports v.27ter the enum was renamed to
better reflect this.

ASTERISK-24955 #close
Reported by: Matt Jordan

Change-Id: I4b9dfb6bf7eff08463ab47ee1a74224f27cae733
2015-04-29 15:37:12 -05:00
Joshua Colp 49ef81c15c res_sorcery_config: Fix build issue due to syntax error.
Change-Id: Ic8322f04e37842848ad72cf2871bd0378f67c4ac
2015-04-29 12:46:21 -03:00
Ashley Sanders 3278fe5327 chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR
Sections Exist in pjsip.conf

This patch modifies the current loading strategy of the pjsip configuration. If
duplicate sections (e.g. sections containing the same [id/type]) are defined in
[pjsip.conf], the loader will consider the configuration for the given type as
invalid when the duplicate section is encountered. The entire configuration
(including what was previously loaded) for the duplicate [id/type] sections
will be rejected and destroyed, an error message is logged and the load
processing for the given stops.

ASTERISK-24996
Reported By: Ashley Sanders

Change-Id: I35090ca4cd40f1f34881dfe701a329145c347aef
2015-04-29 09:54:10 -05:00
Joshua Colp 89f6719f7a res_pjsip_outbound_registration: Add virtual line support.
Virtual line support establishes a relationship between messages
related to an outbound registration and a local endpoint. This is
accomplished by attaching a parameter to the Contact of the outbound
registration and looking for it on any received requests. If the
parameter exists and can be matched to an outbound registration
the configured endpoint is associated with the request.

ASTERISK-24949 #close
Reported by: Joshua Colp

Change-Id: I7df909d2625479110a83fdd354c21ac539e8615d
2015-04-29 09:48:06 -03:00
Corey Farrell d61f03c4f9 ARI: Fix missing dependencies.
ARI modules that are generated by 'make ari-stubs' are all dependent on
res_ari_model.  Additionally some of the same modules depend on one or more
res_stasis_* modules.

ASTERISK-25027 #close
Reported by: Corey Farrell

Change-Id: I8e07fe7e81fedacb87232f2b6f8b5f47927b4153
2015-04-29 07:39:22 -04:00
Corey Farrell 3e4624ad21 res_pjsip: Remove incorrect MODULEINFO from presence_xml.c.
Remove incorrect MODULEINFO block and unneeded header includes
from presence_xml.c.

ASTERISK-25027
Reported by: Corey Farrell

Change-Id: I977c609ab9d1fe05373027c4138900f6985990eb
2015-04-29 07:32:52 -04:00
Corey Farrell fed9faab8d Git Migration: Create doc/rest-api when needed.
Create the directory './doc/rest-api' at the start of 'make ari-stubs'
to prevent an error when documentation is generated.  The directory is
also added to git ignores.

ASTERISK-25027
Reported by: Corey Farrell

Change-Id: Iaccc7f0138501c23aa78feaca2f3cce9e68cbc1b
2015-04-29 07:22:35 -04:00
Joshua Colp df23c8a86b res_pjsip_outbound_registration: Fix build due to removal of transaction.
Change-Id: I7a8a7beec3334cec304943f2dd7597eabe2e3150
2015-04-29 07:17:58 -03:00
Joshua Colp 95ab9fdb1a Merge "res_pjsip_outbound_registration: Add debugging messages." into 13 2015-04-28 19:18:46 -05:00
Joshua Colp 0e70dc0dc8 Merge "res_pjsip_outbound_registration: Don't fail on delayed processing: 13." into 13 2015-04-28 19:18:16 -05:00
Mark Michelson e39bd6ba46 res_pjsip_outbound_registration: Don't fail on delayed processing: 13.
This is the Asterisk 13 version of a change to master that allows for
registration responses to be processed successfully potentially after
the original transaction has timed out. The main difference between this
and the master change is that the master version has API changes that
are unacceptable for 13. For 13, this is worked around by adding a new
API call that the outbound registration code uses instead.

The following is the text from the master version of this commit:

Odd behaviors have been observed during outbound registrations. The most
common problem witnessed has been one where a request with
authentication credentials cannot be created after receiving a 401
response. Other behaviors include apparently processing an incorrect SIP
response.

Inspecting the code led to an apparent issue with regards to how we
handle transactions in outbound registration code. When a response to a
REGISTER arrives, we save a pointer to the transaction and then push a
task onto the registration serializer. Between the time that we save the
pointer and push the task, it's possible for the transaction to be
destroyed due to a timeout. It's also possible for the address to be
reused by the transaction layer for a new transaction.

To allow for authentication of a REGISTER request to be authenticated
after the transaction has timed out, we now also hold a reference to the
original REGISTER request instead of the transaction. The function for
creating a request with authentication has been altered to take the
original request instead of the transaction where the original request
was sent.

ASTERISK-25020
Reported by Mark Michelson

Change-Id: If1ee5f601be839479a219424f0358a229f358f7c
2015-04-28 15:02:18 -05:00
Mark Michelson 1bf008fc76 res_pjsip_outbound_registration: Add debugging messages.
When problems occur regarding outbound registrations, it currently
is difficult to debug. Most off-nominal paths had warning messages,
but sometimes we want to know what's going on before hitting the
off-nominal path. This patch adds lots of debugging output that
should give a clearer picture of what is happening with regards
to outbound registrations.

ASTERISK-25020
Reported by Mark Michelson

Change-Id: I577bde7860be0a6c872b5bcb4d5047340bf45d45
2015-04-28 10:45:31 -05:00
Joshua Colp 7ee05892d6 Merge "Example script for scan-build (the llvm static analyzer)" into 13 2015-04-28 07:13:53 -05:00
Steve Davies 0b6410c4f8 res_rtp_asterisk: Resolve 2 discrete memory leaks in DTLS
ao2 ref leak in res_rtp_asterisk.c when a DTLS policy is created.
The resources are linked into a table, but the original alloc refs
are never released. ast_strdup leak in rtp_engine.c. If
ast_rtp_dtls_cfg_copy() is called twice on the same destination struct,
a pointer to an alloc'd string is overwritten before the string is free'd.

ASTERISK-25022
Reported by: one47

Change-Id: I62a8ceb8679709f6c3769136dc6aa9a68202ff9b
2015-04-28 06:57:39 -05:00
Joshua Colp 427209603d Merge "cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version" into 13 2015-04-28 06:55:21 -05:00
George Joseph 99fb87ae13 res_pjsip: Fix SEGV on pending-qualify contacts
Permanent contacts that hadn't been qualified yet were missing
their contact_status entries causing SEGVs when running CLI
commands.

This patch makes sure that contact_statuses are created for
both dynamic and permanent contacts when they are created.
It also adds checks in the CLI code to make sure there's a
contact_status, just in case.

ASTERISK-25018 #close
Reported-by: Ivan Poddubny
Tested-by: Ivan Poddubny
Tested-by: George Joseph

Change-Id: I3cc13e5cedcafb24c400368b515b02d7fb81e029
2015-04-27 11:11:40 -06:00
Rodrigo Ramírez Norambuena d5dd43856e cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version
Add new column to INSERT new columns added in cdr 1.8 version. The columns are:
 * peeraccount
 * linkedid
 * sequence
This feature is configurable in cdr_odbc.conf using a new configuration
option, 'newcdrcolumns'.

ASTERISK-24976 #close

Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127
2015-04-27 09:38:29 -05:00
Matt Jordan e9788056e9 channels/chan_skinny: Fix compilation error introduced in f8e21a1adf
A typo in commit f8e21a1adf resulted in a compilation error in
chan_skinny. This patch fixes the typo.

ASTERISK-24917

Change-Id: Id7f4ad1fe948eb2408622e80c27936ce4516c33c
2015-04-26 17:47:47 -05:00
Matt Jordan 2d277996b7 Merge "Clang: Fix some more tautological-compare warnings." into 13 2015-04-26 15:53:50 -05:00
Matt Jordan 145f65598c Merge "app_confbridge: Default the template option to a compatible default profile." into 13 2015-04-24 13:07:06 -05:00
Kevin Harwell 7e5056b393 app_confbridge: Default the template option to a compatible default profile.
Confbridge dynamic profiles did not have a default profile unless you
explicitly used Set(CONFBRIDGE(bridge,template)=default_bridge). If a
template was not set prior to the bridge being created then some
options were left with no default values set. This patch makes it so
the default templates are set to the default bridge and user profiles.

ASTERISK-24749 #close
Reported by: philippebolduc

Change-Id: I1bd6e94b38701ac2112d842db68de63d46f60e0a
2015-04-24 12:20:37 -05:00
Mark Michelson 1da9ec969d res_pjsip_outbound_authenticator: Increase CSeq on authed requests.
The way PJSIP generates an authenticated request is to use a previous
request as a template. This means that the authenticated request will
have the same Call-ID, From header (including tag), and CSeq as the
original request. PJSIP generates a new branch on the Via header to
indicate that this is a new transaction, though.

There are some SIP implementations, though, that do not notice the
change in the branch and therefore will match the authed request to the
original request's transaction. Since the CSeq is the same, the server
will repeat the response it sent to the original request.

This patch aids interoperability by increasing the CSeq of the authed
request by one.

ASTERISK-24845 #close
Reported by: Carl Fortin
Tested by: Carl Fortin

Change-Id: I39c4ca52e688a9f83bcc1878371334becdc5be01
2015-04-24 10:25:58 -05:00
Matt Jordan bf3d9db4a6 Merge "res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX." into 13 2015-04-24 09:24:48 -05:00
Diederik de Groot cb318f3960 Example script for scan-build (the llvm static analyzer)
- Added Pre-amble (Options / Flags / Usage Example / GNU License)
 - Extended Configurability
 - Made Executable

ASTERISK-24917
Change-Id: I70405fe54e4be7dbfbcb62e291690069b88617a8
2015-04-24 03:30:28 -05:00
Mark Michelson b3cd5bc77f Merge "Clang: change previous tautological-compare fixes." into 13 2015-04-23 17:23:37 -05:00
Mark Michelson eabf3b5a3c res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX.
When Asterisk originates a channel to an application, the channel is
hung up once the application finishes executing. When the application
in question is SendFax, the Asterisk PJSIP code will attempt to reinvite
the T.38 session to audio after the FAX completes. The hangup of the
channel happens in the midst of this reinvite transaction. In most
circumstances, this works out okay because the BYE is delayed until the
reinvite transaction can complete.

However, if the reinvite that Asterisk sends receives a 401/407
response, then Asterisk's attempt to re-send the reinvite with
authentication will fail. This is because the session supplement in
res_pjsip_t38 makes the assumption that the channel on the session will
always be non-NULL. Since the channel has been hung up, though, the
channel is now NULL. Attempting to operate on the channel causes a
crash.

This patch fixes the issue by ensuring that the channel on the session
is not NULL before attempting to mess with the T.38 framehook.

This patch also contains some corrections for comments that were
incorrect and really confused me when I first started looking at the
code.

ASTERISK-25004 #close
Reported by Mark Michelson

Change-Id: Ic5a1230668369dda4bb13524098aed9306ab45a0
2015-04-23 13:08:54 -05:00
George Joseph f70d21b2cf res_pjsip: Validate that contact uris start with sip: or sips:
Currently we use pjsip_parse_hdr to validate contact uris but it
appears that it allows uris without a scheme if there's a port
supplied.  I.E myexample.com will fail but myexample.com:5060 will
pass even though it has no scheme.  This causes SEGVs later on
whenever the uri is used.

To prevent this, permanent_contact_validate has been updated to check
that the scheme is either 'sip' or 'sips'.

2 uses of possibly-null endpoint have also been fixed in
create_out_of_dialog_request.

ASTERISK-24999

Change-Id: Ifc17d16a4923e1045d37fe51e43bbe29fa556ca2
Reported-by: Brad Latus
2015-04-23 10:51:29 -06:00
Diederik de Groot 1bb16bedc7 Clang: change previous tautological-compare fixes.
clang can warn about a so called tautological-compare, when it finds
comparisons which are logically always true, and are therefor deemed
unnecessary.

Exanple:
unsigned int x = 4;
if (x > 0)    // x is always going to be bigger than 0

Enum Case:
Each enumeration is its own type. Enums are an integer type but they
do not have to be *signed*. C leaves it up to the compiler as an
implementation option what to consider the integer type of a particu-
lar enumeration is. Gcc treats an enum without negative values as
an int while clang treats this enum as an unsigned int.

rmudgett & mmichelson: cast the enum to (unsigned int) in assert.
The cast does have an effect. For gcc, which seems to treat all enums
as int, the cast to unsigned int will eliminate the possibility of
negative values being allowed. For clang, which seems to treat enums
without any negative members as unsigned int, the cast will have no
effect. If for some reason in the future a negative value is ever
added to the enum the assert will still catch the negative value.

ASTERISK-24917

Change-Id: I0557ae0154a0b7de68883848a609309cdf0aee6a
2015-04-23 18:26:55 +02:00
Matt Jordan a06924e9d9 Merge "Astobj2: Ensure all calls to __adjust_lock pass a valid object." into 13 2015-04-23 06:50:44 -05:00
George Joseph 1474bb05f6 res_corosync: Add check for config file before calling corosync apis
On some systems, res_corosync isn't compatible with the installed version of
corosync so corosync_cfg_initialize fails, load_module returns LOAD_FAILURE,
and Asterisk terminates.  The work around has been to remember to add
res_corosync as a noload in modules.conf.  A better solution though is to have
res_corosync check for its config file before attempting to call corosync apis
and return LOAD_DECLINE if there's no config file.  This lets Asterisk loading
continue.

If you have a res_corosync.conf file and res_corosync fails, you get the same
behavior as today and the fatal error tells you something is wrong with the
install.

ASTERISK-24998

Change-Id: Iaf94a9431a4922ec4ec994003f02135acfdd3889
2015-04-23 06:30:11 -05:00
Corey Farrell 73efb093b8 Astobj2: Ensure all calls to __adjust_lock pass a valid object.
__adjust_lock doesn't check for invalid objects, and doesn't have an
appropriate return value for invalid objects.  Most callers of
__adjust_lock pass objects that have already been confirmed valid,
this change adds checks before the remaining calls.

ASTERISK-24997 #close
Reported by: Corey Farrell

Change-Id: I669100f87937cc3f867cec56a27ae9c01292908f
2015-04-22 20:44:56 -04:00
George Joseph b0e929219b .gitignore: Add .gcno and .gcda
Products of --enable-coverage

Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3
2015-04-22 16:34:49 -05:00
Matt Jordan 5a3948a66f Merge "Fix/Update clang-RAII macro implementation" into 13 2015-04-22 14:25:40 -05:00
Mark Michelson 2ef1e1fc68 Merge "res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers." into 13 2015-04-22 14:07:34 -05:00
Diederik de Groot d6dfc85666 Clang: Fix some more tautological-compare warnings.
clang can warn about a so called tautological-compare, when it finds
comparisons which are logically always true, and are therefor deemed
unnecessary.

Exanple:
unsigned int x = 4;
if (x > 0)    // x is always going to be bigger than 0

Enum Case:
Each enumeration is its own type. Enums are an integer type but they
do not have to be *signed*. C leaves it up to the compiler as an
implementation option what to consider the integer type of a particu-
lar enumeration is. Gcc treats an enum without negative values as
an int while clang treats this enum as an unsigned int.

rmudgett & mmichelson: cast the enum to (unsigned int) in assert.
The cast does have an effect. For gcc, which seems to treat all enums
as int, the cast to unsigned int will eliminate the possibility of
negative values being allowed. For clang, which seems to treat enums
without any negative members as unsigned int, the cast will have no
effect. If for some reason in the future a negative value is ever
added to the enum the assert will still catch the negative value.

ASTERISK-24917
Change-Id: Ief23ef68916192b9b72dabe702b543ecfeca0b62
2015-04-22 18:09:23 +02:00
Joshua Colp edd9e54818 Merge "Check for ao2_alloc failure in __ast_channel_internal_alloc." into 13 2015-04-22 05:45:20 -05:00
Joshua Colp 7b57116833 res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers.
Currently the res_pjsip_mwi module only sends an unsolicited MWI NOTIFY upon
a mailbox state change (such as a new message being left, or one being deleted).
In practice this is not sufficient to keep clients aware of the current MWI status.

This change makes the module send unsolicited MWI NOTIFY on startup so that
clients are guaranteed to have the most up to date MWI information. It also makes
clients receive an unsolicited MWI NOTIFY upon registration so if they are unaware
of the current MWI status they receive it.

ASTERISK-24982 #close
Reported by: Joshua Colp

Change-Id: I043f20230227e91218f18a82c7d5bb2aa62b1d58
2015-04-22 07:40:23 -03:00
Joshua Colp 4423d5f755 Merge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs." into 13 2015-04-22 05:29:33 -05:00
Corey Farrell ad1a118632 Check for ao2_alloc failure in __ast_channel_internal_alloc.
Fix a crash that could occur in __ast_channel_internal_alloc if
ao2_alloc fails.

ASTERISK-24991 #close

Change-Id: I4ca89189eb22f907408cb87d0a1645cfe1314a90
2015-04-21 15:36:13 -05:00
Mark Michelson 3327560cb2 res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs.
When SUBSCRIBE dialogs were established, we never associated
the endpoint that created the subscription with the dialog
we end up creating. In most cases, this ended up not causing
any problems.

The actual bug that was observed was that when a device that
was behind NAT established a subscription with Asterisk, Asterisk
would end up sending in-dialog NOTIFY requests to the device's
private IP addres instead of the public address of the NAT router.

When Asterisk receives the initial SUBSCRIBE from the device,
res_pjsip_nat rewrites the contact to the public address on which the
SUBSCRIBE was received. This allows for the dialog to have its target
address set to the proper public address. Asterisk then would send a 200
OK response to the SUBSCRIBE, then a NOTIFY with the initial
subscription state. The device would then send a 200 OK response to
Asterisk's NOTIFY.

Here's where things went wrong. When the 200 OK arrived, res_pjsip_nat
did not rewrite the address in the Contact header. Then, when the PJSIP
dialog layer processed the 200 OK, PJSIP would perform a comparison
between the IP address in the Contact header and its saved target
address for the dialog. Since they differed, PJSIP would update the
target dialog address to be the address in the Contact header. From this
point, if Asterisk needed to send a NOTIFY to the device, the result was
that the NOTIFY would be sent to the private address that the device
placed in the Contact header.

The reason why res_pjsip_nat did not rewrite the address when it
received the 200 OK response was that it could not associate the
incoming response with a configured endpoint. This is because on a
response, the only way to associate the response to an endpoint is by
finding the dialog that the response is associated with and then finding
the endpoint that is associated with that dialog. We do not perform
endpoint lookups on responses. res_pjsip_pubsub skipped the step of
associating the endpoint with the dialog we created, so res_pjsip_nat
could not find the associated endpoint and therefore couldn't rewrite
the contact.

This commit message is like 50x longer than the actual fix.

ASTERISK 24981 #close
Reported by Mark Michelson

Change-Id: I2b963c58c063bae293e038406f7d044a8a5377cd
2015-04-21 05:01:43 -05:00
Richard Mudgett d08446ec36 chan_dahdi/sig_pri: Make post AMI HangupRequest events on PRI channels.
The chan_dahdi channel driver is a very old driver.  The ability for it to
support ISDN was added well after the initial analog support.  Setting the
softhangup flags is a carry over from the original analog code.  The
driver was not updated to call ast_queue_hangup() which will post the AMI
HangupRequest event.

* Changed sig_pri.c to call ast_queue_hangup() instead of setting the
softhangup flag when the remote party initiates a hangup.

ASTERISK-24895 #close
Reported by: Andrew Zherdin

Change-Id: I5fe2e48556507785fd8ab8e1c960683fd5d20325
2015-04-20 19:06:48 -05:00
Joshua Colp 96e18453f4 Merge "pjsip_options: Fix non-qualified contacts showing as unavailable" into 13 2015-04-20 17:23:56 -05:00
Diederik de Groot 2be9cc2643 Fix/Update clang-RAII macro implementation
- When you need to refer to 'variable XXX' outside a block, it needs
to be declared as '__block XXX', otherwise it will not be available with-
in the block, making updating that variable hard to do, and ast_free
lead to issues.

- Removed the #error message
because it creates complications when compiling external projects
against asterisk For example when using a different compiler than the
one used to compile asterisk. The warning/error should be generated
during the configure process not the compilation process

ASTERISK-24917
Change-Id: I12091228090e90831bf2b498293858f46ea7a8c2
2015-04-20 17:09:10 -05:00
George Joseph b74b2cdcda pjsip_options: Fix format specifier for int64_t rtt.
Contact status rtt is an int64_t and needs the PRId64 macro to
properly create the format specifier on 32-bit systems.

Change-Id: I4b8ab958fc1e9a179556a9b4ffa49673ba9fdec7
2015-04-20 08:53:00 -06:00
Matt Jordan 27a122af66 Merge "main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple" into 13 2015-04-20 06:29:56 -05:00
Joshua Colp 9581a0ebf3 Merge "Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled." into 13 2015-04-20 05:54:00 -05:00
George Joseph 63169e00ff pjsip_options: Fix non-qualified contacts showing as unavailable
The "Add qualify_timeout processing and eventing" patch introduced
an issue where contacts that had qualify_frequency set to 0 were
showing Unavailable instead Unknown.  This patch checks for
qualify_frequency=0 and create an "Unknown"  contact_status
with an RTT = 0.

Previously, the lack of contact_status implied Unknown but since
we're now changing endpoint state based on contact_status, I've
had to add new UNKNOWN status so that changes could trigger the
appropriate contact_status observers.

ASTERISK-24977: #close

Change-Id: Ifcbc01533ce57f0e4e584b89a395326e098b8fe7
2015-04-19 18:45:39 -06:00
Matt Jordan f0c82a173a main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple
When a PBX registrar is unloaded, it will fail to remove its extension from
the context root_table if a dialplan application used by that extension is
still loaded. This can be the case for AGI, which can be unloaded after several
of the standard PBX providers. Often, this is harmless; however, if the
extension's priorities are removed during the failed unloading *and* the
dialplan application later unregisters, it leaves a ticking timebomb for the
next PBX provider that attempts to iterate over the extensions. When that
occurs, the peer_table pointer on the extension will already be set to NULL.
The current code does not check to see if the pointer is NULL before passing
it to a hashtab function this is not NULL tolerant.

Since it is possible for the peer_table to be NULL when we normally would not
expect that to be the case, the solution in this patch is to simply skip over
processing an extension's priorities if peer_table is NULL.

Prior to this patch, the tests/pbx/callerid_match test would crash during
module unload. With this patch, the test no longer crashes after running.

ASTERISK-24774 #close
Reported by: Corey Farrell

Change-Id: I2bbeecb7e0f77bac303a1b9135e4cdb4db6d4c40
2015-04-19 16:03:18 -05:00
Richard Mudgett 82bc0fd3ad res_fax: Fix latent bug exposed by ASTERISK-24841 changes.
Three fax related tests started failing as a result of changes made for
ASTERISK-24841:
tests/fax/pjsip/gateway_t38_g711
tests/fax/sip/gateway_mix1
tests/fax/sip/gateway_mix3

Historically, ast_channel_make_compatible() did nothing if the channels
were already "compatible" even if they had a sub-optimal translation path
already setup.  With the changes from ASTERISK-24841 this is no longer
true in order to allow the best translation paths to always be picked.  In
res_fax.c:fax_gateway_framehook() code manually setup the channels to go
through slin and then called ast_channel_make_compatible().  With the
previous version of ast_channel_make_compatible() this was always a
no-operation.

* Remove call to ast_channel_make_compatible() in fax_gateway_framehook()
that now undoes what was just setup when the framehook is attached.

* Fixed locking around saving the channel formats in
fax_gateway_framehook() to ensure that the formats that are saved are
consistent.

* Fix copy pasta errors in fax_gateway_framehook() that confuses read and
write when dealing with saved channel formats.

ASTERISK-24841
Reported by: Matt Jordan

Change-Id: I6fda0877104a370af586a5e8cf9e161a484da78d
2015-04-17 18:05:37 -05:00
Corey Farrell c59a800707 Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled.
When DEBUG_THREADLOCALS is enabled it causes the threadlocal cleanup to be
called as a function.  This causes a compile error with raw threadstorage as
it uses NULL for cleanup.  This fix uses a macro that provides NULL when
DEBUG_THREADLOCALS is disabled, and replaces the call to "c_cleanup(data);"
with "{};" when DEBUG_THREADLOCALS is enabled.

ASTERISK-24975 #close
Reported by: Ashley Sanders

Change-Id: I3ef7428ee402816d9fcefa1b3b95830c00d5c402
2015-04-17 16:29:46 -05:00
Matt Jordan e05b076827 Merge "Detect potential forwarding loops based on count." into 13 2015-04-17 15:57:49 -05:00
Mark Michelson 4f1a8dbe92 Detect potential forwarding loops based on count.
A potential problem that can arise is the following:

* Bob's phone is programmed to automatically forward to Carol.
* Carol's phone is programmed to automatically forward to Bob.
* Alice calls Bob.

If left unchecked, this results in an endless loops of call forwards
that would eventually result in some sort of fiery crash.

Asterisk's method of solving this issue was to track which interfaces
had been dialed. If a destination were dialed a second time, then
the attempt to call that destination would fail since a loop was
detected.

The problem with this method is that call forwarding has evolved. Some
SIP phones allow for a user to manually forward an incoming call to an
ad-hoc destination. This can mean that:

* There are legitimate use cases where a device may be dialed multiple
times, or
* There can be human error when forwarding calls.

This change removes the old method of detecting forwarding loops in
favor of keeping a count of the number of destinations a channel has
dialed on a particular branch of a call. If the number exceeds the
set number of max forwards, then the call fails. This approach has
the following advantages over the old:

* It is much simpler.
* It can detect loops involving local channels.
* It is user configurable.

The only disadvantage it has is that in the case where there is a
legitimate forwarding loop present, it takes longer to detect it.
However, the forwarding loop is still properly detected and the
call is cleaned up as it should be.

Address review feedback on gerrit.

* Correct "mfgium" to "Digium"
* Decrement max forwards by one in the case where allocation of the
  max forwards datastore is required.
* Remove irrelevant code change from pjsip_global_headers.c

ASTERISK-24958 #close

Change-Id: Ia7e4b7cd3bccfbd34d9a859838356931bba56c23
2015-04-17 15:57:10 -05:00
George Joseph 674b18bdf0 pjsip_options: Add qualify_timeout processing and eventing
This is the second follow-on to https://reviewboard.asterisk.org/r/4572/ and the
discussion at
http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html

The basic issues are that changes in contact status don't cause events to be
emitted for the associated endpoint.  Only dynamic contact add/delete actions
update the endpoint.  Also, the qualify timeout is fixed by pjsip at 32 seconds
which is a long time.

This patch makes use of the new transaction timeout feature in r4585 and
provides the following capabilities...

1.  A new aor/contact variable 'qualify_timeout' has been added that allows the
user to specify the maximum time in milliseconds to wait for a response to an
OPTIONS message.  The default is 3000ms.  When the timer expires, the contact is
marked unavailable.

2.  Contact status changes are now propagated up to the endpoint as follows...
When any contact is 'Available', the endpoint is marked as 'Reachable'.  When
all contacts are 'Unavailable', the endpoint is marked as 'Unreachable'.  The
existing endpoint events are generated appropriately.

ASTERISK-24863 #close

Change-Id: Id0ce0528e58014da1324856ea537e7765466044a
Tested-by: Dmitriy Serov
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-04-17 15:31:14 -05:00
Matt Jordan f1abf51b73 Merge "res_pjsip: Refactor endpt_send_request to include transaction timeout" into 13 2015-04-17 15:29:40 -05:00
Matt Jordan ab5b38e434 Merge "res_pjsip: Add global option to limit the maximum time for initial qualifies" into 13 2015-04-17 10:30:37 -05:00
Joshua Colp ec77b6148f Merge "res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced" into 13 2015-04-17 10:25:44 -05:00
Kevin Harwell b56c1914fa bridge.c: NULL app causes crash during attended transfer
Due to a race condition there was a chance that during an attended transfer the
channel's application would return NULL. This, of course, would cause a crash
when attempting to access the memory. This patch retrieves the channel's app
at an earlier time in processing in hopes that the app name is available.
However, if it is not then "unknown" is used instead. Since some string value
is now always present the crash can no longer occur.

ASTERISK-24869 #close
Reported by: viniciusfontes
Review:

Change-Id: I5134b84c4524906d8148817719d76ffb306488ac
2015-04-16 15:38:07 -05:00
Scott Griepentrog 8d4ce7cc2b res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced
This change makes the send_notify of the sub_tree
not happen when the sub_tree has been deleted due
to the notify call failing, which avoids a crash.

ASTERISK-24970 #close

Change-Id: I1f20ffc08b192f59c457293b218025a693992cbf
2015-04-16 13:52:24 -05:00
George Joseph bf46799f0e res_pjsip: Refactor endpt_send_request to include transaction timeout
This is the first follow-on to https://reviewboard.asterisk.org/r/4572/ and the
discussion at
http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html

Since we currently have no control over pjproject transaction timeout, this
patch pulls the pjsip_endpt_send_request function out of pjproject and into
res_pjsip/endpt_send_transaction in order to implement that capability.

Now when the transaction is initiated, we also schedule our own pj_timer with
our own desired timeout.

If the transaction completes before either timeout, pjproject cancels its timer,
and calls our tsx callback where we cancel our timer and run the app callback.

If the pjproject timer times out first, pjproject calls our tsx callback where
we cancel our timer and run the app callback.

If our timer times out first, we terminate the transaction which causes
pjproject to cancel its timer and call our tsx callback where we run the app
callback.

Regardless of the scenario, pjproject is calling the tsx callback inside the
group_lock and there are checks in the callback to make sure it doesn't run
twice.

As part of this patch ast_sip_send_out_of_dialog_request was created to replace
its similarly named private function.  It takes a new timeout argument in
milliseconds (<= 0 to disable the timeout).

ASTERISK-24863 #close
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>

Change-Id: I0778dc730d9689c5147a444a04aee3c1026bf747
2015-04-16 12:31:31 -05:00
George Joseph 1b6f6ff841 res_pjsip: Add global option to limit the maximum time for initial qualifies
Currently when Asterisk starts initial qualifies of contacts are spread out
randomly between 0 and qualify_timeout to prevent network and system overload.
If a contact's qualify_frequency is 5 minutes however, that contact may be
unavailable to accept calls for the entire 5 minutes after startup.  So while
staggering the initial qualifies is a good idea, basing the time on
qualify_timeout could leave contacts unavailable for too long.

This patch adds a new global parameter "max_initial_qualify_time" that sets the
maximum time for the initial qualifies.  This way you could make sure that all
your contacts are initialy, randomly qualified within say 30 seconds but still
have the contact's ongoing qualifies at a 5 minute interval.

If max_initial_qualify_time is > 0, the formula is initial_interval =
min(max_initial_interval, qualify_timeout * random().  If not set,
qualify_timeout is used.

The default is "0" (disabled).

ASTERISK-24863 #close

Change-Id: Ib80498aa1ea9923277bef51d6a9015c9c79740f4
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-04-16 00:47:30 -05:00
George Joseph 5d218cde87 More .gitignore updates
Added .pyc and .sha1 to the top-level .gitignore.

Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a
Tested-by: George Joseph <george.joseph@fairview5.com>
2015-04-15 16:11:09 -05:00
Matt Jordan 97f83c4c53 Merge "Build System: Replace comment about setting menuselect defaults." into 13 2015-04-15 13:36:09 -05:00
Rodrigo Ramírez Norambuena abd56db3e0 cel_pgsql: Fix name string for log on unable allocate memory.
The LOG_ERROR has reference to CDR instead of CEL  for LENGTHEN_BUF1 and
LENGTHEN_BUF2.

ASTERISK-24965 #close
Reported by: Rodrigo Ramirez Norambuena

Change-Id: Icc818697d7d66d34bfe3048cdd15ca2b06c89744
2015-04-15 06:17:27 -05:00
Corey Farrell 222fbe1d9a Build System: Replace comment about setting menuselect defaults.
The Makefile claims that you can set default menuselect options by creating
~/.asterisk.makeopts or /etc/asterisk.makeopts, but those files have never
been respected in Asterisk 11 or 13.  This changes the comment to accurately
reflect that these files are not automatically used by the build system.

ASTERISK-13721 #close
Reported by: pj

Change-Id: Ibde804ff196283def49ccb9432fbf224a22586e2
2015-04-14 15:30:33 -04:00
Rodrigo Ramírez Norambuena 07e729cc7b cdr_pgsql: Fix CLI "cdr show pgsql status" command.
The command always showed the usage information.

* Fix the error in command validation for CLI_SHOWUSAGE.

ASTERISK-24959 #close
Reported by: Rodrigo Ramirez Norambuena

Change-Id: I584f0936bb01001336a468a55c1d05d79fe795d5
(cherry picked from commit 23a180cade)
2015-04-14 14:04:14 -05:00
George Joseph 7d43d85bea .gitignore updates for master/13
Added products of ./bootstrap

Added nmenuselect and gmenuselect to menuselect/

Change-Id: Ied658463958bafc04a9aff9ebc28e40c116a6e35
2015-04-14 09:47:12 -06:00
David M. Lee 3d27c223a5 Fixing extconf compile
During the mass code deletion for clang support, a stray backslash was
left behind that was causing utils to fail to compile.

Change-Id: I60e5fa58c9a5b248bde23aaada79ff663f87a2a1
2015-04-13 14:44:35 -05:00
Matt Jordan 30045b4e67 Merge "build_tools/make_version: Update version parsing for Git migration" into 13 2015-04-13 12:03:34 -05:00
Joshua Colp 88dbf6653e Merge "res_monitor: Add dependency on func_periodic_hook." into 13 2015-04-13 10:47:57 -05:00
Matt Jordan e996d8f728 build_tools/make_version: Update version parsing for Git migration
External systems - such as the Asterisk Test Suite - require knowledge of the
upstream branch. Unfortunately, after moving to Git, the Asterisk version
currently consists of only a 'GIT" prefix followed by an object blob,
e.g., GIT-as08d7. This makes it difficult for such systems to know what
features are available in a particular check out of Asterisk.

This patch fixes this by hardcoding the branch in a variable in the
make_version script. Since the mainline branches are not changed often -
typically only once a year - this is a reasonable approach to solving
the problem, and is more reliable than parsing the output of 'git branch
-vv'. Branches that track off of an upstream primary branch will then get the
benefit of knowing which mainline branch they are currently based off
of.

ASTERISK-24954 #close

Change-Id: I8090d5d548b6d19e917157ed530b914b7eaf9799
2015-04-13 10:31:21 -05:00
Matt Jordan d1a6f1a9f9 git migration: Remove support for file versions
Git does not support the ability to replace a token with a version
string during check-in. While it does have support for replacing a
token on clone, this is somewhat sub-optimal: the token is replaced
with the object hash, which is not particularly easy for human
consumption. What's more, in practice, the source file version was often
not terribly useful. Generally, when triaging bugs, the overall version
of Asterisk is far more useful than an individual SVN version of a file.
As a result, this patch removes Asterisk's support for showing source file
versions.

Specifically, it does the following:
* main/asterisk:
  - Refactor the file_version structure to reflect that it no longer
    tracks a version field.
  - Alter the "core show file version" CLI command such that it always
    reports the version of Asterisk. The file version is no longer
    available.

* main/manager: The Version key now always reports the Asterisk version.

* UPGRADE: Add notes for:
  - Modification to the ModuleCheck AMI Action.
  - Modification of the "core show file version" CLI command.

Change-Id: Ia932d3c64cd18a14a3c894109baa657ec0a85d28
2015-04-13 06:36:11 -05:00
Corey Farrell 0e4b997cd7 res_monitor: Add dependency on func_periodic_hook.
OPTIONAL_API has conditionals to define AST_OPTIONAL_API and
AST_OPTIONAL_API_ATTR differently based on if AST_API_MODULE is defined.
Unfortunately this is inside the include protection block, so only the
first status of AST_API_MODULE is respected.  For example res_monitor
is an optional API provider, but uses func_periodic_hook.  This makes
func_periodic_hook non-optional to res_monitor.

ASTERISK-17608 #close
Reported by: Warren Selby

Change-Id: I8fcf2a5e7b481893e17484ecde4f172c9ffb5679
2015-04-13 07:27:40 -04:00
Matt Jordan 91c1ed7ef6 Merge "main/editline: Add .gitignore." into 13 2015-04-12 15:27:21 -05:00
Corey Farrell a77c31b99c main/editline: Add .gitignore.
This patch adds a .gitignore for main/editline to ignore all build results.

Change-Id: I68c7bf375ea46282689e5a706534b69fca233b5d
2015-04-12 13:58:49 -05:00
Matt Jordan d918c3b78e .gitignore: Ignore tarballs (*.gz)
This patch updates the root .gitignore file to ignore files with a .gz
extension. This will cause git to ignore downloaded sound tarballs in
the the sounds/ directory.

Change-Id: I1e42fbfa02a8884231507b683e8e49ac3e278aaa
2015-04-12 13:48:19 -05:00
George Joseph 555b5f5d30 Add .gitignore and .gitreview files
Add the .gitignore and .gitreview files to the asterisk repo.

NB:  You can add local ignores to the .git/info/exclude file
without having to do a commit.

Common ignore patterns are in the top-level .gitignore file.
Subdirectory-specific ignore patterns are in their own .gitignore
files.

Change-Id: I4c8af3b8e3739957db545f7368ac53f38e99f696
Tested-by: George Joseph
2015-04-12 13:48:10 -05:00
Matthew Jordan 5807ca519c Blocked revisions 434708
........
main/event: Remove unnecessary assignment of negative value to enum

When cleaning up some clang compiler warnings, the comparison of a negative
value to an unsigned enum was removed. However, the initial assignment of a
negative value to said enum remained in the variable declaration. This patch
removes that assignment.

Thanks to ibercom in #asterisk-bugs for pointing it out.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-11 15:35:57 +00:00
Matthew Jordan d0d78d5732 clang compiler warnings: Fix various warnings for tests
This patch fixes a variety of clang compiler warnings for unit tests. This
includes autological comparison issues, ignored return values, and
interestingly enough, one embedded function. Fun!

Review: https://reviewboard.asterisk.org/r/4555

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4555.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434705 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434706 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-11 15:26:45 +00:00
Matthew Jordan 4cf7d0bf01 res/res_pjsip_t38: Add missing initialization of t38faxmaxdatagram
Prior to this patch, the far_max_datagram value on the UDPTL structure would
remain -1 if the remote endpoint fails to provide the SDP media attribute
T38FaxMaxDatagram. This can result in the INVITE request being rejected. With
this patch, we will now properly initialize the value with either the default
value or with the value provided by pjsip.conf's t38_udptl_maxdatagram
parameter.

Review: https://reviewboard.asterisk.org/r/4589

ASTERISK-24928 #close
Reported by: Juergen Spies
Tested by: Juergen Spies
patches:
  pjsipT38patch20150331.txt submitted by Juergen Spies (License 6698)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434688 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-11 15:10:34 +00:00
Richard Mudgett 13cd99682d chan_pjsip/res_pjsip/bridge_softmix/core: Improve translation path choices.
With this patch, chan_pjsip/res_pjsip now sets the native formats to the
codecs negotiated by a call.

* The changes in chan_pjsip.c and res_pjsip_sdp_rtp.c set the native
formats to include all the negotiated audio codecs instead of only the
initial preferred audio codec and later the currently received audio
codec.

* The audio frame handling in channel.c:ast_read() is more streamlined and
will automatically adjust to changes in received frame formats.  The new
policy is to remove translation and pass the new frame format to the
receiver except if the translation was to a signed linear format.  A more
long winded version is commented in ast_read() along with some caveats.

* The audio frame handling in channel.c:ast_write() is more streamlined
and will automatically adjust any needed translation to changes in the
frame formats sent.  Frame formats sent can change for many reasons such
as a recording is being played back or the bridged peer changed the format
it sends.  Since it is a normal expectation that sent formats can change,
the codec mismatch warning message is demoted to a debug message.

* Removed the short circuit check in
channel.c:ast_channel_make_compatible_helper().  Two party bridges need to
make channels compatible with each other.  However, transfers and moving
channels among bridges can result in otherwise compatible channels having
sub-optimal translation paths if the make compatible check is short
circuited.  A result of forcing the reevaluation of channel compatibility
is that the asterisk.conf:transcode_via_slin and codecs.conf:genericplc
options take effect consistently now.  It is unfortunate that these two
options are enabled by default and negate some of the benefits to the
changes in channel.c:ast_read() by forcing translation through signed
linear on a two party bridge.

* Improved the softmix bridge technology to better control the translation
of frames to the bridge.  All of the incoming translation is now normally
handled by ast_read() instead of splitting any translation steps between
ast_read() and the slin factory.  If any frame comes in with an unexpected
format then the translation path in ast_read() is updated for the next
frame and the slin factory handles the current frame translation.

This is the final patch in a series of patches aimed at improving
translation path choices.  The other patches are on the following reviews:
https://reviewboard.asterisk.org/r/4600/
https://reviewboard.asterisk.org/r/4605/

ASTERISK-24841 #close
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4609/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434671 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 23:29:37 +00:00
Kevin Harwell af458e2e60 chan_sip: make progressinband default to no
After the "progressinband" value setting of "never" was updated to never send a
183 this separated its use from the "no" value. Since "never" was the default,
but most users probably expect "no" this patch updates the default for the
"progressinband" setting to "no."

ASTERISK-24835 #close
Reported by: Andrew Nagy
Review: https://reviewboard.asterisk.org/r/4606/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434654 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 21:03:43 +00:00
Matthew Jordan 88b0fa7755 res_pjsip: Add an 'auto' option for DTMF Mode
This patch adds support for automatically detecting the type of DTMF that a
PJSIP endpoint supports. When the 'dtmf_mode' endpoint option is set to 'auto',
the channel created for an endpoint will attempt to determine if RFC 4733
DTMF is supported. If so, it will use that DTMF type. If not, the DTMF type
for the channel will be set to inband.

Review: https://reviewboard.asterisk.org/r/4438

ASTERISK-24706 #close
Reported by: yaron nahum
patches:
  yaron_patch_3_Feb.diff submitted by yaron nahum (License 6676)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434637 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 17:53:44 +00:00
George Joseph 16afee4651 res_pjsip_config_wizard: Cleanup load unload
While investigating other unload issues I realized that the load/unload process 
for the config wizard was pretty ugly so I've refactored it as follows...

When the res_pjsip sorcery instance is created the config_wizard bumps it's own 
module reference to prevent it from unloading while the sorcery instance is 
still active.  When res_pjsip unloads and it's sorcery instance is destroyed, 
the config wizard unrefs itself which then allows itself to unload cleanly.  
Since the config wizard now can't load after res_pjsip or unload before it 
(which should have been the correct behavior all along), I was able to remove 
the chunks of code in both load_module and unload_module that handled that case.

Ran the testsuite tests to insure there were no functional changes and REF_DEBUG 
to insure that Asterisk was shutting down cleanly with no FRACKs or leaks.

Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/4610/




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434619 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 16:59:59 +00:00
Richard Mudgett 125acc52fe bridge_softmix.c,channel.c: Minor code simplification and cleanup.
* Made code easier to follow in bridge_softmix.c:analyse_softmix_stats()
and made some debug messages more helpful.

* Made some debug and warning messages more helpful in
channel.c:set_format().

Review: https://reviewboard.asterisk.org/r/4607/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434617 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 16:37:20 +00:00
Richard Mudgett a63f7ad04a translate.c: Only select audio codecs to determine the best translation choice.
Given a source capability of h264 and ulaw, a destination capability of
h264 and g722 then ast_translator_best_choice() would pick h264 as the
best choice even though h264 is a video codec and Asterisk only supports
translation of audio codecs.  When the audio starts flowing, there are
warnings about a codec mismatch when the channel tries to write a frame to
the peer.

* Made ast_translator_best_choice() only select audio codecs.

* Restore a check in channel.c:set_format() lost after v1.8 to prevent
trying to set a non-audio codec.

This is an intermediate patch for a series of patches aimed at improving
translation path choices for ASTERISK-24841.

This patch is a complete enough fix for ASTERISK-21777 as the v11 version
of ast_translator_best_choice() does the same thing.  However, chan_sip.c
still somehow tries to call ast_codec_choose() which then calls
ast_best_codec() with a capability set that doesn't contain any audio
formats for the incoming call.  The remaining warning message seems to be
a benign transient.

ASTERISK-21777 #close
Reported by: Nick Ruggles

ASTERISK-24380 #close
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4605/
........

Merged revisions 434614 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 16:28:50 +00:00
Matthew Jordan c9791dba1f res/ari: Fix model validation for ChannelHold event
When the ChannelHold event was added, the 'musicclass' parameter was
erroneously removed. This caused the ChannelHold events to be rejected as
they failed model validation. This patch updates the Swagger schema such that
it now properly reflects the event that is being created.

Hooray for tests that catch things like this.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 14:55:54 +00:00
Matthew Jordan c39faa4729 channels/chan_iax2: Improve POKE expiration time calculation for lossy networks
POKE is used to check for peer availability; however, in networks with packet
loss, the current calculations may result in POKE expiration times that are too
short. This patch alters the expiration/retry time logic to take into account
the last known qualify round trip time, as opposed to always using a static
value for each peer.

Review: https://reviewboard.asterisk.org/r/4536

ASTERISK-22352 #close
Reported by: Frederic Van Espen

ASTERISK-24894 #close
Reported by: Y Ateya
patches:
  poke_noanswer_duration.diff submitted by Y Ateya (License 6693)
........

Merged revisions 434564 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434565 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-10 12:39:48 +00:00
George Joseph 75c2c85962 res_pjsip_phoneprov_provider: Fix reference leak on unload
res_pjsip_phoneprov_provider was leaking references to phoneprov objects due to 
a missing OBJ_NODATA in an ao2_callback in load_users().  Rather than adding the 
OBJ_NODATA, I changed load_users to use a more straightforward ao2_iterator.  
This plugged the leak but exposed an unload order issue between 
res_pjsip_phoneprov_provider, res_phoneprov and res_pjsip.

res_pjsip_phoneprov_provider unloads first, then res_phoneprov, then res_pjsip.  
Since res_pjsip_phoneprov_provider uses res_pjsip's sorcery instance, when it 
unloads, it's objects are still in the sorcery instance.  When res_pjsip 
unloads, it destroys all its objects including res_pjsip_phoneprov_provider's.  
The phoneprov destructor then attempts to unregister the extension from 
res_phoneprov but because res_phoneprov is already cleaned up, its users 
container is gone and we get a FRACK.

Simple solution, check for the NULL users container before attempting to remove 
the entry. Duh.

Ran tests/res_phoneprov/res_phoneprov_provider.  No leaks in 
res_pjsip_phoneprov_provider and no FRACKs.

Reported-by: Corey Farrell
Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/4608/
ASTERISK-24935 #close



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 22:35:11 +00:00
George Joseph 73c286a393 loader/main: Don't set ast_fully_booted until deferred reloads are processed
Until we have a true module management facility it's sometimes necessary for one 
module to force a reload on another before its own load is complete.  If 
Asterisk isn't fully booted yet, these reloads are deferred.  The problem is 
that asterisk reports fully booted before processing the deferred reloads which 
means Asterisk really isn't quite ready when it says it is.

This patch moves the report of fully booted after the processing of the deferred 
reloads is complete.

Since the pjsip stack has the most number of related modules, I ran the 
channels/pjsip testsuite to make sure there aren't any issues.  All tests 
passed.

Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/4604/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434544 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 22:31:58 +00:00
Kevin Harwell 5737650a67 res_pjsip: add CLI command to show global and system configuration
Added a new CLI command for res_pjsip that shows both global and system
configuration settings: pjsip show settings

ASTERISK-24918 #close
Reported by: Scott Griepentrog
Review: https://reviewboard.asterisk.org/r/4597/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434527 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 22:03:17 +00:00
Richard Mudgett 1695a5b85f chan_iax2.c: Fix ref leak in iax2_request().
* Increased warning message format capability string buffer size in
iax2_request().

Review: https://reviewboard.asterisk.org/r/4601/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434510 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 16:07:32 +00:00
Richard Mudgett 92c1688edb bridge_native_rtp.c: Defer allocation and check if it fails in native_rtp_bridge_compatible().
Review: https://reviewboard.asterisk.org/r/4601/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434508 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 15:54:05 +00:00
Matthew Jordan 2679d0100a res/res_pjsip_dlg_options: Add a module to handle in-dialog OPTIONS requests
This patch adds a new session supplement that handles in-dialog OPTIONS
requests. Said OPTIONS requests are sent a 200 OK, as an endpoint lookup
for the OPTIONS request would already have been done by the time the
session supplement receives the inbound request.

ASTERISK-24862 #close
Reported by: yaron nahum
patches:
  res_pjsip_dlg_options.c submitted by yaron nahum (License 6676)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434506 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 15:42:16 +00:00
Matthew Jordan 6ba6e3dffd clang compiler warnings: Fix autological comparisons
This fixes autological comparison warnings in the following:
 * chan_skinny: letohl may return a signed or unsigned value, depending on the
   macro chosen
 * func_curl: Provide a specific cast to CURLoption to prevent mismatch
 * cel: Fix enum comparisons where the enum can never be negative
 * enum: Fix comparison of return result of dn_expand, which returns a signed
   int value
 * event: Fix enum comparisons where the enum can never be negative
 * indications: tone_data.freq1 and freq2 are unsigned, and hence can never be
   negative
 * presencestate: Use the actual enum value for INVALID state
 * security_events: Fix enum comparisons where the enum can never be negative
 * udptl: Don't bother to check if the return value from encode_length is less
   than 0, as it returns an unsigned int
 * translate: Since the parameters are unsigned int, don't bother checking
   to see if they are negative. The cast to unsigned int would already blow
   past the matrix bounds.
 * res_pjsip_exten_state: Use a temporary value to cache the return of
   ast_hint_presence_state
 * res_stasis_playback: Fix enum comparisons where the enum can never be
   negative
 * res_stasis_recording: Add an enum value for the case where the recording
   operation is in error; fix enum comparisons
 * resource_bridges: Use enum value as opposed to -1
 * resource_channels: Use enum value as opposed to -1

Review: https://reviewboard.asterisk.org/r/4533
ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4533.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434469 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434470 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 12:56:30 +00:00
Matthew Jordan e05c8ae68e apps/app_queue: Prevent possible crash when evaluating queue penalty rules
Although it only occurred once, a crash occurred when a queue attempted to
evaluate a queue penalty rule that appeared to have already been destroyed.
In many locations in app_queue, a test is done to see if qe->pr is NULL;
however, when we dispose of a queue's penalty rules, we don't set the pointer
to NULL after free'ing it. This patch does that to prevent any dangling
pointers from lingering on the queue object.

Review: https://reviewboard.asterisk.org/r/4522

ASTERISK-23319 #close
Reported by: Vadim
patches:
  rb4552.patch submitted by Stefan Engström (License 6691)
........

Merged revisions 434448 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-09 02:05:04 +00:00
Jonathan Rose f21b45db49 res_pjsip_t38: Fix FAX failures when using PJSIP with authentication
Without this patch, if a PJSIP endpoint with udptl enabled and authentication
set attempted to use sendFax, the FAX session would fail during setup. This
was because the invite issued in response to being auth challenged would cause
the PJSIP channel performing the FAX to receive a second T38 framehook and
this would cause frames to be consumed in an inappropriate manner.

ASTERISK-24933 #close
Reported by: Jonathan Rose
Review: https://reviewboard.asterisk.org/r/4577/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 18:15:33 +00:00
Richard Mudgett 4441bb6a25 Bridging: Eliminate the unnecessary make channel compatible with bridge operation.
When a channel enters the bridging system it is first made compatible with
the bridge and then the bridge technology makes the channel compatible
with the technology.  For all but the DAHDI native and softmix bridge
technologies the make channel compatible with the bridge step is an
effective noop because the other technologies allow all audio formats.
For the DAHDI native bridge technology it doesn't matter because it is not
an initial bridge technology and chan_dahdi allows only one native format
per channel.  For the softmix bridge technology, it is a noop at best and
harmful at worst because the wrong translation path could be setup if the
channel's native formats allow more than one audio format.

This is an intermediate patch for a series of patches aimed at improving
translation path choices.

* Removed code dealing with the unnecessary step of making the channel
compatible with the bridge.

ASTERISK-24841
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4600/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434424 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 18:14:00 +00:00
Jonathan Rose f767440906 Security/tcptls: MitM Attack potential from certificate with NULL byte in CN.
When registering to a SIP server with TLS, Asterisk will accept CA signed
certificates with a common name that was signed for a domain other than the
one requested if it contains a null character in the common name portion of
the cert. This patch fixes that by checking that the common name length
matches the the length of the content we actually read from the common name
segment. Some certificate authorities automatically sign CA requests when
the requesting CN isn't already taken, so an attacker could potentially
register a CN with something like www.google.com\x00www.secretlyevil.net
and have their certificate signed and Asterisk would accept that certificate
as though it had been for www.google.com - this is a security fix and is
noted in AST-2015-003.

ASTERISK-24847 #close
Reported by: Maciej Szmigiero
Patches:
 asterisk-null-in-cn.patch submitted by mhej (license 6085)
........

Merged revisions 434337 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 434338 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434384 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 16:40:25 +00:00
Richard Mudgett 1712d16825 format_cache.c: Add missing slin12 format to ast_format_cache_is_slinear().
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434357 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 16:23:00 +00:00
Matthew Jordan ae39dd1f46 chan_iax2: Fix compilation issue due to funky merge
Don't mix declarations and code


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434314 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 12:33:49 +00:00
Matthew Jordan 05397ad01e chan_iax2: Fix crash caused by unprotected access to iaxs[peer->callno]
This patch fixes an access to the peer callnumber that is unprotected by a
corresponding mutex. The peer->callno value can be changed by multiple threads,
and all data inside the iaxs array must be procted by a corresponding lock
of iaxsl.

The patch moves the unprotected access to a location where the mutex is
safely obtained.

Review: https://reviewboard.asterisk.org/r/4599/

ASTERISK-21211 #close
Reported by: Jaco Kroon
patches:
  asterisk-11.2.1-iax2_poke-segfault.diff submitted by Jaco Kroon (License 5671)
........

Merged revisions 434291 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434292 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 12:00:01 +00:00
Matthew Jordan be13c72142 chan_sip: Handle IPv4 mapped IPv6 clients when NAT is enabled
When udpbindaddr is set to the IPv6 bind all address of '::', Asterisk will
attempt to handle both IPv4 and IPv6 addresses, although the information will
be stored in a struct with an AF_INET6 address type. However, the current
NAT handling code won't handle the IPv4 mapped IPv6 addresses correctly.
This patch adds an additional check for the mapped address case, allowing
the NAT code to handle clients even when the address is IPv6.

Review: https://reviewboard.asterisk.org/r/4563/

ASTERISK-18032 #close
Reported by: Christoph Timm
patches:
  nat_with_ipv6.diff submitted by Valentin Vidić (License 6697)
........

Merged revisions 434288 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434289 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 11:53:16 +00:00
Matthew Jordan f324870dab clang compiler warnings: Fix pointer-bool-converesion warnings
This patch fixes several warnings pointed out by the clang compiler.
* chan_pjsip: Removed check for data->text, as it will always be non-NULL.
* app_minivm: Fixed evaluation of etemplate->locale, which will always
  evaluate to 'true'. This patch changes the evaluation to use
  ast_strlen_zero.
* app_queue:
  - Fixed evaluation of qe->parent->monfmt, which always evaluates to
    true. Instead, we just check to see if the dereferenced pointer
    evaluates to true.
  - Fixed evaluation of mem->state_interface, wrapping it with a call to
    ast_strlen_zero.
* res_smdi: Wrapped search_msg->mesg_desk_term with calls to ast_strlen_zero.

Review: https://reviewboard.asterisk.org/r/4541

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4541.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434285 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434286 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-08 11:44:32 +00:00
Scott Griepentrog a6aed7f6f6 Revert accidental change in r434261
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 19:38:27 +00:00
Scott Griepentrog 0584e29300 pjsip: resolve compatibility problem with ast_sip_session
A change in r430179 inserted a variable near the top of a
structure caused a problem when running DPMA in a version
of Asterisk compiled across the change.  This patch moves
the new variable to the end of the structure, eliminating
the problem.

Review: https://reviewboard.asterisk.org/r/4574/
........

Merged revisions 433944 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434261 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 19:35:22 +00:00
Kevin Harwell d754f70239 bridge.c: Hangup attended transfer target after it has been swapped out
After completing an attended transfer the transfer target channel (the one that
gets swapped out) was not being hung up after leaving the bridge. This resulted
in a channel possibly being left around. Added an explicit softhangup for the
channel in question after the transfer is successfully completed in order to
make sure the channel is hung up.

ASTERISK-24782 #close
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/4575/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434240 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 16:40:44 +00:00
Mark Michelson c516981dc7 Do not queue message requests that we do not respond to.
If we receive a MESSAGE request that we cannot send a response
to, we should not send the incoming MESSAGE to the dialplan.

This commit should help the bouncing message_retrans test to
pass consistently.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434218 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 15:33:33 +00:00
Matthew Jordan ab803ec342 ARI: Add the ability to intercept hold and raise an event
For some applications - such as SLA - a phone pressing hold should not behave
in the fashion that the Asterisk core would like it to. Instead, the hold
action has some application specific behaviour associated with it - such as
disconnecting the channel that initiated the hold; only playing MoH to channels
in the bridge if the channels are of a particular type, etc.

One way of accomplishing this is to use a framehook to intercept the
hold/unhold frames, raise an event, and eat the frame. Tasty. This patch
accomplishes that using a new dialplan function, HOLD_INTERCEPT.

In addition, some general cleanup of raising hold/unhold Stasis messages was
done, including removing some RAII_VAR usage.

Review: https://reviewboard.asterisk.org/r/4549/

ASTERISK-24922 #close


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 15:21:17 +00:00
Matthew Jordan 488f093e97 clang compiler warnings: Fix sometimes-initialized warning in func_math
This patch fixes a bug in a unit test in func_math where a variable could be
passed to ast_free that wasn't allocated. This patch corrects the issue and
ensures that we only attempt to free a variable if we previously allocated
it.

Review: https://reviewboard.asterisk.org/r/4552

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4552.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434190 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434191 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 02:09:59 +00:00
Matthew Jordan c027133f6d clang compiler warnings: Fix non-literal-null-conversion warnings
Clang will flag errors when a char pointer is set to '\0', as opposed to a
value that the char pointer points to. This patch fixes this warning
in a variety of locations.

Review: https://reviewboard.asterisk.org/r/4551

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4551.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434187 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434188 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-07 02:03:20 +00:00
Kevin Harwell 2270c40d33 res_pjsip: config option 'timers' can't be set to 'no'
When setting the configuration option 'timers' equal to 'no' the bit flag was
not properly negated. This patch clears all associated flags and only sets the
specified one. pjsip will handle any necessary flag combinations. Also went
ahead and did similar for the '100rel' option.

ASTERISK-24910 #close
Reported by: Ray Crumrine
Review: https://reviewboard.asterisk.org/r/4582/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434131 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 19:23:08 +00:00
George Joseph 95de71f247 build: Fixes for gcc 5 compilation
These are fixes for compilation under gcc 5.0...

chan_sip.c:    In parse_request needed to make 'lim' unsigned.
inline_api.h:  Needed to add a check for '__GNUC_STDC_INLINE__' to detect C99 
               inline semantics (same as clang).
ccss.c:        In ast_cc_set_parm, needed to fix weird comparison.
dsp.c:         Needed to work around a possible compiler bug.  It was throwing 
               an array-bounds error but neither
               sgriepentrog, rmudgett nor I could figure out why.
manager.c:     In action_atxfer, needed to correct an array allocation.

This patch will go to 11, 13, trunk.

Review: https://reviewboard.asterisk.org/r/4581/
Reported-by: Jeffrey Ollie
Tested-by: George Joseph
ASTERISK-24932 #close
........

Merged revisions 434113 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434114 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 19:02:23 +00:00
Matthew Jordan d54ccda3b1 clang compiler warnings: Remove large chunks of unused code from extconf
This patch fixes a warning caught by clang, in which it detected that large
chunks of extconf were unused. Frankly, I wish we could pretend that all of
extconf was unused, but alas, that is not yet the case.

A few extraneous functions in the parking tests were removed as well, for
the same reason.

Review: https://reviewboard.asterisk.org/r/4553

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4553.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434093 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 18:18:08 +00:00
Matthew Jordan 0ecd472e4f clang compiler warnings: Fix sometimes-uninitialized warning in pbx_config
This patch fixes a warning caught by clang, in which a char pointer could be
assigned to before it was initialized. The patch re-organizes the code to
ensure that the pointer is always initialized, even on off nominal paths.

Review: https://reviewboard.asterisk.org/r/4529

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4529.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434090 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434091 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 18:03:37 +00:00
Matthew Jordan 4e7be5b2dc clang compiler warnings: Fix format specified in framehook
This patch fixes an invalid format specifier used in the formatting of an
ERROR message in the framehook code. The format specifier specifies a
type of 'unsigned short', but the argument passed to it is of type 'int'.
The patch changes the format specifier to 'i'.

Review: https://reviewboard.asterisk.org/r/4540

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4535.patch submitted by dkdegroot (License 6600)
........

Merged revisions 434087 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434088 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 17:52:13 +00:00
Mark Michelson 2443b40341 Ensure that a non-zero sample rate is returned for all formats.
Versions of Asterisk prior to 12 defaulted to 8000 as a sample rate
if one was not provided by a format. In Asterisk 13, this was removed.
The result was that some calculations which involve dividing by the
sample rate resulted in dividing by 0. The fix being put in place
here is to have the same default fallback that was present in previous
versions of Asterisk.

Asterisk-24914 #close
Reported by Marcello Ceschia



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434046 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 16:02:09 +00:00
Corey Farrell b1102cd642 res_pjsip_phoneprov_provider: Revert 433996 / 433997.
res_pjsip_phoneprov_provider is using ao2_callback with OBJ_MULTIPLE, then
ignoring the return.  OBJ_NODATA flag was to prevent a reference leak, but
this caused the module to FRACK on unload.  Revert change until this can
be investigated further.

ASTERISK-24935
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4578/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434025 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 15:16:03 +00:00
Mark Michelson 0f25076f67 ParkedCall: Don't allow dialplan fallthrough after retrieving parked call.
This is a change to align behavior with that of Asterisk 11 and previous versions.
In those versions, if a parked call were retrieved, and the call ended, the parked
call retriever would be hung up after the ParkedCall application ran. Prior to this
patch, in Asterisk 13, the same situation would result in the parked call retriever
falling through to additional priorities in the extension where the ParkedCall
application was called. With this patch, the behavior between Asterisk 11 and 13
aligns.

ASTERISK-24899 #close
Reported by Malcolm Davenport
Patches:
	ASTERISK-24899.patch uploaded by Mark Michelson(license #5049)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434022 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-06 14:50:53 +00:00
Corey Farrell 709fa14b44 res_pjsip_phoneprov_provider: Fix leaked OBJ_MULTIPLE iterator.
res_pjsip_phoneprov_provider was using ao2_callback with OBJ_MULTIPLE, then
ignoring the return.  Added OBJ_NODATA flag to prevent a reference leak.

ASTERISK-24935 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4578/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433996 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-05 12:53:47 +00:00
Mark Michelson 1ee8424f27 res_pjsip_messaging: Serialize outbound SIP MESSAGEs
Outbound SIP MESSAGEs had the potential to be sent out
of order from how they were specified in a set of
dialplan steps.

This change creates a serializer for sending outbound
MESSAGE requests on. This ensures that the MESSAGEs are
sent by Asterisk in the same order that they were sent
from the dialplan.

ASTERISK-24937 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/4579



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-03 21:53:28 +00:00
Scott Griepentrog 169e57d2e0 pjsip: resolve compatibility problem with ast_sip_session
A change in r430179 inserted a variable near the top of a
structure caused a problem when running DPMA in a version
of Asterisk compiled across the change.  This patch moves
the new variable to the end of the structure, eliminating
the problem.

Review: https://reviewboard.asterisk.org/r/4574/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433944 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-02 14:56:00 +00:00
Corey Farrell 1eb0c5f4e8 Tell menuselect that MALLOC_DEBUG conflicts with DEBUG_CHAOS.
DEBUG_CHAOS was marked as conflicting with MALLOC_DEBUG, but
for this to work correctly MALLOC_DEBUG must also be marked
as conflicting with DEBUG_CHAOS.

Review: https://reviewboard.asterisk.org/r/4557/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433923 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-02 10:31:49 +00:00
Ashley Sanders e301185983 stasis: set a channel variable on websocket disconnect error
Resolve compile errors caused by r433863 by fixing the
documentation xml to comply with the schema.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433888 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-01 16:25:30 +00:00
Ashley Sanders a1f12d9231 stasis: set a channel variable on websocket disconnect error
Resolve compile errors caused by r433839 by included the missing
header file, pbx.h.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-04-01 03:26:18 +00:00
Ashley Sanders 7293ecd90b stasis: set a channel variable on websocket disconnect error
When an error occurs while writing to a web socket, the web socket is
disconnected and the event is logged. A side-effect of this, however, is that
any application on the other side waiting for a response from Stasis is left
hanging indefinitely (as there is no mechanism presently available for
notifying interested parties about web socket error states in Stasis).

To remedy this scenario, this patch introduces a new channel variable:
STASISSTATUS.

The possible values for STASISSTATUS are:
SUCCESS         - The channel has exited Stasis without any failures
FAILED          - Something caused Stasis to croak. Some (not all) possible
                  reasons for this:
                    - The app registry is not instantiated;
                    - The app requested is not registered;
                    - The app requested is not active;
                    - Stasis couldn't send a start message

ASTERISK-24802
Reported By: Kevin Harwell
Review: https://reviewboard.asterisk.org/r/4519/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433839 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-31 22:00:17 +00:00
Richard Mudgett 94949e7f2f chan_sip: Fix expression in unit test /channels/chan_sip/test_sip_rtpqos.
Fix misplaced parentheses in original fabs() expression.
........

Merged revisions 433816 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433817 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-31 16:55:49 +00:00
Corey Farrell 9967739669 Re-add _ast_mem_backtrace_buffer variable for ABI compatibility.
Modules built prior to commit of r4502 expect to link at runtime
to the variable _ast_mem_backtrace_buffer.  This change re-adds
the variable to the C file only.

Review: https://reviewboard.asterisk.org/r/4558/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-31 11:47:14 +00:00
Corey Farrell 2d39bc5528 Fix an ABI compatibility issue with ast_log_safe for modules.
Binary modules are sometimes built against the latest release of
Asterisk in each branch, and need to be compatible with all
releases of that branch.  This change ensures that utils.h only
uses ast_log_safe from the core.  For modules and utilities ast_log
is used instead.

Review: https://reviewboard.asterisk.org/r/4548/
........

Merged revisions 433772 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 11:42:00 +00:00
Matthew Jordan 5f8faf16af clang compiler warnings: Fix -Wabsolute-value warnings
This patch fixes several warnings caught by clang - in this case, usage of the
abs function on non-integer values. This patch uses labs and fabs, as
appropriate, in the various affected files.

Review: https://reviewboard.asterisk.org/r/4525

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4525.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433749 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 02:44:57 +00:00
Matthew Jordan 09b681e344 clang compiler warnings: Fix invalid enum conversion
This patch fixes some invalid enum conversion warnings caught by clang. In
particular:
* chan_sip: Several functions mixed usage of the st_refresher_param
  enum and st_refresher enum. This patch corrects the functions to use the
  right enum.
* chan_pjsip: Fixed mixed usage of ast_sip_session_t38state and ast_t38_state.
* strings: Fixed incorrect usage of AO2 flags with strings container.
* res_stasis: Change a return enumeration to stasis_app_user_event_res.

Review: https://reviewboard.asterisk.org/r/4535

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4535.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433746 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433747 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 02:39:18 +00:00
Matthew Jordan 7f33abb827 main/stdtime/localtime: Fix warning introduced in r433720
The patch in r433720 caused a warning to be kicked back by gcc. It occurred
due to this check in unistd.h:

    if (__nbytes > __bos0 (__buf))
        return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf));

That is, if __nbytes is greater than the result of GCC's built-in object size
for the struct, we'll kick back a warning.

As it turns out, this is because there is an error in the code in the patch.
We are passing the address of the pointer to the struct, not iev, which is a
pointer to the struct. Hence, the number of bytes is probably going to be lot
larger than the number of bytes that make up a pointer! This patch changes
the code just read from the pointer to the struct - which fixes the warning.

ASTERISK-24917
........

Merged revisions 433743 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433744 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 02:29:10 +00:00
Matthew Jordan 47eeb67e14 clang compiler warnings: Ignore -Wunused-command-line-argument
Asterisk's build system has a tendency to pass include directives for libraries
to everything compiled within a particular group of source files. This means
we pass the header for libxml2 to things that don't necessarily need it. As a
result, we ignore this particular warning.

Review: https://reviewboard.asterisk.org/r/4545/

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4545.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433720 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433721 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 01:56:34 +00:00
Matthew Jordan dbb4d6f9e7 clang compiler warnings: Fix warning for -Wgnu-variable-sized-type-not-at-end
This patch fixes a warning caught by clang, wherein a variable sized struct is
not located at the end of a struct. While the code in question actually
expected this, this is a good warning to watch for. Hence, this patch refactors
the code in question to not have two variable length elements in the same
struct.

Review: https://reviewboard.asterisk.org/r/4530/

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4530.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433717 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433718 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-30 01:52:47 +00:00
Matthew Jordan e126ab9eeb clang compiler warnings: Fix a variety of "unused" warnings
This patch fixes the -Wunused-value -Wunused-variable -Wunused-const-variable
errors caught by clang. Specifically:

* apps/app_queue.c: removed unused qpm_cmd_usage[], qum_cmd_usage[],
                    qsmp_cmd_usage[]
* cel/cel_sqlite3_custom.c: removed unused name[] = "cel_sqlite3_custom"
* channels/chan_pjsip.c: removed unused desc[] = "PJSIP Channel"
* codecs/gsm/src/gsm_create.c: removed unused ident[] = "$Header$"
* funcs/func_env.c:729: Fixed ast_str_append_substr.
* main/editline/np/strlcat.c: removed unused rcsid variable
* main/editline/np/strlcpy.c: removed unused rcsid variable
* main/security_events.c: removed unused TIMESTAMP_STR_LEN
* utils/conf2ael.c: removed unused cfextension_states
* utils/extconf.c: removed unused cfextension_states

Review: https://reviewboard.asterisk.org/r/4526

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4526.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433693 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:56:12 +00:00
Matthew Jordan 2f6534527d clang compiler warnings: Fix -Wself-assign
Assigning a variable to itself isn't super useful. However, the WAV format
modules make use of this in order to perform byte endian checks. This patch
works around the warning by only performing the self assignment if we are
going to do more than just assign it to ourselves. Which is odd, but true.

Review: https://reviewboard.asterisk.org/r/4544/

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4544.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433690 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:48:09 +00:00
Matthew Jordan eb70993a50 clang compiler warnings: Fix -Wparantheses-equality warnings
Clang will treat ((a == b)) as a warning, as it reasonably expects that the
developer may have intended to write (a == b) or ((a = b)). This patch cleans
up all instances where equality, not assignment, was intended between two
parantheses.

Review: https://reviewboard.asterisk.org/r/4531/

ASTERISK-24917
Repoted by: dkdegroot
patches:
  rb4531.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433687 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433688 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:40:49 +00:00
Matthew Jordan c0ff16036a clang compiler warnings: Fix -Wbitfield-constant-conversion warning
In chan_iax2, we attempt to assign a -1 to a bitfield. This gets caught by
clang, as it will truncate the -1 to a 1 implicitly.

Instead, we just assign the value a '1'.

Review: https://reviewboard.asterisk.org/r/4537/

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4537.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433683 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:31:39 +00:00
Matthew Jordan 844bc76bef clang compiler warnings: Fix -Winitializer-overrides
This patch fixes clange compiler warnings for initializer overrides.
Specifically:

res_pjsip/config_transport maps PJSIP_TLSV1_METHOD to the same enumeration
value as PJSIP_SSL_DEFAULT_METHOD. When initializing an array containing
those enum values, we therefore initialize the value twice to two different
values, "tlsv1" and "default". This patch changes it to just initialize
the index in the array to "tlsv1".

Review: https://reviewboard.asterisk.org/r/4539/

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4539.patch submitted by dkdegroot (License 6600)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433682 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:27:08 +00:00
Matthew Jordan 5e204042d9 clang compiler warnings: Fix -Wunused-function; make inline function static
This patch fixes clang compilers warnings for unused functions. Specifically:
 * channels/chan_iax2: removed user_ref function
 * main/dsp.c: removed goertzel_update function
 * main/config.c: made variable_list_switch static

Review: https://reviewboard.asterisk.org/r/4527

ASTERISK-24917
Reported by: dkdegroot
patches:
  rb4527.patch submitted by dkdegroot (License 6600)
........

Merged revisions 433678 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433680 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-28 12:19:53 +00:00
Jonathan Rose cfbf5fbe91 SAC: Add a few basic queues
Review: https://reviewboard.asterisk.org/r/4503/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433658 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 22:34:48 +00:00
Jonathan Rose 1a50d8d4c2 SAC: Add conferencing extensions and configuration
Review: https://reviewboard.asterisk.org/r/4504/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433656 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 22:25:29 +00:00
Rusty Newton c6c08d755d configs/basic-pbx - Super Awesome Company example configs Phase 1, Patch 2
Example configuration files for a "basic PBX" deployment for the fictitious
Super Awesome Company. Details at https://reviewboard.asterisk.org/r/4488/
and https://wiki.asterisk.org/wiki/display/AST/Super+Awesome+Company

Patch 4488 includes all functionality needed for SAC's outside connectivity
and some externally accessed features, as well as outbound dialing.

Reported by: Malcolm Davenport
Tested by: Rusty Newton

Review: https://reviewboard.asterisk.org/r/4488/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433624 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 21:15:42 +00:00
Richard Mudgett 13557675d4 res_pjsip_registrar_expire.c: Made use ao2 container template routines and eliminated some RAII_VAR() usage.
* Converted the contact_autoexpire container to use the ao2 template hash
and cmp functions.  Also made use the OBJ_SEARCH_xxx names instead of the
deprecated names.

* Eliminates several unnecessary uses of RAII_VAR().

Review: https://reviewboard.asterisk.org/r/4524/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 21:04:14 +00:00
Mark Michelson 85feac857c Add stateful PJSIP response API call, and use it for out-of-dialog responses.
Asterisk had an issue where retransmissions of MESSAGE requests resulted in
Asterisk processing the retransmission as if it were a new MESSAGE request.

This patch fixes the issue by creating a transaction in PJSIP on the incoming
request. This way, if a retransmission arrives, the PJSIP transaction layer
will resend the response and Asterisk will not ever see the retransmission.

ASTERISK-24920 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/4532/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433619 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 20:30:18 +00:00
Richard Mudgett dc2cf21144 res_pjsip_registrar_expire.c: Cleanup scheduler leaks on unload/shutdown.
Contact expiration object refs were leaked when the module was unloaded.

* Made empty the scheduler of entries before destroying it to release the
object ref held by the scheduler entry.

Review: https://reviewboard.asterisk.org/r/4523/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 17:50:51 +00:00
Matthew Jordan 6e6f5b3a1f res/res_timing_kqueue: Update the module to conform to current timer API
This patch updates the kqueue timing module to conform to current timer API.

This fixes issues with using the kqueue timing source on Asterisk 13 on
FreeBSD 10. These issues include:

- Remove support for kevent64().  The values used to support Asterisk timers
  fit within 32bits and so can be handled on all platforms via kevent().

- Provide debug logging for, but do not track, unacked events.  This matches
  the behavior of all other timer implementations.

- Implement continuous mode by triggering and leaving active, a user event.
  This ensures that the file descriptor for the timer returns immediately from
  poll(), without placing the load of a high speed timer on the kernel.

- In kqueue_timer_get_max_rate(), don't overstate the capability of the timer.
  On some platforms, UINT_MAX is greater than INTPTR_MAX, the largest integer
  type kqueue supports for timers.

- In kqueue_timer_get_event(), assume the caller woke up from poll() and just
  return the mode the timer is currently in. This matches all other timer
  implementations.

- Adjust the test code now that unacked events are not tracked.

Review: https://reviewboard.asterisk.org/r/4465/

ASTERISK-24857 #close
Reported by: scsiguy
Tested by: Ed Hynan
patches:
  rb4465.patch submitted by scsiguy (License 6692)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433574 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 14:41:05 +00:00
Corey Farrell b0df413fb2 Fix link error for utils/aelparse.
Use the standard ast_log instead of ast_log_safe for STANDALONE programs.

Review: https://reviewboard.asterisk.org/r/4538/
........

Merged revisions 433549 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433550 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 12:26:13 +00:00
Corey Farrell d01706ce1e Improved and portable ast_log recursion avoidance
This introduces a new logger routine ast_log_safe.  This routine should be
used for all error messages in code that can be run as a result of ast_log.
ast_log_safe does nothing if run recursively.  All error logging in
astobj2.c, strings.c and utils.h have been switched to ast_log_safe.

This required adding support for raw threadstorage.  This provides direct
access to the void* pointer in threadstorage.  In ast_log_safe, NULL is used
to signify that this thread is not already running ast_log_safe, (void*)1 when
it is already running.  This was done since it's critical that ast_log_safe
do nothing that could log during recursion checking.

ASTERISK-24155 #close
Reported by: Timo Teräs
Review: https://reviewboard.asterisk.org/r/4502/
........

Merged revisions 433522 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433523 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-27 07:09:26 +00:00
Corey Farrell 4b225e2104 Fix compile errors caused by r4500 / r4501.
* Add ast_register_cleanup to utils/clicompat.c to deal with
  any utils that copy sources from main.
* Asterisk 13+: remove unused variables from core_local.c.

Review: https://reviewboard.asterisk.org/r/4534/
........

Merged revisions 433499 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433500 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-26 23:07:15 +00:00
Corey Farrell 6adf26f14d Replace most uses of ast_register_atexit with ast_register_cleanup.
Since 'core stop now' and 'core restart now' do not stop modules,
it is unsafe for most of the core to run cleanups.  Originally all
cleanups used ast_register_atexit, and were only changed when it
was shown to be unsafe.  ast_register_atexit is now used only when
absolutely required to prevent corruption and close child processes.

Exceptions that need to use ast_register_atexit:
* CDR: Flush records.
* res_musiconhold: Kill external applications.
* AstDB: Close the DB.
* canary_exit: Kill canary process.

ASTERISK-24142 #close
Reported by: David Brillert

ASTERISK-24683 #close
Reported by: Peter Katzmann

ASTERISK-24805 #close
Reported by: Badalian Vyacheslav

ASTERISK-24881 #close
Reported by: Corey Farrell

Review: https://reviewboard.asterisk.org/r/4500/
Review: https://reviewboard.asterisk.org/r/4501/
........

Merged revisions 433495 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433497 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-26 22:19:21 +00:00
Corey Farrell d0df545a44 res_pjsip: Enable unload of all modules at shutdown.
* Move most of res_pjsip:module_unload to unload_pjsip to resolve crashes
  caused by running PJSIP functions from non-PJSIP threads.
* Remove call to pjsip_endpt_destroy(ast_pjsip_endpoint), it was causing
  crashes in some cases.  In theory pj_shutdown() should take care of this.
* Mark res_pjsip_keepalive and res_pjsip_session as allowed to unload at
  shutdown.
* Resolve leaked config global in res_pjsip_notify.
* Unregister pubsub pjsip service module.
* Implement cleanup for res_pjsip_session.

ASTERISK-24731 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4498/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-26 17:46:46 +00:00
Kevin Harwell fd434a210f app_confbridge: file playback blocks dtmf
Attempting to execute DTMF in a confbridge while file playback (prompt,
announcement, etc) is occurring is not allowed. You have to wait until
the sound file has completed before entering DTMF. This patch fixes it
so that app_confbridge now monitors for dtmf key presses during menu
driven file playback. If a key is pressed playback stops and it executes
the matched menu option.

ASTERISK-24864 #close
Reported by: Steve Pitts
Review: https://reviewboard.asterisk.org/r/4510/
........

Merged revisions 433445 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433446 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-26 17:04:13 +00:00
Richard Mudgett dea885a607 A couple minor cleanup tweaks.
* In res/res_sorcery_realtime.c: Broke long line.

* In main/bucket.c: Eliminated unnecessary NULL check as
ast_sorcery_unref() is NULL tolerant and set the global object to NULL
after unref in the system shutdown bucket_cleanup().


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-25 18:37:04 +00:00
Matthew Jordan 05de9082a5 res_xmpp: Buddies are always auto-registered when processing the roster
Due to a quirk in the configuration handling of res_xmpp, the 'autoregister'
setting was never actually processed. This was due to not properly copying
over the global settings to the client settings when applying the
configuration to the run-time object.

Review: https://reviewboard.asterisk.org/r/4496/

ASTERISK-14233
ASTERISK-24780 #close
Reported by: Simon Arlott
patches:
  asterisk-13.1.0-24780 uploaded by Simon Arlott (License 5756)
........

Merged revisions 433395 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433396 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-25 15:30:42 +00:00
Richard Mudgett b1e9552b08 chan_pjsip: Add "rpid_immediate" option to prevent unnecessary "180 Ringing" messages.
Incoming PJSIP call legs that have not been answered yet send unnecessary
"180 Ringing" or "183 Progress" messages every time a connected line
update happens.  If the outgoing channel is also PJSIP then the incoming
channel will always send a "180 Ringing" or "183 Progress" message when
the outgoing channel sends the INVITE.

Consequences of these unnecessary messages:

* The caller can start hearing ringback before the far end even gets the
call.

* Many phones tend to grab the first connected line information and refuse
to update the display if it changes.  The first information is not likely
to be correct if the call goes to an endpoint not under the control of the
first Asterisk box.

When connected line first went into Asterisk in v1.8, chan_sip received an
undocumented option "rpid_immediate" that defaults to disabled.  When
enabled, the option immediately passes connected line update information
to the caller in "180 Ringing" or "183 Progress" messages as described
above.

* Added "rpid_immediate" option to prevent unnecessary "180 Ringing" or
"183 Progress" messages.  The default is "no" to disable sending the
unnecessary messages.

ASTERISK-24781 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4473/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433338 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-24 19:26:11 +00:00
Matthew Jordan a3fe43fbdc Fix compilations errors on 64-bit OpenBSD systems
In versiong 5.5, OpenBSD went to 64-bit time values. This requires a cast to
(long) when printing members of certain time structs.

Review: https://reviewboard.asterisk.org/r/4507

ASTERISK-24879 #close
Reported by: snuffy
Tested by: snuffy
patches:
  openbsd-time64.diff uploaded by snuffy (License 5024)
........

Merged revisions 433268 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-22 23:58:23 +00:00
Matthew Jordan 08a88aab15 Fix compilation issues for OpenBSD
This patch addresses compilation issues for OpenBSD. Specifically, it
addresses:
 * It allows including <sys/vmmeter.h> in asterisk.c
 * Provides a needed (size_t) cast in xmldoc.c

In 13+, it also addresses a conditional inclusion in loader.c.

Review: https://reviewboard.asterisk.org/r/4506

ASTERISK-24880 #close
Reported by: snuffy
Tested by: snuffy
patches:
  misc-openbsd.diff uploaded by snuffy (License 5024)
........

Merged revisions 433245 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-22 23:04:53 +00:00
Richard Mudgett 6ca98524bf Audit ast_pjsip_rdata_get_endpoint() usage for ref leaks.
Valgrind found some memory leaks associated with
ast_pjsip_rdata_get_endpoint().  The leaks would manifest when sending
responses to OPTIONS requests, processing MESSAGE requests, and
res_pjsip supplements implementing the incoming_request callback.

* Fix ast_pjsip_rdata_get_endpoint() endpoint ref leaks in
res/res_pjsip.c:supplement_on_rx_request(),
res/res_pjsip/pjsip_options.c:send_options_response(),
res/res_pjsip_messaging.c:rx_data_to_ast_msg(), and
res/res_pjsip_messaging.c:send_response().

* Eliminated RAII_VAR() use with ast_pjsip_rdata_get_endpoint() in
res/res_pjsip_nat.c:nat_on_rx_message().

* Fixed inconsistent but benign return value in
res/res_pjsip/pjsip_options.c:options_on_rx_request().

Review: https://reviewboard.asterisk.org/r/4511/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433222 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-20 19:52:30 +00:00
Richard Mudgett 1c09028171 res_pjsip_sdp_rtp,sorcery: Fix invalid access and memory leak respectively.
Valgrind found a memory leak and invalid access.

* Fix invalid access by sscanf() being fed a non-nul terminated string of
digits in res/res_pjsip_sdp_rtp.c:get_codecs().

* Fix memory leak in main/sorcery.c:sorcery_object_field_destructor().

* Fix potential NULL pointer dereference in
main/xmldoc.c:xmldoc_get_syntax_config_option().

Review: https://reviewboard.asterisk.org/r/4513/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-20 18:23:57 +00:00
Matthew Jordan 73dcea59bd funcs/func_env: Fix regression caused in FILE read operation
When r432935 was merged, it did correctly fix a situation where a FILE read
operation on the middle of a file buffer would not read the requested length
in the parameters passed to the FILE function. Unfortunately, it would also
allow the FILE function to append more bytes than what was available in the
buffer if the length exceeded the end of the buffer length.

This patch takes the minimum of the remaining bytes in the buffer along with
the calculated length to append provided by the original patch, and uses
that as the length to append in the return result. This patch also updates
the unit tests with the scenarios that were originally pointed out in
ASTERISK-21765 that the original implementation treated incorrectly.

ASTERISK-21765
........

Merged revisions 433173 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433174 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-19 19:19:51 +00:00
Corey Farrell 4c84dca2d8 logger: Apply default console logging when configuration cannot be loaded.
When logger.conf is missing or invalid enable console logging and display
an error message.

ASTERISK-24817 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4497/
........

Merged revisions 433122 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-19 10:20:40 +00:00
Corey Farrell 958bc84caf chan_sip: Simplify dialog/peer references, improve REF_DEBUG output.
* Replace functions for ref/undef of dialogs and peers with macro's
  to call ao2_t_bump/ao2_t_cleanup.
* Enable passthough of REF_DEBUG caller information to sip_alloc and
  find_call.

ASTERISK-24882 #close 
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4189/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433115 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-19 09:53:37 +00:00
Corey Farrell 7fddae99dd chan_sip: Fix dialog reference leaked to scheduler for reinvite_timeout.
Release the scheduler reference to the dialog for reinvite timeout during
dialog_unlink_all.

ASTERISK-24876 #close 
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4491/
........

Merged revisions 433112 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433113 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-19 09:44:03 +00:00
Richard Mudgett dba0f1ad67 res_pjsip_session: Fix off-nominal extra unref of session.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433088 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-18 02:34:00 +00:00
Scott Griepentrog 2c7b945149 Various: bugfixes found via chaos
Using DEBUG_CHAOS several instances of a null
pointer crash, and one uninitialized variable
were uncovered and fixed.  Also added details
on why Asterisk failed to initialize.

Review: https://reviewboard.asterisk.org/r/4468/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 22:15:09 +00:00
Scott Griepentrog 1fb1c81923 core: Introduce chaos into memory allocations
Locate potential crashes by exercising seldom
used code paths.  This patch introduces a new
define DEBUG_CHAOS, and mechanism to randomly
return an error condition from functions that
will seldom do so.  Functions that handle the
allocation of memory get the first treatment.

Review: https://reviewboard.asterisk.org/r/4463/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433060 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 21:57:26 +00:00
Richard Mudgett 2122c205e6 Audit ast_sockaddr_resolve() usage for memory leaks.
Valgrind found some memory leaks associated with ast_sockaddr_resolve().
Most of the leaks had already been fixed by earlier memory leak hunt
patches.  This patch performs an audit of ast_sockaddr_resolve() and found
one more.

* Fix ast_sockaddr_resolve() memory leak in
apps/app_externalivr.c:app_exec().

* Made main/netsock2.c:ast_sockaddr_resolve() always set the addrs
parameter for safety so the pointer will never be uninitialized on return.
The same goes for res/res_pjsip_acl.c:extract_contact_addr().

* Made functions that call ast_sockaddr_resolve() with RAII_VAR()
controlling the addrs variable use ast_free instead of ast_free_ptr to
provide better MALLOC_DEBUG information.

Review: https://reviewboard.asterisk.org/r/4509/
........

Merged revisions 433056 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433057 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 21:49:30 +00:00
Kevin Harwell 94fe4a9178 res_pjsip: Allow configuration of endpoint identifier query order
Updated some documentation stating that endpoint identifiers registered without
a name are place at the front of the lookup list. Also renamed register method
'ast_sip_register_endpoint_identifier_by_name' to
'ast_sip_register_endpoint_identifier_with_name'

ASTERISK-24840
Reported by: Mark Michelson



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433031 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 18:34:12 +00:00
Kevin Harwell 1f428f25f0 res_pjsip: Allow configuration of endpoint identifier query order
This patch fixes previously reverted code that caused binary incompatibility
problems with some modules. And like the original patch it makes sure that
no matter what order the endpoint identifier modules were loaded, priority is
given based on the ones specified in the new global 'endpoint_identifier_order'
option.

ASTERISK-24840
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4489/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433028 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 18:20:01 +00:00
Richard Mudgett 522f063186 res_pjsip: Add reason comment.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-17 16:10:39 +00:00
Matthew Jordan 5c03a5f2e7 main/frame: Don't report empty disallow values as an error
In realtime, it is normal to have a database with both 'allow' and 'disallow'
columns in the schema. It is perfectly valid to have an 'allow' value of
'!all,g722,ulaw,alaw' and no 'disallow' value. Unlike in static conf files,
you can't *not* provide the disallow value. Thus, the empty disallow value
causes a spurious WARNING message, which is kind of annoying.

This patch makes it so that a 'disallow' value with no ... value ... is
ignored. Granted, you can still screw this up as well, as technically
specifying 'disallow=all,!ulaw' allows only ulaw, and then you would have no
'allow' value in your database. But really, why would you do that? WHY?

ASTERISK-16779 #close
Reported by: Atis Lezdins
........

Merged revisions 432970 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432971 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-14 02:28:56 +00:00
Joshua Colp f7c6bedb06 func_curl: Don't hold exclusive lock when performing HTTP request.
This code originally kept a lock held when performing the HTTP
request to ensure that the options provided to curl remain valid.
This doesn't seem to be necessary these days and holding the lock
caused requests to happen sequentially instead of in parallel.

ASTERISK-18708 #close
Reported by: Dave Cabot
........

Merged revisions 432948 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-14 02:00:29 +00:00
Joshua Colp 287a22435f core: Fix tab completion of "core set debug channel" CLI command.
The "core set debug channel" CLI command mistakenly had source filenames
added to its tab completion. This occurred because the CLI generator fell back
to the "core set debug" command which permits setting debug at a source
filename level.

ASTERISK-21038 #close
Reported by: Richard Kenner
........

Merged revisions 432944 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-14 01:36:56 +00:00
Matthew Jordan 37d33ed997 FILE: fix retrieval of file contents when offset is specified
The loop that reads in a file was not correctly using the offset when
determining what bytes to append to the output. This patch corrects
the logic such that the correct portion of the file is extracted when an
offset is specified.

ASTERISK-21765
Reported by: John Zhong
Tested by: Matt Jordan, Di-Shi Sun
patches:
  file_read_390821.patch uploaded by Di-Shi Sun (License 5076)
........

Merged revisions 432935 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432938 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-14 01:21:23 +00:00
Matthew Jordan a4c27baf47 apps/app_amd: Document maximum_word_length option; fix AMDCAUSE documentation
This patch corrects the documentation for the AMD application. Specifically:
* It documents the maximum_word_length option, which limits the maximum allowed
  length of a single utterance.
* It clarifies the AMDCAUSE values MAXWORDS and MAXWORDLENGTH. MAXWORDLENGTH
  was documented as MAXWORDS, while MAXWORDS was undocumented.

Thanks to the issue reporter, Frank DiGennaro, for pointing out the issues.

ASTERISK-19470 #close
Reported by: Frank DiGennaro
........

Merged revisions 432918 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432920 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-14 00:18:40 +00:00
Richard Mudgett a3292230b8 chan_pjsip: AMI action PJSIPShowEndpoint closes AMI connection on error.
Also fixed similar problem with AMI action PJSIPShowEndpoints.

ASTERISK-24872 #close
Reported by: Dmitriy Serov

Review: https://reviewboard.asterisk.org/r/4487/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432894 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-13 17:04:43 +00:00
Richard Mudgett 34aa0214eb chan_pjsip/res_pjsip_callerid: Make Party ID handling simpler and consistent.
The res_pjsip modules were manually checking both name and number
presentation values when there is a function that determines the combined
presentation for a party ID struct.  The function takes into account if
the name or number components are valid while the manual code rarely
checked if the data was even valid.

* Made use ast_party_id_presentation() rather than manually checking party
ID presentation values.

* Ensure that set_id_from_pai() and set_id_from_rpid() will not return
presentation values other than what is pulled out of the SIP headers.  It
is best if the code doesn't assume that AST_PRES_ALLOWED and
AST_PRES_USER_NUMBER_UNSCREENED are zero.

* Fixed copy paste error in add_privacy_params() dealing with RPID
privacy.

* Pulled the id->number.valid test from add_privacy_header() and
add_privacy_params() up into the parent function add_id_headers() to skip
adding PAI/RPID headers earlier.

* Made update_connected_line_information() not send out connected line
updates if the connected line number is invalid.  Lower level code would
not add the party ID information and thus the sent message would be
unnecessary.

* Eliminated RAII_VAR usage in send_direct_media_request().

Review: https://reviewboard.asterisk.org/r/4472/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432892 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-13 16:26:38 +00:00
Kevin Harwell 0497b7b155 Revert - res_pjsip: Allow configuration of endpoint identifier query order
Due to a break in binary compatibility with some other modules these changes
are being reverted until the issue can be resolved.

ASTERISK-24840
Reported by: Mark Michelson



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-13 14:48:40 +00:00
Matthew Jordan b9fd61f2c7 main/audiohook: Update internal sample rate on reads
When an audiohook is created (which is used by the various Spy applications
and Snoop channel in Asterisk 13+), it initially is given a sample rate of
8kHz. It is expected, however, that this rate may change based on the media
that passes through the audiohook. However, the read/write operations on the
audiohook behave very differently.

When a frame is written to the audiohook, the format of the frame is checked
against the internal sample rate. If the rate of the format does not match
the internal sample rate, the internal sample rate is updated and a new SLIN
format is chosen based on that sample rate. This works just fine.

When a frame is read, however, we do something quite different. If the format
rate matches the internal sample rate, all is fine. However, if the rates
don't match, the audiohook attempts to "fix up" the number of samples that
were requested. This can result in some seriously large number of samples
being requested from the read/write factories.

Consider the worst case - 192kHz SLIN. If we attempt to read 20ms worth of
audio produced at that rate, we'd request 3840 samples (192000 / (1000 / 20)).
However, if the audiohook is still expecting an internal sample rate of 8000,
we'll attempt to "fix up" the requested samples to:

  samples_converted = samples * (ast_format_get_sample_rate(format) /
                                 (float) audiohook->hook_internal_samp_rate);

  which is:

  92160 = 3840 * (192000 / 8000)

This results in us attempting to read 92160 samples from our factories, as
opposed to the 3840 that we actually wanted. On a 64-bit machine, this
miraculously survives - despite allocating up to two buffers of length 92160
on the stack. The 32-bit machines aren't quite so lucky. Even in the case where
this works, we will either (a) get way more samples than we wanted; or (b) get
about 3840 samples, assuming the timing is pretty good on the machine.

Either way, the calculation being performed is wrong, based on the API users
expectations.

My first inclination was to allocate the buffers on the heap. As it is,
however, there's at least two drawbacks with doing this:
(1) It's a bit complicated, as the size of the buffers may change during the
    lifetime of the audiohook (ew).
(2) The stack is faster (yay); the heap is slower (boo).

Since our calculation is flat out wrong in the first place, this patch fixes
this issue by instead updating the internal sample rate based on the format
passed into the read operation. This causes us to read the correct number of
samples, and has the added benefit of setting the audihook with the right
SLIN format.

Note that this issue was caught by the Asterisk Test Suite as a result of
r432195 in the 13 branch. Because this issue is also theoretically possible
in Asterisk 11, the change is being made here as well.

Review: https://reviewboard.asterisk.org/r/4475/
........

Merged revisions 432810 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432811 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-12 12:58:11 +00:00
Matthew Jordan f5bc032567 Add support for the clang compiler; update RAII_VAR to use BlocksRuntime
RAII_VAR, which is used extensively in Asterisk to manage reference counted
resources, uses a GCC extension to automatically invoke a cleanup function
when a variable loses scope. While this functionality is incredibly useful
and has prevented a large number of memory leaks, it also prevents Asterisk
from being compiled with clang.

This patch updates the RAII_VAR macro such that it can be compiled with clang.
It makes use of the BlocksRuntime, which allows for a closure to be created
that performs the actual cleanup.

Note that this does not attempt to address the numerous warnings that the clang
compiler catches in Asterisk.

Much thanks for this patch goes to:
* The folks on StackOverflow who asked this question and Leushenko for
  providing the answer that formed the basis of this code:
  http://stackoverflow.com/questions/24959440/rewrite-gcc-cleanup-macro-with-nested-function-for-clang
* Diederik de Groot, who has been extremely patient in working on getting this
  patch into Asterisk.

Review: https://reviewboard.asterisk.org/r/4370/

ASTERISK-24133
ASTERISK-23666
ASTERISK-20399
ASTERISK-20850 #close
Reported by: Diederik de Groot
patches:
  RAII_CLANG.patch uploaded by Diederik de Groot (License 6600)
........

Merged revisions 432807 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-12 12:39:26 +00:00
Richard Mudgett bd029688cd res_pjsip: Move internal init/destroy prototypes to private header file.
Done as a separate commit from a finding in
https://reviewboard.asterisk.org/r/4467/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-11 16:38:20 +00:00
Richard Mudgett c24a294f0b res_pjsip: Fix pjsip.conf type=global object default value handling.
When a type=global section is not defined in pjsip.conf the global
defaults are not applied.  As a result the mandatory Max-Forwards header
is not added to SIP messages for res_pjsip/chan_pjsip.

The handling of pjsip.conf type=global objects has several problems:

1) If the global object is missing the defaults are not applied.

2) If the global object is missing the default_outbound_endpoint's default
value is not returned by ast_sip_global_default_outbound_endpoint().

3) Defines are needed so default values only need to be changed in one
place.

* Added a sorcery instance observer callback to check if there were any
type=global sections loaded.  If there were more than one then issue an
error message.  If there were none then apply the global defaults.

* Fixed ast_sip_global_default_outbound_endpoint() to return the
documented default when no type=global object is defined.

* Made defines for the global default values.

* Increased the default_useragent[] size because SVN version strings can
get lengthy and 128 characters may not be enough.

* Fixed an off-nominal code path ref leak in global_alloc() if the string
fields fail to initialize.

* Eliminated RAII_VAR in get_global_cfg() and
ast_sip_global_default_outbound_endpoint().

ASTERISK-24807 #close
Reported by: Anatoli

Review: https://reviewboard.asterisk.org/r/4467/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432766 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-11 15:24:58 +00:00
Richard Mudgett 737064bfa4 res_pjsip: Fixed invalid empty Server and User-Agent SIP headers.
Setting pjsip.conf useragent to an empty string results in an empty SIP
header being sent.

* Made not add an empty SIP header item to the global SIP headers list.

Review: https://reviewboard.asterisk.org/r/4467/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432764 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-11 15:18:55 +00:00
Joshua Colp bc357c1d7e core: Don't create snapshots with locks.
Snapshots are immutable and are never changed. Allocating them
with a lock is wasteful.

Review: https://reviewboard.asterisk.org/r/4469/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-10 23:09:17 +00:00
Matthew Jordan afea98dc73 res/res_config_odbc: Fix improper escaping of backslashes with MySQL
When escaping backslashes with MySQL, the proper way to escape the characters
in a LIKE clause is to escape the '\' four times, i.e., '\\\\'. To quote the
MySQL manual:

"Because MySQL uses C escape syntax in strings (for example, “\n” to represent
a newline character), you must double any “\” that you use in LIKE strings.
For example, to search for “\n”, specify it as “\\n”. To search for “\”,
specify it as “\\\\”; this is because the backslashes are stripped once by the
parser and again when the pattern match is made, leaving a single backslash to
be matched against."

ASTERISK-24808 #close
Reported by: Javier Acosta
patches:
  res_config_odbc.diff uploaded by Javier Acosta (License 6690)
........

Merged revisions 432720 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432721 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-10 21:33:40 +00:00
Matthew Jordan 055001716c app_voicemail: Fix crash with IMAP backends when greetings aren't present
When an IMAP backend is in use and greetings are set to be used, but aren't
present for a user in their IMAP folder, Asterisk will crash. This occurs
due to the mailstream being set to the 'greetings' folder and being left
in that particular state, regardless of the success/failure of the attempt
to access the folder the mailstream points to. Later access of the mailstream
assumes that it points to the 'INBOX' (or some other folder), resulting in
either a crash (if the greetings folder didn't exist and the mailstream is
invalid) or an inability to read messages from the 'INBOX' folder.

This patch restores the mailstream to its correct state after accessing the
greetings. This fixes the crash, and sets the mailstream to the state that
VoiceMailMain expects.

Note that while ASTERISK-23390 also contained a patch for this issue, the
patch on ASTERISK-24786 is the one being merged here.

Review: https://reviewboard.asterisk.org/r/4459/

ASTERISK-23390 #close
Reported by: Ben Smithurst

ASTERISK-24786 #close
Reported by: Graham Barnett
Tested by: Graham Barnett
patches:
  app_voicemail.c.patch.SIGSEGV3rev2 uploaded by Graham Barnett (License 6685)
........

Merged revisions 432695 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-10 18:13:08 +00:00
Matthew Jordan 92178247ee localtime: Fix file descriptor leak on kqueue(2) systems
The localtime management in the Asterisk core contains a thread that watches
for changes in the local timezone. On systems where the directory containing
/etc/localtime is modified frequently, the thread monitoring the changes will
be woken up to determine if any changes in timezone have occurred. When using
kqueue(2), this can cause a leak of file descriptors due to some improper
management of resources.

This patch updates the kqueue(2) handling in localtime, such that is no longer
leaks resources.

Review: https://reviewboard.asterisk.org/r/4450/

ASTERISK-24739 #close
Reported by: Ed Hynan
patches:
  11.15.0-u.diff uploaded by Ed Hynan (Licnese 6680)
  11.7.0-u.diff uploaded by Ed Hynan (License 6680)
  svn-trunk-Jan-26-2015-u.diff uploaded by Ed Hynan (License 6680)
........

Merged revisions 432691 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432693 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-10 17:47:04 +00:00
Richard Mudgett cae712d986 res_pjsip_refer: Fix occasional unexpected BYE sent after receiving a REFER.
A race condition happened between initiating a transfer and requesting
that a dialog termination be delayed.  Occasionally, the transferrer
channels would exit the bridge and hangup before the dialog termination
delay was requested.

* Made request dialog termination delay before initiating the transfer
action.  If the transfer fails then cancel the delayed dialog termination
request.

ASTERISK-24755 #close
Reported by: John Bigelow

Review: https://reviewboard.asterisk.org/r/4460/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432668 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-10 16:04:32 +00:00
Kevin Harwell 110b99646c res_pjsip: Allow configuration of endpoint identifier query order
It's possible to have a scenario that will create a conflict between endpoint
identifiers. For instance an incoming call could be identified by two different
endpoint identifiers and the one chosen depended upon which identifier module
loaded first. This of course causes problems when, for example, the incoming
call is expected to be identified by username, but instead is identified by ip.
This patch adds a new 'global' option to res_pjsip called
'endpoint_identifier_order'. It is a comma separated list of endpoint
identifier names that specifies the order by which identifiers are processed
and checked.

ASTERISK-24840 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4455/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-09 16:12:18 +00:00
Joshua Colp 714cb27000 res_rtp_asterisk: Fix wrongful use of USE_PJPROJECT define.
As pjproject is now used as a shared library a different define,
HAVE_PJPROJECT, is used to specify if pjproject is present.

ASTERISK-24830 #close
Reported by: Stefan Engström


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432614 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-08 01:46:17 +00:00
Richard Mudgett e158517a9c res_pjsip_refer: Make safely get the context for a blind transfer.
Made safely get the TRANSFER_CONTEXT channel value while the channel is
locked in refer_incoming_attended_request() and
refer_incoming_blind_request().  The pointer returned by
pbx_builtin_getvar_helper() is only valid while the channel is locked.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-06 22:50:40 +00:00
Richard Mudgett 5d16d80b59 res_pjsip_refer: Made refer_attended_alloc() not create the ao2 object with a lock.
The lock is unused.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432574 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-06 22:12:32 +00:00
Jonathan Rose 772793f18e app: Add functions to swap voicemail function table for testing purposes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432556 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-06 21:11:11 +00:00
Richard Mudgett 8cced7767c chan_dahdi/sig_analog: Fix distinctive ring detection to suck less.
The distinctive ring feature interferes with detecting Caller ID and
appears to have been broken for years.  What happens is if you have a
ring-ring cadence as used in the UK you get too many DAHDI events for the
distinctive ring pattern array and Caller ID detection is aborted.  I
think when Zapata/DAHDI added the ring begin event it broke distinctive
ring.  More events happen than before and the code does no filtering of
which event times are recorded in the pattern array.

* Made distinctive ring only record the ringt count when the ring ends
instead of on just any DAHDI event.  Distinctive ring can be ring,
ring-ring, ring-ring-ring, or different ring durations for the up to three
rings.

* Fixed the distinctive ring detection enable (chan_dahdi.conf option
usedistinctiveringdetection) to be per port instead of somewhat per port
and somewhat global.  This has been broken since v1.8.

* Fixed using the default distinctive ring context when the detected
pattern does not match any configured dringX patterns.  The default
context did not get set when the previous call was a matched distinctive
ring pattern and the current call is not matched.  This has been broken
since v1.8.

* Made distinctive ring have no effect on Caller ID detection when it is
disabled.  Caller ID detection just monitors for 10 seconds before giving
up.

* Fixed leak of struct callerid_state memory when a polarity reversal
during Caller ID detection causes the incoming call to be aborted.

DAHDI-1143
AST-1545
ASTERISK-24825 #close
Reported by: Richard Mudgett

ASTERISK-17588
Reported by: Daniel Flounders

Review: https://reviewboard.asterisk.org/r/4444/
........

Merged revisions 432530 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432534 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-06 20:18:08 +00:00
Richard Mudgett 13e715b30c chan_sip: Fix realtime locking inversion when poking a just built peer.
When a realtime peer is built it can cause a locking inversion when the
just built peer is poked.  If the CLI command "sip show channels" is
periodically executed then a deadlock can happen because of the locking
inversion.

* Push the peer poke off onto the scheduler thread to avoid the locking
inversion of the just built realtime peer.

AST-1540
ASTERISK-24838 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4454/
........

Merged revisions 432526 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-06 19:31:21 +00:00
George Joseph 06fa8db864 app_voicemail: Fix compile breaking in app_voicemail with IMAP_STORAGE.
There is a leftover "assert" in app_voicemail/__messagecount that references 
variables that don't exist.  This causes the compile to fail when 
--enable-dev-mode and IMAP_STORAGE are selected.

This patch removes the assert.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4461/
........

Merged revisions 432484 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432485 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-05 16:38:09 +00:00
Matthew Jordan 999d96d405 translate: Prevent invalid memory accesses on fast shutdown
When a 'core restart now' or 'core stop now' is executed and a channel is
currently in a media operation, the translator matrix can be destroyed while a
channel is currently blocked on getting the best translation choice
(see ast_translator_best_choice). When the channel gets the mutex, the
translation matrix now has invalid memory, and Asterisk crashes.

This patch does two things:
(1) We now only clean up the translation matrix on a graceful shutdown. In that
    case, there are no channels, and so there is no risk of this occurring.
(2) We also now set the __matrix and __indextable to NULL. In some initial
    backtraces when this occurred, it looked as if there was a memory corruption
    occurring, and it wasn't until we determined that something had restarted
    Asterisk that the issue became clear. By setting these to NULL on shutdown,
    it becomes a bit easier to determine why a crash is occurring.

Note that we could litter the code with NULL checks on the __matrix, but the
act of making the translation matrix cleaned up on shutdown should preclude
this issue from occurring in the first place, and this part of the code needs
to be as fast as possible.

Review: https://reviewboard.asterisk.org/r/4457/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432453 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-04 18:52:10 +00:00
Matthew Jordan 9cdadc168c res/res_pjsip_sdp_rtp: Revert portion of r432195
Unfortunately, while initial testing with ConfBridge did not reproduce the
audio problem alluded to in the comment in res_pjsip_sdp_rtp, further testing
did show that bridge_softmix and/or ConfBridge has a severe problem bridging
two or more participants at different sampling rates. Sometimes, it even picks
odd sampling rates that cause hideous audio problems.

This patch backs out the offending portion of the code until the issues in
the affected bridging modules can be more properly analyzed.

ASTERISK-24841


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-03-02 19:14:19 +00:00
Richard Mudgett 9d85e855de ARI: Fix crash if integer values used in JSON payload 'variables' object.
Sending the following ARI commands caused Asterisk to crash if the JSON
body 'variables' object passes values of types other than strings.

POST /ari/channels
POST /ari/channels/{channelid}
PUT /ari/endpoints/sendMessage
PUT /ari/endpoints/{tech}/{resource}/sendMessage

* Eliminated RAII_VAR usage in ast_ari_channels_originate_with_id(),
ast_ari_channels_originate(), ast_ari_endpoints_send_message(), and
ast_ari_endpoints_send_message_to_endpoint().

ASTERISK-24751 #close
Reported by:  jeffrey putnam

Review: https://reviewboard.asterisk.org/r/4447/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432404 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-27 18:23:22 +00:00
Scott Griepentrog c33c5183a5 Dial API: add self destruct option when complete
This patch adds a self-destruction option to the
dial api.  The usefulness of this is mostly when
using async mode to spawn a separate thread used
to handle the new call, while the calling thread
is allowed to go on about other business.

The only alternative to this option would be the
calling thread spawning a new thread, or hanging
around itself waiting to destroy the dial struct
after completion.

Example of use (minus error checking):

  struct ast_dial *dial = ast_dial_create();

  ast_dial_append(dial, "PJSIP", "200", NULL);

  ast_dial_option_global_enable(dial, AST_DIAL_OPTION_ANSWER_EXEC, "Echo");
  ast_dial_option_global_enable(dial, AST_DIAL_OPTION_SELF_DESTROY, NULL);

  ast_dial_run(dial, NULL, 1);

The dial_run call will return almost immediately
after spawning the new thread to run and monitor
the dial.  If the call is answered, it is placed
into the echo app.  When completed, it will call
ast_dial_destroy() on the dial structure.

Note that any allocations made to pass values to
ast_dial_set_user_data() or dial options must be
free'd in a state callback function on any of:
  AST_DIAL_RESULT_UNASWERED,
  AST_DIAL_RESULT_ANSWERED,
  AST_DIAL_RESULT_HANGUP, or 
  AST_DIAL_RESULT_TIMEOUT.

Review: https://reviewboard.asterisk.org/r/4443/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432385 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-26 18:52:56 +00:00
Kevin Harwell 169058e73f app_chanspy, channel: fix frame leaks
Fixed a couple of frame leaks that were found during testing.

ASTERISK-24828 #close
Reported by: John Hardin
Review: https://reviewboard.asterisk.org/r/4445/
........

Merged revisions 432362 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432363 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-26 17:07:50 +00:00
Matthew Jordan de86b30dba make: Remove 'res_features' from libraries to link against with cygwin/mingw32
Both the apps and channels Makefiles still listed 'res_features' as modules to
link against when compiling for cygwin or mingw32. This module hasn't existed
for quite some time.

ASTERISK-18105 #close
Reported by: feyfre
........

Merged revisions 432341 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432342 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-26 04:58:19 +00:00
Matthew Jordan 34989bd9c8 channels/chan_sip: Don't send a BYE after final response when PBX thread fails
When Asterisk fails to start a PBX thread for a new channel - for example, when
the maxcalls setting in asterisk.conf is exceeded - we currently send a final
response, and then attempt to send a BYE request to the UA. Since that's all
sorts of wrong, this patch fixes that by setting sipalreadygone on the sip_pvt
such that we don't get stuck sending BYE requests to something that does not
want it.

Note that this patch is a slight modification of the one on ASTERISK-15434.
For clarity, it explicitly calls sipalreadygone with the calls to transmit a
final response.

ASTERISK-21845
ASTERISK-15434 #close
Reported by: Makoto Dei
Tested by: Matt Jordan
patches:
  sip-pbxstart-failed.patch uploaded by Makoto Dei (License 5027)
........

Merged revisions 432320 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-26 03:03:06 +00:00
Rusty Newton 53aec7a969 configs/basic-pbx - Super Awesome Company example configs Phase 1, Patch 1
Example configuration files for a "basic PBX" deployment for the fictitious
Super Awesome Company. Details at https://reviewboard.asterisk.org/r/4379/
and https://wiki.asterisk.org/wiki/display/AST/Super+Awesome+Company

Reported by: Malcolm Davenport
Tested by: Rusty Newton

Review: https://reviewboard.asterisk.org/r/4379/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-25 23:48:15 +00:00
Matthew Jordan 474fec4f92 configure: Promote SQLite3 "not installed" warning to error
Since Asterisk won't build without the library, not having it is definitely
an error. Thanks to Kyle Kurz for pointing this out.
........

Merged revisions 432280 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432281 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-25 23:09:19 +00:00
Matthew Jordan ddff640f94 channels/chan_sip: Clarify WARNING message in mismatched SRTP scenario
When we receive an SDP as part of an offer/answer for a peer/friend has been
configured to require encryption, and that SDP offer/answer failed to provide
acceptable crypto attributes, we currently issue a WARNING that uses the phrase
"we" and "requested". In this case, both of those terms are ambiguous - the
user will probably think "we" is Asterisk (it most likely isn't) and it may
not be a "request", so much as an SDP that was received in some fashion.

This patch makes the WARNING messages slightly less bad and a bit more
accurate as well.

ASTERISK-23214 #close
Reported by: Rusty Newton
........

Merged revisions 432277 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432278 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-25 23:02:47 +00:00
Matthew Jordan dd8ac00f24 channels/sip/sdp_crypto: Handle SRTP keys negotiated with key lifetime/MKI
Prior to this patch, SDP offers negotiating SDES-SRTP crypto attributes would
be rejected if those crypto attributes contained either a key lifetime or a
MKI parameter. While from a theoretical point of view this was defensible -
Asterisk does not support key lifetimes or multiple crypto keys - from a
practical point of view, this is quite a problem. A large number of endpoints
offer lifetimes/MKI, which Asterisk can tolerate so long as it doesn't actually
have to support anything more than a single key or refresh the key.
In reality, this is (so far as we've seen) always the case.

This patch is a forward port of Olle's work in the lingon-srtp-key-lifetime-1.8
branch. To quote Olle from ASTERISK-17721, it handles lifetime/MKI parameters
in the following fashion:

> The Lingon branch now handle lifetime and MKI parameters.
>
> We only accept lifetimes up to max for the crypto and higher than 10 hours
> for packetization of 20 ms (50 pps).
>
> We only handle MKI with index 1.
>
> We do not really bother with counting packets and reinviting at end of
> lifetime, so the min of 10 hours kind of takes care of most calls. If there
> are longer ones, we rely on the other side for re-invites.
>
> It's still not perfect, but I personally think this is an improvement. A
> configuration option for minimum lifetime accepted could be added.

When the patch was ported forward, I decided against adding a configuration
option as Olle's handling was more than sufficient for every case I've seen
come through the issue tracker or through interoperability testing. We can
revisit that decision if it proves to be false.

A few small other tweaks were made to the surrounding code to reduce
indentation and provide better type safety for the 'tag' parameter.

Review: https://reviewboard.asterisk.org/r/4419/
Review: https://reviewboard.asterisk.org/r/4418/

ASTERISK-17721 #close
Reported by: Terry Wilson

ASTERISK-17899 #close
Reported by: Dwayne Hubbard
patches:
  lingon-srtp-key-lifetime-1.8.diff uploaded by oej (License 5267)

ASTERISK-20233
Reported by: tootai

ASTERISK-22748
Reported by: Alejandro Mejia
........

Merged revisions 432239 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-25 21:42:04 +00:00
David M. Lee 43a3e80be1 Increase WebSocket frame size and improve large read handling
Some WebSocket applications, like [chan_respoke][], require a larger
frame size than the default 8k; this patch bumps the default to 16k.
This patch also fixes some problems exacerbated by large frames.

The sanity counter was decremented on every fread attempt in
ws_safe_read(), regardless of whether data was read from the socket or
not. For large frames, this could result in loss of sanity prior to
reading the entire frame. (16k frame / 1448 bytes per segment = 12
segments).

This patch changes the sanity counter so that it only decrements when
fread() doesn't read any bytes. This more closely matches the original
intention of ws_safe_read(), given that the error message is
"Websocket seems unresponsive".

This patch also properly logs EOF conditions, so disconnects are no
longer confused with unresponsive connections.

 [chan_respoke]: https://github.com/respoke/chan_respoke

Review: https://reviewboard.asterisk.org/r/4431/
........

Merged revisions 432236 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-25 20:44:51 +00:00
Matthew Jordan 978649a568 channels/chan_sip: Fix crash when transmitting packet after thread shutdown
When the monitor thread is stopped, its pthread ID is set to a specific value
(AST_PTHREADT_STOP) so that later portions of the code can determine whether
or not it is safe to manipulate the thread. Unfortunately, __sip_reliable_xmit
failed to check for that value, checking instead only for AST_PTHREAD_STOP.
Passing the invalid yet very specific value to pthread_kill causes a crash.

This patch adds a check for AST_PTHREADT_STOP in __sip_reliable_xmit such that
it doesn't attempt to poke the thread if the thread has already been stopped.

ASTERISK-24800 #close
Reported by: JoshE
........

Merged revisions 432198 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-24 22:14:21 +00:00
Matthew Jordan 3d1a1533bf ARI/PJSIP: Apply requesting channel's format cap to created channels
This patch addresses the following problems:
* ari/resource_channels: In ARI, we currently create a format capability
  structure of SLIN and apply it to the new channel being created. This was
  originally done when the PBX core was used to create the channel, as there
  was a condition where a newly created channel could be created without any
  formats. Unfortunately, now that the Dial API is being used, this has two
  drawbacks:
  (a) SLIN, while it will ensure audio will flows, can cause a lot of
      needless transcodings to occur, particularly when a Local channel is
      created to the dialplan. When no format capabilities are available, the
      Dial API handles this better by handing all audio formats to the requsted
      channels. As such, we defer to that API to provide the format
      capabilities.
  (b) If a channel (requester) is causing this channel to be created, we
      currently don't use its format capabilities as we are passing in our own.
      However, the Dial API will use the requester channel's formats if none
      are passed into it, and the requester channel exists and has format
      capabilities. This is the "best" scenario, as it is the most likely to
      create a media path that minimizes transcoding.
  Fixing this simply entails removing the providing of the format capabilities
  structure to the Dial API.

* chan_pjsip: Rather than blindly picking the first format in the format
  capability structure - which actually *can* be a video or text format - we
  select an audio format, and only pick the first format if that fails. That
  minimizes the weird scenario where we attempt to transcode between video/audio.

* res_pjsip_sdp_rtp: Applied the joint capapbilites to the format structure.
  Since ast_request already limits us down to one format capability once the
  format capabilities are passed along, there's no reason to squelch it here.

* channel: Fixed a comment. The reason we have to minimize our requested
  format capabilities down to a single format is due to Asterisk's inability
  to convey the format to be used back "up" a channel chain. Consider the
  following:

    PJSIP/A => L;1 <=> L;2 => PJSIP/B
    g,u,a     g,u,a    g,u,a      u

  That is, we have PJSIP/A dialing a Local channel, where the Local;2 dials
  PJSIP/B. PJSIP/A has native format capabilities g722,ulaw,alaw; the Local
  channel has inherited those format capabilities down the line; PJSIP/B
  supports only ulaw. According to these format capabilities, ulaw is
  acceptable and should be selected across all the channels, and no
  transcoding should occur. However, there is no way to convey this: when L;2
  and PJSIP/B are put into a bridge, we will select ulaw, but that is not
  conveyed to PJSIP/A and L;1. Thus, we end up with:

    PJSIP/A <=> L;1 <=> L;2 <=> PJSIP/B
      g          g   X   u        u

  Which causes g722 to be written to PJSIP/B.

  Even if we can convey the 'ulaw' choice back up the chain (which through
  some severe hacking in Local channels was accomplished), such that the chain
  looks like:

    PJSIP/A <=> L;1 <=> L;2 <=> PJSIP/B
      u          u       u         u

  We have no way to tell PJSIP/A's *channel driver* to Answer in the SDP back
  with only 'ulaw'. This results in all the channel structures being set up
  correctly, but PJSIP/A *still* sending g722 and causing the chain to fall
  apart.

  There's a lot of difficulty just in setting this up, as there are numerous
  race conditions in the act of bridging, and no clean mechanism to pass the
  selected format backwards down an established channel chain. As such, the
  best that can be done at this point in time is clarifying the comment.

Review: https://reviewboard.asterisk.org/r/4434/

ASTERISK-24812 #close
Reported by: Matt Jordan



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-24 21:58:35 +00:00
Kevin Harwell 5b73246a9d bridge_softmix: G.729 codec license held
When more than one call using the same codec type enters into a softmix bridge
and no audio is present for a channel the bridge optimizes the out frame by
using the same one for all channels with the same codec type. Unfortunately,
when that number (channels with same codec type) dropped to <= 1 the codec
was not dereferenced. At least not until all parties left the bridge. Thus in
the case of G.729 the license was not released. This patch ensures that the
codec is dereferenced immediately when the optimization no longer applies.

ASTERISK-24797 #close
Reported by: Luke Hulsey
Review: https://reviewboard.asterisk.org/r/4429/
........

Merged revisions 432174 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432175 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-24 18:32:47 +00:00
Joshua Colp f726304283 res_ari_channels: Return a 404 response when a requested channel variable does not exist.
This change makes it so that if a channel variable is requested and it does not exist
a 404 response will be returned instead of an allocation failed response. This makes
it easier to debug and figure out what is going on for a user.

ASTERISK-24677 #close
Reported by: Joshua Colp


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432154 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 20:47:19 +00:00
Joshua Colp 7a507ae31a res_pjsip_registrar: Add Expires header to 200 OK if present in REGISTER.
Some implementations don't pay attention to the expires for individual contacts.
In this case they may consider the lack of an Expires header in the 200 OK as
unregistered. This change makes it so if an Expires header is present in the REGISTER
we will add one in the 200 OK.

ASTERISK-24785 #close
Reported by: Ross Beer


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432136 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 19:26:41 +00:00
Joshua Colp f0d018e249 res_pjsip: Add a log message when creating a UAC dialog to a target URI that is invalid.
ASTERISK-24499 #close
Reported by: Rusty Newton


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 18:51:44 +00:00
Matthew Jordan c40d78c31e apps/app_voicemail: Demote an ERROR message to a WARNING message
When using IMAP voicemail with FreePBX, you will often get ERROR messages
complaining about not being able to find a mailbox. This is due to how FreePBX
handles voicemail mailboxes. Unfortunately, app_voicemail has to consider this
a configuration error, as in any other system it would be indicative of
someone misconfiguring their system.

Regardless, a misconfiguration is a WARNING, and not an ERROR. This patch
demotes the message so that system administrators can hopefully reduce some
of the noise in their log files.

Note that in the original patch this was made into a NOTICE, but that's a
too forgiving.

ASTERISK-24790 #close
Reported by: Graham Barnett
patches:
  app_voicemail.c.patch_noise uploaded by Graham Barnett (License 6685)
........

Merged revisions 432098 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432099 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 17:35:22 +00:00
Joshua Colp bf9d416536 http: Add missing html tag to 'httpstatus' functionality.
ASTERISK-24724 #close
Reported by: Ashley Sanders
........

Merged revisions 432078 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 14:05:45 +00:00
Corey Farrell 93c9c3af2f Allow shutdown to unload modules that register bucket scheme's or codec's.
* Change __ast_module_shutdown_ref to be NULL safe (11+).
* Allow modules that call ast_bucket_scheme_register or ast_codec_register
  to be unloaded during graceful shutdown only (13+ only).

ASTERISK-24796 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4428/
........

Merged revisions 432058 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432059 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 02:56:59 +00:00
Corey Farrell 54a699fb64 asterisk/lock.h: Fix syntax errors for non-gcc OSX with 64-bit integers.
Add a couple of missing closing brackets / parenthesis.

ASTERISK-24814 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4436/
........

Merged revisions 432054 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432055 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-21 02:46:15 +00:00
Richard Mudgett 89b48af3e5 chan_dahdi/sig_analog: Put log message strings on one line.
With the log messages on one line, you can search for the log message seen
in the log and expect to find it.
........

Merged revisions 432032 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432034 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-20 17:51:37 +00:00
George Joseph 8e806f9e12 ASTERISK-24811: Add ast_sorcery_apply_config() to res_pjsip_publish_asterisk.
Matt Hoskins reported that res_pjsip_publish_asterisk wouldn't pull config from 
realtime.  Turns out it was just missing a call ast_sorcery_apply_config().

res_pjsip_acl was missing it as well, so I added it.  The other pjsip modules 
looked OK.

ASTERISK-24811 #close
Reported-by: Matt Hoskins
Tested-by: George Joseph
Tested-by: Matt Hoskins
patches:
	res_pjsip_publish_asterisk.c.patch submitted by Matt Hoskins (license 6688)

Review: https://reviewboard.asterisk.org/r/4433/




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432033 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-20 17:46:17 +00:00
Matthew Jordan c7bdf62a95 apps/app_voicemail: Fix IMAP header compatibility issue with Microsoft Exchange
When interfacing with Microsoft Exchange, custom headers will be returned as
all lower case. Currently, the IMAP header code will fail to parse the returned
custom headers, as it will be performing a case sensitive comparison. This can
cause playback of messages to fail, as needed information - such as origtime -
will not be present.

This patch updates app_voicemail's header parsing code to perform a case
insensitive lookup for the requested custom headers. Since the headers are
specific to Asterisk, e.g., 'x-asterisk-vm-orig-time', and headers should be
unique in an IMAP message, this should cause no issues with other systems.

ASTERISK-24787 #close
Reported by: Graham Barnett
patches:
  app_voicemail.c.patch_MSExchange uploaded by Graham Barnett (License 6685)
........

Merged revisions 432012 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432013 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-20 15:47:23 +00:00
Richard Mudgett e0ff83c272 chan_dahdi: Remove some dead code.
........

Merged revisions 431992 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431993 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-19 21:25:22 +00:00
Richard Mudgett 40547e7210 ISDN AOC: Fix crash from an AOC-E message that doesn't have a channel association.
Processing an AOC-E event that does not or no longer has a channel
association causes a crash.

The problem with posting AOC events to the channel topic is that AOC-E
events don't always have a channel association and posting the event to
the all channels topic is just wrong.  AOC-E events do however have their
own charging association method to refer to the agreement with the
charging entity.

* Changed the AOC events to post to the AMI manager topic instead of the
channel topics.  If a channel is associated with the event then channel
snapshot information is supplied with the AMI event.

* Eliminated RAII_VAR() usage in aoc_to_ami() and ast_aoc_manager_event().

This patch supercedes the patch on Review: https://reviewboard.asterisk.org/r/4427/

ASTERISK-22670 #close
Reported by: klaus3000

ASTERISK-24689 #close
Reported by: Marcel Manz

ASTERISK-24740 #close
Reported by: Panos Gkikakis

Review: https://reviewboard.asterisk.org/r/4430/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431974 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-19 18:25:36 +00:00
Richard Mudgett 2181c9443f res_pjsip_refer: Handle INVITE with Replaces failure after answer.
* Fixed hangup handling of the session->channel after answer if the
ast_channel_move() or ast_bridge_impart() fails.  We are still the thread
controlling the session->channel so we need to call ast_hangup() to kill
the channel.

* Fixed debug messages in refer_incoming_invite_request() referencing
incorrect channnels on success.  Code comments now say why the
session->channel cannot be used.

Review: https://reviewboard.asterisk.org/r/4422/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431956 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-19 17:30:05 +00:00
Matthew Jordan 374013d817 tcptls: Handle new OpenSSL compile time option to disable SSLv3
Some distributions are going to disable SSLv3 at compile time. This option can
be checked using the directive OPENSSL_NO_SSL3_METHOD. This patch updates the
TCP/TLS handling in Asterisk to look for that directive before attempting to
use the SSLv3 specific methods.

ASTERISK-24799 #close
Reported by: Alexander Traud
patches:
  no-ssl3-method.patch uploaded by Alexander Traud (License 6520)
........

Merged revisions 431936 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431937 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-19 15:28:10 +00:00
Corey Farrell eb9448a1ae Create work around for scheduler leaks during shutdown.
* Added ast_sched_clean_by_callback for cleanup of scheduled events
  that have not yet fired.
* Run all pending peercnt_remove_cb and replace_callno events in chan_iax2.
  Cleanup of replace_callno events is only run 11, since it no longer
  releases any references or allocations in 13+.

ASTERISK-24451 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4425/
........

Merged revisions 431916 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431917 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-19 02:01:34 +00:00
Richard Mudgett 6d3fcfc3c2 res_pjsip_refer: Fix crash from a REFER and BYE collision.
Analyzing a one-off crash on a busy system showed that processing a REFER
request had a NULL session channel pointer.  The only way I can think of
that could cause this is if an outgoing BYE transaction overlapped the
incoming REFER transaction in a collision.  Asterisk sends a BYE while the
phone sends a REFER to complete an attended transfer.

* Made check the session channel pointer before processing an incoming
REFER request in res_pjsip_refer.

* Fixed similar crash potential for res_pjsip supplement incoming request
processing for res_pjsip_sdp_rtp INFO, res_pjsip_caller_id INVITE/UPDATE,
res_pjsip_messaging MESSAGE, and res_pjsip_send_to_voicemail REFER
messages.

* Made res_pjsip_messaging respond to a message body too large with a 413
instead of ignoring it.

ASTERISK-24700 #close
Reported by: Zane Conkle

Review: https://reviewboard.asterisk.org/r/4417/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-17 15:31:46 +00:00
Matthew Jordan 562b7bf6f0 res/res_rtp_asterisk: Fix crash in debug from RTCP reports without report block
When RTCP debugging was enabled, an RTCP report without a report block would
cause a crash. This was due to the verbose output not checking to see if the
report_block pointer was NULl before dereferencing it.

This patch adds the necessary check to prevent printing any verbose output
if the far side hasn't provided us the information they should have.

ASTERISK-24791 #close
Reported by: JoshE
Tested by: JoshE


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-16 21:29:23 +00:00
Joshua Colp 7890d0ad07 pjsip: Remove "contact" type from pjsip.conf.sample
The "contact" object is not meant to be configured from the pjsip.conf
configuration file. It is meant to be created as a result of a registration
and stored elsewhere.

ASTERISK-24085 #close
Reported by: Rusty Newton


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431860 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 19:00:57 +00:00
Joshua Colp cbe63ab283 install_prereq: Tweak flags when configuring pjproject.
This change does two things:
1. Disables debugging so assertions which can return an error do,
instead of asserting.
2. Enables IPv6 support.

ASTERISK-24632 #close
Reported by: Rusty Newton


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431843 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 17:59:26 +00:00
Joshua Colp c8f3074cc4 res_sorcery_config: Improve object lookup times.
The res_sorcery_config module currently uses a fixed bucket
size of 53. This means that depending on the number of objects
you either end up with excess buckets or a lot of collisions.
Due to the way that res_sorcery_config is implemented it's actually
possible to make the bucket size dynamic based on the number of
objects. This is due to the fact that each loading of the config file
produces a new container and does not modify the existing one.
This change uses the number of expected objects and finds a prime
number near it. In practice depending on the number of objects this
can speed up lookups anywhere from 2X to 15X. This change also removes
the lock from the container as it is not needed.

Review: https://reviewboard.asterisk.org/r/4423/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431841 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 17:42:34 +00:00
Joshua Colp a3044cbf02 res_pjsip: Add "pjsip show version" CLI command.
When debugging things it can be useful to know absolutely what
version of pjproject res_pjsip is running against. This change
adds a "pjsip show version" CLI command which can be used to
query for this.

ASTERISK-24685 #close
Reported by: Joshua Colp

Review: https://reviewboard.asterisk.org/r/4424/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431824 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 16:00:39 +00:00
Joshua Colp ce70587ba6 res_timing_pthread: Fix leaky pipes.
During some refactoring the way private information for timers
was stored was changed. As a result of this the action which normally
removed the timer upon closure in res_timing_pthread was also removed
causing the timer to remain after it should using up resources.
This change ensures that the timer is removed upon closure.

ASTERISK-24768 #close
Reported by: Matthias Urlichs
patches:
 timer.patch submitted by Matthias Urlichs (license 5508)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431807 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 12:39:09 +00:00
Matthew Jordan 4f4d03fdd1 apps/app_mixmonitor: Move Test Event for MIXMONITOR_END to after it finishes
The Test Event for MIXMONITOR_END - which signals that a MixMonitor has
completed - technically fired before the filestream was closed. If a test
used this to trigger a condition to verify that the file was written, it
could result in a race condition where the file size would not be what the
test expected.

Luckily, no tests were using this (although they should have been). Since the
test event needed to be moved after the point where the MixMonitor autochan has
been destroyed, the test event no longer emits the channel name. Luckily,
nothing needs it.
........

Merged revisions 431788 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431789 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-15 00:32:56 +00:00
Joshua Colp 758a897876 sorcery: Output an error message if a wizard is specified for an object type and it isn't found.
ASTERISK-24612 #close
Reported by: Joshua Colp


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-14 19:45:40 +00:00
Joshua Colp 8c6e3ad3b4 res_pjsip_exten_state: Improve log message when a subscription is attempted to a non-existent extension.
ASTERISK-24716 #close
Reported by: Rusty Newton


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431754 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-14 18:30:34 +00:00
Joshua Colp 3543a36362 'information' ends with an 'n'.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431752 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-14 18:20:27 +00:00
Joshua Colp 5d26236758 chan_pjsip: Fix crash when CHANNEL dialplan function is invoked with pjsip argument and no type.
ASTERISK-24771 #close
Reported by: Niklas Larsson


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431751 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-14 18:19:07 +00:00
Richard Mudgett 4d797f17c5 res_pjsip_session: Fix double re-INVITE collision crash.
A multi-asterisk box setup with direct media enabled would occasionally
crash when two re-INVITE collisions on a call leg happen in a row.

The re-INVITE logic only had one timer struct to defer the re-INVITE.
When the second collision happens the timer struct is overwritten and put
into the timer heap again.  Resources for the first timer are leaked and
the heap has two positions occupied by the same timer struct.  Now the
heap ordering is potentially corrupted, the timer will fire twice, and any
resources allocated for the second timer will be released twice.

* The solution is to put the collided re-INVITE into the delayed requests
queue with all the other delayed requests and cherry pick the next request
that can come off the queue when an event happens.

* Changed to put delayed BYE requests at the head of the delayed queue.
There is no sense in processing delayed UPDATEs and re-INVITEs when a BYE
has been requested.

* Made the start of a BYE request flush the delayed requests queue to
prevent a delayed request from overlapping the BYE transaction.  I saw a
few cases where a delayed re-INVITE got started after the BYE transaction
started.

* Changed the delayed_request struct to use an enum instead of a string
for the request method.  Cherry picking the queue is easier with an enum
than string comparisons and the compiler can warn if a switch statement
does not cover all defined enum values.

* Improved the debug output to give more information.  It helps to know
which channel is involved with an endpoint.  Trunks can have many channels
associated with the endpoint at the same time.

ASTERISK-24727 #close
Reported by: Mark Michelson

Review: https://reviewboard.asterisk.org/r/4414/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-13 17:21:28 +00:00
Matthew Jordan 1995baad71 ARI/PJSIP: Add the ability to redirect (transfer) a channel in a Stasis app
This patch adds a new feature to ARI to redirect a channel to another server,
and fixes a few bugs in PJSIP's handling of the Transfer dialplan
application/ARI redirect capability.

*New Feature*
A new operation has been added to the ARI channels resource, redirect. With
this, a channel in a Stasis application can be redirected to another endpoint
of the same underlying channel technology.

*Bug fixes*
In the process of writing this new feature, two bugs were fixed in the PJSIP
stack:
(1) The existing .transfer channel callback had the limitation that it could
    only transfer channels to a SIP URI, i.e., you had to pass
    'PJSIP/sip:foo@my_provider.com' to the dialplan application. While this is
    still supported, it is somewhat unintuitive - particularly in a world full
    of endpoints. As such, we now also support specifying the PJSIP endpoint to
    transfer to.
(2) res_pjsip_multihomed was, unfortunately, trying to 'help' a 302 redirect by
    updating its Contact header. Alas, that resulted in the forwarding
    destination set by the dialplan application/ARI resource/whatever being
    rewritten with very incorrect information. Hence, we now don't bother
    updating an outgoing response if it is a 302. Since this took a looong time
    to find, some additional debug statements have been added to those modules
    that update the Contact headers.

Review: https://reviewboard.asterisk.org/r/4316/

ASTERISK-24015 #close
Reported by: Private Name

ASTERISK-24703 #close
Reported by: Matt Jordan



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431717 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-12 20:32:48 +00:00
Kevin Harwell e8ec15a9ef res_pjsip: dtls_handler causes Asterisk to crash
There have been a couple of times where a crash occurred in the dtls_handler
section of the code for res_pjsip. Unfortunately, in working this issue the
problem was unable to be reproduced. After looking at the backtraces and
through the code the current best guess as to why this happened might be due
to a reentrance problem and the strtok function. So, the current fix is to
convert the strtok function into the reentrant version of the function,
strtok_r.

ASTERISK-24741 #close
Reported by: Zane Conkle
Review: https://reviewboard.asterisk.org/r/4409/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431698 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 18:02:08 +00:00
Kevin Harwell e64d151fae ari_websockets: removed extra check on websocket session read
When merging the websocket timeout issue (ASTERISK-24701) an extra, almost
duplicate, check was left in the code that should not have been. This removes
it.

ASTERISK-24701 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4412/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431693 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 17:36:38 +00:00
Richard Mudgett feddab7944 HTTP: Stop accepting requests on final system shutdown.
There are three CLI commands to stop and restart Asterisk each.

1) core stop/restart now - Hangup all calls and stop or restart Asterisk.
New channels are prevented while the shutdown request is pending.

2) core stop/restart gracefully - Stop or restart Asterisk when there are
no calls remaining in the system.  New channels are prevented while the
shutdown request is pending.

3) core stop/restart when convenient - Stop or restart Asterisk when there
are no calls in the system.  New calls are not prevented while the
shutdown request is pending.

ARI has made stopping/restarting Asterisk more problematic.  While a
shutdown request is pending it is desirable to continue to process ARI
HTTP requests for current calls.  To handle the current calls while a
shutdown request is pending, a new committed to shutdown phase is needed
so ARI applications can deal with the calls until the system is fully
committed to shutdown.

* Added a new shutdown committed phase so ARI applications can deal with
calls until the final committed to shutdown phase is reached.

* Made refuse new HTTP requests when the system has reached the final
system shutdown phase.  Starting anything while the system is actively
releasing resources and unloading modules is not a good thing.

* Split the bridging framework shutdown to not cleanup the global bridging
containers when shutting down in a hurry.  This is similar to how other
modules prevent crashes on rapid system shutdown.

* Moved ast_begin_shutdown(), ast_cancel_shutdown(), and
ast_shutting_down().  You should not have to include channel.h just to
access these system functions.

ASTERISK-24752 #close
Reported by: Matthew Jordan

Review: https://reviewboard.asterisk.org/r/4399/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 17:28:13 +00:00
Matthew Jordan 29f3ff0b61 channels/chan_sip: Fix RealTime error during SIP unregistration with MariaDB
When a SIP device that has its registration stored in RealTime unregisters,
the entry for that device is updated with blank values, i.e., "", indicating
that it is no longer registered. Unfortunately, one of those values that is
'blanked' is the device's port. If the column type for the port is not a
string datatype (the recommended type is integer), an ODBC or database error
will be thrown. MariaDB does not coerce empty strings to a valid integer value.

This patch updates the query run from chan_sip such that it replaces the port
value with a value of '0', as opposed to a blank value. This is the value that
other database backends coerce the empty string ("") to already, and the
handling of reading a RealTime registration value from a backend already
anticipates receiving a port of '0' from the backends.

ASTERISK-24772 #close
Reported by: Richard Miller
patches:
  chan_sip.diff uploaded by Richard Miller (License 5685)
........

Merged revisions 431673 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431674 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 17:12:08 +00:00
Kevin Harwell 72e5ba2ce8 res_http_websocket: websocket write timeout fails to fully disconnect
When writing to a websocket if a timeout occurred the underlying socket did not
get closed/disconnected. This patch makes sure the websocket gets disconnected
on a write timeout. Also a notice is logged stating that the websocket was
disconnected.

ASTERISK-24701 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4412/
........

Merged revisions 431669 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431670 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 16:51:29 +00:00
Corey Farrell 2531f75057 Enable REF_DEBUG for ast_module_ref / ast_module_unref.
Add ast_module_shutdown_ref for use by modules that can
only be unloaded during graceful shutdown.

When REF_DEBUG is enabled:
* Add an empty ao2 object to struct ast_module.
* Allocate ao2 object when the module is loaded.
* Perform an ao2_ref in each place where mod->usecount is manipulated.
* ao2_cleanup on module unload.

ASTERISK-24479 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4141/
........

Merged revisions 431662 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431663 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-11 15:51:33 +00:00
George Joseph 4d8ab20a8a res_pjsip_config_wizard: Add ability to auto-create hints.
Looking at the Super Awesome Company sample reminded me that creating hints is 
just plain gruntwork.  So you can now have the pjsip conifg wizard auto-create 
them for you.

Specifying 'hint_exten' in the wizard will create 
'exten => <hint_exten>,hint/PJSIP/<wizard_id>'
in whatever is specified for 'hint_context'.

Specifying 'hint_application' in the wizard will create
'exten => <hint_exten>,1,<hint_application>'
in whatever is specified for 'hint_context'.

The default for 'hint_context' is the endpoint's context.
There's no default for 'hint_application'.  If not specified, no app is added.
There's no default for 'hint_exten'.  If not specified, neither the hint itself 
nor the application will be created.

Some may think this is the slippery slope to users.conf but hints are a basic 
necessity for phones unlike voicemail, manager, etc that users.conf creates.

Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/4383/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431643 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-10 23:16:40 +00:00
Matthew Jordan 32e42e50cc res/ari/resource_channels: Add missing 'no_answer' reason to DELETE /channels
One of the canonical reasons for hanging up a channel is because the far end
failed to answer - or because someone else answered, and we want to get rid of
this channel. This patch adds the missing value to the 'reason' query parameter
for the DELETE /channels operation.

Review: https://reviewboard.asterisk.org/r/4400

ASTERISK-24745 #close
Reported by: Ben Merrills
patches:
  add_no_answer_ari_hangup_cause.diff uploaded by Ben Merrills (License 6678)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-09 03:10:59 +00:00
Matthew Jordan 03445a147e Blocked revisions 431620
While it may not be obvious, r431620 should not occur in Asterisk 13.
* We no longer set the SIP_DEFER_BYE_ON_TRANSFER flag during the handling of
  the INVITE with Replaces. This is now set and handled explicitly in the
  attended transfer and blind transfer code.
* An INVITE with Replaces replacing a channel in a Bridge will now safely eject
  the channel being replaced. No masquerade occurs.
* An INVITE with Replaces replacing a channel not in a Bridge will masquerade,
  but will do so in such a fashion that we can ensure that we are hanging up
  the channel when completed.

Since the code the patch fixes no longer exists due to core framework changes,
we should send a BYE naturally without the need for the flag.

........
channels/chan_sip: Ensure that a BYE is sent during INVITE w/Replaces transfer

Consider a scenario where Alice and Bob have an established dialog with each
other external to Asterisk. Bob decides to perform an attended transfer of
Alice to Asterisk. In this case, Alice will send an INVITE with Replaces
to Asterisk, where the Replaces specifies Bob's dialog with Asterisk. In this
particular scenario, Asterisk will complete the transfer, but - since Bob's
channel has had Alice masqueraded into it and is now a Zombie - a BYE
request will not be sent.

This patch fixes that issue by adding a new flag to chan_sip that tracks
whether or not we have an INVITE with Replaces. If we do, the flag is used
on the sip_pvt to ensure that a BYE request is sent, even if the channel has
been masqueraded away.

Review: https://reviewboard.asterisk.org/r/4362/

ASTERISK-22436 #close
Reported by: Eelco Brolman
Tested by: Jeremiah Gowdy, Kristian Høgh
patches:
  asterisk-11-hangup-replaced-3.diff uploaded by Jeremiah Gowdy (License 6358)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431621 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-09 03:01:31 +00:00
Matthew Jordan 8582411344 res/res_odbc: Remove unneeded queries when determining if a table exists
This patch modifies the ast_odbc_find_table function such that it only performs
a lookup of the requested table if the table is not already known. Prior to
this patch, a queries would be executed against the database even if the table
was already known and cached.

Review: https://reviewboard.asterisk.org/r/4405/

ASTERISK-24742 #close
Reported by: ibercom
patches:
  patch.diff uploaded by ibercom (License 6599)
........

Merged revisions 431617 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431618 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-09 02:34:51 +00:00
Matthew Jordan 675b2b8103 res/res_pjsip_sdp_rtp: Fix leak of local ICE candidates when applying to SDP
When an SDP is created for an outgoing request/response, the ICE candidates
obtained from the RTP instance are currently leaked. This causes the ao2
container that holds the candidates to never properly be reclaimed when the
RTP instance is destroyed.

This patch properly decrements the ICE candidates' container if it is
successfully obtained.

ASTERISK-24769 #close
Reported by: Matt Jordan


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431600 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-08 17:24:01 +00:00
Scott Griepentrog 323c0927ac various: cleanup issues found during leak hunt
In this collection of small patches to prevent
Valgrind errors are: fixes for reference leaks
in config hooks, evaluating a parameter beyond
bounds, and accessing a structure after a lock
where it could have been already free'd.

Review: https://reviewboard.asterisk.org/r/4407/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431583 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-06 21:26:12 +00:00
Joshua Colp 18c8c1bae3 res_pjsip_keepalive: Don't crash if PJSIP module is not loaded.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431555 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-04 01:27:04 +00:00
Joshua Colp 2f2eb1931a sorcery: Don't try to load object types which haven't been defined.
The act of defining wizards for an object type in sorcery.conf will
create a minimal object type. This can cause a problem when a module
has multiple sorcery instances (which all get the wizards from sorcery.conf
applied) but the sorcery instances do not all contain full information
about the object types. Upon loading errors will occur stating that
the objects can not be created. This is confusing and is actually
perfectly fine.

This change makes it so that only object types which have been fully
defined will be loaded.

ASTERISK-24748 #close
Reported by: Joshua Colp


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-04 00:58:34 +00:00
Joshua Colp f67402a52a res_format_attr_h264: Fix crash when determining joint capability.
The res_format_attr_h264 module currently incorrectly attempts to
copy SPS and PPS information from the wrong attribute. This change
fixes that.

ASTERISK-24616 #close
Reported by: Yura Kocyuba

Review: https://reviewboard.asterisk.org/r/4392/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-31 16:27:41 +00:00
Richard Mudgett 05e2832b35 app_agent_pool: Fix initial module load agent device state reporting.
When the app_agent_pool module initially loads there is a race condition
between the thread loading agents.conf and the device state internal
processing thread.  If the device state internal processing thread handles
the agent creation state updates before the thread that loaded agents.conf
registers the device state provider callback then the cached agent state
is "Invalid".  When a consumer module like app_queue asks for the agent state
it gets the cached "Invalid" state instead of the real state from the provider.

* Moved loading the agents.conf configuration to the last thing setup by
app_agent_pool in load_module().  Now the device state provider callback
is registered before the config is loaded so the agent creation state
updates are guaranteed to get the initial device state.

* Removed some now redundant config cleanup on error in load_config().

* Added lock protection when accessing the device state in
agent_pvt_devstate_get() and eliminated the RAII_VAR() usage.

ASTERISK-24737 #close
Reported by: Steve Pitts

Review: https://reviewboard.asterisk.org/r/4390/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431492 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-30 17:44:54 +00:00
Kevin Harwell 6583b4de98 res_pjsip_outbound_publish: eventually crashes when no response is ever received
When Asterisk attempts to send SIP outbound publish information and no response
is ever received (no 200 okay, 412, 423) the system eventually crashes. A
response is never received because the system Asterisk is attempting to send
publish information to is not available. The underlying pjsip framework attempts
to send publish information. After several attempts it calls back into the
Asterisk outbound publish code. At this point if the "client->queue" is empty
Asterisk attempts to schedule a refresh which utilizes "rdata" and since no
response was received the given "rdata" struture is NULL. Attempting to
dereference a NULL object of course results in a crash.

The fix here removes the dependency on rdata for schedule_publish_refresh.
Instead param->expiration is now passed to it as this is set to -1 if no
response is received. Also added a notification when no response is received.

ASTERISK-24635 #close
Reported by: Marco Paland
Review: https://reviewboard.asterisk.org/r/4384/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431490 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-30 17:38:10 +00:00
Ashley Sanders 112d23c73e HTTP: For httpd server, need option to define server name for security purposes
Added a new config property [servername] to the http.conf file; updated the http server to use the new property when sending responses, for showing http status through the CLI and when reporting status through the 'httpstatus' webpage.

ASTERISK-24316 #close
Reported By: Andrew Nagy
Review: https://reviewboard.asterisk.org/r/4374/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431471 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-30 16:52:12 +00:00
Mark Michelson 43dd42d8ae Fix some memory leaks.
These memory leaks were found and fixed by John Hardin. I'm just
committing them for him.

ASTERISK-24736 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/4389



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431468 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-30 16:47:50 +00:00
Scott Griepentrog f7d23dfcc6 stasis transfer: fix stasis bridge push race part two
When swapping a Local channel in place of one already
in a bridge (to complete a bridge attended transfer),
the channel that was swapped out can actually be hung
up before the stasis bridge push callback executes on
the independant transfer thread.  This results in the
stasis app loop dropping out and removing the control
that has the the app name which the local replacement
channel needs so it can re-enter stasis.

To avoid this race condition a new push_peek callback
has been added, and called from the ast_bridge_impart
thread before it launches the independant thread that
will complete the transfer.  Now the stasis push_peek
callback can copy the stasis app name before the swap
channel can hang up.

ASTERISK-24649
Review: https://reviewboard.asterisk.org/r/4382/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431450 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 23:02:41 +00:00
Mark Michelson e8896ac008 Use SIPS URIs in Contact headers when appropriate.
RFC 3261 sections 8.1.1.8 and 12.1.1 dictate specific
scenarios when we are required to use SIPS URIs in Contact
headers. Asterisk's non-compliance with this could actually
cause calls to get dropped when communicating with clients
that are strict about checking the Contact header.

Both of the SIP stacks in Asterisk suffered from this issue.
This changeset corrects the behavior in res_pjsip/chan_pjsip.c

Review: https://reviewboard.asterisk.org/r/4345



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431426 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 20:58:12 +00:00
Mark Michelson 22fc3359da Use SIPS URIs in Contact headers when appropriate.
RFC 3261 sections 8.1.1.8 and 12.1.1 dictate specific
scenarios when we are required to use SIPS URIs in Contact
headers. Asterisk's non-compliance with this could actually
cause calls to get dropped when communicating with clients
that are strict about checking the Contact header.

Both of the SIP stacks in Asterisk suffered from this issue.
This changeset corrects the behavior in chan_sip.

ASTERISK-24646 #close
Reported by Stephan Eisvogel

Review: https://reviewboard.asterisk.org/r/4346
........

Merged revisions 431423 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431424 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 20:44:07 +00:00
Mark Michelson b8ea23b0d1 Allow disabling of 100rel support on PJSIP endpoints.
Due to an inversion error, setting 100rel=no would not actually
change the current value of the setting (which defaulted to "yes").
With this fix, the inversion is corrected.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 19:52:45 +00:00
George Joseph 6e5eb9af88 res_pjsip_exten_state: Reduce log clutter... change a WARNING to a VERBOSE/2
Reduce log clutter by changing the "Watcher for hint %s (removed|deactivated)"
message from WARNING to VERBOSE/2.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4387/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 16:46:39 +00:00
Joshua Colp e0461290d0 res_rtp_asterisk: Fix DTLS when used with OpenSSL 1.0.1k
A recent security fix for OpenSSL broke DTLS negotiation for many
applications. This was caused by read ahead not being enabled when it
should be. While a commit has gone into OpenSSL to force read ahead
on for DTLS it may take some time for a release to be made and the
change to be present in distributions (if at all). As enabling read
ahead is a simple one line change this commit does that and fixes
the issue.

ASTERISK-24711 #close
Reported by: Jared Biel
........

Merged revisions 431384 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431385 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-29 12:09:23 +00:00
Mark Michelson 8c068fc096 Fix file descriptor leak in RTP code.
SIP requests that offered codecs incompatible with configured values
could result in the allocation of RTP and RTCP ports that would not get
reclaimed later.

ASTERISK-24666 #close
Reported by Y Ateya

Review: https://reviewboard.asterisk.org/r/4323

AST-2015-001
........

Merged revisions 431300 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-28 17:37:55 +00:00
Mark Michelson 25a67d561c Multiple revisions 431297-431298
........
  r431297 | mmichelson | 2015-01-28 11:05:26 -0600 (Wed, 28 Jan 2015) | 17 lines
  
  Mitigate possible HTTP injection attacks using CURL() function in Asterisk.
  
  CVE-2014-8150 disclosed a vulnerability in libcURL where HTTP request injection
  can be performed given properly-crafted URLs.
  
  Since Asterisk makes use of libcURL, and it is possible that users of Asterisk may
  get cURL URLs from user input or remote sources, we have made a patch to Asterisk
  to prevent such HTTP injection attacks from originating from Asterisk.
  
  ASTERISK-24676 #close
  Reported by Matt Jordan
  
  Review: https://reviewboard.asterisk.org/r/4364
  
  AST-2015-002
........
  r431298 | mmichelson | 2015-01-28 11:12:49 -0600 (Wed, 28 Jan 2015) | 3 lines
  
  Fix compilation error from previous patch.
........

Merged revisions 431297-431298 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 431299 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-28 17:34:02 +00:00
Sean Bright c3add776af media formats: update res_format_attr_opus & silk
In r419044, we changed how formats were handled, but the return value
of the format_parse_sdp_fmtp functions in res_format_attr_opus and
res_format_attr_silk were not updated, causing calls to fail.  Ran
into this when getting codec_opus working with Asterisk 13.

Once the return value was corrected, we were crashing in opus_getjoint
because of NULL format attributes.  I've fixed this as well in this
patch.

Review: https://reviewboard.asterisk.org/r/4371/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431267 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-28 12:18:14 +00:00
Richard Mudgett 88fbe4e917 res_pjsip_outbound_registration: Fix reload race condition.
Performing a CLI "module reload" command when there are new pjsip.conf
registration objects defined frequently failed to load them correctly.

What happens is a race condition between res_pjsip pushing its reload into
an asynchronous task processor task and the thread that does the rest of
the reloads when it gets to reloading the res_pjsip_outbound_registration
module.  A similar race condition happens between a reload and the CLI/AMI
show registrations commands.  The reload updates the current_states
container and the CLI/AMI commands call get_registrations() which builds a
new current_states container.

* Made res_pjsip.c reload_module() use ast_sip_push_task_synchronous()
instead of ast_sip_push_task() to eliminate two threads processing config
reloads at the same time.

* Made get_registrations() not replace the global current_states container
so the CLI/AMI show registrations command cannot interfere with reloading.
You could never add/remove objects in the container without the
possibility of the container being replaced out from under you by
get_registrations().

* Added a registration loaded sorcery instance observer to purge any dead
registration objects since get_registrations() cannot do this job anymore.
The struct ast_sorcery_instance_observer callbacks must be used because
the callback happens inline with the load process.  The struct
ast_sorcery_observer callbacks are pushed to a different thread.

* Added some global current_states NULL pointer checks in case the
container disappears because of unload_module().

* Made sorcery's struct ast_sorcery_instance_observer.object_type_loaded
callbacks guaranteed to be called before any struct
ast_sorcery_observer.loaded callbacks will be called.

* Moved the check for non-reloadable objects to before the sorcery
instance loading callbacks happen to short circuit unnecessary work.
Previously with non-reloadable objects, the sorcery instance
loading/loaded callbacks would always happen, the individual wizard
loading/loaded would be prevented, and the non-reloadable type logging
message would be logged for each associated wizard.

ASTERISK-24729 #close
Review: https://reviewboard.asterisk.org/r/4381/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431243 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-28 04:09:54 +00:00
Kevin Harwell 61822e78ae tcptls: Bad file descriptor error when reloading chan_sip
While running through some scenarios using chan_sip and tcp a problem would
occur that resulted in a flood of bad file descriptor messages on the cli:

tcptls.c:712 ast_tcptls_server_root: Accept failed: Bad file descriptor

The message is received because the underlying socket has been closed, so is
valid. This is probably happening because unloading of chan_sip is not atomic.
That however is outside the scope of this patch. This patch simply stops the
logging of multiple occurrences of that message.

ASTERISK-24728 #close
Reported by: Thomas Thompson
Review: https://reviewboard.asterisk.org/r/4380/
........

Merged revisions 431218 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431219 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 22:56:39 +00:00
Kevin Harwell e2b493b8f0 chan_sip: stale nonce causes failure
When refreshing (with a small expiration) a registration that was sent to
chan_sip the nonce would be considered stale and reject the registration.
What was happening was that the initial registration's "dialog" still existed
in the dialogs container and upon refresh the dialog match algorithm would
choose that as the "dialog" instead of the newly created one. This occurred
because the algorithm did not check to see if the from tag matched if
authentication info was available after the 401. So, it ended up assuming
the original "dialog" was a match and stopped the search. The old "dialog"
of course had an old nonce, thus the stale nonce message.

This fix attempts to leave the original functionality alone except in the case
of a REGISTER. If a REGISTER is received if searches for an existing "dialog"
matching only on the callid. If the expires value is low enough it will reuse
dialog that is there, otherwise it will create a new one.

ASTERISK-24715 #close
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/4367/
........

Merged revisions 431187 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 19:21:08 +00:00
Kevin Harwell 9e3d316dd1 res_pjsip: make it unloadable (take 2)
Due to the original patch causing memory corruptions it was removed until the
problem could be resolved. This patch is the original patch plus some added
locking around stasis router subcription that was needed to avoid the memory
corruption.

Description of the original problem and patch (still applicable):

The res_pjsip module was previously unloadable. With this patch it can now
be unloaded.

This patch is based off the original patch on the issue (listed below) by Corey
Farrell with a few modifications. Namely, removed a few changes not required to
make the module unloadable and also fixed a bug that would cause asterisk to
crash on unloading.

This patch is the first step (should hopefully be followed by another/others at
some point) in allowing res_pjsip and the modules that depend on it to be
unloadable. At this time, res_pjsip and some of the modules that depend on
res_pjsip cannot be unloaded without causing problems of some sort.

The goal of this patch is to get res_pjsip and only res_pjsip to be able to
unload successfully and/or shutdown without incident (crashes, leaks, etc...).
Other dependent modules may still cause problems on unload.

Basically made sure, with the patch applied, that res_pjsip (with no other
dependent modules loaded) could be succesfully unloaded and Asterisk could
shutdown without any leaks or crashes that pertained directly to res_pjsip.

ASTERISK-24485 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4363/
patches:
  pjsip_unload-broken-r1.patch submitted by Corey Farrell (license 5909)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431179 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 19:08:44 +00:00
Richard Mudgett eda125f98d app_confbridge: Repeatedly starting and stopping recording ref leaks the recording channel.
Starting and stopping conference recording more than once causes the
recording channels to be leaked.  For v13 the channels also show up in the
CLI "core show channels" output.

* Reworked and simplified the recording channel code to use
ast_bridge_impart() instead of managing the recording thread in the
ConfBridge code.  The recording channel's ref handling easily falls into
place and other off nominal code paths get handled better as a result.

ASTERISK-24719 #close
Reported by: John Bigelow

Review: https://reviewboard.asterisk.org/r/4368/
Review: https://reviewboard.asterisk.org/r/4369/
........

Merged revisions 431135 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431160 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 17:36:22 +00:00
Joshua Colp b64f4bb6ee bridge / res_pjsip_sdp_rtp: Fix issues with media not being reinvited during direct media.
This change fixes two issues:

1. During a swap operation bridging added the new channel before having the swap channel
leave. This was not handled in bridge_native_rtp and could result in a channel not getting
reinvited back to Asterisk. After this change the swap channel will leave first and the
new channel will then join.

2. If a re-invite was received after a session had been established any upstream elements
(such as bridge_native_rtp) were not notified that they may want to re-evaluate things.
After this change an UPDATE_RTP_PEER control frame is queued when this situation occurs
and upstream can react.

AST-1524 #close

Review: https://reviewboard.asterisk.org/r/4378/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431157 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 17:32:36 +00:00
Jonathan Rose a620b287bd Manager: Fix Manager Action ModuleLoad to give correct response when reloading
Prior to this patch, ModuleLoad would respond with an error indicating that
the requested module wasn't found in spite of finding and reloading the
module.

Review: https://reviewboard.asterisk.org/r/4373/
ASTERISK-24721 #close


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431153 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 17:22:52 +00:00
Matthew Jordan 7f9b28b0c6 ARI: Improve wiki documentation
This patch improves the documentation of ARI on the wiki. Specifically, it
addresses the following:
* Allowed values and allowed ranges weren't documented. This was particularly
  frustrating, as Asterisk would reject query parameters with disallowed values
  - but we didn't tell anyone what the allowed values were.
* The /play/id operation on /channels and /bridges failed to document all of
  the added media resource types.
* Documentation for creating a channel into a Stasis application failed to
  note when it occurred, and that creating a channel into Stasis conflicts with
  creating a channel into the dialplan.
* Some other minor tweaks in the mustache templates, including italicizing the
  parameter type, putting the default value on its own sub-bullet, and some
  other nicities.

Review: https://reviewboard.asterisk.org/r/4351


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 17:20:23 +00:00
Matthew Jordan 1a17693789 app_confbridge: Restore user's menu name to CLI output of 'confbridge list'
When issuing a 'confbridge list XXXX' CLI command, the resulting output no
longer displays the menu associated with a ConfBridge participant.

The issue was caused by ASTERISK-22760. When that patch was done, it removed
the copying of the menu name associated with the user from the actual user
profile.

This patch fixes the issue by copying the menu name over to the user profile
when the menu hooks are applied to the user. Since that function now does a
little bit more than just apply the hooks, the name of the function has been
changed to cover the copying of the menu name over as well.

In addition, there is a disparity between the menu name length as it is stored
on the conf_menu structure and the confbridge_user structure; this patch makes
the lengths match so that a strcpy can be used.

Review: https://reviewboard.asterisk.org/r/4372/

ASTERISK-24723 #close
Reported by: Steve Pitts


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431134 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 17:10:21 +00:00
Joshua Colp ceedd40370 res_parking: Fix crash due to race condition when unloading.
There is currently a race condition when unloading the res_parking
module. Depending on the will of the universe the subscription
invocation may occur AFTER the module is unloaded. This is because
the module does NOT use stasis_unsubscribe_and_join when terminating
the subscription. It merely uses stasis_unsubscribe.

This change makes it use stasis_unsubscribe_and_join which is documented
for usage in this exact scenario.

AST-1520 #close

Review: https://reviewboard.asterisk.org/r/4375/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431114 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-27 11:47:02 +00:00
David M. Lee 702d79de2a Various fixes for OS X
This patch addresses compilation errors on OS X. It's been a while, so
there's quite a few things.

 * Fixed __attribute__ decls in route.h to be portable.
 * Fixed htonll and ntohll to work when they are defined as macros.
 * Replaced sem_t usage with our ast_sem wrapper.
 * Added ast_sem_timedwait to our ast_sem wrapper.
 * Fixed some GCC 4.9 warnings using sig*set() functions.
 * Fixed some format strings for portability.
 * Fixed compilation issues with res_timing_kqueue (although tests still fail
   on OS X).
 * Fixed menuconfig /sbin/launchd detection, which disables res_timing_kqueue
   on OS X).

ASTERISK-24539 #close
Reported by: George Joseph

ASTERISK-24544 #close
Reported by: George Joseph

Review: https://reviewboard.asterisk.org/r/4327/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-26 14:49:32 +00:00
Matthew Jordan 1fc823c770 dynamic realtime: Updates fail to work due to update fields being passed over
When a crash was fixed due to usage of the REALTIME function in r423003, a
regression was introduced into ast_update2_realtime where the update fields
passed to the function would be skipped and the lookup field processed twice.

The use of this function is a bit interesting: A variable argument list is
used with two sentinel values - the first marks the end of the lookup
fields/values; the second marks the end of the update fields/values.
Unfortunately, ast_update2_realtime parses over the lookup fields twice, as
opposed to parsing over the update fields. This causes the lookups to succeed,
but the updates itself to have no effect.

Note that the most common instance of this problem occurred in app_voicemail
during the updating of a mailbox password.

Thanks to the issue reporter, Paddy Grice, for pointing out the problem.

Review: https://reviewboard.asterisk.org/r/4356/

ASTERISK-24231

ASTERISK-24626 #close
Reported by: Paddy Grice



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431072 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-25 13:42:22 +00:00
Richard Mudgett e302116e40 app_confbridge: Make CBRec channel names more unique.
Channel names should be different from other channels in the system while
the channel exists.

* Use a sequence number for CBRec channels instead of a random number
because the same random number could be picked again for the next CBRec
channel.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 20:13:00 +00:00
Richard Mudgett f8b3fb6e2f app_confbridge: Whitespace
Because there is sometimes no sence to any whitespace.
........

Merged revisions 431049 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431050 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 19:44:48 +00:00
David M. Lee 197265438e Add depend on pjproject to res_pjsip_config_wizard.c
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431030 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 17:08:28 +00:00
Kevin Harwell 630eea087d Investigate and fix memory leaks in Asterisk
Fixed memory leaks that were found in Asterisk.

ASTERISK-24693 #close
Reported by:  Kevin Harwell
Review: https://reviewboard.asterisk.org/r/4347/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430999 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 15:12:41 +00:00
Walter Doekes e23f07beb8 Fix typo's (retrieve, specified, address).
........

Merged revisions 430996 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430998 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 15:03:05 +00:00
Walter Doekes 9210648bbe chan_sip: Case insensitive comparison of "defaultuser" parameter.
All the other configuration options are case insensitive, so this one
should be too.

ASTERISK-24355 #close
Reported by: HZMI8gkCvPpom0tM
patches:
  ast.patch uploaded by HZMI8gkCvPpom0tM (License 6658)
........

Merged revisions 430993 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430994 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-23 14:38:28 +00:00
Richard Mudgett 355eb9d22f Bridge core: Pass a ref with the swap channel when joining a bridge.
When code imparts a channel into a bridge to swap with another channel, a
ref needs to be held on the swap channel to ensure that it cannot
dissapear before finding it in the bridge.

* The ast_bridge_join() swap channel parameter now always steals a ref for
the swap channel.  This is the only change to the bridge framework's
public API semantics.

* bridge_channel_internal_join() now requires the bridge_channel->swap
channel to pass in a ref.

ASTERISK-24649
Reported by: John Bigelow

Review: https://reviewboard.asterisk.org/r/4354/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430975 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-22 19:24:28 +00:00
Richard Mudgett c73b4b2a46 res_pjsip_outbound_registration.c: Minor code cleanup.
* Add an allocation failure check and assert in
sip_outbound_registration_response_cb().

* Made sip_outbound_registration_state_destroy() handle partially created
state objects from sip_outbound_registration_state_alloc().

Review: https://reviewboard.asterisk.org/r/4366/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430957 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-22 19:13:11 +00:00
Scott Griepentrog bdfdb01bcf stasis transfer: fix a race condition on stasis bridge push
After a bridge transfer completes where a local replacement
channel is used, a stasis transfer message with the details
of the transfer is sent.  This is processed by stasis which
then sets the stasis app name and replaced channel snapshot
on the replacement channel.

However, since a separate thread was already started to run
stasis on the new replacement channel, a race was on to see
if the message processing would be completed before the app
name was needed, otherwise the channel would be hung up.

This change moves the calls used to set the stasis app name
and the replace snapshot to the bridge_stasis_push function
callback from the bridge transfer logic, allowing the steps
to be completed earlier and more deterministically, and the
race elimianted.

NOTE: the swap channel parameter to bridge_stasis_push (and
thus all bridge push callbacks) must always be present when
performing a swap with another channel.

ASTERISK-24649 #close
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/4341/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430939 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-22 18:09:35 +00:00
Matthew Jordan beb20440e0 apps/app_voicemail: Trigger MWI notification with MixMonitor m() option
The MixMonitor m() option allows a recording to be pushed to a specific
voicemail mailbox. If the message is delivered to the mailbox's INBOX, however,
no MWI notification is currently raised.

This patch corrects the issue by properly calling notify_new_state from the
msg_create_from_file function. This will cause MWI to be triggered if the
message was placed in the mailbox's INBOX.

ASTERISK-24709 #close
Reported by: Gareth Palmer
patches:
  app_voicemail-430919.patch uploaded by Gareth Palmer (License 5169)
........

Merged revisions 430920 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430921 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-22 14:23:13 +00:00
Richard Mudgett 5e10007dbd res_pjsip_outbound_registration.c: Move unref to a better place.
Move an unconditional unref of client_state so it doesn't look like it
could be used after the last ref has destroyed it.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430902 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-21 21:53:51 +00:00
Matthew Jordan 74a13629e2 channels/chan_sip: Fix registration leak during reload
When the SIP registrations were migrated to using ao2 in what was then trunk,
the explicit destruction of the registrations on module reload was removed and
not replaced with an ao2 equivalent. Debugging done by Stefan Engström, the
issue reporter, on ASTERISK-24673 confirmed that the reference in the
registry_list container was being leaked.

Since the purpose of cleanup_all_regs is to prep a registration for
destruction, this function now calls an ao2_callback function callback with the
OBJ_MULTIPLE | OBJ_NODATA | OBJ_UNLINK flags used to remove the registrations.
This cleans up each registration, and also removes it from the registration
container registry_list.

Review: https://reviewboard.asterisk.org/r/4355/

ASTERISK-24640 #close
Reported by: Max Man

ASTERISK-24673 #close
Reported by: Stefan Engström
Tested by: Stefan Engström



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430864 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-21 13:33:49 +00:00
Matthew Jordan 452f0eeb57 AMI: Add documentation for the missing Cdr/CEL events.
This patch adds AMI event documentation for the Cdr and CEL AMI events.

Note that while these events do share fields with each other and with other
channel related events, they do not contain all of the fields in a standard
channel snapshot, nor is the description of the fields identical. As such,
the patch opts for documentation for each field, for each event.

Review: https://reviewboard.asterisk.org/r/4350/

ASTERISK-24671 #close
Reported by: Dan Jenkins


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430862 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-21 13:27:13 +00:00
Matthew Jordan 894d4d781c apps/app_dial: Don't publish DialEnd twice on unexpected GoSub/Macro values
The Dial application has some interesting options with the mid-call Macro (M)
and GoSub (U) options. If the MACRO_RESULT/GOSUB_RESULT returns specific
values, the Dial application will take some action upon the channels involved
in the dial operation (such as hanging up a particular party, etc.) The Dial
application ensures that a Stasis message is published in the event that
MACRO_RESULT/GOSUB_RESULT returns a value that kills the dial operation, so
that there is a corresponding DialEnd event published in AMI/ARI for the
DialBegin event that preceeded it.

A bug exists where that same DialEnd event will be published on Stasis even if
the value returned in MACRO_RESULT/GOSUB_RESULT is not one that the Dial
application cares about. This causes two DialEnd events to be published - one
with the MACRO_RESULT/GOSUB_RESULT and another with "ANSWERED" - which is all
sorts of wrong.

This patch fixes the bug by ensuring that we only publish a DialEnd message to
Stasis if the Dial application's mid-call Macro/GoSub returns something that
Dial cares about.

Review: https://reviewboard.asterisk.org/r/4336

ASTERISK-24682 #close
Reported by: Matt Jordan


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430842 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-21 13:10:54 +00:00
Matthew Jordan 98c3983c89 main/rtp_engine: Format NTP timestamps as unsigned longs
When the RTCP reports are created, the NTP timestamps are stored as strings,
as JSON does not have an integer type long enough to store the value. However,
on 32-bit systems, a signed long may overflow for some portion of the
timestamp.

This patch corrects the overflow by formatting the timestamps as unsigned
longs.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430840 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-21 12:56:49 +00:00
Ashley Sanders a7ba8a58a8 ARI: Fixed crash that occurred when updating a bridge when the optional query parameter 'name' was not supplied.
Prior to this changeset, posting to the: /ari/bridges/{bridgeId} endpoint without specifying a value for the [name] query parameter, would crash Asterisk if the bridge you are attempting to create (or update) had the same ID as an existing bridge. The internal mechanism of the POST operation interpreted a null value for name, thus resulting in an error condition that crashed Asterisk.

ASTERISK-24560 #close
Reported By: Kinsey Moore

Review: https://reviewboard.asterisk.org/r/4349/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-20 16:51:44 +00:00
Richard Mudgett 6af6a216a1 CHANNEL(peer), chan_iax2, res_fax, SNMP agent: Fix deadlock from reaching across a bridge.
Calling ast_channel_bridge_peer() cannot be done while holding any channel
locks.  The reported issue hit the deadlock in chan_iax2, but an audit of
the ast_channel_bridge_peer() calls found three more locations where the
same deadlock can occur.

* Made CHANNEL(peer), res_fax, and the SNMP agent not call
ast_channel_bridge_peer() with any channel locked.  For CHANNEL(peer) I
had to rework the logic to not hold the channel lock.

* Made chan_iax2 no longer call ast_channel_bridge_peer().  It was done
for legacy reasons that no longer apply.

* Removed the iax.conf forcejitterbuffer option.  It is now always enabled
when the jitterbuffer option is enabled.  If you put a jitter buffer on a
channel it will be on the channel.

ASTERISK-24600 #close
Reported by: Jeff Collell

Review: https://reviewboard.asterisk.org/r/4342/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430817 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-20 16:46:16 +00:00
Matthew Jordan 072db5e1b9 contrib/scripts/install_prereq: Don't install 32-bit packages on 64-bit hosts
On Debian based systems, the install_prereq tool uses a search command on
Debian that results in selecting both 64-bit and 32-bit packages. Besides the
waste of disk space, this can actually cause aptitude use 100% of memory on a
VM with 1GB of RAM as it tried to work out all of the 32-bit package
dependencies.

This patch filters out the 32-bit packages on a 64-bit machine, and leaves
32-bit machines alone.

ASTERISK-24048 #close
Reported by: Ben Klang
Tested by: Ben Klang, Matt Jordan
patches:
  install_prereq_64-bit_compat.patch uploaded by Ben Klang (License 5876)
........

Merged revisions 430798 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430799 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-20 02:39:46 +00:00
Matthew Jordan e659b3e53d app_voicemail: Temp message left after review/hangup with ODBC/IMAP backend
When using ODBC or IMAP storage, temporary files created on the file system
must be disposed of using the DISPOSE macro. The DELETE macro will map to a
deletion function for the backend storage, but does not clean up any local
files created as a result of the operation.

When using voicemail with the operator and review options enabled, pressing
0 to enter the menu, followed by 1 to save the message, followed by any
other DTMF press to delete the message, will result in the temporary file
lingering on the file system.

This patch properly calls DISPOSE after the DELETE. This causes the local
file to be disposed of.

ASTERISK-24288 #close
Reported by: LEI FU
patches:
  voicemail_odbc_review_fix.diff uploaded by LEI FU (License 6640)
........

Merged revisions 430795 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-20 02:32:23 +00:00
Mark Michelson ab5af1f3d8 Call extension state callbacks at hint creation.
When a hint gets created, any subsequent device or presence
state changes result in extension status events getting sent
out to interested parties. However, at the time of hint creation,
no such event gets sent out, so watchers of extension state are
potentially left in the dark until the first state change after
hint creation.

Patch contributed by John Hardin (License #6512)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-19 18:05:15 +00:00
Joshua Colp 643b81d98e res_pjsip / res_pjsip_multihomed: Use the correct transport and addressing information on UAS sessions.
The first thing this patch fixes is UAS dialogs. Previously if a transport was
configured on an endpoint and an inbound session was created there was no guarantee
that requests sent on the dialog would use the correct transport and address
information. This has now been fixed so an explicitly configured transport
is taken into account.

The second thing this patch fixes is res_pjsip_multihomed. The res_pjsip_multihomed
module attempts to determine what transport a message should go out on and what
addressing information should go into the message itself. In a scenario where
multiple transports exist bound to the same IP address but a different port the
code would incorrectly alter the transport and change the message to the wrong
transport. This change makes the res_pjsip_multihomed module smarter so it will
only change the transport and address information in the message when it is
possible and makes sense.

ASTERISK-24615 #close
Reported by: David Justl

Review: https://reviewboard.asterisk.org/r/4331/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430755 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-19 13:18:32 +00:00
Kevin Harwell 34c220203f REVERTING res_pjsip: make it unloadable
Due to the original patch causing memory corruptions the patch is
being removed until the problem can be resolved.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-17 00:31:40 +00:00
Mark Michelson e257244bbb Change PJProject version requirement for ca_list_path transport option in CHANGES file.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-16 22:13:50 +00:00
Mark Michelson 821c15ae53 Fix problem where a hung channel could occur on a failed blind transfer.
Different clients react differently to being told that a blind transfer
has failed. Some will simply send a BYE and be done with it. Others will
attempt to reinvite themselves back onto the call.

In the latter case, we were creating a new channel and then leaving it to
sit forever doing nothing. With this code change, that new channel will
not be created and the dialog with the transferring channel will be cleaned
up properly.

ASTERISK-24624 #close
Reported by Zane Conkle

Review: https://reviewboard.asterisk.org/r/4339



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-16 22:12:25 +00:00
Mark Michelson 8bc4a89e1f Add support for the ca_list_path option for PJSIP transports.
This allows for a path to be specified that has a collection of CA
certificates in it.

ASTERISK-24575 #close
Reported by cloos
Patches:
	pj-ca-path-trunk.diff uploaded by cloos (License #5956)

Review: https://reviewboard.asterisk.org/r/4344



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-16 17:45:44 +00:00
Richard Mudgett fa80d9658d res_fax.c, res_fax_spandsp.c: Remove redundant locking.
When FAX was developed, apparently the faxregistry.container used to be a
linked list that was converted to an ao2 container.  Some of the
replacement ao2 container operations still had explicit lock/unlocks
around them.

Three off nominal code paths in res_fax.c and res_fax_spandsp.c unlock the
channel even though the routine did not lock the channel and other code
paths in the routine do not unlock the channel.

Review: https://reviewboard.asterisk.org/r/4340/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430687 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-15 17:35:05 +00:00
Richard Mudgett 6c426e86bd res_fax.c, res_fax_spandsp.c: Fix some curlies on the end of function definitions.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430685 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-15 17:18:14 +00:00
Joshua Colp c95391f23c res_pjsip_outbound_registration: Fix race condition when reloading and listing registrations.
Due to the split of outbound registration state from configuration it is possible during
a reload for a "pjsip show registrations" CLI command to be executed which gets an older
snapshot of the configuration. This configuration may include outbound registrations which
have been removed due to a reload operation occurring at the same time. The code for
printing the outbound registration did not take this into account but now it does.

AST-1506 #close

Review: https://reviewboard.asterisk.org/r/4338/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430664 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-15 12:09:40 +00:00
Matthew Jordan f6630e2481 configure: If cross-compiling, assume we have working semaphores
The Asterisk 13 configure.ac checks for HAS_WORKING_SEMAPHORE but does not have
an option for cross-compiling so it fails with an exit. Since we're cross-
compiling, we can't exactly go looking for the header. The semaphore.h header
is relatively common:
* It's part of the POSIX standard
* It's part of GNU C Library
As such, we assume that it will be present when cross-compiling.

As such, this patch defaults "HAS_WORKING_SEMAPHORE" to "1" if cross-compiling
is detected.

If you're cross-compiling to a platform that doesn't support this, then make
sure you re-define this to 0.

ASTERISK-24663 #close
Reported by: abelbeck
patches:
  asterisk-13-anonymous-semaphores.patch uploaded by abelbeck (License 5903)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430646 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-15 02:18:45 +00:00
Kevin Harwell 77a036bf3f res_pjsip: make it unloadable
The res_pjsip module was previously unloadable. With this patch it can now
be unloaded.

This patch is based off the original patch on the issue (listed below) by Corey
Farrell with a few modifications. Namely, removed a few changes not required to
make the module unloadable and also fixed a bug that would cause asterisk to
crash on unloading.

This patch is the first step (should hopefully be followed by another/others at
some point) in allowing res_pjsip and the modules that depend on it to be
unloadable. At this time, res_pjsip and some of the modules that depend on
res_pjsip cannot be unloaded without causing problems of some sort.

The goal of this patch is to get res_pjsip and only res_pjsip to be able to
unload successfully and/or shutdown without incident (crashes, leaks, etc...).
Other dependent modules may still cause problems on unload.

Basically made sure, with the patch applied, that res_pjsip (with no other
dependent modules loaded) could be succesfully unloaded and Asterisk could
shutdown without any leaks or crashes that pertained directly to res_pjsip.

ASTERISK-24485 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4311/
patches:
  pjsip_unload-broken-r1.patch submitted by Corey Farrell (license 5909)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430628 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-14 23:14:47 +00:00
Mark Michelson e370c9e68e Prevent slow graceful shutdown when outbound publications never started.
The code was missing the case for explicitly destroying an outbound publication
when Asterisk had never actually published anything. The result was that Asterisk
would hang for a while on a graceful shutdown.

With this change, the case is taken into account, and on a graceful shutdown, these
publications are destroyed without the need to actually send a PUBLISH request.

ASTERISK-24655 #close
Reported by Kevin Harwell

Review: https://reviewboard.asterisk.org/r/4325



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430608 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-14 20:27:18 +00:00
Matthew Jordan 89a431df84 build_tools/mkpkgconfig: Fix Cflags concatenation error in asterisk.pc
The mkpkgconfig script incorrectly concatenates Cflags options together. As an
example, the following:
Cflags: -I/usr/include/libxml2 -g3

Is instead generated as:
Cflags: -I/usr/include/libxml2-g3

This patch corrects the generation of Cflags in mkpkgconfig such that the
Cflags options are output correctly.

Review: https://reviewboard.asterisk.org/r/3707/

ASTERISK-23991 #close
Reported by: Diederik de Groot
patches:
  fix_mkpkgconfig.diff uploaded by Diederik de Groot (License 6600)
........

Merged revisions 430589 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430590 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-14 15:39:18 +00:00
Richard Mudgett 1f94b96749 app_macro: Don't restore the calling location on a channel redirect.
v11: If a channel redirect to a macro exten of a macro that is active
happens, the redirect location doesn't get executed.  Instead the original
macro location is restored and gets reexecuted.

v13: An additional effect happens if a parked call times out to an
extension in the macro that parked the call then the macro is reexecuted
instead of the expected park return location.

* Made not restore the macro calling location on an
AST_SOFTHANGUP_ASYNCGOTO.

* Increased the locked channel range when setting up the macro execution
environment to cover things that should be done while the channel is
locked.

* Removed unnecessary NULL tests before calling ast_free() in
_macro_exec().

ASTERISK-23850 #close
Reported by: Andrew Nagy

Review: https://reviewboard.asterisk.org/r/4292/
........

Merged revisions 430564 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430565 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-13 18:16:32 +00:00
Joshua Colp 056f11ac65 chan_pjsip: Add configure check for 'pjsip_get_dest_info' function.
The 'pjsip_get_dest_info' function is used to determine if the signaling transport
of the dialog is secure or not. This function was added in PJSIP 2.3 and does not
exist in earlier versions.

This configure check allows Asterisk to build and run with older versions at the
loss of the 'secure' argument for the PJSIP CHANNEL dialplan function. Usage of
this argument will require upgrading to PJSIP 2.3.

ASTERISK-24665 #close
Reported by: Mark Michelson

Review: https://reviewboard.asterisk.org/r/4329/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-13 12:06:50 +00:00
Richard Mudgett 368ecf13bf AMI: Revert non-backwards compatible changes from earlier commit.
* Reverted the change to astman_send_listack() to not use the listflag
parameter and always set the value to "Start" so the start capitalization
is consistent.  Unfortunately changing the case of a returned value is not
a backward compatible change so for now FAXSessions is going to have to
remain inconsistent with all of the other AMI list actions.

* Reverted the minor protocol error fix in action_getconfig() when no
requested categories are found.  Each line needs to be formatted as
"Header: text".

Caught by the testsuite.

ASTERISK-24049


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-12 18:34:28 +00:00
Matthew Jordan 7d606d87bf configs/samples/features.conf.sample: Document attended transfer DTMF options
The sample config was missing the configuration options for DTMF attended
transfer completion scenarios. The configuration options 'atxferabort',
'atxfercomplete', 'atxferthreeway', and 'atxferswap' are now documented in the
appropriate configuration file.

ASTERISK-24678 #close
Reported by: Niklas Larsson
patches:
  features.conf.sample.diff uploaded by Niklas Larsson (License 5068)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430526 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-12 18:28:27 +00:00
Matthew Jordan 4e2be8fb8f main/syslog: Allow dynamic logs, such as security events, to log to the syslog
The security event log uses a dynamic log level (SECURITY) that is registered
with the Asterisk logging core. Unfortunately, the syslog would ignore log
statements that had a dynamic log level associated with them. Because the
syslog cannot handle ad hoc dynamic log levels, this patch treats any dynamic
log entries sent to the syslog as logs with a level of NOTICE.

ASTERISK-20744 #close
Reported by: Michael Keuter
Tested by: Michael L. Young, Jacek Konieczny
patches:
  asterisk-20744-syslog-dynamic-logging_trunk.diff uploaded by Michael L. Young (license 5026)
........

Merged revisions 430506 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430507 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-12 18:01:24 +00:00
Matthew Jordan dc993db55c funcs/func_curl: Fix memory leak when CURLOPT channel datastore is destroyed
When the channel datastore associated with the usage of CURLOPT on a specific
channel is freed, the underlying structure holding the list of options is not
disposed of. This patch properly frees the structure in the datastore .destroy
callback.

ASTERISK-24672 #close
Reported by: Kristian Hogh
patches:
  func_curl-memory-leak.diff uploaded by Kristian Hogh (License 6639)
........

Merged revisions 430487 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430488 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-12 15:18:04 +00:00
Scott Griepentrog 4791d629d1 sip_to_pjsip: improve ability to parse input files
General improvements to SIP to PJSIP conversion utility:

1) track default section of input file to allow parsing
   an include file that doesn't specify a [section]

2) informatively handle case of assignment without [section]

3) correctly handle getting sections from included files
   - [section]'s are inherited by included file

4) provide null string as default transport bind ip

5) gracefully handle missing portions of registration string

6) denote steps of operation during conversion and confirm
   top level files as a convenience

ASTERISK-24474 #close
Review: https://reviewboard.asterisk.org/r/4280/
Reported by: John Kiniston



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-09 22:08:40 +00:00
Scott Griepentrog 2b0d522dbb app_bridge: return to the next dialplan priority
When app_bridge grabs a channel and puts it into
a bridge, the channel should then continue where
it left off in the dialplan after the bridge has
ended.   Although it stores the current dialplan
location as an after bridge goto on the channel,
it was executing the same priority again instead
of going to the next priority.   By swapping the
"specific" version of bridge_set_after_goto with
bridge_set_after_go_on, the next priority in the
dialplan is executed instead.

ASTERISK-24637 #close
Review: https://reviewboard.asterisk.org/r/4322/
Reported by: John Bigelow



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430467 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-09 21:44:31 +00:00
Richard Mudgett 4b363688d4 AMI: Make AMI actions that generate event lists consistent.
* Made the following AMI actions use list API calls for consistency:
Agents
BridgeInfo
BridgeList
BridgeTechnologyList
ConfbridgeLIst
ConfbridgeLIstRooms
CoreShowChannels
DAHDIShowChannels
DBGet
DeviceStateList
ExtensionStateList
FAXSessions
Hangup
IAXpeerlist
IAXpeers
IAXregistry
MeetmeList
MeetmeListRooms
MWIGet
ParkedCalls
Parkinglots
PJSIPShowEndpoint
PJSIPShowEndpoints
PJSIPShowRegistrationsInbound
PJSIPShowRegistrationsOutbound
PJSIPShowResourceLists
PJSIPShowSubscriptionsInbound
PJSIPShowSubscriptionsOutbound
PresenceStateList
PRIShowSpans
QueueStatus
QueueSummary
ShowDialPlan
SIPpeers
SIPpeerstatus
SIPshowregistry
SKINNYdevices
SKINNYlines
Status
VoicemailUsersList

* Incremented the AMI version to 2.7.0.

* Changed astman_send_listack() to not use the listflag parameter and
always set the value to "Start" so the start capitalization is consistent.
i.e., The FAXSessions used "Start" while the rest of the system used
"start".  The corresponding complete event always used "Complete".

* Fixed ami_show_resource_lists() "PJSIPShowResourceLists" to output the
AMI ActionID for all of its list events.

* Fixed off-nominal AMI protocol error in manager_bridge_info(),
manager_parking_status_single_lot(), and
manager_parking_status_all_lots().  Use of astman_send_error() after
responding to the original AMI action request violates the action response
pattern by sending two responses.

* Fixed minor protocol error in action_getconfig() when no requested
categories are found.  Each line needs to be formatted as "Header: text".

* Fixed off-nominal memory leak in manager_build_parked_call_string().

* Eliminated unnecessary use of RAII_VAR() in ami_subscription_detail().

ASTERISK-24049 #close
Reported by: Jonathan Rose

Review: https://reviewboard.asterisk.org/r/4315/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430434 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-09 17:54:49 +00:00
Kinsey Moore eb9ce791d8 res_fax: Add T.38 negotiation timeout option
This change makes the T.38 negotiation timeout configurable via
't38timeout' in res_fax.conf or FAXOPT(t38timeout). It was previously
hard coded to be 5000 milliseconds.

This change also handles T.38 switch failures by aborting the fax since
in the case where this can happen, both sides have agreed to switch to
T.38 and Asterisk is unable to do so.

Review: https://reviewboard.asterisk.org/r/4320/
........

Merged revisions 430415 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430416 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-09 14:51:39 +00:00
George Joseph b937438c17 res_pjsip_pubsub: Fix persistent subscriptions not surviving graceful shutdown
If you do a 'core (shutdown|restart) graceful' persistent subscriptions won't 
survive.  If you do a 'core (shutdown|restart) now' or asterisk terminates for 
some reason, they do.  Here's why...

When asterisk shuts down gracefully, it sends a 'NOTIFY/terminated' to 
subscribers for each subscription.  This not only tells the subscribers that the 
dialog/state machine is done, it also frees the last reference to the 
subscription tree which causes the persistent subscription to get deleted from 
astdb.  When asterisk restarts, nothing's left.  Just preventing the delete from 
astdb doesn't work because we already told the subscriber to terminate the 
dialog so we can't restart it even if it was still in astdb.  Everything works 
OK if asterisk terminates unexpectedly because we never send the 'terminated' 
message so on restart, the subscription is still in astdb and the subscriber is 
none the wiser.

This patch suppresses the sending of 'NOTIFY/terminated' on shutdown for 
persistent connections.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4318/





git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-08 21:40:29 +00:00
George Joseph 143bec54ee res_pjsip_outbound_registration: Fix reference leak.
Every time a registration started, sip_outbound_registration_response_cb bumps 
the ref count on client_state then pushes a handle_registration_response task.  
handle_registration_response never unreffed it though.  So every time a 
registration goes out, the ref count goes up by one.

This patch adds the unreffs to handle_registration_response.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4303/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430395 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-08 21:37:42 +00:00
George Joseph 6e59bf6491 res_pjsip_outbound_registration: Fix several reload issues
There are 2 issues with reloading registrations...

1.  The 'can_reuse_registration' test wasn't considering the intervals or 
expiration in its determination of whether a registration changed or not so if 
you changed any of the intervals or the expiration and reloaded, the object 
would get reloaded but the actual timers wouldn't change.  
can_reuse_registration now does a sorcery diff on the old and new objects 
instead of discretely testing certain fields.  Now if you change expiration for 
instance, and reload, the timer is updated and re-registration will occur on the 
new value.

2.  If you mung up your password on an outbound registration you get a permanent 
failure.  If you fix the password (on the outbound_auth object) and reload, 
nothing tells outbound_registration to try again because the registration itself 
didn't change.  This patch adds an observer on the "auth" object type and if any 
auth changes, existing registration states are searched and those in a 
REJECTED_PERMANENT state are retried.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4304/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-08 17:48:29 +00:00
Kinsey Moore 8f3c60cee7 ARI: Allow usage of ASYNCGOTO with Stasis()
When the AMI Redirect action is used with a channel bridged inside
Stasis() and not running a pbx, the channel is hung up instead of
proceeding to the desired location in dialplan. This change allows
such channels to be Redirected properly by detecting the operation
used by Redirect (ASYNCGOTO) and using the code already established
for functionality of the ARI channel continue operation.

ASTERISK-24591 #close
Review: https://reviewboard.asterisk.org/r/4271/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 21:25:34 +00:00
Mark Michelson 42b342c6e2 Add the ability to continue and originate using priority labels.
With this patch, the following two ARI commands

POST /channels
POST /channels/{id}/continue

Accept a new parameter, label, that can be used to continue to or originate
to a priority label in the dialplan.

Because this is adding a new parameter to ARI commands, the API version of
ARI has been bumped from 1.6.0 to 1.7.0.

This patch comes courtesy of Nir Simionovich from Greenfield Tech. Thanks!

ASTERISK-24412 #close
Reported by Nir Simionovich

Review: https://reviewboard.asterisk.org/r/4285



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 18:53:16 +00:00
George Joseph a10d2966b6 res_pjsip_exten_state: Change 'does not exist' warning to notice
The 'new_subscribe: Extension <> does not exist or has no associated hint'
is a config issue and doesn't need to clutter up logs with warnings.
Changed to notice.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4307/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430319 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 18:17:05 +00:00
George Joseph 13ed8f73ed res_pjsip_mwi: Change "MWI Subscription failed" message from warning to notice
The "MWI Subscription failed" message means the client is trying to subscribe
to a mailbox that doesn't exist.  There's no need to clutter up logs with
warnings for a client misconfiguration so I changed it to a notice.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4306/




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430317 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 18:14:23 +00:00
George Joseph 42e4cb7174 func_config: Add ability to retrieve specific occurrence of a variable
I guess nobody uses templates with AST_CONFIG because today if you have a
context that inherits from a template and you call AST_CONFIG on the context,
you'll get the value from the template even if you've overridden it in the
context.  This is because AST_CONFIG only gets the first occurrence which is
always from the template.

This patch adds an optional 'index' parameter to AST_CONFIG which lets you
specify the exact occurrence to retrieve, or '-1' to retrieve the last.
The default behavior is the current behavior.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4313/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430315 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 17:51:35 +00:00
Mark Michelson 9ea8dd036f Fix ability to perform a remote attended transfer with PJSIP.
This fix has two parts:

* Corrected an error message to properly state that external_replaces is an extension. The
  error message also prints what dialplan context the external_replaces extension was being
  looked for in.
* Corrected the printing of the Replaces: header in an INVITE request. We were duplicating
  "Replaces: " in the header.

ASTERISK-24376 #close
Reported by Matt Jordan

Review: https://reviewboard.asterisk.org/r/4296



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430313 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 17:35:27 +00:00
George Joseph 75cd302b0a config: Add option to NOT preserve effective context when changing a template
Let's say you have a template T with variable VAR1 = ON and you have a
context C(T) that doesn't specify VAR1.  If you read C, the effective value
of VAR1 is ON.  Now you change T VAR1 to OFF and call
ast_config_text_file_save.  The current behavior is that the file gets
re-written with T/VAR1=OFF but C/VAR1=ON is added.  Personally, I think this
is a bug. It's preserving the effective state of C even though I didn't
specify C/VAR1 in th first place.  I believe the behavior should be that if
I didn't specify C/VAR1 originally, then the effective value of C/VAR1 should
continue to follow the inherited state.  Now, if I DID explicitly specify
C/VAR1, the it should be preserved even if the template changes.

Even though I think the existing behavior is a bug, it's been that way forever
so I'm not changing it.  Instead, I've created ast_config_text_file_save2()
that takes a bitmask of flags, one of which is to preserve the effective context
(the current behavior).  The original ast_config_text_file_save calls *2 with
the preserve flag.  If you want the new behavior, call *2 directly without a
flag.

I've also updated Manager UpdateConfig with a new parameter
'PreserveEffectiveContext' whose default is 'yes'.  If you want the new behavior
with UpdateConfig, set 'PreserveEffectiveContext: no'.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4297/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430295 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 16:55:14 +00:00
Kinsey Moore e17a1a8ba1 Fix dev-mode build on recent gcc
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-07 02:52:29 +00:00
Matthew Jordan dd42e92e7a contrib/ast-db-manage: Correct down_revision path for user_eq_phone
When the user_eq_phone patch was backported to 13, it referenced the downward
revision that the PJSIP optimistic encryption option also references. This
creates a multi-path upgrade Exception when generating the SQL files.

This patch corrects this in the 13 branch. Note that trunk, which already
contained both of these features, is unaffected by this problem.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-06 22:46:07 +00:00
George Joseph 4becfae3b1 res_pjsip_mwi: Change warning to notice
When res_pjsip loads and an endpoint auto-subscribes a mailbox for mwi,
if a contact hasn't registered yet, res_pjsip_mwi spits out a warning.
This is a perfectly normal situation though and doesn't require something
as serious as a warning.  It's also self correcting. The device will start
getting mwi as soon as it registers.

This patch changes the warning to a notice.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4314/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430227 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-06 17:52:41 +00:00
George Joseph 9d457fe5c2 bridge_native_rtp: Change local/remote message from debug/2 to verb/4
Change the "Locally bridged"/"Remotely bridged" messages from dbg/2 to verb/4.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4300/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430225 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-06 17:46:05 +00:00
George Joseph 0fa6c34dc6 outbound_registration: Add 'pjsip send register' and update 'send unregister'
The current behavior of 'pjsip send unregister' is to send the unregister
(REGISTER with 0 exp) but let the next scheduled register proceed normally.
I don't think that's a good idea.  If you unregister, it should stay
unregistered until you decide to start registrations again.  So this patch
just adds a cancel_registration call to the current unregister_task to
cancel the timer.

Of course, now you need  a way to start registration again so I've added
a 'pjsip send register' command that unregisters and cancels any existing
registration (the same as send unregister), then sends an immediate
registration and starts the timer back up again.

Both changes also ripple to AMI.  There's a new PJSIPRegister command.

There's no harm in calling either command repeatedly.  They don't care
about the actual state.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4301/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430223 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-06 17:35:21 +00:00
George Joseph d873b09075 pjsip cli: Fix sorting of contacts for 'pjsip list contacts'
For some reason I was using a hash container instead of a list to gather the
contacts for 'pjsip list/show contacts' so even though I had a sort function,
the output wasn't sorted.  This patch just changes the hash container to a
list container and the contacts now appear sorted in the CLI.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4305/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430221 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-06 17:28:40 +00:00
Scott Griepentrog 566907fabd bridge: avoid leaking channel during blond transfer pt2
A blond transfer to a failed destination, when followed
by a recall attempt, lead to a leak of the reference to
the destination channel.  In addition to correcting the
regression on the previous attempt (r429826) this fixes
the leak and two additional reference leaks on failures
of bridge_import.

ASTERISK-24513 #close
Review: https://reviewboard.asterisk.org/r/4302/
........

Merged revisions 430199 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-05 22:49:40 +00:00
Joshua Colp b9a7875dd6 pjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430181 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-05 17:56:12 +00:00
Joshua Colp a7c38428af pjsip: Add 'PJSIP_AOR' and 'PJSIP_CONTACT' dialplan functions.
The PJSIP_AOR dialplan function allows inspection of configured AORs including
what contacts are currently bound to them.

The PJSIP_CONTACT dialplan function allows inspection of contacts in existence.
These can include both externally added (by way of registration) or permanent
ones.

ASTERISK-24341
Reported by: xrobau

Review: https://reviewboard.asterisk.org/r/4308/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430179 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-05 17:51:59 +00:00
Kinsey Moore cca262e7d3 PJSIP: Update transport method documentation
This updates the documentation for the 'method' configuration option to
be more verbose about the behaviors of values 'unspecified' and
'default'. They do exactly the same thing which is to select the
default as defined by PJSIP which is currently TLSv1.

Review: https://reviewboard.asterisk.org/r/4264/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-29 13:10:56 +00:00
Kevin Harwell 1a0979d437 app_queue: Update sample conf documenation
Updated the queues.conf.sample file to explicitly state which channel queue
variables are propagated to.

ASTERISK-24267
Reported by: Mitch Claborn
........

Merged revisions 430126 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-24 21:27:04 +00:00
Matthew Jordan b521c612fc res_pjsip: Backport missing commits for user_eq_phone
This backports the following from trunk, which were missed:

r427257 | file | 2014-11-04 16:31:16 -0600 (Tue, 04 Nov 2014) | 2 lines

res_pjsip: Allow + at the beginning of a phone number when user_eq_phone is enabled.

r427259 | file | 2014-11-04 16:51:32 -0600 (Tue, 04 Nov 2014) | 2 lines

res_pjsip: Apply the 'user_eq_phone' setting to the To header as well.

It also adds the Alembic script for the option.

ASTERISK-24643


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-24 15:26:53 +00:00
Matthew Jordan 915bb88d3e res_pjsip_keepalive: Add runtime configurable keepalive module for connection-oriented transports.
Note that this is backport from trunk of r425825.

This change adds a module which is configurable using the keep_alive_interval setting in the
global section that will send a CRLF keep alive to all active connection-oriented transports at
the provided interval. This is useful because it can help keep connections open through NATs.
This functionality also exists within PJSIP but can not be controlled at runtime and requires
recompiling it.

Review: https://reviewboard.asterisk.org/r/4084/

ASTERISK-24644 #close


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430084 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-24 13:25:04 +00:00
Matthew Jordan 006ffdcfb2 res_pjsip: Add 'user_eq_phone' option to add a 'user=phone' parameter when applicable.
Note that this is a backport of r425804 from trunk.

This change adds a configuration option which adds a 'user=phone' parameter if the user
portion of the request URI or the From URI is determined to be a number.

Review: https://reviewboard.asterisk.org/r/4073/

ASTERISK-24643 #close


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-24 13:20:00 +00:00
George Joseph d1c532034b pjsip_options: Fix continued qualifies after endpoint/aor deletion
If you remove an endpoint/aor from pjsip.conf then do a core reload,
qualifies will continue even though the object are gone.  This happens
because nothing clears out the qualify tasks.

This patch unschedules all existing qualify tasks before scheduling
new ones on reload.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4290/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-23 23:18:50 +00:00
George Joseph 0a3dd7589e test_astobj2: Fix warning for missing trailing slash in category
This patch adds a trailing slash to the category for this test.
No more warning.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4295/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430059 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-23 23:15:53 +00:00
Richard Mudgett 7a356232bd DTMF atxfer: Setup recall channels as if the transferee initiated the call.
After the initial DTMF atxfer call attempt to the transfer target fails to
answer during a blonde transfer, the recall callback channels do not get
setup with information from the initial transferrer channel.  As a result,
the recall callback to the transferrer does not have callid, channel
variables, datastores, accountcode, peeraccount, COLP, and CLID setup.  A
similar situation happens with the recall callback to the transfer target
but it is less visible.  The recall callback to the transfer target does
not have callid, channel variables, datastores, accountcode, peeraccount,
and COLP setup.

* Added missing information to the recall callback channels before
initiating the call.  callid, channel variables, datastores, accountcode,
peeraccount, COLP, and CLID

* Set callid of the transferrer channel on the DTMF atxfer controller
thread attended_transfer_monitor_thread().

* Added missing channel unlocks and props unref to off nominal paths in
attended_transfer_properties_alloc().

ASTERISK-23841 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4259/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430034 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-22 21:18:22 +00:00
Richard Mudgett fca0be57d9 queue_log: Post QUEUESTART entry when Asterisk fully boots.
The QUEUESTART log entry has historically acted like a fully booted event
for the queue_log file.  When the QUEUESTART entry was posted to the log
was broken by the change made by ASTERISK-15863.

* Made post the QUEUESTART queue_log entry when Asterisk fully boots.
This restores the intent of that log entry and happens after realtime has
had a chance to load.

AST-1444 #close
Reported by: Denis Martinez

Review: https://reviewboard.asterisk.org/r/4282/
........

Merged revisions 430009 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430010 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-22 19:44:03 +00:00
Matthew Jordan 9735a13429 chan_sip: Send CANCEL via original INVITE destination even after UPDATE request
Given the following scenario:
* Three SIP phones (A, B, C), all communicating via a proxy with Asterisk
* A call is established between A and B. B performs a SIP attended transfer of
  A to C. B sets the call on hold (A is hearing MOH) and dials the extension of
  C. While phone C is ringing, B transfers the call (that is, what we typically
  call a 'blond transfer').
* When the transfer completes, A hears the ringing of phone C, while B is idle.

In the SIP messaging for the above scenario, a REFER request is sent to
transfer the call. When "sendrpid=yes" is set in sip.conf, Asterisk may send an
UPDATE request to phone C to update party information. This update is sent
directly to phone C, not through the intervening proxy. This has the unfortunate
side effect of providing route information, which is then set on the sip_pvt
structure for C. If someone (e.g. B) is trying to get the call back (through a
directed pickup), Asterisk will send a CANCEL request to C. However, since we
have now updated the route set, the CANCEL request will be sent directly to C
and not through the proxy. The phone ignores this CANCEL according to RFC3261
(Section 9.1).

This patch updates reqprep such that the route is not updated if an UPDATE
request is being sent while the INVITE state is INV_PROCEEDING or
INV_EARLY_MEDIA. This ensures that a subsequent CANCEL request is still sent
to the correct location.

Review: https://reviewboard.asterisk.org/r/4279

ASTERISK-24628 #close
Reported by: Karsten Wemheuer
patches:
  issue.patch uploaded by Karsten Wemheuer (License 5930)
........

Merged revisions 429982 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429983 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-22 15:40:06 +00:00
George Joseph fc79cf6428 res_pjsip_phoneprovi_provider: Fix reload
Reloading wasn't working correctly because on a reload, the sorcery apply
handler was never being called for unchanged users.  So, instead of using
an apply handler, I'm now iterating over all users.  Works much more reliably.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4288/




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429914 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-22 00:17:02 +00:00
Joshua Colp f88460115f acl: Fix reloading of configuration if configuration file does not exist at startup.
The named ACL code incorrectly destroyed the config options information if loading
of the configuration file failed at startup. This would result in reloading
also failing even if a valid configuration file was put in place.

ASTERISK-23733 #close
Reported by: Richard Kenner
........

Merged revisions 429893 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429894 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-20 20:57:19 +00:00
Richard Mudgett 4b054bdc6d res_http_websocket.c: Fix incorrect use of sizeof in ast_websocket_write().
This won't fix the reported issue but it is an incorrect use of sizeof.

ASTERISK-24566
Reported by:  Badalian Vyacheslav
........

Merged revisions 429867 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-19 20:54:23 +00:00
Richard Mudgett 7074bf956b chan_dahdi: Don't ignore setvar when using configuration section scheme.
When the configuration section scheme of chan_dahdi.conf is used (keyword
dahdichan instead of channel) all setvar= options are completely ignored.
No variable defined this way appears in the created DAHDI channels.

* Move the clearing of setvar values to after the deferred processing of
dahdichan.

AST-1378 #close
Reported by: Guenther Kelleter
Patch by: Guenther Kelleter
........

Merged revisions 429825 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429829 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-19 17:31:28 +00:00
Scott Griepentrog 6a99df47c0 bridge: avoid leaking channel during blond transfer
After a blond transfer (start attended and hang up)
to a destination that also hangs up without answer,
the Local;1 channel was leaked and would show up on
core show channels.  This was happening because the
attended state blond_nonfinal_enter() resetting the
props->transfer_target to null while releasing it's
own reference, which would later prevent props from
releasing another reference during destruction. The
change made here is simply to not assign the target
to NULL.

ASTERISK-24513 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4262/
........

Merged revisions 429826 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429827 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-19 17:26:34 +00:00
Richard Mudgett b22c833c12 chan_dahdi.c, res_rtp_asterisk.c: Change some spammy debug messages to level 5.
ASTERISK-24337 #close
Reported by: Rusty Newton
........

Merged revisions 429804 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429805 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 22:38:07 +00:00
Richard Mudgett e603fbe04a chan_dahdi: Populate CALLERID(ani2) for incoming calls in featdmf signaling mode.
For the featdmf signaling mode the incoming MF Caller-ID information is
formatted as follows: *${CALLERID(ani2)}${CALLERID(ani)}#*${EXTEN}#

Rather than discarding the ani2 digits, populate the CALLERID(ani2) value
with what is received instead.

AST-1368 #close
Reported by: Denis Martinez
Patches:
      extract_ani2_for_featdmf_v11.patch (license #5621) patch uploaded by Richard Mudgett
........

Merged revisions 429783 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429784 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 20:03:11 +00:00
Kevin Harwell 4fad85f9bf res_pjsip_sdp_rtp: wrong bridge chosen when the DTMF mode is not compatible
A native rtp bridge was being chosen (it shouldn't have been) when using two
pjsip channels with incompatible DTMF modes.  This patch sets the rtp instance
property, AST_RTP_PROPERTY_DTMF, for the appropriate DTMF mode(s) for pjsip.
It was not being set before, meaning all DTMF modes for pjsip were being treated
as compatible, thus native bridging would be chosen as the bridge type when it
shouldn't have been.

ASTERISK-24459 #close
Reported by: Yaniv Simhi
Review: https://reviewboard.asterisk.org/r/4265/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429763 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 15:50:26 +00:00
Mark Michelson 14d2f8f20f Prevent potential infinite outbound authentication loops in registration.
Prior to this patch, Asterisk would always respond to 401 responses to
registration attempts by trying to provide a registration with authentication
credentials. Even if subsequent attempts were rejected with 401 responses,
Asterisk would continue this behavior. If authentication credentials were
incorrect, this could continue forever.

With this patch, we keep track of whether we have attempted authentication
on an outbound registration attempt. If we already have, we don not try
again until the next attempt. This prevents the infinite loop scenario.

Review: https://reviewboard.asterisk.org/r/4273



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 15:34:16 +00:00
Mark Michelson c1582929f9 Prevent possible race condition on dual redirect of channels in the same bridge.
The AST_FLAG_BRIDGE_DUAL_REDIRECT_WAIT flag was created to prevent bridges from
prematurely acting on orphaned channels in bridges. The problem with the AMI
redirect action was that it was setting this flag on channels based on the presence
of a PBX, not whether the channel was in a bridge. Whether a channel has a PBX
is irrelevant, so the condition has been altered to check if the channel is in a
bridge.

ASTERISK-24536 #close
Reported by Niklas Larsson

Review: https://reviewboard.asterisk.org/r/4268



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429741 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 15:05:49 +00:00
Mark Michelson 5bd5f580c1 Ensure the correct value is returned for CHANNEL(pjsip, secure)
Prior to this patch, we were using the PJSIP dialog's secure flag
to determine if a secure transport was being used. Unfortunately,
the dialog's secure flag was only set if a SIPS URI were in use,
as required by RFC 3261 sections 12.1.1 and 12.1.2. What we're interested
in is not dialog security, but transport security. This code change
switches to a model where we use the dialog's target URI to determine
what transport would be used to communicate, and then check if that
transport is secure.

AST-1450 #close
Reported by John Bigelow

Review: https://reviewboard.asterisk.org/r/4277



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429739 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 14:43:53 +00:00
George Joseph b4621cd0f5 res_pjsip_config_wizard: fix unload SEGV
If certain pjsip modules aren't loaded, the wizard causes a SEGV
when it unloads.  Added a check for the presense of the object
type wizard before trying to clean it up.

Tested-by: George Joseph



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429719 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-18 00:10:51 +00:00
George Joseph 105f224cfd res_pjsip_config_wizard: Change FILEUNCHANGED config_load2 flag determination
The module now applies the FILEUNCHANGED flag when both reloaded is
specified AND there's no last_config for the object type.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4276/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429699 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-17 23:05:24 +00:00
Walter Doekes 9ae57e0dd6 Fix printf problems with high ascii characters after r413586 (1.8).
In r413586 (1.8) various casts were added to silence gcc 4.10 warnings.
Those fixes included things like:

    -out += sprintf(out, "%%%02X", (unsigned char) *ptr);
    +out += sprintf(out, "%%%02X", (unsigned) *ptr);

That works for low ascii characters, but for the high range that yields
e.g. FFFFFFC3 when C3 is expected.

This changeset:
- fixes those casts to use the 'hh' unsigned char modifier instead
- consistently uses %02x instead of %2.2x (or other non-standard usage)
- adds a few 'h' modifiers in various places
- fixes a 'replcaes' typo
- dev/urandon typo (in 13+ patch)

Review: https://reviewboard.asterisk.org/r/4263/

ASTERISK-24619 #close
Reported by: Stefan27 (on IRC)
........

Merged revisions 429673 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 429674 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-17 09:54:00 +00:00
George Joseph a3534b7c05 res_pjsip_config_wizard: fix test breakage
Fix test breakage caused by not checking for res_pjsip before
calling ast_sip_get_sorcery.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4269/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429653 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-16 17:53:25 +00:00
Joshua Colp f26d4618eb chan_sip: Allow T.38 switch-over when SRTP is in use.
Previously when SRTP was enabled on a channel it was not possible
to switch to T.38 as no crypto attributes would be present.

This change makes it so it is now possible. If a T.38 re-invite
comes in SRTP is terminated since in practice you can't encrypt
a UDPTL stream. Now... if we were doing T.38 over RTP (which
does exist) then we'd have a chance but almost nobody does that so
here we are.

ASTERISK-24449 #close
Reported by: Andreas Steinmetz
patches:
 udptl-ignore-srtp-v2.patch submitted by Andreas Steinmetz (license 6523)
........

Merged revisions 429632 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429633 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-16 16:38:34 +00:00
Joshua Colp ad85e54fd9 res_pjsip_t38: Fix T.38 failure when peer reinvites immediately.
If a remote endpoint reinvites to T.38 immediately the state machine
will go into a peer reinvite state. If a T.38 capable application
(such as ReceiveFax) queries it will receive this state. Normally
the application will then indicate so that the channel driver will
queue up the T.38 offer previously received. Once it receives this
offer the application will act normally and negotiate.

The res_pjsip_t38 module incorrectly partially squashed this indication.
This would cause the application to think the request had failed when
in reality it had actually worked.

This change makes it so that no T.38 control frames (or indications)
are squashed.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429612 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-16 15:43:51 +00:00
George Joseph 89617370ec res_pjsip_config_wizard: Allow streamlined config of common pjsip scenarios
res_pjsip_config_wizard
------------------
 * This is a new module that adds streamlined configuration capability for
   chan_pjsip.  It's targetted at users who have lots of basic configuration
   scenarios like 'phone' or 'agent' or 'trunk'.  Additional information
   can be found in the sample configuration file at
   config/samples/pjsip_wizard.conf.sample.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4190/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429592 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-15 17:07:23 +00:00
Mark Michelson b85f79c0c1 Activate persistent subscriptions when they are recreated.
Prior to this change, recreating persistent subscriptions would
create the subscription but would not activate it. This led to subscriptions
being listed in the "NULL" state by diagnostics and not sending NOTIFYs
when expected.

Review: https://reviewboard.asterisk.org/r/4261



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429571 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-15 15:36:57 +00:00
George Joseph 2b8c441096 loader: Move definition of ast_module_reload from _private.h to module.h
No functionality change.  Just move the definition of ast_module_reload
from _private.h to module.h so it can be public.

Also removed the include of _private.h from manager.c since ast_module_load
was the only reason for including it.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4251/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429542 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 23:54:45 +00:00
Richard Mudgett 8f12ded887 DEBUG_THREADS: Fix regression and lock tracking initialization problems.
This patch started with David Lee's patch at
https://reviewboard.asterisk.org/r/2826/ and includes a regression fix
introduced by the ASTERISK-22455 patch.

The initialization of a mutex's lock tracking structure was not protected
in a critical section.  This is fine for any mutex that is explicitly
initialized, but a static mutex may have its lock tracking double
initialized if multiple threads attempt the first lock simultaneously.

* Added a global mutex to properly serialize initialization of the lock
tracking structure.  The painful global lock can be mitigated by adding a
double checked lock flag as discussed on the original review request.

* Defer lock tracking initialization until first use.

* Don't be "helpful" and initialize an uninitialized lock when
DEBUG_THREADS is enabled.  Debug code is not supposed to fix or change
normal code behavior.  We don't need a lock initialization race that would
force a re-setup of lock tracking.  Lock tracking already handles
initialization on first use.

* Properly handle allocation failures of the lock tracking structure.

* No need to initialize tracking data in __ast_pthread_mutex_destroy()
just to turn around and destroy it.


The regression introduced by ASTERISK-22455 is the result of manipulating
a pthread_mutex_t struct outside of the pthread library code.  The
pthread_mutex_t struct seems to have a global linked list pointer member
that can get changed by other threads.  Therefore, saving and restoring
the contents of a pthread_mutex_t struct is a bad thing.

Thanks to Thomas Airmont for finding this obscure regression.

* Don't overwrite the struct ast_lock_track.reentr_mutex member to restore
tracking data in __ast_cond_wait() and __ast_cond_timedwait().  The
pthread_mutex_t struct must be treated as a read-only opaque variable.


Miscellaneous other items fixed by this patch:

* Match ast_suspend_lock_info() with ast_restore_lock_info() in
__ast_cond_timedwait().

* Made some uninitialized lock sanity checks return EINVAL and try a
DO_THREAD_CRASH.

* Fix bad canlog initialization expressions.

ASTERISK-24614 #close
Reported by: Thomas Airmont

Review: https://reviewboard.asterisk.org/r/4247/
Review: https://reviewboard.asterisk.org/r/2826/
........

Merged revisions 429539 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429540 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 23:40:50 +00:00
Matthew Jordan 8c019b1a6b res/res_agi: Make Verbose message for 'stream file' match other playbacks
The Verbose message displayed when a file is played back via 'stream file'
was formatted differently than other playbacks:
* It didn't include the channel name
* It didn't include the channel language
It does, however, include the playback offset as well as any escape digits.
That information was kept; however, this patch updates the formatting to more
closely match the Verbose messages displayed when a file is played back by
'control stream file', Playback, ControlPlayback, or any other file playback
operation.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429519 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 22:53:05 +00:00
Matthew Jordan 7ff0d266a6 Add 11 merge properties
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429518 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 22:49:58 +00:00
Joshua Colp 439e6e1c5d media: Fix crash when determining sample count of a frame during shutdown.
When shutting down Asterisk the codecs are cleaned up. As a result anything
attempting to get a codec based on ID or details will find that no codec
exists. This currently occurs when determining the sample count of a frame.
This code did not take this situation into account.

This change fixes this by getting the codec directly from the format and
eliminates the lookup. This is both faster and also provides a guarantee
that the codec will exist and will be valid.

ASTERISK-24604 #close
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4260/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429497 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 16:57:26 +00:00
Kevin Harwell 01c4e76c4e chan_pjsip: Race between channel answer and bridge setup when using direct media
When direct media is enabled and a pjsip channel is answered a race would occur
between the handling of the answer and bridge setup. Sometimes the media
negotiation would take place after the native bridge was setup. This resulted
in a NULL media address, which in turn resulted in Asterisk using its address
as the remote media address when sending a reinvite.  This patch makes the
chan_pjsip answer handler synchronous thus alleviating the race condition (the
bridge won't start setting things up until after it returns).

ASTERISK-24563 #close
Reported by: Steve Pitts
Review: https://reviewboard.asterisk.org/r/4257/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429477 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 15:30:28 +00:00
David M. Lee 49386cf568 Fix crash for sorcery misconfigs
res_pjsip_outbound_publish was missing the CHECK_PJSIP_MODULE_LOADED()
call in load_module, and would crash with a segfault if res_pjsip
declined to load.

Review: https://reviewboard.asterisk.org/r/4258/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429457 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 15:00:37 +00:00
Kinsey Moore 3b0c40f337 PJSIP: Allow use of 'inactive' streams for hold
This allows use of the 'inactive' stream direction identifier to be
used for hold where 'sendonly' is normally used. Some Seimens phones
use 'inactive' and this change allows music on hold to operate
properly.

Review: https://reviewboard.asterisk.org/r/4252/
Reported by: Steve Pitts
........

Merged revisions 429432 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429433 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 14:12:09 +00:00
Kinsey Moore 15af40180a Sorcery: Log when old config remains in use
This adds a log message notifying the user that a stale configuration
is in place upon reload when a config object fails to load. This
situation can end up causing confusion when the object failed to load
but exists from a previous config load especially when the old config
is significantly different from the new config.

Review: https://reviewboard.asterisk.org/r/4250/
Reported by: Thomas Thompson
........

Merged revisions 429429 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429430 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 14:03:30 +00:00
Joshua Colp 0c9fbb449f res_pjsip_session: Delay sending BYE if a re-INVITE transaction is in progress.
Given the scenario where a PJSIP channel is in a native RTP bridge with direct
media and the channel is then hung up the code will currently re-INVITE the channel
back to Asterisk and send a BYE at the same time. Many SIP implementations dislike
this greatly.

This change makes it so that if a re-INVITE transaction is in progress the BYE
is queued to occur after the completion of the transaction (be it through normal
means or a timeout).

Review: https://reviewboard.asterisk.org/r/4248/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429409 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 13:05:15 +00:00
Joshua Colp 61fe4f10d2 res_pjsip_session: Fix issue where a declined media stream in a re-INVITE would fail SDP negotiation.
In the past the SDP negotiation within res_pjsip_session was made more tolerant of
certain situations. The only case where SDP negotiation will fail is when a major
error occurs during negotiation. Receiving an already declined media stream is
not considered a major error.

When producing the local SDP the logic took this into account so on the initial INVITE
the declined media stream did not cause an SDP negotiation failure. Unfortunately
the logic for handling media streams with a handler did not mirror this logic and
considered an already declined media stream an error and thus failed the SDP
negotiation.

This change makes the logic between both situations match so only under major
errors will the SDP negotiation fail.

ASTERISK-24607 #close
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4254/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429407 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-12 12:31:20 +00:00
Kevin Harwell 8237bd357d ARI/AMI: Include language in standard channel snapshot output
The CHANGES verbiage for the "language" addition had been put under the wrong
release. This moves it to be under 13.1 to 13.2 changes.

ASTERISK-24553
Reported by: Matt Jordan


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429387 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-11 20:31:29 +00:00
Kinsey Moore 2288f910ea Recorded merge of revisions 429378 from http://svn.asterisk.org/svn/asterisk/branches/12
........
Fix incorrect patch applied in r429354

The patch that was applied was another pending patch. This swaps them out.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-11 17:21:43 +00:00
Kinsey Moore b7f7d045ac Recorded merge of revisions 429354 from http://svn.asterisk.org/svn/asterisk/branches/12
........
Stasis: Update unittest for channel snapshots

This adjusts the unit test for channel snapshots to take the new
language key into account.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-11 13:56:24 +00:00
Kinsey Moore 50f6517296 Stasis: Update unittest for channel snapshots
This adjusts the unit test for channel snapshots to take the new
language key into account.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429352 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-11 13:49:24 +00:00
Kevin Harwell d4a05879d6 ARI/AMI: Include language in standard channel snapshot output
Adding information about including "language" in the standard channel snapshot
output to the CHANGES file. Note the actual source changes have already been
previously committed.

ASTERISK-24553
Reported by: Matt Jordan
........

Merged revisions 429325 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-10 15:42:46 +00:00
Joshua Colp fb768ec33a res_http_websocket: Fix crash due to double freeing memory when receiving a payload length of zero.
Frames with a payload length of 0 were incorrectly handled in res_http_websocket.
Provided a frame with a payload had been received prior it was possible for a double
free to occur. The realloc operation would succeed (thus freeing the payload) but be
treated as an error. When the session was then torn down the payload would be
freed again causing a crash. The read function now takes this into account.

This change also fixes assumptions made by users of res_http_websocket. There is no
guarantee that a frame received from it will be NULL terminated.

ASTERISK-24472 #close
Reported by: Badalian Vyacheslav

Review: https://reviewboard.asterisk.org/r/4220/
Review: https://reviewboard.asterisk.org/r/4219/
........

Merged revisions 429270 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 429272 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-10 13:34:05 +00:00
Kinsey Moore a220a08777 PJSIP: Fix assert on initial mass qualify
This fixes the MWI test regressions caused by r429127 and ensures that
contacts have non-zero qualify_frequency before attempting scheduling.
........

Merged revisions 429245 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429246 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-10 13:14:56 +00:00
Scott Griepentrog 22a91bf698 core: avoid possible asterisk -r crash from long id
When connecting to the remote console, an id string
is first provided that consts of the hostname, pid,
and version.  This is parsed by the remote instance
using a buffer that may be too short, and can allow
a buffer overrun because it is not terminated. This
patch adds termination and a larger buffer.

Review: https://reviewboard.asterisk.org/r/4182/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429223 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 20:46:17 +00:00
Kevin Harwell 2f21f85c37 ARI/AMI: Include language in standard channel snapshot output
The channel "language" was already part of a channel snapshot, however is was
not sent out over AMI or ARI. This patch makes it so the channel "language" is
included in the appropriate AMI or ARI events.

ASTERISK-24553 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4245/
........

Merged revisions 429204 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429206 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 20:19:40 +00:00
Kevin Harwell 525c823b4b Direct Media calls within private network sometimes get one way audio
When endpoints with direct_media enabled, behind a firewall (Asterisk on a
separate network) and were bridged sometimes Asterisk would send the ip
address of the firewall in the sdp to one of the phones in the reinvite
resulting in one way audio. When sending the reinvite Asterisk will retrieve
the media address from the associated rtp instance, but if frames were being
read this can be overwritten with another address (in this case the
firewall's).  This patch ensures that Asterisk uses the original device
address when using direct media.

ASTERISK-24563
Reported by: Steve Pitts
Review: https://reviewboard.asterisk.org/r/4216/
........

Merged revisions 429195 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 20:02:29 +00:00
Kevin Harwell 664067e318 res_pjsip_outbound_publish: stack overflow when using non-default sorcery wizard
When using a non-default sorcery wizard (in this instance realtime) for outbound
publishes Asterisk will crash after a stack overflow occurs due to the code
infinitely recursing.  The fix entails removing the outbound publish state
dependency from the outbound publish sorcery object and instead keeping an in
memory container that can be used to lookup the state when needed.

ASTERISK-24514 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4178/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429175 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 18:35:44 +00:00
Joshua Colp 74b032bb03 ari: Add support for specifying an originator channel when originating.
If an originator channel is specified when originating a channel the linked ID
of it will be applied to the newly originated outgoing channel. This allows
an association to be made between the two so it is known that the originator
has dialed the originated channel.

ASTERISK-24552 #close
Reported by: Matt Jordan

Review: https://reviewboard.asterisk.org/r/4243/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429153 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 15:44:05 +00:00
Kinsey Moore 64581d894d PJSIP: Stagger outbound qualifies
This change staggers initiation of outbound qualify (OPTIONS) attempts
to reduce instantaneous server load and prevent network congestion.

Review: https://reviewboard.asterisk.org/r/4246/
ASTERISK-24342 #close
Reported by: Richard Mudgett
........

Merged revisions 429127 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429128 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-09 14:00:50 +00:00
Matthew Jordan cbc91f50c1 AMI/ARI: Update version to 2.6.0/1.6.0 respectively for new features
AMI/ARI are getting a few enhancements in the next release of Asterisk 13. Per
semantic versioning, that warrants a bump in the minor version number, as it
reflects a backwards compatible change. Hence, this commit.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429091 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-08 16:53:39 +00:00
Mark Michelson 1712694817 Fix a crash that would occur when receiving a 491 response to a reinvite.
The reviewboard description does a fine job of summarizing this, so here it is:

A reporter discovered that Asterisk would crash when attempting to retransmit
a reinvite that had previously received a 491 response. The crash occurred
because a pjsip_tx_data structure was being saved for reuse, but its reference
count was not being increased. The result was that the pjsip_tx_data was being
freed before we were actually done with it. When we attempted to re-use the
structure when re-sending the reinvite, Asterisk would crash.

The fix implemented here is not to try holding onto the pjsip_tx_data at all.
Instead, when we reschedule sending the reinvite, we create a brand new
pjsip_tx_data and send that instead. Because of this change, there is no need
for an ast_sip_session_delayed_request structure to have a pjsip_tx_data on
it any more. So any code referencing its use has been removed.

When this initial fix was introduced, I encountered a second crash when
processing a subsequent 200 OK on a rescheduled reinvite. The reason was
that when rescheduling the reinvite, we gave the wrong location for a
response callback. This has been fixed in this patch as well.

ASTERISK-24556 #close
Reported by Abhay Gupta

Review: https://reviewboard.asterisk.org/r/4233



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429089 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-08 16:41:45 +00:00
Mark Michelson 93b1df3bf6 Add new AMI and ARI events for connected line changes on a channel.
The AMI event is called NewConnectedLine and the ARI event is called
ChannelConnectedLine.

ASTERISK-24554 #close
Reported by Matt Jordan

Review: https://reviewboard.asterisk.org/r/4231



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-08 15:49:24 +00:00
Kinsey Moore 55c9a46abd Stasis: Fix StasisStart/End order and missing events
This corrects several bugs that currently exist in the stasis
application code.

* After a masquerade, the resulting channels have channel topics that
  do not match their uniqueids
** Masquerades now swap channel topics appropriately
* StasisStart and StasisEnd messages are leaked to observer
  applications due to being published on channel topics
** StasisStart and StasisEnd publishing is now properly restricted
   to controlling apps via app topics
* Race conditions exist where StasisStart and StasisEnd messages due to
  a masquerade may be received out of order due to being published on
  different topics
** These messages are now published directly on the app topic so this
   is now a non-issue
* StasisEnds are sometimes missing when sent due to masquerades and
  bridge swaps into and out of Stasis()
** This was due to StasisEnd processing adjusting message-sent flags
   after Stasis() had already exited and Stasis() had been re-entered
** This was corrected by adjusting these flags prior to sending the
   message while the initial Stasis() application was still shutting
   down

Review: https://reviewboard.asterisk.org/r/4213/
ASTERISK-24537 #close
Reported by: Matt DiMeo
........

Merged revisions 429061 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-08 15:43:14 +00:00
Matthew Jordan 7fd1227202 res/res_monitor: Reset in/out sample counts on Monitor start
When repeatedly starting/stopping a Monitor on a channel, the accumulated
in/out sample counts are never reset to 0. This can cause inadvertent jumps
in the recordings, as the code in the channel core will determine incorrectly
that a jump in the recorded file position should occur. Setting the sample
counts to 0 simply reflects the initial state a Monitor should be in when it
is started, as this is the initial count that would be on the channels at that
time.

ASTERISK-24573 #close
Reported by: Nuno Borges
patches:
  24573.patch uploaded by Nuno Borges (License 6116)
........

Merged revisions 429031 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 429032 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429033 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-06 18:16:18 +00:00
Matthew Jordan 0321d00413 apps/app_meetme: Apply default values on initial load with no config file
When the app_meetme module is loaded without its configuration file, the
module settings aren't initialized. In particular, this impacts the use
of logging realtime members. This patch guarantees that we always set the
default module settings on initial load.

Review: https://reviewboard.asterisk.org/r/4242/

ASTERISK-24572 #close
Reported by: Nuno Borges
patches:
  24572.patch uploaded by Nuno Borges (License 6116)
........

Merged revisions 429027 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 429028 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429029 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-06 17:27:22 +00:00
George Joseph 67372d1f0a sorcery: Add additional observer capabilities.
Add new global, instance and wizard observers.
instance_created
wizard_registered
wizard_unregistered
instance_destroying
instance_loading
instance_loaded
wizard_mapped
object_type_registered
object_type_loading
object_type_loaded
wizard_loading
wizard_loaded

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4215/
........

Merged revisions 428999 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429000 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-05 17:06:42 +00:00
Matthew Jordan ffd928263f main/test: Fix compilation issue on 32-bit systems
On a 32-bit system, a type of intmax_t will result in a compilation warning
when formatted as a 'long int'. Use the format specifier of %jd (which was
what was used originally in manager.c) to format the JSON extracted integer
on both 32-/64-bit systems.
........

Merged revisions 428972 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428973 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-04 17:13:34 +00:00
Matthew Jordan 30c34062c3 main/test: Fix race condition between AMI topic and Test Suite topic
This patch fixes a race condition between the raising of test AMI events (which
drive many tests in the Asterisk Test Suite) and other AMI events. Prior to
this patch, the Stasis messages published to the test topic were not forwarded
to the AMI topic. Instead, the code in manager had a dedicated handler for test
messages that was independent of the topics forwarded to the AMI topic. This
results in no synchronization between the test messages and the rest of the
Stasis messages published out over AMI. In some test with very tight timing
constraints, this can result in out of order messages and spurious test
failures. Properly forwarding the Test Suite topic to the AMI topic ensures
that the messages are synchronized properly.

This patch does that, and moves the message handling to the Stasis definition
of the Test Suite message in test.c as well.

Review: https://reviewboard.asterisk.org/r/4221/
........

Merged revisions 428945 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-04 15:48:08 +00:00
Matthew Jordan a83b4ad1da tests/test_cel: Add test_cel_attended_transfer_bridges_link to racey tests
Despite failing less often, the ordering of the ATTENDEDTRANSFER event and the
BRIDGE_EXIT event for the Alice and David channels is not defined. This makes
the test still fail.
........

Merged revisions 428918 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428919 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-03 20:58:41 +00:00
Matthew Jordan e7c97d158f tests/test_cel: Fix CEL unit test failures caused by attended transfer changes
When the publication of attended transfer messages were pushed to another
thread, some subtle race conditions were introduced with the CEL unit tests.
This patch fixes one of them, and pushes the other to ASTERISK-22367, which
already exists to fix another bouncy CEL unit test.

In particular, this patch fixes the test_cel_attended_transfer_bridges_link
test, and defers the test_cel_attended_transfer_bridges_swap test to the
aforementioned JIRA issue.

ASTERISK-22367
........

Merged revisions 428891 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428892 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-03 19:49:17 +00:00
Matthew Jordan bda506c346 apps/app_voicemail: Fix crash with IMAP when streams are opened simultaneously
The UW IMAP library is instrinsically not thread-safe, and relies upon higher
level applications to guarantee thread safety. For the most part, this is
provided by the vms object, which provides locking for individual streams.
Unfortunately, this is not sufficient for calls to mail_open which create the
IMAP stream. mail_open can, on some systems, call into a UW IMAP specific
function for determining the address of a system based on a hostname,
ip_nametoaddr.

In the ip6_unix implementation of this function, static variables are used
to hold parsing buffers. This can cause a crash if multiple threads attempt
to convert a hostname to an address at the same time. Locking on a single
mail stream is not sufficient to prevent simultaneous access to these static
variables.

In the IMAP library, this function can be called from the mail_open and
imap_status functions. As the imap_status function is not used by
app_voicemail, locking on access to mail_open is sufficient to prevent
any mangling of the buffers.

Review: https://reviewboard.asterisk.org/r/4188/

ASTERISK-24516 #close
Reported by: David Duncan Ross Palmer
Tested by: David Duncan Ross Palmer
patches:
  ASTERISK-24516.diff uploaded by David Duncan Ross Palmer (License 6660)
........

Merged revisions 428863 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428864 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428865 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-03 16:45:08 +00:00
George Joseph 9a5442cf99 CHANGES: Add item for new 'pjsip show identif(y|ies) commands
Tested-by: George Joseph
........

Merged revisions 428836 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428837 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 21:53:14 +00:00
Matthew Jordan f1b4969a33 tests/test_stasis: Resolve compilation issues from Asterisk 12 merge
When merging the changes up stream in r428687, I missed the fact that the
signature for stasis_message_type_create was changed. This patch fixes
the compilation issues introduced by that merge.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428815 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 19:03:42 +00:00
Matthew Jordan 604c9c4990 pbx/pbx_loopback: Speed up switches by avoiding unneeded lookups
This patch makes a small rearrangement to only do dialplan lookups during
loopback switches if the pattern matches. Prior to this patch, the dialplan
lookups were always performed, even when the result would be discarded.
Dialplan lookups can be very costly if remote switches - like DUNDi - are
present. In those cases extension matching is sped up considerably, making
the issue of lost digits more manageable.

As collateral damage, 6 trailing spaces were killed.

Review: https://reviewboard.asterisk.org/r/4211

ASTERISK-24577 #close
Reported by: Birger Harzenetter
patches:
  ast-loopback.patch uploaded by Birger Harzenetter (License 5870)
........

Merged revisions 428787 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428788 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428789 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 17:05:59 +00:00
Joshua Colp a551851e5b res_pjsip_refer: Fix issue where native bridge may not occur upon completion of a transfer.
There are two methods within res_pjsip_refer for keeping track of the state of a transfer.
The first is a framehook which looks at frames passing by to determine the state. The second
subscribes to know when the channel joins a bridge. In the case when the channel joins the
bridge the framehook is *NOT* removed and this prevents the native RTP bridging technology
from getting used.

This change gets the channel and if it still exists remove the framehook.

Review: https://reviewboard.asterisk.org/r/4218/
........

Merged revisions 428760 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 12:20:58 +00:00
George Joseph a53efbb86c config: Create ast_variable_find_in_list()
Add
const char *ast_variable_find_in_list(const struct ast_variable *list,
   const char *variable);

ast_variable_find() requires a config category to search whereas
ast_variable_find_in_list() just needs the root list element which is
useful if you don't have a category.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4217/
........

Merged revisions 428733 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 00:38:08 +00:00
George Joseph 7472c661ca res_pjsip_endpoint_identifier_ip: Add 'show identify(ies)' cli commands
While troubleshooting other things I realized there were no pjsip cli
commands for identify.  This patch adds them.  It also also fixes a
reference leak when a 'show endpoint' displayed identifies and properly
sets the return code if load_module can't allocate a cli formatter structure.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4212/
........

Merged revisions 428725 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-02 00:30:12 +00:00
Matthew Jordan d79c68d3fb main/stasis: Allow subscriptions to use a threadpool for message delivery
Prior to this patch, all Stasis subscriptions would receive a dedicated
thread for servicing published messages. In contrast, prior to r400178
(see review https://reviewboard.asterisk.org/r/2881/), the subscriptions
shared a thread pool. It was discovered during some initial work on Stasis
that, for a low subscription count with high message throughput, the
threadpool was not as performant as simply having a dedicated thread per
subscriber.

For situations where a subscriber receives a substantial number of messages
and is always present, the model of having a dedicated thread per subscriber
makes sense. While we still have plenty of subscriptions that would follow
this model, e.g., AMI, CDRs, CEL, etc., there are plenty that also fall into
the following two categories:
* Large number of subscriptions, specifically those tied to endpoints/peers.
* Low number of messages. Some subscriptions exist specifically to coordinate
  a single message - the subscription is created, a message is published, the
  delivery is synchronized, and the subscription is destroyed.
In both of the latter two cases, creating a dedicated thread is wasteful (and
in the case of a large number of peers/endpoints, harmful). In those cases,
having shared delivery threads is far more performant.

This patch adds the ability of a subscriber to Stasis to choose whether or not
their messages are dispatched on a dedicated thread or on a threadpool. The
threadpool is configurable through stasis.conf.

Review: https://reviewboard.asterisk.org/r/4193

ASTERISK-24533 #close
Reported by: xrobau
Tested by: xrobau
........

Merged revisions 428681 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428687 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-01 17:57:12 +00:00
Joshua Colp 6e30ccd242 app_record: Fix bug where using the 'k' option and hanging up would trim 1/4 of a second of the recording.
The Record dialplan function trims 1/4 of a second from the end of recordings in case
they are terminated because of DTMF. When hanging up, however, you don't want this to happen.
This change makes it so on hangup this does not occur.

ASTERISK-24530 #close
Reported by: Ben Smithurst
patches:
 app_record_v2.diff submitted by Ben Smithurst (license 6529)

Review: https://reviewboard.asterisk.org/r/4201/
........

Merged revisions 428653 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428654 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-01 13:41:08 +00:00
Joshua Colp 0104fb0c60 channel: Extend size of buffer for codecs in "core show channeltype" CLI command.
The static buffer for codecs when invoking the "core show channeltype" CLI command
did not have enough room for all codecs. This has been extended so it does.

ASTERISK-24542 #close
Reported by: snuffy
patches:
 channeltype-tech.diff submitted by snuffy (license 5024)

Review: https://reviewboard.asterisk.org/r/4204/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428632 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-12-01 13:07:35 +00:00
Richard Mudgett 52a059caf5 test_channel_feature_hooks.c: Fix unit test for DTMF hooks.
Fix the failing /channels/features/test_features_channel_dtmf unit test.

DTMF emulation does not work without a stream of packets to prod the
emulation code.

Review: https://reviewboard.asterisk.org/r/4199/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428604 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-24 20:37:19 +00:00
Richard Mudgett 1583ea4832 DTMF hooks: Leaving channels need to push any collected digits into the bridge.
Any partially collected DTMF digits for a DTMF hook need to be pushed into
the bridge when a channel leaves the bridging system as if there were a
timeout.

Review: https://reviewboard.asterisk.org/r/4199/
........

Merged revisions 428601 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428602 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-24 20:31:08 +00:00
Richard Mudgett 7f4b222e07 manager: Fix could not extend string messages.
When shutting down Asterisk that has an active AMI connection, you get
several "failed to extend from %d to %d" messages because use of the
EVENT_FLAG_SHUTDOWN attempts to add all AMI permission strings to the
event.

* Created MAX_AUTH_PERM_STRING to use when creating stack based struct
ast_str variables used with the authority_to_str() and
user_authority_to_str() functions instead of a variety of magic numbers
that could be too small.

* Added a special check for EVENT_FLAG_SHUTDOWN to authority_to_str() so
it will not attempt to add all permission level strings.

Review: https://reviewboard.asterisk.org/r/4200/
........

Merged revisions 428570 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428571 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428572 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-21 19:09:13 +00:00
George Joseph 2846d23688 sorcery: Make is_object_field_registered handle field names that are regexes.
As a result of https://reviewboard.asterisk.org/r/3305, res_sorcery_realtime
was tossing database fields that didn't have an exact match to a sorcery
registered field.  This broke the ability to use regexes as field names which
manifested itself as a failure of res_pjsip_phoneprov_provider which uses
this capability.  It also broke handling of fields that start with '@' in
realtime but I don't think anyone noticed.

This patch does the following...
* Modifies ast_sorcery_fields_register to pre-compile the name regex.
* Modifies ast_sorcery_is_object_field_registered to test the regex if it
  exists instead of doing an exact strcmp.
* Modifies res_pjsip_phoneprov_provider with a few tweaks to get it to work
  with realtime.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4185/
........

Merged revisions 428543 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428544 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-21 17:45:13 +00:00
Matthew Jordan 4f26a7ea36 main/bridge_basic: Fix features regressions introduced by r428165
In r428165, two bugs were introduced:

* Prior to entering the features retry loop, the buffer that holds the
  collected digits is wiped. However, this inadvertently wipes out the
  first collected digit on the first pass through, which is obtained
  in ast_stream_and_wait. This caused all of the features tests to fail.
* If ast_app_dtget returns a hangup (-1), the loop would retry incorrectly.
  If we detect a hangup, we have to stop trying the feature.

This patch fixes both issues.

Review: https://reviewboard.asterisk.org/r/4196/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428505 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-21 02:16:55 +00:00
Mark Michelson 8e64f6a0af Fix error with mixed address family ACLs.
Prior to this commit, the address family of the first item in an ACL
was used to compare all incoming traffic. This could lead to traffic
of other IP address families bypassing ACLs.

ASTERISK-24469 #close

Reported by Matt Jordan
Patches:
	ASTERISK-24469-11.diff uploaded by Matt Jordan (License #6283)

AST-2014-012
........

Merged revisions 428402 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 428417 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428422 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 16:36:54 +00:00
Kevin Harwell e2181139c9 AST-2014-018 - func_db: DB Dialplan function permission escalation via AMI.
The DB dialplan function when executed from an external protocol (for instance
AMI), could result in a privilege escalation.

Asterisk now inhibits the DB function from being executed from an external
interface if the live_dangerously option is set to no.

ASTERISK-24534
Reported by: Gareth Palmer
patches: submitted by Gareth Palmer (license 5169)
........

Merged revisions 428331 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 428363 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428409 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 16:34:30 +00:00
Jonathan Rose ddc3f4846f PJSIP ACLs: Fix ACLs not loading on startup and apply/acl issues on contact
The biggest problem this patch fixes is that ACLs weren't previously being
loaded when the res_pjsip_acl module was loaded. Yikes. In addition, the
ACL options contact_permit and contact_acl were effectively interpreted as
contact_deny and this patch fixes that as well.

AST-1418 #close
Reported by: Thomas Thompson
Review: https://reviewboard.asterisk.org/r/4120/

ASTERISK-24531 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4171/
........

Merged revisions 428333 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428343 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 16:13:22 +00:00
Kevin Harwell 19ba0d1363 AST-2014-017 - app_confbridge: permission escalation/ class authorization.
Confbridge dialplan function permission escalation via AMI and inappropriate
class authorization on the ConfbridgeStartRecord action. The CONFBRIDGE dialplan
function when executed from an external protocol (for instance AMI), could
result in a privilege escalation. Also, the AMI action “ConfbridgeStartRecord”
could also be used to execute arbitrary system commands without first checking
for system access.

Asterisk now inhibits the CONFBRIDGE function from being executed from an
external interface if the live_dangerously option is set to no.  Also, the
“ConfbridgeStartRecord” AMI action is now only allowed to execute under a
user with system level access.

ASTERISK-24490
Reported by: Gareth Palmer
........

Merged revisions 428332 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428334 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428339 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 15:50:44 +00:00
Joshua Colp e7f16827cb AST-2014-016: Fix crash when receiving an in-dialog INVITE with Replaces in res_pjsip_refer.
The implementation of INVITE with Replaces in res_pjsip_refer did not expect them to
occur in-dialog. As a result it would incorrectly attempt to hang up a channel it
thought was under its control. In reality the channel would be under the control of
another thread. When the other thread accessed the channel it would be accessing freed
memory and could crash.

This change makes res_pjsip_refer not act on an in-dialog INVITE with Replaces.

ASTERISK-24528 #close
Reported by: Joshua Colp
........

Merged revisions 428304 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428305 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 14:55:45 +00:00
Joshua Colp aeb5f34ecc AST-2014-015: Fix race condition in chan_pjsip when sending responses after a CANCEL has been received.
Due to the serialized architecture of chan_pjsip there exists a race condition where a CANCEL may
be received and processed before responses (such as 180 Ringing, 183 Session Progress, and 200 OK)
are sent. Since the session is in an unexpected state PJSIP will assert when this is attempted.

This change makes it so that these responses are not sent on disconnected sessions.

ASTERISK-24471 #close
Reported by: yaron nahum
........

Merged revisions 428301 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428302 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-20 14:49:15 +00:00
Corey Farrell 8fb20cb05d stringfields: Fix bug in ast_string_fields_copy.
ast_string_fields_copy relies on the fact that
__ast_string_field_release_active never previously
zeroed pool->used, so keeping the existing pointer
was "ok".  Now that existing pools can be reset to
'empty', it is important to set each field to
__ast_string_field_empty after releasing the memory.

ASTERISK-24535 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4186/
........

Merged revisions 428272 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-19 19:31:13 +00:00
Richard Mudgett 524588c345 ast_str: Fix improper member access to struct ast_str members.
Accessing members of struct ast_str outside of the string manipulation API
routines is invalid since struct ast_str is supposed to be treated as
opaque.

Review: https://reviewboard.asterisk.org/r/4194/
........

Merged revisions 428244 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428245 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428246 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-19 17:13:29 +00:00
Joshua Colp a0d9eab389 res_pjsip_sdp_rtp: Add support for optimistic SRTP.
Optimistic SRTP is the ability to enable SRTP but not have it be
a fatal requirement. If SRTP can be used it will be, if not it won't be.
This gives you a better chance of using it without having your sessions
fail when it can't be.

Encrypt all the things!

Review: https://reviewboard.asterisk.org/r/3992/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428222 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-19 12:40:36 +00:00
Joshua Colp 87c2e9e238 res_pjsip_refer: Ensure Refer-To is NULL terminated and parse it as a URI.
There is no guarantee that when we get a Refer-To that it will be NULL terminated.
As the URI parsing function requires it to be we now NULL terminate it.

Additionally parsing the Refer-To as a 'To' header is needless and it can
simply be done as a URI. This also fixes a problem where certain Refer-To headers
would not be parsed as a 'To' header causing the REFER to fail.

ASTERISK-24508 #close
Reported by: Beppo Mazzucato

Review: https://reviewboard.asterisk.org/r/4187/
........

Merged revisions 428195 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-19 11:50:54 +00:00
Richard Mudgett 8648bc1f6f parking_tests.c: Add missing newline on a unit test message.
........

Merged revisions 428168 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428169 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-18 18:54:56 +00:00
Mark Michelson a1f1cdbd87 Allow for transferer to retry when dialing an invalid extension.
This allows for a configurable number of attempts for a transferer
to dial an extension to transfer the call to. For Asterisk 13, the
default values are such that upgrading between versions will not
cause a behaivour change. For trunk, though, the defaults will be
changed to be more user-friendly.

Review: https://reviewboard.asterisk.org/r/4167



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-17 16:51:16 +00:00
Corey Farrell e8286df19c chan_sip: Fix theoretical leak of p->refer.
If transmit_refer is called when p->refer is already allocated,
it leaks the previous allocation.  Updated code to always free
previous allocation during a new allocation.  Also instead of
checking if we have a previous allocation, always create a
clean record.

ASTERISK-15242 #close
Reported by: David Woolley
Review: https://reviewboard.asterisk.org/r/4160/
........

Merged revisions 428117 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428118 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428119 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-17 16:00:54 +00:00
Matthew Jordan 45f4fe6f1c apps/app_confbridge: Ensure 'normal' users hear message when last marked leaves
When r428077 was made for ASTERISK-24522, it failed to take into account users
who are neither wait_marked nor end_marked. These users are *also* supposed to
hear the 'leader has left the conference' message. Granted, this behaviour is
a bit odd; however, that is how it used to work... and behaviour changes are
not good.

This patch ensures that if there are any 'normal' users present when the last
marked user leaves the conference, the message will still be played to them.

Note that this regression was caught by the Asterisk Test Suite's
confbridge_nominal test, which has a quirky combination of users.
........

Merged revisions 428113 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428114 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428115 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-17 15:27:17 +00:00
Matthew Jordan c5ef48b861 Blocked revisions 428104
........
tests/test_cel: Fix CEL unit tests

This is a backport of the test_cel portion of r427870, which was not applied to
the 12 branch. This fixes the compilation issues with the CEL unit tests
introduced by the API changes needed to fix publication of blind transfer
messages.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428105 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-17 15:15:49 +00:00
Matthew Jordan 6d59f1546e app_confbridge: Don't play leader leaving prompt if no one will hear it
Consider the following:
- A marked user in a conference
- One or more end_marked only users in the conference

When the marked users leaves, we will be in the conf_state_multi_marked state.
This currently will traverse the users, kicking out any who have the end_marked
flags. When they are kicked, a full ast_bridge_remove is immediately called on
the channels. At this time, we also unilaterally set the need_prompt flag.

When the need_prompt flag is set, we then playback a sound to the bridge
informing everyone that the leader has left; however, no one is left in the
bridge. This causes some odd behaviour for the end_marked users - they are
stuck waiting for the bridge to be unlocked. This results in them waiting for
5 or 6 seconds of dead air before hearing that they've been kicked.

Unfortunately, we do have to keep the bridge locked while we're playing back
the 'leader-has-left' prompt. If there are any wait_marked users in the
conference, this behaviour can't be easily changed - but we do make the case
of the end_marked users better with this patch.

Review: https://reviewboard.asterisk.org/r/4184/

ASTERISK-24522 #close
Reported by: Matt Jordan
........

Merged revisions 428077 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 428078 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-17 03:07:07 +00:00
Joshua Colp b902694840 chan_pjsip: Remove AOR check when dialing and one is specified.
The AOR value may contain the name of an AOR or a full SIP URI.
Checking if the AOR exists can't be done as a result of this.
........

Merged revisions 428051 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-16 21:12:27 +00:00
Joshua Colp 62d33a6696 chan_pjsip: Add additional log message when an AOR is specified when dialing and it does not exist.
ASTERISK-24499 #close
Reported by: Rusty Newton
........

Merged revisions 428007 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@428008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-15 21:35:49 +00:00
Joshua Colp 99414651e4 chan_motif / chan_pjsip: Fix incorrect "No such module" messages when reloading.
For chan_motif the direct return value of the underlying config options framework
was passed back. This can relay various states which the module loader would not
interpet as success. It has been changed so only on errors will it report back
an error.

For chan_pjsip the code implemented a dummy reload function which always
returned an error. This has been removed as all configuration is held within
res_pjsip instead.

ASTERISK-23651 #close
Reported by: Rusty Newton
........

Merged revisions 427981 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427982 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-15 19:00:40 +00:00
Joshua Colp cbba061f13 res_pjsip: Enforce requirements for session timer minimum expiration period and normal expiration period.
This change enforces the requirements in PJSIP for session timer configuration. The minimum
expiration period must be 90 seconds or higher and the normal expiration period can not
be lower than the minimum expiration period. If either of these were done the code would
assert at session setup time.

ASTERISK-24336 #close
Reported by: Leon Rowland
........

Merged revisions 427978 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427979 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-15 18:28:33 +00:00
Matthew Jordan 5e09dd3c75 cel/cel_odbc: Provide microsecond precision in 'eventtime' column when possible
This patch adds microsecond precision when inserting a CEL record into a table
with an "eventtime" column of type timestamp, instead of second precision. The
documentation (configs/cel_odbc.conf.sample) was already saying that the
eventtime column included microseconds precision, but that was not the case.

Also, without this patch, if you had a table with an "eventtime" column of
type varchar, you had millisecond precision. With this patch, you also get
microsecond precision in this case.

Review: https://reviewboard.asterisk.org/r/3980

ASTERISK-24283 #close
Reported by: Etienne Lessard
patches:
  cel_odbc_time_precision.patch uploaded by Etienne Lessard (License 6394)
........

Merged revisions 427952 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427953 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427954 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-15 16:56:57 +00:00
Matthew Jordan 6b7a2dc7b9 tests/test_cel: Unlock bridge on off nominal paths
If the test fails due to memory allocation errors, we may as well attempt to
unlock the bridge on the way out.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 18:54:20 +00:00
Jonathan Rose 8c61b4890b Documentation: Revise explanation of cdr.conf option 'Unanswered'
ASTERISK-24279 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4109/
........

Merged revisions 427901 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427902 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 17:45:53 +00:00
Scott Griepentrog 674185ec14 stun: correct attribute string padding to match rfc
When sending the USERNAME attribute in an RTP STUN
response, the implementation in append_attr_string
passed the actual length, instead of padding it up
to a multiple of four bytes as required by the RFC
3489.  This change adds separate variables for the
string and padded attributed lengths, and performs
padding correctly.

Reported by: Thomas Arimont
Review: https://reviewboard.asterisk.org/r/4139/
........

Merged revisions 427874 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427875 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427876 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 15:51:17 +00:00
Mark Michelson 1536b0ecb6 Fix race condition that could result in ARI transfer messages not being sent.
From reviewboard:

"During blind transfer testing, it was noticed that tests were failing
occasionally because the ARI blind transfer event was not being sent.
After investigating, I detected a race condition in the blind transfer
code. When blind transferring a single channel, the actual transfer
operation (i.e. removing the transferee from the bridge and directing
them to the proper dialplan location) is queued onto the transferee
bridge channel. After queuing the transfer operation, the blind transfer
Stasis message is published. At the time of publication, snapshots of
the channels and bridge involved are created. The ARI subscriber to the
blind transfer Stasis message then attempts to determine if the bridge
or any of the involved channels are subscribed to by ARI applications.
If so, then the blind transfer message is sent to the applications. The
way that the ARI blind transfer message handler works is to first see
if the transferer channel is subscribed to. If not, then iterate over
all the channel IDs in the bridge snapshot and determine if any of
those are subscribed to. In the test we were running, the lone
transferee channel was subscribed to, so an ARI event should have been
sent to our application. Occasionally, though, the bridge snapshot did
not have any channels IDs on it at all. Why?

The problem is that since the blind transfer operation is handled by a
separate thread, it is possible that the transfer will have completed and
the channels removed from the bridge before we publish the blind transfer
Stasis message. Since the blind transfer has completed, the bridge on
which the transfer occurred no longer has any channels on it, so the
resulting bridge snapshot has no channels on it. Through investigation of
the code, I found that attended transfers can have this issue too for the
case where a transferee is transferred to an application."

The fix employed here is to decouple the creation of snapshots for the transfer
messages from the publication of the transfer messages. This way, snapshots
can be created to reflect what they are at the time of the transfer operation.

Review: https://reviewboard.asterisk.org/r/4135
........

Merged revisions 427848 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427870 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 15:24:48 +00:00
Joshua Colp 9067e6faa4 app_confbridge: Play "leader has left" sound even when musiconhold is enabled.
Currently if the leader of a conference bridge leaves any participant
that has musiconhold enabled will not hear the "leader has left" sound.
This is because musiconhold is started and THEN the sound is played.

This change makes it so that the sound is played and THEN musiconhold
is started. This provides a better experience for users as they may not
have known previously why they went back to musiconhold.

Review: https://reviewboard.asterisk.org/r/4177/
........

Merged revisions 427844 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427845 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427846 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 14:56:23 +00:00
Mark Michelson 77c57f2b1a Fix race condition where duplicated requests may be handled by multiple threads.
This is the Asterisk 13 version of the patch. The main difference is in the pubsub
code since it was completely refactored between Asterisk 12 and 13.

Review: https://reviewboard.asterisk.org/r/4175



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427841 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-14 14:24:02 +00:00
Kevin Harwell 721ae89155 res_pjsip_exten_state: PJSIPShowSubscriptionsInbound causes crash
When using a non-default sorcery wizard (in this instance realtime) for
outbound registrations and after adding in an appropriate call to
ast_sorcery_apply_config() (since it is missing) Asterisk will crash after
a stack overflow occurs due to the code infinitely recursing.  The fix entails
removing the outbound registration state dependency from the outbound
registration sorcery object and instead keeping an in memory container that
can be used to lookup the state when needed.

ASTERISK-24514
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4164/
........

Merged revisions 427814 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427815 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-13 22:03:00 +00:00
Kinsey Moore 5013659972 Stasis: Fix StasisEnd message ordering
This change corrects message ordering in cases where a channel-related
message can be received after a Stasis/ARI application has received the
StasisEnd message. The StasisEnd message was being passed to
applications directly without waiting for the channel topic to empty.

As a result of this fix, other bugs were also identified and fixed:
* StasisStart messages were also being sent directly to apps and are
  now routed through the stasis message bus properly
* Masquerade monitor datastores were being removed at the incorrect
  time in some cases and were causing StasisEnd messages to not be sent
* General refactoring where necessary for the above
* Unsubscription on StasisEnd timing changes to prevent additional
  messages from following the StasisEnd when they shouldn't

A channel sanitization function pointer was added to reduce processing
and AO2 lookups.

Review: https://reviewboard.asterisk.org/r/4163/
ASTERISK-24501 #close
Reported by: Matt Jordan
........

Merged revisions 427788 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427789 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-13 15:44:28 +00:00
Matthew Jordan 153cfb4c2d main/rtp_engine: Fix crash when processing more than one RTCP report info block
Asterisk - in res_rtp_asterisk - only understands a single RTCP report info
block. When the RTCP information was refactored in the RTP Engine to be pushed
over the Stasis message bus, I put in the hooks into the engine to handle
multiple RTCP report info blocks, in the hope that a future RTP implementation
would be able to provide that data. Unfortunately, res_rtp_asterisk has a
tendency to "lie":
(1) It will send RTCP reports with a reception_report_count greater than 1
    (which is pulled directly from the RTCP packet itself, so that part is
    correct)
(2) It will only provide a single report block

When the rtp_engine goes to convert this to a JSON blob, hilarity ensues as it
looks for a report block that doesn't exist.

This patch updates the rtp_engine to be a bit more skeptical about what it is
presented with. While this could also be fixed in res_rtp_asterisk, this patch
prefers to fix it in the engine for two reasons:
(1) The engine is designed to work with multiple RTP implementation, and hence
    having it be more robust is a good thing (tm)
(2) res_rtp_asterisk's handling of RTCP information is "fun". It should report
    the correct reception_report_count; ideally it should also be giving us all
    of the blocks - but it is *definitely* not designed to do that. Going down
    that road is a non-trivial effort.

Review: https://reviewboard.asterisk.org/r/4158/

ASTERISK-24489 #close
Reported by: Gregory Malsack
Tested by: Gregory Malsack

ASTERISK-24498 #close
Reported by: Beppo Mazzucato
Tested by: Beppo Maazucato
........

Merged revisions 427762 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427763 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-13 00:00:40 +00:00
Corey Farrell 00866a640d Fix leak in AMI Action Bridge
Add missing reference cleanup for newly created bridge.

ASTERISK-24281
Reported by: Stefan Engström
Review: https://reviewboard.asterisk.org/r/4154/
........

Merged revisions 427736 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427737 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-12 20:39:26 +00:00
Joshua Colp 5ee03e74a8 pbx: Fix off-nominal case where a freed extension may still be used.
If during the operation of adding an extension a priority is added but
fails it is possible for the extension to be freed but still exist in
the PBX core. If this occurs subsequent lookups may try to access the
extension and end up in freed memory.

This change removes the extension from the PBX core when the priority
addition fails and then frees the extension.

ASTERISK-24444 #close
Reported by: Leandro Dardini

Review: https://reviewboard.asterisk.org/r/4162/
........

Merged revisions 427709 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427710 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-12 16:12:32 +00:00
Corey Farrell 5ca2b16721 Fix compiler error when using ./configure --enable-dev-mode --enable-coverage
When DONT_OPTIMIZE is enabled with dev-mode, it causes a shadow compilation
to be done with output to /dev/null.  This can cause errors with coverage
when GCC attempts to write to /dev/null.gcno.  This change disables
coverage for the shadow compilation.

ASTERISK-24502 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4151/
........

Merged revisions 427682 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427683 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-12 13:46:25 +00:00
Corey Farrell 8ab323fead manager: Fix HTTP connection reference leaks.
Fix reference leak that happens if (session && !blastaway).

ASTERISK-24505 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4153/
........

Merged revisions 427641 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427642 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427643 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-09 08:00:19 +00:00
Matthew Jordan 468ccd1b66 channels/chan_mgcp: Fix regression which causes gateways to be skipped
In r227276, a while loop was turned into a for loop. Unfortunately, a portion
of the while loop was left in the code such that, when a static gateway is
encountered in the list of MGCP gateways, the next gateway would be skipped.
At best, we would simply flip past a gateway; at worst, this could lead to a
crash.

ASTERISK-24500 #close
Reported by: Xavier Hienne
patches:
  chan_mgcp.patch uploaded by Xavier Hienne (License 6657)
........

Merged revisions 427613 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427614 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-09 00:38:03 +00:00
Matthew Jordan f10a8475b5 addons/chan_mobile: Increase buffer size of UCS2 encoded SMS messages
When UCS2 character encoding is used, one symbol in national language can be
expanded to 4 bytes. The current buffer used for receiving message in
do_monitor_phone is 256 bytes, which is not large enough for incoming messages.

For example:
* AT+CMGR phone response prefix
  '+CMGR: "REC UNREAD","+7**********",,"14/10/29,13:31:39+12"\r\n' - 60 bytes
* SMS body with UCS2 encoding (max) - 280 bytes
* AT+CMGR phone response suffix '\r\n\r\nOK\r\n' - 8 bytes
* Terminating null character - 1 byte

This results in a needed buffer size of 349 bytes. Hence, this patch opts for a
350 byte buffer.

ASTERISK-24468 #close
Reported by: Dmitriy Bubnov
patches:
  chan_mobile-1_8.diff uploaded by Dmitriy Bubnov (License 6651)
  chan_mobile-trunk.diff uploaded by Dmitry Bubnov (License 6651)
........

Merged revisions 427607 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427610 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427611 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-09 00:25:47 +00:00
Matthew Jordan ffe194fd78 app_voicemail: Fix enhancement that allowed multiple recipients in To: header
An issue existed in r420577, which added multiple recipients to voicemail
emails. The patch, when looking at the intended recipients, looked ahead for
the '|' character inside a while loop which already had pulled out the
appropriate field parsing on the '|' character. This would cause it to skip
the recipients.

This patch fixes it such that it relies completely on the while loop to parse
through the e-mail fields.

Note that the original author of the patch looked at this fix and approved it.

ASTERISK-24250 #close
Reported by: abelbeck
patches:
  voicemail-420577-to-comma-fix.diff uploaded by abelbeck (License 5903)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-09 00:14:31 +00:00
Matthew Jordan 266c022a45 bridge_native_rtp: Fix T.38 issues with remote bridges
After r425242 the fax/sip/directmedia_reinvite_t38 test started failing due to
the surviving channel not being re-INVITEd back from T.38 to audio. This patch
fixes that bug - a deeper explanation of what happened follows.

When two RTP channels are in a native bridge, the bridging layer will
investigate each via the get_rtp_info glue callback. This callback returns the
native bridge preference of the channel *at that moment in time* (that part is
key). At different points during the bridging, the native bridging layer will
inform the RTP capable channels of the status of the bridge via the update_peer
glue callback.

In a T.38 scenario with audio direct media, the sequence of events will often
look like the following:
 * SIP/A and SIP/B both have audio and enter a native bridge.
 * Asterisk re-INVITEs audio between SIP/A and SIP/B directly (via an
   update_peer callback).
 * SIP/A sends a re-INVITE to T.38, which causes Asterisk to send a re-INVITE
   to T.38 to SIP/B. Assuming everyone 200 OKs the process, the UDPTL stack
   receives UDPTL packets in Asterisk from both endpoints. From the perspective
   of the channels, we are now in a local bridge for T.38, even though we are
   technically still in a remote bridge in bridge_native_rtp. (YAY!)
 * When one side hangs up, bridge_native_rtp is told to stop bridging. It then
   re-evaluates the channels and asks them how they are bridged - and since
   T.38 is enabled, they reply with a Local bridge (which is correct), but is
   wrong because the audio portion is still technically in a remote bridge.
 * Asterisk releases the surviving channel, whose audio is *not* re-INVITED
   back to Asterisk as bridge_native_rtp incorrectly assumes that it was in a
   local bridge.

Ironically, prior to r425242, this used to work mostly due to a fluke in the
bridging layer.

The purpose of the get_rtp_info callback shouldn't be modified: it should tell
the bridging layer what kind of bridge the channel prefers at that moment in
time. If you have T.38 enabled, that *must* be a local bridge, as the UDPTPL
stack must be in the media path. As such, this patch does not modify that
part of the code.

However, we have to tell the channels to re-evaluate themselves when they come
out of a native bridge, since we can no longer trust the get_rtp_info callbacks
when the native bridge is being stopped. Something else may have changed in the
channels, and they may now be lying to us. As such, this patch makes it so that
we unilaterally tell the channels that they are no longer bridged via the
update_peer callback. This is actually what the channels expect anyway: code in
both chan_sip and chan_pjsip's callbacks look at the T.38 state and - if they
were in T.38 - send a re-INVITE to get the audio back to Asterisk.

Review: https://reviewboard.asterisk.org/r/4157/
........

Merged revisions 427582 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427583 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-09 00:03:52 +00:00
Corey Farrell a6bfa0d20a chan_console: Fix reference leaks to pvt.
Fix a bunch of calls to get_active_pvt
where the reference is never released.

ASTERISK-24504 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4152/
........

Merged revisions 427554 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427555 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427557 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-08 18:17:13 +00:00
Richard Mudgett a2d6e15af8 app_agent_pool: Made agent alert interruptable by DTMF.
Made agent able to interrupt the alerting beep playback with DTMF.  Any
digit can interrupt if the call does not need to be acknowledged.  Only
the first digit of the acknowledgement can interrupt if the call needs to
be acknowledged.  The agent interrupting the alerting playback builds on
the ASTERISK-24447 patch because it knows what digit interrupted the
playback and needs to be able to pass that digit to the DTMF hook digit
collection code.

ASTERISK-24257 #close
Reported by: Steve Pitts

Review: https://reviewboard.asterisk.org/r/4123/
........

Merged revisions 427508 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427512 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 19:22:22 +00:00
Richard Mudgett 2878554bcc Bridge DTMF hooks: Made audio pass from the bridge while waiting for more matching digits.
* Made collecting DTMF digits for the DTMF feature hooks pass frames from
the bridge.

* Made collecting DTMF digits possible by other bridge hooks if there is a
need.

ASTERISK-24447 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4123/
........

Merged revisions 427493 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427494 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 19:03:46 +00:00
Joshua Colp 248c592292 res_pjsip: Ensure in-dialog responses have an endpoint associated.
When handling incoming messages we determine if it is associated with
a dialog. If so we use that to determine what serializer and endpoint
to use for the message. Previously this would pass the endpoint to the
endpoint lookup module to actually place the endpoint completely on the
message. For in-dialog responses, however, this did not occur as
dialog processing took over and the endpoint lookup did not occur.

This change just places the endpoint in the expected spot immediately
instead of relying on the endpoint lookup module. In-dialog responses
thus have the expected endpoint.

AST-1459 #close

Review: https://reviewboard.asterisk.org/r/4146/
........

Merged revisions 427490 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427491 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 18:20:46 +00:00
Corey Farrell f2d43e7e07 main/file.c: fix possible extra ast_module_unref to format modules.
fn_wrapper only adds a reference to the format's module if the file
was able to be opened.  If not this causes an unmatched
ast_module_unref in filestream_destructor.  Move ast_module_ref to
get_stream.

ASTERISK-24492 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4149/
........

Merged revisions 427464 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427465 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427466 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 12:13:56 +00:00
Corey Farrell 1c255e711e res_hep: fix major leak that occurs when config is missing or enabled=no.
Add missing unreference in hepv3_send_packet.

ASTERISK-24491 #close
Reported by: Zane Conkle
Tested by: Zane Conkle
Review: https://reviewboard.asterisk.org/r/4150/
........

Merged revisions 427400 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427405 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 09:23:32 +00:00
Corey Farrell 433366ab90 Fix unintential memory retention in stringfields.
* Fix missing / unreachable calls to __ast_string_field_release_active.
* Reset pool->used to zero when the current pool->active reaches zero.

ASTERISK-24307 #close
Reported by: Etienne Lessard
Tested by: ibercom, Etienne Lessard
Review: https://reviewboard.asterisk.org/r/4114/
........

Merged revisions 427380 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 427381 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427382 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427384 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 09:17:50 +00:00
George Joseph c056506d84 test_strings: Remove string tests that exercise asserts.
Since unit tests are run with DO_CRASH, those tests were causing
the test to fail.

Tested-by: George Joseph
........

Merged revisions 427354 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427355 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-06 02:37:42 +00:00
Mark Michelson 27dc7e47d7 Make the disable_tcp_switch PJSIP system object enabled by default.
Testing has shown repeatedly that PJSIP's default behavior of switching
automatically to TCP for large messages can cause issues. The most common
issues are that devices that we are communicating with do not handle the
switch to TCP gracefully, thus causing situations such as broken calls or
broken subscriptions. Now, in order to have this behavior happen, you must
opt into it. The sample file has been updated to warn that enabling the
TCP switch behavior may cause issues for you, so use at your own risk.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-05 19:52:26 +00:00
Joshua Colp 0d0131bf34 res_pjsip_multihomed: Add logging during startup to aid debugging if local DNS is misbehaving.
This change adds a bit of logging so if the local DNS is misbehaving it is easier
to track down what is going on and where Asterisk may be hanging.

ASTERISK-24438 #close
Reported by: Melissa Shepherd

Review: https://reviewboard.asterisk.org/r/4148/
........

Merged revisions 427300 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-05 12:18:05 +00:00
George Joseph 9d1b3ec22a config: Make text_file_save and 'dialplan save' escape semicolons in values.
When a config file is read, an unescaped semicolon signals comments which are
stripped from the value before it's stored.  Escaped semicolons are then
unescaped and become part of the value.  Both of these behaviors are normal
and expected.  When the config is serialized either by 'dialplan save' or
AMI/UpdateConfig however, the now unescaped semicolons are written as-is.
If you actually reload the file just saved, the unescaped semicolons are
now treated as start of comments.

Since true comments are stripped on read, any semicolons in
ast_variable.value must have been escaped originally.  This patch
re-escapes semicolons in ast_variable.values before they're written to
file either by 'dialplan save' or config/ast_config_text_file_save which
is called by AMI/UpdateConfig. I also fixed a few pre-existing formatting
issues nearby in pbx_config.c

Tested-by: George Joseph
ASTERISK-20127 #close

Review: https://reviewboard.asterisk.org/r/4132/
........

Merged revisions 427275 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-05 00:15:48 +00:00
George Joseph e5e29897fa config: BUG: Restore ability for non-templ to be used as base objs in config.
My recent refactor of config.c accidentally removed the capability for an
object to inherit from a non-template object.

This patch restores the capability to inherit from both template and
non-template objects.

Tested-by: George Joseph
Reported-by: Scott Griepentrog
ASTERISK-24487 #close

Review: https://reviewboard.asterisk.org/r/4147/
........

Merged revisions 427227 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427228 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-04 20:48:18 +00:00
Corey Farrell 06beefd20a func_talkdetect: Fix stasis message leak in audiohook callback.
ASTERISK-24482 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4142/
........

Merged revisions 427203 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427204 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-04 19:44:59 +00:00
Corey Farrell 3e29fa3686 res_http_websockets: Fix extra unref of module
In websocket_add_protocol_internal is used to add the "echo"
protocol, but ast_websocket_remove_protocol is used to remove
it.  This causes an extra call to ast_module_unref.

ASTERISK-24480 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4140/
........

Merged revisions 427200 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427201 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-04 19:32:21 +00:00
Corey Farrell ac48e34b87 Fix crash caused by merge error on review 4138
When merging from 12 to 13 there were conflicts,
I mistakenly had the loop run ast_closestream(others[0])
when it should be ast_closestream(others[x]).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427181 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-04 14:09:43 +00:00
Richard Mudgett b586e7f0b2 res_pjsip: Add disable_tcp_switch option.
When a packet exceeds the MTU, pjproject will switch from UDP to TCP.  In
some circumstances (on some networks), this can cause some issues with
messages not getting sent to the correct destination - and can also cause
connections to get dropped due to quirks in pjproject deciding to
terminate TCP connections with no messages.

While fixing the routing/messaging issues is important, having a
configuration option in Asterisk that tells pjproject to not switch over
to TCP would be useful.  That way, if some glitch is discovered on some
other network/site, we can at least disable the behavior until a fix is
put into place.

AFS-197 #close

Review: https://reviewboard.asterisk.org/r/4137/
........

Merged revisions 427129 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427130 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-03 18:15:20 +00:00
Corey Farrell 5bec46e6c8 Fix compile error caused by review 4138
There is no procedure called ast_closeframe, fix code to use
ast_closestream.

Reported By: Matt Jordan
........

Merged revisions 427087 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427088 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427089 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-03 02:34:13 +00:00
Corey Farrell 5f17490f4d Fix ast_writestream leaks
Fix cleanup in __ast_play_and_record where others[x] may be leaked.
This was caught where prepend != NULL && outmsg != NULL, once
realfile[x] == NULL any further others[x] would be leaked. A cleanup
block was also added for prepend != NULL && outmsg == NULL.

11+: Fix leak of ast_writestream recording_fs in
app_voicemail:leave_voicemail.

ASTERISK-24476 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4138/
........

Merged revisions 427023 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 427024 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427025 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427026 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-02 08:12:06 +00:00
Corey Farrell 54460c74e4 func_jitterbuffer: fix frame leaks.
Fix code paths where it is possible for frames to leak.
Fix uninitialized variable in jb_get_fixed and jb_get_adaptive.

ASTERISK-22409 #related
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4128/
........

Merged revisions 427019 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 427020 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427021 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-02 07:39:36 +00:00
Matthew Jordan d5309929be res/res_stasis: Fix crash on module unload while performing operation
When the res_stasis module is unloaded, it will dispose of the apps_registry
container. This is a problem if an ARI operation is in flight that attempts
to use the registry, as the shutdown occurs in a separate thread. This patch
adds some sanity checks to the various routines that access the registry which
cause the operations to fail if the apps_registry does not exist.

Crash caught by the Asterisk Test Suite.
........

Merged revisions 426995 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426996 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-11-02 01:01:32 +00:00
Tzafrir Cohen beb58e48c3 install init.d files on GNU/kFreeBSD
Review: https://reviewboard.asterisk.org/r/4118/
........

Merged revisions 426926 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426927 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426933 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426934 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-31 16:50:53 +00:00
Scott Griepentrog b3b93a7c15 pjsip: clarify tls cert and key file usage
A question arose as to whether a .pem file
could be provided in place of the .crt and
.key files in a PJSIP TLS configuration. I
tested this and discovered that although a
cert will be read from the pem file, a key
will not, and thus the priv_key_file entry
is still required. This update to the fine
documentation clarifies the option usage.

AST-1448 #close
Review: https://reviewboard.asterisk.org/r/4129/
Reported by: John Bigelow
........

Merged revisions 426928 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426930 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-31 16:40:17 +00:00
Scott Griepentrog b4ee155c62 pjsip: Handle outbound unregister correctly
This updates the status of the outbound registration
to reflect when it has been unregistered.  Since the
registration is unregistered but is not stopped, the
registration schedule remains active as before.  The
patch also updates the documentation of both the AMI
and CLI commands.

ASTERISK-24411 #close
Review: https://reviewboard.asterisk.org/r/4119/
Reported by: John Bigelow
patches:
  unregister-patch1.txt uploaded by John Bigelow (License 5091)
........

Merged revisions 426923 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-31 16:21:57 +00:00
Matthew Jordan f6809b01df channels/sip/reqresp_parser: Fix unit tests for r426594
When r426594 was made, it did not take into account a unit test that verified
that the function properly populated the unsupported buffer. The function
would previously memset the buffer if it detected it had any contents; since
this function can now be called iteratively on successive headers, the unit
tests would now fail. This patch updates the unit tests to reset the buffer
themselves between successive calls, and updates the documentation of the
function to note that this is now required.
........

Merged revisions 426858 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426860 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426863 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426865 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-31 03:26:00 +00:00
Corey Farrell b2320497f8 REF_DEBUG: Install refcounter.py to $(ASTDATADIR)/scripts
This change ensures refcounter.py is installed to a place where it
can be found by the Asterisk testsuite if REF_DEBUG is enabled.

ASTERISK-24432 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4094/
........

Merged revisions 426830 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426831 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426832 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426833 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-31 03:08:23 +00:00
Corey Farrell 7bd256b711 app_queue: fix a couple leaks to struct call_queue in set_member_value
set_member_value has a couple leaks to references in the variable q
found through testsuite tests/queues/set_penalty.  Also remove the
REF_DEBUG_ONLY_QUEUES compiler declaration, this is no longer possible
with the updated REF_DEBUG code.

ASTERISK-24466 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4125/
........

Merged revisions 426805 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426806 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426807 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 23:55:34 +00:00
Corey Farrell d51169cd36 audiohooks: Clean references to formats
Cleanup references to in_translate[x].format and
out_translate[x].format in ast_audiohook_detach_list.

ASTERISK-24465 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4124/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 23:44:27 +00:00
Kevin Harwell c3b1d0df0d res_pjsip_exten_state: PJSIPShowSubscriptionsInbound causes crash
Currently, it is possible for some subscriptions to get into a NULL state. When
this occurs and the PJSIPShowSubscriptionsInbound ami action is issued and a
device is subscribed for extension state then the associated subscription state
object can't be located.  The code then attempts to dereference a NULL object.
Added a NULL check to avoid the problem.

Reported by: John Bigelow
........

Merged revisions 426779 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426780 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 21:13:30 +00:00
Kevin Harwell fed9d0deb0 res_pjsip: incorrect qualify statistics after disabling for contact
When removing the qualify_frequency from an AoR or a contact the statistics
shown when issuing "pjsip show aors" from the CLI are incorrect. This patch
deletes the contact's status object from sorcery, disassociating it from the
contact, if the qualify_freqency is removed from configuration.

ASTERISK-24462 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4116/
........

Merged revisions 426755 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426757 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 17:17:27 +00:00
Walter Doekes 3f31b73f54 app_voicemail: Fix unchecked bounds of myArray in IMAP_STORAGE.
In update_messages_by_imapuser(), messages were appended to a finite
array which resulted in a crash when an IMAP mailbox contained more
than 256 entries. This memory is now dynamically increased as needed.

Observe that this patch adds a bunch of XXX's to questionable code. See
the review (url below) for more information.

ASTERISK-24190 #close
Reported by: Nick Adams
Tested by: Nick Adams

Review: https://reviewboard.asterisk.org/r/4126/
........

Merged revisions 426691 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426692 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426696 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 09:20:28 +00:00
Igor Goncharovskiy 934ab9d1b8 Add additional checks for NULL pointers to fix several crashes reported.
ASTERISK-24304 #close
Reported by: dhanapathy sathya
........

Merged revisions 426666 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426667 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426668 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 06:09:27 +00:00
Matthew Jordan 906c7f4b97 channels/chan_sip: Add improved support for 4xx error codes
This patch adds support for 414, 493, 479, and a stray 400 response in REGISTER
response handling. This helps interoperability in a number of scenarios.

Review: https://reviewboard.asterisk.org/r/3437

patches:
  rb3437.patch uploaded by oej (License 5267)
........

Merged revisions 426599 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426600 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426601 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426602 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 01:59:02 +00:00
Matthew Jordan ab07cf71f8 channels/chan_sip: Support mutltiple Supported and Required headers
A SIP request may contain multiple Supported: and Required: headers. Currently,
chan_sip only parses the first Supported/Required header it finds. This patch
adds support for multiple Supported/Required headers for INVITE requests.

Review: https://reviewboard.asterisk.org/r/2478

ASTERISK-21721 #close
Reported by: Olle Johansson
patches:
  rb2478.patch uploaded by oej (License 5267)
........

Merged revisions 426594 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426595 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426596 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-30 01:47:25 +00:00
Tzafrir Cohen b1acfd36fd Fix building chan_phone on big endian systems
A left over from the formats conversion (Corey Farrell).

ASTERISK-24458 #close
Review: https://reviewboard.asterisk.org/r/4117/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426570 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-29 10:33:14 +00:00
Richard Mudgett 1ba42a4d8e bridge_builtin_features: Add missing channel locks around ast_get_chan_features_general_config().
The feature_automonitor() and feature_automixmonitor() functions were not
locking the channel around ast_get_chan_features_general_config().
Accessing the channel datastore list without the channel locked is a good
way to corrupt the list or follow the pointer chain into oblivion.
........

Merged revisions 426531 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 21:26:20 +00:00
Corey Farrell 0ca681a414 res_fax: Resolve T38 gateway frame leak.
When frames are translated by a fax gateway they need to be freed.  The
existing call to ast_frfree was unreachable.  This change reorganizes
fax_gateway_framehook to ensure that ast_frfree is called when needed.

ASTERISK-24457 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4115/
........

Merged revisions 426527 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426528 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 21:05:13 +00:00
Corey Farrell a256324fcf manager: Unsubscribe from acl_change_sub at shutdown.
ASTERISK-24453 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4110/
........

Merged revisions 426524 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426525 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 20:42:42 +00:00
Malcolm Davenport ed07535b1c ASTERISK-23512, correct inaccurate comment in manager.conf.sample
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426459 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 18:09:03 +00:00
Matthew Jordan 294ff83152 main/bridge: Destroy features struct on off nominal path during bridge impart
When a channel is imparted to a bridge, the invocation of the function may
provide an ast_bridge_features struct. Upon passing this to ast_bridge_impart,
the caller must assume that ownership has passed to the function, as in all
paths the function destroys the struct prior to returning (as its purpose is
to configure the behavior of the channel while in the bridge). On one off
nominal path - where the channel already has a PBX thread - the struct was not
being destroyed.

This patch fixes that glitch.

ASTERISK-24437 #close
Reported by: Scott Griepentrog
........

Merged revisions 426431 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 16:40:59 +00:00
Matthew Jordan 221dcb1335 main/manager: Fix typo in AMI event documentation of "OriginateResponse"
The parameter name is "Response", not "Resonse".

ASTERISK-24430 #close
Reported by: Dafi Ni
........

Merged revisions 426366 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426367 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 14:59:31 +00:00
Malcolm Davenport 0bbb351655 ASTERISK-24323, fix bug in documentation of AGI STREAM FILE CONTROL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426362 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 14:56:31 +00:00
Malcolm Davenport 1ec27418da ASTERISK-24419, fix incorrect syntax for setting language in extensions.conf.sample
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426294 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 13:12:43 +00:00
Corey Farrell 688edd55c3 app_queue: Cleanup ao2_iterator
Clean ao2_iterator, resolving reference leak to queue members.

ASTERISK-24454 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4111/
........

Merged revisions 426255 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426260 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426266 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 11:20:21 +00:00
Corey Farrell a113a7d2ea func_cdr: Fix CDR_PROP payload leak
Remove duplicate allocation of payload, preventing leak.

ASTERISK-24455 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4113/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-28 11:11:13 +00:00
Sean Bright 88d9d3f1fc configure: Add autoconf check for libopus.
Because opus transcoding support cannot be included in the standard Asterisk
distribution, a few codec_opus implementations have popped up.  To make it
easier for people to drop in opus support in their own installations, this
patch adds configure checks for libopus.

Review: https://reviewboard.asterisk.org/r/4106/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426234 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-27 17:54:32 +00:00
Matthew Jordan b23580afe6 res/res_http_websocket: Fix minor nits found by wdoekes on r409681
When Moises committed the fixes for WSS (which was a great patch), wdoekes had
a few style nits that were on the review that got missed. This patch resolves
what I *think* were all of the ones that were still on the review.

Thanks to both moy for the patch, and wdoekes for the reviews.

Review: https://reviewboard.asterisk.org/r/3248/
........

Merged revisions 426209 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426210 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426211 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-27 02:46:35 +00:00
Matthew Jordan f3fbcc550e res/res_phoneprov: Fix crash on shutdown caused by container cleanup
In res_phoneprov, unloading the module first destroys the http_routes
container, followed by the users. However, users may have a route in
the http_routes container; the validity of this container is not checked
in the users destructor. Hence, we hit an assert as the container has already
been set to NULL.

This patch does two things:
(1) It adds a sanity check in the user destructor (because why not)
(2) It switches the order of destruction, so that users are disposed of prior
    to the HTTP routes they may hold a reference to.

Note that this crash was caught by the Test Suite (go go testing!)
........

Merged revisions 426174 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-27 02:27:23 +00:00
Matthew Jordan 775640f658 res/res_srtp: Fix include issue for libsrtp 1.5.0
In libsrtp 1.5.0, crypto_get_random is no longer resolved simply by including
srtp.h. Now, one must include crypto_kernel.h as well. As it turns out, this
header file has been provided by the library since 2006, so this is a
relatively benign change.

ASTERISK-24436 #close
Reported by: Patrick Laimbock
........

Merged revisions 426140 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426141 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426142 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426143 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-27 01:47:26 +00:00
Jonathan Rose e979d0d5c1 Documentation: Improve documentation for ExtensionStatus AMI events
Review: https://reviewboard.asterisk.org/r/4085/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-24 15:17:59 +00:00
Shaun Ruffell 14db1236ad codec_dahdi: Cannot use struct ast_translator.core_{src,src}_codec.
This fixes a Segmentation fault introduced in r419044 "media formats: re-architect
handling of media for performance improvements".

The problem is that codec_dahdi was using core_src_codec and core_dst_codec in the
ast_translator structure when these fields were never set. Now instead of trying to map
the new core codec descriptions to the way DAHDI defines different codecs, we will store
the DAHDI specific formats in 'struct translator' directly so we can refer to them without
mapping.

This also allows us to remove the "global_format_map" structure, since we can now query
the list of translators directly to make sure we do not ever register a DAHDI based
translator for a specific path more than once and eliminate the need to keep the list and
the map in sync.

ASTERISK-24435 #close
Reported by: Marian Koniuszko

Review: https://reviewboard.asterisk.org/r/4105/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-22 21:27:23 +00:00
Richard Mudgett 70f1c82ac2 translage.c: Fix regression when generating translation path strings.
Fix the AMI Status action read and write translation path strings from
growing for each channel in the status event list by reseting the ast
string given to ast_translate_path_to_str() to fill in the given
translation path.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@426079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-21 17:47:38 +00:00
Matthew Jordan 0e911663e3 AST-2014-011: Fix POODLE security issues
There are two aspects to the vulnerability:
(1) res_jabber/res_xmpp use SSLv3 only. This patch updates the module to use
    TLSv1+. At this time, it does not refactor res_jabber/res_xmpp to use the
    TCP/TLS core, which should be done as an improvement at a latter date.
(2) The TCP/TLS core, when tlsclientmethod/sslclientmethod is left unspecified,
    will default to the OpenSSL SSLv23_method. This method allows for all
    encryption methods, including SSLv2/SSLv3. A MITM can exploit this by
    forcing a fallback to SSLv3, which leaves the server vulnerable to POODLE.
    This patch adds WARNINGS if a user uses SSLv2/SSLv3 in their configuration,
    and explicitly disables SSLv2/SSLv3 if using SSLv23_method.

For TLS clients, Asterisk will default to TLSv1+ and WARN if SSLv2 or SSLv3 is
explicitly chosen. For TLS servers, Asterisk will no longer support SSLv2 or
SSLv3.

Much thanks to abelbeck for reporting the vulnerability and providing a patch
for the res_jabber/res_xmpp modules.

Review: https://reviewboard.asterisk.org/r/4096/

ASTERISK-24425 #close
Reported by: abelbeck
Tested by: abelbeck, opsmonitor, gtjoseph
patches:
  asterisk-1.8-jabber-tls.patch uploaded by abelbeck (License 5903)
  asterisk-11-jabber-xmpp-tls.patch uploaded by abelbeck (License 5903)
  AST-2014-011-1.8.diff uploaded by mjordan (License 6283)
  AST-2014-011-11.diff uploaded by mjordan (License 6283)
........

Merged revisions 425987 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425991 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-20 14:15:33 +00:00
George Joseph cb31a8aa7a build: Force -fsigned-char on platforms where the default for char is unsigned
gcc on the ARM platform defaults 'char' to 'unsigned char' whereas Intel and
SPARC default to 'signed char'.  This is only an issue in the rare cases where
negative values are assigned to a 'char' but this this patch insures
compatibility by detecting platforms that default to 'unsigned' and adding an
'-fsigned-char' flag to _ASTCFLAGS.

If compiling for ARM (native or cross-compile) be sure to run ./bootstrap.sh
and ./configure to regenerate the build files.  You shouldn't have to do this
for Intel or SPARC.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4091/
........

Merged revisions 425964 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425965 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-19 17:07:50 +00:00
Matthew Jordan 70b21c4617 res/res_pjsip_sdp_rtp: Revert 425922
This patch for r425922 introduced a bug, wherein sending an INVITE request
with no SDP would cause Asterisk to not send an SDP Offer in the 200
OK. The current structure of res_pjsip_sdp_rtp is a bit hard to deal with
to fix this, as create_outgoing_sdp has no knowledge of whether or not it is
creating an SDP as a new Offer or an Answer. This is something of an oversight
in the callback definition, as the caller of it does have this information.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425944 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-19 04:01:31 +00:00
Matthew Jordan 2c7556769c res/res_pjsip_sdp_rtp: Remove left over reference to override_prefs
The usage of the local override_prefs variable in create_outgoing_sdp_stream
was previously to track an override format preference set by PJSIP_MEDIA_OFFER.
Now, however, that function simply sets the joint capabilities structure,
session->req_caps. During the media format rework, the override_prefs was
instead used to check if there were any formats in session->req_caps.

However, this usage isn't useful in create_outgoing_sdp_stream.
session->req_caps contains the negotiated formats for *all* streams, not just
the current one being created. Thus, so long as any stream of any type has
provided a format, override_prefs will be non-zero. Hence, its usage in
checking whether or not we should look at the formats on the endpoint or
the joint capabilities is generally useless.

There's only two things useful to check:
(1) Does the endpoint have a format for the media type?
(2) Did we negotiate a format for the media type?

If either of those is a 'no', then we must kill the media stream.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425923 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-19 00:56:11 +00:00
Matthew Jordan 7a76de11b1 Blocked revisions 425921
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425922 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-19 00:50:30 +00:00
Jonathan Rose 8e610ab20e Sample Configurations: make 'pjsip reload' reload all reloadable pjsip modules
AST-1432 #close
Reported by: John Bigelow


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 22:43:34 +00:00
Matthew Jordan dd7031bfb7 res_pjsip_session/res_pjsip_sdp_rtp: Be more tolerant of offers
When an inbound SDP offer is received, Asterisk currently makes a few
incorrection assumptions:

(1) If the offer contains more than a single audio/video stream, Asterisk will
    reject the entire stream with a 488. This is an overly strict response;
    generally, Asterisk should accept the media streams that it can accept and
    decline the others.
(2) If the offer contains a declined media stream, Asterisk will attempt to
    process it anyway. This can result in attempting to match format
    capabilities on a declined media stream, leading to a 488. Asterisk should
    simply ignore declined media streams.
(3) Asterisk will currently attempt to handle offers with AVPF with
    use_avpf=No/AVP with use_avpf=Yes. This mismatch results in invalid SDP
    answers being sent in response. If there is a mismatch between the media
    type being offered and the configuration, Asterisk must reject the offer
    with a 488.

This patch does the following:
* Asterisk will accept SDP offers with at least one media stream that it can
  use. Some WARNING messages have been dropped to NOTICEs as a result.
* Asterisk will not accept an offer with a media type that doesn't match its
  configuration.
* Asterisk will ignore declined media streams properly.

#SIPit31

Review: https://reviewboard.asterisk.org/r/4063/

ASTERISK-24122 #close
Reported by: James Van Vleet

ASTERISK-24381 #close
Reported by: Matt Jordan
........

Merged revisions 425868 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 13:35:21 +00:00
Matthew Jordan 97b5c22f07 channels/chan_sip: Respect outboundproxy setting when sending qualify requests
The outboundproxy setting is currently ignored when sending OPTIONS requests
as a result of the qualify setting. This means that if an Asterisk server is
unable to send the packet directly to a peer, it is unable to qualify any
non-inbound registered peer (e.g. a peer SIP Trunk).

This patch grabs the outboundproxy information for a peer when a qualify
attempt is being constructed and, if it finds the information, uses it
when sending the OPTIONS request.

Review: https://reviewboard.asterisk.org/r/3948

ASTERISK-24063 #close
Reported by: Damian Ivereigh
patches:
  outboundproxy-dai.patch uploaded by Damian Ivereigh (License 6632)
........

Merged revisions 425818 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425819 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425820 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 13:10:42 +00:00
Richard Mudgett fa94bc815b AMI: Add missing VarSet events when a channel inherits variables.
There should be AMI VarSet events when channel variables are inherited by
an outgoing channel.  Also local;2 should generate VarSet events when it
gets all of its channel variables from channel local;1.

ASTERISK-24415 #close
Reported by: Richard Mudgett
Patches:
      jira_asterisk_24415_v12.patch (license #5621) patch uploaded by Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4074/
........

Merged revisions 425782 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 02:41:34 +00:00
Matthew Jordan 5f300b7a40 bridge_native_rtp: Fix audio issues when moving from remote bridge to softmix
When a native RTP bridge that is remotely bridging its participants switches
to a softmix bridge, it may not properly re-INVITE the media for one or both
participants back to Asterisk. This is due to the current bridge_native_rtp
code only re-INVITEs if it believes the channel will survive the bridge
operation. Currently, that code is failing, as it expects the channels to
have a soft hangup flag set on it indicating that a redirect has occurred
or that the channel is going to leave the bridge. (The code did not take into
account a smart bridge operation).

This patch also renames a few things to be more reflective of the underlying
types.

Review: https://reviewboard.asterisk.org/r/3997/

ASTERISK-24327 #close
........

Merged revisions 425760 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 01:57:14 +00:00
Matthew Jordan cb9ae40a31 test_cel: Update pickup test to expect CANCEL instead of ANSWSER
The CEL pickup test previously looked for a disposition of ANSWER between the
original caller/peer when the call is picked up. This is actually incorrect:
the disposition should, at the very least, not be ANSWER as the call was
never ANSWERed. The disposition is now CANCEL; this patch updates the test
accordingly.
........

Merged revisions 425757 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-17 01:45:38 +00:00
Matthew Jordan fdcec1ef40 main/cdr: Use 'time' when rescheduling batched CDRs as opposed to 'size'
When refactoring CDRs to use the configuration framework, a 'whoops' was
introduced where the CDR batch size was used when rescheduling a batch,
as opposed to the time duration. This patch corrects that obvious mistake.

ASTERISK-24426 #close
Reported by: Shane Blaser
........

Merged revisions 425735 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425736 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-16 21:16:59 +00:00
George Joseph b8f505294a config: Fix inf loop using ast_category_browse and ast_variable_retrieve
Fix infinite loop when calling ast_variable_retrieve inside an
ast_category_browse loop when there is more than 1 category with
the same name.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4089/
........

Merged revisions 425713 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-16 17:30:39 +00:00
Kinsey Moore 289830cdc6 PJSIP: Enforce module load dependencies
This enforces that res_pjsip, res_pjsip_session, and res_pjsip_pubsub
have loaded properly before attempting to load any modules that depend
on them since the module loader system is not currently capable of
resolving module dependencies on its own.

ASTERISK-24312 #close
Reported by: Dafi Ni
Review: https://reviewboard.asterisk.org/r/4062/
........

Merged revisions 425690 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-16 14:35:00 +00:00
Igor Goncharovskiy 50e802445c Fix loss of voice after second call drops (on a second line) in case using multiple lines on unistim phones. There is regression was introduced in r391379.
Reported by: Rustam Khankishyiev
(closes issue ASTERISK-23846)
........

Merged revisions 425667 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425668 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425669 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-16 06:11:28 +00:00
Joshua Colp 70a3e74f0a res_rtp_asterisk: Fix a bug where ICE state would get reset when it shouldn't.
In the case where the ICE negotiation had not yet started current state would
get wiped when it shouldn't.

This also removes channel binding as in practice this does not work well with
other implementations.
........

Merged revisions 425644 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425645 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425646 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-16 01:25:42 +00:00
Richard Mudgett 1f1a352fbd chan_motif: Cleanup jingle_tech.capabilities only once.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-15 19:31:54 +00:00
Jonathan Rose fab0df2f4c parking_tests: Fix assertions and possibly crashes in res_parking unit tests
Assertions were caused by attempting to play music on hold to a channel with
no formats. Parking unit test channels were given formats and a technology so
that they would be able to pretend to read/write frames.

ASTERISK-24413 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4075/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425611 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-15 19:05:14 +00:00
Alexandr Anikin edf5af72e9 chan_ooh323: fix rtptimeout general value checking
correct condition to check rtptimeout in [general] config section

ASTERISK-24393 #close
Reported by:  Dmitry Melekhov
Tested by:  Dmitry Melekhov
Patches:
  ASTERISK-24393.patch
........

Merged revisions 425547 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425548 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425589 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425590 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-15 09:59:09 +00:00
George Joseph 54a5b8798f config: Fix SEGV in unit test with MALLOC_DEBUG
With MALLOC_DEBUG the /main/config config_basic_ops test was causing a
SEGV while doing an ast_category_delete in an ast_category_browse loop.
Apparently this never worked but was also never tested.  I removed the
test, added 2 notes to config.h indicating that it's not supported and
added a few lines of code to ast_category_delete to prevent the SEGV
should someone attempt it in the future.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4078/
........

Merged revisions 425525 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425526 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 20:46:31 +00:00
Jonathan Rose 2d07283dc5 Scheduler: Fix a nasty scheduler caching bug which makes new tasks not execute
Tasks that were marked for pending deletion in the scheduler would be moved to
the cache for later reuse, but after being recycled the deleted mark wouldn't
be removed resulting in fresh tasks being deleted without reason... and
immediately moved back into the cache where they could be reused again. This
could cause horrendous things to happen in just about anything that used a
scheduler.

ASTERISK-24321 #close
Reported by: Steve Pitts
Review: https://reviewboard.asterisk.org/r/4071/
........

Merged revisions 425503 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425504 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 19:00:28 +00:00
George Joseph 26724c65f7 res_phoneprov: Create accessor for ast_phoneprov_std_variable_lookup
Based on feedback from Richard, I created an accessor for
res_phoneprov/ast_phoneprov_std_variable_lookup and added
load priority to AST_MODULE_INFO.

Tested-by: George Joseph
Tested-by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4076/
........

Merged revisions 425480 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425481 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 18:12:40 +00:00
Corey Farrell c0943cf8d6 res_fax: Fix reference leak caused by gateway sessions
Fax gateway session objects can be re-used, causing the
same gateway session to be added to faxregistry.container
more than once.  This change causes fax_session_new to
remove the reserved session from the container before
it's id is changed, ensuring it's possible for the
session to be freed.

ASTERISK-24392 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4049/
........

Merged revisions 425457 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425458 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425459 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 16:46:06 +00:00
Richard Mudgett 9a7fb8ee6c stasis_channels.c: Resolve unfinished Dials when doing masquerades (Part 2)
Masquerades into and out of channels that are involved in a dial operation
don't create the expected dial end event.  The missing dial end event goes
against the model for things like CDRs and generating Dial end manager
actions and such.

There are four cases:

1) A channel masquerades into the caller channel.  The case happens when
performing a blonde transfer using the channel driver's protocol.

2) A channel masquerades into a callee channel.  The case happens when
performing a directed call pickup.

3) The caller channel masquerades out of dial.  The case happens when
using the Bridge application on the caller channel.

4) A callee channel masquerades out of dial.  The case happens when using
the Bridge application on a peer channel.

As it turned out, all four cases need to be handled instead of just the
first one.

ASTERISK-24237
Reported by: Richard Mudgett

ASTERISK-24394 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/4066/
........

Merged revisions 425430 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 16:35:11 +00:00
Corey Farrell 6b93ab5824 res_fax: Resolve module reference leak caused by reserved sessions
Remove reference to module providing reserved session after
adding a reference to the final module.  This re-reference
is done to ensure that module references are correct even
if the final session selects a different module than the
reserved session.

ASTERISK-18923 #close
Reported by: Grigoriy Puzankin
Review: https://reviewboard.asterisk.org/r/4048/
........

Merged revisions 425405 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425407 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425411 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-14 16:19:59 +00:00
George Joseph 8bb06d592a manager/config: Support templates and non-unique category names via AMI
This patch provides the capability to manipulate templates and categories
with non-unique names via AMI.

Summary of changes:

GetConfig and GetConfigJSON: Added "Filter" parameter:  A comma separated list
of name_regex=value_regex expressions which will cause only categories whose
variables match all expressions to be considered.  The special variable name
TEMPLATES can be used to control whether templates are included.  Passing
'include' as the value will include templates along with normal categories.
Passing 'restrict' as the value will restrict the operation to ONLY templates.
Not specifying a TEMPLATES expression results in the current default behavior
which is to not include templates.

UpdateConfig: NewCat now includes options for allowing duplicate category
names, indicating if the category should be created as a template, and
specifying templates the category should inherit from.  The rest of the
actions now accept a filter string as defined above.  If there are non-unique
category names, you can now update specific ones based on variable values.

To facilitate the new capabilities in manager, corresponding changes had to be
made to config, most notably the addition of filter criteria to many of the
APIs.  In some cases it was easy to change the references to use the new
prototype but others would have required touching too many files for this
patch so a wrapper with the original prototype was created.  Macros couldn't
be used in this case because it would break binary compatibility with modules
such as res_digium_phone that are linked to real symbols.

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4033/
........

Merged revisions 425383 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425384 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-13 16:10:06 +00:00
Joshua Colp efefbe15a4 res_rtp_asterisk: Make the ICE transport check case insensitive as some implementations use 'udp'.
........

Merged revisions 425360 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425361 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425362 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-12 21:09:14 +00:00
Walter Doekes 0ebe3d78bc chan_sip: Fix so asterisk won't send reINVITE after a BYE.
After a reINVITE glare situation, Asterisk would re-send the reINVITE
even though the call had been hung up in the mean time.  This patch
unschedules the reinvite when handling the BYE.

ASTERISK-22791 #close
Reported by: Paolo Compagnini
Tested by: Paolo Compagnini

Review: https://reviewboard.asterisk.org/r/4056/
(testcase is in review r4055)
........

Merged revisions 425296 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425297 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425298 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425299 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-12 08:15:30 +00:00
Walter Doekes 6644fd46e7 build: Relax badshell tilde test to allow for ~ in middle of DESTDIR.
The main Makefile has a target test called 'badshell' that tests if
DESTDIR does not happen to have an an-expanded tilde (~).  This might
be the case if you run: make install DESTDIR=~/somewhere/

That test also disallowed valid tildes in directory names. The test is
now changed to only trigger on a tilde at the start of the path.

ASTERISK-13797 #close
Reported by: Tzafrir Cohen

Review: https://reviewboard.asterisk.org/r/4064/
........

Merged revisions 425291 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425292 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425293 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425294 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-12 07:56:26 +00:00
Walter Doekes 1e6c3d1a26 res_calendar_ews: Relax neon version check to work with 0.30 too.
Allow res_calendar_ews to work not only with libneon-0.29 but also
with 0.30.

ASTERISK-24325 #close
Reported by: Tzafrir Cohen

Review: https://reviewboard.asterisk.org/r/4068/
........

Merged revisions 425286 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425287 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425288 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425289 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-12 07:44:32 +00:00
George Joseph 004c387041 res_phoneprov: Cleanup module load error handling
Tested module load/reload interaction between res_phoneprov and
res_pjsip_phoneprov_provider in cases where res_phoneprov didn't
load correctly (usually misconfiguration or missing phoneprov.conf)

Tested-by: George Joseph

Review: https://reviewboard.asterisk.org/r/4069/
........

Merged revisions 425264 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425265 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-11 21:08:50 +00:00
Joshua Colp 743ad19699 bridge: During a smart bridge operation provide a more complete bridge to the old technology.
When a smart bridge operation occurs and a bridge transitions from one
technology to another the old technology is provided the channels formerly
in it and told that they are leaving. Unfortunately the bridge provided
along with them is incomplete. The bridge, despite there being channels in it,
contains none. This forces technology implementations to have additional
logic when channels are leaving or to store their own duplicated
state.

This change makes the bridge more complete so it contains the expected
channels. Now that the bridge is complete special logic within
bridge_native_rtp is no longer needed and has been removed.

Review: https://reviewboard.asterisk.org/r/4057/
........

Merged revisions 425242 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425243 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 20:48:03 +00:00
Matthew Jordan b8aed5b14d res/res_phoneprov: Bail on registration if res_phoneprov didn't load
If res_phoneprov failed to fully load (due to not being configured), the
providers container will be NULL. If a module attempts to register a phone
provisioning provider, it should check for the presence of the container.
If there is no providers container, it should return an error.

This patch makes the ast_phoneprov_provider_register function do that...
otherwise this would be a silly commit message.
........

Merged revisions 425220 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425221 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 14:31:02 +00:00
Joshua Colp 23ffd68e70 res_pjsip_phoneprov_provider: Add missing dependency on pjproject.
........

Merged revisions 425216 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425217 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 14:23:39 +00:00
Kinsey Moore 32624fb541 CallerID: Fix parsing regression
This fixes a regression in callerid parsing introduced when another bug
was fixed. This bug occurred when the name was composed entirely of
DTMF keys and quoted without a number section (<>). 

ASTERISK-24406 #close
Reported by: Etienne Lessard
Tested by: Etienne Lessard
Patches:
    callerid_fix.diff uploaded by Kinsey Moore
Review: https://reviewboard.asterisk.org/r/4067/
........

Merged revisions 425152 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425153 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425154 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425155 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 13:01:41 +00:00
Joshua Colp 494bb9f931 res_pjsip_nat: Place source port into rport of responses if 'force_rport' is on.
When the 'force_rport' option is enabled the behavior should be the same
as if the remote side placed rport into the message themselves. Therefore
any responses we send should include the source port of the request in the
rport of the Via header.

#SIPit31

ASTERISK-24387 #close
Reported by: Matt Jordan
........

Merged revisions 425131 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425132 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 12:10:19 +00:00
Walter Doekes 4c2aef333c chan_sip: Fix dialog leak resulting from missing ACK to re-INVITE.
If a device re-INVITEs at the same time as the dialog is hung up, and
if then the ACK to the re-INVITE never reaches Asterisk, chan_sip would
fail to destroy the dialog after a while.  This resulted in (most
prominently) file handle leaks.

(Patch reindented by me.)

ASTERISK-20784 #close
ASTERISK-15879 #close
Reported by: Torrey Searle, Nitesh Bansal
Patches:
  reinvite_ack_timeout.patch uploaded by Torrey Searle (License #5334)
  patch_asterisk_20784.txt uploaded by Nitesh Bansal (License #6418)

Reviewboard: https://reviewboard.asterisk.org/r/4052/
(testcase can be found at r4051)
........

Merged revisions 425068 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425069 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 425070 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425071 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-10 07:32:10 +00:00
George Joseph bbc56596fd res_pjsip_phoneprov_provider: fix compile breakage on AST_VECTOR
endpoint->inbound_auths was changed to a vector in 13 and I
committed the 12 patch instead of the 13 patch.

Tested-by: George Joseph



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 23:35:21 +00:00
Kevin Harwell e2ae7bd79f res_rtp_asterisk: Crash if no candidates received for component
When starting ice if there is not at least one remote ice candidate with an RTP
component asterisk will crash. This is due to an assertion in pjnath as it
expects at least one candidate with an RTP component. Added a check to make
sure at least one candidate contains an RTP component and at least one candidate
has an RTCP component.

ASTERISK-24383 #close
Review: https://reviewboard.asterisk.org/r/4039/
........

Merged revisions 425030 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425031 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 21:38:18 +00:00
George Joseph d3342fb98d res_pjsip_phoneprov_provider: Provides pjsip integration with res_phoneprov
This module allows res_pjsip to integrate with res_phoneprov.  It handles
the pjsip 'phoneprov' object type.

Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/3976/
........

Merged revisions 425007 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@425008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 20:54:29 +00:00
Matthew Jordan cc07f4835c res/res_phoneprov: Don't cancel Asterisk load on module load failure
........

Merged revisions 424985 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424986 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 18:37:04 +00:00
George Joseph d1c9621852 res_phoneprov: Refactor phoneprov to allow pluggable config providers
This patch makes res_phoneprov more modular so other modules (like pjsip)
can provide configuration information instead of res_phoneprov relying solely
on users.conf and sip.conf.  To accomplish this a new ast_phoneprov public API
is now exposed which allows config providers to register themselves, set
defaults (server profile, etc) and add user extensions.

* ast_phoneprov_provider_register registers the provider and provides callbacks
  for loading default settings and loading users.
* ast_phoneprov_provider_unregister clears the defaults and users.
* ast_phoneprov_add_extension should be called once for each user/extension
  by the provider's load_users callback to add them.
* ast_phoneprov_delete_extension deletes one extension.
* ast_phoneprov_delete_extensions deletes all extensions for the provider.

Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/3970/
........

Merged revisions 424963 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 17:45:23 +00:00
Richard Mudgett 376ec31b17 cdr.c: Make turning on CDR debug a one step process instead of two.
Now "cdr set debug on" doesn't also require "core set verbose 1" to see
CDR debug output.
........

Merged revisions 424941 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424942 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 16:36:29 +00:00
Walter Doekes 4c7887b852 safe_asterisk: Don't automatically exceed MAXFILES value of 2^20.
On systems with lots of RAM (e.g. 24GB) /proc/sys/fs/file-max divided
by two can exceed the per-process file limit of 2^20. This patch
ensures the value is capped.

(Patch cleaned up by me.)

ASTERISK-24011 #close
Reported by: Michael Myles
Patches:
  safe_asterisk-ulimit.diff uploaded by Michael Myles (License #6626)
........

Merged revisions 424875 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 424878 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424879 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424880 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-09 08:08:43 +00:00
Joshua Colp 0292839ae0 res_rtp_asterisk: Allow only UDP ICE candidates.
The underlying library, pjnath, that res_rtp_asterisk uses for ICE
support does not have support for ICE-TCP. As candidates are
passed through directly to it this can cause error messages to occur
when it receives something unexpected (such as a TCP candidate).
This change merely ignores all non-UDP candidates so they never
reach pjnath.

ASTERISK-24326 #close
Reported by: Joshua Colp
........

Merged revisions 424852 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424853 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424854 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-08 18:46:45 +00:00
Kinsey Moore b32d8b5317 Stasis: Relegate log message to dev-mode
This error message primarily applies to development tasks and will now
only show up when dev-mode is enabled via configure.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-08 18:24:15 +00:00
Kinsey Moore 9e08180304 Indexer: Format message types may not exist
In Asterisk 13+, any given message type is not guaranteed to exist even
if Asterisk comes up correctly since creation of the message type could
be declined. The indexer should not prevent Asterisk from starting
under these conditions.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424833 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-08 14:54:29 +00:00
Kinsey Moore 57a5e2ebee Stasis: Only log errors for non-declined types
When message type creation is declined via stasis.conf, certain
operations log errors assuming that the declined type is being used
before initialization or after destruction. These error messages get
quite spammy for oft used message types and should not be logged in the
first place since the message type is validly NULL.

Reported by: Matt DiMeo


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424769 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-07 20:32:11 +00:00
Joshua Colp 673c2febba data: Properly access formats in capabilities structure when adding codecs.
Formats within a capabilities structure are addressed starting at 0, not 1.
Assuming 1 causes it to exceed an array.

ASTERISK-24389 #close
Reported by: Kevin Harwell


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424752 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-07 18:33:45 +00:00
Matthew Jordan 17d079c371 res/res_pjsip_outbound_registration: Initialize auth_reject_permanent parameter
Prior to this patch, the auth_reject_permanent parameter was not initialized on
the registration client state, leading to the parameter being disabled
regardless of the value specified in pjsip.conf.

This patch initialized the setting on the registration client state to the
provided configuration value.

ASTERISK-24398 #close
........

Merged revisions 424730 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-07 17:41:11 +00:00
Matthew Jordan 9f5c73586c res/res_pjsip_pubsub: Fix typo in WARNING message
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424713 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-07 14:09:19 +00:00
Matthew Jordan 5c607f9735 message: Don't close an AMI connection on SendMessage action error
If SendMessage encounters an error (such as incorrect input provided to the
action), it will currently return -1. Actions should only return -1 if the
connection to the AMI client should be closed. In this case, SendMessage
causing the client to disconnect is inappropriate.

This patch causes the action to return 0, which simply causes the action to
fail.

Review: https://reviewboard.asterisk.org/r/4024

ASTERISK-24354 #close
Reported by: Peter Katzmann
patches:
  sendMessage.patch uploaded by Peter Katzmann (License 5968)
........

Merged revisions 424690 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424691 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 18:38:25 +00:00
Richard Mudgett 6a8cb946eb features.c: Fix lingering channel ref while Bridge() application is active.
Using the Bridge application to bridge a channel that is executing an
applicaiton such as Wait results in a lingering Surrogate channel in the
CLI "core show channels" output even though it has already hungup.

* Fix bridge_exec() to not hold onto the current_dest_chan ref once it has
been put into the bridge.

* Eliminated bridge_exec()'s use of RAII_VAR().

ASTERISK-24224 #close
Reported by: Mark Michelson

Review: https://reviewboard.asterisk.org/r/4041/
........

Merged revisions 424668 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424669 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 15:38:42 +00:00
Matthew Jordan c092e49344 sdp_srtp: Add new lines to some WARNING messages
........

Merged revisions 424646 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424647 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 12:38:37 +00:00
Matthew Jordan 4f28ae4f51 res_pjsip/pjsip_options: Do not 404 an OPTIONS request not sent to an endpoint
An OPTIONS request that is sent to Asterisk but not to a specific endpoint is
currently sent a 404 in response. This is because, not surprisingly, an empty
extension is never going to be found in the dialplan.

This patch makes it so that we only attempt to look up the endpoint in the
dialplan if it is specified in the OPTIONS request URI.

#SIPit31

ASTERISK-24370 #close
Reported by: Matt Jordan
........

Merged revisions 424624 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424625 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 00:59:43 +00:00
Matthew Jordan 57233a97e8 pjsip/dialplan_functions: Handle PJSIP_MEDIA_OFFER called on non-PJSIP channels
Calling PJSIP_MEDIA_OFFER on a non-PJSIP channel is hazardous to your health.
It will treat the channels as a PJSIP channel, eventually hitting an ao2 error,
FRACKing on assertion error, and quite likely crashing.

This patch adds checks to the read/write callbacks that ensure that the channel
technology is of type 'PJSIP' before attempting to operate on the channel.

#SIPit31

ASTERISK-24382 #close
Reported by: Matt Jordan
........

Merged revisions 424621 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 00:52:19 +00:00
Matthew Jordan 69032d62aa res_pjsip: Prevent crashes when PJPROJECT presents an rdata with no message
When a message that exceeds the PJ_MAX_PKT_SIZE is sent over a reliable
transport, it is possible (although it shouldn't occur) for pjproject to pass
up an rdata object with a NULL msg in the msg_info. Needless to say, things
that attempt to dereference this are in for a rough ride.

In particular, this caused crashes in three different locations, all of which
are 'low level' enough to intercept an rdata object early in processing:

(1) res_pjsip_logger
(2) res_hep_pjsip
(3) res_pjsip/distributor

Anything that can intercept an rdata object before res_pjsip/distributor should
be defensive when looking at the received packet.

#SIPit31

ASTERISK-24369 #close
Reported by: Matt Jordan
........

Merged revisions 424618 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424619 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 00:31:15 +00:00
Matthew Jordan f36b64f58e res/res_pjsip_pubsub: Gracefully handle errors when re-creating subscriptions
A subscription that has been persisted can - for various reasons - fail to be
re-created on startup. This patch resolves a number of crashes that occurred
when a subscription cannot be re-created on several off-nominal paths.

#SIPit31

ASTERISK-24368 #close
Reported by: Matt Jordan


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424601 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-06 00:06:45 +00:00
Corey Farrell 9e3b5be182 Release AMI connections on shutdown.
ASTERISK-24378 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4037/
........

Merged revisions 424578 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424579 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-05 00:48:06 +00:00
Corey Farrell 0904b18fcc Blocked revisions 424575
........
chan_sip: Clean leak on error path of process_sdp

Resolve leak in process_sdp that occurs in 2 error path's where
crypto lines are expected but not provided.

ASTERISK-24385 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4045/
........

Merged revisions 424569 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-05 00:26:22 +00:00
Corey Farrell a03464bea2 chan_motif: Correct last commit to use ao2_cleanup to free format cap
This fix applies to 13 and trunk.

ASTERISK-24384 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4043/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424554 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-05 00:12:39 +00:00
Corey Farrell 3987b978d6 chan_motif: Release format capabilities and config on module load error
ASTERISK-24384 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4043/
........

Merged revisions 424550 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424551 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-05 00:01:53 +00:00
Richard Mudgett 30e6eed19d res_pjsip: Fix XML typo and update CHANGES.
ASTERISK-24199
........

Merged revisions 424528 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 21:56:15 +00:00
Richard Mudgett cff192429b audiohooks: Reevaluate the bridge technology when an audiohook is added or removed.
Adding a mixmonitor to a channel causes the bridge to change technologies
from native to simple_bridge so the call can be recorded.  However, when
the mixmonitor is stopped the bridge does not switch back to the native
technology.

* Added unbridge requests to reevaluate the bridge when a channel
audiohook is removed.

* Moved the unbridge request into ast_audiohook_attach() ensure that the
bridge reevaluates whenever an audiohook is attached.  This simplified the
mixmonitor and chan_spy start code as well.

* Added defensive code to stop_mixmonitor_full() in case additional
arguments are ever added to the StopMixMonitor application.

* Made ast_framehook_detach() not do an unbridge request if the framehook
does not exist.

* Made ast_framehook_list_fixup() do an unbridge request if there are any
framehooks.  Also simplified the loop.

ASTERISK-24195 #close
Reported by: Jonathan Rose

Review: https://reviewboard.asterisk.org/r/4046/
........

Merged revisions 424506 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424507 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 19:39:49 +00:00
Richard Mudgett 6a844be566 chan_pjsip: Fix deadlock when masquerading PJSIP channels.
Performing a directed call pickup resulted in a deadlock when PJSIP
channels were involved.

A masquerade needs to hold onto the channel locks while it swaps channel
information between the two channels involved in the masquerade.  With
PJSIP channels, the fixup routine needed to push a fixup task onto the
PJSIP channel's serializer.  Unfortunately, if the serializer was also
processing a task that needed to lock the channel, you get deadlock.

* Added a new control frame that is used to notify the channels that a
masquerade is about to start and when it has completed.

* Added the ability to query taskprocessors if the current thread is the
taskprocessor thread.

* Added the ability to suspend/unsuspend the PJSIP serializer thread so a
masquerade could fixup the PJSIP channel without using the serializer.

ASTERISK-24356 #close
Reported by: rmudgett

Review: https://reviewboard.asterisk.org/r/4034/
........

Merged revisions 424471 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424472 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 17:39:50 +00:00
George Joseph b67094624d sorcery: Prevent SEGV in sorcery_wizard_create when there's no create function
When you call ast_sorcery_create() you don't necessarily know which wizard is
going to be invoked.  If it happens to be a wizard like 'config' that doesn't
have a 'create' virtual function you get a segfault in the
sorcery_wizard_create callback.  This patch catches the null function pointer,
does an ast_assert, and logs an error.

Review: https://reviewboard.asterisk.org/r/4044/
........

Merged revisions 424447 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424448 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 15:54:44 +00:00
Kinsey Moore ef2c567597 PJSIP: Restore functional default for callerid_privacy
The pjsip config option default fixups from r424263 altered the
functional default from "allowed_not_screened" to "allowed". This
change restores the functional default value when none is provided.
........

Merged revisions 424426 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424427 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 13:58:37 +00:00
Kinsey Moore 1cb36afce3 Manager: Add missing fields and documentation for CoreShowChannels
This corrects some issues introduced in the responses to the
CoreShowChannels AMI command as well as adding documentation for the
responses. The command in Asterisk 12 was missing the following fields:
Duration, Application, ApplicationData, and BridgedChannel and
BridgedUniqueID (replaced with BridgeId).

ASTERISK-24262 #close
Reported by: Mitch Claborn
Review: https://reviewboard.asterisk.org/r/4040/
........

Merged revisions 424423 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424424 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 13:32:24 +00:00
Joshua Colp 6246189df7 res_pjsip_session: Reduce SDP size by removing duplicate connection lines.
Due to the architecture of how media streams are handled each individual
handler adds connection details (IP address) for it. The first media stream
is then used as the top level SDP connection line. In practice each
line ends up being the same so to reduce the SDP size stream-level connection
information is also added to the SDP if it differs from the top level SDP
connection line.
........

Merged revisions 424414 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-03 07:54:33 +00:00
Richard Mudgett 94105b30a6 res_pjsip: Make transport cipher option accept a comma separated list of cipher names.
Improvements to the res_pjsip transport cipher option.

* Made the cipher option accept a comma separated list of OpenSSL cipher
names.  Users of realtime will be glad if they have more than one name to
list.

* Added the CLI command 'pjsip list ciphers' so a user can know what
OpenSSL names are available for the cipher option.

* Updated the cipher option online XML documentation to specify what is
expected for the value.

* Updated pjsip.conf.sample to not indicate that ALL is acceptable since
ALL does not imply a preference order for the ciphers and PJSIP does not
simply pass the string to OpenSSL for interpretation.

ASTERISK-24199 #close
Reported by: Joshua Colp

Review: https://reviewboard.asterisk.org/r/4018/
........

Merged revisions 424393 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-02 21:52:56 +00:00
Jonathan Rose 9ff743e995 Alembic: Add enumerator value to sippeers -> directmedia - 'outgoing'
The 'outgoing' value was left off of the enumerator when first creating the
column. This patch adds it, and should gracefully upgrade keeping the existing
data in tact.

ASTERISK-23781 #close
Reported by: Stephen More
Review: https://reviewboard.asterisk.org/r/4013/
........

Merged revisions 424372 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-02 20:15:27 +00:00
Scott Griepentrog 1e620fe59e res_pjsip: document use of rewrite_contact in sample conf
Without setting rewrite_contact, an invite to an endpoint
behind NAT will not reach it - unless the endpoint itself
uses STUN or TURN to discover it's public URI.  Thus, the
use of this should be in the sample documentation.

Review: https://reviewboard.asterisk.org/r/4036/
........

Merged revisions 424337 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424338 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-02 13:35:12 +00:00
Jonathan Rose 2dfc3b65f8 chan_pjsip: Fix an assertion for channels that lack formats on creation
ASTERISK-24222 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4017/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424333 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 22:52:09 +00:00
Corey Farrell a2c47caa09 res_hep: Release allocation reference to configuration.
ASTERISK-24362 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4026/
........

Merged revisions 424312 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424313 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 20:36:19 +00:00
Joshua Colp a1763a89a3 res_pjsip: Add 'dtls_fingerprint' option to configure DTLS fingerprint hash.
During the latest update to DTLS-SRTP support the ability to configure
the hash used for fingerprints was added. This gave us two supported ones:
SHA-1 and SHA-256. The default was accordingly updated to SHA-256.
Unfortunately this configuration ability was not exposed within res_pjsip.
This change adds a dtls_fingerprint option that controls it.

#SIPit31
........

Merged revisions 424290 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424291 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 16:37:46 +00:00
Joshua Colp 0de2d080c2 res_pjsip_sdp_rtp: Accept DTLS attributes in top level, not just media session.
#SIPit31
........

Merged revisions 424287 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 16:19:08 +00:00
Kinsey Moore e3da76a352 PJSIP: Handle defaults properly
This updates the code behind PJSIP configuration options with custom
handlers to deal with the assigned default values properly where it
makes sense and adjusting the default value where it doesn't. Before
applying this patch, there were several cases where the default value
for an option would prevent that config section from loading properly.

Reported by: Thomas Thompson
Review: https://reviewboard.asterisk.org/r/4019/
........

Merged revisions 424263 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424266 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 12:27:05 +00:00
Kinsey Moore ac095304e6 PJSIP: Force transport on contact rewrite
If contact rewriting is enabled but the contact differs in transport
from what is actually being used, messages after the initial INVITE
transaction can be sent to an incorrect transport/port combination. In
the case where this bug occurred the remote party never received a BYE
since it was sent to the remote party's TCP port over UDP.

Review: https://reviewboard.asterisk.org/r/4032/
........

Merged revisions 424244 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424245 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 12:15:12 +00:00
Walter Doekes 303547231e chan_sip: Simplify some unref code by removing unlink_peer_from_tables.
ASTERISK-22945 #related
Reported by: ibercom
Patches:
  asterisk11-chan_sip-simplifies.patch uploaded by ibercom (License #6599)
........

Merged revisions 424181 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 424182 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424183 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424184 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 10:09:49 +00:00
Walter Doekes 45e32e4b8c chan_sip: Remove excess ref of realtime peer before sip_poke_peer.
The peer is referenced at the end of sip_poke_peer, it should not get
an extra ref before the call to sip_poke_peer. This fixes a memory
leak.

ASTERISK-22945 #close
Reported by: ibercom
Tested by: Yuriy Gorlichenko
Patches:
  asterisk11.patch uploaded by ibercom (License #6599)

Review: https://reviewboard.asterisk.org/r/4031/
........

Merged revisions 424176 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 424177 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424178 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424179 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-10-01 09:53:52 +00:00
Joshua Colp d9b15388b2 res_pjsip_sdp_rtp: Don't place an extra whitespace before 'rport' and don't put IPv6 addresses in brackets.
#SIPit31
........

Merged revisions 424155 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424156 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-30 11:40:57 +00:00
Joshua Colp b1bb6b97df res_rtp_asterisk: Ensure that the base and mapped address for candidates is present in SDP.
This change fixes an issue where ICE candidates put into the SDP did not contain
the 'raddr' and 'rport' information for server reflexive and relay candidates.

#SIPit31
........

Merged revisions 424151 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424152 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424153 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-30 11:35:14 +00:00
George Joseph faae530006 pjsip_cli: Suppress header print on error or no objects
If there's an error on the pjsip command line or there are no objects, don't
print the column headers.

ASTERISK-24350 #close
Reported-by: Brad Latus
Tested-by: George Joseph
Tested-by: Brad Latus

Review: https://reviewboard.asterisk.org/r/4025/
........

Merged revisions 424128 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424129 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-29 21:59:46 +00:00
Walter Doekes 8d55892df7 autosupport: Fix bashism.
'==' is bashism (bashspecific, fails when dash is /bin/sh). Anyway, a
'case' works better there.

Originally committed in r375059 and r375060 on 2012-10-16 21:13:08.

ASTERISK-20567 #close
Reported by: Tzafrir Cohen
........

Merged revisions 424117 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 424125 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-29 21:26:10 +00:00
Richard Mudgett 2a7c5208ee Simplify UUID generation in several places.
Replace code using ast_uuid_generate() with simpler and faster code using
ast_uuid_generate_str().  The new code avoids a malloc(), free(), and
copy.
........

Merged revisions 424103 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424105 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-29 21:17:26 +00:00
Richard Mudgett 00207158e1 threadpool.c: Minor cleanup fixes.
* Fix threadpool_alloc() prototype.

* Add missing off-nominal NULL check of pool in threadpool_alloc().

* searializer_create() does not need to create the object with a lock as
the lock is not used.
........

Merged revisions 424096 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-29 20:26:50 +00:00
Joshua Colp 19ffbb1e64 res_pjsip_session: Add additional checks for delaying session refreshes.
There are certain situations which no checks existed for which need to prevent
session refreshes. This includes sending a session refresh with SDP before SDP
negotiation has completed and sending a session refresh before the dialog itself
has been established. Checks for these have been added.

Additionally COLP related UPDATEs were including SDP when it is not needed.

Review: https://reviewboard.asterisk.org/r/4008/
........

Merged revisions 424056 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@424057 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-27 12:43:36 +00:00
Richard Mudgett 5a77eb3476 res_fax: Fix out of bounds error in update_modem_bits().
ASTERISK-24357 #close
Reported by: Jeremy Laine
Patches:
      res_fax_bounds.patch (license #6561) patch uploaded by Jeremy Laine
	  Modified patch to not use magic numbers.
........

Merged revisions 423979 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423983 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423987 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423992 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-26 15:21:14 +00:00
Walter Doekes 77de3be28d docs: Escape unescaped minus sign in asterisk.8 manpage.
ASTERISK-23768 #close
Reported by: Jeremy Lainé
Patches:
  escape_manpage_hyphen.patch uploaded by Jeremy Lainé (License #6561)
........

Merged revisions 423915 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423916 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423917 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423918 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-26 08:25:38 +00:00
Richard Mudgett 8ae471258e res_pjsip.c: Add missing off nominal cleanup in ast_sip_push_task_synchronous().
* Made memset the std struct in ast_sip_push_task_synchronous() because if
DEBUG_THREADS is enabled then uninitialized lock tracking data is used.
........

Merged revisions 423894 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423895 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-25 21:01:28 +00:00
Richard Mudgett 774890de1b pjsip_options.c: Fix race condition stopping periodic out of dialog OPTIONS request.
The crash on the issues is a result of an invalid transport configuration
change when asterisk is restarted.  The attempt to send the qualify
request fails and we cleaned up.  However, the callback is also called
which results in a double unref of the objects involved.

* Put a wrapper around pjsip_endpt_send_request() to detect when the
passed in callback is called because of an error so callers can know to
not cleanup.

* Made send_request_cb() able to handle repeated challenges (Up to 10).

* Fix periodic endpoint qualify OPTIONS sched deletion race by avoiding
it.  The sched entry will no longer self stop and must be externally
stopped.

* Added REF_DEBUG description tags to struct sched_data in
pjsip_options.c.

* Fix some off-nominal ref leaks in schedule_qualify(),
qualify_and_schedule().

* Reordered pjsip_options.c module start/stop code to cleanup better on
error.

ASTERISK-24295 #close
Reported by: Rogger Padilla

Review: https://reviewboard.asterisk.org/r/3954/
........

Merged revisions 423866 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-24 18:32:59 +00:00
Walter Doekes 20f4ea0df7 chan_sip: Unref outbound proxy structure on dialog/pvt destruction.
Make sure outbound proxy refs are always unreffed on dialog destruction.

Review: https://reviewboard.asterisk.org/r/4016/
........

Merged revisions 423800 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423801 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423802 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-24 08:53:18 +00:00
Mark Michelson d25390073b Make CDR and CEL unit tests less FRACKy.
Prior to this commit, CDR and CEL tests were expected to trigger
FRACKs (i.e. assertions) due to the fact that the channels they
create have no formats on them. Some code was independently added
recently that attempts to prevent FRACKs from occurring by failing
early when attempting to set up translation paths if one or both
channels support no formats. Unfortunately, this attempt to be helpful
made the CDR and CEL tests go from simply FRACKing to outright
failing and in some cases, failing so badly as to crash Asterisk.

This commit seeks to correct past mistakes by adding the ulaw format
to channels created by the CDR and CEL unit tests. This makes setting
up translation paths succeed, eliminates previously-seen FRACKs, and
ultimately causes the unit tests to succeed again.

Review: https://reviewboard.asterisk.org/r/4014



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-23 14:29:01 +00:00
Walter Doekes 0f3540553d chan_sip: On INVITE retransmission, don't add an extra 503 response.
INVITE arrives to asterisk, asterisk responds Busy(). If the INVITE is
retransmitted, asterisk would generate a 503 in addition to the 486.

Thanks Torrey Searle for providing a working regression test.

ASTERISK-24335 #close

Review: https://reviewboard.asterisk.org/r/4003/
Patches:
  retrans_486_invite.patch uploaded by Torrey Searle (License #5334)
........

Merged revisions 423720 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423721 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423722 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423723 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-22 19:48:29 +00:00
Walter Doekes 9d1c0348f2 cli.c: Fix tab completion "module load" when MALLOC_DEBUG is enabled.
r421600 conflicted with r155763.

ASTERISK-24348 #close
........

Merged revisions 423657 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423658 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423659 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423660 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-22 17:41:45 +00:00
Matthew Jordan d85e59a23b main/channel: Unlock channel in off-nominal path
In r423414 (13) / r423415 (trunk), an API call that determines if a format
capability structure is empty was added. This returns true if the format
capability structure is completely empty or "none". A check for this was added
in channel.c's set_format call. Unfortunately, when this check was true, it
returned from the function while still holding the channel lock. This caused
the CDR unit tests - which have a tendency to create channels with no formats -
to deadlock. Whoops.

This patch unlocks the channel on the off-nominal path.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423641 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-21 01:15:40 +00:00
Matthew Jordan f48d3f849d rest-api/api-docs/events.json: Remove non-compliant 'extends' attribute
Prior to the release of Swagger 1.2, the attribute 'extends' was being
promoted as a possible way to show that a particular object extends an existing
object. Instead, the Swagger specification went with the 'subTypes' attribute
in the base object. This patch removes the unsupported attribute; the object
that the offending objects proposed to extend already lists them in its
'subTypes' attribute.

ASTERISK-24300 #close
Reported by: Bradley Watkins
........

Merged revisions 423620 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423621 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-20 23:55:21 +00:00
Matthew Jordan d74dee638c rest-api/api-docs: Correct basePath in resources to match top resources file
The resources.json file that defines the resource JSON files used with ARI
references a basePath of 'http://localhost:8088/ari'. This does not match what
is defined in the resource files themselves, 'http://localhost:8088/stasis'.
The correct base path is the one that includes 'ari' in the URL; this patch
updates the various resource JSON files to have the correct basePath.

ASTERISK-24339 #close
Reported by: Bradley Watkins
........

Merged revisions 423617 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423618 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-20 23:41:17 +00:00
Joshua Colp 9a988639f4 res_pjsip_notify: Fix crash on unload/load and don't say the module doesn't exist on reload.
When unloading the module did not unregister the CLI commands causing a crash upon
load when they were registered again.

When reloading the module the return value from the config options framework was not
checked to determine if an error occurred or not. This caused a message to be output
saying the module did not exist when reloading if no changes were present.

AST-1433 #close
AST-1434 #close
........

Merged revisions 423579 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-19 19:51:12 +00:00
Richard Mudgett fbbe455b9d res_pjsip_sdp_rtp.c: Fix native formats containing formats that were not negotiated.
Outgoing PJSIP calls can result in non-negotiated formats listed in the
channel's native formats if video formats are listed in the endpoint's
configuration.  The resulting call could then use a non-negotiated format
resulting in one way audio.

* Simplified the update of session->req_caps in set_caps().  Why do
something in five steps when only one is needed?

AFS-162 #close

Review: https://reviewboard.asterisk.org/r/4000/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-19 17:08:47 +00:00
Jonathan Rose d1b1e911bf Stasis_channels: Resolve unfinished Dials when doing masquerades
Masquerades into channels that are in the dialing state don't end their dial
and this goes against the model for things like CDRs and generating Dial end
manager actions and such.

ASTERISK-24237 #close
Reported by: Richard Mudgett
Review: https://reviewboard.asterisk.org/r/3990/
........

Merged revisions 423525 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423530 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-19 15:18:01 +00:00
Jonathan Rose c95b53e21a chan_iax2: Fix a crash when using chan_iax2 jitterbuffer settings
Caused by format changes in Asterisk 13

ASTERISK-24265 #close
Reported by: Dafi Ni
Review: https://reviewboard.asterisk.org/r/3999/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423524 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-19 14:56:37 +00:00
Kinsey Moore fade256307 PJSIP: Prevent T38 framehook being put on wrong channel
This change gives framehooks a reverse-direction masquerade callback in
addition to chan_fixup_cb similar to the callback added to datastores
to handle the same situation. The new callback provides the same
parameters as the fixup callback, but is called on the new channel's
framehooks before moving framehooks from the old channel to the new
channel. This gives the framehooks an oppurtunity to decide whether
they should remain on the new channel or be removed.

This new callback is used to prevent the PJSIP T.38 framehook from
remaining on a masqueraded channel if the new channel is not also a
PJSIP channel. This was causing a crash when a local channel was
masqueraded into a PJSIP channel and the framehook was executed on the
local channel since the channel's tech private data was not structured
as expected.

Review: https://reviewboard.asterisk.org/r/4001/
........

Merged revisions 423503 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423504 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-19 12:45:53 +00:00
Sean Bright 6b3c47bd6a res_pjsip: Don't require a password when doing userpass authentication.
An empty password is valid for username/password authentication so we should
allow password to be empty/not supplied.

Review: https://reviewboard.asterisk.org/r/3988
........

Merged revisions 423481 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423482 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 19:30:17 +00:00
George Joseph c7ae706b2d utils: Create ast_strsep function that ignores separators inside quotes
This function acts like strsep with three exceptions...
* The separator is a single character instead of a string.
* Separators inside quotes are treated literally instead of like separators.
* You can elect to have leading and trailing whitespace and quotes
stripped from the result and have '\' sequences unescaped.

Like strsep, ast_strsep maintains no internal state and you can call it
recursively using different separators on the same storage.

Also like strsep, for consistent results, consecutive separators are not
collapsed so you may get an empty string as a valid result.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3989/
........

Merged revisions 423476 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423478 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 19:22:39 +00:00
Mark Michelson 23f58d6f80 Add subscription state test events.
These are needed for a set of batched notification RLS tests that are
about to be committed to the testsuite.

Review: https://reviewboard.asterisk.org/r/3967



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 18:31:01 +00:00
Jonathan Rose 5567d3e7d2 res_pjsip_endpoint_identifier_ip: Fix parsing of match value with CIDR
Also fixes comma separates match lists

ASTERISK-24290 #close
Reported by: Ray Crumrine
Review: https://reviewboard.asterisk.org/r/3995/
........

Merged revisions 423417 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 17:11:00 +00:00
Richard Mudgett 588a8d9078 bridge_softmix.c: Made use ao2_replace() instead of the inline equivalent.
* Clarified some read/write format comments.

* Fixed a doxygen tag typo.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 17:09:34 +00:00
Richard Mudgett 8b0352ffae astobj2.c/refcounter.py: Fix to deal with invalid object refs.
* Make astob2 REF_DEBUG output an invalid object line when an invalid ao2
object ref/unref is attempted.  This is similar to the
constructor/destructor lines.

* Fixed refcounter.py to handle skewed objects that have
constructor/destructor states.

* Made refcounter.py highlight the invalid ao2 object refs by putting them
in their own section of the processed output file.

* Made refcounter.py highlight unreffing an object by more than one that
results in a negative ref count and the object being destroyed.  The
abnormally destroyed object is reported in the invalid and finalized
object sections of the output.

Review: https://reviewboard.asterisk.org/r/3971/
........

Merged revisions 423349 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423400 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423416 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423418 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 16:47:59 +00:00
Mark Michelson 23a375be5f Add API call to determine if format capability structure is "empty".
Empty here means that there are no formats in the format_cap structure
or the only format in it is the "none" format.

I've added calls to check the emptiness of a format_cap in a few places
in order to short-circuit operations that would otherwise be pointless
as well as to prevent some assertions from being triggered in cases
where channels with no formats are used.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423414 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 16:37:47 +00:00
Mark Michelson 5c5aee4458 res_fax_spandsp: Properly handle cleanup before starting FAXes.
If faxing fails at a very early stage, then it is possible for
us to pass a NULL t30 state pointer to spandsp, which spandsp
is none too pleased with.

This patch ensures that we pass the correct pointer to spandsp
in the situation where we have not yet set our local t30 state
pointer.

ASTERISK-24301 #close
Reported by Matt Jordan
Patches:
	ASTERISK-24301-fax.diff Uploaded by Mark Michelson (License #5049)
........

Merged revisions 423360 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423365 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423372 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 16:22:32 +00:00
Mark Michelson 7a35800551 res_pjsip_pubsub: Add some type safety when generating NOTIFY bodies.
res_pjsip_pubsub has two separate checks that it makes when a SUBSCRIBE
arrives.
* It checks that there is a subscription handler for the Event
* It checks that there are body generators for the types in the Accept header

The problem is, there's nothing that ensures that these two things will
actually mesh with each other. For instance, Asterisk will accept a subscription
to MWI that accepts pidf+xml bodies. That doesn't make sense.

With this commit, we add some type information to the mix. Subscription
handlers state they generate data of type X, and body generators state
that they consume data of type X. This way, Asterisk doesn't end up in
some hilariously mismatched situation like the one in the previous paragraph.

ASTERISK-24136 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/3877
Review: https://reviewboard.asterisk.org/r/3878
........

Merged revisions 423344 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423348 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 15:55:13 +00:00
George Joseph a2482acdce res_pjsip: ami: Fix error in AMI output when an endpoint has no transport
When no transport is associated to an endpoint, the AMI output for
PJSIPShowEndpoint indicates an error instead of silently ignoring the
missing transport.

This patch causes the error to appear only if a transport was specified
on the endpoint and the transport doesn't exist.  It also fixes an issue
with counting the objects that were actually found.

ASTERISK-24161 #close
ASTERISK-24331 #close
Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3998/
........

Merged revisions 423282 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423284 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 15:13:29 +00:00
David M. Lee 27df9b73e2 Only install dahdi_span_config_hook if DAHDI is enabled
This patch changes the install to only install the hook script if
DAHDI is enabled. It also adds the script to the uninstall task, and
moves the DAHDI_UDEV_HOOK_DIR variable so that it's not between the
_MAKEOPTS variables and their comment.

This allows installs which specify a --prefix to work normally, as
long as they don't enable DAHDI.

Review: https://reviewboard.asterisk.org/r/3972/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423281 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 15:00:50 +00:00
George Joseph 0a2e6a1c7e config: bug: Fix SEGV in ast_category_insert when matching category isn't found
If you call ast_category_insert with a match category that doesn't exist, the
list traverse runs out of 'next' categories and you get a SEGV.  This patch
adds check for the end-of-list condition and changes the signature to return
an int for success/failure indication instead of a void.

The only consumer of this function is manager and it was also changed to use
the return value.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3993/
........

Merged revisions 423276 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423277 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423278 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-18 14:45:04 +00:00
Joshua Colp c48b609fb3 res_rtp_asterisk: Ensure that the thread terminating pj stuff is registered.
........

Merged revisions 423253 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423254 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423255 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-17 18:05:21 +00:00
Joshua Colp 85d7e44186 res_rtp_asterisk: Fix 100% CPU usage due to timer heap thread spinning.
Side note: I need a vacation.
........

Merged revisions 423210 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423211 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-16 21:03:59 +00:00
Joshua Colp 93f7c8a434 res_rtp_asterisk: Fix building when pjproject is not used.
........

Merged revisions 423207 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423208 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423209 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-16 20:35:34 +00:00
Scott Griepentrog 79b702f308 Voicemail: get correct duration when copying file to vm
Changes made during format improvements resulted in the
recording to voicemail option 'm' of the MixMonitor app
writing a zero length duration in the msgXXXX.txt file.

This change introduces a new function ast_ratestream(),
which provides the sample rate of the format associated
with the stream, and updates the app_voicemail function
for ast_app_copy_recording_to_vm to calculate the right
duration.

Review: https://reviewboard.asterisk.org/r/3996/
ASTERISK-24328 #close



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423192 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-16 16:32:49 +00:00
Joshua Colp 48d58da883 res_pjsip_session: Fix usage of wrong memory pool when creating local SDP.
........

Merged revisions 423172 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-16 12:12:00 +00:00
Joshua Colp 4098d87eef res_rtp_asterisk: Fix a myriad of TURN client issues.
1. The number of file descriptors an ioqueue instance can handle is fixed, so we
now spawn the required number to handle the load.
2. Our transport identifiers were exceeding the range supported by pjnath.
3. The TURN client did not set up client binding causing needless bandwidth usage.
4. The code no longer updates address information on each packet.
5. STUN traffic was getting looped back to Asterisk instead of going through the
TURN server.
6. Synchronization now ensures things are completely setup or destroyed.
7. Logging now reflects the target the TURN server is sending to/receiving from
on our behalf.

ASTERISK-23577 #close
Reported by: Jay Jideliov

ASTERISK-23634 #close
Reported by: Roman Skvirsky

Review: https://reviewboard.asterisk.org/r/3982/
........

Merged revisions 423150 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423151 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423152 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-16 11:10:37 +00:00
Walter Doekes 7efcca8de1 contrib: Fix verifyi typo in alembic DB script ps_transport table.
Reported by: Zogot (on IRC)
Patches:
  tmp.diff uploaded by Zogot, cleaned up by me.
........

Merged revisions 423128 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423129 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-15 10:49:12 +00:00
Walter Doekes 5840c47223 chan_sip: Clarify that sipdebug=yes cannot be undone by the CLI.
Document it in sip.conf.

ASTERISK-24249 #close
Reported by: Avinash Mohod

Review: https://reviewboard.asterisk.org/r/3926/
........

Merged revisions 423066 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 423067 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 423068 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-14 15:53:35 +00:00
Jonathan Rose 2e3f45e8e6 Realtime: Fix a bug that caused realtime destroy command to crash
Also has could affect with anything that goes through ast_destroy_realtime.
If a CLI user used the command 'realtime destroy <family>' with only a single
column/value pair, Asterisk would crash when trying to create a variable list
from a NULL value.

ASTERISK-24231 #close
Reported by: Niklas Larsson
Review: https://reviewboard.asterisk.org/r/3985/
........

Merged revisions 422984 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422985 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-12 16:09:50 +00:00
Mark Michelson 0f2bd8d855 Remove undocumented default behavior of ast_play_and_record_full acceptdtmf.
ast_play_and_record_full() has a parameter called "acceptdtmf" that is a
string of acceptable DTMF digits that may be pressed by a caller to end
and accept the recording.

ARI uses this function in order to perform recording, and it provides
options for what is passed as acceptdtmf to ast_play_and_record_full().
By default, ARI passes an empty string, with the intention that no DTMF
can be used to end the recording.

The problem is that ast_play_and_record_full() attempts to be "helpful"
by setting "#" as the acceptdtmf if an empty string or NULL pointer
has been passed in. With ARI, this results in unexpected behavior
occurring if you have attempted to intercept "#" yourself in order
to perform some other manipulation of the live recording.

This change removes the "helpful" behavior by no longer accepting
"#" as a default acceptdtmf if none is specified by the caller of
ast_play_and_record_full(). This makes the ARI scenario work as
expected.

The other callers of ast_play_and_record_full() are app_voicemail
and app_minivm, and in both cases, they pass an explicit "#" to
ast_play_and_record_full() as acceptdtmf, so they are unaffected
by this change.
........

Merged revisions 422964 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422965 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-11 22:16:54 +00:00
George Joseph 43c4529f15 config: bug: fix truncation of included config files on permissions error
ast_config_text_file_save() currently truncates include files as they
are processed.  If a subsequent include file or the main config file has
a permissions error that prevents writing, earlier include files are left
truncated resulting in a frantic search for backups.

This patch causes ast_config_text_file_save to check for write access
on all files before it truncates any of them.

Will be applied 1.8 > trunk.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3986/
........

Merged revisions 422900 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422903 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422904 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-10 16:04:23 +00:00
Sean Bright 8f15395e09 pjsip/config_auth.c: Add missing whitespace to log messages.
The errors generated when validating 'auth' settings are missing a space which
makes the messages a little confusing.
........

Merged revisions 422899 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422901 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-10 15:59:40 +00:00
Rusty Newton a8f290e208 Sounds/BuildSystem: Modifications to include new releases and Japanese language.
Modifying Makefile and sounds.xml to include new core 1.4.26 and extra 1.4.15
sound prompt releases, plus the new Japanese core sound prompts contributed
by QLOOG.

ASTERISK-23324
Reported by: Kevin McCoy
Tested by: Rusty Newton
........

Merged revisions 422789 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422790 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422791 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422883 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-09 20:01:11 +00:00
Mark Michelson 048560f330 Add note about configuring list_items on a single line.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422855 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-08 18:03:38 +00:00
Mark Michelson a8ef508f5e Add sample configuration for resource lists.
On review /r/3977, it was recommended to note in the
sample configuration about the size limitation for
resource lists. However, since there was no section in
the sample configuration at all for resource list
subscriptions, I decided to make a separate commit
where I have added the necessary sample configuration
as well as the size limitation warning.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422853 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-08 17:52:53 +00:00
Mark Michelson 9a5ee513d5 Pre-allocate transmission data buffer for RLS NOTIFY requests.
PJSIP, unless a constant is modified at compilation time, limits
SIP requests to 4000 bytes. Full-state RLS notifications can easily
exceed this limit with moderately small lists.

This changeset allows for Asterisk to work around this size limit by
performing its own allocation of the transmission data buffer. This
way, Asterisk can allocate a buffer that exceeds the built-in maximum.

We still impose our own limit of 64000 bytes, mainly because making
allocations larger than that is a bit absurd.

ASTERISK-24181 #close
Reported by Mark Michelson

Review: https://reviewboard.asterisk.org/r/3977



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422851 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-08 17:33:24 +00:00
Jonathan Rose 346877f6c9 res_pjsip_pubsub: Check supported headers for eventlist when subscribing to
resource list

https://wiki.asterisk.org/wiki/display/AST/Resource+List+Subscription+Test+Plan
According to the off-nominal plan, if evenlist support is not specified in a
SUBSCRIBE's supported header(s), that subscription should be rejected with an
error.

ASTERISK-23871
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/3960/diff/#index_header


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422836 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-08 15:41:25 +00:00
Matthew Jordan 128d187f38 main/cdr: Copy over location information during a fork
When a CDR is forked, a new CDR is created and appended to the CDR chain for
the Party A. The forked CDR starts life off as a clone of the last
non-finalized for the particular Party A. In the past, merely copying over
the snapshots for Party A/Party B would be sufficient. However, as the CDRs
now contain cached information from Party A - specifically application/data,
context, and extension - we need to copy that over during a fork as well.

Huzzah for unit tests catching this when the context/extension were derived
from a cached value on the CDR instead of on Party A.
........

Merged revisions 422769 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422770 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-06 22:49:43 +00:00
Matthew Jordan 8302bc7f0a main/rtp_engine: Format NTP timestamps as unsigned ints
On some systems, a timeval's tv_sec/tv_usec will be unsigned lont ints, as
opposed to long ints. When the RTP engine formats these as strings, it was
previously formatting them as signed integers, which can result in some
odd negative timestamp values (particularly on 32-bit systems). This patch
formats the values as unsigned long integers.
........

Merged revisions 422766 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-06 22:21:17 +00:00
Joshua Colp df77a7c5f0 res_pjsip_sdp_rtp: Fix retrieval of "ice-pwd" attribute if in session and not media stream.
........

Merged revisions 422746 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422747 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-06 19:12:17 +00:00
Matthew Jordan 0fbd9947e2 main/cdrs: Preserve context/extension when executing a Macro or GoSub
The context/extension in a CDR is generally considered the destination of a
call. When looking at a 2-party call CDR, users will typically be presented
with the following:

context    exten      channel     dest_channel app  data
default    1000       SIP/8675309 SIP/1000     Dial SIP/1000,,20

However, if the Dial actually takes place in a Macro, the current behaviour
in 12 will result in the following CDR:

context    exten      channel     dest_channel app  data
macro-dial s          SIP/8675309 SIP/1000     Dial SIP/1000,,20

The same is true of a GoSub:

context    exten      channel     dest_channel app  data
subs       dial_stuff SIP/8675309 SIP/1000     Dial SIP/1000,,20

This generally makes the context/exten fields less than useful.

It isn't hard to preserve these values in the CDR state machine; however, we
need to have something that informs us when a channel is executing a
subroutine. Prior to this patch, there isn't anything that does this.

This patch solves this problem by adding a new channel flag,
AST_FLAG_SUBROUTINE_EXEC. This flag is set on a channel when it executes a
Macro or a GoSub. The CDR engine looks for this value when updating a Party A
snapshot; if the flag is present, we don't override the context/exten on the
main CDR object. In a funny quirk, executing a hangup handler must *not* abide
by this logic, as the endbeforehexten logic assumes that the user wants to see
data that occurs in hangup logic, which includes those subroutines. Since
those execute outside of a typical Dial operation (and will typically have
their own dedicated CDR anyway), this is unlikely to cause any heartburn.

Review: https://reviewboard.asterisk.org/r/3962/

ASTERISK-24254 #close
Reported by: tm1000, Tony Lewis
Tested by: Tony Lewis
........

Merged revisions 422718 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422719 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 22:03:45 +00:00
Matthew Jordan ffffc0efd8 main/cdr: Fix crash/memory consumption in CDRs in multi-party bridge scenarios
This patch fixes an issue where CDRs would get stuck generating an infinite
number of CDRs, eventually crashing Asterisk (and consuming a lot of memory
along the way).

When a channel enters into a multi-party bridge, the CDR engine creates
mappings of each participant to each other participant, picking the 'A' party
as it goes. So, if we have four channels in a multi-party bridge (Alice, Bob,
Charlie, Denise), we would have something like:

Alice => Bob
Alice => Charlie
Alice => Denise
Bob => Charlie
Bob => Denise
Charlie => Denise

This works fine when participants enter the bridge a single time.

When a participant leaves a bridge, the CDRs for that channel are transitioned
to a finalized state.

The bug occurs if Bob rejoins. When the CDR engine creates mappings between the
channels, it walks through all the participants currently in the bridge, and
realizes that no one in the bridge can create a CDR with the channel (Bob).
As such it creates a new CDR for the candidate and appends it to that
candidate's chain. Unfortunately, on this particular code path, it doesn't
stop traversing the candidate's chain. Since we just added ourselves to the
chain, this causes the loop to keep going, constantly adding new CDRs.

This patch makes it so the engine bails when it creates a CDR match in this
case.

Review: https://reviewboard.asterisk.org/r/3964/

ASTERISK-24241 #close
Reported by: Deepak Singh Rawat
Tested by: Deepak Singh Rawat

ASTERISK-24208
Reported by: Frankie Chin
........

Merged revisions 422715 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 21:55:27 +00:00
Richard Mudgett b06cd2f048 func_channel.c: Add missing locking to some CHANNEL() requests.
* The CHANNEL() audionativeformat, videonativeformat, audioreadformat, and
audiowriteformat now need locking since the media format rework when
accessing the channel's format pointers.

* Increased the buffer size for CHANNEL() audionativeformat and
videonativeformat output strings since the allow=all can be a lengthy
list.

* Tweaked the CHANNEL() XML documentation for secure_bridge_signaling,
secure_bridge_media, and state.

* Ensured the output buffer is initialized for secure_bridge_signaling and
secure_bridge_media.

* Made use the locked_copy_string() macro instead of inlining it for trace
and checkhangup.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422700 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 20:35:37 +00:00
Jonathan Rose c56aa2d8f6 Dial API: Add a dial option to indicate the dialed channel will replace dialer
Adds an option to the dial API that marks an outgoing dial as replacing the dialing channel for the purpose of propagating accountcode. When it is used, AST_CHANNEL_REQUESTOR_REPLACEMENT is used instead of AST_CHANNEL_REQUESTOR_BRIDGE_PEER when setting accountcodes on the involved channels with ast_channel_req_accountcodes.

Review: https://reviewboard.asterisk.org/r/3968/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 20:11:35 +00:00
Jonathan Rose 43a35c2407 Call IDs: Fix appearance of call ID in core show channels when NULL
NULL call IDs were meant to appear as '(none)' but instead were showing
the contents of an uninitialized character buffer.

ASTERISK-24223
Review: https://reviewboard.asterisk.org/r/3979/
........

Merged revisions 422664 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422665 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 17:55:35 +00:00
Richard Mudgett 3ce9a8b4f4 devicestate.c: Minor tweaks
* In ast_state_chan2dev() use ARRAY_LEN() instead of a sentinel value in
chan2dev[].

* Fix some comments in chan_iax2.c.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422661 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 17:36:35 +00:00
Kinsey Moore e59ae8b0c9 Menuselect: Fix incorrect enabling on failed deps
This corrects a situation where menuselect can incorrectly enable a
module by default that has defaultenabled set to "no" and has
failed/non-selected dependencies. The bug is due to an inverted test
when checking for whether the given module should be set to enabled by
default on load.

Review: https://reviewboard.asterisk.org/r/3975/
Reported by: John Bigelow


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422646 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-05 13:28:13 +00:00
Jonathan Rose de07c80ede Manager: Require read permission for SYSTEM in order to send FullyBooted
Review: https://reviewboard.asterisk.org/r/3969/
........

Merged revisions 422584 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422625 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422626 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-04 21:23:22 +00:00
Joshua Colp 1bcb46c578 res_pjsip_transport_websocket: Fix crash when the Contact header is not a URI.
The code for changing the Contact header wrongly assumed that the Contact
would always contain a URI. This is incorrect.

ASTERISK-24271
Reported by: Dafi Ni
........

Merged revisions 422557 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422558 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-03 14:05:28 +00:00
Mark Michelson c98e04753b Resolve race condition where channels enter dialplan application before media has been negotiated.
Testsuite tests will occasionally fail because on reception of a 200 OK SIP response,
an AST_CONTROL_ANSWER frame is queued prior to when media has finished being
negotiated. This is because session supplements are called into before PJSIP's
inv_session code has told us that media has been updated. Sometimes the queued answer
frame is handled by the PBX thread before the ensuing media negotiations occur, causing
a test failure.

As it turns out, there is another place that session supplements could be called into, which is
after media has finished getting negotiated. What this commit introduces is a means for session
supplements to indicate when they wish to be called into when handling an incoming SIP response.
By default, all session supplements will be run at the same point that they were prior to this
commit. However, session supplements may indicate that they wish to be handled earlier than
normal on redirects, or they may indicate they wish to be handled after media has been negotiated.

In this changeset, two session supplements have been updated to indicate a preference for when
they should be run: res_pjsip_diversion executes before handling redirection in order to get
information from the Diversion header, and chan_pjsip now handles responses to INVITEs after
media negotiation to fix the race condition mentioned previously.

ASTERISK-24212 #close
Reported by Matt Jordan

Review: https://reviewboard.asterisk.org/r/3930
........

Merged revisions 422536 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422542 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-02 20:29:09 +00:00
Matthew Jordan 6033c16fc3 main/cli: Do not attempt to show CDR data for internal channels
Internal channels don't have CDRs. Querying the CDR engine for their variables
will make it cranky.
........

Merged revisions 422506 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422507 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-01 14:16:48 +00:00
Matthew Jordan 2d8c38cf9a res_stasis: Don't play MoH to channels by default when added to holding bridges
When ARI manipulates a bridge, it generally doesn't care what the mixing
technology is. Operations on a bridge initiated through ARI should perform
their action in generally the same way, regardless of the bridge's mixing
technology. While the mixing technology may determine how media flows to
channels, the actual operations on a bridge themselves should be the same.

Currently, this isn't the case with holding bridges. When a channel joins
without a role, MoH is started on that channel automatically. Subsequent bridge
operations that would stop MoH would fail (as there is no Announcer channel
playing MoH to the bridge). Starting MoH on the bridge will also create two
MoH streams: one from the MoH being played on the participant channel, and one
from the announcer channel. From the perspective of ARI users, this is
counter-intuitive - I would not expect MoH to be started for me. The mixing
technology determines how media is shared between participants, not the
application experience.

This patch does the following:
 * The Stasis bridge class now inspects channels as they are going into a
   bridge. If the bridge has a holding capability, and the channel has no
   roles, we give it a participant role and mark the default behaviour to have
   no entertainment. This allows addChannel operations to continue to set a
   participant role with an entertainment option if it felt like it (or could
   do it).
 * The music on hold channel is now Stasis approved (tm)

Review: https://reviewboard.asterisk.org/r/3929/

ASTERISK-24264 #close
Reported by: Samuel Galarneau
Tested by: Samuel Galarneau 
........

Merged revisions 422503 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422504 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-09-01 14:14:40 +00:00
George Joseph e0c66f5f14 confbridge: Add Duration to ConfbridgeList event
The ConfbridgeList event doesn't include how long the user has been a
member of the conference.  This patch adds Duration (seconds) which
is based on user->chan->answertime.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3955/
........

Merged revisions 422444 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422445 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-30 17:32:17 +00:00
George Joseph d4dd19cb77 manager: Make WaitEvent action respect eventfilters
A WaitEvent issued via an http session isn't respecting eventfilters defined
for the user. I just added a match_filter to the predicate that controls
astman_append.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3958/
........

Merged revisions 422439 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422440 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422441 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422442 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-30 17:24:02 +00:00
Matthew Jordan 34ea694094 doc: Add a manpage for the smsq utility
This patch adds a manpage for the smsq utility. Note that this is one of
the patches the Debian distro applies for the Asterisk project, as per
ASTERISK-24191.

Review: https://reviewboard.asterisk.org/r/3895/

ASTERISK-24171 #close
Reported by: Jeremy Laine
patches:
  smsq.8 uploaded by Jeremy Laine (License 6561)
........

Merged revisions 422376 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422377 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422378 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-29 19:40:09 +00:00
Matthew Jordan 636db18496 doc: Add a manpage for the aelparse utility
This patch adds a manpage for the aelparse utility. Note that this is one of
the patches the Debian distro applies for the Asterisk project, as per
ASTERISK-24191.

Review: https://reviewboard.asterisk.org/r/3896/

ASTERISK-24171 #close
Reported by: Jeremy Laine
patches:
  aelparse.8 uploaded by Jeremy Laine (License 6561)
........

Merged revisions 422371 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422372 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422373 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422374 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-29 19:35:02 +00:00
Scott Griepentrog bd99a96b21 The assertion that peer was not found on final event
message was being triggered on configuration reload.
This patch changes that case to just return instead.

Review: https://reviewboard.asterisk.org/r/3953/

Commited in trunk revision 422358



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422359 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-29 19:05:47 +00:00
Matthew Jordan ed4c696319 LICENSE: Clarify language in Asterisk's LICENSE to allow for linking to UniMRCP
The UniMRCP project distributes Asterisk modules that integrate Asterisk with
UniMRCP, and other Asterisk users use the UniMRCP library as well.
Unfortunately, the UniMRCP license is Apache 2.0, which per the Free Software
Foundation, is not a compatible license with the GPLv2.

"Please note that this license is not compatible with GPL version 2, because it
has some requirements that are not in that GPL version. These include certain
patent termination and indemnification provisions. The patent termination
provision is a good thing, which is why we recommend the Apache 2.0 license for
substantial programs over other lax permissive licenses."

On the other hand, UniMRCP is a great project and we'd like to let people use
it with Asterisk.

This patch updates the LICENSE text to allow users to link Asterisk with
UniMRCP and distribute the resulting binaries.
........

Merged revisions 422293 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422294 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422295 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 21:54:12 +00:00
Michael L. Young 64f1a6e830 chan_iax2: Fix Dynamic IAX2 Registrations After Temporary DNS Failure
The reporter on the issue found some issues when upgrading from version 10 to 11
on 55 hosts.

Two situations that can occur with dynamic registrations.

1.  With dnsmgr disabled, if the host is not resolvable we are not trying to
    resolve the host again when it is time to attempt to register again.  This
    results in never registering to the host.
2.  With dnsmgr enabled, when the host is temporarily not resolvable the
    address is set to 0.0.0.0:0 and then when the host is resolvable the port
    is not being restored and stays set to 0.

This patch resolves these two issues by:

* Storing the hostname so that it can be used for resolving with DNS.
* Resolve the hostname on the next scheduled attempt to register.
* Storing the port used to reach the host so that when the hostname is
  resolvable again, we can set the port again if the port is still unset after
  looking up the host.

ASTERISK-23767 #close
Reported by: David Herselman
Tested by: David Herselman, Michael L. Young
Patches:
    asterisk-23767-dns_reg_retry_and_set_port_11_v3.diff
                                     uploaded by Michael L. Young (license 5026)

Review: https://reviewboard.asterisk.org/r/3856/
........

Merged revisions 422274 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422275 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 20:30:54 +00:00
Richard Mudgett 6e698ef440 Added ConfBridge AMI event note to UPGRADE.txt.
........

Merged revisions 422255 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422256 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 17:25:16 +00:00
Mark Michelson 7918e67d35 Fix bug that did not allow for multiple batched RLS notifications to be sent.
A misunderstanding of how the scheduler worked caused further batched notifications
beyond the first not to get scheduled. Now we reset our scheduler ID to -1 after
the batched notification is sent. This way, further notifications can be scheduled
when they arise.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 15:49:44 +00:00
Richard Mudgett a4700eee6a res/res_pjsip/pjsip_options.c: Eliminate excessive RAII_VAR usage.
* Fix off nominal ref leak in find_or_create_contact_status().

* Add missing NULL check of status in update_contact_status() and
init_start_time().
........

Merged revisions 422214 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422215 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 00:36:23 +00:00
Richard Mudgett a02d8a0681 sched: Fix typo and whitespace change.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-28 00:15:03 +00:00
George Joseph 372236cc2a confbridge: Add 'Admin' param to join, leave, mute, unmute and talking events
Currently there's no way to tell if a user is an admin or not when receiving
the join, leave, mute, unmute and talking events.  This patch adds that
capability.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3950/
........

Merged revisions 422176 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422177 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-27 17:29:51 +00:00
Kinsey Moore a4a58c2771 CallerID: Fix parsing of malformed callerid
This allows the callerid parsing function to handle malformed input
strings and strings containing escaped and unescaped double quotes.
This also adds a unittest to cover many of the cases where the parsing
algorithm previously failed.

Review: https://reviewboard.asterisk.org/r/3923/
Review: https://reviewboard.asterisk.org/r/3933/
........

Merged revisions 422112 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 422113 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 422114 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422154 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-27 15:31:35 +00:00
George Joseph e985cb076d confbridge: Make kick, mute and unmute handle channel targets consistently.
Kick, mute and unmute were a little inconsistent in their handling of channel
targets.  This patch cleans that up by insuring they all handle the 'all'
target consistently and adds the 'participants' target which acts on
non-admins.  Documentation for kick was also cleaned up as it never
supported partial channel names.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3944/
........

Merged revisions 422090 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422091 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-26 23:28:51 +00:00
Mark Michelson 7c4ed8cc89 Fix race condition in the scheduler when deleting a running entry.
When scheduled tasks run, they are removed from the heap (or hashtab).
When a scheduled task is deleted, if the task can't be found in the
heap (or hashtab), an assertion is triggered. If DO_CRASH is enabled,
this assertion causes a crash.

The problem is, sometimes it just so happens that someone attempts
to delete a scheduled task at the time that it is running, leading
to a crash. This change corrects the issue by tracking which task
is currently running. If that task is attempted to be deleted,
then we mark the task, and then wait for the task to complete.
This way, we can be sure to coordinate task deletion and memory
freeing.

ASTERISK-24212
Reported by Matt Jordan

Review: https://reviewboard.asterisk.org/r/3927
........

Merged revisions 422070 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422071 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-26 22:13:57 +00:00
Richard Mudgett 00ffbc40e1 res_musiconhold.c: Release any format refs before memset().
* Clear the channel music_state pointer before destroying the music_state
object for safety.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@422037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-25 16:44:37 +00:00
Richard Mudgett d6ea6f5848 res_musiconhold: Fix MOH restarting where it left off from the last hold.
Restore code removed by https://reviewboard.asterisk.org/r/3536/ that
introduced a regression that prevents MOH from restarting were it left off
the last time.

ASTERISK-24019 #close
Reported by: Jason Richards
Patches:
      jira_asterisk_24019_v1.8.patch (license #5621) patch uploaded by rmudgett

Review: https://reviewboard.asterisk.org/r/3928/
........

Merged revisions 421976 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421977 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421978 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421979 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-25 16:13:45 +00:00
Joshua Colp 42fe127009 res_pjsip_transport_websocket: Attach the Websocket module on outgoing INVITEs.
In order to alter the Contact header on in-dialog requests and responses the
Websocket module must be attached on outgoing INVITEs. The Contact header is
modified so that the PJSIP transport layer can find and use the existing
Websocket connection based on the source IP address, port, and transport.

ASTERISK-24143 #close
Reported by: Aleksei Kulakov
........

Merged revisions 421955 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421956 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-24 19:36:05 +00:00
Joshua Colp e86ee8e76b res_pjsip_transport_websocket: Fix a progressive memory growth.
The packet structure used to receive messages was using the transport
pool. This meant that for each parsing the pool would grow accordingly.
Since memory can not be reclaimed without resetting it this would
cause the memory pool to grow and grow.

This change uses a specific memory pool for the packet structure and
resets it to a fresh state after the message has been received and
handled.
........

Merged revisions 421939 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-24 19:20:24 +00:00
Joshua Colp 3592d4b398 res_pjsip_transport_websocket: Ensure secure Websocket clients can be called.
This change enforces the transport in the Contact header for Websocket clients.
Previously a client may provide a transport of 'ws' when it is actually using
a transport of 'wss'. This would cause outgoing calls to fail as the existing
connection could not be found.
........

Merged revisions 421931 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421932 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-24 18:53:06 +00:00
Joshua Colp 6fa02d1bfd chan_sip: Use the server reflexive ICE candidate RTCP port as provided.
This code originally worked around an issue within res_rtp_asterisk itself.
The wrong socket was being used for the STUN check for RTCP, causing the
port to be the same as RTP. This was subsequently fixed and the RTCP port
provided for the ICE candidate is correct and does not need to be incremented.

ASTERISK-23997 #close
Reported by: Badalian Vyacheslav
Patches:
 plus1.diff submitted by Badalian Vyacheslav (license 5249)
........

Merged revisions 421909 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421910 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-24 17:21:38 +00:00
Mark Michelson 16c96760e7 Fix a locking inversion in MixMonitor.
We need to unlock the audiohook before trying to lock
the channel, since the correct locking order is channel
then audiohook.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421882 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-22 16:56:18 +00:00
Jonathan Rose 712907eec6 ARI: Fix a crash caused by hanging during playback to a channel in a bridge
ASTERISK-24147 #close
Reported by: Edvin Vidmar
Review: https://reviewboard.asterisk.org/r/3908/
........

Merged revisions 421879 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421880 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-22 16:44:21 +00:00
Matthew Jordan 50381d2c77 main/message: Add a new-line to a DEBUG message
........

Merged revisions 421859 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421860 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-22 14:08:34 +00:00
Richard Mudgett 6684442945 res_musiconhold.c: Remove obsolete REF_DEBUG code.
Remove unneeded code that writes to the wrong file location in an obsolete
format.
........

Merged revisions 421799 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421800 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421801 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 22:07:41 +00:00
Mark Michelson a457acff46 Switch from hostname to an IP address in the SDP origin line.
Using the hostname in the SDP origin line may not satisfy the requirement
of RFC 4566 that we use a FQDN or IP address. This change has us use the
same information from the SDP connection line if possible. If not possible,
we'll use the configured media address. And if that's not possible, we use
the result of a PJLIB call to get the IP address of ourself.

ASTERISK-23994 #close
Reported by Private Name

Review: https://reviewboard.asterisk.org/r/3925
........

Merged revisions 421796 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 21:42:50 +00:00
Mark Michelson 5de3fa2c60 Ensure after-bridge behavior is correct when moving from Stasis to a non-Stasis bridge.
Because of the departable state of channels that enter Stasis bridges, Stasis has to
take responsibility for directing the channel to its intended after-bridge destination
if the channel moves from a Stasis bridge to a non-Stasis bridge. This change ensures
that when such a move occurs, when the channel leaves the bridging system, any after
bridge gotos are honored.

Review: https://reviewboard.asterisk.org/r/3920
........

Merged revisions 421792 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421794 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 21:36:00 +00:00
Mark Michelson a9befb9eec Let's try checking the name and number, instead of the name twice.
........

Merged revisions 421789 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421790 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 21:27:45 +00:00
Jonathan Rose 2903df52f3 res_musiconhold: Fix reference leaks caused when reloading with REF_DEBUG set
Due to a faulty function for debugging reference decrementing, it was possible
to reduce the refcount on the wrong object if two moh classes of the same name
were in the moh class container.

(closes issue ASTERISK-22252)
Reported by: Walter Doekes
Patches:
    18_moh_debug_ref_patch.diff Uploaded by Jonathan Rose (license 6182)
........

Merged revisions 398937 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421777 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421779 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421788 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 21:25:07 +00:00
Mark Michelson b806440959 Improve consistency of party ID privacy usage.
Prior to this change, the Remote-Party-ID header took the position of
"If caller name and number are not explicitly allowed, then they are private"
and P-Asserted-Identity took the position of
"Caller name and number are only private if marked explicitly so"

Now both mechanisms of conveying party identification use the former approach.
........

Merged revisions 421778 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 21:18:21 +00:00
Matthew Jordan 47c37abb93 chan_sip: Don't use port derived from fromdomain if it isn't set
If a user does not provide a port in the fromdomain setting, chan_sip will set
the fromdomainport to STANDARD_SIP_PORT (5060). The fromdomainport value will
then get used unilaterally in certain places. This causes issues with TLS,
where the default port is expected to be 5061.

This patch modifies chan_sip such that fromdomainport is only used if it is
not the standard SIP port; otherwise, the port from the SIP pvt's recorded
self IP address is used.

Review: https://reviewboard.asterisk.org/r/3893/

ASTERISK-24178 #close
Reported by: Elazar Broad
patches:
  fromdomainport_fix.diff uploaded by Elazar Broad (License 5835)
........

Merged revisions 421717 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421718 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421719 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421720 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 17:34:43 +00:00
Matthew Jordan aa1dd38e54 ARI: Fix implicit answer when playback is initiated on unanswered channel
When issuing a POST /channels/{channel_id}/play on a channel that is not
yet answered, ARI is supposed to:
* Queue up an AST_CONTROL_PROGRESS on the channel
* Start up the playback of the media

Instead, we sneak an answer on the channel right before starting playing media.

This is due to ARI's usage of control_streamfile. This function implicitly
answers the channel (and doesn't give ARI the option to stop it). The answering
of the channel here is probably unnecessary:
* app_voicemail, by far the biggest consumer of this function, always answers
  the channels anyway
* control stream file (in res_agi) and ControlPlayback probably shouldn't be
  implicitly answering the channel. Answering should not be tied directly to
  playing back media.

As it turns out, the answering of the channel here is pretty old:
356042    twilson       if (ast_channel_state(chan) != AST_STATE_UP) {
  3087      anthm               res = ast_answer(chan);
180259   tilghman       }

(As in, ancient?)

Note that others ran into this problem and commented about it on various
mailing lists.

Review: https://reviewboard.asterisk.org/r/3907/

ASTERISK-24229 #close
Reported by: Matt Jordan
........

Merged revisions 421695 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 15:24:09 +00:00
Matthew Jordan bc0536e009 Clean up files that do not end with newlines
Trivial patch to add new lines to several files missing them. This fixes
warnings when compiling with gcc 4.1.2 on CentOS 5.

ASTERISK-24245 #close
Reported by: Shaun Ruffell
patches:
  0002-Trivial-addition-of-newlines-at-end-of-three-files.patch uploaded by Shaun Ruffell (License 5417)
........

Merged revisions 421677 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421678 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 14:52:06 +00:00
Matthew Jordan 12341c90c1 uri: Quiet warning about type qualifiers ignored on function return type
This patch fixes gcc warnings that occur due to the type qualifier 'const'
being ignored on a return type of int.

ASTERISK-24246 #close
Reported by: Shaun Ruffell
patches:
  0001-main-uri-Quiet-warning-about-ignored-attribute-on-re.patch uploaded by Shaun Ruffell (License 5417)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-21 14:39:27 +00:00
Richard Mudgett e8b72c6f4b chan_pjsip: Update media translation paths when new SDP negotiated.
On a SIP reinvite that changes media strams, the PJSIP channel driver was
flooding the log with "Asked to transmit frame type %s, while native
formats is %s" warnings.

* Fixes PJSIP not setting up translation paths when the formats change on
a reinvite.  AFS-63 was effectively reintroduced because of the media
formats work.  res_pjsip_sdp_rtp.c:set_caps()

* Improved the unexpected frame format WARNING message to include more
information.

* Added protective locking while altering formats on a channel.  Reworked
set_format() to simplify and protect the formats under manipulation.

* Restored some code that got lost in the media_formats work.
(channel.c:set_format() and res_pjsip_sdp_rtp.c:set_caps())

AFS-137 #close
Reported by: Mark Michelson

Review: https://reviewboard.asterisk.org/r/3906/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421645 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-20 22:49:32 +00:00
Richard Mudgett ab526502e6 cli.c: Fix tab completion of "module load" when MALLOC_DEBUG is enabled.
filename_completion_function() returns memory that was not allocated by
the MALLOC_DEBUG allocation tracker so the memory must be freed by
ast_std_free().
........

Merged revisions 421600 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421602 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421608 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421616 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-20 22:21:43 +00:00
Mark Michelson 12891b608b Set the role for inbound subscriptions correctly.
This was causing the AMI show_subscriptions test in
the testsuite to fail since all subscriptions were being
seen as subscribers instead of notifiers.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-20 20:40:33 +00:00
Mark Michelson 04876df6a2 Move evaluation of set_var options in pjsip to the end of channel initialization.
This allows for set_var to override certain defaults such as caller ID and codec
values. This also fixes a test suite regression. The "set_var" test suite test attempted
to use set_var to override caller ID, but a recent change caused that to no longer work.
........

Merged revisions 421565 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421566 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-20 20:04:08 +00:00
Kinsey Moore 04f478212c Stasis: Add information to blind transfer event
When a blind transfer occurs that is forced to create a local channel
pair to satisfy the transfer request, information about the local
channel pair is not published. This adds a field to describe that
channel to the blind transfer message struct so that this information
is conveyed properly to consumers of the blind transfer message.

This also fixes a bug in which Stasis() was unable to properly identify
the channel that was replacing an existing Stasis-controlled channel
due to a blind transfer.

Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/3921/
........

Merged revisions 421537 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-20 13:04:30 +00:00
Mark Michelson bc58898587 Alter documentation for callerid_privacy to use correct values.
........

Merged revisions 421485 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421488 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-19 20:28:23 +00:00
Mark Michelson 6e5ca3fe5b Fix compilation error on certain versions of GCC.
........

Merged revisions 421447 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421448 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-19 19:55:06 +00:00
Kinsey Moore 4a22e1d865 AMI Docs: Fix Status channel parameter optionality
........

Merged revisions 421442 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421443 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421444 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421445 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-19 19:42:34 +00:00
Jonathan Rose 5c35544a23 ARI: Fix a bug where /channels/{channelID}/continue doesn't execute PBX
If /channels/{channelID}/continue is called on a channel that was originated
without a PBX (such as the ARI command POST channel with a stasis application
argument), the channel will not start dialplan execution. This patch will now
run the PBX out of the stasis execution if the channel doesn't currently have
an active PBX upon continuing.

ASTERISK-24043 #close
Reported by: Krandon Bruse
Review: https://reviewboard.asterisk.org/r/3917/
Patches:
    stasis-continue.diff submitted by Krandon Bruse (license 6631)
........

Merged revisions 421416 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-19 16:28:31 +00:00
Richard Mudgett 3b5127ba69 chan_pjsip: Fix attended transfer connected line name update.
A calls B
B answers
B SIP attended transfers to C
C answers, B and C can see each other's connected line information
B completes the transfer
A has number but no name connected line information about C
  while C has the full information about A

I examined the incoming and outgoing party id information handling of
chan_pjsip and found several issues:

* Fixed ast_sip_session_create_outgoing() not setting up the configured
endpoint id as the new channel's caller id.  This is why party A got
default connected line information.

* Made update_initial_connected_line() use the channel's CALLERID(id)
information.  The core, app_dial, or predial routine may have filled in or
changed the endpoint caller id information.

* Fixed chan_pjsip_new() not setting the full party id information
available on the caller id and ANI party id.  This includes the configured
callerid_tag string and other party id fields.

* Fixed accessing channel party id information without the channel lock
held.

* Fixed using the effective connected line id without doing a deep copy
outside of holding the channel lock.  Shallow copy string pointers can
become stale if the channel lock is not held.

* Made queue_connected_line_update() also update the channel's
CALLERID(id) information.  Moving the channel to another bridge would need
the information there for the new bridge peer.

* Fixed off nominal memory leak in update_incoming_connected_line().

* Added pjsip.conf callerid_tag string to party id information from
enabled trust_inbound endpoint in caller_id_incoming_request().

AFS-98 #close
Reported by: Mark Michelson

Review: https://reviewboard.asterisk.org/r/3913/
........

Merged revisions 421400 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-19 16:11:38 +00:00
Damien Wedhorn 0a33671e0c Skinny: Fixup compile warning for non dev-mode.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421376 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-18 21:10:41 +00:00
George Joseph a8fc671c13 func_config: Change 'Not Found' message from ERROR to DEBUG
When you call the CONFIG dialplan function with the name of a variable that
doesn't exist in the target context you get an ERROR.  This does nothing but
clutter up the logs with messages that may be perfectly acceptable.  Just
because a variable wasn't in the context doesn't mean it's an error.  Maybei
t's optional or just needs to be defaulted or ignored.

This patch changes the log level from ERROR to DEBUG.  If a dialplan developer
wants to debug their dialplan they still canby setting the console debug level 
as needed.

Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3919/
........

Merged revisions 421327 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421328 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421329 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-18 20:19:42 +00:00
Matthew Jordan 7eef81c370 res/ari/resource_channels: Fix compilation issue
Forgot a parameter. Whoops.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421312 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-18 01:13:41 +00:00
Matthew Jordan a6cf7b53da res/ari/resource_channels: Don't return allocation failure on failed function
If a function fails to execute, it is most likely due to one of two reasons:
(1) The function doesn't exist or can't be read from
(2) The function is dangerous and is restricted based on the user's permissions

Currently we return allocation failure, which is incorrect. This updates the
reason code to more accurately reflect why the request failed.

ASTERISK-24215


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421311 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-18 01:11:28 +00:00
Matthew Jordan b9906d8438 apps/app_meetme: Fix crash when publishing MeetMe messages with no channel
The same function, meetme_stasis_generate_msg, handles creating and publishing
Stasis message both when there are channels in the MeetMe conference and when
there are no channels in the conference. When the performance improvement was
made to use cached snapshots, this created a situation where Asterisk would
crash: obtaining a cached snapshot is not NULL tolerant.

This patch restores the previous implementation, which used a NULL safe set
of routines to produce a blob containing the channel snapshot (if available)
and information about the MeetMe conference.

ASTERISK-24234 #close
Reported by: Shaun Ruffell
Tested by: Shaun Ruffell
........

Merged revisions 421270 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-17 23:28:56 +00:00
Matthew Jordan f5d4e581f3 apps/app_dial: Fix Dial 'z' option
The 'z' option is supposed to disable the dial timeout in the case of a call
forward. Unfortunately, the wrong timeout timer was passed to the do_forward
function, resulting in the option not working.

ASTERISK-24225 #close
Reported by: dimitripietro
Tested by: dimitripietro
patches:
  jira_asterisk_24225_v1.8.patch uploaded by rmudgett (License 5621)
  jira_asterisk_24225_v11.patch uploaded by rmudgett (License 5621)
........

Merged revisions 421232 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421233 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421234 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421235 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-17 23:09:43 +00:00
Matthew Jordan 524cb990a3 configure: Undefine FORTIFY_SOURCE prior to defining it for patched gcc
Some distributions of Linux patch gcc to define FORTIFY_SOURCE when gcc is
executed with optimization. This "help" unfortunately results in re-definition
warnings when FORTIFY_SOURCE is later defined in Asterisk's build system. This
patch undefines FORTIFY_SOURCE prior to defining it to prevent this warning.

Review: https://reviewboard.asterisk.org/r/3912/

ASTERISK-24032 #close
Reported by: Kilburn
Tested by: Kilburn, wdoekes
patches:
  1.8.diff uploaded by cloos (License 5956)
  10.diff uploaded by cloos (License 5956)
  11.diff uploaded by cloos (License 5956)
  12.diff uploaded by cloos (License 5956)
  13.diff uploaded by cloos (License 5956)
........

Merged revisions 421227 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421228 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421229 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-17 22:34:19 +00:00
Joshua Colp 66fb08e26d res_http_websocket: Include query parameters in client connection requests.
Review: https://reviewboard.asterisk.org/r/3914/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421210 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-17 16:10:29 +00:00
Jonathan Rose 2c013ae774 Bridging: Fix a behavioral change when checking if a channel is leaving a bridge
r420934 introduced some failures in the test suite.  Upon investigating, it was
discovered that differences in the way we were evaluating whether a channel was in
the process of leaving a bridge were causing some reinvites not to occur (mostly
reinvites back to Asterisk when ending a call). This patch fixes that behavioral
change.

ASTERISK-24027 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/3910/
........

Merged revisions 421186 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421187 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-15 17:08:49 +00:00
Matthew Jordan 544e092b2d app_voicemail/app: Remove test events that were duplicated by r421059
Moving the test event raised when a file is played back (which occurred in
r421059) broke the ever loving snot out of the voicemail tests. This caused
duplicate test events to get raised, as app_voicemail and main/app were raising
events prior to call ast_streamfile. The voicemail tests did not enjoy getting
multiple events.

Since raising the playback event in ast_streamfile is far more useful to the
vast majority of tests, this patch keeps the call there and simply removes the
extraneous calls that duplicated the event.
........

Merged revisions 421125 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421164 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421165 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421166 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-15 15:45:27 +00:00
Matthew Jordan cce3d9ec5c res/res_hep_rtcp: Remove dependency on PJSIP
The res_hep_rtcp module was incorrectly including <pjsip.h>. This didn't need
to be included, as the module does not using PJPROJECT any fashion.
Unfortunately, because res_hep_rtcp did not include pjsip in its MODULEINFO as
a dependency, this also meant that res_hep_rtcp will fail to compile on a
system without PJPROJECT.

This patch removes the include.

Thanks to Damien Wedhorn for pointing this out in #asterisk-dev.

ASTERISK-24236 #close
Reported by: Damien Wedhorn, Matt Jordan
Tested by: Damien Wedhorn
........

Merged revisions 421064 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-14 21:16:05 +00:00
Matthew Jordan fa02e06132 main/file: Move test event to emit PLAYBACK event more consistently
This is being done in advance of the test for ASTERISK-23953
........

Merged revisions 421059 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421060 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 421061 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-14 20:58:54 +00:00
Matthew Jordan 6e4d44c2a1 cel: Make sure channels in extra fields include their unique IDs as well
CEL typically tracks a lot of information using the unique ID of the channel.
This is typically needed due to tying events together using the linked ID of
the various channels involved in a "call", which is derived from the channel ID
of the oldest channel involved in a bridge (or in the case of a Dial, the
parent channel).

Previously, we had updated the extra fields to include the involved channel
names, but forgot to put in the unique ID. This patch corrects that error.
........

Merged revisions 421037 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421042 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-14 19:20:51 +00:00
Richard Mudgett ee93b5a314 ARI: Originate to app local channel subscription code optimization.
Reduce the scope of local_peer and only get it if the ARI originate is
subscribing to the channels.

Review: https://reviewboard.asterisk.org/r/3905/
........

Merged revisions 421009 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421010 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-14 16:32:04 +00:00
Richard Mudgett 7eb4ee9b2f channel_internal_api.c: Replace some code with ao2_replace().
Use ao2_replace() instead of ao2_cleanup(); ao2_bump().

ao2_replace() has the advantange of not altering the ref count if the
replaced pointer is the same.

Review: https://reviewboard.asterisk.org/r/3904/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420992 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-14 15:54:47 +00:00
Richard Mudgett cd81f920a4 res_pjsip_send_to_voicemail.c: Fix svn file properties.
........

Merged revisions 420956 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420957 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-13 17:04:22 +00:00
Kinsey Moore e8a5847742 PJSIP: Prevent crash no-URI contacts
This prevents a crash from occurring when a contact with no URI is used
for the creation of an outbound out-of-dialog request with no
associated endpoint.
........

Merged revisions 420949 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-13 16:53:09 +00:00
Jonathan Rose cd28e5dda2 Bridges: Fix feature interruption/unintended kick caused by external actions
If a manager or CLI user attached a mixmonitor to a call running a dynamic
bridge feature while in a bridge, the feature would be interrupted and the
channel would be forcibly kicked out of the bridge (usually ending the call
during a simple 1 to 1 call). This would also occur during any similar action
that could set the unbridge soft hangup flag, so the fix for this was to
remove unbridge from the soft hangup flags and make it a separate thing all
together.

ASTERISK-24027 #close
Reported by: mjordan
Review: https://reviewboard.asterisk.org/r/3900/
........

Merged revisions 420934 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420940 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-13 16:07:22 +00:00
Kinsey Moore e6022f9f97 AMI: Improve documentation for Status action
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420919 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-13 14:24:45 +00:00
Walter Doekes 602aef327e logger: Don't store verbose-magic in the log files.
In r399267, the verbose2magic stuff was edited. This time it results
in magic characters in the log files for multiline messages.

In trunk (and 13) this was fixed by the "stripping" of those
characters from multiline messages (in r414798).

This fix is altered to actually strip the characters and not replace
them with blanks.

Review: https://reviewboard.asterisk.org/r/3901/
Review: https://reviewboard.asterisk.org/r/3902/
........

Merged revisions 420897 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 420898 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-13 07:52:56 +00:00
Richard Mudgett f0a65379f5 chan_sip: Fix type mismatch when the format is changed.
Symptom is most likely an invalid ao2 object bad magic number message or a
less likely crash.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420881 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-12 23:43:51 +00:00
Richard Mudgett bede29b762 res_stasis_snoop.c: Fix off nominial exit path leaving Snoop channel locked and not hungup.
* Made use ast_copy_string() instead of strcpy() for snoop uniqueid for
safety.  There is no guarantee that the max channel uniqueid length will
remain the same as the snoop uniqueid space.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-12 23:33:00 +00:00
Joshua Colp a2bbe5d360 app_voicemail: Fix the "test_voicemail_vm_info" unit test.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420856 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-12 11:17:20 +00:00
Richard Mudgett a0b7f2ce42 res/stasis/command.c: Fix recent commit using spaces instead of tabs.
........

Merged revisions 420836 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420837 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 20:53:44 +00:00
Matthew Jordan e30904854e AMI/ARI: Update version to 2.5.0/1.5.0 respectively
This is to support the backwards compatible changes made in the next version
of Asterisk.
........

Merged revisions 420805 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 18:50:46 +00:00
Kinsey Moore ccb2f94691 Stasis: Use the correct return value
Return the correct value instead of always returning 0 when setting
internal status on unreal channels.

Reported by: Richard Mudgett
........

Merged revisions 420802 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 18:46:09 +00:00
Kinsey Moore 406dded64c Stasis: Allow internal channels directly into bridges
The patch to catch channels being shoehorned into Stasis() via external
mechanisms also happens to catch Announcer and Recorder channels
because they aren't known to be stasis-controlled channels in the usual
sense. This marks those channels as Stasis()-internal channels and
allows them directly into bridges.

Review: https://reviewboard.asterisk.org/r/3903/
........

Merged revisions 420795 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 18:37:14 +00:00
Mark Michelson ef70c08dc7 Improve call forwarding reporting, especially with regards to ARI.
This patch addresses a few issues:

1) The order of Dial events have been changed when performing a call forward.
   The order has now been altered to
    1) Dial begins dialing channel A.
    2) When A forwards the call to B, we issue the dial end event to channel
       A, indicating the dial is being canceled due to a forward to B.
    3) When the call to channel B occurs, we then issue a new dial begin to
       channel B.

2) Call forwards are now reported on the calling channel, not the peer channel.

3) AMI DialEnd events have been altered to display the extension the call is
   being forwarded to when relevant.

4) You can now get the values of channel variables for channels that are not
   currently in the Stasis application. This brings the retrieval of channel
   variables more in line with the rest of channel read operations since they
   may be performed on channels not in Stasis.

ASTERISK-24134 #close
Reported by Matt Jordan

ASTERISK-24138 #close
Reported by Matt Jordan

Patches:
	forward-shenanigans.diff uploaded by Matt Jordan (License #6283)

Review: https://reviewboard.asterisk.org/r/3899



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420794 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 18:32:37 +00:00
Mark Michelson 1b500d2fa1 Fix crashing unit tests with regards to RLS.
The unit tests require a sorcery.conf file that has been
set up to store resource lists in memory rather than retrieving
from configuration.

With a setup that is not conducive to running the tests, a fault
in sorcery currently causes Asterisk to crash when attempting to
run any of the tests.

To get around the crash, this adds a function that verifies the
current environment and marks the tests as "not run" if the setup
is not correct.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420779 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 17:38:31 +00:00
Mark Michelson c43c22fe89 Fix crash encountered by the testsuite.
Running testsuite tests locally produced no errors, but when
run using the continuous integration framework, crashes occurred.

The crashes occurred due to a refcounting error that had been fixed
for a similar situation.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 15:59:17 +00:00
Matthew Jordan cc7853f40f res_hep: Remove disabling of modules
These modules were originally specified as being disabled, as they were
introduced midstream in Asterisk 12. That makes it nicer for folks who are
upgrading to a new release in the middle of Asterisk 12. That's not the case
for Asterisk 13: it's a brand new release. There's no reason to have the
modules disabled by default in that case.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 13:57:25 +00:00
Walter Doekes b94fc06966 general: Fix memory Corruption in __ast_string_field_ptr_build_va.
If the space left in a stringfield is between 0 and
(alignof(ast_string_field_allocation)-1) adding new data would cause
memory corruption, because we would assume enough space (unsigned
underrun).

Thanks Arnd Schmitter for reporting and finding out the cause!

ASTERISK-23508 #close
Reported by: Arnd Schmitter
Tested by: Arnd Schmitter, JoshE

Review: https://reviewboard.asterisk.org/r/3898/
........

Merged revisions 420680 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 420715 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 420716 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420717 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 10:40:10 +00:00
Walter Doekes 4e07345c28 tcptls: Avoid compiler warning on non-dev-mode.
........

Merged revisions 420654 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 420655 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 420656 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 09:54:20 +00:00
Matthew Jordan 6c34de22b5 funcs/func_jitterbuffer: Tweak documentation
This patch merely reformats and cleans up a bit of the jitterbuffer
documentation for the wiki.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420639 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 01:31:31 +00:00
Matthew Jordan 95871451f6 app_queue: Add RealTime support for queue rules
This patch gives the optional ability to keep queue rules in RealTime. It is
important to note that with this patch:
 (a) Queue rules in RealTime are only examined on module load/reload
 (b) Queue rules are loaded both from the queuerules.conf file as well as the
     RealTime backend
To inform app_queue to examine RealTime for queue rules, a new setting has been
added to queuerules.conf's general section "realtime_rules". RealTime queue
rules will only be used when this setting is set to "yes".

The schema for the database table supports a rule_name, time, min_penalty, and
max_penalty columns. min_penalty and max_penalty can be relative, if a '-' or
'+' literal is provided. Otherwise, the penalties are treated as constants.

For example:
rule_name, time, min_penalty, max_penalty
'default', '10', '20', '30'
'test2', '20', '30', '55'
'test2', '25', '-11', '+1111'
'test2', '400', '112', '333'
'test3', '0', '4564', '46546'
'test_rule', '40', '15', '50'

which would result in :

Rule: default
 - After 10 seconds, adjust QUEUE_MAX_PENALTY to 30 and adjust
   QUEUE_MIN_PENALTY to 20
Rule: test2
 - After 20 seconds, adjust QUEUE_MAX_PENALTY to 55 and adjust
   QUEUE_MIN_PENALTY to 30
 - After 25 seconds, adjust QUEUE_MAX_PENALTY by 1111 and adjust
   QUEUE_MIN_PENALTY by -11
 - After 400 seconds, adjust QUEUE_MAX_PENALTY to 333 and adjust
   QUEUE_MIN_PENALTY to 112
Rule: test3
 - After 0 seconds, adjust QUEUE_MAX_PENALTY to 46546 and adjust
   QUEUE_MIN_PENALTY to 4564
Rule: test_rule
 - After 40 seconds, adjust QUEUE_MAX_PENALTY to 50 and adjust
   QUEUE_MIN_PENALTY to 15

If you use RealTime, the queue rules will be always reloaded on a module
reload, even if the underlying file did not change. With the option disabled,
the rules will only be reloaded if the file was modified.

Review: https://reviewboard.asterisk.org/r/3607/

ASTERISK-23823 #close
Reported by: Michael K
patches:
  app_queue.c_realtime_trunk.patch uploaded by Michael K (License 6621)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420624 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-11 00:07:22 +00:00
Matthew Jordan 8b411f710b Update CHANGES file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-10 22:00:38 +00:00
Matthew Jordan af6f95f64c Update UPGRADE.txt file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-10 21:35:18 +00:00
Jason Parker 7438e38f22 Fix build in devmode.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420592 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 20:08:26 +00:00
Jason Parker 2b804661bc app_voicemail: Add the ability to specify multiple email addresses.
ASTERISK-24045
Reported by: Jacob Barber
Review: https://reviewboard.asterisk.org/r/3833/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 19:15:27 +00:00
Matthew Jordan 02fc8e2449 chan_sip: Mark chan_sip and its files as extended support
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420562 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 17:53:13 +00:00
Matthew Jordan fbb612751e make_ari_stubs: Update wiki prefix to '13'
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 12:39:36 +00:00
Matthew Jordan 5b82edd783 res_ari_resource.c.mustache: Update template to emit module support level
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420536 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 12:37:27 +00:00
Matthew Jordan 949c59f25f main/message: remove debug message
........

Merged revisions 420533 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420534 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 12:32:32 +00:00
Kinsey Moore d2dff48f70 CEL: Update unit tests for additional information
This updates the CEL unit tests for the new information contained in
the attended transfer CEL extra field.
........

Merged revisions 420513 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420514 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 03:03:32 +00:00
Matthew Jordan 8b560be831 Update UPGRADE file for 13 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 01:31:22 +00:00
Matthew Jordan 288f57882e Remove old properties
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420495 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 01:28:55 +00:00
Matthew Jordan d4f4162258 ___ _ _ _ __ _____
/ _ \    | |          (_)   | |    /  ||____ |
/ /_\ \___| |_ ___ _ __ _ ___| | __ `| |    / /
|  _  / __| __/ _ | '__| / __| |/ /  | |    \ \
| | | \__ | ||  __| |  | \__ |   <  _| |.___/ /
\_| |_|___/\__\___|_|  |_|___|_|\_\ \___\____/ 



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@420494 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-08-08 01:26:16 +00:00
1518 changed files with 233654 additions and 63279 deletions

40
.gitignore vendored Normal file
View File

@ -0,0 +1,40 @@
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
# See .gitignore in subdirectories for more ignored files
*~
*.[oadi]
*.gz
*.ii
*.oo
*.eo
*.so
*.exports
*.moduleinfo
*.makeopts
*.makedeps
.lastclean
/.pc
aclocal.m4
autom4te.cache
config.log
config.status
defaults.h
makeopts
makeopts.embed_rules
menuselect-tree
*.sha1
*.pyc
*.gcno
*.gcda
latex
doxygen.log
out/
*.orig
tests/CI/output

10
.gitreview Normal file
View File

@ -0,0 +1,10 @@
[gerrit]
defaultbranch=13
#
# Intentional padding to ensure it is possible to point a commit
# to an alternative gerrit server/repository without breaking
# cherry-pick between branches.
#
host=gerrit.asterisk.org
port=29418
project=asterisk.git

1
.lastclean Normal file
View File

@ -0,0 +1 @@
40

1
.version Normal file
View File

@ -0,0 +1 @@
13.34.0

2160
CHANGES

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@
* John Todd, TalkPlus, Inc. and JR Richardson, Ntegrated Solutions.
for funding the development of SIP Session Timers support.
* Omnitor AB, Gunnar Hellstr<EFBFBD>m, for funding work with videocaps,
* Omnitor AB, Gunnar Hellström, for funding work with videocaps,
T.140 RED, originate with video/text and many more
contributions.
@ -252,7 +252,7 @@
cdr_tds rewrite, countless other improvements, fixes, and good
ideas. sean(AT)malleable.com
* Jan Kal<EFBFBD>b - Calendaring support for Exchange Server 2007+ via
* Jan Kaláb - Calendaring support for Exchange Server 2007+ via
Exchange Web Services.
* University of Oslo (uio.no), Norway - SIP Max-Forwards setting

70348
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@ GPL'd products (although if you've written a module for Asterisk we
would strongly encourage you to make the same exception that we do).
Specific permission is also granted to link Asterisk with OpenSSL, OpenH323
and/or the UW IMAP Toolkit and distribute the resulting binary files.
UniMRCP, and/or the UW IMAP Toolkit and distribute the resulting binary files.
In addition, Asterisk implements several management/control protocols.
This includes the Asterisk Manager Interface (AMI), the Asterisk Gateway

542
Makefile
View File

@ -99,12 +99,22 @@ export WGET_EXTRA_ARGS
export LDCONFIG
export LDCONFIG_FLAGS
export PYTHON
export TAR
export PATCH
export SED
export NM
-include makeopts
# makeopts is required unless the goal is just {dist{-}}clean
ifeq ($(MAKECMDGOALS),clean)
else ifeq ($(MAKECMDGOALS),distclean)
else ifeq ($(MAKECMDGOALS),dist-clean)
else
include makeopts
endif
# start the primary CFLAGS and LDFLAGS with any that were provided
# to the configure script
_ASTCFLAGS:=$(CONFIG_CFLAGS)
_ASTCFLAGS:=$(CONFIG_CFLAGS) $(CONFIG_SIGNED_CHAR)
_ASTLDFLAGS:=$(CONFIG_LDFLAGS)
# Some build systems, such as the one in openwrt, like to pass custom target
@ -117,6 +127,9 @@ _ASTLDFLAGS+=$(LDOPTS)
# libxml2 cflags
_ASTCFLAGS+=$(LIBXML2_INCLUDE)
# BIND_8_COMPAT
_ASTCFLAGS+=$(BIND8_CFLAGS)
#Uncomment this to see all build commands instead of 'quiet' output
#NOISY_BUILD=yes
@ -124,7 +137,7 @@ empty:=
space:=$(empty) $(empty)
ASTTOPDIR:=$(subst $(space),\$(space),$(CURDIR))
# Overwite config files on "make samples"
# Overwite config files on "make samples" or other config installation targets
OVERWRITE=y
# Include debug and macro symbols in the executables (-g) and profiling info (-pg)
@ -151,16 +164,24 @@ LINKER_SYMBOL_PREFIX=
# Uncomment this to use the older DSP routines
#_ASTCFLAGS+=-DOLD_DSP_ROUTINES
# If the file .asterisk.makeopts is present in your home directory, you can
# include all of your favorite menuselect options so that every time you download
# a new version of Asterisk, you don't have to run menuselect to set them.
# The file /etc/asterisk.makeopts will also be included but can be overridden
# by the file in your home directory.
# Default install directory for DAHDI hooks.
DAHDI_UDEV_HOOK_DIR = /usr/share/dahdi/span_config.d
GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)
# This Makefile previously contained a note about the ability to use .asterisk.makeopts
# from your home directory or /etc/asterisk.makeopts to set defaults for menuselect.
# These files have never worked in this branch of Asterisk. The work around is to
# manually copy the file containing defaults before running 'make menuselect':
#
# cp ${HOME}/.asterisk.makeopts menuselect.makeopts
# or
# cp /etc/asterisk.makeopts menuselect.makeopts
#
# As an alternative, menuselect/menuselect can be used by a script to enable or disable
# individual options or entire categories. To use this feature you must first
# compile menuselect using 'make menuselect.makeopts'. For information about parameters
# supported run:
# menuselect/menuselect --help
MOD_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
OTHER_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
@ -168,11 +189,6 @@ OTHER_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
# Create OPTIONS variable, but probably we can assign directly to ASTCFLAGS
OPTIONS=
ifeq ($(OSARCH),linux-gnu)
# flag to tell 'ldconfig' to only process specified directories
LDCONFIG_FLAGS=-n
endif
ifeq ($(findstring -save-temps,$(_ASTCFLAGS) $(ASTCFLAGS)),)
ifeq ($(findstring -pipe,$(_ASTCFLAGS) $(ASTCFLAGS)),)
_ASTCFLAGS+=-pipe
@ -183,7 +199,7 @@ ifeq ($(findstring -Wall,$(_ASTCFLAGS) $(ASTCFLAGS)),)
_ASTCFLAGS+=-Wall
endif
_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_NESTED_FUNCTIONS) $(DEBUG)
_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_NESTED_FUNCTIONS) $(AST_CLANG_BLOCKS) $(DEBUG)
ADDL_TARGETS=
ifeq ($(AST_DEVMODE),yes)
@ -197,10 +213,14 @@ ifeq ($(AST_DEVMODE),yes)
ifeq ($(AST_DEVMODE_STRICT),yes)
_ASTCFLAGS+=-Wshadow
endif
ADDL_TARGETS+=validate-docs
ifneq ($(DISABLE_XMLDOC),yes)
ADDL_TARGETS+=validate-docs
endif
endif
ifneq ($(findstring BSD,$(OSARCH)),)
ifeq ($(OSARCH),NetBSD)
_ASTCFLAGS+=-isystem /usr/pkg/include
else ifneq ($(findstring BSD,$(OSARCH)),)
_ASTCFLAGS+=-isystem /usr/local/include
endif
@ -208,23 +228,27 @@ ifeq ($(OSARCH),FreeBSD)
# -V is understood by BSD Make, not by GNU make.
BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
_ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
# flag to tell 'ldconfig' to only process specified directories
LDCONFIG_FLAGS=-m
endif
ifeq ($(OSARCH),NetBSD)
_ASTCFLAGS+=-pthread -I/usr/pkg/include
_ASTCFLAGS+=-pthread -D__LIBPTHREAD_SOURCE__ -I/usr/pkg/include
endif
ifeq ($(OSARCH),OpenBSD)
_ASTCFLAGS+=-pthread -ftrampolines
endif
ifeq ($(OSARCH),linux-uclibc)
AST_LIBS+=-lpthread -ldl
endif
ifeq ($(OSARCH),SunOS)
_ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2 -D__EXTENSIONS__
endif
ifneq ($(GREP),)
ifeq ($(GREP),)
else ifeq ($(GREP),:)
else
ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) GIT=$(GIT) build_tools/make_version .)
endif
ifneq ($(AWK),)
@ -237,32 +261,39 @@ ifneq ($(wildcard .svn),)
ASTERISKVERSIONNUM:=999999
endif
ifneq ($(DISABLE_XMLDOC),yes)
CORE_XMLDOC=doc/core-en_US.xml
FULL_XMLDOC=doc/full-en_US.xml
else
CORE_XMLDOC=
FULL_XMLDOC=
endif
_ASTCFLAGS+=$(OPTIONS)
MOD_SUBDIRS:=channels pbx apps codecs formats cdr cel bridges funcs tests main res addons $(LOCAL_MOD_SUBDIRS)
OTHER_SUBDIRS:=utils agi
MOD_SUBDIRS:=third-party channels pbx apps codecs formats cdr cel bridges funcs tests main res addons $(LOCAL_MOD_SUBDIRS)
OTHER_SUBDIRS:=utils agi contrib
SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
SUBDIRS_CLEAN:=$(SUBDIRS:%=%-clean)
SUBDIRS_DIST_CLEAN:=$(SUBDIRS:%=%-dist-clean)
SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
MOD_SUBDIRS_EMBED_LDSCRIPT:=$(MOD_SUBDIRS:%=%-embed-ldscript)
MOD_SUBDIRS_EMBED_LDFLAGS:=$(MOD_SUBDIRS:%=%-embed-ldflags)
MOD_SUBDIRS_EMBED_LIBS:=$(MOD_SUBDIRS:%=%-embed-libs)
MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree)
ifneq ($(findstring darwin,$(OSARCH)),)
_ASTCFLAGS+=-D__Darwin__ -mmacosx-version-min=10.6
_SOLINK=-mmacosx-version-min=10.6 -Xlinker -undefined -Xlinker dynamic_lookup
_SOLINK=-mmacosx-version-min=10.6 -Wl,-undefined,dynamic_lookup
_SOLINK+=/usr/lib/bundle1.o
SOLINK=-bundle $(_SOLINK)
DYLINK=-Xlinker -dylib $(_SOLINK)
DYLINK=-Wl,-dylib $(_SOLINK)
_ASTLDFLAGS+=-L/usr/local/lib
else
# These are used for all but Darwin
SOLINK=-shared
DYLINK=$(SOLINK)
ifneq ($(findstring BSD,$(OSARCH)),)
ifeq ($(OSARCH),NetBSD)
_ASTLDFLAGS+=-L/usr/pkg/lib
else ifneq ($(findstring BSD,$(OSARCH)),)
_ASTLDFLAGS+=-L/usr/local/lib
endif
endif
@ -320,9 +351,9 @@ full: _full
@echo " +-------------------------------------------+"
_all: makeopts $(SUBDIRS) doc/core-en_US.xml $(ADDL_TARGETS)
_all: makeopts $(SUBDIRS) $(CORE_XMLDOC) $(ADDL_TARGETS)
_full: makeopts $(SUBDIRS) doc/full-en_US.xml $(ADDL_TARGETS)
_full: makeopts $(SUBDIRS) $(FULL_XMLDOC) $(ADDL_TARGETS)
makeopts: configure
@echo "****"
@ -331,45 +362,20 @@ makeopts: configure
@echo "****"
@exit 1
menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts build_tools/menuselect-deps $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts build_tools/menuselect-deps
ifeq ($(filter %menuselect,$(MAKECMDGOALS)),)
menuselect/menuselect --check-deps $@
menuselect/menuselect --check-deps $@ $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
menuselect/menuselect --check-deps $@
endif
$(MOD_SUBDIRS_EMBED_LDSCRIPT):
+@echo "EMBED_LDSCRIPTS+="`$(SILENTMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
$(MOD_SUBDIRS_EMBED_LDFLAGS):
+@echo "EMBED_LDFLAGS+="`$(SILENTMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
$(MOD_SUBDIRS_EMBED_LIBS):
+@echo "EMBED_LIBS+="`$(SILENTMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
$(MOD_SUBDIRS_MENUSELECT_TREE):
+@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
+@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
makeopts.embed_rules: menuselect.makeopts
@echo "Generating embedded module rules ..."
@rm -f $@
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDFLAGS)
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LIBS)
$(SUBDIRS): makeopts .lastclean main/version.c include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
$(SUBDIRS): makeopts .lastclean main/version.c include/asterisk/build.h include/asterisk/buildopts.h defaults.h
ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
ifeq ($(shell grep ^MENUSELECT_EMBED=$$ menuselect.makeopts 2>/dev/null),)
# Non-windows:
# ensure that all module subdirectories are processed before 'main' during
# a parallel build, since if there are modules selected to be embedded the
# directories containing them must be completed before the main Asterisk
# binary can be built.
# If MENUSELECT_EMBED is empty, we don't need this and allow 'main' to be
# be built without building all dependencies first.
main: $(filter-out main,$(MOD_SUBDIRS))
endif
main: third-party
else
# Windows: we need to build main (i.e. the asterisk dll) first,
# followed by res, followed by the other directories, because
@ -392,7 +398,7 @@ defaults.h: makeopts .lastclean build_tools/make_defaults_h
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
main/version.c: FORCE .lastclean
main/version.c: FORCE menuselect.makeopts .lastclean
@build_tools/make_version_c > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
@ -422,6 +428,8 @@ _clean:
rm -f doc/core-en_US.xml
rm -f doc/full-en_US.xml
rm -f doc/rest-api/*.wiki
rm -f doxygen.log
rm -rf latex
rm -f rest-api-templates/*.pyc
@$(MAKE) -C menuselect clean
cp -f .cleancount .lastclean
@ -432,15 +440,15 @@ distclean: $(SUBDIRS_DIST_CLEAN) _clean
@$(MAKE) -C menuselect dist-clean
@$(MAKE) -C sounds dist-clean
rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
rm -f makeopts.embed_rules
rm -f config.log config.status config.cache
rm -rf autom4te.cache
rm -f include/asterisk/autoconfig.h
rm -f include/asterisk/buildopts.h
rm -rf doc/api
rm -f doc/asterisk-ng-doxygen
rm -f build_tools/menuselect-deps
datafiles: _all doc/core-en_US.xml
datafiles: _all $(CORE_XMLDOC)
CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig "$(DESTDIR)$(libdir)/pkgconfig";
# # Recursively install contents of the static-http directory, in case
@ -452,8 +460,10 @@ datafiles: _all doc/core-en_US.xml
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/$$x" ; \
fi \
done
ifneq ($(DISABLE_XMLDOC),yes)
$(INSTALL) -m 644 doc/core-en_US.xml "$(DESTDIR)$(ASTDATADIR)/static-http";
$(INSTALL) -m 644 doc/appdocsxml.xslt "$(DESTDIR)$(ASTDATADIR)/static-http";
endif
if [ -d doc/tex/asterisk ] ; then \
$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
for n in doc/tex/asterisk/* ; do \
@ -468,7 +478,9 @@ datafiles: _all doc/core-en_US.xml
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/rest-api" ; \
done
ifneq ($(GREP),)
ifeq ($(GREP),)
else ifeq ($(GREP),:)
else
XML_core_en_US = $(foreach dir,$(MOD_SUBDIRS),$(shell $(GREP) -l "language=\"en_US\"" $(dir)/*.c $(dir)/*.cc 2>/dev/null))
endif
@ -476,7 +488,7 @@ doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
@printf "Building Documentation For: "
@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" > $@
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" >> $@
@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
@for x in $(MOD_SUBDIRS); do \
printf "$$x " ; \
@ -487,7 +499,9 @@ doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
@echo
@echo "</docs>" >> $@
ifneq ($(GREP),)
ifeq ($(GREP),)
else ifeq ($(GREP),:)
else
XML_full_en_US = $(foreach dir,$(MOD_SUBDIRS),$(shell $(GREP) -l "language=\"en_US\"" $(dir)/*.c $(dir)/*.cc 2>/dev/null))
endif
@ -500,9 +514,9 @@ else
@printf "Building Documentation For: "
@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" > $@
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" >> $@
@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
@for x in $(MOD_SUBDIRS); do \
@for x in $(filter-out third-party,$(MOD_SUBDIRS)); do \
printf "$$x " ; \
for i in `find $$x -name '*.c'`; do \
$(PYTHON) build_tools/get_documentation.py < $$i >> $@ ; \
@ -549,13 +563,13 @@ INSTALLDIRS="$(ASTLIBDIR)" "$(ASTMODDIR)" "$(ASTSBINDIR)" "$(ASTETCDIR)" "$(ASTV
"$(ASTSPOOLDIR)" "$(ASTSPOOLDIR)/dictate" "$(ASTSPOOLDIR)/meetme" \
"$(ASTSPOOLDIR)/monitor" "$(ASTSPOOLDIR)/system" "$(ASTSPOOLDIR)/tmp" \
"$(ASTSPOOLDIR)/voicemail" "$(ASTSPOOLDIR)/recording" \
"$(ASTHEADERDIR)" "$(ASTHEADERDIR)/doxygen" \
"$(ASTLOGDIR)" "$(ASTLOGDIR)/cdr-csv" "$(ASTLOGDIR)/cdr-custom" \
"$(ASTLOGDIR)/cel-custom" "$(ASTDATADIR)" "$(ASTDATADIR)/documentation" \
"$(ASTDATADIR)/documentation/thirdparty" "$(ASTDATADIR)/firmware" \
"$(ASTDATADIR)/firmware/iax" "$(ASTDATADIR)/images" "$(ASTDATADIR)/keys" \
"$(ASTDATADIR)/phoneprov" "$(ASTDATADIR)/rest-api" "$(ASTDATADIR)/static-http" \
"$(ASTDATADIR)/sounds" "$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)"
"$(ASTDATADIR)/sounds" "$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)" \
"$(ASTDATADIR)/third-party"
installdirs:
@for i in $(INSTALLDIRS); do \
@ -567,22 +581,19 @@ installdirs:
main-bininstall:
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTLIBDIR="$(ASTLIBDIR)" $(SUBMAKE) -C main bininstall
bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall install-headers
$(INSTALL) -m 755 contrib/scripts/astversion "$(DESTDIR)$(ASTSBINDIR)/"
$(INSTALL) -m 755 contrib/scripts/astgenkey "$(DESTDIR)$(ASTSBINDIR)/"
$(INSTALL) -m 755 contrib/scripts/autosupport "$(DESTDIR)$(ASTSBINDIR)/"
if [ ! -f /sbin/launchd ]; then \
./build_tools/install_subst contrib/scripts/safe_asterisk "$(DESTDIR)$(ASTSBINDIR)/safe_asterisk"; \
fi
$(INSTALL) -m 644 include/asterisk.h "$(DESTDIR)$(includedir)"
$(INSTALL) -m 644 include/asterisk/*.h "$(DESTDIR)$(ASTHEADERDIR)"
$(INSTALL) -m 644 include/asterisk/doxygen/*.h "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
if [ -n "$(OLDHEADERS)" ]; then \
for h in $(OLDHEADERS); do rm -f "$(DESTDIR)$(ASTHEADERDIR)/$$h"; done \
fi
ifneq ($(DISABLE_XMLDOC),yes)
$(INSTALL) -m 644 doc/core-*.xml "$(DESTDIR)$(ASTDATADIR)/documentation"
$(INSTALL) -m 644 doc/appdocsxml.xslt "$(DESTDIR)$(ASTDATADIR)/documentation"
$(INSTALL) -m 644 doc/appdocsxml.dtd "$(DESTDIR)$(ASTDATADIR)/documentation"
endif
$(INSTALL) -m 644 doc/asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
$(INSTALL) -m 644 doc/astdb*.8 "$(DESTDIR)$(ASTMANDIR)/man8"
$(INSTALL) -m 644 contrib/scripts/astgenkey.8 "$(DESTDIR)$(ASTMANDIR)/man8"
@ -591,17 +602,25 @@ bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin "$(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin"; \
fi
ifeq ($(HAVE_DAHDI),1)
$(INSTALL) -d $(DESTDIR)/$(DAHDI_UDEV_HOOK_DIR)
$(INSTALL) -m 644 contrib/scripts/dahdi_span_config_hook $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
endif
$(SUBDIRS_INSTALL):
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTDATADIR="$(ASTDATADIR)" $(SUBMAKE) -C $(@:-install=) install
NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
OLDMODS=$(filter-out $(NEWMODS) $(notdir $(DESTDIR)$(ASTMODDIR)),$(notdir $(wildcard $(DESTDIR)$(ASTMODDIR)/*.so)))
ifneq ($(BASH),:)
FILMODS=$(filter-out $(shell ./build_tools/list_valid_installed_externals),$(OLDMODS))
else
FILMODS=$(OLDMODS)
endif
BADMODS=$(strip $(FILMODS))
oldmodcheck:
@if [ -n "$(OLDMODS)" ]; then \
@if [ -n "$(BADMODS)" ]; then \
echo " WARNING WARNING WARNING" ;\
echo "" ;\
echo " Your Asterisk modules directory, located at" ;\
@ -611,15 +630,91 @@ oldmodcheck:
echo " modules are compatible with this version before" ;\
echo " attempting to run Asterisk." ;\
echo "" ;\
for f in $(OLDMODS); do \
for f in $(BADMODS); do \
echo " $$f" ;\
done ;\
echo "" ;\
echo " WARNING WARNING WARNING" ;\
fi
ld-cache-update:
ifeq ($(LDCONFIG),)
else ifeq ($(LDCONFIG),:)
else
ifeq ($(DESTDIR),) # DESTDIR means binary archive creation; ldconfig should be run on postinst
@if [ $$(id -u) -eq 0 ] ; then \
$(LDCONFIG) "$(ASTLIBDIR)/" ; \
else \
echo " WARNING WARNING WARNING" ;\
echo "" ;\
echo " You cannot rebuild the system linker cache unless you are root. " ;\
echo " You MUST do one of the following..." ;\
echo " * Re-run 'make install' as root. " ;\
echo " * Run 'ldconfig $(ASTLIBDIR)' as root. " ;\
echo " * Run asterisk with 'LD_LIBRARY_PATH=$(ASTLIBDIR) asterisk' " ;\
echo "" ;\
echo " WARNING WARNING WARNING" ;\
fi
endif
endif
export _oldlibdir =
export _oldmoddir =
ifeq ($(findstring 64,$(HOST_CPU)),64)
# Strip any trailing '/' so the dir and notdir functions work correctly
_current_libdir = $(patsubst %/,%,$(DESTDIR)$(ASTLIBDIR))
# Only process if the paths end in lib64 or lib.
# If we're installing to lib64, check lib for orphans.
# If we're installing to lib, check lib64 for orphans.
# Otherwise, leave _oldlibdir empty.
ifeq ($(notdir $(_current_libdir)),lib64)
_oldlibdir = $(dir $(_current_libdir))lib
else ifeq ($(notdir $(_current_libdir)),lib)
_oldlibdir = $(dir $(_current_libdir))lib64
endif
# Strip any trailing '/' so the dir and notdir functions work correctly
_current_moddir = $(patsubst %/,%,$(DESTDIR)$(ASTMODDIR))
# Only process if the paths contain /lib64/ or /lib/.
# If we're installing to lib64, check lib for orphans.
# If we're installing to lib, check lib64 for orphans.
# Otherwise, leave _oldmoddir empty.
ifeq ($(findstring /lib64/,$(_current_moddir)),/lib64/)
_oldmoddir = $(subst /lib64/,/lib/,$(_current_moddir))
else ifeq ($(findstring /lib/,$(_current_moddir)),/lib/)
_oldmoddir = $(subst /lib/,/lib64/,$(_current_moddir))
endif
endif
check-old-libdir:
@test -n "$(_oldlibdir)" -a -d "$(_oldlibdir)" || exit 0 ;\
oldfiles=`find "$(_oldlibdir)" -name libasterisk* -print -quit -o \( -path *asterisk/modules/* -a -name *.so \) -print -quit 2>/dev/null` ;\
if [ "x$$oldfiles" != "x" ] ; then \
echo " WARNING WARNING WARNING" ;\
echo "" ;\
echo " Installation is to: " ;\
echo " $(DESTDIR)$(ASTLIBDIR)" ;\
echo " but there are asterisk shared libraries in: " ;\
echo " $(_oldlibdir)" ;\
echo " or" ;\
echo " $(_oldlibdir)/asterisk/modules" ;\
echo "" ;\
echo " It is unlikely that asterisk will start." ;\
echo "" ;\
echo " You should do one of the following..." ;\
echo " * Run 'make uninstall' to remove the incorrect libraries" ;\
echo " then run 'make install' again." ;\
echo " * Manually remove the libraries from" ;\
echo " $(_oldlibdir)" ;\
echo " and run 'ldconfig' to rebuild the linker cache." ;\
echo "" ;\
echo " WARNING WARNING WARNING" ;\
fi
badshell:
ifneq ($(findstring ~,$(DESTDIR)),)
ifneq ($(filter ~%,$(DESTDIR)),)
@echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
@echo "Try replacing ~ with \$$HOME, as in \"make install DESTDIR=\$$HOME/path\"."
@exit 1
@ -638,7 +733,12 @@ install: badshell bininstall datafiles
@echo " + configuration files (overwriting any +"
@echo " + existing config files), run: +"
@echo " + +"
@echo " + $(mK) samples +"
@echo " + For generic reference documentation: +"
@echo " + $(mK) samples +"
@echo " + +"
@echo " + For a sample basic PBX: +"
@echo " + $(mK) basic-pbx +"
@echo " + +"
@echo " + +"
@echo " +----------------- or ---------------------+"
@echo " + +"
@ -651,11 +751,73 @@ install: badshell bininstall datafiles
@echo " + doxygen installed on your local system +"
@echo " +-------------------------------------------+"
@$(MAKE) -s oldmodcheck
@$(MAKE) -s ld-cache-update
@$(MAKE) -s check-old-libdir
isntall: install
upgrade: bininstall
# Install configuration files from the specified directory
# Parameters:
# (1) the configuration directory to install from
# (2) the extension to strip off
define INSTALL_CONFIGS
@for x in $(1)/*$(2); do \
dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x $(2)`"; \
if [ -f "$${dst}" ]; then \
if [ "$(OVERWRITE)" = "y" ]; then \
if cmp -s "$${dst}" "$$x" ; then \
echo "Config file $$x is unchanged"; \
continue; \
fi ; \
mv -f "$${dst}" "$${dst}.old" ; \
else \
echo "Skipping config file $$x"; \
continue; \
fi ;\
fi ; \
echo "Installing file $$x"; \
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
done ; \
if [ "$(OVERWRITE)" = "y" ]; then \
echo "Updating asterisk.conf" ; \
sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
-e 's|^astmoddir.*$$|astmoddir => $(ASTMODDIR)|' \
-e 's|^astvarlibdir.*$$|astvarlibdir => $(ASTVARLIBDIR)|' \
-e 's|^astdbdir.*$$|astdbdir => $(ASTDBDIR)|' \
-e 's|^astkeydir.*$$|astkeydir => $(ASTKEYDIR)|' \
-e 's|^astdatadir.*$$|astdatadir => $(ASTDATADIR)|' \
-e 's|^astagidir.*$$|astagidir => $(AGI_DIR)|' \
-e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
-e 's|^astsbindir.*$$|astsbindir => $(ASTSBINDIR)|' \
"$(DESTDIR)$(ASTCONFPATH)" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH)" ; \
rm -f "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
fi
endef
install-headers:
# Will create all components of "$(DESTDIR)$(ASTHEADERDIR)/doxygen" including "$(DESTDIR)$(includedir)"
$(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
$(INSTALL) -m 644 include/asterisk.h "$(DESTDIR)$(includedir)"
$(INSTALL) -m 644 include/asterisk/*.h "$(DESTDIR)$(ASTHEADERDIR)"
$(INSTALL) -m 644 include/asterisk/doxygen/*.h "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
if [ -n "$(OLDHEADERS)" ]; then \
for h in $(OLDHEADERS); do rm -f "$(DESTDIR)$(ASTHEADERDIR)/$$h"; done \
fi
install-configs:
@if test -z "$(CONFIG_SRC)" -o ! -d "$(CONFIG_SRC)"; then \
>&2 echo "CONFIG_SRC must be set to a directory."; \
exit 1; \
fi
@echo "Installing config files from $(CONFIG_SRC)/*$(CONFIG_EXTEN)"
$(call INSTALL_CONFIGS,$(CONFIG_SRC),$(CONFIG_EXTEN))
# XXX why *.adsi is installed first ?
adsi:
@echo Installing adsi config files...
@ -672,43 +834,9 @@ adsi:
samples: adsi
@echo Installing other config files...
@for x in configs/samples/*.sample; do \
dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ; \
if [ -f "$${dst}" ]; then \
if [ "$(OVERWRITE)" = "y" ]; then \
if cmp -s "$${dst}" "$$x" ; then \
echo "Config file $$x is unchanged"; \
continue; \
fi ; \
mv -f "$${dst}" "$${dst}.old" ; \
else \
echo "Skipping config file $$x"; \
continue; \
fi ;\
fi ; \
echo "Installing file $$x"; \
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
done
if [ "$(OVERWRITE)" = "y" ]; then \
echo "Updating asterisk.conf" ; \
sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
-e 's|^astmoddir.*$$|astmoddir => $(ASTMODDIR)|' \
-e 's|^astvarlibdir.*$$|astvarlibdir => $(ASTVARLIBDIR)|' \
-e 's|^astdbdir.*$$|astdbdir => $(ASTDBDIR)|' \
-e 's|^astkeydir.*$$|astkeydir => $(ASTKEYDIR)|' \
-e 's|^astdatadir.*$$|astdatadir => $(ASTDATADIR)|' \
-e 's|^astagidir.*$$|astagidir => $(AGI_DIR)|' \
-e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
-e 's|^astsbindir.*$$|astsbindir => $(ASTSBINDIR)|' \
"$(DESTDIR)$(ASTCONFPATH)" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH)" ; \
rm -f "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
fi ; \
$(call INSTALL_CONFIGS,configs/samples,.sample)
$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX"
build_tools/make_sample_voicemail "$(DESTDIR)/$(ASTDATADIR)" "$(DESTDIR)/$(ASTSPOOLDIR)"
@for x in phoneprov/*; do \
dst="$(DESTDIR)$(ASTDATADIR)/$$x" ; \
if [ -f "$${dst}" ]; then \
@ -727,6 +855,10 @@ samples: adsi
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
done
basic-pbx:
@echo Installing basic-pbx config files...
$(call INSTALL_CONFIGS,configs/basic-pbx)
webvmail:
@[ -d "$(DESTDIR)$(HTTP_DOCSDIR)/" ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
@[ -d "$(DESTDIR)$(HTTP_CGIDIR)" ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
@ -754,7 +886,8 @@ webvmail:
@echo " +-------------------------------------------+"
progdocs:
# Note, Makefile conditionals must not be tabbed out. Wasted hours with that.
# Note, Makefile conditionals must not be tabbed out. Wasted hours with that.
@cp doc/asterisk-ng-doxygen.in doc/asterisk-ng-doxygen
ifeq ($(DOXYGEN),:)
@echo "Doxygen is not installed. Please install and re-run the configuration script."
else
@ -762,20 +895,20 @@ ifeq ($(DOT),:)
@echo "DOT is not installed. Doxygen will not produce any diagrams. Please install and re-run the configuration script."
else
# Enable DOT
@echo "HAVE_DOT = YES" >> contrib/asterisk-ng-doxygen
@echo "HAVE_DOT = YES" >> doc/asterisk-ng-doxygen
endif
# Set Doxygen PROJECT_NUMBER variable
ifneq ($(ASTERISKVERSION),UNKNOWN__and_probably_unsupported)
@echo "PROJECT_NUMBER = $(ASTERISKVERSION)" >> contrib/asterisk-ng-doxygen
@echo "PROJECT_NUMBER = $(ASTERISKVERSION)" >> doc/asterisk-ng-doxygen
else
echo "Asterisk Version is unknown, not configuring Doxygen PROJECT_NUMBER."
endif
# Validate Doxygen Configuration
@doxygen -u contrib/asterisk-ng-doxygen
# Validate and auto-update local copy
@doxygen -u doc/asterisk-ng-doxygen
# Run Doxygen
@doxygen contrib/asterisk-ng-doxygen
@doxygen doc/asterisk-ng-doxygen
# Remove configuration backup file
@rm -f contrib/asterisk-ng-doxygen.bak
@rm -f doc/asterisk-ng-doxygen.bak
endif
install-logrotate:
@ -787,60 +920,66 @@ install-logrotate:
rm -f contrib/scripts/asterisk.logrotate.tmp
config:
@if [ "${OSARCH}" = "linux-gnu" ]; then \
if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
./build_tools/install_subst contrib/init.d/rc.redhat.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
if [ ! -f "$(DESTDIR)/etc/sysconfig/asterisk" ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/debian_version ] ; then \
./build_tools/install_subst contrib/init.d/rc.debian.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ ! -f "$(DESTDIR)/etc/default/asterisk" ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/default/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/usr/sbin/update-rc.d asterisk defaults 50 91 ; \
fi ; \
elif [ -f /etc/gentoo-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.gentoo.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/rc-update add asterisk default ; \
fi ; \
elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.mandriva.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
if [ ! -f /etc/sysconfig/asterisk ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/SuSE-release -o -f /etc/novell-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ ! -f /etc/sysconfig/asterisk ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/arch-release -o -f /etc/arch-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.archlinux.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
elif [ -d "$(DESTDIR)/Library/LaunchDaemons" ]; then \
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist" ]; then \
./build_tools/install_subst contrib/init.d/org.asterisk.asterisk.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist"; \
fi; \
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist" ]; then \
./build_tools/install_subst contrib/init.d/org.asterisk.muted.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist"; \
fi; \
elif [ -f /etc/slackware-version ]; then \
echo "Slackware is not currently supported, although an init script does exist for it."; \
else \
echo "We could not install init scripts for your distribution." ; \
fi \
@if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
./build_tools/install_subst contrib/init.d/rc.redhat.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
if [ ! -f "$(DESTDIR)/etc/sysconfig/asterisk" ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/debian_version ] ; then \
./build_tools/install_subst contrib/init.d/rc.debian.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ ! -f "$(DESTDIR)/etc/default/asterisk" ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/default/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/usr/sbin/update-rc.d asterisk defaults 50 91 ; \
fi ; \
elif [ -f /etc/gentoo-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.gentoo.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/rc-update add asterisk default ; \
fi ; \
elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.mandriva.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
if [ ! -f /etc/sysconfig/asterisk ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/SuSE-release -o -f /etc/novell-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ ! -f /etc/sysconfig/asterisk ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/os-release ] && [ "opensuse" = "$(shell . /etc/os-release 2>/dev/null && echo $$ID)" ] ; then \
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
if [ ! -f /etc/sysconfig/asterisk ] ; then \
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
fi ; \
if [ -z "$(DESTDIR)" ] ; then \
/sbin/chkconfig --add asterisk ; \
fi ; \
elif [ -f /etc/arch-release -o -f /etc/arch-release ] ; then \
./build_tools/install_subst contrib/init.d/rc.archlinux.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
elif [ -f /etc/slackware-version ]; then \
./build_tools/install_subst contrib/init.d/rc.slackware.asterisk "$(DESTDIR)/etc/rc.d/rc.asterisk"; \
elif [ -f /etc/os-release ] && [ "slackware" = "$(shell . /etc/os-release 2>/dev/null && echo $$ID)" ] ; then \
./build_tools/install_subst contrib/init.d/rc.slackware.asterisk "$(DESTDIR)/etc/rc.d/rc.asterisk"; \
elif [ -d "$(DESTDIR)/Library/LaunchDaemons" ]; then \
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist" ]; then \
./build_tools/install_subst contrib/init.d/org.asterisk.asterisk.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist"; \
fi; \
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist" ]; then \
./build_tools/install_subst contrib/init.d/org.asterisk.muted.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist"; \
fi; \
else \
echo "We could not install init scripts for your operating system." ; \
echo "We could not install init scripts for your distribution." ; \
fi
sounds:
@ -855,22 +994,34 @@ sounds:
@[ -f "$(DESTDIR)$(ASTDBDIR)/astdb.sqlite3" ] || [ ! -f "$(DESTDIR)$(ASTDBDIR)/astdb" ] || [ ! -f menuselect.makeopts ] || grep -q MENUSELECT_UTILS=.*astdb2sqlite3 menuselect.makeopts || (sed -i.orig -e's/MENUSELECT_UTILS=\(.*\)/MENUSELECT_UTILS=\1 astdb2sqlite3/' menuselect.makeopts && echo "Updating menuselect.makeopts to include astdb2sqlite3" && echo "Original version backed up to menuselect.makeopts.orig")
$(SUBDIRS_UNINSTALL):
+@$(SUBMAKE) -C $(@:-uninstall=) uninstall
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTDATADIR="$(ASTDATADIR)" $(SUBMAKE) -C $(@:-uninstall=) uninstall
main-binuninstall:
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTLIBDIR="$(ASTLIBDIR)" $(SUBMAKE) -C main binuninstall
_uninstall: $(SUBDIRS_UNINSTALL) main-binuninstall
uninstall-headers:
rm -rf "$(DESTDIR)$(ASTHEADERDIR)"
rm -f "$(DESTDIR)$(includedir)/asterisk.h"
_uninstall: $(SUBDIRS_UNINSTALL) main-binuninstall uninstall-headers
rm -f "$(DESTDIR)$(ASTMODDIR)/"*
test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -f "$(_oldmoddir)/"* || :
rm -f "$(DESTDIR)$(ASTSBINDIR)/astgenkey"
rm -f "$(DESTDIR)$(ASTSBINDIR)/autosupport"
rm -rf "$(DESTDIR)$(ASTHEADERDIR)"
rm -rf "$(DESTDIR)$(ASTDATADIR)/firmware"
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/asterisk.8"
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8"
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/autosupport.8"
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8"
ifeq ($(HAVE_DAHDI),1)
rm -f $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
endif
$(MAKE) -C sounds uninstall
ifeq ($(LDCONFIG),)
else ifeq ($(LDCONFIG),:)
else
$(LDCONFIG) "$(ASTLIBDIR)/" || :
endif
uninstall: _uninstall
@echo " +--------- Asterisk Uninstall Complete -----+"
@ -886,8 +1037,9 @@ uninstall: _uninstall
@echo " + $(mK) uninstall-all +"
@echo " +-------------------------------------------+"
uninstall-all: _uninstall
uninstall-all: _uninstall uninstall-headers
rm -rf "$(DESTDIR)$(ASTMODDIR)"
test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -rf "$(_oldmoddir)" || :
rm -rf "$(DESTDIR)$(ASTVARLIBDIR)"
rm -rf "$(DESTDIR)$(ASTDATADIR)"
rm -rf "$(DESTDIR)$(ASTSPOOLDIR)"
@ -925,7 +1077,7 @@ nmenuselect: menuselect/nmenuselect menuselect-tree menuselect.makeopts
-@menuselect/nmenuselect menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
# options for make in menuselect/
MAKE_MENUSELECT=CC="$(BUILD_CC)" CXX="" LD="" AR="" RANLIB="" \
MAKE_MENUSELECT=CC="$(BUILD_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" \
CFLAGS="$(BUILD_CFLAGS)" LDFLAGS="$(BUILD_LDFLAGS)" \
$(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
@ -944,7 +1096,7 @@ menuselect/nmenuselect: menuselect/makeopts .lastclean
menuselect/makeopts: makeopts .lastclean
+$(MAKE_MENUSELECT) makeopts
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml build_tools/embed_modules.xml utils/utils.xml agi/agi.xml configure makeopts
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc) $(wildcard $(dir)/*.xml)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml utils/utils.xml agi/agi.xml configure makeopts
@echo "Generating input for menuselect ..."
@echo "<?xml version=\"1.0\"?>" > $@
@echo >> $@
@ -957,7 +1109,6 @@ menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(di
fi
@cat utils/utils.xml >> $@
@cat agi/agi.xml >> $@
@cat build_tools/embed_modules.xml >> $@
@cat sounds/sounds.xml >> $@
@echo "</menu>" >> $@
@ -970,10 +1121,17 @@ ifeq ($(PYTHON),:)
@echo "--------------------------------------------------------------------------"
@false
else
@$(INSTALL) -d doc/rest-api
$(PYTHON) rest-api-templates/make_ari_stubs.py \
rest-api/resources.json .
endif
check-alembic: makeopts
@find contrib/ast-db-manage/ -name '*.pyc' -delete
@ALEMBIC=$(ALEMBIC) build_tools/make_check_alembic config cdr voicemail >&2
.PHONY: install-configs
.PHONY: install-headers
.PHONY: menuselect
.PHONY: main
.PHONY: sounds
@ -984,24 +1142,26 @@ endif
.PHONY: _all
.PHONY: full
.PHONY: _full
.PHONY: prereqs
.PHONY: uninstall
.PHONY: _uninstall
.PHONY: uninstall-all
.PHONY: dont-optimize
.PHONY: uninstall-headers
.PHONY: badshell
.PHONY: installdirs
.PHONY: validate-docs
.PHONY: _clean
.PHONY: ari-stubs
.PHONY: basic-pbx
.PHONY: check-alembic
.PHONY: ld-cache-update
.PHONY: check-old-libdir
.PHONY: $(SUBDIRS_INSTALL)
.PHONY: $(SUBDIRS_DIST_CLEAN)
.PHONY: $(SUBDIRS_CLEAN)
.PHONY: $(SUBDIRS_UNINSTALL)
.PHONY: $(SUBDIRS)
.PHONY: $(MOD_SUBDIRS_EMBED_LDSCRIPT)
.PHONY: $(MOD_SUBDIRS_EMBED_LDFLAGS)
.PHONY: $(MOD_SUBDIRS_EMBED_LIBS)
FORCE:
# This only stops targets within the root Makefile from building in parallel.
.NOTPARALLEL:

View File

@ -18,10 +18,6 @@
# Also note that we can only set one variable per rule, so we have to
# repeat the left hand side to set multiple variables.
ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
_ASTCFLAGS+=${GC_CFLAGS}
endif
ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
STATIC_BUILD=-static
endif
@ -29,7 +25,7 @@ endif
include $(ASTTOPDIR)/Makefile.rules
# If MODULE_PREFIX is defined, use it to run the standard functions to set
# C_MODS, CC_MODS, LOADABLE_MODS and EMBEDDED_MODS.
# C_MODS, CC_MODS and LOADABLE_MODS
# Each word of MODULE_PREFIX is a prefix for filenames that we consider
# valid C or CC modules (eg. app, func ...). Note that the underscore
# is added here, and does not need to be in MODULE_PREFIX
@ -42,15 +38,11 @@ ifneq ($(MODULE_PREFIX),)
ALL_C_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.c,%,$(wildcard $(p)_*.c)))
ALL_CC_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.cc,%,$(wildcard $(p)_*.cc)))
endif
C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))
ifneq ($(findstring EMBED_$(MENUSELECT_CATEGORY),$(MENUSELECT_EMBED)),)
EMBEDDED_MODS:=$(C_MODS) $(CC_MODS)
else
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
endif
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
# Both C++ and C++ sources need their module name in AST_MODULE
# We also pass whatever _INCLUDE list is generated by menuselect
@ -74,16 +66,11 @@ endif
$(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
$(LOADABLE_MODS:%=%.so): _ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
$(EMBEDDED_MODS:%=%.o): _ASTCFLAGS+=-DEMBEDDED_MODULE=$*
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
modules.link: $(addsuffix .eo,$(filter $(EMBEDDED_MODS),$(C_MODS)))
.PHONY: clean uninstall _all moduleinfo makeopts
ifneq ($(LOADABLE_MODS),)
_all: $(LOADABLE_MODS:%=%.so)
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
# linker options and extra libraries for cygwin
@ -91,38 +78,29 @@ ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
LIBS+=-L$(ASTTOPDIR)/main -lasterisk -L$(ASTTOPDIR)/res $($@_LIBS)
# additional libraries in res/
endif
endif
ifneq ($(EMBEDDED_MODS),)
_all: modules.link
__embed_ldscript:
@echo "../$(SUBDIR)/modules.link"
__embed_ldflags:
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
__embed_libs:
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
else
__embed_ldscript:
__embed_ldflags:
__embed_libs:
endif
modules.link:
@rm -f $@
@for file in $(patsubst %,$(SUBDIR)/%,$(filter %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
@for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
clean::
rm -f *.so *.o *.oo *.eo *.i *.ii
rm -f .*.d
rm -f *.s *.i
rm -f *.gcda *.gcno
rm -f modules.link
install:: all
@echo "Installing modules from `basename $(CURDIR)`..."
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done
ifneq ($(findstring :,$(XMLSTARLET)$(BASH)),:)
@if [ -f .moduleinfo ] ; then \
declare -A DISABLED_MODS ;\
for x in $(MENUSELECT_$(MENUSELECT_CATEGORY)) ; do DISABLED_MODS[$${x}]=1 ; done ;\
EXTERNAL_MODS=$$($(XMLSTARLET) sel -t -m "/category/member[support_level = 'external']" -v "@name" -n .moduleinfo) ;\
for x in $${EXTERNAL_MODS} ; do \
if [ -z "$${DISABLED_MODS[$${x}]}" ] ; then \
PJPROJECT_BUNDLED=${PJPROJECT_BUNDLED} $(ASTTOPDIR)/build_tools/download_externals $${x} ;\
fi ;\
done ;\
fi
endif
uninstall::
@ -133,16 +111,16 @@ dist-clean::
.%.moduleinfo: %.c
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.so\">" > $@
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
echo "</member>" >> $@
.%.moduleinfo: %.cc
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.so\">" > $@
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
echo "</member>" >> $@
.moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS))))
@echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\" remove_on_change=\"$(SUBDIR)/modules.link\">" > $@
.moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS)))) $(wildcard $(call tolower,$(MENUSELECT_CATEGORY)).xml)
@echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\">" > $@
@cat $^ >> $@
@echo "</category>" >> $@

View File

@ -1,6 +1,6 @@
#
# Asterisk -- An open source telephony toolkit.
#
#
# Makefile rules
#
# Copyright (C) 2006-2010, Digium, Inc.
@ -17,6 +17,10 @@
-include $(ASTTOPDIR)/makeopts
# Helpful functions
# call with $(call function,...)
tolower = $(shell echo $(1) | tr '[:upper:]' '[:lower:]')
.PHONY: dist-clean
# If 'make' decides to create intermediate files to satisfy a build requirement
@ -27,11 +31,31 @@
# extra cflags to build dependencies. Recursively expanded.
MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP
ifeq ($(findstring ADDRESS_SANITIZER,$(MENUSELECT_CFLAGS)),ADDRESS_SANITIZER)
_ASTLDFLAGS+=-fsanitize=address
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=address
endif
ifeq ($(findstring THREAD_SANITIZER,$(MENUSELECT_CFLAGS)),THREAD_SANITIZER)
_ASTLDFLAGS+=-fsanitize=thread -pie -fPIE
_ASTCFLAGS+=-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread
endif
ifeq ($(findstring LEAK_SANITIZER,$(MENUSELECT_CFLAGS)),LEAK_SANITIZER)
_ASTLDFLAGS+=-fsanitize=leak
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=leak
endif
ifeq ($(findstring UNDEFINED_SANITIZER,$(MENUSELECT_CFLAGS)),UNDEFINED_SANITIZER)
_ASTLDFLAGS+=-fsanitize=undefined
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=undefined
endif
ifeq ($(NOISY_BUILD),)
ECHO_PREFIX=@
CMD_PREFIX=@
else
ECHO_PREFIX=@\#
ECHO_PREFIX=@\#
CMD_PREFIX=
endif
@ -43,6 +67,17 @@ ifneq ($(findstring darwin,$(OSARCH)),)
endif
endif
# gcc version 8.2.1 and above must have partial-inlining disabled to avoid documented bug.
# We must handle cross-compiling and clang so make sure the compiler version string has "gcc"
# somewhere in it before testing the version.
CC_VERS_STRING=$(shell $(CC) --version | grep -i gcc)
ifneq ($(CC_VERS_STRING),)
GCC_VER_GTE821:=$(shell expr `echo '$(CC_VERS_STRING)' | cut -d ' ' -f 3 | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 80201)
ifeq ($(GCC_VER_GTE821),1)
OPTIMIZE+=-fno-partial-inlining
endif
endif
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_CODE_COVERAGE),no)
_ASTCFLAGS+=$(OPTIMIZE)
else
@ -50,8 +85,10 @@ else
endif
ifeq ($(AST_CODE_COVERAGE),yes)
_ASTCFLAGS+=-ftest-coverage -fprofile-arcs
_ASTCFLAGS_COVERAGE=-ftest-coverage -fprofile-arcs
_ASTLDFLAGS+=-ftest-coverage -fprofile-arcs
else
_ASTCFLAGS_COVERAGE=
endif
ifeq ($(findstring $(CONFIG_CFLAGS),$(_ASTCFLAGS)),)
@ -63,6 +100,11 @@ endif
CC_CFLAGS=$(PTHREAD_CFLAGS) $(_ASTCFLAGS) $(ASTCFLAGS)
CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(_ASTCFLAGS) $(ASTCFLAGS))
# Clang -Werror warning suppressions
ifeq ($(C_COMPILER_FAMILY),clang)
CC_CFLAGS+=-Wno-unused-value -Wno-parentheses-equality
endif
ifeq ($(GNU_LD),1)
SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(subst .so,.exports,$@),--warn-common
ifneq ($(wildcard $(subst .so,.dynamics,$@)),)
@ -76,13 +118,15 @@ CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)
# determine whether to double-compile so that the optimizer can report code path problems
# this is only done when developer mode and DONT_OPTIMIZE are both enabled
# in that case, we run the preprocessor to produce a .i or .ii file from the source
# In this case, we run the preprocessor to produce a .i or .ii file from the source
# code, then compile once with optimizer enabled (and the output to /dev/null),
# and if that doesn't fail then compile again with optimizer disabled
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),DONT_OPTIMIZEyes)
ifeq ($(findstring COMPILE_DOUBLE,$(MENUSELECT_CFLAGS)),COMPILE_DOUBLE)
COMPILE_DOUBLE=yes
else
endif
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),)
_ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
endif
@ -95,41 +139,48 @@ endif
ifeq ($(COMPILE_DOUBLE),yes)
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
endif
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
%.o: %.i
$(ECHO_PREFIX) echo " [CCi] $< -> $@"
ifneq ($(AST_CLANG_BLOCKS),)
ifeq ($(COMPILE_DOUBLE),yes)
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) -Wno-unused-command-line-argument
endif
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE) -Wno-unused-command-line-argument
else
ifeq ($(COMPILE_DOUBLE),yes)
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
endif
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
endif
ifneq ($(COMPILE_DOUBLE),yes)
%.o: %.c
$(ECHO_PREFIX) echo " [CC] $< -> $@"
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS)
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
endif
%.i: %.c
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS)
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
%.oo: %.ii
$(ECHO_PREFIX) echo " [CXXi] $< -> $@"
ifeq ($(COMPILE_DOUBLE),yes)
$(CMD_PREFIX) $(CXX) -o /dev/null -c $< $(CXX_CFLAGS) $(OPTIMIZE)
endif
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS)
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
ifneq ($(COMPILE_DOUBLE),yes)
%.oo: %.cc
$(ECHO_PREFIX) echo " [CXX] $< -> $@"
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS)
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
endif
%.ii: %.cc
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS)
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
%.so: %.o
ifeq ($(GNU_LD),1)
@ -145,18 +196,6 @@ endif
$(ECHO_PREFIX) echo " [LDXX] $^ -> $@"
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
%.eo: %.o
$(ECHO_PREFIX) echo " [EMBED] $< -> $@"
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
$(CMD_PREFIX) rm -f .$@.ld
%.eo: %.oo
$(ECHO_PREFIX) echo " [EMBED] $< -> $@"
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
$(CMD_PREFIX) rm -f .$@.ld
%: %.o
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)

View File

@ -1,55 +1,39 @@
==================
| Best Practices |
==================
# Best Practices
The purpose of this document is to define best practices when working with
Asterisk in order to minimize possible security breaches and to provide tried
examples in field deployments. This is a living document and is subject to
examples in field deployments. This is a living document and is subject to
change over time as best practices are defined.
--------
Sections
--------
* Filtering Data:
* [Filtering Data]:
How to protect yourself from redial attacks
* Proper Device Naming:
* [Proper Device Naming]:
Why to not use numbered extensions for devices
* Secure Passwords:
* [Secure Passwords]:
Secure passwords limit your risk to brute force attacks
* Reducing Pattern Match Typos:
* [Reducing Pattern Match Typos]:
Using the 'same' prefix, or using Goto()
* Manager Class Authorizations:
* [Manager Class Authorizations]:
Recognizing potential issues with certain classes of authorization
* Avoid Privilege Escalations:
* [Avoid Privilege Escalations]:
Disable the ability to execute functions that may escalate privileges
* [Important Security Considerations]:
More information on the Asterisk Wiki
----------------
Additional Links
----------------
## Additional Links
Additional links that contain useful information about best practices or
security are listed below.
* Seven Steps to Better SIP Security:
http://blogs.digium.com/2009/03/28/sip-security/
* Asterisk VoIP Security (webinar):
http://www.asterisk.org/security/webinar/
* [Seven Steps to Better SIP Security][blog-sip-security]
* [Asterisk VoIP Security (webinar)][voip-security-webinar]
==============
Filtering Data
==============
## Filtering Data
In the Asterisk dialplan, several channel variables contain data potentially
supplied by outside sources. This could lead to a potential security concern
where those outside sources may send cleverly crafted strings of data which
In the Asterisk dialplan, several channel variables contain data potentially
supplied by outside sources. This could lead to a potential security concern
where those outside sources may send cleverly crafted strings of data which
could be utilized, e.g. to place calls to unexpected locations.
An example of this can be found in the use of pattern matching and the ${EXTEN}
@ -57,24 +41,25 @@ channel variable. Note that ${EXTEN} is not the only system created channel
variable, so it is important to be aware of where the data you're using is
coming from.
For example, this common dialplan takes 2 or more characters of data, starting
For example, this common dialplan takes 2 or more characters of data, starting
with a number 0-9, and then accepts any additional information supplied by the
request.
[NOTE: We use SIP in this example, but is not limited to SIP only; protocols
such as Jabber/XMPP or IAX2 are also susceptible to the same sort of
injection problem.]
**NOTE**:
> We use SIP in this example, but is not limited to SIP only; protocols such as
> Jabber/XMPP or IAX2 are also susceptible to the same sort of injection problem.
```INI
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Dial(SIP/${EXTEN})
exten => _X.,n,Hangup()
```
This dialplan may be utilized to accept calls to extensions, which then dial a
numbered device name configured in one of the channel configuration files (such
as sip.conf, iax.conf, etc...) (see the section Proper Device Naming for more
information on why this approach is flawed).
as sip.conf, iax.conf, etc...) (see [Proper Device Naming] for more information
on why this approach is flawed).
The example we've given above looks harmless enough until you take into
consideration that several channel technologies accept characters that could
@ -83,27 +68,38 @@ to dial extension 500 (which in our example above would create the string
SIP/500 and is then used by the Dial() application to place a call), someone
could potentially send a string like "500&SIP/itsp/14165551212".
The string "500&SIP/itsp/14165551212" would then be contained within the
The string "500&SIP/itsp/14165551212" would then be contained within the
${EXTEN} channel variable, which is then utilized by the Dial() application in
our example, thereby giving you the dialplan line of:
```INI
exten => _X.,n,Dial(SIP/500&SIP/itsp/14165551212)
```
Our example above has now provided someone with a method to place calls out of
your ITSP in a place where you didn't expect to allow it. There are a couple of
ways in which you can mitigate this impact: stricter pattern matching, or using
the FILTER() dialplan function.
Strict Pattern Matching
-----------------------
The CALLERID(num) and CALLERID(name) values are other commonly used values that
are sources of data potentially supplied by outside sources. If you use these
values as parameters to the System(), MixMonitor(), or Monitor() applications
or the SHELL() dialplan function, you can allow injection of arbitrary operating
system command execution. The FILTER() dialplan function is available to remove
dangerous characters from untrusted strings to block the command injection.
### Strict Pattern Matching
The simple way to mitigate this problem is with a strict pattern match that does
not utilize the period (.) or bang (!) characters to match on one-or-more
not utilize the period (.) or bang (!) characters to match on one-or-more
characters or zero-or-more characters (respectively). To fine tune our example
to only accept three digit extensions, we could change our pattern match to
be:
```INI
exten => _XXX,n,Dial(SIP/${EXTEN})
```
In this way, we have minimized our impact because we're not allowing anything
other than the numbers zero through nine. But in some cases we really do need to
@ -111,8 +107,8 @@ handle variable pattern matches, such as when dialing international numbers
or when we want to handle something like a SIP URI. In this case, we'll need to
utilize the FILTER() dialplan function.
Using FILTER()
--------------
### Using FILTER()
The FILTER() dialplan function is used to filter strings by only allowing
characters that you have specified. This is a perfect candidate for controlling
@ -121,14 +117,16 @@ application which will contain dynamic information passed to Asterisk from an
external source. Lets take a look at how we can use FILTER() to control what
data we allow.
Using our previous example to accept any string length of 2 or more characters,
starting with a number of zero through nine, we can use FILTER() to limit what
Using our previous example to accept any string length of 2 or more characters,
starting with a number of zero through nine, we can use FILTER() to limit what
we will accept to just numbers. Our example would then change to something like:
```INI
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Dial(SIP/${FILTER(0-9,${EXTEN})})
exten => _X.,n,Hangup()
```
Note how we've wrapped the ${EXTEN} channel variable with the FILTER() function
which will then only pass back characters that fit into the numerical range that
@ -139,17 +137,20 @@ Dial() application directly, we could save the value to a channel variable,
which has a side effect of being usable in other locations of your dialplan if
necessary, and to handle error checking in a separate location.
```INI
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
exten => _X.,n,Hangup()
```
Now we can use the ${SAFE_EXTEN} channel variable anywhere throughout the rest
of our dialplan, knowing we've already filtered it. We could also perform an
error check to verify that what we've received in ${EXTEN} also matches the data
passed back by FILTER(), and to fail the call if things do not match.
```INI
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
@ -161,14 +162,17 @@ exten => error,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did not match.)
exten => error,n,Verbose(2,EXTEN: "${EXTEN}" -- SAFE_EXTEN: "${SAFE_EXTEN}")
exten => error,n,Playback(silence/1&invalid)
exten => error,n,Hangup()
```
Another example would be using FILTER() to control the characters we accept when
we're expecting to get a SIP URI for dialing.
```INI
[incoming]
exten => _[0-9a-zA-Z].,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _[0-9a-zA-Z].,n,Dial(SIP/${FILTER(.@0-9a-zA-Z,${EXTEN})
exten => _[0-9a-zA-Z].,n,Hangup()
```
Of course the FILTER() function doesn't check the formatting of the incoming
request. There is also the REGEX() dialplan function which can be used to
@ -181,9 +185,7 @@ by typing "core show function FILTER" and "core show function REGEX" from your
Asterisk console.
====================
Proper Device Naming
====================
## Proper Device Naming
In Asterisk, the concept of an extension number being tied to a specific device
does not exist. Asterisk is aware of devices it can call or receive calls from,
@ -201,10 +203,12 @@ device configurations which utilize a number, and even worse, a password that
matches the devices name. For example, take a look at this poorly created device
in sip.conf:
```INI
[1000]
type=friend
context=international_dialing
secret=1000
```
As implied by the context, we've permitted a device named 1000 with a password
of 1000 to place calls internationally. If your PBX system is accessible via
@ -217,10 +221,12 @@ A more secure example for the device would be to use something like the MAC
address of the device, along with a strong password (see the section Secure
Passwords). The following example would be more secure:
```INI
[0004f2040001]
type=friend
context=international_dialing
secret=aE3%B8*$jk^G
```
Then in your dialplan, you would reference the device via the MAC address of the
device (or if using the softphone, a MAC address of a network interface on the
@ -230,25 +236,25 @@ Also note that you should NOT use this password, as it will likely be one of the
first ones added to the dictionary for brute force attacks.
================
Secure Passwords
================
## Secure Passwords
Secure passwords are necessary in many (if not all) environments, and Asterisk
Secure passwords are necessary in many (if not all) environments, and Asterisk
is certainly no exception, especially when it comes to expensive long distance
calls that could potentially cost your company hundreds or thousands of dollars
on an expensive monthly phone bill, with little to no recourse to fight the
charges.
Whenever you are positioned to add a password to your system, whether that is
for a device configuration, a database connection, or any other secure
for a device configuration, a database connection, or any other secure
connection, be sure to use a secure password. A good example of a secure
password would be something like:
```
aE3%B8*$jk^G
```
Our password also contains 12 characters with a mixture of upper and
lower case characters, numbers, and symbols. Because these passwords are likely
lower case characters, numbers, and symbols. Because these passwords are likely
to only be entered once, or loaded via a configuration file, there is
no need to create simple passwords, even in testing. Some of the holes found in
production systems used for exploitations involve finding the one test extension
@ -256,19 +262,18 @@ that contains a weak password that was forgotten prior to putting a system into
production.
Using a web search you can find several online password generators such as
http://www.strongpasswordgenerator.com or there are several scripts that can be
[Strong Password Generator] or there are several scripts that can be
used to generate a strong password.
============================
Reducing Pattern Match Typos
============================
## Reducing Pattern Match Typos
As of Asterisk 1.6.2, a new method for reducing the number of complex pattern
matches you need to enter, which can reduce typos in your dialplan, has been
implemented. Traditionally, a dialplan with a complex pattern match would look
something like:
```INI
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
exten => _[3-5]XXX,n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
exten => _[3-5]XXX,n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
@ -281,12 +286,14 @@ exten => _[3-5]XXX,n,Hangup()
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
exten => error,n,Playback(silence/1&num-not-in-db)
exten => error,n,Hangup()
```
Of course there exists the possibility for a typo when retyping the pattern
match _[3-5]XXX which will match on extensions 3000 through 5999. We can
match _\[3-5\]XXX which will match on extensions 3000 through 5999. We can
minimize this error by utilizing the same => prefix on all lines beyond the
first one. Our same dialplan with using same => would look like the following:
```INI
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
same => n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
same => n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
@ -299,11 +306,10 @@ same => n,Hangup()
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
same => n,Playback(silence/1&num-not-in-db)
same => n,Hangup()
```
============================
Manager Class Authorizations
============================
## Manager Class Authorizations
Manager accounts have associated class authorizations that define what actions
and events that account can execute/receive. In order to run Asterisk commands
@ -315,6 +321,7 @@ have the potential to alter or affect the system as well, even though the
class authorization for origination commands is "originate". Take, for example,
the Originate manager command:
```
Action: Originate
Channel: SIP/foo
Exten: s
@ -322,17 +329,20 @@ Context: default
Priority: 1
Application: System
Data: echo hello world!
```
This manager command will attempt to execute an Asterisk application, System,
which is normally associated with the "system" class authorication. While some
which is normally associated with the "system" class authorization. While some
checks have been put into Asterisk to take this into account, certain dialplan
configurations and/or clever manipulation of the Originate manager action can
circumvent these checks. For example, take the following dialplan:
```INI
exten => s,1,Verbose(Incoming call)
same => n,MixMonitor(foo.wav,,${EXEC_COMMAND})
same => n,Dial(SIP/bar)
same => n,Hangup()
```
Whatever has been defined in the variable EXEC_COMMAND will be executed after
MixMonitor has finished recording the call. The dialplan writer may have
@ -347,23 +357,34 @@ same as the class authorization "system". Good system configuration, such as
not running Asterisk as root, can prevent serious problems from arising when
allowing external connections to originate calls into Asterisk.
===========================
Avoid Privilege Escalations
===========================
## Avoid Privilege Escalations
External control protocols, such as Manager, often have the ability to get and
set channel variables; which allows the execution of dialplan functions.
Dialplan functions within Asterisk are incredibly powerful, which is wonderful
for building applications using Asterisk. But during the read or write
execution, certain diaplan functions do much more. For example, reading the
execution, certain dialplan functions do much more. For example, reading the
SHELL() function can execute arbitrary commands on the system Asterisk is
running on. Writing to the FILE() function can change any file that Asterisk has
write access to.
When these functions are executed from an external protocol, that execution
could result in a privilege escalation. Asterisk can inhibit the execution of
these functions, if live_dangerously in the [options] section of asterisk.conf
these functions, if live_dangerously in the \[options\] section of asterisk.conf
is set to no.
In Asterisk 12 and later, live_dangerously defaults to no.
[voip-security-webinar]: https://www.asterisk.org/security/webinar/
[blog-sip-security]: http://blogs.digium.com/2009/03/28/sip-security/
[Strong Password Generator]: https://www.strongpasswordgenerator.com
[Filtering Data]: #filtering-data
[Proper Device Naming]: #proper-device-naming
[Secure Passwords]: #secure-passwords
[Reducing Pattern Match Typos]: #reducing-pattern-match-typos
[Manager Class Authorizations]: #manager-class-authorizations
[Avoid Privilege Escalations]: #avoid-privilege-escalations
[Important Security Considerations]: https://wiki.asterisk.org/wiki/display/AST/Important+Security+Considerations

View File

@ -9,18 +9,18 @@ potential licensing and/or patent implications that has on your usage and
distribution of Asterisk.
Even though Asterisk is released as open source under the terms of the
GPLv2 (see LICENSE for details), no core functionality in Asterisk has any
GPLv2 (see LICENSE for details), no core functionality in Asterisk has any
dependencies on libraries that are licensed under the GPL. One reason a module
may be in the add-ons category is that it may have a GPL dependency. Since
these dependencies are not compatible with dual licensing of Asterisk, the
dependant modules are set aside to make it clear that they may not be used
with commercial versions of Asterisk, unless other licensing arrangements are
dependant modules are set aside to make it clear that they may not be used
with commercial versions of Asterisk, unless other licensing arrangements are
made with the copyright holders of those dependencies.
Another reason that modules may be set aside is that there may be
additional restrictions on the usage of the code imposed by the license or
related patents. The MySQL and MP3 modules are examples of this.
If you have any questions, contact your lawyer.
===============================================================================

View File

@ -1,98 +1,71 @@
===============================================================================
=== The Asterisk(R) Open Source PBX
===
=== by Mark Spencer <markster@digium.com>
=== and the Asterisk.org developer community
===
=== Copyright (C) 2001-2009 Digium, Inc.
=== and other copyright holders.
===============================================================================
-------------------------------------------------------------------------------
--- SECURITY ------------------------------------------------------------------
# The Asterisk(R) Open Source PBX
```text
By Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
Copyright (C) 2001-2019 Digium, Inc. and other copyright holders.
```
## SECURITY
It is imperative that you read and fully understand the contents of
the security information document before you attempt to configure and run
an Asterisk server.
If you downloaded Asterisk as a tarball, see the security section in the PDF
version of the documentation in doc/tex/asterisk.pdf. Alternatively, pull up
the HTML version of the documentation in doc/tex/asterisk/index.html. The
source for the security document is available in doc/tex/security.tex.
-------------------------------------------------------------------------------
See [Important Security Considerations] for more information.
-------------------------------------------------------------------------------
--- WHAT IS ASTERISK ? --------------------------------------------------------
## WHAT IS ASTERISK ?
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
sense, middleware between Internet and telephony channels on the bottom,
and Internet and telephony applications at the top. However, Asterisk supports
more telephony interfaces than just Internet telephony. Asterisk also has a
vast amount of support for traditional PSTN telephony, as well. For more
information on the project itself, please visit the Asterisk home page at:
vast amount of support for traditional PSTN telephony, as well.
http://www.asterisk.org
The official Asterisk wiki can be found at:
https://wiki.asterisk.org
In addition you'll find lots of information compiled by the Asterisk
community on this Wiki:
http://www.voip-info.org/wiki-Asterisk
For more information on the project itself, please visit the Asterisk
[home page] and the official [wiki]. In addition you'll find lots
of information compiled by the Asterisk community at [voip-info.org].
There is a book on Asterisk published by O'Reilly under the Creative Commons
License. It is available in book stores as well as in a downloadable version on
the http://www.asteriskdocs.org web site.
-------------------------------------------------------------------------------
the [asteriskdocs.org] web site.
-------------------------------------------------------------------------------
--- SUPPORTED OPERATING SYSTEMS -----------------------------------------------
## SUPPORTED OPERATING SYSTEMS
### Linux
--- Linux
The Asterisk Open Source PBX is developed and tested primarily on the
GNU/Linux operating system, and is supported on every major GNU/Linux
distribution.
--- Others
### Others
Asterisk has also been 'ported' and reportedly runs properly on other
operating systems as well, including Sun Solaris, Apple's Mac OS X, Cygwin,
and the BSD variants.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- GETTING STARTED -----------------------------------------------------------
## GETTING STARTED
First, be sure you've got supported hardware (but note that you don't need
ANY special hardware, not even a sound card) to install and run Asterisk.
Supported telephony hardware includes:
Supported telephony hardware includes:
* All Analog and Digital Interface cards from [Digium]
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
* any full duplex sound card supported by ALSA, OSS, or PortAudio
* any ISDN card supported by mISDN on Linux
* The Xorcom Astribank channel bank
* VoiceTronix OpenLine products
* All Analog and Digital Interface cards from Digium (www.digium.com)
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
* any full duplex sound card supported by ALSA, OSS, or PortAudio
* any ISDN card supported by mISDN on Linux
* The Xorcom Astribank channel bank
* VoiceTronix OpenLine products
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- UPGRADING FROM AN EARLIER VERSION -----------------------------------------
### UPGRADING FROM AN EARLIER VERSION
If you are updating from a previous version of Asterisk, make sure you
read the UPGRADE.txt file in the source directory. There are some files
read the [UPGRADE.txt] file in the source directory. There are some files
and configuration options that you will have to change, even though we
made every effort possible to maintain backwards compatibility.
In order to discover new features to use, please check the configuration
examples in the /configs directory of the source code distribution. For a
list of new features in this version of Asterisk, see the CHANGES file.
-------------------------------------------------------------------------------
examples in the [configs] directory of the source code distribution. For a
list of new features in this version of Asterisk, see the [CHANGES] file.
-------------------------------------------------------------------------------
--- NEW INSTALLATIONS ---------------------------------------------------------
### NEW INSTALLATIONS
Ensure that your system contains a compatible compiler and development
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
@ -101,55 +74,54 @@ the gcc language extensions. In addition, your system needs to have the C
library headers available, and the headers and libraries for ncurses.
There are many modules that have additional dependencies. To see what
libraries are being looked for, see ./configure --help, or run
"make menuselect" to view the dependencies for specific modules.
libraries are being looked for, see `./configure --help`, or run
`make menuselect` to view the dependencies for specific modules.
On many distributions, these dependencies are installed by packages with names
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
or similar.
So, let's proceed:
So, let's proceed:
1. Read this file.
1) Read this README file.
There are more documents than this one in the doc/ directory. You may also
There are more documents than this one in the [doc] directory. You may also
want to check the configuration files that contain examples and reference
guides. They are all in the configs/ directory.
guides in the [configs] directory.
2) Run "./configure"
2. Run `./configure`
Execute the configure script to guess values for system-dependent
variables used during compilation.
3) Run "make menuselect" [optional]
3. Run `make menuselect` _\[optional]_
This is needed if you want to select the modules that will be compiled and to
check dependencies for various optional modules.
4) Run "make"
4. Run `make`
Assuming the build completes successfully:
Assuming the build completes successfully:
5) Run "make install"
5. Run `make install`
If this is your first time working with Asterisk, you may wish to install
the sample PBX, with demonstration extensions, etc. If so, run:
6) "make samples"
6. Run `make samples`
Doing so will overwrite any existing configuration files you have installed.
Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
# asterisk -vvvc
7. Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
```
# asterisk -vvvc
```
You'll see a bunch of verbose messages fly by your screen as Asterisk
initializes (that's the "very very verbose" mode). When it's ready, if
you specified the "c" then you'll get a command line console, that looks
like this:
*CLI>
```
*CLI>
```
You can type "core show help" at any time to get help with the system. For help
with a specific command, type "core show help <command>". To start the PBX using
your sound card, you can type "console dial" to dial the PBX. Then you can use
@ -162,56 +134,53 @@ then it won't work right (not yet).
information on how to start and stop Asterisk, as well as all the command
line options for starting Asterisk.
Feel free to look over the configuration files in /etc/asterisk, where you
Feel free to look over the configuration files in `/etc/asterisk`, where you
will find a lot of information about what you can do with Asterisk.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- ABOUT CONFIGURATION FILES -------------------------------------------------
### ABOUT CONFIGURATION FILES
All Asterisk configuration files share a common format. Comments are
delimited by ';' (since '#' of course, being a DTMF digit, may occur in
many places). A configuration file is divided into sections whose names
appear in []'s. Each section typically contains two types of statements,
those of the form 'variable = value', and those of the form 'object =>
parameters'. Internally the use of '=' and '=>' is exactly the same, so
parameters'. Internally the use of '=' and '=>' is exactly the same, so
they're used only to help make the configuration file easier to
understand, and do not affect how it is actually parsed.
Entries of the form 'variable=value' set the value of some parameter in
asterisk. For example, in dahdi.conf, one might specify:
asterisk. For example, in [chan_dahdi.conf], one might specify:
```
switchtype=national
```
In order to indicate to Asterisk that the switch they are connecting to is
of the type "national". In general, the parameter will apply to
instantiations which occur below its specification. For example, if the
configuration file read:
```
switchtype = national
channel => 1-4
channel => 10-12
switchtype = dms100
channel => 25-47
```
The "national" switchtype would be applied to channels one through
four and channels 10 through 12, whereas the "dms100" switchtype would
apply to channels 25 through 47.
The "object => parameters" instantiates an object with the given
parameters. For example, the line "channel => 25-47" creates objects for
the channels 25 through 47 of the card, obtaining the settings
from the variables specified above.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- SPECIAL NOTE ON TIME ------------------------------------------------------
### SPECIAL NOTE ON TIME
Those using SIP phones should be aware that Asterisk is sensitive to
large jumps in time. Manually changing the system time using date(1)
(or other similar commands) may cause SIP registrations and other
internal processes to fail. If your system cannot keep accurate time
by itself use NTP (http://www.ntp.org/) to keep the system clock
by itself use [NTP] to keep the system clock
synchronized to "real time". NTP is designed to keep the system clock
synchronized by speeding up or slowing down the system clock until it
is synchronized to "real time" rather than by jumping the time and
@ -228,10 +197,8 @@ on UTC. UTC does not use daylight savings time.
Also note that this issue is separate from the clocking of TDM
channels, and is known to at least affect SIP registrations.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- FILE DESCRIPTORS ----------------------------------------------------------
### FILE DESCRIPTORS
Depending on the size of your system and your configuration,
Asterisk can consume a large number of file descriptors. In UNIX,
@ -247,50 +214,56 @@ calls that your system can handle. For example, if the limit is set
at 1024 (a common default value) Asterisk can handle approximately 150
SIP calls simultaneously. To change the number of file descriptors
follow the instructions for your system below:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- PAM-based Linux System ----------------------------------------------------
#### PAM-BASED LINUX SYSTEM
If your system uses PAM (Pluggable Authentication Modules) edit
/etc/security/limits.conf. Add these lines to the bottom of the file:
`/etc/security/limits.conf`. Add these lines to the bottom of the file:
```text
root soft nofile 4096
root hard nofile 8196
asterisk soft nofile 4096
asterisk hard nofile 8196
```
(adjust the numbers to taste). You may need to reboot the system for
these changes to take effect.
== Generic UNIX System ==
#### GENERIC UNIX SYSTEM
If there are no instructions specifically adapted to your system
above you can try adding the command "ulimit -n 8192" to the script
above you can try adding the command `ulimit -n 8192` to the script
that starts Asterisk.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--- MORE INFORMATION ----------------------------------------------------------
## MORE INFORMATION
See the doc directory for more documentation on various features. Again,
please read all the configuration samples that include documentation on
the configuration options.
See the [doc] directory for more documentation on various features.
Again, please read all the configuration samples that include documentation
on the configuration options.
If this release of Asterisk was downloaded from a tarball, then some
additional documentation should have been included.
* doc/tex/asterisk.pdf --- PDF version of the documentation
* doc/tex/asterisk/index.html --- HTML version of the documentation
Finally, you may wish to visit the [support] site and join the [mailing
list] if you're interested in getting more information.
Finally, you may wish to visit the web site and join the mailing list if
you're interested in getting more information.
Welcome to the growing worldwide community of Asterisk users!
```
Mark Spencer, and the Asterisk.org development community
```
http://www.asterisk.org/support
---
Welcome to the growing worldwide community of Asterisk users!
-------------------------------------------------------------------------------
--- Mark Spencer, and the Asterisk.org development community
-------------------------------------------------------------------------------
Asterisk is a trademark of Digium, Inc.
[home page]: https://www.asterisk.org
[support]: https://www.asterisk.org/support
[wiki]: https://wiki.asterisk.org/
[mailing list]: http://lists.digium.com/mailman/listinfo/asterisk-users
[chan_dahdi.conf]: configs/samples/chan_dahdi.conf.sample
[voip-info.org]: http://www.voip-info.org/wiki-Asterisk
[asteriskdocs.org]: http://www.asteriskdocs.org
[NTP]: http://www.ntp.org/
[Digium]: https://www.digium.com/
[UPGRADE.txt]: UPGRADE.txt
[CHANGES]: CHANGES
[configs]: configs
[doc]: doc
[Important Security Considerations]: https://wiki.asterisk.org/wiki/display/AST/Important+Security+Considerations

View File

@ -1,218 +0,0 @@
=========================================================
===
=== Information for upgrading from Asterisk 1.0 to 1.2
===
=== This file documents all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also includes advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=========================================================
Compiling:
* The Asterisk 1.2 source code now uses C language features
supported only by 'modern' C compilers. Generally, this means GCC
version 3.0 or higher, although some GCC 2.96 releases will also
work. Some non-GCC compilers that support C99 and the common GCC
extensions (including anonymous structures and unions) will also
work. All releases of GCC 2.95 do _not_ have the requisite feature
support; systems using that compiler will need to be upgraded to
a more recent compiler release.
Dialplan Expressions:
* The dialplan expression parser (which handles $[ ... ] constructs)
has gone through a major upgrade, but has one incompatible change:
spaces are no longer required around expression operators, including
string comparisons. However, you can now use quoting to keep strings
together for comparison. For more details, please read the
doc/README.variables file, and check over your dialplan for possible
problems.
Agents:
* The default for ackcall has been changed to "no" instead of "yes"
because of a bug which caused the "yes" behavior to generally act like
"no". You may need to adjust the value if your agents behave
differently than you expect with respect to acknowledgement.
* The AgentCallBackLogin application now requires a second '|' before
specifying an extension@context. This is to distinguish the options
string from the extension, so that they do not conflict. See
'show application AgentCallbackLogin' for more details.
Parking:
* Parking behavior has changed slightly; when a parked call times out,
Asterisk will attempt to deliver the call back to the extension that
parked it, rather than the 's' extension. If that extension is busy
or unavailable, the parked call will be lost.
Dialing:
* The Caller*ID of the outbound leg is now the extension that was
called, rather than the Caller*ID of the inbound leg of the call. The
"o" flag for Dial can be used to restore the original behavior if
desired. Note that if you are looking for the originating callerid
from the manager event, there is a new manager event "Dial" which
provides the source and destination channels and callerid.
IAX:
* The naming convention for IAX channels has changed in two ways:
1. The call number follows a "-" rather than a "/" character.
2. The name of the channel has been simplified to IAX2/peer-callno,
rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
SIP:
* The global option "port" in 1.0.X that is used to set which port to
bind to has been changed to "bindport" to be more consistent with
the other channel drivers and to avoid confusion with the "port"
option for users/peers.
* The "Registry" event now uses "Username" rather than "User" for
consistency with IAX.
Applications:
* With the addition of dialplan functions (which operate similarly
to variables), the SetVar application has been renamed to Set.
* The CallerPres application has been removed. Use SetCallerPres
instead. It accepts both numeric and symbolic names.
* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
CheckGroup have been deprecated in favor of functions. Here is a
table of their replacements:
GetGroupCount([groupname][@category] GROUP_COUNT([groupname][@category]) Set(GROUPCOUNT=${GROUP_COUNT()})
GroupMatchCount(groupmatch[@category]) GROUP_MATCH_COUNT(groupmatch[@category]) Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
SetGroup(groupname[@category]) GROUP([category])=groupname Set(GROUP()=test)
CheckGroup(max[@category]) N/A GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
Note that CheckGroup does not have a direct replacement. There is
also a new function called GROUP_LIST() which will return a space
separated list of all of the groups set on a channel. The GROUP()
function can also return the name of the group set on a channel when
used in a read environment.
* The applications DBGet and DBPut have been deprecated in favor of
functions. Here is a table of their replacements:
DBGet(foo=family/key) Set(foo=${DB(family/key)})
DBPut(family/key=${foo}) Set(DB(family/key)=${foo})
* The application SetLanguage has been deprecated in favor of the
function LANGUAGE().
SetLanguage(fr) Set(LANGUAGE()=fr)
The LANGUAGE function can also return the currently set language:
Set(MYLANG=${LANGUAGE()})
* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
have been deprecated in favor of the function TIMEOUT(timeouttype):
AbsoluteTimeout(300) Set(TIMEOUT(absolute)=300)
DigitTimeout(15) Set(TIMEOUT(digit)=15)
ResponseTimeout(15) Set(TIMEOUT(response)=15)
The TIMEOUT() function can also return the currently set timeouts:
Set(DTIMEOUT=${TIMEOUT(digit)})
* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
deprecated in favor of the CALLERID(datatype) function:
SetCIDName(Joe Cool) Set(CALLERID(name)=Joe Cool)
SetCIDNum(2025551212) Set(CALLERID(number)=2025551212)
SetRDNIS(2024561414) Set(CALLERID(RDNIS)=2024561414)
* The application Record now uses the period to separate the filename
from the format, rather than the colon.
* The application VoiceMail now supports a 'temporary' greeting for each
mailbox. This greeting can be recorded by using option 4 in the
'mailbox options' menu, and 'change your password' option has been
moved to option 5.
* The application VoiceMailMain now only matches the 'default' context if
none is specified in the arguments. (This was the previously
documented behavior, however, we didn't follow that behavior.) The old
behavior can be restored by setting searchcontexts=yes in voicemail.conf.
Queues:
* A queue is now considered empty not only if there are no members but if
none of the members are available (e.g. agents not logged on). To
restore the original behavior, use "leavewhenempty=strict" or
"joinwhenempty=strict" instead of "=yes" for those options.
* It is now possible to use multi-digit extensions in the exit context
for a queue (although you should not have overlapping extensions,
as there is no digit timeout). This means that the EXITWITHKEY event
in queue_log can now contain a key field with more than a single
character in it.
Extensions:
* By default, there is a new option called "autofallthrough" in
extensions.conf that is set to yes. Asterisk 1.0 (and earlier)
behavior was to wait for an extension to be dialed after there were no
more extensions to execute. "autofallthrough" changes this behavior
so that the call will immediately be terminated with BUSY,
CONGESTION, or HANGUP based on Asterisk's best guess. If you are
writing an extension for IVR, you must use the WaitExten application
if "autofallthrough" is set to yes.
AGI:
* AGI scripts did not always get SIGHUP at the end, previously. That
behavior has been fixed. If you do not want your script to terminate
at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
be ignored within your application.
* CallerID is reported with agi_callerid and agi_calleridname instead
of a single parameter holding both.
Music On Hold:
* The preferred format for musiconhold.conf has changed; please see the
sample configuration file for the new format. The existing format
is still supported but will generate warnings when the module is loaded.
chan_modem:
* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
in this release, and will be removed in the next major Asterisk release.
Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
path for aopen and bestdata modem users.
MeetMe:
* The conference application now allows users to increase/decrease their
speaking volume and listening volume (independently of each other and
other users); the 'admin' and 'user' menus have changed, and new sound
files are included with this release. However, if a user calling in
over a Zaptel channel that does NOT have hardware DTMF detection
increases their speaking volume, it is likely they will no longer be
able to enter/exit the menu or make any further adjustments, as the
software DTMF detector will not be able to recognize the DTMF coming
from their device.
GetVar Manager Action:
* Previously, the behavior of the GetVar manager action reported the value
of a variable in the following manner:
> name: value
This has been changed to a manner similar to the SetVar action and is now
> Variable: name
> Value: value

View File

@ -1,498 +0,0 @@
=========================================================
===
=== Information for upgrading from Asterisk 1.2 to 1.4
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also includes advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
===
=========================================================
Build Process (configure script):
Asterisk now uses an autoconf-generated configuration script to learn how it
should build itself for your system. As it is a standard script, running:
$ ./configure --help
will show you all the options available. This script can be used to tell the
build process what libraries you have on your system (if it cannot find them
automatically), which libraries you wish to have ignored even though they may
be present, etc.
You must run the configure script before Asterisk will build, although it will
attempt to automatically run it for you with no options specified; for most
users, that will result in a similar build to what they would have had before
the configure script was added to the build process (except for having to run
'make' again after the configure script is run). Note that the configure script
does NOT need to be re-run just to rebuild Asterisk; you only need to re-run it
when your system configuration changes or you wish to build Asterisk with
different options.
Build Process (module selection):
The Asterisk source tree now includes a basic module selection and build option
selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
In this tool, you can disable building of modules that you don't care about,
turn on/off global options for the build and see which modules will not
(and cannot) be built because your system does not have the required external
dependencies installed.
The resulting file from menuselect is called 'menuselect.makeopts'. Note that
the resulting menuselect.makeopts file generally contains which modules *not*
to build. The modules listed in this file indicate which modules have unmet
dependencies, a present conflict, or have been disabled by the user in the
menuselect interface. Compiler Flags can also be set in the menuselect
interface. In this case, the resulting file contains which CFLAGS are in use,
not which ones are not in use.
If you would like to save your choices and have them applied against all
builds, the file can be copied to '~/.asterisk.makeopts' or
'/etc/asterisk.makeopts'.
Build Process (Makefile targets):
The 'valgrind' and 'dont-optimize' targets have been removed; their functionality
is available by enabling the DONT_OPTIMIZE setting in the 'Compiler Flags' menu
in the menuselect tool.
It is now possible to run most make targets against a single subdirectory; from
the top level directory, for example, 'make channels' will run 'make all' in the
'channels' subdirectory. This also is true for 'clean', 'distclean' and 'depend'.
Sound (prompt) and Music On Hold files:
Beginning with Asterisk 1.4, the sound files and music on hold files supplied for
use with Asterisk have been replaced with new versions produced from high quality
master recordings, and are available in three languages (English, French and
Spanish) and in five formats (WAV (uncompressed), mu-Law, a-Law, GSM and G.729).
In addition, the music on hold files provided by opsound.org Music are now available
in the same five formats, but no longer available in MP3 format.
The Asterisk 1.4 tarball packages will only include English prompts in GSM format,
(as were supplied with previous releases) and the opsound.org MOH files in WAV format.
All of the other variations can be installed by running 'make menuselect' and
selecting the packages you wish to install; when you run 'make install', those
packages will be downloaded and installed along with the standard files included
in the tarball.
If for some reason you expect to not have Internet access at the time you will be
running 'make install', you can make your package selections using menuselect and
then run 'make sounds' to download (only) the sound packages; this will leave the
sound packages in the 'sounds' subdirectory to be used later during installation.
WARNING: Asterisk 1.4 supports a new layout for sound files in multiple languages;
instead of the alternate-language files being stored in subdirectories underneath
the existing files (for French, that would be digits/fr, letters/fr, phonetic/fr,
etc.) the new layout creates one directory under /var/lib/asterisk/sounds for the
language itself, then places all the sound files for that language under that
directory and its subdirectories. This is the layout that will be created if you
select non-English languages to be installed via menuselect, HOWEVER Asterisk does
not default to this layout and will not find the files in the places it expects them
to be. If you wish to use this layout, make sure you put 'languageprefix=yes' in your
/etc/asterisk/asterisk.conf file, so that Asterisk will know how the files were
installed.
PBX Core:
* The (very old and undocumented) ability to use BYEXTENSION for dialing
instead of ${EXTEN} has been removed.
* Builtin (res_features) transfer functionality attempts to use the context
defined in TRANSFER_CONTEXT variable of the transferer channel first. If
not set, it uses the transferee variable. If not set in any channel, it will
attempt to use the last non macro context. If not possible, it will default
to the current context.
* The autofallthrough setting introduced in Asterisk 1.2 now defaults to 'yes';
if your dialplan relies on the ability to 'run off the end' of an extension
and wait for a new extension without using WaitExten() to accomplish that,
you will need set autofallthrough to 'no' in your extensions.conf file.
Command Line Interface:
* 'show channels concise', designed to be used by applications that will parse
its output, previously used ':' characters to separate fields. However, some
of those fields can easily contain that character, making the output not
parseable. The delimiter has been changed to '!'.
Applications:
* In previous Asterisk releases, many applications would jump to priority n+101
to indicate some kind of status or error condition. This functionality was
marked deprecated in Asterisk 1.2. An option to disable it was provided with
the default value set to 'on'. The default value for the global priority
jumping option is now 'off'.
* The applications Cut, Sort, DBGet, DBPut, SetCIDNum, SetCIDName, SetRDNIS,
AbsoluteTimeout, DigitTimeout, ResponseTimeout, SetLanguage, GetGroupCount,
and GetGroupMatchCount were all deprecated in version 1.2, and therefore have
been removed in this version. You should use the equivalent dialplan
function in places where you have previously used one of these applications.
* The application SetGlobalVar has been deprecated. You should replace uses
of this application with the following combination of Set and GLOBAL():
Set(GLOBAL(name)=value). You may also access global variables exclusively by
using the GLOBAL() dialplan function, instead of relying on variable
interpolation falling back to globals when no channel variable is set.
* The application SetVar has been renamed to Set. The syntax SetVar was marked
deprecated in version 1.2 and is no longer recognized in this version. The
use of Set with multiple argument pairs has also been deprecated. Please
separate each name/value pair into its own dialplan line.
* app_read has been updated to use the newer options codes, using "skip" or
"noanswer" will not work. Use s or n. Also there is a new feature i, for
using indication tones, so typing in skip would give you unexpected results.
* OSPAuth is added to authenticate OSP tokens in in_bound call setup messages.
* The CONNECT event in the queue_log from app_queue now has a second field
in addition to the holdtime field. It contains the unique ID of the
queue member channel that is taking the call. This is useful when trying
to link recording filenames back to a particular call from the queue.
* The old/current behavior of app_queue has a serial type behavior
in that the queue will make all waiting callers wait in the queue
even if there is more than one available member ready to take
calls until the head caller is connected with the member they
were trying to get to. The next waiting caller in line then
becomes the head caller, and they are then connected with the
next available member and all available members and waiting callers
waits while this happens. This cycle continues until there are
no more available members or waiting callers, whichever comes first.
The new behavior, enabled by setting autofill=yes in queues.conf
either at the [general] level to default for all queues or
to set on a per-queue level, makes sure that when the waiting
callers are connecting with available members in a parallel fashion
until there are no more available members or no more waiting callers,
whichever comes first. This is probably more along the lines of how
one would expect a queue should work and in most cases, you will want
to enable this new behavior. If you do not specify or comment out this
option, it will default to "no" to keep backward compatability with the old
behavior.
* Queues depend on the channel driver reporting the proper state
for each member of the queue. To get proper signalling on
queue members that use the SIP channel driver, you need to
enable a call limit (could be set to a high value so it
is not put into action) and also make sure that both inbound
and outbound calls are accounted for.
Example:
[general]
limitonpeer = yes
[peername]
type=friend
call-limit=10
* The app_queue application now has the ability to use MixMonitor to
record conversations queue members are having with queue callers. Please
see configs/queues.conf.sample for more information on this option.
* The app_queue application strategy called 'roundrobin' has been deprecated
for this release. Users are encouraged to use 'rrmemory' instead, since it
provides more 'true' round-robin call delivery. For the Asterisk 1.6 release,
'rrmemory' will be renamed 'roundrobin'.
* The app_queue application option called 'monitor-join' has been deprecated
for this release. Users are encouraged to use 'monitor-type=mixmonitor' instead,
since it provides the same functionality but is not dependent on soxmix or some
other external program in order to mix the audio.
* app_meetme: The 'm' option (monitor) is renamed to 'l' (listen only), and
the 'm' option now provides the functionality of "initially muted".
In practice, most existing dialplans using the 'm' flag should not notice
any difference, unless the keypad menu is enabled, allowing the user
to unmute themsleves.
* ast_play_and_record would attempt to cancel the recording if a DTMF
'0' was received. This behavior was not documented in most of the
applications that used ast_play_and_record and the return codes from
ast_play_and_record weren't checked for properly.
ast_play_and_record has been changed so that '0' no longer cancels a
recording. If you want to allow DTMF digits to cancel an
in-progress recording use ast_play_and_record_full which allows you
to specify which DTMF digits can be used to accept a recording and
which digits can be used to cancel a recording.
* ast_app_messagecount has been renamed to ast_app_inboxcount. There is now a
new ast_app_messagecount function which takes a single context/mailbox/folder
mailbox specification and returns the message count for that folder only.
This addresses the deficiency of not being able to count the number of
messages in folders other than INBOX and Old.
* The exit behavior of the AGI applications has changed. Previously, when
a connection to an AGI server failed, the application would cause the channel
to immediately stop dialplan execution and hangup. Now, the only time that
the AGI applications will cause the channel to stop dialplan execution is
when the channel itself requests hangup. The AGI applications now set an
AGISTATUS variable which will allow you to find out whether running the AGI
was successful or not.
Previously, there was no way to handle the case where Asterisk was unable to
locally execute an AGI script for some reason. In this case, dialplan
execution will continue as it did before, but the AGISTATUS variable will be
set to "FAILURE".
A locally executed AGI script can now exit with a non-zero exit code and this
failure will be detected by Asterisk. If an AGI script exits with a non-zero
exit code, the AGISTATUS variable will be set to "FAILURE" as opposed to
"SUCCESS".
* app_voicemail: The ODBC_STORAGE capability now requires the extended table format
previously used only by EXTENDED_ODBC_STORAGE. This means that you will need to update
your table format using the schema provided in doc/odbcstorage.txt
* app_waitforsilence: Fixes have been made to this application which changes the
default behavior with how quickly it returns. You can maintain "old-style" behavior
with the addition/use of a third "timeout" parameter.
Please consult the application documentation and make changes to your dialplan
if appropriate.
Manager:
* After executing the 'status' manager action, the "Status" manager events
included the header "CallerID:" which was actually only the CallerID number,
and not the full CallerID string. This header has been renamed to
"CallerIDNum". For compatibility purposes, the CallerID parameter will remain
until after the release of 1.4, when it will be removed. Please use the time
during the 1.4 release to make this transition.
* The AgentConnect event now has an additional field called "BridgedChannel"
which contains the unique ID of the queue member channel that is taking the
call. This is useful when trying to link recording filenames back to
a particular call from the queue.
* app_userevent has been modified to always send Event: UserEvent with the
additional header UserEvent: <userspec>. Also, the Channel and UniqueID
headers are not automatically sent, unless you specify them as separate
arguments. Please see the application help for the new syntax.
* app_meetme: Mute and Unmute events are now reported via the Manager API.
Native Manager API commands MeetMeMute and MeetMeUnmute are provided, which
are easier to use than "Action Command:". The MeetMeStopTalking event has
also been deprecated in favor of the already existing MeetmeTalking event
with a "Status" of "on" or "off" added.
* OriginateFailure and OriginateSuccess events were replaced by event
OriginateResponse with a header named "Response" to indicate success or
failure
Variables:
* The builtin variables ${CALLERID}, ${CALLERIDNAME}, ${CALLERIDNUM},
${CALLERANI}, ${DNID}, ${RDNIS}, ${DATETIME}, ${TIMESTAMP}, ${ACCOUNTCODE},
and ${LANGUAGE} have all been deprecated in favor of their related dialplan
functions. You are encouraged to move towards the associated dialplan
function, as these variables will be removed in a future release.
* The CDR-CSV variables uniqueid, userfield, and basing time on GMT are now
adjustable from cdr.conf, instead of recompiling.
* OSP applications exports several new variables, ${OSPINHANDLE},
${OSPOUTHANDLE}, ${OSPINTOKEN}, ${OSPOUTTOKEN}, ${OSPCALLING},
${OSPINTIMELIMIT}, and ${OSPOUTTIMELIMIT}
* Builtin transfer functionality sets the variable ${TRANSFERERNAME} in the new
created channel. This variables holds the channel name of the transferer.
* The dial plan variable PRI_CAUSE will be removed from future versions
of Asterisk.
It is replaced by adding a cause value to the hangup() application.
Functions:
* The function ${CHECK_MD5()} has been deprecated in favor of using an
expression: $[${MD5(<string>)} = ${saved_md5}].
* The 'builtin' functions that used to be combined in pbx_functions.so are
now built as separate modules. If you are not using 'autoload=yes' in your
modules.conf file then you will need to explicitly load the modules that
contain the functions you want to use.
* The ENUMLOOKUP() function with the 'c' option (for counting the number of
records), but the lookup fails to match any records, the returned value will
now be "0" instead of blank.
* The REALTIME() function is now available in version 1.4 and app_realtime has
been deprecated in favor of the new function. app_realtime will be removed
completely with the version 1.6 release so please take the time between
releases to make any necessary changes
* The QUEUEAGENTCOUNT() function has been deprecated in favor of
QUEUE_MEMBER_COUNT().
The IAX2 channel:
* It is possible that previous configurations depended on the order in which
peers and users were specified in iax.conf for forcing the order in which
chan_iax2 matched against them. This behavior is going away and is considered
deprecated in this version. Avoid having ambiguous peer and user entries and
to make things easy on yourself, always set the "username" option for users
so that the remote end can match on that exactly instead of trying to infer
which user you want based on host.
If you would like to go ahead and use the new behavior which doesn't use the
order in the config file to influence matching order, then change the
MAX_PEER_BUCKETS define in chan_iax2.c to a value greater than one. An
example is provided there. By changing this, you will get *much* better
performance on systems that do a lot of peer and user lookups as they will be
stored in memory in a much more efficient manner.
* The "mailboxdetail" option has been deprecated. Previously, if this option
was not enabled, the 2 byte MSGCOUNT information element would be set to all
1's to indicate there there is some number of messages waiting. With this
option enabled, the number of new messages were placed in one byte and the
number of old messages are placed in the other. This is now the default
(and the only) behavior.
The SIP channel:
* The "incominglimit" setting is replaced by the "call-limit" setting in
sip.conf.
* OSP support code is removed from SIP channel to OSP applications. ospauth
option in sip.conf is removed to osp.conf as authpolicy. allowguest option
in sip.conf cannot be set as osp anymore.
* The Asterisk RTP stack has been changed in regards to RFC2833 reception
and transmission. Packets will now be sent with proper duration instead of all
at once. If you are receiving calls from a pre-1.4 Asterisk installation you
will want to turn on the rfc2833compensate option. Without this option your
DTMF reception may act poorly.
* The $SIPUSERAGENT dialplan variable is deprecated and will be removed
in coming versions of Asterisk. Please use the dialplan function
SIPCHANINFO(useragent) instead.
* The ALERT_INFO dialplan variable is deprecated and will be removed
in coming versions of Asterisk. Please use the dialplan application
sipaddheader() to add the "Alert-Info" header to the outbound invite.
* The "canreinvite" option has changed. canreinvite=yes used to disable
re-invites if you had NAT=yes. In 1.4, you need to set canreinvite=nonat
to disable re-invites when NAT=yes. This is propably what you want.
The settings are now: "yes", "no", "nonat", "update". Please consult
sip.conf.sample for detailed information.
The Zap channel:
* Support for MFC/R2 has been removed, as it has not been functional for some
time and it has no maintainer.
The Agent channel:
* Callback mode (AgentCallbackLogin) is now deprecated, since the entire function
it provided can be done using dialplan logic, without requiring additional
channel and module locks (which frequently caused deadlocks). An example of
how to do this using AEL dialplan is in doc/queues-with-callback-members.txt.
The G726-32 codec:
* It has been determined that previous versions of Asterisk used the wrong codeword
packing order for G726-32 data. This version supports both available packing orders,
and can transcode between them. It also now selects the proper order when
negotiating with a SIP peer based on the codec name supplied in the SDP. However,
there are existing devices that improperly request one order and then use another;
Sipura and Grandstream ATAs are known to do this, and there may be others. To
be able to continue to use these devices with this version of Asterisk and the
G726-32 codec, a configuration parameter called 'g726nonstandard' has been added
to sip.conf, so that Asterisk can use the packing order expected by the device (even
though it requested a different order). In addition, the internal format number for
G726-32 has been changed, and the old number is now assigned to AAL2-G726-32. The
result of this is that this version of Asterisk will be able to interoperate over
IAX2 with older versions of Asterisk, as long as this version is told to allow
'g726aal2' instead of 'g726' as the codec for the call.
Installation:
* On BSD systems, the installation directories have changed to more "FreeBSDish"
directories. On startup, Asterisk will look for the main configuration in
/usr/local/etc/asterisk/asterisk.conf
If you have an old installation, you might want to remove the binaries and
move the configuration files to the new locations. The following directories
are now default:
ASTLIBDIR /usr/local/lib/asterisk
ASTVARLIBDIR /usr/local/share/asterisk
ASTETCDIR /usr/local/etc/asterisk
ASTBINDIR /usr/local/bin/asterisk
ASTSBINDIR /usr/local/sbin/asterisk
Music on Hold:
* The music on hold handling has been changed in some significant ways in hopes
to make it work in a way that is much less confusing to users. Behavior will
not change if the same configuration is used from older versions of Asterisk.
However, there are some new configuration options that will make things work
in a way that makes more sense.
Previously, many of the channel drivers had an option called "musicclass" or
something similar. This option set what music on hold class this channel
would *hear* when put on hold. Some people expected (with good reason) that
this option was to configure what music on hold class to play when putting
the bridged channel on hold. This option has now been deprecated.
Two new music on hold related configuration options for channel drivers have
been introduced. Some channel drivers support both options, some just one,
and some support neither of them. Check the sample configuration files to see
which options apply to which channel driver.
The "mohsuggest" option specifies which music on hold class to suggest to the
bridged channel when putting them on hold. The only way that this class can
be overridden is if the bridged channel has a specific music class set that
was done in the dialplan using Set(CHANNEL(musicclass)=something).
The "mohinterpret" option is similar to the old "musicclass" option. It
specifies which music on hold class this channel would like to listen to when
put on hold. This music class is only effective if this channel has no music
class set on it from the dialplan and the bridged channel putting this one on
hold had no "mohsuggest" setting.
The IAX2 and Zap channel drivers have an additional feature for the
"mohinterpret" option. If this option is set to "passthrough", then these
channel drivers will pass through the HOLD message in signalling instead of
starting music on hold on the channel. An example for how this would be
useful is in an enterprise network of Asterisk servers. When one phone on one
server puts a phone on a different server on hold, the remote server will be
responsible for playing the hold music to its local phone that was put on
hold instead of the far end server across the network playing the music.
CDR Records:
* The behavior of the "clid" field of the CDR has always been that it will
contain the callerid ANI if it is set, or the callerid number if ANI was not
set. When using the "callerid" option for various channel drivers, some
would set ANI and some would not. This has been cleared up so that all
channel drivers set ANI. If you would like to change the callerid number
on the channel from the dialplan and have that change also show up in the
CDR, then you *must* set CALLERID(ANI) as well as CALLERID(num).
API:
* There are some API functions that were not previously prefixed with the 'ast_'
prefix but now are; these include the ADSI, ODBC and AGI interfaces. If you
have a module that uses the services provided by res_adsi, res_odbc, or
res_agi, you will need to add ast_ prefixes to the functions that you call
from those modules.
Formats:
* format_wav: The GAIN preprocessor definition has been changed from 2 to 0
in Asterisk 1.4. This change was made in response to user complaints of
choppiness or the clipping of loud signal peaks. The GAIN preprocessor
definition will be retained in Asterisk 1.4, but will be removed in a
future release. The use of GAIN for the increasing of voicemail message
volume should use the 'volgain' option in voicemail.conf

View File

@ -1,277 +0,0 @@
=========================================================
===
=== Information for upgrading from Asterisk 1.4 to 1.6
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also includes advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
===
=========================================================
AEL:
* Macros are now implemented underneath with the Gosub() application.
Heaven Help You if you wrote code depending on any aspect of this!
Previous to 1.6, macros were implemented with the Macro() app, which
provided a nice feature of auto-returning. The compiler will do its
best to insert a Return() app call at the end of your macro if you did
not include it, but really, you should make sure that all execution
paths within your macros end in "return;".
* The conf2ael program is 'introduced' in this release; it is in a rather
crude state, but deemed useful for making a first pass at converting
extensions.conf code into AEL. More intelligence will come with time.
Core:
* The 'languageprefix' option in asterisk.conf is now deprecated, and
the default sound file layout for non-English sounds is the 'new
style' layout introduced in Asterisk 1.4 (and used by the automatic
sound file installer in the Makefile).
* The ast_expr2 stuff has been modified to handle floating-point numbers.
Numbers of the format D.D are now acceptable input for the expr parser,
Where D is a string of base-10 digits. All math is now done in "long double",
if it is available on your compiler/architecture. This was half-way between
a bug-fix (because the MATH func returns fp by default), and an enhancement.
Also, for those counting on, or needing, integer operations, a series of
'functions' were also added to the expr language, to allow several styles
of rounding/truncation, along with a set of common floating point operations,
like sin, cos, tan, log, pow, etc. The ability to call external functions
like CDR(), etc. was also added, without having to use the ${...} notation.
* The delimiter passed to applications has been changed to the comma (','), as
that is what people are used to using within extensions.conf. If you are
using realtime extensions, you will need to translate your existing dialplan
to use this separator. To use a literal comma, you need merely to escape it
with a backslash ('\'). Another possible side effect is that you may need to
remove the obscene level of backslashing that was necessary for the dialplan
to work correctly in 1.4 and previous versions. This should make writing
dialplans less painful in the future, albeit with the pain of a one-time
conversion. If you would like to avoid this conversion immediately, set
pbx_realtime=1.4 in the [compat] section of asterisk.conf. After
transitioning, set pbx_realtime=1.6 in the same section.
* For the same purpose as above, you may set res_agi=1.4 in the [compat]
section of asterisk.conf to continue to use the '|' delimiter in the EXEC
arguments of AGI applications. After converting to use the ',' delimiter,
change this option to res_agi=1.6.
* As a side effect of the application delimiter change, many places that used
to need quotes in order to get the proper meaning are no longer required.
You now only need to quote strings in configuration files if you literally
want quotation marks within a string.
* Any applications run that contain the pipe symbol but not a comma symbol will
get a warning printed to the effect that the application delimiter has changed.
However, there are legitimate reasons why this might be useful in certain
situations, so this warning can be turned off with the dontwarn option in
asterisk.conf.
* The logger.conf option 'rotatetimestamp' has been deprecated in favor of
'rotatestrategy'. This new option supports a 'rotate' strategy that more
closely mimics the system logger in terms of file rotation.
* The concise versions of various CLI commands are now deprecated. We recommend
using the manager interface (AMI) for application integration with Asterisk.
Voicemail:
* The voicemail configuration values 'maxmessage' and 'minmessage' have
been changed to 'maxsecs' and 'minsecs' to clarify their purpose and
to make them more distinguishable from 'maxmsgs', which sets folder
size. The old variables will continue to work in this version, albeit
with a deprecation warning.
* If you use any interface for modifying voicemail aside from the built in
dialplan applications, then the option "pollmailboxes" *must* be set in
voicemail.conf for message waiting indication (MWI) to work properly. This
is because Voicemail notification is now event based instead of polling
based. The channel drivers are no longer responsible for constantly manually
checking mailboxes for changes so that they can send MWI information to users.
Examples of situations that would require this option are web interfaces to
voicemail or an email client in the case of using IMAP storage.
Applications:
* ChanIsAvail() now has a 't' option, which allows the specified device
to be queried for state without consulting the channel drivers. This
performs mostly a 'ChanExists' sort of function.
* ChannelRedirect() will not terminate the channel that fails to do a
channelredirect as it has done previously. Instead CHANNELREDIRECT_STATUS
will reflect if the attempt was successful of not.
* SetCallerPres() has been replaced with the CALLERPRES() dialplan function
and is now deprecated.
* DISA()'s fifth argument is now an options argument. If you have previously
used 'NOANSWER' in this argument, you'll need to convert that to the new
option 'n'.
* Macro() is now deprecated. If you need subroutines, you should use the
Gosub()/Return() applications. To replace MacroExclusive(), we have
introduced dialplan functions LOCK(), TRYLOCK(), and UNLOCK(). You may use
these functions in any location where you desire to ensure that only one
channel is executing that path at any one time. The Macro() applications
are deprecated for performance reasons. However, since Macro() has been
around for a long time and so many dialplans depend heavily on it, for the
sake of backwards compatibility it will not be removed . It is also worth
noting that using both Macro() and GoSub() at the same time is _heavily_
discouraged.
* Read() now sets a READSTATUS variable on exit. It does NOT automatically
return -1 (and hangup) anymore on error. If you want to hangup on error,
you need to do so explicitly in your dialplan.
* Privacy() no longer uses privacy.conf, so any options must be specified
directly in the application arguments.
* MusicOnHold application now has duration parameter which allows specifying
timeout in seconds.
* WaitMusicOnHold application is now deprecated in favor of extended MusicOnHold.
* SetMusicOnHold is now deprecated. You should use Set(CHANNEL(musicclass)=...)
instead.
* The arguments in ExecIf changed a bit, to be more like other applications.
The syntax is now ExecIf(<cond>?appiftrue(args):appiffalse(args)).
* The behavior of the Set application now depends upon a compatibility option,
set in asterisk.conf. To use the old 1.4 behavior, which allowed Set to take
multiple key/value pairs, set app_set=1.4 in [compat] in asterisk.conf. To
use the new behavior, which permits variables to be set with embedded commas,
set app_set=1.6 in [compat] in asterisk.conf. Note that you can have both
behaviors at the same time, if you switch to using MSet if you want the old
behavior.
Dialplan Functions:
* QUEUE_MEMBER_COUNT() has been deprecated in favor of the QUEUE_MEMBER() function. For
more information, issue a "show function QUEUE_MEMBER" from the CLI.
CDR:
* The cdr_sqlite module has been marked as deprecated in favor of
cdr_sqlite3_custom. It will potentially be removed from the tree
after Asterisk 1.6 is released.
* The cdr_odbc module now uses res_odbc to manage its connections. The
username and password parameters in cdr_odbc.conf, therefore, are no
longer used. The dsn parameter now points to an entry in res_odbc.conf.
* The uniqueid field in the core Asterisk structure has been changed from a
maximum 31 character field to a 149 character field, to account for all
possible values the systemname prefix could be. In the past, if the
systemname was too long, the uniqueid would have been truncated.
* The cdr_tds module now supports all versions of FreeTDS that contain
the db-lib frontend. It will also now log the userfield variable if
the target database table contains a column for it.
Formats:
* format_wav: The GAIN preprocessor definition and source code that used it
is removed. This change was made in response to user complaints of
choppiness or the clipping of loud signal peaks. To increase the volume
of voicemail messages, use the 'volgain' option in voicemail.conf
Channel Drivers:
* SIP: a small upgrade to support the "Record" button on the SNOM360,
which sends a sip INFO message with a "Record: on" or "Record: off"
header. If Asterisk is set up (via features.conf) to accept "One Touch Monitor"
requests (by default, via '*1'), then the user-configured dialpad sequence
is generated, and recording can be started and stopped via this button. The
file names and formats are all controlled via the normal mechanisms. If the
user has not configured the automon feature, the normal "415 Unsupported media type"
is returned, and nothing is done.
* SIP: The "call-limit" option is marked as deprecated. It still works in this version of
Asterisk, but will be removed in the following version. Please use the groupcount functions
in the dialplan to enforce call limits. The "limitonpeer" configuration option is
now renamed to "counteronpeer".
* SIP: The "username" option is now renamed to "defaultuser" to match "defaultip".
These are used only before registration to call a peer with the uri
sip:defaultuser@defaultip
The "username" setting still work, but is deprecated and will not work in
the next version of Asterisk.
* SIP: The old "insecure" options, deprecated in 1.4, have been removed.
"insecure=very" should be changed to "insecure=port,invite"
"insecure=yes" should be changed to "insecure=port"
Be aware that some telephony providers show the invalid syntax in their
sample configurations.
* chan_local.c: the comma delimiter inside the channel name has been changed to a
semicolon, in order to make the Local channel driver compatible with the comma
delimiter change in applications.
* H323: The "tos" setting has changed name to "tos_audio" and "cos" to "cos_audio"
to be compatible with settings in sip.conf. The "tos" and "cos" configuration
is deprecated and will stop working in the next release of Asterisk.
* Console: A new console channel driver, chan_console, has been added to Asterisk.
This new module can not be loaded at the same time as chan_alsa or chan_oss. The
default modules.conf only loads one of them (chan_oss by default). So, unless you
have modified your modules.conf to not use the autoload option, then you will need
to modify modules.conf to add another "noload" line to ensure that only one of
these three modules gets loaded.
* DAHDI: The chan_zap module that supported PSTN interfaces using
Zaptel has been renamed to chan_dahdi, and only supports the DAHDI
telephony driver package for PSTN interfaces. See the
Zaptel-to-DAHDI.txt file for more details on this transition.
* DAHDI: The "msdstrip" option has been deprecated, as it provides no value over
the method of stripping digits in the dialplan using variable substring syntax.
Configuration:
* pbx_dundi.c: tos parameter changed to use new values. Old values like lowdelay,
lowcost and other is not acceptable now. Look into qos.tex for description of
this parameter.
* queues.conf: the queue-lessthan sound file option is no longer available, and the
queue-round-seconds option no longer takes '1' as a valid parameter.
Manager:
* Manager has been upgraded to version 1.1 with a lot of changes.
Please check doc/manager_1_1.txt for information
* The IAXpeers command output has been changed to more closely resemble the
output of the SIPpeers command.
* cdr_manager now reports at the "cdr" level, not at "call" You may need to
change your manager.conf to add the level to existing AMI users, if they
want to see the CDR events generated.
* The Originate command now requires the Originate write permission. For
Originate with the Application parameter, you need the additional System
privilege if you want to do anything that calls out to a subshell.
iLBC Codec:
* Previously, the Asterisk source code distribution included the iLBC
encoder/decoder source code, from Global IP Solutions
(http://www.gipscorp.com). This code is not licensed for
distribution, and thus has been removed from the Asterisk source
code distribution. If you wish to use codec_ilbc to support iLBC
channels in Asterisk, you can run the contrib/scripts/get_ilbc_source.sh
script to download the source and put it in the proper place in
the Asterisk build tree. Once that is done you can follow your normal
steps of building Asterisk. You will need to run 'menuselect' and enable
the iLBC codec in the 'Codec Translators' category.

View File

@ -1,344 +0,0 @@
===========================================================
===
=== Information for upgrading between Asterisk versions
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also includes advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
===
===========================================================
From 1.8.13 to 1.8.14:
* permitdirectmedia/denydirectmedia now controls whether peers can be
bridged via directmedia by comparing the ACL to the bridging peer's
address rather than its own address.
From 1.8.12 to 1.8.13:
* The complex processor detection and optimization has been removed from
the makefile in favor of using native optimization suppport when available.
BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
From 1.8.10 to 1.8.11:
* If no transport is specified in sip.conf, transport will default to UDP.
Also, if multiple transport= lines are used, only the last will be used.
From 1.6.2 to 1.8:
* chan_sip no longer sets HASH(SIP_CAUSE,<chan name>) on channels by default.
This must now be enabled by setting 'sipstorecause' to 'yes' in sip.conf.
This carries a performance penalty.
* Asterisk now requires libpri 1.4.11+ for PRI support.
* A couple of CLI commands in res_ais were changed back to their original form:
"ais show clm members" --> "ais clm show members"
"ais show evt event channels" --> "ais evt show event channels"
* The default value for 'autofill' and 'shared_lastcall' in queues.conf has
been changed to 'yes'.
* The default value for the alwaysauthreject option in sip.conf has been changed
from "no" to "yes".
* The behavior of the 'parkedcallstimeout' has changed slightly. The formulation
of the extension name that a timed out parked call is delivered to when this
option is set to 'no' was modified such that instead of converting '/' to '0',
the '/' is converted to an underscore '_'. See the updated documentation in
features.conf.sample for more information on the behavior of the
'parkedcallstimeout' option.
* Asterisk-addons no longer exists as an independent package. Those modules
now live in the addons directory of the main Asterisk source tree. They
are not enabled by default. For more information about why modules live in
addons, see README-addons.txt.
* The rarely used 'event_log' and LOG_EVENT channel have been removed; the few
users of this channel in the tree have been converted to LOG_NOTICE or removed
(in cases where the same message was already generated to another channel).
* The usage of RTP inside of Asterisk has now become modularized. This means
the Asterisk RTP stack now exists as a loadable module, res_rtp_asterisk.
If you are not using autoload=yes in modules.conf you will need to ensure
it is set to load. If not, then any module which uses RTP (such as chan_sip)
will not be able to send or receive calls.
* The app_dahdiscan.c file has been removed, but the dialplan app DAHDIScan still
remains. It now exists within app_chanspy.c and retains the exact same
functionality as before.
* The default behavior for Set, AGI, and pbx_realtime has been changed to implement
1.6 behavior by default, if there is no [compat] section in asterisk.conf. In
prior versions, the behavior defaulted to 1.4 behavior, to assist in upgrades.
Specifically, that means that pbx_realtime and res_agi expect you to use commas
to separate arguments in applications, and Set only takes a single pair of
a variable name/value. The old 1.4 behavior may still be obtained by setting
app_set, pbx_realtime, and res_agi each to 1.4 in the [compat] section of
asterisk.conf.
* The PRI channels in chan_dahdi can no longer change the channel name if a
different B channel is selected during call negotiation. To prevent using
the channel name to infer what B channel a call is using and to avoid name
collisions, the channel name format is changed.
The new channel naming for PRI channels is:
DAHDI/i<span>/<number>[:<subaddress>]-<sequence-number>
* Added CHANNEL(dahdi_span), CHANNEL(dahdi_channel), and CHANNEL(dahdi_type)
so the dialplan can determine the B channel currently in use by the channel.
Use CHANNEL(no_media_path) to determine if the channel even has a B channel.
* Added AMI event DAHDIChannel to associate a DAHDI channel with an Asterisk
channel so AMI applications can passively determine the B channel currently
in use. Calls with "no-media" as the DAHDIChannel do not have an associated
B channel. No-media calls are either on hold or call-waiting.
* The ChanIsAvail application has been changed so the AVAILSTATUS variable
no longer contains both the device state and cause code. The cause code
is now available in the AVAILCAUSECODE variable. If existing dialplan logic
is written to expect AVAILSTATUS to contain the cause code it needs to be
changed to use AVAILCAUSECODE.
* ExternalIVR will now send Z events for invalid or missing files, T events
now include the interrupted file and bugs in argument parsing have been
fixed so there may be arguments specified in incorrect ways that were
working that will no longer work. Please see
https://wiki.asterisk.org/wiki/display/AST/External+IVR+Interface for details.
* OSP lookup application changes following variable names:
OSPPEERIP to OSPINPEERIP
OSPTECH to OSPOUTTECH
OSPDEST to OSPDESTINATION
OSPCALLING to OSPOUTCALLING
OSPCALLED to OSPOUTCALLED
OSPRESULTS to OSPDESTREMAILS
* The Manager event 'iax2 show peers' output has been updated. It now has a
similar output of 'sip show peers'.
* VoiceMailMain and VMAuthenticate, if a '*' is entered in the first position
of a Mailbox or Password, will, if it exists, jump to the 'a' extension in
the current dialplan context.
* The CALLERPRES() dialplan function is deprecated in favor of
CALLERID(num-pres) and CALLERID(name-pres).
* Environment variables that start with "AST_" are reserved to the system and
may no longer be set from the dialplan.
* When a call is redirected inside of a Dial, the app and appdata fields of the
CDR will now be set to "AppDial" and "(Outgoing Line)" instead of being blank.
* The CDR handling of billsec and duration field has changed. If your table
definition specifies those fields as float,double or similar they will now
be logged with microsecond accuracy instead of a whole integer.
* chan_sip will no longer set up a local call forward when receiving a
482 Loop Detected response. The dialplan will just continue from where it
left off.
* The 'stunaddr' option has been removed from chan_sip. This feature did not
behave as expected, had no correct use case, and was not RFC compliant. The
removal of this feature will hopefully be followed by a correct RFC compliant
STUN implementation in chan_sip in the future.
* The default value for the pedantic option in sip.conf has been changed
from "no" to "yes".
* The ConnectedLineNum and ConnectedLineName headers were added to many AMI
events/responses if the CallerIDNum/CallerIDName headers were also present.
The addition of connected line support changes the behavior of the channel
caller ID somewhat. The channel caller ID value no longer time shares with
the connected line ID on outgoing call legs. The timing of some AMI
events/responses output the connected line ID as caller ID. These party ID's
are now separate.
* The Dial application d and H options do not automatically answer the call
anymore. It broke DTMF attended transfers. Since many SIP and ISDN phones
cannot send DTMF before a call is connected, you need to answer the call
leg to those phones before using Dial with these options for them to have
any effect before the dialed party answers.
* The outgoing directory (where .call files are read) now uses inotify to
detect file changes instead of polling the directory on a regular basis.
If your outgoing folder is on a NFS mount or another network file system,
changes to the files will not be detected. You can revert to polling the
directory by specifying --without-inotify to configure before compiling.
* The 'sipusers' realtime table has been removed completely. Use the 'sippeers'
table with type 'user' for user type objects.
* The sip.conf allowoverlap option now accepts 'dtmf' as a value. If you
are using the early media DTMF overlap dialing method you now need to set
allowoverlap=dtmf.
From 1.6.1 to 1.6.2:
* SIP no longer sends the 183 progress message for early media by
default. Applications requiring early media should use the
progress() dialplan app to generate the progress message.
* The firmware for the IAXy has been removed from Asterisk. It can be
downloaded from http://downloads.digium.com/pub/iaxy/. To have Asterisk
install the firmware into its proper location, place the firmware in the
contrib/firmware/iax/ directory in the Asterisk source tree before running
"make install".
* T.38 FAX error correction mode can no longer be configured in udptl.conf;
instead, it is configured on a per-peer (or global) basis in sip.conf, with
the same default as was present in udptl.conf.sample.
* T.38 FAX maximum datagram size can no longer be configured in updtl.conf;
instead, it is either supplied by the application servicing the T.38 channel
(for a FAX send or receive) or calculated from the bridged endpoint's
maximum datagram size (for a T.38 FAX passthrough call). In addition, sip.conf
allows for overriding the value supplied by a remote endpoint, which is useful
when T.38 connections are made to gateways that supply incorrectly-calculated
maximum datagram sizes.
* There have been some changes to the IAX2 protocol to address the security
concerns documented in the security advisory AST-2009-006. Please see the
IAX2 security document, doc/IAX2-security.pdf, for information regarding
backwards compatibility with versions of Asterisk that do not contain these
changes to IAX2.
* The 'canreinvite' option support by the SIP, MGCP and Skinny channel drivers
has been renamed to 'directmedia', to better reflect what it actually does.
In the case of SIP, there are still re-INVITEs issued for T.38 negotiation,
starting and stopping music-on-hold, and other reasons, and the 'canreinvite'
option never had any effect on these cases, it only affected the re-INVITEs
used for direct media path setup. For MGCP and Skinny, the option was poorly
named because those protocols don't even use INVITE messages at all. For
backwards compatibility, the old option is still supported in both normal
and Realtime configuration files, but all of the sample configuration files,
Realtime/LDAP schemas, and other documentation refer to it using the new name.
* The default console now will use colors according to the default background
color, instead of forcing the background color to black. If you are using a
light colored background for your console, you may wish to use the option
flag '-W' to present better color choices for the various messages. However,
if you'd prefer the old method of forcing colors to white text on a black
background, the compatibility option -B is provided for this purpose.
* SendImage() no longer hangs up the channel on transmission error or on
any other error; in those cases, a FAILURE status is stored in
SENDIMAGESTATUS and dialplan execution continues. The possible
return values stored in SENDIMAGESTATUS are: SUCCESS, FAILURE, and
UNSUPPORTED. ('OK' has been replaced with 'SUCCESS', and 'NOSUPPORT'
has been replaced with 'UNSUPPORTED'). This change makes the
SendImage application more consistent with other applications.
* skinny.conf now has separate sections for lines and devices.
Please have a look at configs/skinny.conf.sample and update
your skinny.conf.
* Queue names previously were treated in a case-sensitive manner,
meaning that queues with names like "sales" and "sALeS" would be
seen as unique queues. The parsing logic has changed to use
case-insensitive comparisons now when originally hashing based on
queue names, meaning that now the two queues mentioned as examples
earlier will be seen as having the same name.
* The SPRINTF() dialplan function has been moved into its own module,
func_sprintf, and is no longer included in func_strings. If you use this
function and do not use 'autoload=yes' in modules.conf, you will need
to explicitly load func_sprintf for it to be available.
* The res_indications module has been removed. Its functionality was important
enough that most of it has been moved into the Asterisk core.
Two applications previously provided by res_indications, PlayTones and
StopPlayTones, have been moved into a new module, app_playtones.
* Support for Taiwanese was incorrectly supported with the "tw" language code.
In reality, the "tw" language code is reserved for the Twi language, native
to Ghana. If you were previously using the "tw" language code, you should
switch to using either "zh" (for Mandarin Chinese) or "zh_TW" for Taiwan
specific localizations. Additionally, "mx" should be changed to "es_MX",
Georgian was incorrectly specified as "ge" but should be "ka", and Czech is
"cs", not "cz".
* DAHDISendCallreroutingFacility() parameters are now comma-separated,
instead of the old pipe.
* res_jabber: autoprune has been disabled by default, to avoid misconfiguration
that would end up being interpreted as a bug once Asterisk started removing
the contacts from a user list.
* The cdr.conf file must exist and be configured correctly in order for CDR
records to be written.
* cdr_pgsql now assumes the encoding of strings it is handed are in LATIN9,
which should cover most uses of the extended ASCII set. If your strings
use a different encoding in Asterisk, the "encoding" parameter may be set
to specify the correct character set.
From 1.6.0.1 to 1.6.1:
* The ast_agi_register_multiple() and ast_agi_unregister_multiple()
API calls were added in 1.6.0, so that modules that provide multiple
AGI commands could register/unregister them all with a single
step. However, these API calls were not implemented properly, and did
not allow the caller to know whether registration or unregistration
succeeded or failed. They have been redefined to now return success
or failure, but this means any code using these functions will need
be recompiled after upgrading to a version of Asterisk containing
these changes. In addition, the source code using these functions
should be reviewed to ensure it can properly react to failure
of registration or unregistration of its API commands.
* The ast_agi_fdprintf() API call has been renamed to ast_agi_send()
to better match what it really does, and the argument order has been
changed to be consistent with other API calls that perform similar
operations.
From 1.6.0.x to 1.6.1:
* In previous versions of Asterisk, due to the way objects were arranged in
memory by chan_sip, the order of entries in sip.conf could be adjusted to
control the behavior of matching against peers and users. The way objects
are managed has been significantly changed for reasons involving performance
and stability. A side effect of these changes is that the order of entries
in sip.conf can no longer be relied upon to control behavior.
* The following core commands dealing with dialplan have been deprecated: 'core
show globals', 'core set global' and 'core set chanvar'. Use the equivalent
'dialplan show globals', 'dialplan set global' and 'dialplan set chanvar'
instead.
* In the dialplan expression parser, the logical value of spaces
immediately preceding a standalone 0 previously evaluated to
true. It now evaluates to false. This has confused a good many
people in the past (typically because they failed to realize the
space had any significance). Since this violates the Principle of
Least Surprise, it has been changed.
* While app_directory has always relied on having a voicemail.conf or users.conf file
correctly set up, it now is dependent on app_voicemail being compiled as well.
* SIP: All of the functionality in SIPCHANINFO() has been implemented in CHANNEL(),
and you should start using that function instead for retrieving information about
the channel in a technology-agnostic way.
* If you have any third party modules which use a config file variable whose
name ends in a '+', please note that the append capability added to this
version may now conflict with that variable naming scheme. An easy
workaround is to ensure that a space occurs between the '+' and the '=',
to differentiate your variable from the append operator. This potential
conflict is unlikely, but is documented here to be thorough.
* The "Join" event from app_queue now uses the CallerIDNum header instead of
the CallerID header to indicate the CallerID number.
* If you use ODBC storage for voicemail, there is a new field called "flag"
which should be a char(8) or larger. This field specifies whether or not a
message has been designated to be "Urgent", "PRIORITY", or not.

View File

@ -1,92 +0,0 @@
===========================================================
===
=== Information for upgrading between Asterisk versions
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also include advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
===
===========================================================
From 10.4 to 10.5:
* The complex processor detection and optimization has been removed from
the makefile in favor of using native optimization suppport when available.
BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
From 10.2 to 10.3:
* If no transport is specified in sip.conf, transport will default to UDP.
Also, if multiple transport= lines are used, only the last will be used.
From 1.8 to 10:
cel_pgsql:
- This module now expects an 'extra' column in the database for data added
using the CELGenUserEvent() application.
ConfBridge
- ConfBridge's dialplan arguments have changed and are not
backwards compatible.
File Interpreters
- The format interpreter formats/format_sln16.c for the file extension
'.sln16' has been removed. The '.sln16' file interpreter now exists
in the formats/format_sln.c module along with new support for sln12,
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
HTTP:
- A bindaddr must be specified in order for the HTTP server
to run. Previous versions would default to 0.0.0.0 if no
bindaddr was specified.
Gtalk:
- The default value for 'context' and 'parkinglots' in gtalk.conf has
been changed to 'default', previously they were empty.
chan_dahdi:
- The mohinterpret=passthrough setting is deprecated in favor of
moh_signaling=notify.
pbx_lua:
- Execution no longer continues after applications that do dialplan jumps
(such as app.goto). Now when an application such as app.goto() is called,
control is returned back to the pbx engine and the current extension
function stops executing.
- the autoservice now defaults to being on by default
- autoservice_start() and autoservice_start() no longer return a value.
Queue:
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
Asterisk Database:
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
utility in the UTILS section of menuselect. If an existing astdb is found and no
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
convert an existing astdb to the SQLite3 version automatically at runtime.
Module Support Level
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
formats, funcs, pbx, and res have been updated to include MODULEINFO data
that includes <support_level> tags with a value of core, extended, or deprecated.
More information is available on the Asterisk wiki at
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
Deprecated modules are now marked to not build by default and must be explicitly
enabled in menuselect.
===========================================================
===========================================================

View File

@ -1,280 +0,0 @@
===========================================================
===
=== Information for upgrading between Asterisk versions
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also include advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
===
===========================================================
From 11.6 to 11.7:
ConfBridge
- ConfBridge now has the ability to set the language of announcements to the
conference. The language can be set on a bridge profile in confbridge.conf
or by the dialplan function CONFBRIDGE(bridge,language)=en.
chan_sip - Clarify The "sip show peers" Forcerport Column And Add Comedia
- Under the "Forcerport" column, the "N" used to mean NAT (i.e. Yes). With
the additon of auto_* NAT settings, the meaning changed and there was a
certain combination of letters added to indicate the current setting. The
combination of using "Y", "N", "A" or "a", can be confusing. Therefore, we
now display clearly what the current Forcerport setting is: "Yes", "No",
"Auto (Yes)", "Auto (No)".
- Since we are clarifying the Forcerport column, we have added a column to
display the Comedia setting since this is useful information as well. We
no longer have a simple "NAT" setting like other versions before 11.
From 11.5 to 11.6:
* res_agi will now properly indicate if there was an error in streaming an
audio file. The result code will be -1 and the result returned from the
the function will be RESULT_FAILURE instead of the prior behavior of always
returning RESULT_SUCCESS even if there was an error.
From 11.4 to 11.5:
* The default settings for chan_sip are now overriden properly by the general
settings in sip.conf. Please look over your settings upon upgrading.
From 11.3 to 11.4:
* Added the 'n' option to MeetMe to prevent application of the DENOISE function
to a channel joining a conference. Some channel drivers that vary the number
of audio samples in a voice frame will experience significant quality problems
if a denoiser is attached to the channel; this option gives them the ability
to remove the denoiser without having to unload func_speex.
* The Registry AMI event for SIP registrations will now always include the
Username field. A previous bug fix missed an instance where it was not
included; that has been corrected in this release.
From 11.2.0 to 11.2.1:
* Asterisk would previously not output certain error messages when a remote
console attempted to connect to Asterisk and no instance of Asterisk was
running. This error message is displayed on stderr; as a result, some
initialization scripts that used remote consoles to test for the presence
of a running Asterisk instance started to display erroneous error messages.
The init.d scripts and the safe_asterisk have been updated in the contrib
folder to account for this.
From 11.2 to 11.3:
* Now by default, when Asterisk is installed in a path other than /usr, the
Asterisk binary will search for shared libraries in ${libdir} in addition to
searching system libraries. This allows Asterisk to find its shared
libraries without having to specify LD_LIBRARY_PATH. This can be disabled by
passing --disable-rpath to configure.
From 10 to 11:
Voicemail:
- All voicemails now have a "msg_id" which uniquely identifies a message. For
users of filesystem and IMAP storage of voicemail, this should be transparent.
For users of ODBC, you will need to add a "msg_id" column to your voice mail
messages table. This should be a string capable of holding at least 32 characters.
All messages created in old Asterisk installations will have a msg_id added to
them when required. This operation should be transparent as well.
Parking:
- The comebacktoorigin setting must now be set per parking lot. The setting in
the general section will not be applied automatically to each parking lot.
- The BLINDTRANSFER channel variable is deleted from a channel when it is
bridged to prevent subtle bugs in the parking feature. The channel
variable is used by Asterisk internally for the Park application to work
properly. If you were using it for your own purposes, copy it to your
own channel variable before the channel is bridged.
res_ais:
- Users of res_ais in versions of Asterisk prior to Asterisk 11 must change
to use the res_corosync module, instead. OpenAIS is deprecated, but
Corosync is still actively developed and maintained. Corosync came out of
the OpenAIS project.
Dialplan Functions:
- MAILBOX_EXISTS has been deprecated. Use VM_INFO with the 'exists' parameter
instead.
- Macro has been deprecated in favor of GoSub. For redirecting and connected
line purposes use the following variables instead of their macro equivalents:
REDIRECTING_SEND_SUB, REDIRECTING_SEND_SUB_ARGS,
CONNECTED_LINE_SEND_SUB, CONNECTED_LINE_SEND_SUB_ARGS.
- The REDIRECTING function now supports the redirecting original party id
and reason.
- The HANGUPCAUSE and HANGUPCAUSE_KEYS functions have been introduced to
provide a replacement for the SIP_CAUSE hash. The HangupCauseClear
application has also been introduced to remove this data from the channel
when necessary.
func_enum:
- ENUM query functions now return a count of -1 on lookup error to
differentiate between a failed query and a successful query with 0 results
matching the specified type.
CDR:
- cdr_adaptive_odbc now supports specifying a schema so that Asterisk can
connect to databases that use schemas.
Configuration Files:
- Files listed below have been updated to be more consistent with how Asterisk
parses configuration files. This makes configuration files more consistent
with what is expected across modules.
- cdr.conf: [general] and [csv] sections
- dnsmgr.conf
- dsp.conf
- The 'verbose' setting in logger.conf now takes an optional argument,
specifying the verbosity level for each logging destination. The default,
if not otherwise specified, is a verbosity of 3.
AMI:
- DBDelTree now correctly returns an error when 0 rows are deleted just as
the DBDel action does.
- The IAX2 PeerStatus event now sends a 'Port' header. In Asterisk 10, this was
erroneously being sent as a 'Post' header.
CCSS:
- Macro is deprecated. Use cc_callback_sub instead of cc_callback_macro
in channel configurations.
app_meetme:
- The 'c' option (announce user count) will now work even if the 'q' (quiet)
option is enabled.
app_followme:
- Answered outgoing calls no longer get cut off when the next step is started.
You now have until the last step times out to decide if you want to accept
the call or not before being disconnected.
chan_gtalk:
- chan_gtalk has been deprecated in favor of the chan_motif channel driver. It is recommended
that users switch to using it as it is a core supported module.
chan_jingle:
- chan_jingle has been deprecated in favor of the chan_motif channel driver. It is recommended
that users switch to using it as it is a core supported module.
SIP
===
- A new option "tonezone" for setting default tonezone for the channel driver
or individual devices
- A new manager event, "SessionTimeout" has been added and is triggered when
a call is terminated due to RTP stream inactivity or SIP session timer
expiration.
- SIP_CAUSE is now deprecated. It has been modified to use the same
mechanism as the HANGUPCAUSE function. Behavior should not change, but
performance should be vastly improved. The HANGUPCAUSE function should now
be used instead of SIP_CAUSE. Because of this, the storesipcause option in
sip.conf is also deprecated.
- The sip paramater for Originating Line Information (oli, isup-oli, and
ss7-oli) is now parsed out of the From header and copied into the channel's
ANI2 information field. This is readable from the CALLERID(ani2) dialplan
function.
- ICE support has been added and is enabled by default. Some endpoints may have
problems with the ICE candidates within the SDP. If this is the case ICE support
can be disabled globally or on a per-endpoint basis using the icesupport
configuration option. Symptoms of this include one way media or no media flow.
chan_unistim
- Due to massive update in chan_unistim phone keys functions and on-screen
information changed.
users.conf:
- A defined user with hasvoicemail=yes now finally uses a Gosub to stdexten
as documented in extensions.conf.sample since v1.6.0 instead of a Macro as
documented in v1.4. Set the asterisk.conf stdexten=macro parameter to
invoke the stdexten the old way.
res_jabber
- This module has been deprecated in favor of the res_xmpp module. The res_xmpp
module is backwards compatible with the res_jabber configuration file, dialplan
functions, and AMI actions. The old CLI commands can also be made available using
the res_clialiases template for Asterisk 11.
From 1.8 to 10:
cel_pgsql:
- This module now expects an 'extra' column in the database for data added
using the CELGenUserEvent() application.
ConfBridge
- ConfBridge's dialplan arguments have changed and are not
backwards compatible.
File Interpreters
- The format interpreter formats/format_sln16.c for the file extension
'.sln16' has been removed. The '.sln16' file interpreter now exists
in the formats/format_sln.c module along with new support for sln12,
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
HTTP:
- A bindaddr must be specified in order for the HTTP server
to run. Previous versions would default to 0.0.0.0 if no
bindaddr was specified.
Gtalk:
- The default value for 'context' and 'parkinglots' in gtalk.conf has
been changed to 'default', previously they were empty.
chan_dahdi:
- The mohinterpret=passthrough setting is deprecated in favor of
moh_signaling=notify.
pbx_lua:
- Execution no longer continues after applications that do dialplan jumps
(such as app.goto). Now when an application such as app.goto() is called,
control is returned back to the pbx engine and the current extension
function stops executing.
- the autoservice now defaults to being on by default
- autoservice_start() and autoservice_start() no longer return a value.
Queue:
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
Asterisk Database:
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
utility in the UTILS section of menuselect. If an existing astdb is found and no
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
convert an existing astdb to the SQLite3 version automatically at runtime. If
moving back from Asterisk 10 to Asterisk 1.8, the astdb2bdb utility can be used
to create a Berkeley DB copy of the SQLite3 astdb that Asterisk 10 uses.
Manager:
- The AMI protocol version was incremented to 1.2 as a result of changing two
instances of the Unlink event to Bridge events. This change was documented
as part of the AMI 1.1 update, but two Unlink events were inadvertently left
unchanged.
Module Support Level
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
formats, funcs, pbx, and res have been updated to include MODULEINFO data
that includes <support_level> tags with a value of core, extended, or deprecated.
More information is available on the Asterisk wiki at
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
Deprecated modules are now marked to not build by default and must be explicitly
enabled in menuselect.
chan_sip:
- Setting of HASH(SIP_CAUSE,<slave-channel-name>) on channels is now disabled
by default. It can be enabled using the 'storesipcause' option. This feature
has a significant performance penalty.
UDPTL:
- The default UDPTL port range in udptl.conf.sample differed from the defaults
in the source. If you didn't have a config file, you got 4500 to 4599. Now the
default is 4000 to 4999.
===========================================================
===========================================================

View File

@ -1,478 +0,0 @@
===========================================================
===
=== Information for upgrading between Asterisk versions
===
=== These files document all the changes that MUST be taken
=== into account when upgrading between the Asterisk
=== versions listed below. These changes may require that
=== you modify your configuration files, dialplan or (in
=== some cases) source code if you have your own Asterisk
=== modules or patches. These files also include advance
=== notice of any functionality that has been marked as
=== 'deprecated' and may be removed in a future release,
=== along with the suggested replacement functionality.
===
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
=== UPGRADE-11.txt -- Upgrade info for 10 to 11
===
===========================================================
There are many significant architectural changes in Asterisk 12. It is
recommended that you not only read through this document for important
changes that affect an upgrade, but that you also read through the CHANGES
document in depth to better understand the new options available to you.
Additional information on the architectural changes made in Asterisk can be
found on the Asterisk wiki (https://wiki.asterisk.org)
Of particular note, the following systems in Asterisk underwent significant
changes. Documentation for the changes and a specification for their
behavior in Asterisk 12 is also available on the Asterisk wiki.
- AMI: Many events were changed, and the semantics of channels and bridges
were defined. In particular, how channels and bridges behave under
transfer scenarios and situations involving multiple parties has
changed significantly. See https://wiki.asterisk.org/wiki/x/dAFRAQ
for more information.
- CDR: CDR logic was extracted from the many locations it existed in across
Asterisk and implemented as a consumer of Stasis message bus events.
As a result, consistency of records has improved significantly and the
behavior of CDRs in transfer scenarios has been defined in the CDR
specification. However, significant behavioral changes in CDRs resulted
from the transition. The most significant change is the addition of
CDR entries when a channel who is the Party A in a CDR leaves a bridge.
See https://wiki.asterisk.org/wiki/x/pwpRAQ for more information.
- CEL: Much like CDRs, CEL was removed from the many locations it existed in
across Asterisk and implemented as a consumer of Stasis message bus
events. It now closely follows the Bridging API model of channels and
bridges, and has a much closer consistency of conveyed events as AMI.
For the changes in events, see https://wiki.asterisk.org/wiki/x/4ICLAQ.
Build System:
- Removed the CHANNEL_TRACE development mode build option. Certain aspects of
the CHANNEL_TRACE build option were incompatible with the new bridging
architecture.
- Asterisk now depends on libjansson, libuuid and optionally (but recommended)
libxslt and uriparser.
- The new SIP stack and channel driver uses a particular version of PJSIP.
Please see https://wiki.asterisk.org/wiki/x/J4GLAQ for more information on
configuring and installing PJSIP for use with Asterisk.
AgentLogin and chan_agent:
- Along with AgentRequest, this application has been modified to be a
replacement for chan_agent. The chan_agent module and the Agent channel
driver have been removed from Asterisk, as the concept of a channel driver
proxying in front of another channel driver was incompatible with the new
architecture (and has had numerous problems through past versions of
Asterisk). The act of a channel calling the AgentLogin application places the
channel into a pool of agents that can be requested by the AgentRequest
application. Note that this application, as well as all other agent related
functionality, is now provided by the app_agent_pool module.
- This application no longer performs agent authentication. If authentication
is desired, the dialplan needs to perform this function using the
Authenticate or VMAuthenticate application or through an AGI script before
running AgentLogin.
- The agents.conf schema has changed. Rather than specifying agents on a
single line in comma delineated fashion, each agent is defined in a separate
context. This allows agents to use the power of context templates in their
definition.
- A number of parameters from agents.conf have been removed. This includes
maxloginretries, autologoffunavail, updatecdr, goodbye, group, recordformat,
urlprefix, and savecallsin. These options were obsoleted by the move from
a channel driver model to the bridging/application model provided by
app_agent_pool.
- The AGENTUPDATECDR channel variable has also been removed, for the same
reason as the updatecdr option.
- The endcall and enddtmf configuration options are removed. Use the
dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
channel before calling AgentLogin.
AgentMonitorOutgoing
- This application has been removed. It was a holdover from when
AgentCallbackLogin was removed.
Answer
- It is no longer possible to bypass updating the CDR when answering a
channel. CDRs are based on the channel state and will be updated when
the channel is Answered.
ControlPlayback
- The channel variable CPLAYBACKSTATUS may now return the value
'REMOTESTOPPED' when playback is stopped by an external entity.
DISA
- This application now has a dependency on the app_cdr module. It uses this
module to hide the CDR created prior to execution of the DISA application.
DumpChan:
- The output of DumpChan no longer includes the DirectBridge or IndirectBridge
fields. Instead, if a channel is in a bridge, it includes a BridgeID field
containing the unique ID of the bridge that the channel happens to be in.
ForkCDR:
- Nearly every parameter in ForkCDR has been updated and changed to reflect
the changes in CDRs. Please see the documentation for the ForkCDR
application, as well as the CDR specification on the Asterisk wiki.
NoCDR:
- The NoCDR application has been deprecated. Please use the CDR_PROP function
to disable CDRs on a channel.
ParkAndAnnounce:
- The app_parkandannounce module has been removed. The application
ParkAndAnnounce is now provided by the res_parking module. See the
Parking changes for more information.
ResetCDR:
- The 'w' and 'a' options have been removed. Dispatching CDRs to registered
backends occurs on an as-needed basis in order to preserve linkedid
propagation and other needed behavior.
- The 'e' option is deprecated. Please use the CDR_PROP function to enable
CDRs on a channel that they were previously disabled on.
- The ResetCDR application is no longer a part of core Asterisk, and instead
is now delivered as part of app_cdr.
Queues:
- Queue strategy rrmemory now has a predictable order similar to strategy
rrordered. Members will be called in the order that they are added to the
queue.
- Removed the queues.conf check_state_unknown option. It is no longer
necessary.
- It is now possible to play the Queue prompts to the first user waiting in a
call queue. Note that this may impact the ability for agents to talk with
users, as a prompt may still be playing when an agent connects to the user.
This ability is disabled by default but can be enabled on an individual
queue using the 'announce-to-first-user' option.
- The configuration options eventwhencalled and eventmemberstatus have been
removed. As a result, the AMI events QueueMemberStatus, AgentCalled,
AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be
sent. The "Variable" fields will also no longer exist on the Agent* events.
These events can be filtered out from a connected AMI client using the
eventfilter setting in manager.conf.
- The queue log now differentiates between blind and attended transfers. A
blind transfer will result in a BLINDTRANSFER message with the destination
context and extension. An attended transfer will result in an
ATTENDEDTRANSFER message. This message will indicate the method by which
the attended transfer was completed: "BRIDGE" for a bridge merge, "APP"
for running an application on a bridge or channel, or "LINK" for linking
two bridges together with local channels. The queue log will also now detect
externally initiated blind and attended transfers and record the transfer
status accordingly.
- When performing queue pause/unpause on an interface without specifying an
individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
least one member of any queue exists for that interface.
SetAMAFlags
- This application is deprecated in favor of CHANNEL(amaflags).
VoiceMail:
- Mailboxes defined by app_voicemail MUST be referenced by the rest of the
system as mailbox@context. The rest of the system cannot add @default
to mailbox identifiers for app_voicemail that do not specify a context
any longer. It is a mailbox identifier format that should only be
interpreted by app_voicemail.
- The voicemail.conf configuration file now has an 'alias' configuration
parameter for use with the Directory application. The voicemail realtime
database table schema has also been updated with an 'alias' column. Systems
using voicemail with realtime should update their schemas accordingly.
Channel Drivers:
- When a channel driver is configured to enable jiterbuffers, they are now
applied unconditionally when a channel joins a bridge. If a jitterbuffer
is already set for that channel when it enters, such as by the JITTERBUFFER
function, then the existing jitterbuffer will be used and the one set by
the channel driver will not be applied.
chan_bridge
- chan_bridge is removed and its functionality is incorporated into ConfBridge
itself.
chan_dahdi:
- Analog port dialing and deferred DTMF dialing for PRI now distinguishes
between 'w' and 'W'. The 'w' pauses dialing for half a second. The 'W'
pauses dialing for one second.
- The default for inband_on_proceeding has changed to no.
- The CLI command 'dahdi destroy channel' is now 'dahdi destroy channels'.
A range of channels can be specified to be destroyed. Note that this command
should only be used if you understand the risks it entails.
- The script specified by the chan_dahdi.conf mwimonitornotify option now gets
the exact configured mailbox name. For app_voicemail mailboxes this is
mailbox@context.
- Added mwi_vm_boxes that also must be configured for ISDN MWI to be enabled.
- ignore_failed_channels now defaults to True: the channel will continue to
be configured even if configuring it has failed. This is generally a
better setup for systems with not more than one DAHDI device or with DAHDI
>= 2.8.0 .
chan_local:
- The /b option has been removed.
- chan_local moved into the system core and is no longer a loadable module.
chan_sip:
- The 'callevents' parameter has been removed. Hold AMI events are now raised
in the core, and can be filtered out using the 'eventfilter' parameter
in manager.conf.
- Dynamic realtime tables for SIP Users can now include a 'path' field. This
will store the path information for that peer when it registers. Realtime
tables can also use the 'supportpath' field to enable Path header support.
- LDAP realtime configurations for SIP Users now have the AstAccountPathSupport
objectIdentifier. This maps to the supportpath option in sip.conf.
Core:
- Masquerades as an operation inside Asterisk have been effectively hidden
by the migration to the Bridging API. As such, many 'quirks' of Asterisk
no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,
dropping of frame/audio hooks, and other internal implementation details
that users had to deal with. This fundamental change has large implications
throughout the changes documented for this version. For more information
about the new core architecture of Asterisk, please see the Asterisk wiki.
- The following channel variables have changed behavior which is described in
the CHANGES file: TRANSFER_CONTEXT, BRIDGEPEER, BRIDGEPVTCALLID,
ATTENDED_TRANSFER_COMPLETE_SOUND, DYNAMIC_FEATURENAME, and DYNAMIC_PEERNAME.
AMI (Asterisk Manager Interface):
- Version 1.4 - The details of what happens to a channel when a masquerade
happens (transfers, parking, etc) have changed.
- The Masquerade event now includes the Uniqueid's of the clone and original
channels.
- Channels no longer swap Uniqueid's as a result of the masquerade.
- Instead of a shell game of renames, there's now a single rename, appending
<ZOMBIE> to the name of the original channel.
- *Major* changes were made to both the syntax as well as the semantics of the
AMI protocol. In particular, AMI events have been substantially modified
and improved in this version of Asterisk. The major event changes are listed
below.
- NewPeerAccount has been removed. NewAccountCode is raised instead.
- Reload events have been consolidated and standardized.
- ModuleLoadReport has been removed.
- FaxSent is now SendFAX; FaxReceived is now ReceiveFAX. This standardizes
app_fax and res_fax events.
- MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop.
- JabberEvent has been removed.
- Hold is now in the core and will now raise Hold and Unhold events.
- Join is now QueueCallerJoin.
- Leave is now QueueCallerLeave.
- Agentlogin/Agentlogoff is now AgentLogin/AgentLogoff, respectively.
- ChannelUpdate has been removed.
- Local channel optimization is now conveyed via LocalOptimizationBegin and
LocalOptimizationEnd.
- BridgeAction and BridgeExec have been removed.
- BlindTransfer and AttendedTransfer events were added.
- Dial is now DialBegin and DialEnd.
- DTMF is now DTMFBegin and DTMFEnd.
- Bridge has been replaced with BridgeCreate, BridgeEnter, BridgeLeave, and
BridgeDestroy
- MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop
- AGIExec is now AGIExecStart and AGIExecEnd
- AsyncAGI is now AsyncAGIStart, AsyncAGIExec, and AsyncAGIEnd
- The 'MCID' AMI event now publishes a channel snapshot when available and
its non-channel-snapshot parameters now use either the "MCallerID" or
'MConnectedID' prefixes with Subaddr*, Name*, and Num* suffixes instead
of 'CallerID' and 'ConnectedID' to avoid confusion with similarly named
parameters in the channel snapshot.
- The 'Channel' key used in the 'AlarmClear', 'Alarm', and 'DNDState' has been
renamed "DAHDIChannel" since it does not convey an Asterisk channel name.
- All AMI events now contain a 'SystemName' field, if available.
- Local channel information in events is now prefixed with 'LocalOne' and
'LocalTwo'. This replaces the suffix of '1' and '2' for the two halves of
the Local channel. This affects the 'LocalBridge', 'LocalOptimizationBegin',
and 'LocalOptimizationEnd' events.
- The 'RTCPSent'/'RTCPReceived' events have been significantly modified from
previous versions. They now report all SR/RR packets sent/received, and
have been restructured to better reflect the data sent in a SR/RR. In
particular, the event structure now supports multiple report blocks.
- The deprecated use of | (pipe) as a separator in the channelvars setting in
manager.conf has been removed.
- The SIP SIPqualifypeer action now sends a response indicating it will qualify
a peer once a peer has been found to qualify. Once the qualify has been
completed it will now issue a SIPqualifypeerdone event.
- The AMI event 'Newexten' field 'Extension' is deprecated, and may be removed
in a future release. Please use the common 'Exten' field instead.
- The AMI events 'ParkedCall', 'ParkedCallTimeOut', 'ParkedCallGiveUp', and
'UnParkedCall' have changed significantly in the new res_parking module.
- The 'Channel' and 'From' headers are gone. For the channel that was parked
or is coming out of parking, a 'Parkee' channel snapshot is issued and it
has a number of fields associated with it. The old 'Channel' header relayed
the same data as the new 'ParkeeChannel' header.
- The 'From' field was ambiguous and changed meaning depending on the event.
for most of these, it was the name of the channel that parked the call
(the 'Parker'). There is no longer a header that provides this channel name,
however the 'ParkerDialString' will contain a dialstring to redial the
device that parked the call.
- On UnParkedCall events, the 'From' header would instead represent the
channel responsible for retrieving the parkee. It receives a channel
snapshot labeled 'Retriever'. The 'from' field is is replaced with
'RetrieverChannel'.
- Lastly, the 'Exten' field has been replaced with 'ParkingSpace'.
- The AMI event 'Parkinglot' (response to 'Parkinglots' command) in a similar
fashion has changed the field names 'StartExten' and 'StopExten' to
'StartSpace' and 'StopSpace' respectively.
- The AMI 'Status' response event to the AMI Status action replaces the
'BridgedChannel' and 'BridgedUniqueid' headers with the 'BridgeID' header to
indicate what bridge the channel is currently in.
CDR (Call Detail Records)
- Significant changes have been made to the behavior of CDRs. The CDR engine
was effectively rewritten and built on the Stasis message bus. For a full
definition of CDR behavior in Asterisk 12, please read the specification
on the Asterisk wiki (wiki.asterisk.org).
- CDRs will now be created between all participants in a bridge. For each
pair of channels in a bridge, a CDR is created to represent the path of
communication between those two endpoints. This lets an end user choose who
to bill for what during bridge operations with multiple parties.
- The duration, billsec, start, answer, and end times now reflect the times
associated with the current CDR for the channel, as opposed to a cumulative
measurement of all CDRs for that channel.
CEL:
- The Uniqueid field for a channel is now a stable identifier, and will not
change due to transfers, parking, etc.
- CEL has undergone significant rework in Asterisk 12, and is now built on the
Stasis message bus. Please see the specification for CEL on the Asterisk
wiki at https://wiki.asterisk.org/wiki/x/4ICLAQ for more detailed
information. A summary of the affected events is below:
- BRIDGE_START, BRIDGE_END, BRIDGE_UPDATE, 3WAY_START, 3WAY_END, CONF_ENTER,
CONF_EXIT, CONF_START, and CONF_END events have all been removed. These
events have been replaced by BRIDGE_ENTER/BRIDGE_EXIT.
- BLINDTRANSFER/ATTENDEDTRANSFER events now report the peer as NULL and
additional information in the extra string field.
Dialplan Functions:
- Certain dialplan functions have been marked as 'dangerous', and may only be
executed from the dialplan. Execution from extenal sources (AMI's GetVar and
SetVar actions; etc.) may be inhibited by setting live_dangerously in the
[options] section of asterisk.conf to no. SHELL(), channel locking, and
direct file read/write functions are marked as dangerous. DB_DELETE() and
REALTIME_DESTROY() are marked as dangerous for reads, but can now safely
accept writes (which ignore the provided value).
- The default value for live_dangerously was changed from yes (in Asterisk 11
and earlier) to no (in Asterisk 12 and greater).
Dialplan:
- All channel and global variable names are evaluated in a case-sensitive
manner. In previous versions of Asterisk, variables created and evaluated in
the dialplan were evaluated case-insensitively, but built-in variables and
variable evaluation done internally within Asterisk was done
case-sensitively.
- Asterisk has always had code to ignore dash '-' characters that are not
part of a character set in the dialplan extensions. The code now
consistently ignores these characters when matching dialplan extensions.
- BRIDGE_FEATURES channel variable is now casesensitive for feature letter
codes. Uppercase variants apply them to the calling party while lowercase
variants apply them to the called party.
Features:
- The features.conf [applicationmap] <FeatureName> ActivatedBy option is
no longer honored. The feature is always activated by the channel that has
DYNAMIC_FEATURES defined on it when it enters the bridge. Use predial to set
different values of DYNAMIC_FEATURES on the channels
- Executing a dynamic feature on the bridge peer in a multi-party bridge will
execute it on all peers of the activating channel.
- There is no longer an explicit 'features reload' CLI command. Features can
still be reloaded using 'module reload features'.
- It is no longer necessary (or possible) to define the ATXFER_NULL_TECH in
features.c for atxferdropcall=no to work properly. This option now just
works.
Parking:
- Parking has been extracted from the Asterisk core as a loadable module,
res_parking.
- Configuration is found in res_parking.conf. It is no longer supported in
features.conf
- The arguments for the Park, ParkedCall, and ParkAndAnnounce applications
have been modified significantly. See the application documents for
specific details.
- Numerous changes to Parking related applications, AMI and CLI commands and
internal inter-workings have been made. Please read the CHANGES file for
the detailed list.
Security Events Framework:
- Security Event timestamps now use ISO 8601 formatted date/time instead of
the "seconds-microseconds" format that it was using previously.
AGENT:
- The password option has been disabled, as the AgentLogin application no
longer provides authentication.
AUDIOHOOK_INHERIT:
- Due to changes in the Asterisk core, this function is no longer needed to
preserve a MixMonitor on a channel during transfer operations and dialplan
execution. It is effectively obsolete.
CDR: (function)
- The 'amaflags' and 'accountcode' attributes for the CDR function are
deprecated. Use the CHANNEL function instead to access these attributes.
- The 'l' option has been removed. When reading a CDR attribute, the most
recent record is always used. When writing a CDR attribute, all non-finalized
CDRs are updated.
- The 'r' option has been removed, for the same reason as the 'l' option.
- The 's' option has been removed, as LOCKED semantics no longer exist in the
CDR engine.
VMCOUNT:
- Mailboxes defined by app_voicemail MUST be referenced by the rest of the
system as mailbox@context. The rest of the system cannot add @default
to mailbox identifiers for app_voicemail that do not specify a context
any longer. It is a mailbox identifier format that should only be
interpreted by app_voicemail.
res_rtp_asterisk:
- ICE/STUN/TURN support in res_rtp_asterisk has been made optional. To enable
them, an Asterisk-specific version of PJSIP needs to be installed.
Tarballs are available from https://github.com/asterisk/pjproject/tags/.
===========================================================
===========================================================

File diff suppressed because it is too large Load Diff

1
addons/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
mp3

View File

@ -41,10 +41,10 @@ ifeq ($(filter format_mp3,$(MENUSELECT_ADDONS)),)
echo ; \
echo "**************************************************************" ; \
echo "*** ***" ; \
echo "*** ---> READ THIS OR YOUR BUILD WILL FAIL <--- ***" ; \
echo "*** ---> IMPORTANT INFORMATION ABOUT format_mp3 <--- ***" ; \
echo "*** ***" ; \
echo "*** format_mp3 has been selected to be installed, but the ***" ; \
echo "*** mp3 decoder library has not yet been downloaded into ***" ; \
echo "*** MP3 decoder library has not yet been downloaded into ***" ; \
echo "*** the source tree. To do so, please run the following ***" ; \
echo "*** command: ***" ; \
echo "*** ***" ; \
@ -61,12 +61,18 @@ clean::
if [ -f mp3/Makefile ] ; then $(MAKE) -C mp3 clean ; fi
rm -f $(addprefix ooh323c/src/,$(H323OBJS))
$(if $(filter format_mp3,$(EMBEDDED_MODS)),modules.link,format_mp3.so): mp3/common.o mp3/dct64_i386.o mp3/decode_ntom.o mp3/layer3.o mp3/tabinit.o mp3/interface.o
ifneq ($(wildcard mp3/Makefile),)
format_mp3.so: mp3/common.o mp3/dct64_i386.o mp3/decode_ntom.o mp3/layer3.o mp3/tabinit.o mp3/interface.o
endif
chan_mobile.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
chan_ooh323.o: _ASTCFLAGS+=$(H323CFLAGS)
$(if $(filter chan_ooh323,$(EMBEDDED_MODS)),modules.link,chan_ooh323.so): _ASTCFLAGS+=$(H323CFLAGS)
$(if $(filter chan_ooh323,$(EMBEDDED_MODS)),modules.link,chan_ooh323.so): $(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o
chan_ooh323.so: _ASTCFLAGS+=$(H323CFLAGS)
chan_ooh323.so: $(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o
$(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o: _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_ooh323)
.PHONY: check_mp3
ifeq ($(wildcard mp3/Makefile),)
.PHONY: format_mp3.o format_mp3.so
endif

View File

@ -27,7 +27,7 @@
* \addtogroup configuration_file Configuration Files
*/
/*!
/*!
* \page app_mysql.conf app_mysql.conf
* \verbinclude app_mysql.conf.sample
*/
@ -335,7 +335,7 @@ static int aMYSQL_connect(struct ast_channel *chan, const char *data)
unsigned int port = 0;
char *port_str;
char *parse = ast_strdupa(data);
AST_NONSTANDARD_APP_ARGS(args, parse, ' ');
if (args.argc < 6) {
@ -626,8 +626,8 @@ static int unload_module(void)
* Module loading including tests for configuration or dependencies.
* This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
* or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
* tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
* configuration file or other non-critical problem return
* tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
* configuration file or other non-critical problem return
* AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
*/
static int load_module(void)
@ -665,4 +665,3 @@ static int load_module(void)
}
AST_MODULE_INFO_STANDARD_DEPRECATED(ASTERISK_GPL_KEY, "Simple Mysql Interface");

View File

@ -60,6 +60,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define DATE_FORMAT "%Y-%m-%d %T"
#ifndef MYSQL_PORT
# ifdef MARIADB_PORT
# define MYSQL_PORT MARIADB_PORT
# else
# define MYSQL_PORT 3306
# endif
#endif
AST_THREADSTORAGE(sql1_buf);
AST_THREADSTORAGE(sql2_buf);
AST_THREADSTORAGE(escape_buf);
@ -128,7 +136,7 @@ static char *handle_cli_cdr_mysql_status(struct ast_cli_entry *e, int cmd, struc
else
snprintf(status, 255, "Connected to %s@%s", ast_str_buffer(dbname), ast_str_buffer(hostname));
if (!ast_strlen_zero(ast_str_buffer(dbuser)))
if (ast_str_strlen(dbuser))
snprintf(status2, 99, " with username %s", ast_str_buffer(dbuser));
if (ast_str_strlen(dbtable))
snprintf(status2, 99, " using table %s", ast_str_buffer(dbtable));
@ -158,11 +166,23 @@ static struct ast_cli_entry cdr_mysql_status_cli[] = {
AST_CLI_DEFINE(handle_cli_cdr_mysql_status, "Show connection status of cdr_mysql"),
};
static void configure_connection_charset(void)
{
if (ast_str_strlen(dbcharset)) {
const char *charset = ast_str_buffer(dbcharset);
if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, charset)) {
ast_log(LOG_WARNING, "Failed to set connection charset. Data inserted might be invalid.\n");
}
}
}
static int mysql_log(struct ast_cdr *cdr)
{
struct ast_str *sql1 = ast_str_thread_get(&sql1_buf, 1024), *sql2 = ast_str_thread_get(&sql2_buf, 1024);
int retries = 5;
#if MYSQL_VERSION_ID >= 50013
#ifdef HAVE_MYSQLCLIENT_BOOL
bool my_bool_true = 1;
#elif HAVE_MYSQLCLIENT_MY_BOOL
my_bool my_bool_true = 1;
#endif
@ -190,15 +210,13 @@ db_reconnect:
if (ssl_ca || ssl_cert || ssl_key) {
mysql_ssl_set(&mysql, ssl_key ? ast_str_buffer(ssl_key) : NULL, ssl_cert ? ast_str_buffer(ssl_cert) : NULL, ssl_ca ? ast_str_buffer(ssl_ca) : NULL, NULL, NULL);
}
configure_connection_charset();
if (mysql_real_connect(&mysql, ast_str_buffer(hostname), ast_str_buffer(dbuser), ast_str_buffer(password), ast_str_buffer(dbname), dbport, dbsock && ast_str_strlen(dbsock) ? ast_str_buffer(dbsock) : NULL, ssl_ca ? CLIENT_SSL : 0)) {
connected = 1;
connect_time = time(NULL);
records = 0;
if (dbcharset) {
ast_str_set(&sql1, 0, "SET NAMES '%s'", ast_str_buffer(dbcharset));
mysql_real_query(&mysql, ast_str_buffer(sql1), ast_str_strlen(sql1));
ast_debug(1, "SQL command as follows: %s\n", ast_str_buffer(sql1));
}
} else {
ast_log(LOG_ERROR, "Cannot connect to database server %s: (%d) %s\n", ast_str_buffer(hostname), mysql_errno(&mysql), mysql_error(&mysql));
connected = 0;
@ -250,7 +268,7 @@ db_reconnect:
struct ast_tm tm;
char timestr[128];
ast_localtime(&tv, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL);
ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %T", &tm);
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
value = ast_strdupa(timestr);
cdrname = "calldate";
} else {
@ -265,10 +283,7 @@ db_reconnect:
/* Need the type and value to determine if we want the raw value or not */
if (entry->staticvalue) {
value = ast_strdupa(entry->staticvalue);
} else if ((!strcmp(cdrname, "start") ||
!strcmp(cdrname, "answer") ||
!strcmp(cdrname, "end") ||
!strcmp(cdrname, "disposition") ||
} else if ((!strcmp(cdrname, "disposition") ||
!strcmp(cdrname, "amaflags")) &&
(strstr(entry->type, "int") ||
strstr(entry->type, "dec") ||
@ -278,6 +293,13 @@ db_reconnect:
strstr(entry->type, "numeric") ||
strstr(entry->type, "fixed"))) {
ast_cdr_format_var(cdr, cdrname, &value, workspace, sizeof(workspace), 1);
} else if (!strcmp(cdrname, "start") || !strcmp(cdrname, "answer") ||
!strcmp(cdrname, "end")) {
struct ast_tm tm;
char timestr[128];
ast_localtime(&cdr->start, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL);
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
value = ast_strdupa(timestr);
} else if (!strcmp(cdrname, "calldate")) {
/* Skip calldate - the value has already been dup'd */
} else {
@ -353,11 +375,29 @@ db_reconnect:
return 0;
}
static int my_unload_module(int reload)
{
static void free_strings(void)
{
struct unload_string *us;
AST_LIST_LOCK(&unload_strings);
while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) {
ast_free(us->str);
ast_free(us);
}
AST_LIST_UNLOCK(&unload_strings);
}
static int my_unload_module(int reload)
{
struct column *entry;
if (!reload) {
if (ast_cdr_unregister(name)) {
/* If we can't unregister the backend, we can't unload the module */
return -1;
}
}
ast_cli_unregister_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry));
if (connected) {
@ -366,12 +406,7 @@ static int my_unload_module(int reload)
records = 0;
}
AST_LIST_LOCK(&unload_strings);
while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) {
ast_free(us->str);
ast_free(us);
}
AST_LIST_UNLOCK(&unload_strings);
free_strings();
if (!reload) {
AST_RWLIST_WRLOCK(&columns);
@ -387,7 +422,8 @@ static int my_unload_module(int reload)
if (reload) {
return ast_cdr_backend_suspend(name);
} else {
return ast_cdr_unregister(name);
/* We unregistered earlier */
return 0;
}
}
@ -444,7 +480,9 @@ static int my_load_module(int reload)
MYSQL_ROW row;
MYSQL_RES *result;
char sqldesc[128];
#if MYSQL_VERSION_ID >= 50013
#ifdef HAVE_MYSQLCLIENT_BOOL
bool my_bool_true = 1;
#elif HAVE_MYSQLCLIENT_MY_BOOL
my_bool my_bool_true = 1;
#endif
@ -490,7 +528,7 @@ static int my_load_module(int reload)
res |= my_load_config_string(cfg, "global", "ssl_cert", &ssl_cert, "");
res |= my_load_config_string(cfg, "global", "ssl_key", &ssl_key, "");
res |= my_load_config_number(cfg, "global", "port", &dbport, 0);
res |= my_load_config_number(cfg, "global", "port", &dbport, MYSQL_PORT);
res |= my_load_config_number(cfg, "global", "timeout", &timeout, 0);
res |= my_load_config_string(cfg, "global", "compat", &compat, "no");
res |= my_load_config_string(cfg, "global", "cdrzone", &cdrzone, "");
@ -513,7 +551,9 @@ static int my_load_module(int reload)
AST_RWLIST_UNLOCK(&columns);
}
ast_config_destroy(cfg);
return AST_MODULE_LOAD_FAILURE;
free_strings();
return AST_MODULE_LOAD_DECLINE;
}
/* Check for any aliases */
@ -528,15 +568,16 @@ static int my_load_module(int reload)
ast_debug(1, "Got hostname of %s\n", ast_str_buffer(hostname));
ast_debug(1, "Got port of %d\n", dbport);
ast_debug(1, "Got a timeout of %d\n", timeout);
if (dbsock)
if (ast_str_strlen(dbsock)) {
ast_debug(1, "Got sock file of %s\n", ast_str_buffer(dbsock));
}
ast_debug(1, "Got user of %s\n", ast_str_buffer(dbuser));
ast_debug(1, "Got dbname of %s\n", ast_str_buffer(dbname));
ast_debug(1, "Got password of %s\n", ast_str_buffer(password));
ast_debug(1, "%sunning in calldate compatibility mode\n", calldate_compat ? "R" : "Not r");
ast_debug(1, "Dates and times are localized to %s\n", S_OR(ast_str_buffer(cdrzone), "local timezone"));
if (dbcharset) {
if (ast_str_strlen(dbcharset)) {
ast_debug(1, "Got DB charset of %s\n", ast_str_buffer(dbcharset));
}
@ -561,6 +602,9 @@ static int my_load_module(int reload)
NULL, NULL);
}
temp = dbsock && ast_str_strlen(dbsock) ? ast_str_buffer(dbsock) : NULL;
configure_connection_charset();
if (!mysql_real_connect(&mysql, ast_str_buffer(hostname), ast_str_buffer(dbuser), ast_str_buffer(password), ast_str_buffer(dbname), dbport, temp, ssl_ca && ast_str_strlen(ssl_ca) ? CLIENT_SSL : 0)) {
ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", ast_str_buffer(dbname), ast_str_buffer(hostname));
connected = 0;
@ -570,11 +614,6 @@ static int my_load_module(int reload)
connected = 1;
records = 0;
connect_time = time(NULL);
if (dbcharset) {
snprintf(sqldesc, sizeof(sqldesc), "SET NAMES '%s'", ast_str_buffer(dbcharset));
mysql_real_query(&mysql, sqldesc, strlen(sqldesc));
ast_debug(1, "SQL command as follows: %s\n", sqldesc);
}
/* Get table description */
snprintf(sqldesc, sizeof(sqldesc), "DESC %s", dbtable ? ast_str_buffer(dbtable) : "cdr");
@ -584,7 +623,9 @@ static int my_load_module(int reload)
connected = 0;
AST_RWLIST_UNLOCK(&columns);
ast_config_destroy(cfg);
return AST_MODULE_LOAD_FAILURE;
free_strings();
return AST_MODULE_LOAD_DECLINE;
}
if (!(result = mysql_store_result(&mysql))) {
@ -593,7 +634,9 @@ static int my_load_module(int reload)
connected = 0;
AST_RWLIST_UNLOCK(&columns);
ast_config_destroy(cfg);
return AST_MODULE_LOAD_FAILURE;
free_strings();
return AST_MODULE_LOAD_DECLINE;
}
while ((row = mysql_fetch_row(result))) {
@ -659,7 +702,8 @@ static int my_load_module(int reload)
AST_RWLIST_UNLOCK(&columns);
ast_config_destroy(cfg);
if (res < 0) {
return AST_MODULE_LOAD_FAILURE;
my_unload_module(0);
return AST_MODULE_LOAD_DECLINE;
}
if (!reload) {
@ -673,7 +717,12 @@ static int my_load_module(int reload)
res = ast_cli_register_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry));
}
return res;
if (res) {
my_unload_module(0);
return AST_MODULE_LOAD_DECLINE;
}
return AST_MODULE_LOAD_SUCCESS;
}
static int load_module(void)
@ -703,4 +752,3 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "MySQL CDR Backend",
.unload = unload_module,
.reload = reload,
);

View File

@ -16,7 +16,7 @@
* at the top of the source tree.
*/
/*!
/*!
* \file
* \brief Bluetooth Mobile Device channel driver
*
@ -58,6 +58,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/compat.h"
#include "asterisk/lock.h"
#include "asterisk/callerid.h"
#include "asterisk/channel.h"
#include "asterisk/config.h"
#include "asterisk/logger.h"
@ -133,7 +134,8 @@ struct mbl_pvt {
int rfcomm_socket; /* rfcomm socket descriptor */
char rfcomm_buf[256];
char io_buf[CHANNEL_FRAME_SIZE + AST_FRIENDLY_OFFSET];
struct ast_smoother *smoother; /* our smoother, for making 48 byte frames */
struct ast_smoother *bt_out_smoother; /* our bt_out_smoother, for making 48 byte frames */
struct ast_smoother *bt_in_smoother; /* our smoother, for making "normal" CHANNEL_FRAME_SIZEed byte frames */
int sco_socket; /* sco socket descriptor */
pthread_t monitor_thread; /* monitor thread handle */
int timeout; /*!< used to set the timeout for rfcomm data (may be used in the future) */
@ -163,6 +165,12 @@ struct mbl_pvt {
AST_LIST_ENTRY(mbl_pvt) entry;
};
/*! Structure used by hfp_parse_clip to return two items */
struct cidinfo {
char *cnum;
char *cnam;
};
static AST_RWLIST_HEAD_STATIC(devices, mbl_pvt);
static int handle_response_ok(struct mbl_pvt *pvt, char *buf);
@ -208,7 +216,7 @@ static char *mblsendsms_desc =
" Dest - destination\n"
" Message - text of the message\n";
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num,
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, struct cidinfo *cidinfo,
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor);
static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *cap,
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause);
@ -364,7 +372,8 @@ static struct hfp_hf hfp_our_brsf = {
static int hfp_parse_ciev(struct hfp_pvt *hfp, char *buf, int *value);
static char *hfp_parse_clip(struct hfp_pvt *hfp, char *buf);
static struct cidinfo hfp_parse_clip(struct hfp_pvt *hfp, char *buf);
static int parse_next_token(char string[], const int start, const char delim);
static int hfp_parse_cmti(struct hfp_pvt *hfp, char *buf);
static int hfp_parse_cmgr(struct hfp_pvt *hfp, char *buf, char **from_number, char **text);
static int hfp_parse_brsf(struct hfp_pvt *hfp, const char *buf);
@ -837,7 +846,7 @@ e_return:
*/
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num,
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, struct cidinfo *cidinfo,
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor)
{
struct ast_channel *chn;
@ -850,12 +859,15 @@ static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num
else
pvt->do_alignment_detection = 0;
ast_smoother_reset(pvt->smoother, DEVICE_FRAME_SIZE);
ast_smoother_reset(pvt->bt_out_smoother, DEVICE_FRAME_SIZE);
ast_smoother_reset(pvt->bt_in_smoother, CHANNEL_FRAME_SIZE);
ast_dsp_digitreset(pvt->dsp);
chn = ast_channel_alloc(1, state, cid_num, pvt->id, 0, 0, pvt->context,
assignedids, requestor, 0,
"Mobile/%s-%04lx", pvt->id, ast_random() & 0xffff);
chn = ast_channel_alloc(1, state,
cidinfo ? cidinfo->cnum : NULL,
cidinfo ? cidinfo->cnam : NULL,
0, 0, pvt->context, assignedids, requestor, 0,
"Mobile/%s-%04lx", pvt->id, ast_random() & 0xffff);
if (!chn) {
goto e_return;
}
@ -902,7 +914,7 @@ static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *
}
if (ast_format_cap_iscompatible_format(cap, DEVICE_FRAME_FORMAT) == AST_FORMAT_CMP_NOT_EQUAL) {
struct ast_str *codec_buf = ast_str_alloca(64);
struct ast_str *codec_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN);
ast_log(LOG_WARNING, "Asked to get a channel of unsupported format '%s'\n", ast_format_cap_get_names(cap, &codec_buf));
*cause = AST_CAUSE_FACILITY_NOT_IMPLEMENTED;
return NULL;
@ -1123,23 +1135,27 @@ static struct ast_frame *mbl_read(struct ast_channel *ast)
pvt->fr.delivery.tv_usec = 0;
pvt->fr.data.ptr = pvt->io_buf + AST_FRIENDLY_OFFSET;
if ((r = read(pvt->sco_socket, pvt->fr.data.ptr, DEVICE_FRAME_SIZE)) == -1) {
if (errno != EAGAIN && errno != EINTR) {
ast_debug(1, "[%s] read error %d, going to wait for new connection\n", pvt->id, errno);
close(pvt->sco_socket);
pvt->sco_socket = -1;
ast_channel_set_fd(ast, 0, -1);
do {
if ((r = read(pvt->sco_socket, pvt->fr.data.ptr, DEVICE_FRAME_SIZE)) == -1) {
if (errno != EAGAIN && errno != EINTR) {
ast_debug(1, "[%s] read error %d, going to wait for new connection\n", pvt->id, errno);
close(pvt->sco_socket);
pvt->sco_socket = -1;
ast_channel_set_fd(ast, 0, -1);
}
goto e_return;
}
goto e_return;
}
pvt->fr.datalen = r;
pvt->fr.samples = r / 2;
pvt->fr.datalen = r;
pvt->fr.samples = r / 2;
if (pvt->do_alignment_detection)
do_alignment_detection(pvt, pvt->fr.data.ptr, r);
if (pvt->do_alignment_detection)
do_alignment_detection(pvt, pvt->fr.data.ptr, r);
fr = ast_dsp_process(ast, pvt->dsp, &pvt->fr);
ast_smoother_feed(pvt->bt_in_smoother, &pvt->fr);
fr = ast_smoother_read(pvt->bt_in_smoother);
} while (fr == NULL);
fr = ast_dsp_process(ast, pvt->dsp, fr);
ast_mutex_unlock(&pvt->lock);
@ -1166,9 +1182,9 @@ static int mbl_write(struct ast_channel *ast, struct ast_frame *frame)
CHANNEL_DEADLOCK_AVOIDANCE(ast);
}
ast_smoother_feed(pvt->smoother, frame);
ast_smoother_feed(pvt->bt_out_smoother, frame);
while ((f = ast_smoother_read(pvt->smoother))) {
while ((f = ast_smoother_read(pvt->bt_out_smoother))) {
sco_write(pvt->sco_socket, f->data.ptr, f->datalen);
}
@ -1774,7 +1790,7 @@ static int rfcomm_read_command(int rsock, char **buf, size_t count, size_t *in_c
* \verbatim
* \r\n<result code>\r\n
* <at command>\r
* \r\n>
* \r\n>
* \endverbatim
*
* These formats correspond to AT result codes, AT commands, and the AT SMS
@ -2203,45 +2219,103 @@ static int hfp_parse_ciev(struct hfp_pvt *hfp, char *buf, int *value)
* \param hfp an hfp_pvt struct
* \param buf the buffer to parse (null terminated)
* \note buf will be modified when the CID string is parsed
* \return NULL on error (parse error) or a pointer to the caller id
* information in buf
* \return a cidinfo structure pointing to the cnam and cnum
* data in buf. On parse errors, either or both pointers
* will point to null strings
*/
static char *hfp_parse_clip(struct hfp_pvt *hfp, char *buf)
static struct cidinfo hfp_parse_clip(struct hfp_pvt *hfp, char *buf)
{
int i, state;
char *clip = NULL;
size_t s;
int i;
int tokens[6];
char *cnamtmp;
char delim = ' '; /* First token terminates with space */
int invalid = 0; /* Number of invalid chars in cnam */
struct cidinfo cidinfo = { NULL, NULL };
/* parse clip info in the following format:
* +CLIP: "123456789",128,...
*/
state = 0;
s = strlen(buf);
for (i = 0; i < s && state != 3; i++) {
switch (state) {
case 0: /* search for start of the number (") */
if (buf[i] == '"') {
state++;
}
break;
case 1: /* mark the number */
clip = &buf[i];
state++;
/* fall through */
case 2: /* search for the end of the number (") */
if (buf[i] == '"') {
buf[i] = '\0';
state++;
}
break;
ast_debug(3, "[%s] hfp_parse_clip is processing \"%s\"\n", hfp->owner->id, buf);
tokens[0] = 0; /* First token starts in position 0 */
for (i = 1; i < ARRAY_LEN(tokens); i++) {
tokens[i] = parse_next_token(buf, tokens[i - 1], delim);
delim = ','; /* Subsequent tokens terminate with comma */
}
ast_debug(3, "[%s] hfp_parse_clip found tokens: 0=%s, 1=%s, 2=%s, 3=%s, 4=%s, 5=%s\n",
hfp->owner->id, &buf[tokens[0]], &buf[tokens[1]], &buf[tokens[2]],
&buf[tokens[3]], &buf[tokens[4]], &buf[tokens[5]]);
/* Clean up cnum, and make sure it is legitimate since it is untrusted. */
cidinfo.cnum = ast_strip_quoted(&buf[tokens[1]], "\"", "\"");
if (!ast_isphonenumber(cidinfo.cnum)) {
ast_debug(1, "[%s] hfp_parse_clip invalid cidinfo.cnum data \"%s\" - deleting\n",
hfp->owner->id, cidinfo.cnum);
cidinfo.cnum = "";
}
/*
* Some docs say tokens 2 and 3 including the commas are optional.
* If absent, that would move CNAM back to token 3.
*/
cidinfo.cnam = &buf[tokens[5]]; /* Assume it's in token 5 */
if (buf[tokens[5]] == '\0' && buf[tokens[4]] == '\0') {
/* Tokens 4 and 5 are empty. See if token 3 looks like CNAM (starts with ") */
i = tokens[3];
while (buf[i] == ' ') { /* Find the first non-blank */
i++;
}
if (buf[i] == '"') {
/* Starts with quote. Use this for CNAM. */
cidinfo.cnam = &buf[i];
}
}
if (state != 3) {
return NULL;
/* Clean up CNAM. */
cidinfo.cnam = ast_strip_quoted(cidinfo.cnam, "\"", "\"");
for (cnamtmp = cidinfo.cnam; *cnamtmp != '\0'; cnamtmp++) {
if (!strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-,abcdefghijklmnopqrstuvwxyz_", *cnamtmp)) {
*cnamtmp = '_'; /* Invalid. Replace with underscore. */
invalid++;
}
}
if (invalid) {
ast_debug(2, "[%s] hfp_parse_clip replaced %d invalid byte(s) in cnam data\n",
hfp->owner->id, invalid);
}
ast_debug(2, "[%s] hfp_parse_clip returns cnum=%s and cnam=%s\n",
hfp->owner->id, cidinfo.cnum, cidinfo.cnam);
return clip;
return cidinfo;
}
/*!
* \brief Terminate current token and return an index to start of the next token.
* \param string the null-terminated string being parsed (will be altered!)
* \param start where the current token starts
* \param delim the token termination delimiter. \0 is also considered a terminator.
* \return index of the next token. May be the same as this token if the string is
* exhausted.
*/
static int parse_next_token(char string[], const int start, const char delim)
{
int index;
int quoting = 0;
for (index = start; string[index] != 0; index++) {
if ((string[index] == delim) && !quoting ) {
/* Found the delimiter, outside of quotes. This is the end of the token. */
string[index] = '\0'; /* Terminate this token. */
index++; /* Point the index to the start of the next token. */
break; /* We're done. */
} else if (string[index] == '"' && !quoting) {
/* Found a beginning quote mark. Remember it. */
quoting = 1;
} else if (string[index] == '"' ) {
/* Found the end quote mark. */
quoting = 0;
}
}
return index;
}
/*!
@ -2256,7 +2330,7 @@ static int hfp_parse_cmti(struct hfp_pvt *hfp, char *buf)
int index = -1;
/* parse cmti info in the following format:
* +CMTI: <mem>,<index>
* +CMTI: <mem>,<index>
*/
if (!sscanf(buf, "+CMTI: %*[^,],%d", &index)) {
ast_debug(2, "[%s] error parsing CMTI event '%s'\n", hfp->owner->id, buf);
@ -3578,19 +3652,17 @@ static int handle_response_ciev(struct mbl_pvt *pvt, char *buf)
*/
static int handle_response_clip(struct mbl_pvt *pvt, char *buf)
{
char *clip;
struct msg_queue_entry *msg;
struct ast_channel *chan;
struct cidinfo cidinfo;
if ((msg = msg_queue_head(pvt)) && msg->expected == AT_CLIP) {
msg_queue_free_and_pop(pvt);
pvt->needcallerid = 0;
if (!(clip = hfp_parse_clip(pvt->hfp, buf))) {
ast_debug(1, "[%s] error parsing CLIP: %s\n", pvt->id, buf);
}
cidinfo = hfp_parse_clip(pvt->hfp, buf);
if (!(chan = mbl_new(AST_STATE_RING, pvt, clip, NULL, NULL))) {
if (!(chan = mbl_new(AST_STATE_RING, pvt, &cidinfo, NULL, NULL))) {
ast_log(LOG_ERROR, "[%s] unable to allocate channel for incoming call\n", pvt->id);
hfp_send_chup(pvt->hfp);
msg_queue_push(pvt, AT_OK, AT_CHUP);
@ -3801,7 +3873,7 @@ static void *do_monitor_phone(void *data)
{
struct mbl_pvt *pvt = (struct mbl_pvt *)data;
struct hfp_pvt *hfp = pvt->hfp;
char buf[256];
char buf[350];
int t;
at_message_t at_msg;
struct msg_queue_entry *entry;
@ -3855,14 +3927,11 @@ static void *do_monitor_phone(void *data)
}
if ((at_msg = at_read_full(hfp->rsock, buf, sizeof(buf))) < 0) {
/* XXX gnu specific strerror_r is assummed here, this
* is not really safe. See the strerror(3) man page
* for more info. */
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
break;
}
ast_debug(1, "[%s] %s\n", pvt->id, buf);
ast_debug(1, "[%s] read %s\n", pvt->id, buf);
switch (at_msg) {
case AT_BRSF:
@ -3995,7 +4064,7 @@ static void *do_monitor_phone(void *data)
ast_debug(1, "[%s] error parsing message\n", pvt->id);
goto e_cleanup;
case AT_READ_ERROR:
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
goto e_cleanup;
default:
break;
@ -4073,11 +4142,7 @@ static void *do_monitor_headset(void *data)
continue;
if ((at_msg = at_read_full(pvt->rfcomm_socket, buf, sizeof(buf))) < 0) {
if (strerror_r(errno, buf, sizeof(buf)))
ast_debug(1, "[%s] error reading from device\n", pvt->id);
else
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, buf, errno);
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
goto e_cleanup;
}
ast_debug(1, "[%s] %s\n", pvt->id, buf);
@ -4473,16 +4538,22 @@ static struct mbl_pvt *mbl_load_device(struct ast_config *cfg, const char *cat)
pvt->ring_sched_id = -1;
pvt->has_sms = 1;
/* setup the smoother */
if (!(pvt->smoother = ast_smoother_new(DEVICE_FRAME_SIZE))) {
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame smoother.\n", cat);
/* setup the bt_out_smoother */
if (!(pvt->bt_out_smoother = ast_smoother_new(DEVICE_FRAME_SIZE))) {
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame bt_out_smoother.\n", cat);
goto e_free_pvt;
}
/* setup the bt_in_smoother */
if (!(pvt->bt_in_smoother = ast_smoother_new(CHANNEL_FRAME_SIZE))) {
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame bt_in_smoother.\n", cat);
goto e_free_bt_out_smoother;
}
/* setup the dsp */
if (!(pvt->dsp = ast_dsp_new())) {
ast_log(LOG_ERROR, "Skipping device %s. Error setting up dsp for dtmf detection.\n", cat);
goto e_free_smoother;
goto e_free_bt_in_smoother;
}
/* setup the scheduler */
@ -4542,8 +4613,10 @@ e_free_sched:
ast_sched_context_destroy(pvt->sched);
e_free_dsp:
ast_dsp_free(pvt->dsp);
e_free_smoother:
ast_smoother_free(pvt->smoother);
e_free_bt_in_smoother:
ast_smoother_free(pvt->bt_in_smoother);
e_free_bt_out_smoother:
ast_smoother_free(pvt->bt_out_smoother);
e_free_pvt:
ast_free(pvt);
e_return:
@ -4675,7 +4748,8 @@ static int unload_module(void)
ast_free(pvt->hfp);
}
ast_smoother_free(pvt->smoother);
ast_smoother_free(pvt->bt_out_smoother);
ast_smoother_free(pvt->bt_in_smoother);
ast_dsp_free(pvt->dsp);
ast_sched_context_destroy(pvt->sched);
ast_free(pvt);
@ -4713,9 +4787,13 @@ static int load_module(void)
ast_format_cap_append(mbl_tech.capabilities, DEVICE_FRAME_FORMAT, 0);
/* Check if we have Bluetooth, no point loading otherwise... */
dev_id = hci_get_route(NULL);
s = hci_open_dev(dev_id);
if (dev_id < 0 || s < 0) {
ast_log(LOG_ERROR, "No Bluetooth devices found. Not loading module.\n");
ao2_ref(mbl_tech.capabilities, -1);
mbl_tech.capabilities = NULL;
hci_close_dev(s);
return AST_MODULE_LOAD_DECLINE;
}
@ -4723,6 +4801,8 @@ static int load_module(void)
if (mbl_load_config()) {
ast_log(LOG_ERROR, "Errors reading config file %s. Not loading module.\n", MBL_CONFIG);
ao2_ref(mbl_tech.capabilities, -1);
mbl_tech.capabilities = NULL;
return AST_MODULE_LOAD_DECLINE;
}
@ -4747,10 +4827,9 @@ static int load_module(void)
return AST_MODULE_LOAD_SUCCESS;
e_cleanup:
if (sdp_session)
sdp_close(sdp_session);
unload_module();
return AST_MODULE_LOAD_FAILURE;
return AST_MODULE_LOAD_DECLINE;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Bluetooth Mobile Device Channel Driver",

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -66,6 +66,7 @@
#include "asterisk/udptl.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/format_cache.h"
#include "asterisk/paths.h"
#include "ootypes.h"
#include "ooUtils.h"
@ -86,7 +87,7 @@ struct ooh323_peer;
/* Helper functions */
struct ooh323_user *find_user(const char * name, const char *ip);
struct ooh323_peer *find_peer(const char * name, int port);
void ooh323_delete_peer(struct ooh323_peer *peer);
void ooh323_delete_peer(struct ooh323_peer *peer);
int delete_users(void);
int delete_peers(void);
@ -96,7 +97,7 @@ int reload_config(int reload);
int restart_monitor(void);
int configure_local_rtp(struct ooh323_pvt *p, ooCallData* call);
void setup_rtp_connection(ooCallData *call, const char *remoteIp,
void setup_rtp_connection(ooCallData *call, const char *remoteIp,
int remotePort);
void close_rtp_connection(ooCallData *call);
struct ast_frame *ooh323_rtp_read

View File

@ -120,9 +120,11 @@ static int mp3_squeue(struct ast_filestream *s)
res = ftell(s->f);
p->sbuflen = fread(p->sbuf, 1, MP3_SCACHE, s->f);
if(p->sbuflen < 0) {
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", p->sbuflen, strerror(errno));
return -1;
if (p->sbuflen < MP3_SCACHE) {
if (ferror(s->f)) {
ast_log(LOG_WARNING, "Error while reading MP3 file: %s\n", strerror(errno));
return -1;
}
}
res = decodeMP3(&p->mp,p->sbuf,p->sbuflen,p->dbuf,MP3_DCACHE,&p->dbuflen);
if(res != MP3_OK)
@ -327,4 +329,3 @@ static int unload_module(void)
}
AST_MODULE_INFO_STANDARD_EXTENDED(ASTERISK_GPL_KEY, "MP3 format [Any rate but 8000hz mono is optimal]");

View File

@ -6,22 +6,22 @@ Introduction
Objective Open H.323 stack is a simple H.323 implementation in C. This
package contains the core stack code. For complete H.323 stack package with
examples or for more information visit www.obj-sys.com/open
The ASN.1 messaging code was developed using the Objective Systems ASN1C
compiler to implement the core H.323 specifications (H.225, H.235,
and H.245). Additional code was then developed which makes use of
the compiler generated code for presenting a comparatively high level
The ASN.1 messaging code was developed using the Objective Systems ASN1C
compiler to implement the core H.323 specifications (H.225, H.235,
and H.245). Additional code was then developed which makes use of
the compiler generated code for presenting a comparatively high level
stack API.
Features
Features supported in this package include the following:
* H.225/Q.931 - the following message types are supported (including
support for FastStart and H.245 tunneling):
- Setup
* H.225/Q.931 - the following message types are supported (including
support for FastStart and H.245 tunneling):
- Setup
- Connect
- Call Proceeding
- Alerting
- Alerting
- Facility
- ReleaseComplete
@ -54,8 +54,8 @@ Features supported in this package include the following:
To run the stack test application chansetup
chansetup - This is a sample program developed for testing multiple calls.
This program allows stack testing by placing multiple calls. The number of
calls, duration of each call and interval between successive calls are
configurable.
calls, duration of each call and interval between successive calls are
configurable.
1. Two instances of this program have to be run. Can be run on same machine or
different machines.
@ -64,19 +64,19 @@ To run the stack test application chansetup
cd tests/chansetup
2. For running listener instance,
2. For running listener instance,
./h323peer [--use-ip ip] [--use-port port]
where local ip address and port can be specified for listening to incoming
where local ip address and port can be specified for listening to incoming
calls. By default, application determines ip address and uses default H323
port number 1720.
3. For running calling instance
./h323peer [--use-ip ip] -n <number of calls> -duration <call duration>
-interval <inetrval between successive calls> destination
where all times are in seconds. Interval of 0 means next call will be placed
after current call finishes. "destination" is the dotted ip address of the
endpoint running listener instance.
@ -86,10 +86,9 @@ To run the stack test application chansetup
Reporting Problems:
Report problems you encounter by sending E-mail to support@obj-sys.com.
Report problems you encounter by sending E-mail to support@obj-sys.com.
If you have any further questions or comments on what you would like to
see in the product or what is difficult to use or understand, please
see in the product or what is difficult to use or understand, please
communicate them to us. Your feedback is important to us. Please let us
know how it works out for you - either good or bad.
know how it works out for you - either good or bad.

View File

@ -96,7 +96,7 @@ libooh323c_a_SOURCES = ooLogChan.h ooLogChan.c ooUtils.c ooUtils.h ooGkClient.h
INCLUDES = -Ih323
#include_HEADERS = ooUtils.h memheap.h ooCommon.h ooDateTime.h ooGkClient.h ooasn1.h oochannels.h ootrace.h ooh245.h ooports.h ooq931.h oohdr.h ooper.h ooSocket.h ooTimer.h ootypes.h eventHandler.h ooCapability.h ooCalls.h ooStackCmds.h ooh323.h ooh323ep.h printHandler.h rtctype.h h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.h
#include_HEADERS = ooUtils.h memheap.h ooCommon.h ooDateTime.h ooGkClient.h ooasn1.h oochannels.h ootrace.h ooh245.h ooports.h ooq931.h oohdr.h ooper.h ooSocket.h ooTimer.h ootypes.h eventHandler.h ooCapability.h ooCalls.h ooStackCmds.h ooh323.h ooh323ep.h printHandler.h rtctype.h h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.h
EXTRA_DIST = oostk.dsp
subdir = ooh323c/src
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@ -104,7 +104,7 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
libooh323c_a_AR = $(AR) cru
libooh323c_a_AR = $(AR) cr
libooh323c_a_LIBADD =
am_libooh323c_a_OBJECTS = ooLogChan.$(OBJEXT) ooUtils.$(OBJEXT) \
ooGkClient.$(OBJEXT) context.$(OBJEXT) ooDateTime.$(OBJEXT) \
@ -187,7 +187,7 @@ MULTIMEDIA-SYSTEM-CONTROLDec.$(OBJEXT): \
h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
MULTIMEDIA-SYSTEM-CONTROLEnc.$(OBJEXT): \
h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
libooh323c.a: $(libooh323c_a_OBJECTS) $(libooh323c_a_DEPENDENCIES)
libooh323c.a: $(libooh323c_a_OBJECTS) $(libooh323c_a_DEPENDENCIES)
-rm -f libooh323c.a
$(libooh323c_a_AR) libooh323c.a $(libooh323c_a_OBJECTS) $(libooh323c_a_LIBADD)
$(RANLIB) libooh323c.a

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -34,13 +34,13 @@ int initContext (OOCTXT* pctxt)
return ASN_OK;
}
int initContextBuffer
int initContextBuffer
(OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz)
{
if (bufaddr == 0) {
/* dynamic buffer */
if (bufsiz == 0) bufsiz = ASN_K_ENCBUFSIZ;
pctxt->buffer.data = (ASN1OCTET*)
pctxt->buffer.data = (ASN1OCTET*)
memHeapAlloc (&pctxt->pMsgMemHeap, bufsiz);
if (!pctxt->buffer.data) return ASN_E_NOMEM;
pctxt->buffer.size = bufsiz;
@ -59,7 +59,7 @@ int initContextBuffer
return ASN_OK;
}
int initSubContext (OOCTXT* pctxt, OOCTXT* psrc)
int initSubContext (OOCTXT* pctxt, OOCTXT* psrc)
{
/* ast_mutex_lock(&pctxt->pLock); */
int stat = ASN_OK;
@ -84,7 +84,7 @@ void freeContext (OOCTXT* pctxt)
ASN1BOOL saveBuf;
ast_mutex_lock(&pctxt->pLock);
saveBuf = (pctxt->flags & ASN1SAVEBUF) != 0;
if (pctxt->buffer.dynamic && pctxt->buffer.data) {
if (saveBuf) {
memHeapMarkSaved (&pctxt->pMsgMemHeap, pctxt->buffer.data, TRUE);
@ -129,7 +129,7 @@ int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource)
{
int stat;
ast_mutex_lock(&pTarget->pLock); ast_mutex_lock(&pSource->pLock);
stat = initContextBuffer
stat = initContextBuffer
(pTarget, pSource->buffer.data, pSource->buffer.size);
if (ASN_OK == stat) {
@ -150,11 +150,11 @@ int setPERBuffer (OOCTXT* pctxt,
ast_mutex_unlock(&pctxt->pLock);
if(stat != ASN_OK) return stat;
return ASN_OK;
}
OOCTXT* newContext ()
OOCTXT* newContext ()
{
/* OOCTXT* pctxt = (OOCTXT*) ASN1CRTMALLOC0 (sizeof(OOCTXT)); */
OOCTXT* pctxt = (OOCTXT*) malloc (sizeof(OOCTXT));
@ -163,6 +163,7 @@ OOCTXT* newContext ()
/* ASN1CRTFREE0 (pctxt); */
free(pctxt);
pctxt = 0;
return (pctxt);
}
pctxt->flags |= ASN1DYNCTXT;
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -19,16 +19,16 @@
#include "ooasn1.h"
static int decode16BitConstrainedString
static int decode16BitConstrainedString
(OOCTXT* pctxt, Asn116BitCharString* pString, Asn116BitCharSet* pCharSet);
static int decodeOctets
static int decodeOctets
(OOCTXT* pctxt, ASN1OCTET* pbuffer, ASN1UINT bufsiz, ASN1UINT nbits);
static int getComponentLength (OOCTXT* pctxt, ASN1UINT itemBits);
int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
{
{
unsigned char mask;
if (nbits == 0) {
@ -47,7 +47,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
pctxt->buffer.bitOffset -= nbits;
*pvalue = ((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
*pvalue = ((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
pctxt->buffer.bitOffset) & ((1 << nbits) - 1);
return ASN_OK;
@ -62,7 +62,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
/* Check if buffer contains number of bits requested */
int nbytes = (((nbits - pctxt->buffer.bitOffset) + 7) / 8);
if ((pctxt->buffer.byteIndex + nbytes) >= pctxt->buffer.size) {
return LOG_ASN1ERR (pctxt, ASN_E_ENDOFBUF);
}
@ -78,7 +78,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
/* second read bytes from next byteIndex */
while (nbits >= 8) {
*pvalue = (*pvalue << 8) |
*pvalue = (*pvalue << 8) |
(pctxt->buffer.data[pctxt->buffer.byteIndex]);
pctxt->buffer.byteIndex++;
nbits -= 8;
@ -87,8 +87,8 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
/* third read bits & set bitoffset of the byteIndex */
if (nbits > 0) {
pctxt->buffer.bitOffset = 8 - nbits;
*pvalue = (*pvalue << nbits) |
((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
*pvalue = (*pvalue << nbits) |
((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
pctxt->buffer.bitOffset);
}
@ -96,7 +96,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
}
}
int decodeBitString
int decodeBitString
(OOCTXT* pctxt, ASN1UINT* numbits_p, ASN1OCTET* buffer, ASN1UINT bufsiz)
{
ASN1UINT bitcnt;
@ -111,7 +111,7 @@ int decodeBitString
if (bitcnt > 0) {
*numbits_p += bitcnt;
stat = bitAndOctetStringAlignmentTest
stat = bitAndOctetStringAlignmentTest
(pSizeList, bitcnt, TRUE, &doAlign);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -133,7 +133,7 @@ int decodeBitString
return ASN_OK;
}
int decodeBMPString
int decodeBMPString
(OOCTXT* pctxt, ASN1BMPString* pvalue, Asn116BitCharSet* permCharSet)
{
Asn116BitCharSet charSet;
@ -164,7 +164,7 @@ int decodeByteAlign (OOCTXT* pctxt)
return ASN_OK;
}
int decodeConstrainedStringEx
int decodeConstrainedStringEx
(OOCTXT* pctxt, const char** string, const char* charSet,
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits)
{
@ -227,9 +227,9 @@ int decodeConstrainedStringEx
return ASN_OK;
}
int decodeConsInteger
int decodeConsInteger
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower, ASN1INT upper)
{
{
ASN1UINT range_value = upper - lower;
ASN1UINT adjusted_value;
int stat = ASN_OK;
@ -254,9 +254,9 @@ int decodeConsInteger
return stat;
}
int decodeConsUInt8
int decodeConsUInt8
(OOCTXT* pctxt, ASN1UINT8* pvalue, ASN1UINT lower, ASN1UINT upper)
{
{
ASN1UINT range_value, value;
ASN1UINT adjusted_value;
int stat = ASN_OK;
@ -299,9 +299,9 @@ int decodeConsUInt8
return stat;
}
int decodeConsUInt16
int decodeConsUInt16
(OOCTXT* pctxt, ASN1USINT* pvalue, ASN1UINT lower, ASN1UINT upper)
{
{
ASN1UINT range_value, value;
ASN1UINT adjusted_value;
int stat = ASN_OK;
@ -328,9 +328,9 @@ int decodeConsUInt16
return stat;
}
int decodeConsUnsigned
int decodeConsUnsigned
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower, ASN1UINT upper)
{
{
ASN1UINT range_value;
ASN1UINT adjusted_value;
int stat = ASN_OK;
@ -354,9 +354,9 @@ int decodeConsUnsigned
return stat;
}
int decodeConsWholeNumber
int decodeConsWholeNumber
(OOCTXT* pctxt, ASN1UINT* padjusted_value, ASN1UINT range_value)
{
{
ASN1UINT nocts, range_bitcnt;
int stat;
@ -419,9 +419,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
/* If "fast copy" option is not set (ASN1FATSCOPY) or if constructed,
* copy the bit string value into a dynamic memory buffer;
* otherwise, store the pointer to the value in the decode
* otherwise, store the pointer to the value in the decode
* buffer in the data pointer argument. */
if (pctxt->flags & ASN1FASTCOPY) {
/* check is it possible to do optimized decoding */
@ -433,7 +433,7 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = DECODEBIT (pctxt, &bit); /* read first bit of length determinant */
if (bit == 1 && stat == ASN_OK)
if (bit == 1 && stat == ASN_OK)
stat = DECODEBIT (pctxt, &bit); /* read second bit */
pctxt->buffer.byteIndex = byteIndex; /* restore byte index */
@ -441,9 +441,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
/* if either first or second bit != 0 - not fragmented */
if (bit == 0 && stat == ASN_OK) {
if (bit == 0 && stat == ASN_OK) {
ASN1UINT bitcnt;
stat = decodeLength (pctxt, &bitcnt);
if (stat != 0) return LOG_ASN1ERR (pctxt, stat);
@ -454,9 +454,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
else
else
pBitStr->data = 0;
return stat;
}
}
@ -470,13 +470,13 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
}
nocts = (nbits + 7) / 8;
/* Allocate memory for the target string */
if (nocts > 0) {
ptmp = (ASN1OCTET*) ASN1MALLOC (pctxt, nocts);
if (0 == ptmp) return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
/* Call static bit string decode function */
stat = decodeBitString (pctxt, &pBitStr->numbits, ptmp, nocts);
@ -493,7 +493,7 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
/* If "fast copy" option is not set (ASN1FASTCOPY) or if constructed,
* copy the octet string value into a dynamic memory buffer;
* otherwise, store the pointer to the value in the decode
* otherwise, store the pointer to the value in the decode
* buffer in the data pointer argument. */
if (pctxt->flags & ASN1FASTCOPY) {
@ -507,7 +507,7 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = DECODEBIT (pctxt, &bit); /* read first bit of length determinant */
if (bit == 1 && stat == ASN_OK)
if (bit == 1 && stat == ASN_OK)
stat = DECODEBIT (pctxt, &bit); /* read second bit */
pctxt->buffer.byteIndex = byteIndex; /* restore byte index */
@ -515,9 +515,9 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
/* if either first or second bit != 0 - not fragmented */
if (bit == 0 && stat == ASN_OK) {
if (bit == 0 && stat == ASN_OK) {
ASN1UINT octcnt;
stat = decodeLength (pctxt, &octcnt);
if (stat != 0) return LOG_ASN1ERR (pctxt, stat);
@ -528,13 +528,13 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
stat = moveBitCursor (pctxt, octcnt * 8);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
else
else
pOctStr->data = 0;
return stat;
}
}
nocts = getComponentLength (pctxt, 8);
if (nocts < 0) return LOG_ASN1ERR (pctxt, nocts);
@ -671,14 +671,14 @@ int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
if (j == 0) {
subid = pvalue->subid[0];
pvalue->subid[0] = ((subid / 40) >= 2) ? 2 : subid / 40;
pvalue->subid[1] = (pvalue->subid[0] == 2) ?
pvalue->subid[1] = (pvalue->subid[0] == 2) ?
subid - 80 : subid % 40;
j = 2;
}
else j++;
}
else
stat = ASN_E_INVOBJID;
stat = ASN_E_INVOBJID;
}
pvalue->numids = j;
@ -687,9 +687,9 @@ int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
return (stat);
}
static int decodeOctets
static int decodeOctets
(OOCTXT* pctxt, ASN1OCTET* pbuffer, ASN1UINT bufsiz, ASN1UINT nbits)
{
{
ASN1UINT nbytes = (nbits + 7) / 8 ;
ASN1UINT i = 0, j;
ASN1UINT rshift = pctxt->buffer.bitOffset;
@ -740,20 +740,20 @@ static int decodeOctets
/* Copy last partial byte */
if (nbits >= rshift) {
pbuffer[i] =
pbuffer[i] =
pctxt->buffer.data[pctxt->buffer.byteIndex++] << lshift;
nbitsInLastOctet = nbits - rshift;
if (nbitsInLastOctet > 0) {
pbuffer[i] |=
pbuffer[i] |=
pctxt->buffer.data[pctxt->buffer.byteIndex] >> rshift;
}
pctxt->buffer.bitOffset = 8 - nbitsInLastOctet;
}
else if (nbits > 0) { /* nbits < rshift */
pbuffer[i] =
pbuffer[i] =
pctxt->buffer.data[pctxt->buffer.byteIndex] << lshift;
pctxt->buffer.bitOffset = rshift - nbits;
}
@ -773,7 +773,7 @@ static int decodeOctets
return ASN_OK;
}
int decodeOctetString
int decodeOctetString
(OOCTXT* pctxt, ASN1UINT* numocts_p, ASN1OCTET* buffer, ASN1UINT bufsiz)
{
ASN1UINT octcnt;
@ -790,7 +790,7 @@ int decodeOctetString
if (TRUE) {
ASN1BOOL doAlign;
stat = bitAndOctetStringAlignmentTest
stat = bitAndOctetStringAlignmentTest
(pSizeList, octcnt, FALSE, &doAlign);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -800,7 +800,7 @@ int decodeOctetString
}
}
stat = decodeOctets (pctxt, &buffer[octidx],
stat = decodeOctets (pctxt, &buffer[octidx],
bufsiz - octidx, (octcnt * 8));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -815,7 +815,7 @@ int decodeOctetString
return ASN_OK;
}
int decodeOpenType
int decodeOpenType
(OOCTXT* pctxt, const ASN1OCTET** object_p2, ASN1UINT* numocts_p)
{
ASN1DynOctStr octStr;
@ -883,7 +883,7 @@ int decodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower)
stat = decodeLength (pctxt, &nbytes);
if (stat < 0) return LOG_ASN1ERR (pctxt, stat);
if (nbytes > 0) {
stat = decodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -898,7 +898,7 @@ int decodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower)
}
int decodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT* pvalue)
{
{
ASN1BOOL bitValue;
ASN1UINT len;
int ret;
@ -959,7 +959,7 @@ int decodeVarWidthCharString (OOCTXT* pctxt, const char** pvalue)
return ASN_OK;
}
static int decode16BitConstrainedString
static int decode16BitConstrainedString
(OOCTXT* pctxt, Asn116BitCharString* pString, Asn116BitCharSet* pCharSet)
{
ASN1UINT i, idx, nbits = pCharSet->alignedBits;
@ -985,7 +985,7 @@ static int decode16BitConstrainedString
stat = decodeBits (pctxt, &idx, nbits);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
pString->data[i] = (pCharSet->charSet.data == 0) ?
pString->data[i] = (pCharSet->charSet.data == 0) ?
idx + pCharSet->firstChar : pCharSet->charSet.data[idx];
}
}
@ -1048,6 +1048,6 @@ int moveBitCursor (OOCTXT* pctxt, int bitOffset)
if (pctxt->buffer.byteIndex > pctxt->buffer.size) {
return (ASN_E_ENDOFBUF);
}
return ASN_OK;
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -30,7 +30,7 @@ void dListInit (DList* pList)
DListNode* dListAppend (OOCTXT* pctxt, DList* pList, void* pData)
{
DListNode* pListNode = (DListNode*)
DListNode* pListNode = (DListNode*)
memAlloc (pctxt, sizeof(DListNode));
if (0 != pListNode) {
@ -53,7 +53,7 @@ DListNode* dListAppend (OOCTXT* pctxt, DList* pList, void* pData)
DListNode* dListAppendNode (OOCTXT* pctxt, DList* pList, void* pData)
{
DListNode* pListNode =
DListNode* pListNode =
(DListNode*) (((char*)pData) - sizeof(DListNode));
if (0 != pListNode) {
@ -109,7 +109,7 @@ void dListFreeAll (OOCTXT* pctxt, DList* pList)
for (pNode = pList->head; pNode != 0; pNode = pNextNode) {
pNextNode = pNode->next;
memFreePtr (pctxt, pNode->data);
memFreePtr (pctxt, pNode);
}
@ -148,8 +148,8 @@ void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void *data)
memFreePtr(pctxt, pNode);
}
}
DListNode* dListFindByIndex (DList* pList, int index)
DListNode* dListFindByIndex (DList* pList, int index)
{
DListNode* curNode;
int i;
@ -163,11 +163,11 @@ DListNode* dListFindByIndex (DList* pList, int index)
/* Insert item before given node */
DListNode* dListInsertBefore
DListNode* dListInsertBefore
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
{
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
if (0 != pListNode) {
pListNode->data = (void*)pData;
@ -212,7 +212,7 @@ DListNode* dListInsertBefore
/* Insert item after given node */
DListNode* dListInsertAfter
DListNode* dListInsertAfter
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
{
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
@ -258,4 +258,3 @@ DListNode* dListInsertAfter
return pListNode;
}

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file dlist.h
/**
* @file dlist.h
* Doubly-linked list structures and utility functions.
*/
#ifndef _OODLIST_H_
@ -74,26 +74,26 @@ extern "C" {
* @param pData A pointer to a data item to be appended to the list.
* @return A pointer to an allocated node structure used to link
* the given data value into the list.
*/
EXTERN DListNode* dListAppend
*/
EXTERN DListNode* dListAppend
(struct OOCTXT* pctxt, DList* pList, void* pData);
EXTERN DListNode* dListAppendNode
EXTERN DListNode* dListAppendNode
(struct OOCTXT* pctxt, DList* pList, void* pData);
/**
* This function delete the head item from the list and returns a pointer
* the data item stored in that node. The memory for the node structure
* This function delete the head item from the list and returns a pointer
* the data item stored in that node. The memory for the node structure
* is released.
*
* @param pctxt A pointer to a context structure. This provides a
* storage area for the function to store all working
* variables that must be maintained between function
* calls.
* @param pList A pointer to the linked list structure from which
* @param pList A pointer to the linked list structure from which
* the node will be deleted.
* @return A pointer to the data item stored in the deleted node.
*/
*/
EXTERN void* dListDeleteHead (struct OOCTXT* pctxt, DList* pList);
EXTERN DListNode* dListFindByIndex (DList* pList, int index);
@ -101,7 +101,7 @@ EXTERN DListNode* dListFindByIndex (DList* pList, int index);
/**
* This function initializes a doubly linked list structure. It sets the number
* of elements to zero and sets all internal pointer values to NULL. A doubly
* linked-list structure is described by the DList type. Nodes of the list
* linked-list structure is described by the DList type. Nodes of the list
* are of type DListNode.
*
* Memory for the structures is allocated using the memAlloc run-time
@ -130,7 +130,7 @@ EXTERN void dListInit (DList* pList);
*/
EXTERN void dListFreeNodes (struct OOCTXT* pctxt, DList* pList);
/**
/**
* This function removes all nodes from the linked list structure and releases
* the memory that was allocated for storing the node structures
* (DListNode) and for data. The memory for data in each node must have
@ -146,37 +146,37 @@ EXTERN void dListFreeNodes (struct OOCTXT* pctxt, DList* pList);
EXTERN void dListFreeAll (struct OOCTXT* pctxt, DList* pList);
/**
* This function inserts an item into the linked list structure before the
* This function inserts an item into the linked list structure before the
* specified element.
*
*
* @param pctxt Pointer to a context structure.
* @param pList A pointer to a linked list structure into which the
* @param pList A pointer to a linked list structure into which the
* data item is to be inserted.
* @param node The position in the list where the item is to be
* inserted. The item will be inserted before this
* @param node The position in the list where the item is to be
* inserted. The item will be inserted before this
* node or appended to the list if node is null.
* @param pData A pointer to the data item to be inserted to the list.
* @return A pointer to an allocated node structure used to
* @return A pointer to an allocated node structure used to
* link the given data value into the list.
*/
EXTERN DListNode* dListInsertBefore
EXTERN DListNode* dListInsertBefore
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
/**
* This function inserts an item into the linked list structure after the
* This function inserts an item into the linked list structure after the
* specified element.
*
*
* @param pctxt Pointer to a context structure.
* @param pList A pointer to a linked list structure into which the
* @param pList A pointer to a linked list structure into which the
* data item is to be inserted.
* @param node The position in the list where the item is to be
* inserted. The item will be inserted after this
* @param node The position in the list where the item is to be
* inserted. The item will be inserted after this
* node or added as the head element if node is null.
* @param pData A pointer to the data item to be inserted to the list.
* @return A pointer to an allocated node structure used to
* @return A pointer to an allocated node structure used to
* link the given data value into the list.
*/
EXTERN DListNode* dListInsertAfter
EXTERN DListNode* dListInsertAfter
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
/**
@ -194,7 +194,7 @@ EXTERN DListNode* dListInsertAfter
EXTERN void dListRemove (DList* pList, DListNode* node);
EXTERN void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void* data);
/**
/**
* @}
*/
#ifdef __cplusplus

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -20,7 +20,7 @@
#include "ooasn1.h"
static int encode16BitConstrainedString
static int encode16BitConstrainedString
(OOCTXT* pctxt, Asn116BitCharString value, Asn116BitCharSet* pCharSet);
static int encode2sCompBinInt (OOCTXT* pctxt, ASN1INT value);
@ -34,7 +34,7 @@ int encodeIdent (OOCTXT* pctxt, ASN1UINT ident);
int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
{
{
int stat = ASN_OK;
/* If start of new byte, init to zero */
@ -58,7 +58,7 @@ int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
/* Set single-bit value */
if (value) {
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
( 1 << pctxt->buffer.bitOffset );
}
@ -74,7 +74,7 @@ int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
}
int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
{
{
int nbytes = (nbits + 7)/ 8, stat = ASN_OK;
if (nbits == 0) return stat;
@ -94,7 +94,7 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
if (nbits < (unsigned)pctxt->buffer.bitOffset) {
pctxt->buffer.bitOffset -= nbits;
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
( value << pctxt->buffer.bitOffset );
return stat;
}
@ -108,22 +108,22 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
/* to set bits in subsequent bytes.. */
nbits -= pctxt->buffer.bitOffset;
pctxt->buffer.data[pctxt->buffer.byteIndex++] |=
pctxt->buffer.data[pctxt->buffer.byteIndex++] |=
(ASN1OCTET)( value >> nbits );
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
while (nbits >= 8) {
nbits -= 8;
pctxt->buffer.data[pctxt->buffer.byteIndex++] =
pctxt->buffer.data[pctxt->buffer.byteIndex++] =
(ASN1OCTET)( value >> nbits );
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
}
/* copy final partial byte */
pctxt->buffer.bitOffset = 8 - nbits;
if (nbits > 0) {
pctxt->buffer.data[pctxt->buffer.byteIndex] =
pctxt->buffer.data[pctxt->buffer.byteIndex] =
(ASN1OCTET)((value & ((1 << nbits)-1)) << pctxt->buffer.bitOffset);
}
else
@ -133,11 +133,11 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
}
int encodeBitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
{
{
int lshift = pctxt->buffer.bitOffset;
int rshift = 8 - pctxt->buffer.bitOffset;
int stat = ASN_OK;
ASN1OCTET mask = 0x0;
ASN1OCTET mask = 0x0;
if (nbits == 0) return ASN_OK;
@ -173,14 +173,14 @@ int encodeBitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
/* possibly some bits in the following octet.. */
else {
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
(ASN1OCTET)(value >> rshift);
pctxt->buffer.bitOffset -= nbits;
if (pctxt->buffer.bitOffset < 0) {
pctxt->buffer.byteIndex++;
pctxt->buffer.data[pctxt->buffer.byteIndex] =
pctxt->buffer.data[pctxt->buffer.byteIndex] =
(ASN1OCTET)(value << lshift);
pctxt->buffer.bitOffset += 8;
}
@ -202,7 +202,7 @@ int encodeBitString (OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data)
if (enclen > 0) {
ASN1BOOL doAlign;
stat = bitAndOctetStringAlignmentTest
stat = bitAndOctetStringAlignmentTest
(pSizeList, numbits, TRUE, &doAlign);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -225,7 +225,7 @@ int encodeBitString (OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data)
return ASN_OK;
}
int encodeBMPString
int encodeBMPString
(OOCTXT* pctxt, ASN1BMPString value, Asn116BitCharSet* permCharSet)
{
Asn116BitCharSet charSet;
@ -278,9 +278,9 @@ int encodeCheckBuffer (OOCTXT* pctxt, ASN1UINT nbytes)
return (stat);
}
int encodeConsInteger
int encodeConsInteger
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower, ASN1INT upper)
{
{
ASN1UINT range_value;
ASN1UINT adjusted_value;
int stat;
@ -301,7 +301,7 @@ int encodeConsInteger
else {
range_value = upper + abs(lower);
adjusted_value = value + abs(lower);
}
}
if (range_value != ASN1UINT_MAX) { range_value += 1; }
@ -316,9 +316,9 @@ int encodeConsInteger
return stat;
}
int encodeConsUnsigned
int encodeConsUnsigned
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower, ASN1UINT upper)
{
{
ASN1UINT range_value;
ASN1UINT adjusted_value;
int stat;
@ -340,9 +340,9 @@ int encodeConsUnsigned
return stat;
}
int encodeConsWholeNumber
int encodeConsWholeNumber
(OOCTXT* pctxt, ASN1UINT adjusted_value, ASN1UINT range_value)
{
{
ASN1UINT nocts, range_bitcnt = getUIntBitCount (range_value - 1);
int stat;
@ -396,8 +396,8 @@ int encodeConsWholeNumber
}
}
int encodeConstrainedStringEx (OOCTXT* pctxt,
const char* string,
int encodeConstrainedStringEx (OOCTXT* pctxt,
const char* string,
const char* charSet,
ASN1UINT abits, /* aligned char bits */
ASN1UINT ubits, /* unaligned char bits */
@ -460,7 +460,7 @@ int encodeExpandBuffer (OOCTXT* pctxt, ASN1UINT nbytes)
pctxt->buffer.data = (ASN1OCTET*) memHeapRealloc
(&pctxt->pMsgMemHeap, pctxt->buffer.data, pctxt->buffer.size);
if (!pctxt->buffer.data) return (ASN_E_NOMEM);
return (ASN_OK);
@ -481,7 +481,7 @@ ASN1OCTET* encodeGetMsgPtr (OOCTXT* pctxt, int* pLength)
return pctxt->buffer.data;
}
int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
{
ASN1UINT mask;
int nshifts = 0, stat;
@ -508,9 +508,9 @@ int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
}
int encodeLength (OOCTXT* pctxt, ASN1UINT value)
{
{
ASN1BOOL extendable;
Asn1SizeCnst* pSize =
Asn1SizeCnst* pSize =
checkSize (pctxt->pSizeConstraint, value, &extendable);
ASN1UINT lower = (pSize) ? pSize->lower : 0;
ASN1UINT upper = (pSize) ? pSize->upper : ASN1UINT_MAX;
@ -520,7 +520,7 @@ int encodeLength (OOCTXT* pctxt, ASN1UINT value)
/* within the range of any of them, signal constraint violation */
/* error.. */
if (pctxt->pSizeConstraint && !pSize)
if (pctxt->pSizeConstraint && !pSize)
return LOG_ASN1ERR (pctxt, ASN_E_CONSVIO);
/* Reset the size constraint in the context block structure */
@ -578,11 +578,11 @@ int encodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
if (0 == pvalue) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
if (numids < 2) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
if (pvalue->subid[0] > 2) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
if (pvalue->subid[0] != 2 && pvalue->subid[1] > 39)
if (pvalue->subid[0] != 2 && pvalue->subid[1] > 39)
return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
/* Passed checks, encode object identifier */
/* Munge first two sub ID's and encode */
temp = ((pvalue->subid[0] * 40) + pvalue->subid[1]);
@ -600,7 +600,7 @@ int encodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
}
int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
{
{
int lshift = pctxt->buffer.bitOffset;
int rshift = 8 - pctxt->buffer.bitOffset;
int stat = ASN_OK;
@ -640,14 +640,14 @@ int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
/* possibly some bits in the following octet.. */
else {
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
(ASN1OCTET)(value >> rshift);
pctxt->buffer.bitOffset -= nbits;
if (pctxt->buffer.bitOffset < 0) {
pctxt->buffer.byteIndex++;
pctxt->buffer.data[pctxt->buffer.byteIndex] =
pctxt->buffer.data[pctxt->buffer.byteIndex] =
(ASN1OCTET)(value << lshift);
pctxt->buffer.bitOffset += 8;
}
@ -657,7 +657,7 @@ int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
}
int encodeOctets (OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits)
{
{
int i = 0, stat;
int numFullOcts = nbits / 8;
@ -675,7 +675,7 @@ int encodeOctets (OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits)
/* encode buffer.. */
if (pctxt->buffer.bitOffset == 8) {
memcpy (&pctxt->buffer.data[pctxt->buffer.byteIndex], pvalue,
memcpy (&pctxt->buffer.data[pctxt->buffer.byteIndex], pvalue,
numFullOcts);
pctxt->buffer.byteIndex += numFullOcts;
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
@ -714,7 +714,7 @@ int encodeOctetString (OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data)
if (enclen > 0) {
ASN1BOOL doAlign;
stat = bitAndOctetStringAlignmentTest
stat = bitAndOctetStringAlignmentTest
(pSizeList, numocts, FALSE, &doAlign);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -793,7 +793,7 @@ int encodeOpenTypeExt (OOCTXT* pctxt, DList* pElemList)
stat = encodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = encodeOpenType
stat = encodeOpenType
(pctxt, pOpenType->numocts, pOpenType->data);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
@ -833,7 +833,7 @@ int encodeSemiConsInteger (OOCTXT* pctxt, ASN1INT value, ASN1INT lower)
if (lower > ASN1INT_MIN)
value -= lower;
/* Calculate signed number value length */
for ( ; shift > 0; shift -= 8) {
@ -889,10 +889,10 @@ int encodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower)
if ((stat = encodeLength (pctxt, nbytes)) < 0) {
return stat;
}
if ((stat = encodeByteAlign (pctxt)) != ASN_OK)
return stat;
/* Encode additional zero byte if necessary */
if (nbytes > sizeof(value)) {
@ -908,7 +908,7 @@ int encodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower)
}
int encodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT value)
{
{
int stat;
if (value < 64) {
@ -964,7 +964,7 @@ int encodeVarWidthCharString (OOCTXT* pctxt, const char* value)
return ASN_OK;
}
static int encode16BitConstrainedString
static int encode16BitConstrainedString
(OOCTXT* pctxt, Asn116BitCharString value, Asn116BitCharSet* pCharSet)
{
ASN1UINT i, pos;
@ -985,7 +985,7 @@ static int encode16BitConstrainedString
for (i = 0; i < value.nchars; i++) {
if (pCharSet->charSet.data == 0) {
stat = encodeBits
stat = encodeBits
(pctxt, value.data[i] - pCharSet->firstChar, nbits);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
@ -1051,7 +1051,7 @@ static int encodeNonNegBinInt (OOCTXT* pctxt, ASN1UINT value)
/* multiple of 8 bits and also satisifies the condition that the */
/* leading eight bits of the field shall not be zero unless the */
/* field is precisely 8 bits long. */
ASN1UINT bitcnt = (value == 0) ? 1 : getUIntBitCount (value);
/* round-up to nearest 8-bit boundary */
@ -1093,7 +1093,7 @@ static int encodeUnconsLength (OOCTXT* pctxt, ASN1UINT value)
return enclen;
}
static int getIdentByteCount (ASN1UINT ident)
static int getIdentByteCount (ASN1UINT ident)
{
if (ident < (1u << 7)) { /* 7 */
return 1;

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -48,21 +48,21 @@ static const char* g_status_text[] = {
"Value constraint violation: field %s, value %s",
"Value range error: lower bound is greater than upper",
"Unexpected end of file detected",
"Invalid UTF-8 character at index %d",
"List error: concurrent modification attempt while iterating",
"Invalid UTF-8 character at index %d",
"List error: concurrent modification attempt while iterating",
"List error: illegal state for attempted operation",
"Array index out of bounds",
"Invalid parameter passed to function or method",
"Invalid time string format",
"Context is not initialized",
"ASN.1 value will not fit in target variable",
"Character is not within the defined character set",
"Invalid XML state for attempted operation",
"Error condition returned from XML parser:\n%s",
"Context is not initialized",
"ASN.1 value will not fit in target variable",
"Character is not within the defined character set",
"Invalid XML state for attempted operation",
"Error condition returned from XML parser:\n%s",
"SEQUENCE elements not in correct order",
"Invalid index for table constraint identifier",
"Invalid value for relational table constraint fixed type field",
"File not found",
"Invalid value for relational table constraint fixed type field",
"File not found",
"File read error",
"File write error",
"Invalid Base64 string",
@ -152,7 +152,7 @@ char* errFmtMsg (ASN1ErrInfo* pErrInfo, char* bufp)
j = pcnt = 0;
tp = g_status_text[i];
while (*tp)
while (*tp)
{
if (*tp == '%' && *(tp+1) == 's')
{
@ -176,14 +176,14 @@ char* errFmtMsg (ASN1ErrInfo* pErrInfo, char* bufp)
}
else
strcpy (bufp, "unrecognized completion status");
}
}
else strcpy (bufp, "normal completion status");
return (bufp);
}
/* Get error text in a dynamic memory buffer. This allocates memory */
/* using the 'memAlloc' function. This memory is automatically freed */
/* using the 'memAlloc' function. This memory is automatically freed */
/* at the time the 'memFree' function is called. */
char* errGetText (OOCTXT* pctxt)
@ -198,7 +198,7 @@ char* errGetText (OOCTXT* pctxt)
while (pctxt->errInfo.stkx > 0) {
pctxt->errInfo.stkx--;
sprintf (lbuf, " Module: %s, Line %d\n",
sprintf (lbuf, " Module: %s, Line %d\n",
pctxt->errInfo.stack[pctxt->errInfo.stkx].module,
pctxt->errInfo.stack[pctxt->errInfo.stkx].lineno);
strcat(pBuf, lbuf);
@ -219,7 +219,7 @@ void errPrint (ASN1ErrInfo* pErrInfo)
printf ("Stack trace:");
while (pErrInfo->stkx > 0) {
pErrInfo->stkx--;
printf (" Module: %s, Line %d\n",
printf (" Module: %s, Line %d\n",
pErrInfo->stack[pErrInfo->stkx].module,
pErrInfo->stack[pErrInfo->stkx].lineno);
}
@ -243,9 +243,9 @@ int errCopyData (ASN1ErrInfo* pSrcErrInfo, ASN1ErrInfo* pDestErrInfo)
for (i = 0; i < pSrcErrInfo->stkx; i++) {
if (pDestErrInfo->stkx < ASN_K_MAXERRSTK) {
pDestErrInfo->stack[pDestErrInfo->stkx].module =
pDestErrInfo->stack[pDestErrInfo->stkx].module =
pSrcErrInfo->stack[i].module;
pDestErrInfo->stack[pDestErrInfo->stkx++].lineno =
pDestErrInfo->stack[pDestErrInfo->stkx++].lineno =
pSrcErrInfo->stack[i].lineno;
}
}
@ -254,12 +254,12 @@ int errCopyData (ASN1ErrInfo* pSrcErrInfo, ASN1ErrInfo* pDestErrInfo)
}
int errSetData (ASN1ErrInfo* pErrInfo, int status,
const char* module, int lno)
{
int errSetData (ASN1ErrInfo* pErrInfo, int status,
const char* module, int lno)
{
if (pErrInfo->status == 0) {
pErrInfo->status = status;
}
ooLogAsn1Error(status, module, lno);
return status;
return status;
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -64,7 +64,7 @@ void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value)
}
}
void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
const ASN1OCTET* data)
{
if (0 != pctxt->pEventHandler) {
@ -72,7 +72,7 @@ void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
}
}
void invokeOctStrValue (OOCTXT* pctxt, ASN1UINT numocts,
void invokeOctStrValue (OOCTXT* pctxt, ASN1UINT numocts,
const ASN1OCTET* data)
{
if (0 != pctxt->pEventHandler) {
@ -87,7 +87,7 @@ void invokeCharStrValue (OOCTXT* pctxt, const char* value)
}
}
void invokeCharStr16BitValue (OOCTXT* pctxt, ASN1UINT nchars,
void invokeCharStr16BitValue (OOCTXT* pctxt, ASN1UINT nchars,
ASN116BITCHAR* data)
{
if (0 != pctxt->pEventHandler) {
@ -116,7 +116,7 @@ void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value)
}
}
void invokeOpenTypeValue (OOCTXT* pctxt, ASN1UINT numocts,
void invokeOpenTypeValue (OOCTXT* pctxt, ASN1UINT numocts,
const ASN1OCTET* data)
{
if (0 != pctxt->pEventHandler) {

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file eventHandler.h
* C event handler structure. This structure holds event handler function
* @file eventHandler.h
* C event handler structure. This structure holds event handler function
* callbacks for use by the generated code.
*/
/**
@ -44,8 +44,8 @@ extern "C" {
/**
* This is a function pointer for a callback function which is invoked
* from within a decode function when an element of a SEQUENCE, SET,
* This is a function pointer for a callback function which is invoked
* from within a decode function when an element of a SEQUENCE, SET,
* SEQUENCE OF, SET OF, or CHOICE construct is parsed.
*
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
@ -63,8 +63,8 @@ typedef void (*StartElement) (const char* name, int index) ;
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function when parsing is complete on an element of a
* This is a function pointer for a callback function which is invoked from
* within a decode function when parsing is complete on an element of a
* SEQUENCE, SET, SEQUENCE OF, SET OF, or CHOICE construct.
*
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
@ -82,7 +82,7 @@ typedef void (*EndElement) (const char* name, int index) ;
/**
* This is a function pointer for a callback function which is invoked from
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the BOOLEAN ASN.1 type is parsed.
*
* @param value Parsed value.
@ -91,7 +91,7 @@ typedef void (*EndElement) (const char* name, int index) ;
typedef void (*BoolValue) (ASN1BOOL value);
/**
* This is a function pointer for a callback function which is invoked from
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the INTERGER ASN.1 type is parsed.
*
* @param value Parsed value.
@ -100,9 +100,9 @@ typedef void (*BoolValue) (ASN1BOOL value);
typedef void (*IntValue) (ASN1INT value);
/**
* This is a function pointer for a callback function which is invoked
* from within a decode function when a value of the INTEGER ASN.1 type
* is parsed. In this case, constraints on the integer value forced the
* This is a function pointer for a callback function which is invoked
* from within a decode function when a value of the INTEGER ASN.1 type
* is parsed. In this case, constraints on the integer value forced the
* use of unsigned integer C type to represent the value.
*
* @param value Parsed value.
@ -111,19 +111,19 @@ typedef void (*IntValue) (ASN1INT value);
typedef void (*UIntValue) (ASN1UINT value);
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the BIT STRING ASN.1 type is
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the BIT STRING ASN.1 type is
* parsed.
*
* @param numbits - Number of bits in the parsed value.
* @param data - Pointer to a byte array that contains the bit
* @param numbits - Number of bits in the parsed value.
* @param data - Pointer to a byte array that contains the bit
* string data.
* @return - none
*/
*/
typedef void (*BitStrValue) (ASN1UINT numbits, const ASN1OCTET* data);
/**
* This is a function pointer for a callback function which is invoked from
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of one of the OCTET STRING ASN.1 type
* is parsed.
*
@ -135,8 +135,8 @@ typedef void (*BitStrValue) (ASN1UINT numbits, const ASN1OCTET* data);
typedef void (*OctStrValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of one of the 8-bit ASN.1 character
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of one of the 8-bit ASN.1 character
* string types is parsed.
*
* @param value Null terminated character string value.
@ -145,8 +145,8 @@ typedef void (*OctStrValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
typedef void (*CharStrValue) (const char* value) ;
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of one of the 16-bit ASN.1 character
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of one of the 16-bit ASN.1 character
* string types is parsed.
*
* This is used for the ASN.1 BmpString type.
@ -160,7 +160,7 @@ typedef void (*CharStrValue) (const char* value) ;
typedef void (*CharStrValue16Bit) (ASN1UINT nchars, ASN116BITCHAR* data) ;
/**
* This is a function pointer for a callback function which is invoked from
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the NULL ASN.1 type is parsed.
*
* @param - none
@ -169,8 +169,8 @@ typedef void (*CharStrValue16Bit) (ASN1UINT nchars, ASN116BITCHAR* data) ;
typedef void (*NullValue) (void) ;
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function whn a value the OBJECT IDENTIFIER ASN.1 type is
* This is a function pointer for a callback function which is invoked from
* within a decode function whn a value the OBJECT IDENTIFIER ASN.1 type is
* parsed.
*
* @param numSubIds Number of subidentifiers in the object identifier.
@ -180,8 +180,8 @@ typedef void (*NullValue) (void) ;
typedef void (*OidValue) (ASN1UINT numSubIds, ASN1UINT* pSubIds) ;
/**
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the ENUMERATED ASN.1 type is
* This is a function pointer for a callback function which is invoked from
* within a decode function when a value of the ENUMERATED ASN.1 type is
* parsed.
*
* @param value - Parsed enumerated value
@ -190,7 +190,7 @@ typedef void (*OidValue) (ASN1UINT numSubIds, ASN1UINT* pSubIds) ;
typedef void (*EnumValue) (ASN1UINT value) ;
/**
* This is a function pointer for a callback function which is invoked from
* This is a function pointer for a callback function which is invoked from
* within a decode function when an ASN.1 open type is parsed.
*
* @param numocts Number of octets in the parsed value.
@ -223,7 +223,7 @@ typedef struct EventHandler {
/**
* This function sets the event handler object within the context. It
* This function sets the event handler object within the context. It
* will overwrite the definition of any handler that was set previously.
*
* @param pctxt Context to which event handler has to be added.
@ -233,8 +233,8 @@ typedef struct EventHandler {
EXTERN void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler);
/**
* This function is called to remove the event handler current defined
* in the context. This is done by setting the event handler object
* This function is called to remove the event handler current defined
* in the context. This is done by setting the event handler object
* pointer to NULL.
*
* @param pctxt Context from which event handler has to be removed.
@ -243,7 +243,7 @@ EXTERN void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler);
EXTERN void removeEventHandler (OOCTXT* pctxt);
/**
* The following functions are invoked from within the generated
* The following functions are invoked from within the generated
* code to call the various user-defined event handler methods ..
*/
EXTERN void invokeStartElement (OOCTXT* pctxt, const char* name, int index);
@ -252,33 +252,33 @@ EXTERN void invokeBoolValue (OOCTXT* pctxt, ASN1BOOL value);
EXTERN void invokeIntValue (OOCTXT* pctxt, ASN1INT value);
EXTERN void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value);
EXTERN void invokeBitStrValue
EXTERN void invokeBitStrValue
(OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data);
EXTERN void invokeOctStrValue
EXTERN void invokeOctStrValue
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
EXTERN void invokeCharStrValue (OOCTXT* pctxt, const char* value);
EXTERN void invokeCharStr16BitValue
EXTERN void invokeCharStr16BitValue
(OOCTXT* pctxt, ASN1UINT nchars, ASN116BITCHAR* data);
EXTERN void invokeNullValue (OOCTXT* pctxt);
EXTERN void invokeOidValue
EXTERN void invokeOidValue
(OOCTXT* pctxt, ASN1UINT numSubIds, ASN1UINT* pSubIds);
EXTERN void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value);
EXTERN void invokeOpenTypeValue
EXTERN void invokeOpenTypeValue
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif
#endif

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -1797,4 +1797,3 @@ EXTERN int asn1PD_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue)
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -1266,4 +1266,3 @@ EXTERN int asn1PE_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue)
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -109,4 +109,3 @@ EXTERN const char* gs_H323_MESSAGES_GSM_UIM_vplmn_CharSet =
EXTERN const char* gs_H323_MESSAGES_AliasAddress_dialedDigits_CharSet =
"#*,0123456789";

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -27197,4 +27197,3 @@ EXTERN int asn1PD_H225RasMessage (OOCTXT* pctxt, H225RasMessage* pvalue)
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -22593,4 +22593,3 @@ EXTERN int asn1PE_H225RasMessage (OOCTXT* pctxt, H225RasMessage* pvalue)
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -37,4 +37,3 @@ EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_NetworkAccessParameters_networkA
EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_UserInputIndication_signal_signalType_CharSet =
"!#*0123456789ABCD";

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -42167,4 +42167,3 @@ EXTERN int asn1PD_H245MultimediaSystemControlMessage (OOCTXT* pctxt, H245Multime
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -26596,4 +26596,3 @@ EXTERN int asn1PE_H245MultimediaSystemControlMessage (OOCTXT* pctxt, H245Multime
return (stat);
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2004 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -20,7 +20,7 @@
ASN1UINT g_defBlkSize = XM_K_MEMBLKSIZ;
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
void* pMemBlk, int blockType);
typedef void OSMemElemDescr;
@ -109,39 +109,39 @@ pMemBlk->freeElemOff = (ASN1USINT)(QOFFSETOF (pElem, pMemBlk->data) + 1); \
#define SET_FREE_ELEM(pMemBlk, pElem) setLastElem (pMemBlk, pElem)
/* Memory debugging macros */
#define RTMEMDIAG1(msg)
#define RTMEMDIAG2(msg,a)
#define RTMEMDIAG1(msg)
#define RTMEMDIAG2(msg,a)
#define RTMEMDIAG3(msg,a,b)
#define RTMEMDIAG4(msg,a,b,c)
#define FILLFREEMEM(mem,size)
#define FILLNEWMEM(mem,size)
#define FILLNEWMEM(mem,size)
#define CHECKMEMELEM(memblk,elem)
#define CHECKMEMBLOCK(memheap,memblk)
#define CHECKMEMHEAP(memheap)
#define CHECKMEMHEAP(memheap)
#define TRACEMEMELEM(memblk, elem, name)
#define TRACEFREE(memlink,name)
static void setLastElem (OSMemBlk* pMemBlk, OSMemElemDescr* pElem)
static void setLastElem (OSMemBlk* pMemBlk, OSMemElemDescr* pElem)
{
if (pElem == 0) {
pMemBlk->freeElemOff = 0;
return;
if (pElem == 0) {
pMemBlk->freeElemOff = 0;
return;
}
else if (ISLAST (pElem))
return;
else if (ISLAST (pElem))
return;
else if (pMemBlk->freeElemOff > QOFFSETOF (pElem, pMemBlk->data) + 1) {
pElem_nextFreeOff (pElem) = QOFFSETOF (GET_FREE_ELEM (pMemBlk), pElem);
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
}
else if (pMemBlk->freeElemOff == 0) {
pElem_nextFreeOff (pElem) = 0;
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
}
else {
SET_FREE (pElem);
pElem_nextFreeOff (pElem) = 0;
pElem_nextFreeOff (pElem) = QOFFSETOF (GET_FREE_ELEM (pMemBlk), pElem);
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
}
else if (pMemBlk->freeElemOff == 0) {
pElem_nextFreeOff (pElem) = 0;
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
}
else {
SET_FREE (pElem);
pElem_nextFreeOff (pElem) = 0;
}
}
@ -170,7 +170,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
ppMemLink = &pMemHeap->phead;
/* if size is greater than 2**19, then allocate as RAW block */
if (nunits > (1<<16) - 2) {
void *data;
@ -188,9 +188,9 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
/* save size of the RAW memory block behind the pMemLink */
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = nbytes;
ast_mutex_unlock(&pMemHeap->pLock);
return data;
return data;
}
RTMEMDIAG2 ("memHeapAlloc: adjusted nbytes = %d\n", nbytes);
/* Try to allocate a slot from an existing block on the list */
@ -216,26 +216,26 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
pElem_flags (pElem) = 0;
if (pMemBlk->lastElemOff != 0)
pElem_prevOff (pElem) =
pElem_prevOff (pElem) =
(ASN1USINT)(pMemBlk->free_x - pMemBlk->lastElemOff + 1);
else
else
pElem_prevOff (pElem) = 0;
pPrevElem = GET_LAST_ELEM (pMemBlk);
if (pPrevElem != 0)
CLEAR_LAST (pPrevElem);
pElem_nunits (pElem) = (ASN1USINT)nunits;
pElem_nunits (pElem) = (ASN1USINT)nunits;
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
pMemBlk->lastElemOff = (ASN1USINT)(pMemBlk->free_x + 1);
mem_p = (void*) (pElem_data (pElem));
/* sizeof (OSMemElemDescr) == 1 unit */
pMemBlk->free_x += nunits + 1;
pMemBlk->free_x += nunits + 1;
SET_LAST_ELEM (pMemBlk, pElem);
FILLNEWMEM (mem_p, nunits * 8u);
TRACEMEMELEM(pMemBlk, pElem, "Allocated");
CHECKMEMELEM (pMemBlk, pElem);
@ -249,54 +249,54 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
if (0 == mem_p) {
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnext) {
if (pMemLink->blockType & RTMEMRAW) continue;
pMemBlk = (OSMemBlk*) pMemLink->pMemBlk;
if (nunits <= (ASN1UINT)pMemBlk->freeMem) {
OSMemElemDescr* pElem = GET_FREE_ELEM(pMemBlk), *pPrevFree = 0;
RTMEMDIAG2
("memHeapAlloc: try to reuse empty elems in pMemBlk = 0x%x...\n",
RTMEMDIAG2
("memHeapAlloc: try to reuse empty elems in pMemBlk = 0x%x...\n",
pMemBlk);
while (pElem != 0) {
if (ISFREE (pElem)) {
if (ISFREE (pElem)) {
if (nunits <= (ASN1UINT)pElem_nunits (pElem)) {
RTMEMDIAG3
RTMEMDIAG3
("memHeapAlloc: "
"found an exisiting free element 0x%x, size %d\n",
"found an exisiting free element 0x%x, size %d\n",
pElem, (pElem_nunits (pElem) * 8u));
if (pMemBlk->freeElemOff ==
QOFFSETOF (pElem, pMemBlk->data) + 1)
if (pMemBlk->freeElemOff ==
QOFFSETOF (pElem, pMemBlk->data) + 1)
{
/* modify the pMemBlk->freeElemOff value if necsry */
OSMemElemDescr* nextFree = GET_NEXT_FREE (pElem);
FORCE_SET_FREE_ELEM (pMemBlk, nextFree);
FORCE_SET_FREE_ELEM (pMemBlk, nextFree);
}
else if (pPrevFree != 0) {
OSMemElemDescr* pNextFree = GET_NEXT_FREE (pElem);
if (pNextFree != 0)
pElem_nextFreeOff (pPrevFree) = QOFFSETOF (pNextFree,
pElem_nextFreeOff (pPrevFree) = QOFFSETOF (pNextFree,
pPrevFree);
else
pElem_nextFreeOff (pPrevFree) = 0;
}
}
CLEAR_FREE (pElem);
/* set beginOff value */
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
pMemBlk->freeMem -= pElem_nunits (pElem);
CHECKMEMELEM (pMemBlk, pElem);
CHECKMEMBLOCK (pMemHeap, pMemBlk);
mem_p = memHeapRealloc
mem_p = memHeapRealloc
(ppvMemHeap, pElem_data (pElem), nunits * 8u);
if (mem_p != 0) {
FILLNEWMEM (mem_p, nunits * 8u);
@ -310,7 +310,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
}
if (mem_p != 0) break;
}
}
}
}
/* If not successful, malloc a new block and alloc from it */
@ -322,16 +322,16 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
RTMEMDIAG1 ("memHeapAlloc: alloc block..\n");
allocSize = (ASN1UINT) ((((ASN1UINT)nunits) * 8u) +
allocSize = (ASN1UINT) ((((ASN1UINT)nunits) * 8u) +
sizeof (OSMemBlk) + sizeof_OSMemElemDescr);
allocSize = (ASN1UINT) (allocSize < defBlkSize) ? defBlkSize :
allocSize = (ASN1UINT) (allocSize < defBlkSize) ? defBlkSize :
((allocSize + defBlkSize - 1) / defBlkSize * defBlkSize);
dataUnits = (ASN1UINT)((allocSize - sizeof (OSMemBlk)) >> 3u);
if (dataUnits >= (1u<<16)) {
dataUnits = (ASN1UINT)((1u<<16) - 1);
allocSize = (ASN1UINT)
((((ASN1UINT)dataUnits) * 8u) + sizeof (OSMemBlk));
}
}
pmem = (ASN1OCTET*) malloc (allocSize + sizeof (OSMemLink));
if (0 != pmem) {
@ -347,7 +347,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
/* sizeof (OSMemElemDescr) == 1 unit */
pMemBlk->free_x = (ASN1USINT)(nunits + 1);
pMemBlk->free_x = (ASN1USINT)(nunits + 1);
pMemBlk->freeMem = 0;
pMemBlk->nunits = (ASN1USINT)dataUnits;
@ -355,7 +355,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
pMemBlk->freeElemOff = 0;
pMemBlk->nsaved = 0;
if (memHeapAddBlock (ppMemLink, pMemBlk, RTMEMSTD | RTMEMLINK) == 0)
if (memHeapAddBlock (ppMemLink, pMemBlk, RTMEMSTD | RTMEMLINK) == 0)
{
free (pmem);
ast_mutex_unlock(&pMemHeap->pLock);
@ -378,7 +378,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
}
RTMEMDIAG2 ("memHeapAlloc: pMemBlk = 0x%x\n", pMemBlk);
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->free_x = %d\n", pMemBlk->free_x);
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->size = %d\n",
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->size = %d\n",
pMemBlk->nunits * 8u);
RTMEMDIAG2 ("memHeapAlloc: mem_p = 0x%x\n", mem_p);
RTMEMDIAG2 ("memHeapAlloc: sizeof (short) = %d\n", sizeof(short));
@ -394,7 +394,7 @@ void* memHeapAllocZ (void** ppvMemHeap, int nbytes)
return ptr;
}
void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
{
OSMemHeap* pMemHeap;
OSMemLink** ppMemLink;
@ -416,7 +416,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
if ((pMemLink->blockType & RTMEMRAW) &&
pMemLink->pMemBlk == mem_p)
pMemLink->pMemBlk == mem_p)
{
if(pMemLink->pnext != 0) {
pMemLink->pnext->pprev = pMemLink->pprev;
@ -429,12 +429,12 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
}
if (pPrevMemLink != 0)
pPrevMemLink->pnextRaw = pMemLink->pnextRaw;
else if (*ppMemLink != 0 && (*ppMemLink)->pnextRaw == 0 &&
else if (*ppMemLink != 0 && (*ppMemLink)->pnextRaw == 0 &&
*ppMemLink != pMemLink->pnextRaw)
{
(*ppMemLink)->pnextRaw = pMemLink->pnextRaw;
}
if ((pMemLink->blockType & RTMEMLINK) &&
if ((pMemLink->blockType & RTMEMLINK) &&
(pMemLink->blockType & RTMEMMALLOC))
{
free (pMemLink);
@ -460,7 +460,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
RTMEMDIAG2 ("memHeapFreePtr: "
"the element 0x%x is already freed!\n", pElem);
ast_mutex_unlock(&pMemHeap->pLock);
return;
return;
}
if (ISSAVED (pElem)) {
@ -474,17 +474,17 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
CHECKMEMBLOCK(pMemHeap, pMemBlk);
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x\n", pMemBlk);
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->size = %d\n",
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->size = %d\n",
pMemBlk->nunits * 8u);
if (ISLAST (pElem)) { /* is it the last? */
OSMemElemDescr* pPrevElem = GETPREV (pElem);
CHECKMEMELEM (pMemBlk, pPrevElem);
pMemBlk->free_x -= (pElem_nunits (pElem) + 1);
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
(pElem_nunits (pElem) + 1) * 8u);
if (pPrevElem != 0 && ISFREE (pPrevElem)) {
@ -493,10 +493,10 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
pMemBlk->free_x -= (pElem_nunits (pPrevElem) + 1);
pMemBlk->freeMem -= pElem_nunits (pPrevElem);
SET_LAST_ELEM (pMemBlk, GETPREV (pPrevElem));
/* wasn't it the last elem in block? */
if (pMemBlk->lastElemOff != 0) {
if (pMemBlk->lastElemOff != 0) {
/* correct nextFreeOff for previous free element */
pFreeElem = GET_FREE_ELEM (pMemBlk);
@ -505,7 +505,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
}
else {
OSMemElemDescr* pNextFree = 0;
while (pFreeElem < pPrevElem) {
pNextFree = pFreeElem;
pFreeElem = GET_NEXT_FREE (pFreeElem);
@ -518,15 +518,15 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
SET_LAST_ELEM (pMemBlk, pPrevElem);
}
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->free_x = %d\n",
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->free_x = %d\n",
pMemBlk->free_x);
/* The question is: do we really want to get rid of the */
/* block or should we keep it around for reuse? */
if (pMemBlk->lastElemOff == 0) { /* was it the last elem in block? */
if ((pMemHeap->flags & RT_MH_DONTKEEPFREE) ||
(pMemHeap->keepFreeUnits > 0 &&
(pMemHeap->keepFreeUnits > 0 &&
pMemHeap->freeUnits + pMemBlk->nunits > pMemHeap->keepFreeUnits))
{
ASN1OCTET blockType = pMemBlk->plink->blockType;
@ -543,7 +543,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
pMemBlk->plink->pprev->pnext = pMemBlk->plink->pnext;
}
else { /* head */
if (pMemBlk->plink->pnext != 0 &&
if (pMemBlk->plink->pnext != 0 &&
!(pMemBlk->plink->pnext->blockType & RTMEMRAW))
{
pMemBlk->plink->pnext->pnextRaw = (*ppMemLink)->pnextRaw;
@ -552,14 +552,14 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
}
FILLFREEMEM (pMemBlk->plink, sizeof (*pMemBlk->plink));
FILLFREEMEM (pMemBlk->data, (pMemBlk->nunits * 8u));
free (pMemBlk->plink);
if (!(blockType & RTMEMLINK)) {
FILLFREEMEM (pMemBlk, sizeof (*pMemBlk));
free (pMemBlk);
}
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x was freed\n",
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x was freed\n",
pMemBlk);
}
else {
@ -575,7 +575,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
}
else {
SET_LAST (GET_LAST_ELEM (pMemBlk));
FILLFREEMEM (((char*) &pMemBlk->data[0]) + (pMemBlk->free_x * 8u),
FILLFREEMEM (((char*) &pMemBlk->data[0]) + (pMemBlk->free_x * 8u),
(pMemBlk->nunits - pMemBlk->free_x) * 8u);
CHECKMEMBLOCK (pMemHeap, pMemBlk);
}
@ -586,25 +586,25 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
SET_FREE_ELEM(pMemBlk, pElem);
pMemBlk->freeMem += pElem_nunits (pElem);
RTMEMDIAG2 ("memHeapFreePtr: element 0x%x marked as free.\n",
RTMEMDIAG2 ("memHeapFreePtr: element 0x%x marked as free.\n",
pElem);
/* try to unite free blocks, if possible */
if (!ISFIRST (pElem)) {
if (ISFREE (GETPREV (pElem))) {
OSMemElemDescr* prevelem_p = GETPREV (pElem);
/* +1 because the OSMemElemDescr has size ONE unit (8 bytes) */
pElem_nunits (prevelem_p) += pElem_nunits (pElem) + 1;
pElem_nunits (prevelem_p) += pElem_nunits (pElem) + 1;
pElem = prevelem_p;
pMemBlk->freeMem ++; /* sizeof (OSMemElemDescr) == 1 unit */
}
else {
/* look for nearest previous free block to correct nextFreeOff */
OSMemElemDescr* prevelem_p = pElem;
do {
prevelem_p = GETPREV (prevelem_p);
}
@ -612,32 +612,32 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
if (prevelem_p != 0) {
OSMemElemDescr* pNextFree = GET_NEXT_FREE (prevelem_p);
if (pNextFree != 0)
if (pNextFree != 0)
pElem_nextFreeOff (pElem) = QOFFSETOF (pNextFree, pElem);
else
pElem_nextFreeOff (pElem) = 0;
pElem_nextFreeOff (prevelem_p) = QOFFSETOF (pElem, prevelem_p);
CHECKMEMELEM (pMemBlk, prevelem_p);
}
}
}
if (!ISLAST (pElem) && ISFREE (GETNEXT (pElem))) {
if (pElem && !ISLAST (pElem) && ISFREE (GETNEXT (pElem))) {
OSMemElemDescr* nextelem_p = GETNEXT (pElem);
/* +1 because the OSMemElemDescr has size ONE unit (8 bytes) */
pElem_nunits (pElem) += pElem_nunits (nextelem_p) + 1;
pElem_nunits (pElem) += pElem_nunits (nextelem_p) + 1;
if (pElem_nextFreeOff (nextelem_p) == 0)
pElem_nextFreeOff (pElem) = 0;
else
pElem_nextFreeOff (pElem) =
pElem_nextFreeOff (pElem) =
QOFFSETOF (GET_NEXT_FREE (nextelem_p), pElem);
pMemBlk->freeMem ++;
}
/* correct the prevOff field of next element */
if (!ISLAST (pElem)) {
if (pElem && !ISLAST (pElem)) {
OSMemElemDescr* nextelem_p = GETNEXT (pElem);
pElem_prevOff (nextelem_p) = QOFFSETOF (nextelem_p, pElem);
}
@ -648,10 +648,10 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
CHECKMEMBLOCK (pMemHeap, pMemBlk);
}
ast_mutex_unlock(&pMemHeap->pLock);
}
}
static void initNewFreeElement (OSMemBlk* pMemBlk,
OSMemElemDescr* pNewElem, OSMemElemDescr* pElem)
static void initNewFreeElement (OSMemBlk* pMemBlk,
OSMemElemDescr* pNewElem, OSMemElemDescr* pElem)
{
OSMemElemDescr *pNextElem, *pPrevElem = 0;
@ -662,11 +662,11 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
pElem_prevOff (pNewElem) = QOFFSETOF (pNewElem, pElem);
if (pMemBlk->freeElemOff != 0 &&
if (pMemBlk->freeElemOff != 0 &&
pMemBlk->freeElemOff < QOFFSETOF (pElem, pMemBlk->data) + 1)
{
/* look for nearest previous free block to correct its nextFreeOff */
pPrevElem = pElem;
do {
@ -677,21 +677,21 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
if (pPrevElem != 0) { /* if it is not first free element... */
/* correct nextFreeOff for prev free element */
pElem_nextFreeOff (pPrevElem) = QOFFSETOF (pNewElem, pPrevElem);
}
else { /* if it is first free element in the block */
FORCE_SET_FREE_ELEM (pMemBlk, pNewElem);
}
pNextElem = GETNEXT (pNewElem);
if (ISFREE (pNextElem)) {
if (pNextElem && ISFREE (pNextElem)) {
/* if the next elem is free, then unite them together */
pElem_nunits (pNewElem) += pElem_nunits (pNextElem) + 1;
if (pElem_nextFreeOff (pNextElem) != 0)
pElem_nextFreeOff (pNewElem) = QOFFSETOF (GET_NEXT_FREE (pNextElem),
pElem_nextFreeOff (pNewElem) = QOFFSETOF (GET_NEXT_FREE (pNextElem),
pNewElem);
else
pElem_nextFreeOff (pNewElem) = 0;
@ -709,7 +709,7 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
pNextElem = GETNEXT (pNextElem);
/* set nextFreeOff for new element */
if (pNextElem != 0)
pElem_nextFreeOff (pNewElem) = QOFFSETOF (pNextElem, pNewElem);
else
@ -745,15 +745,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
if ((pMemLink->blockType & RTMEMRAW) &&
pMemLink->pMemBlk == mem_p)
pMemLink->pMemBlk == mem_p)
{
if (pMemLink->blockType & RTMEMMALLOC) {
void *newMemBlk = realloc (pMemLink->pMemBlk, nbytes_);
if (newMemBlk == 0)
if (newMemBlk == 0)
return 0;
pMemLink->pMemBlk = newMemBlk;
}
else
else
return 0;
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = nbytes_;
return pMemLink->pMemBlk;
@ -767,7 +767,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
pElem = (OSMemElemDescr*) (((char*)mem_p) - sizeof_OSMemElemDescr);
RTMEMDIAG3 ("memHeapRealloc: mem_p = 0x%x, old size = %d,", mem_p,
RTMEMDIAG3 ("memHeapRealloc: mem_p = 0x%x, old size = %d,", mem_p,
pElem_nunits (pElem) * 8u);
RTMEMDIAG2 (" new nbytes = %d\n", nbytes);
@ -780,51 +780,51 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
CHECKMEMBLOCK(pMemHeap, pMemBlk);
if ((unsigned)pElem_nunits (pElem) < nunits) { /* expanding */
if (nunits - pElem_nunits (pElem) <= (unsigned)pMemBlk->nunits) {
/* Try to expand the existing element in the existing block */
if (ISLAST (pElem)) { /* if the last element in the block */
/* if the free space in the block is enough */
if ((int)(nunits - pElem_nunits (pElem)) <=
(int)(pMemBlk->nunits - pMemBlk->free_x))
{
if ((int)(nunits - pElem_nunits (pElem)) <=
(int)(pMemBlk->nunits - pMemBlk->free_x))
{
pMemBlk->free_x += nunits - pElem_nunits (pElem);
pElem_nunits (pElem) = (ASN1USINT)nunits;
RTMEMDIAG1 ("memHeapRealloc: "
"memory element is expanded.\n");
FILLNEWMEM (&pMemBlk->data [(pMemBlk->free_x -
(nunits - pElem_nunits (pElem))) * 8u],
FILLNEWMEM (&pMemBlk->data [(pMemBlk->free_x -
(nunits - pElem_nunits (pElem))) * 8u],
(nunits - pElem_nunits (pElem)) * 8u);
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
CHECKMEMELEM (pMemBlk, pElem);
CHECKMEMBLOCK (pMemHeap, pMemBlk);
return (mem_p);
}
}
}
else {
OSMemElemDescr* pNextElem, *pFreeElem;
OSMemElemDescr* pNextElem, *pFreeElem;
unsigned sumSize = pElem_nunits (pElem), freeMem = 0;
RTMEMDIAG1 ("memHeapRealloc: look for free element after "
"current block.\n");
/* look for free element after pElem */
pNextElem = GETNEXT (pElem);
if (ISFREE (pNextElem)) {
if (pNextElem && ISFREE (pNextElem)) {
/* +1 'cos sizeof (OSMemElemDescr) == 1 unit */
sumSize += pElem_nunits (pNextElem) + 1;
sumSize += pElem_nunits (pNextElem) + 1;
freeMem++;
}
if (sumSize >= nunits) {
RTMEMDIAG1 ("memHeapRealloc: reuse free element.\n");
@ -835,15 +835,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
FORCE_SET_FREE_ELEM (pMemBlk, GET_NEXT_FREE (pNextElem));
}
else if (pFreeElem < pElem) {
/* look for previous free elem to correct nextFreeOff */
for (; pFreeElem != 0 && pFreeElem < pNextElem;) {
OSMemElemDescr* pNextFreeElem =
OSMemElemDescr* pNextFreeElem =
GET_NEXT_FREE (pFreeElem);
if (pNextFreeElem == pNextElem) {
if (pElem_nextFreeOff (pNextElem) != 0)
pElem_nextFreeOff (pFreeElem) = QOFFSETOF
pElem_nextFreeOff (pFreeElem) = QOFFSETOF
(GET_NEXT_FREE (pNextElem), pFreeElem);
else
pElem_nextFreeOff (pFreeElem) = 0;
@ -856,15 +856,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
}
/* reuse empty elements after the pElem */
pMemBlk->freeMem += freeMem;
if (sumSize - nunits > 1) {
OSMemElemDescr* pNewElem;
/* if sumSize is too large, then create new empty element */
pNewElem = (OSMemElemDescr*)
pNewElem = (OSMemElemDescr*)
(pElem_data (pElem) + nbytes);
pElem_nunits (pNewElem) = (ASN1USINT)(sumSize - nunits - 1);
@ -884,7 +884,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
if (pNextElem != 0)
pElem_prevOff (pNextElem) = QOFFSETOF (pNextElem, pElem);
}
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
CHECKMEMELEM (pMemBlk, pElem);
CHECKMEMELEM (pMemBlk, (!ISLAST (pElem)) ? GETNEXT (pElem) : 0);
@ -901,14 +901,14 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
CHECKMEMHEAP (pMemHeap);
newMem_p = memHeapAlloc (ppvMemHeap, nbytes);
if (newMem_p == 0)
return 0;
/* if the old memory block is marked as saved then mark the new block
as saved as well. */
if (ISSAVED (pElem))
if (ISSAVED (pElem))
memHeapMarkSaved (ppvMemHeap, newMem_p, TRUE);
CHECKMEMHEAP (pMemHeap);
@ -927,7 +927,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
}
else { /* shrinking */
RTMEMDIAG1 ("memHeapRealloc: shrinking ...\n");
/* just free the pointer, if nbytes == 0 */
if (nbytes == 0) {
@ -939,15 +939,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
/* do not shrink, if size diff is too small */
/* sizeof (OSMemElemDescr) == 1 unit */
if (pElem_nunits (pElem) - nunits > 1) {
/* if it is the last element in the block, then just change the size
if (pElem_nunits (pElem) - nunits > 1) {
/* if it is the last element in the block, then just change the size
and free_x. */
if (ISLAST (pElem)) {
pMemBlk->free_x -= (pElem_nunits (pElem) - nunits);
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
(pElem_nunits (pElem) - nunits) * 8u);
}
else {
@ -958,14 +958,14 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
pNewElem = (OSMemElemDescr*) (pElem_data (pElem) + nbytes);
/* sizeof (OSMemElemDescr) == 1 unit */
pElem_nunits (pNewElem) = (ASN1USINT)(pElem_nunits (pElem) - nunits - 1);
pElem_nunits (pNewElem) = (ASN1USINT)(pElem_nunits (pElem) - nunits - 1);
initNewFreeElement (pMemBlk, pNewElem, pElem);
pMemBlk->freeMem += (pElem_nunits (pElem) - nunits) - 1;
}
pElem_nunits (pElem) = (ASN1USINT)nunits;
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
CHECKMEMELEM (pMemBlk, pElem);
CHECKMEMELEM (pMemBlk, (!ISLAST (pElem)) ? GETNEXT (pElem) : pElem);
@ -999,9 +999,9 @@ void memHeapFreeAll (void** ppvMemHeap)
pMemLink2 = pMemLink;
pMemLink = pMemLink2->pnext;
RTMEMDIAG3 ("memHeapFreeAll: pMemLink2 = 0x%x, pMemLink = 0x%x\n",
RTMEMDIAG3 ("memHeapFreeAll: pMemLink2 = 0x%x, pMemLink = 0x%x\n",
pMemLink2, pMemLink);
#ifdef _MEMDEBUG
if (pMemLink2->blockType & RTMEMSTD) {
OSMemBlk* pMemBlk = (OSMemBlk*) pMemLink2->pMemBlk;
@ -1035,9 +1035,9 @@ void memHeapFreeAll (void** ppvMemHeap)
/* free link and block */
if (((pMemLink2->blockType & RTMEMSTD) ||
if (((pMemLink2->blockType & RTMEMSTD) ||
(pMemLink2->blockType & RTMEMMALLOC)) &&
!(pMemLink2->blockType & RTMEMLINK))
!(pMemLink2->blockType & RTMEMLINK))
free (pMemLink2->pMemBlk);
free (pMemLink2);
}
@ -1061,7 +1061,7 @@ void memHeapAddRef (void** ppvMemHeap)
void memHeapRelease (void** ppvMemHeap)
{
OSMemHeap** ppMemHeap = (OSMemHeap**)ppvMemHeap;
OSMemHeap* pMemHeap = *ppMemHeap;
OSMemHeap* pMemHeap;
if (ppMemHeap != 0 && *ppMemHeap != 0 && --(*ppMemHeap)->refCnt == 0) {
OSMemLink* pMemLink, *pMemLink2;
@ -1079,6 +1079,7 @@ void memHeapRelease (void** ppvMemHeap)
}
if ((*ppMemHeap)->flags & RT_MH_FREEHEAPDESC) {
pMemHeap = *ppMemHeap;
ast_mutex_destroy(&pMemHeap->pLock);
free (*ppMemHeap);
}
@ -1088,11 +1089,11 @@ void memHeapRelease (void** ppvMemHeap)
/* This function is used for marking memory block as "saved". It means
* that the memory block containing the specified memory pointer won't be
* freed after calls to memHeapFreeAll/memHeapReset. User is responsible
* freed after calls to memHeapFreeAll/memHeapReset. User is responsible
* for freeing the marked memory block by call to memFreeBlock */
void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
ASN1BOOL saved)
void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
ASN1BOOL saved)
{
OSMemHeap* pMemHeap;
OSMemLink* pMemLink;
@ -1100,7 +1101,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
RTMEMDIAG2 ("memHeapMarkSaved: for mem_p = 0x%x\n", mem_p);
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
return 0;
pMemHeap = *(OSMemHeap**)ppvMemHeap;
@ -1113,7 +1114,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
for (; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
if ((pMemLink->blockType & RTMEMRAW) &&
pMemLink->pMemBlk == mem_p)
pMemLink->pMemBlk == mem_p)
{
break;
}
@ -1131,7 +1132,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
"already free!\n", pElem);
ast_mutex_unlock(&pMemHeap->pLock);
return 0;
return 0;
}
if ((ISSAVED (pElem) && !saved) || (!ISSAVED (pElem) && saved)) {
@ -1143,7 +1144,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
pMemLink = pMemBlk->plink;
if (saved)
if (saved)
SET_SAVED (pMemBlk, pElem);
else
CLEAR_SAVED (pMemBlk, pElem);
@ -1153,7 +1154,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
ast_mutex_unlock(&pMemHeap->pLock);
return 0;
}
if (saved && nsaved > 0)
if (saved && nsaved > 0)
pMemLink->blockType |= RTMEMSAVED;
else if (nsaved == 0)
pMemLink->blockType &= (~RTMEMSAVED);
@ -1203,16 +1204,16 @@ void memHeapReset (void** ppvMemHeap)
/* add memory block to list */
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
void* pMemBlk, int blockType)
{
OSMemLink* pMemLink;
/* if pMemBlk has RTMEMLINK flags it means that it is allocated
/* if pMemBlk has RTMEMLINK flags it means that it is allocated
* cooperatively with OSMemLink, and we don't need to do additional
* allocations for it. Just use pointer's arithemtic. */
if (blockType & RTMEMLINK)
if (blockType & RTMEMLINK)
pMemLink = (OSMemLink*) (((ASN1OCTET*)pMemBlk) - sizeof (OSMemLink));
else {
pMemLink = (OSMemLink*) malloc (
@ -1222,7 +1223,7 @@ static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
to perform rtMemRealloc through malloc/memcpy/free */
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = (int)-1;
}
if (pMemLink == NULL)
if (pMemLink == NULL)
return NULL;
pMemLink->blockType = (ASN1OCTET)blockType;
pMemLink->pMemBlk = pMemBlk;
@ -1241,15 +1242,15 @@ static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
pMemLink->pnextRaw = 0;
}
*ppMemLink = pMemLink;
*ppMemLink = pMemLink;
if (pMemLink->pnext != 0)
pMemLink->pnext->pprev = pMemLink;
((OSMemBlk*)pMemBlk)->plink = pMemLink; /*!AB */
RTMEMDIAG2 ("memHeapAddBlock: pMemLink = 0x%x\n", pMemLink);
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pnext = 0x%x\n",
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pnext = 0x%x\n",
pMemLink->pnext);
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pprev = 0x%x\n",
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pprev = 0x%x\n",
pMemLink->pprev);
return pMemLink;
@ -1262,7 +1263,7 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
RTMEMDIAG2 ("memHeapCheckPtr: for mem_p = 0x%x\n", mem_p);
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
return 0;
pMemHeap = *(OSMemHeap**)ppvMemHeap;
@ -1272,7 +1273,7 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
for (; pMemLink != 0; pMemLink = pMemLink->pnext) {
if (pMemLink->blockType & RTMEMRAW) {
/* if RAW block, the pointer should be stored in pMemBlk */
if (pMemLink->pMemBlk == mem_p) {
@ -1282,17 +1283,17 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
}
else {
OSMemBlk* pMemBlk = (OSMemBlk*)pMemLink->pMemBlk;
/* Check, is the pointer inside this memory page */
if (mem_p > pMemLink->pMemBlk &&
if (mem_p > pMemLink->pMemBlk &&
mem_p < (void*)(((ASN1OCTET*)pMemLink->pMemBlk) + pMemBlk->nunits * 8u))
{
/* Check, is the pointer a correct element of the mem page */
OSMemElemDescr* pElem = (OSMemElemDescr*) pMemBlk->data;
for (; pElem != 0; pElem = GETNEXT (pElem)) {
void* curMem_p = (void*) pElem_data (pElem);
if (curMem_p == mem_p && !ISFREE (pElem)) {
ast_mutex_unlock(&pMemHeap->pLock);
@ -1311,7 +1312,7 @@ void memHeapSetProperty (void** ppvMemHeap, ASN1UINT propId, void* pProp)
{
OSMemHeap* pMemHeap;
if (ppvMemHeap == 0)
if (ppvMemHeap == 0)
return;
if (*ppvMemHeap == 0)
@ -1332,9 +1333,9 @@ void memHeapSetProperty (void** ppvMemHeap, ASN1UINT propId, void* pProp)
break;
}
ast_mutex_unlock(&pMemHeap->pLock);
}
}
int memHeapCreate (void** ppvMemHeap)
int memHeapCreate (void** ppvMemHeap)
{
OSMemHeap* pMemHeap;
if (ppvMemHeap == 0) return ASN_E_INVPARAM;
@ -1349,4 +1350,3 @@ int memHeapCreate (void** ppvMemHeap)
*ppvMemHeap = (void*)pMemHeap;
return ASN_OK;
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -28,6 +28,7 @@
#include "ooGkClient.h"
#include "ooh323ep.h"
#include "ooCalls.h"
#include "ooCmdChannel.h"
/** Global endpoint structure */
extern OOH323EndPoint gH323ep;
@ -60,7 +61,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
{
OOTRACEERR1("ERROR:Memory - ooCreateCall - call\n");
return NULL;
}
}
memset(call, 0, sizeof(OOH323CallData));
ast_cond_init(&call->gkWait, NULL);
ast_mutex_init(&call->GkLock);
@ -78,7 +79,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
else {
call->ourCallerId[0] = '\0';
}
memset(&call->callIdentifier, 0, sizeof(H225CallIdentifier));
memset(&call->confIdentifier, 0, sizeof(H225ConferenceIdentifier));
@ -105,7 +106,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
// May 20090713. Fix it for Video session
OO_SETFLAG(call->flags, OO_M_AUDIOSESSION);
call->callState = OO_CALL_CREATED;
call->callEndReason = OO_REASON_UNKNOWN;
call->pCallFwdData = NULL;
@ -114,13 +115,13 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
{
call->callingPartyNumber = NULL;
}
else{
else{
if(ooUtilsIsStrEmpty(gH323ep.callingPartyNumber))
{
call->callingPartyNumber = NULL;
}
else{
call->callingPartyNumber = (char*) memAlloc(call->pctxt,
call->callingPartyNumber = (char*) memAlloc(call->pctxt,
strlen(gH323ep.callingPartyNumber)+1);
if(call->callingPartyNumber)
{
@ -154,14 +155,14 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
call->masterSlaveState = OO_MasterSlave_Idle;
call->statusDeterminationNumber = 0;
call->localTermCapState = OO_LocalTermCapExchange_Idle;
call->remoteTermCapState = OO_RemoteTermCapExchange_Idle;
call->remoteTermCapState = OO_RemoteTermCapExchange_Idle;
call->ourCaps = NULL;
call->remoteCaps = NULL;
call->jointCaps = NULL;
dListInit(&call->remoteFastStartOLCs);
call->remoteTermCapSeqNo =0;
call->localTermCapSeqNo = 0;
memcpy(&call->capPrefs, &gH323ep.capPrefs, sizeof(OOCapPrefs));
memcpy(&call->capPrefs, &gH323ep.capPrefs, sizeof(OOCapPrefs));
call->logicalChans = NULL;
call->noOfLogicalChannels = 0;
call->logicalChanNoBase = 1001;
@ -172,7 +173,8 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
call->msdRetries = 0;
call->pFastStartRes = NULL;
call->usrData = NULL;
OOTRACEINFO3("Created a new call (%s, %s)\n", call->callType,
ooCreateCallCmdConnection(call);
OOTRACEINFO3("Created a new call (%s, %s)\n", call->callType,
call->callToken);
/* Add new call to calllist */
ooAddCallToList (call);
@ -206,8 +208,8 @@ int ooAddCallToList(OOH323CallData *call)
int ooEndCall(OOH323CallData *call)
{
OOTRACEDBGA4("In ooEndCall call state is - %s (%s, %s)\n",
ooGetCallStateText(call->callState), call->callType,
OOTRACEDBGA4("In ooEndCall call state is - %s (%s, %s)\n",
ooGetCallStateText(call->callState), call->callType,
call->callToken);
if(call->callState == OO_CALL_REMOVED) {
@ -223,9 +225,10 @@ int ooEndCall(OOH323CallData *call)
call->callState = OO_CALL_CLEARED;
}
if(call->callState == OO_CALL_CLEARED || call->callState == OO_CALL_CLEAR_RELEASESENT)
if(call->callState == OO_CALL_CLEARED || ((strcmp(call->callType, "incoming")) &&
call->callState == OO_CALL_CLEAR_RELEASESENT))
{
ooCleanCall(call);
ooCleanCall(call);
call->callState = OO_CALL_REMOVED;
return OO_OK;
}
@ -248,16 +251,16 @@ int ooEndCall(OOH323CallData *call)
}
if(!OO_TESTFLAG(call->flags, OO_M_RELEASE_BUILT))
if(!OO_TESTFLAG(call->flags, OO_M_RELEASE_BUILT))
{
if(call->callState == OO_CALL_CLEAR ||
if(call->callState == OO_CALL_CLEAR ||
call->callState == OO_CALL_CLEAR_RELEASERECVD)
{
ooSendReleaseComplete(call);
OO_SETFLAG(call->flags, OO_M_RELEASE_BUILT);
}
}
return OO_OK;
}
@ -296,8 +299,8 @@ int ooCleanCall(OOH323CallData *call)
{
OOCTXT *pctxt;
OOTRACEWARN4 ("Cleaning Call (%s, %s)- reason:%s\n",
call->callType, call->callToken,
OOTRACEWARN4 ("Cleaning Call (%s, %s)- reason:%s\n",
call->callType, call->callToken,
ooGetReasonCodeText (call->callEndReason));
/* First clean all the logical channels, if not already cleaned. */
@ -320,7 +323,7 @@ int ooCleanCall(OOH323CallData *call)
{
ooCloseH245Listener(call);
}
/* Close H225 connection, if not already closed. */
if (0 != call->pH225Channel && 0 != call->pH225Channel->sock)
{
@ -339,7 +342,7 @@ int ooCleanCall(OOH323CallData *call)
}
ooRemoveCallFromList (call);
OOTRACEINFO3("Removed call (%s, %s) from list\n", call->callType,
OOTRACEINFO3("Removed call (%s, %s) from list\n", call->callType,
call->callToken);
if(call->pCallFwdData && call->pCallFwdData->fwdedByRemote)
@ -392,7 +395,7 @@ int ooCallSetCallerId(OOH323CallData* call, const char* callerid)
int ooCallSetCallingPartyNumber(OOH323CallData *call, const char *number)
{
if(call->callingPartyNumber)
if(call->callingPartyNumber)
memFreePtr(call->pctxt, call->callingPartyNumber);
call->callingPartyNumber = (char*) memAlloc(call->pctxt, strlen(number)+1);
@ -402,7 +405,7 @@ int ooCallSetCallingPartyNumber(OOH323CallData *call, const char *number)
}
else{
OOTRACEERR3("Error:Memory - ooCallSetCallingPartyNumber - "
"callingPartyNumber.(%s, %s)\n", call->callType,
"callingPartyNumber.(%s, %s)\n", call->callType,
call->callToken);
return OO_FAILED;
}
@ -424,14 +427,14 @@ int ooCallGetCallingPartyNumber(OOH323CallData *call, char *buffer, int len)
return OO_OK;
}
}
return OO_FAILED;
}
int ooCallSetCalledPartyNumber(OOH323CallData *call, const char *number)
{
if(call->calledPartyNumber)
if(call->calledPartyNumber)
memFreePtr(call->pctxt, call->calledPartyNumber);
call->calledPartyNumber = (char*) memAlloc(call->pctxt, strlen(number)+1);
@ -441,7 +444,7 @@ int ooCallSetCalledPartyNumber(OOH323CallData *call, const char *number)
}
else{
OOTRACEERR3("Error:Memory - ooCallSetCalledPartyNumber - "
"calledPartyNumber.(%s, %s)\n", call->callType,
"calledPartyNumber.(%s, %s)\n", call->callType,
call->callToken);
return OO_FAILED;
}
@ -458,7 +461,7 @@ int ooCallGetCalledPartyNumber(OOH323CallData *call, char *buffer, int len)
return OO_OK;
}
}
return OO_FAILED;
}
@ -503,7 +506,7 @@ int ooCallAddAlias
call->remoteAliases = psNewAlias;
}
OOTRACEDBGC5("Added %s alias %s to call. (%s, %s)\n",
OOTRACEDBGC5("Added %s alias %s to call. (%s, %s)\n",
local?"local":"remote", value, call->callType, call->callToken);
return OO_OK;
}
@ -530,8 +533,8 @@ int ooCallAddAliasEmailID(OOH323CallData *call, const char* email)
int ooCallAddAliasURLID(OOH323CallData *call, const char* url)
{
return ooCallAddAlias(call, T_H225AliasAddress_url_ID, url, TRUE);
}
}
int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id)
{
@ -547,63 +550,63 @@ int ooCallAddRemoteAliasDialedDigits
/* Used to override global end point capabilities and add call specific
/* Used to override global end point capabilities and add call specific
capabilities */
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooCallAddAMRNBCapability(OOH323CallData *call, int cap, int txframes,
int ooCallAddAMRNBCapability(OOH323CallData *call, int cap, int txframes,
int rxframes, OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooCallAddSpeexCapability(OOH323CallData *call, int cap, int txframes,
int ooCallAddSpeexCapability(OOH323CallData *call, int cap, int txframes,
int rxframes, OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -611,12 +614,12 @@ int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
/*
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -624,12 +627,12 @@ int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
*/
int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -637,11 +640,11 @@ int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -649,28 +652,28 @@ int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
int ooCallAddGSMCapability
(OOH323CallData* call, int cap, ASN1USINT framesPerPkt,
(OOH323CallData* call, int cap, ASN1USINT framesPerPkt,
OOBOOL comfortNoise, OOBOOL scrambled, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddGSMCapability(call, cap, framesPerPkt, comfortNoise,
scrambled, dir, startReceiveChannel,
return ooCapabilityAddGSMCapability(call, cap, framesPerPkt, comfortNoise,
scrambled, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooCallAddH263VideoCapability
(OOH323CallData *call, int cap, unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI, unsigned cif16MPI, unsigned maxBitRate,
(OOH323CallData *call, int cap, unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI, unsigned cif16MPI, unsigned maxBitRate,
int dir, cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -680,7 +683,7 @@ int ooCallAddH263VideoCapability
return ooCapabilityAddH263VideoCapability(call, sqcifMPI, qcifMPI, cifMPI,
cif4MPI, cif16MPI, maxBitRate,dir,
startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel,
stopReceiveChannel, stopTransmitChannel,
FALSE);
}
@ -762,7 +765,7 @@ OOH323CallData* ooFindCallByToken(const char *callToken)
else
call = call->next;
}
if(!call)
{
OOTRACEERR2("ERROR:Call with token %s not found\n", callToken);
@ -787,7 +790,7 @@ ASN1BOOL ooIsSessionEstablished(OOH323CallData *call, int sessionID, char* dir)
while(temp)
{
if(temp->sessionID == sessionID &&
temp->state == OO_LOGICALCHAN_ESTABLISHED &&
temp->state == OO_LOGICALCHAN_ESTABLISHED &&
!strcmp(temp->dir, dir) )
return TRUE;
temp = temp->next;
@ -801,8 +804,7 @@ int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo)
if(!call)
{
OOTRACEERR3("Error:Invalid 'call' param for ooAddMediaInfo.(%s, %s)\n",
call->callType, call->callToken);
OOTRACEERR1("Error:Invalid 'call' param for ooAddMediaInfo.\n");
return OO_FAILED;
}
newMediaInfo = (OOMediaInfo*) memAlloc(call->pctxt, sizeof(OOMediaInfo));
@ -815,7 +817,7 @@ int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo)
memcpy (newMediaInfo, &mediaInfo, sizeof(OOMediaInfo));
OOTRACEDBGC4("Configured mediainfo for cap %s (%s, %s)\n",
OOTRACEDBGC4("Configured mediainfo for cap %s (%s, %s)\n",
ooGetCapTypeText(mediaInfo.cap),
call->callType, call->callToken);
if(!call->mediaInfo) {
@ -845,7 +847,7 @@ unsigned ooCallGenerateSessionID
sessionID = call->nextSessionID++;
else{
OOTRACEDBGC4("Session id for %s channel of type audio has to be "
"provided by remote.(%s, %s)\n", dir, call->callType,
"provided by remote.(%s, %s)\n", dir, call->callType,
call->callToken);
sessionID = 0; /* Will be assigned by remote */
}
@ -864,7 +866,7 @@ unsigned ooCallGenerateSessionID
else{
sessionID = 0; /* Will be assigned by remote */
OOTRACEDBGC4("Session id for %s channel of type video has to be "
"provided by remote.(%s, %s)\n", dir, call->callType,
"provided by remote.(%s, %s)\n", dir, call->callType,
call->callToken);
}
}
@ -881,7 +883,7 @@ unsigned ooCallGenerateSessionID
else{
sessionID = 0; /* Will be assigned by remote */
OOTRACEDBGC4("Session id for %s channel of type data has to be "
"provided by remote.(%s, %s)\n", dir, call->callType,
"provided by remote.(%s, %s)\n", dir, call->callType,
call->callToken);
}
}
@ -896,8 +898,8 @@ int ooCallH245ConnectionRetryTimerExpired(void *data)
ooTimerCallback *cbData = (ooTimerCallback*) data;
OOH323CallData *call = cbData->call;
OOTRACEINFO3("H245 connection retry timer expired. (%s, %s)\n",
call->callType, call->callToken);
OOTRACEINFO3("H245 connection retry timer expired. (%s, %s)\n",
call->callType, call->callToken);
memFreePtr(call->pctxt, cbData);
call->h245ConnectionAttempts++;
@ -910,9 +912,9 @@ int ooCallH245ConnectionRetryTimerExpired(void *data)
const char* ooGetReasonCodeText (OOUINT32 code)
{
static const char* reasonCodeText[] = {
"OO_REASON_UNKNOWN",
"OO_REASON_UNKNOWN",
"OO_REASON_INVALIDMESSAGE",
"OO_REASON_TRANSPORTFAILURE",
"OO_REASON_TRANSPORTFAILURE",
"OO_REASON_NOROUTE",
"OO_REASON_NOUSER",
"OO_REASON_NOBW",
@ -922,10 +924,10 @@ const char* ooGetReasonCodeText (OOUINT32 code)
"OO_REASON_GK_UNREACHABLE",
"OO_REASON_GK_CLEARED",
"OO_REASON_NOCOMMON_CAPABILITIES",
"OO_REASON_REMOTE_FWDED",
"OO_REASON_REMOTE_FWDED",
"OO_REASON_LOCAL_FWDED",
"OO_REASON_REMOTE_CLEARED",
"OO_REASON_LOCAL_CLEARED",
"OO_REASON_REMOTE_CLEARED",
"OO_REASON_LOCAL_CLEARED",
"OO_REASON_REMOTE_BUSY",
"OO_REASON_LOCAL_BUSY",
"OO_REASON_REMOTE_NOANSWER",
@ -953,4 +955,3 @@ const char* ooGetCallStateText (OOCallState callState)
};
return ooUtilsGetText (callState, callStateText, OONUMBEROF(callStateText));
}

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooCalls.h
* This file contains call management functions.
* @file ooCalls.h
* This file contains call management functions.
*/
#ifndef _OOCALLS_H_
#define _OOCALLS_H_
@ -29,7 +29,7 @@ extern "C" {
#endif
/**
/**
* @defgroup callmgmt Call Management
* @{
*/
@ -60,7 +60,7 @@ extern "C" {
#define OO_M_DATASESSION ASN1UINTCNT(0x00000200)
#define OO_M_T38SUPPORTED ASN1UINTCNT(0x00000400)
/**
/**
* Call states.
*/
typedef enum {
@ -76,20 +76,20 @@ typedef enum {
OO_CALL_REMOVED /* call removed */
} OOCallState;
/**
/**
* H.245 session states.
*/
typedef enum {
OO_H245SESSION_IDLE,
OO_H245SESSION_PAUSED,
OO_H245SESSION_ACTIVE,
OO_H245SESSION_ENDSENT,
OO_H245SESSION_ENDSENT,
OO_H245SESSION_ENDRECVD,
OO_H245SESSION_CLOSED
} OOH245SessionState;
/**
* Structure to store local and remote media endpoint info for a
* Structure to store local and remote media endpoint info for a
* given media type.
*/
typedef struct OOMediaInfo{
@ -115,10 +115,10 @@ typedef struct OOCallFwdData {
int port;
struct OOAliases *aliases;
OOBOOL fwdedByRemote; /*Set when we are being fwded by remote*/
} OOCallFwdData;
} OOCallFwdData;
/**
* Structure to store information on an H.323 channel (H.225 or H.245) for
* Structure to store information on an H.323 channel (H.225 or H.245) for
* a particular call.
*/
typedef struct OOH323Channel {
@ -128,7 +128,7 @@ typedef struct OOH323Channel {
} OOH323Channel;
/**
* Structure to store information on fast start response (H.225) to
* Structure to store information on fast start response (H.225) to
* reply same answer in CALL PROCEEDING, ALERTING & CONNECT.
*/
typedef struct EXTERN FastStartResponse {
@ -144,8 +144,8 @@ typedef struct OOH323Regex {
/**
* This structure is used to maintain all information on an active call.
* A list of these structures is maintained within the global endpoint
* This structure is used to maintain all information on an active call.
* A list of these structures is maintained within the global endpoint
* structure.
*/
typedef struct OOH323CallData {
@ -166,10 +166,10 @@ typedef struct OOH323CallData {
int transfercap;
ASN1USINT callReference;
char ourCallerId[256];
H225CallIdentifier callIdentifier;/* The call identifier for the active
H225CallIdentifier callIdentifier;/* The call identifier for the active
call. */
char *callingPartyNumber;
char *calledPartyNumber;
char *calledPartyNumber;
H225ConferenceIdentifier confIdentifier;
ASN1UINT flags;
OOCallState callState;
@ -207,8 +207,8 @@ typedef struct OOH323CallData {
DList remoteFastStartOLCs;
ASN1UINT8 remoteTermCapSeqNo;
ASN1UINT8 localTermCapSeqNo;
OOCapPrefs capPrefs;
OOLogicalChannel* logicalChans;
OOCapPrefs capPrefs;
OOLogicalChannel* logicalChans;
int noOfLogicalChannels;
int logicalChanNoBase;
int logicalChanNoMax;
@ -237,7 +237,7 @@ typedef struct OOH323CallData {
#define ooCallData OOH323CallData
/**
* This callback function is triggered when a new call structure is
* This callback function is triggered when a new call structure is
* created inside the stack for an incoming or outgoing call.
*
* @param call H.323 call data structure
@ -246,8 +246,8 @@ typedef struct OOH323CallData {
typedef int (*cb_OnNewCallCreated)(OOH323CallData* call);
/**
* This callback function is triggered when a Q.931 alerting message is
* received for an outgoing call or when a Q.931 alerting message is sent
* This callback function is triggered when a Q.931 alerting message is
* received for an outgoing call or when a Q.931 alerting message is sent
* for an incoming call.
*
* @param call H.323 call data structure
@ -256,8 +256,8 @@ typedef int (*cb_OnNewCallCreated)(OOH323CallData* call);
typedef int (*cb_OnAlerting)(OOH323CallData * call);
/**
* This callback function is triggered when there is an incoming call.
* In the case where a gatekeeper is in use, the call must first be
* This callback function is triggered when there is an incoming call.
* In the case where a gatekeeper is in use, the call must first be
* admitted by the gatekeeper before this callback is triggered.
*
* @param call H.323 call data structure
@ -266,7 +266,7 @@ typedef int (*cb_OnAlerting)(OOH323CallData * call);
typedef int (*cb_OnIncomingCall)(OOH323CallData* call );
/**
* This callback function is triggered after a Q.931 setup message
* This callback function is triggered after a Q.931 setup message
* is sent for an outgoing call.
*
* @param call H.323 call data structure
@ -275,10 +275,10 @@ typedef int (*cb_OnIncomingCall)(OOH323CallData* call );
typedef int (*cb_OnOutgoingCall)(OOH323CallData* call );
/**
* This callback function is triggered when a Q.931 connect message is
* sent in case of incoming call. In case of outgoing call, this is invoked
* when a Q.931 connect message is received. It is not invoked until after
* fast start and H.245 tunneling messages within the connect message are
* This callback function is triggered when a Q.931 connect message is
* sent in case of incoming call. In case of outgoing call, this is invoked
* when a Q.931 connect message is received. It is not invoked until after
* fast start and H.245 tunneling messages within the connect message are
* processed.
*
* @param call H.323 call data structure
@ -295,8 +295,8 @@ typedef int (*cb_OnCallEstablished)(struct OOH323CallData* call);
typedef int (*cb_OnCallCleared)(struct OOH323CallData* call);
/**
* This callback function is triggered when master-slave determination
* and capabilities negotiation procedures are successfully completed
* This callback function is triggered when master-slave determination
* and capabilities negotiation procedures are successfully completed
* for a call.
*
* @param call H.323 call data structure
@ -332,7 +332,7 @@ typedef void (*cb_OnMediaChanged)
(struct OOH323CallData *call, char* remoteIP, int remotePort);
/**
* This structure holds all of the H.323 signaling callback function
* This structure holds all of the H.323 signaling callback function
* addresses.
* @see ooH323EpSetH323Callbacks
*/
@ -428,7 +428,7 @@ EXTERN int ooCallSetCalledPartyNumber
EXTERN int ooCallClearAliases(OOH323CallData *call);
/**
* This function is used to add an H323ID alias to be used by local endpoint
* This function is used to add an H323ID alias to be used by local endpoint
* for a particular call.
* @param call Handle to the call
* @param h323id H323ID to add for the local endpoint for the call.
@ -438,7 +438,7 @@ EXTERN int ooCallClearAliases(OOH323CallData *call);
EXTERN int ooCallAddAliasH323ID(OOH323CallData *call, const char* h323id);
/**
* This function is used to add an dialedDigits alias to be used by local
* This function is used to add an dialedDigits alias to be used by local
* endpoint for a particular call.
* @param call Handle to the call
* @param dialedDigits DialedDigits to add for the local endpoint for call.
@ -449,7 +449,7 @@ EXTERN int ooCallAddAliasDialedDigits
(OOH323CallData *call, const char* dialedDigits);
/**
* This function is used to add an email-id alias to be used by local
* This function is used to add an email-id alias to be used by local
* endpoint for a particular call.
* @param call Handle to the call
* @param email Email-id to add for the local endpoint for call.
@ -460,7 +460,7 @@ EXTERN int ooCallAddAliasEmailID(OOH323CallData *call, const char* email);
/**
* This function is used to add an email-id alias to be used by local
* This function is used to add an email-id alias to be used by local
* endpoint for a particular call.
* @param call Handle to the call
* @param url URL-id to add for the local endpoint for call.
@ -471,8 +471,8 @@ EXTERN int ooCallAddAliasURLID(OOH323CallData *call, const char* url);
/**
* This is a helper function used by other call related add aliases functions
* to add a particular alias. This function is not supposed to be called
* This is a helper function used by other call related add aliases functions
* to add a particular alias. This function is not supposed to be called
* directly.
* @param call Handle to the call
* @param aliasType Type of alias being added
@ -486,7 +486,7 @@ int ooCallAddAlias
/**
* This function is used to add an dialed digits alias for the remote endpoint
* This function is used to add an dialed digits alias for the remote endpoint
* involved in a particular call.
* @param call Handle to the call
* @param dialedDigits dialedDigits alias to add for the remote endpoint.
@ -497,7 +497,7 @@ EXTERN int ooCallAddRemoteAliasDialedDigits
(OOH323CallData *call, const char* dialedDigits);
/**
* This function is used to add an H323ID alias for the remote endpoint
* This function is used to add an H323ID alias for the remote endpoint
* involved in a particular call.
* @param call Handle to the call
* @param h323id H323ID to add for the remote endpoint.
@ -508,12 +508,12 @@ EXTERN int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id);
/**
* This function is used to add G7231 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add G7231 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param silenceSuppression Indicates support for silenceSuppression.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
@ -522,9 +522,9 @@ EXTERN int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id);
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -532,12 +532,12 @@ EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G728 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add G728 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -545,9 +545,9 @@ EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -555,12 +555,12 @@ EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G729 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add G729 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -568,9 +568,9 @@ EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -578,12 +578,12 @@ EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
cb_StopTransmitChannel stopTransmitChannel);
/**
* This function is used to add G711 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add G711 capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -591,9 +591,9 @@ EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -602,13 +602,13 @@ EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
/**
* This function is used to add GSM capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add GSM capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Type of GSM capability to be added.
* @param framesPerPkt Number of GSM frames pre packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param framesPerPkt Number of GSM frames pre packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param scrambled Scrambled enabled/disabled for the capability.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -616,10 +616,10 @@ EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
ASN1USINT framesPerPkt, OOBOOL comfortNoise,
EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
ASN1USINT framesPerPkt, OOBOOL comfortNoise,
OOBOOL scrambled, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -630,23 +630,23 @@ EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
/**
* This function is used to add H263 video capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* This function is used to add H263 video capability for the call. The
* "ooCallAdd...Capability" functions allow to override the global endpoint
* capabilities and use specific capabilities for specific calls.
* @param call Call for which capability has to be added.
* @param cap Capability type - OO_H263VIDEO
* @param sqcifMPI Minimum picture interval for encoding/decoding
* @param sqcifMPI Minimum picture interval for encoding/decoding
* of SQCIF pictures.
* @param qcifMPI Minimum picture interval for encoding/decoding
* @param qcifMPI Minimum picture interval for encoding/decoding
* of QCIF pictures.
* @param cifMPI Minimum picture interval for encoding/decoding
* @param cifMPI Minimum picture interval for encoding/decoding
* of CIF pictures.
* @param cif4MPI Minimum picture interval for encoding/decoding
* @param cif4MPI Minimum picture interval for encoding/decoding
* of CIF4 pictures.
* @param cif16MPI Minimum picture interval for encoding/decoding
* @param cif16MPI Minimum picture interval for encoding/decoding
* of CIF16 pictures.
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
* which a transmitter can transmit video or a
* which a transmitter can transmit video or a
* receiver can receive video.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -654,13 +654,13 @@ EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCallAddH263VideoCapability(OOH323CallData *call, int cap,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
unsigned cif16MPI, unsigned maxBitRate,
int dir,
EXTERN int ooCallAddH263VideoCapability(OOH323CallData *call, int cap,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
unsigned cif16MPI, unsigned maxBitRate,
int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -682,9 +682,9 @@ EXTERN int ooCallEnableDTMFRFC2833
/**
* This function is used to disable rfc 2833 capability for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to enable/disable dtmf for a specific call, then you can override
* This function is used to disable rfc 2833 capability for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to enable/disable dtmf for a specific call, then you can override
* end-point settings using this function
* @param call Call for which rfc2833 has to be disabled.
*
@ -694,9 +694,9 @@ EXTERN int ooCallDisableDTMFRFC2833(OOH323CallData *call);
/**
* This function is used to enable H.245(alphanumeric) dtmf support for the
* call. By default the stack uses the dtmf settings for the endpoint. But if
* you want to enable H.245(alphanumeric) dtmf for a specific call, then you
* This function is used to enable H.245(alphanumeric) dtmf support for the
* call. By default the stack uses the dtmf settings for the endpoint. But if
* you want to enable H.245(alphanumeric) dtmf for a specific call, then you
* can override end-point settings using this function
* @param call Call for which H.245(alphanumeric) dtmf support
* has to be enabled.
@ -706,9 +706,9 @@ EXTERN int ooCallDisableDTMFRFC2833(OOH323CallData *call);
EXTERN int ooCallEnableDTMFH245Alphanumeric(OOH323CallData *call);
/**
* This function is used to disable H.245(alphanumeric) dtmf support for the
* call. By default the stack uses the dtmf settings for the endpoint. But if
* you want to disable H.245(alphanumeric) dtmf for a specific call, then you
* This function is used to disable H.245(alphanumeric) dtmf support for the
* call. By default the stack uses the dtmf settings for the endpoint. But if
* you want to disable H.245(alphanumeric) dtmf for a specific call, then you
* can override end-point settings using this function
* @param call Call for which H.245(alphanumeric) dtmf support
* has to be disabled.
@ -718,8 +718,8 @@ EXTERN int ooCallEnableDTMFH245Alphanumeric(OOH323CallData *call);
EXTERN int ooCallDisableDTMFH245Alphanumeric(OOH323CallData *call);
/**
* This function is used to enable H.245(signal) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* This function is used to enable H.245(signal) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to enable H.245(signal) dtmf for a specific call, then you can override
* end-point settings using this function
* @param call Call for which H.245(signal) dtmf support
@ -731,9 +731,9 @@ EXTERN int ooCallEnableDTMFH245Signal(OOH323CallData *call);
/**
* This function is used to disable H.245(signal) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to disable H.245(signal) dtmf for a specific call, then you can
* This function is used to disable H.245(signal) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to disable H.245(signal) dtmf for a specific call, then you can
* override end-point settings using this function
* @param call Call for which H.245(signal) dtmf support
* has to be disabled.
@ -745,7 +745,7 @@ EXTERN int ooCallDisableDTMFH245Signal(OOH323CallData *call);
/**
* This function is used to enable Q.931(keypad) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to enable Q.931(keypad) dtmf support for a specific call, then you can
* override end-point settings using this function
* @param call Call for which Q.931(keypad) dtmf support
@ -757,7 +757,7 @@ EXTERN int ooCallEnableDTMFQ931Keypad(OOH323CallData *call);
/**
* This function is used to disable Q.931(keypad) dtmf support for the call.
* By default the stack uses the dtmf settings for the endpoint. But if you
* By default the stack uses the dtmf settings for the endpoint. But if you
* want to disable Q.931(keypad) dtmf support for a specific call, then you can
* override end-point settings using this function
* @param call Call for which Q.931(keypad) dtmf support
@ -787,14 +787,14 @@ EXTERN int ooEndCall(OOH323CallData *call);
/**
* This function is used to remove a call from the list of existing calls.
*
*
* @param call Pointer to the call to be removed.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooRemoveCallFromList (OOH323CallData *call);
/**
* This function is used to clean up a call. It closes all associated sockets,
* This function is used to clean up a call. It closes all associated sockets,
* removes the call from the global list and frees up associated memory.
*
* @param call Pointer to the call to be cleared.
@ -803,25 +803,25 @@ EXTERN int ooRemoveCallFromList (OOH323CallData *call);
EXTERN int ooCleanCall(OOH323CallData *call);
/**
* This function is used to check whether a specified session in specified
* This function is used to check whether a specified session in specified
* direction is active for the call.
* @param call Handle to call for which session has to be queried.
* @param sessionID Session id to identify the type of session(1 for audio,
* @param sessionID Session id to identify the type of session(1 for audio,
* 2 for voice and 3 for data)
* @param dir Direction of the session(transmit/receive)
*
* @return 1, if session active. 0, otherwise.
* @return 1, if session active. 0, otherwise.
*/
EXTERN ASN1BOOL ooIsSessionEstablished
(OOH323CallData *call, int sessionID, char* dir);
/**
* This function can be used by an application to specify media endpoint
* This function can be used by an application to specify media endpoint
* information for different types of media. The stack by default uses local IP
* and port for media. An application can provide mediainfo if it wants to
* and port for media. An application can provide mediainfo if it wants to
* override default.
* @param call Handle to the call
* @param mediaInfo Structure which defines the media endpoint to be
* @param mediaInfo Structure which defines the media endpoint to be
* used.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -829,7 +829,7 @@ EXTERN ASN1BOOL ooIsSessionEstablished
EXTERN int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo);
/**
* This function is used to generate a media session id for the new media
* This function is used to generate a media session id for the new media
* session for the call.
* @param call Handle to the call.
* @param type Type of media session.
@ -841,7 +841,7 @@ EXTERN unsigned ooCallGenerateSessionID
(OOH323CallData *call, OOCapType type, char *dir);
/**
* This is an handler for H245 connection retry timer. When remote end is not
* This is an handler for H245 connection retry timer. When remote end is not
* yet listening for H245 connections, this timer provides a wait and retry
* mechanism to establish H245 connection.
* @param data Timer callback data.
@ -868,8 +868,8 @@ EXTERN const char* ooGetReasonCodeText (OOUINT32 code);
*/
EXTERN const char* ooGetCallStateText (OOCallState callState);
/**
* @}
/**
* @}
*/
int isRunning(char *callToken);

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooCapability.h
* This file contains Capability management functions.
* @file ooCapability.h
* This file contains Capability management functions.
*/
#ifndef OO_CAPABILITY_H_
#define OO_CAPABILITY_H_
@ -29,7 +29,7 @@
#define OOTX (1<<1)
#define OORXANDTX (1<<2)
#define OORXTX (1<<3) /* For symmetric capabilities */
/* Various types of caps. Note that not all
/* Various types of caps. Note that not all
supported */
typedef enum OOCapabilities{
OO_CAP_AUDIO_BASE = 0,
@ -89,7 +89,7 @@ typedef enum OOCapabilities{
/**
* This structure defines the preference order for capabilities.
*
*
*/
typedef struct OOCapPrefs {
int order[20];
@ -99,11 +99,11 @@ typedef struct OOCapPrefs {
typedef struct OOCapParams {
int txframes; /*!< Number of frames per packet for transmission */
int rxframes; /*!< Number of frames per packet for reception */
OOBOOL silenceSuppression;
OOBOOL silenceSuppression;
} OOCapParams;
typedef struct OOGSMCapParams {
unsigned txframes;
unsigned txframes;
unsigned rxframes;
OOBOOL scrambled;
OOBOOL comfortNoise;
@ -130,7 +130,7 @@ struct OOLogicalChannel;
extern "C" {
#endif
/**
/**
* This callback is used for starting media receive channel. This callback
* function is triggered when receive media channel has to be started.
* @param call Call for which receive media channel has to be started.
@ -143,7 +143,7 @@ typedef int (*cb_StartReceiveChannel)
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
/**
/**
* This callback is used for starting media transmit channel. This callback
* function is triggered when transmit media channel has to be started.
* @param call Call for which transmit media channel has to be started.
@ -155,7 +155,7 @@ typedef int (*cb_StartReceiveChannel)
typedef int (*cb_StartTransmitChannel)
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
/**
/**
* This callback is used for stopping media receive channel. This callback
* function is triggered when receive media channel has to be stopped.
* @param call Call for which receive media channel has to be stopped.
@ -167,7 +167,7 @@ typedef int (*cb_StartTransmitChannel)
typedef int (*cb_StopReceiveChannel)
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
/**
/**
* This callback is used for stopping media transmit channel. This callback
* function is triggered when transmit media channel has to be stopped.
* @param call Call for which transmit media channel has to be stopped.
@ -190,7 +190,7 @@ typedef enum OOCapType {
* capability
*/
typedef struct ooH323EpCapability {
int dir;
int dir;
int cap;
OOCapType capType;
void *params;
@ -212,14 +212,14 @@ typedef struct ooH323EpCapability {
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
/**
* @defgroup capmgmt Capability Management
* @{
*/
/**
* This function is used to add rfc2833 based dtmf detection capability
* @param call Call if enabling for call, else null for
* @param call Call if enabling for call, else null for
* endpoint.
* @param dynamicRTPPayloadType dynamicRTPPayloadType to be used.
* @return OO_OK, on success. OO_FAILED, on failure.
@ -237,7 +237,7 @@ EXTERN int ooCapabilityDisableDTMFRFC2833(struct OOH323CallData *call);
/**
* This function is used to enable support for H.245 based alphanumeric dtmf
* This function is used to enable support for H.245 based alphanumeric dtmf
* capability.
* @param call Handle to call, if enabling for the call, else NULL
* for end-point.
@ -246,7 +246,7 @@ EXTERN int ooCapabilityDisableDTMFRFC2833(struct OOH323CallData *call);
EXTERN int ooCapabilityEnableDTMFH245Alphanumeric(struct OOH323CallData *call);
/**
* This function is used to disable support for H.245 based alphanumeric dtmf
* This function is used to disable support for H.245 based alphanumeric dtmf
* capability.
* @param call Handle to call, if disabling for the call, else NULL
* for end-point.
@ -256,7 +256,7 @@ EXTERN int ooCapabilityDisableDTMFH245Alphanumeric
(struct OOH323CallData *call);
/**
* This function is used to enable support for H.245 based signal dtmf
* This function is used to enable support for H.245 based signal dtmf
* capability.
* @param call Handle to call, if enabling for the call, else NULL
* for end-point.
@ -265,7 +265,7 @@ EXTERN int ooCapabilityDisableDTMFH245Alphanumeric
EXTERN int ooCapabilityEnableDTMFH245Signal(struct OOH323CallData *call);
/**
* This function is used to disable support for H.245 based signal dtmf
* This function is used to disable support for H.245 based signal dtmf
* capability.
* @param call Handle to call, if disabling for the call, else NULL
* for end-point.
@ -291,14 +291,14 @@ EXTERN int ooCapabilityDisableDTMFQ931Keypad(struct OOH323CallData *call);
/**
* This function is used to add simple capabilities which have only rxframes
* and txframes parameters to the endpoint or call.(ex. G711, G728, G723.1,
* and txframes parameters to the endpoint or call.(ex. G711, G728, G723.1,
* G729)
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* endpoint list.
* @param cap Type of G711 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param silenceSuppression Indicates support for silence suppression.
* Used only in case of g7231, otherwise ignored.
@ -312,8 +312,8 @@ EXTERN int ooCapabilityDisableDTMFQ931Keypad(struct OOH323CallData *call);
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCapabilityAddSimpleCapability
(struct OOH323CallData *call, int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
(struct OOH323CallData *call, int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -325,13 +325,13 @@ EXTERN int ooCapabilityAddSimpleCapability
* This is an internal helper function which is used to add a GSM capability
* to local endpoints capability list or to remote endpoints capability list or
* to a call's capability list.
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* endpoint list.
* @param cap Type of GSM capability to be added.
* @param framesPerPkt Number of GSM frames per packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param framesPerPkt Number of GSM frames per packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param scrambled Scrambled enabled/disabled for the capability.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -340,38 +340,38 @@ EXTERN int ooCapabilityAddSimpleCapability
* @param stopTransmitChannel Callback function to stop transmit channel.
* @param remote TRUE, if adding call's remote capabilities.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
unsigned framesPerPkt, OOBOOL comfortNoise,
OOBOOL scrambled, int dir,
OOBOOL scrambled, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel,
cb_StopTransmitChannel stopTransmitChannel,
OOBOOL remote);
/**
* This function is used to add H263 video capability to local endpoints
* capability list or to remote endpoints capability list or to a call's
* This function is used to add H263 video capability to local endpoints
* capability list or to remote endpoints capability list or to a call's
* capability list.
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* endpoint list.
* @param sqcifMPI Minimum picture interval for encoding/decoding
* @param sqcifMPI Minimum picture interval for encoding/decoding
* of SQCIF pictures.
* @param qcifMPI Minimum picture interval for encoding/decoding
* @param qcifMPI Minimum picture interval for encoding/decoding
* of QCIF pictures.
* @param cifMPI Minimum picture interval for encoding/decoding
* @param cifMPI Minimum picture interval for encoding/decoding
* of CIF pictures.
* @param cif4MPI Minimum picture interval for encoding/decoding
* @param cif4MPI Minimum picture interval for encoding/decoding
* of CIF4 pictures.
* @param cif16MPI Minimum picture interval for encoding/decoding
* @param cif16MPI Minimum picture interval for encoding/decoding
* of CIF16 pictures.
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
* which a transmitter can transmit video or a
* which a transmitter can transmit video or a
* receiver can receive video.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -380,37 +380,37 @@ int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
* @param stopTransmitChannel Callback function to stop transmit channel.
* @param remote TRUE, if adding call's remote capabilities.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
unsigned cif16MPI, unsigned maxBitRate, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel,
cb_StopTransmitChannel stopTransmitChannel,
OOBOOL remote);
/**
* This function is an helper function to ooCapabilityAddH263VideoCapability.
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* @param call Handle to a call. If this is not Null, then
* capability is added to call's remote enpoint
* capability list, else it is added to local H323
* endpoint list.
* @param sqcifMPI Minimum picture interval for encoding/decoding
* @param sqcifMPI Minimum picture interval for encoding/decoding
* of SQCIF pictures.
* @param qcifMPI Minimum picture interval for encoding/decoding
* @param qcifMPI Minimum picture interval for encoding/decoding
* of QCIF pictures.
* @param cifMPI Minimum picture interval for encoding/decoding
* @param cifMPI Minimum picture interval for encoding/decoding
* of CIF pictures.
* @param cif4MPI Minimum picture interval for encoding/decoding
* @param cif4MPI Minimum picture interval for encoding/decoding
* of CIF4 pictures.
* @param cif16MPI Minimum picture interval for encoding/decoding
* @param cif16MPI Minimum picture interval for encoding/decoding
* of CIF16 pictures.
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
* which a transmitter can transmit video or a
* which a transmitter can transmit video or a
* receiver can receive video.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -419,24 +419,24 @@ EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
* @param stopTransmitChannel Callback function to stop transmit channel.
* @param remote TRUE, if adding call's remote capabilities.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooCapabilityAddH263VideoCapability_helper(struct OOH323CallData *call,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
unsigned cif16MPI, unsigned maxBitRate, int dir,
int ooCapabilityAddH263VideoCapability_helper(struct OOH323CallData *call,
unsigned sqcifMPI, unsigned qcifMPI,
unsigned cifMPI, unsigned cif4MPI,
unsigned cif16MPI, unsigned maxBitRate, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel,
cb_StopTransmitChannel stopTransmitChannel,
OOBOOL remote);
/**
* This function is used to add a audio capability to calls remote
* This function is used to add a audio capability to calls remote
* capability list.
* @param call Handle to the call.
* @param audioCap Handle to the remote endpoint's audio capability.
* @param dir Direction in which capability is supported by
* @param dir Direction in which capability is supported by
* remote endpoint.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -458,12 +458,12 @@ int ooAddRemoteCapability(struct OOH323CallData *call, H245Capability *cap);
/**
* This function is used to update joint capabilities for call. It checks
* whether remote capability can be supported by local capabilities for the
* call and if supported makes entry into the joint capability list for the
* call and if supported makes entry into the joint capability list for the
* call.
* @param call Handle to the call
* @param cap Remote cap which will be tested for compatibility.
*
* @return returns OO_OK, if updated else OO_FAILED;
* @return returns OO_OK, if updated else OO_FAILED;
*/
EXTERN int ooCapabilityUpdateJointCapabilities
(struct OOH323CallData* call, H245Capability *cap);
@ -472,50 +472,50 @@ EXTERN int ooCapabilityUpdateJointCapabilities
/**
* This function is used to update joint video capabilities for call. It checks
* whether remote capability can be supported by local capabilities for the
* call and if supported makes entry into the joint capability list for the
* call and if supported makes entry into the joint capability list for the
* call.
* @param call Handle to the call
* @param videoCap Remote video capability which will be tested for
* @param videoCap Remote video capability which will be tested for
* compatibility.
* @param dir Direction of the capability
*
* @return returns OO_OK, if updated else OO_FAILED;
* @return returns OO_OK, if updated else OO_FAILED;
*/
EXTERN int ooCapabilityUpdateJointCapabilitiesVideo
(struct OOH323CallData *call, H245VideoCapability *videoCap, int dir);
/**
* This function is used to update joint video H263 capabilities for call. It
* checks whether remote capability can be supported by local capabilities for
* This function is used to update joint video H263 capabilities for call. It
* checks whether remote capability can be supported by local capabilities for
* the call and if supported makes entry into the joint capability list for the
* call.
* @param call Handle to the call
* @param pH263Cap Remote H263 video capability which will be tested for
* @param pH263Cap Remote H263 video capability which will be tested for
* compatibility.
* @param dir Direction of the H263 capability
*
* @return returns OO_OK, if updated else OO_FAILED;
* @return returns OO_OK, if updated else OO_FAILED;
*/
EXTERN int ooCapabilityUpdateJointCapabilitiesVideoH263
(struct OOH323CallData *call, H245H263VideoCapability *pH263Cap, int dir);
/**
* This function is used to test whether the endpoint capability in the
* This function is used to test whether the endpoint capability in the
* specified direction can be supported by the audio capability.
* @param call Handle to the call.
* @param epCap Endpoint capability.
* @param dataType Data type with which compatibility has to
* @param dataType Data type with which compatibility has to
* be tested.
* @param dir Direction indicating whether endpoint capability
* will be used for transmission or reception.
*
* @return TRUE, if compatible. FALSE, otherwise.
* @return TRUE, if compatible. FALSE, otherwise.
*/
ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
ooH323EpCapability *epCap,
ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
ooH323EpCapability *epCap,
H245DataType *dataType, int dir);
@ -523,27 +523,27 @@ ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
* This function is used to create a audio capability structure using the
* capability type.
* @param epCap Capability.
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* for new audio capability.
* @param dir Direction in which the newly created capability will be
* @param dir Direction in which the newly created capability will be
* used.
*
* @return Newly created audio capability on success, NULL on
* @return Newly created audio capability on success, NULL on
* failure.
*/
struct H245AudioCapability* ooCapabilityCreateAudioCapability
struct H245AudioCapability* ooCapabilityCreateAudioCapability
(ooH323EpCapability* epCap, OOCTXT *pctxt, int dir);
/**
* This function is used to create a video capability structure using the
* capability type.
* @param epCap Capability.
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* for new video capability.
* @param dir Direction in which the newly created capability will be
* @param dir Direction in which the newly created capability will be
* used.
*
* @return Newly created video capability on success, NULL on
* @return Newly created video capability on success, NULL on
* failure.
*/
struct H245VideoCapability* ooCapabilityCreateVideoCapability
@ -554,7 +554,7 @@ struct H245VideoCapability* ooCapabilityCreateVideoCapability
* This function is used to create a dtmf capability which can be added to
* a TCS message.
* @param cap Type of dtmf capability to be created.
* @param pctxt Pointer to OOCTXT structure to be used for memory
* @param pctxt Pointer to OOCTXT structure to be used for memory
* allocation.
*
* @return Pointer to the created DTMF capability, NULL in case of
@ -570,23 +570,23 @@ void * ooCapabilityCreateDTMFCapability(int cap, int dtmfcodec, OOCTXT *pctxt);
* for new audio capability.
* @param dir Direction for the newly created capability.
*
* @return Newly created audio capability on success, NULL on
* @return Newly created audio capability on success, NULL on
* failure.
*/
struct H245AudioCapability* ooCapabilityCreateGSMFullRateCapability
(ooH323EpCapability *epCap, OOCTXT* pctxt, int dir);
/**
* This function is used to create a simple(g711, g728, g723.1, g729) audio
* This function is used to create a simple(g711, g728, g723.1, g729) audio
* capability structure.
*
* @param epCap Handle to the endpoint capability
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* for new audio capability.
* @param dir Direction in which the newly created capability will be
* @param dir Direction in which the newly created capability will be
* used.
*
* @return Newly created audio capability on success, NULL on
* @return Newly created audio capability on success, NULL on
* failure.
*/
struct H245AudioCapability* ooCapabilityCreateSimpleCapability
@ -596,15 +596,15 @@ struct H245AudioCapability* ooCapabilityCreateNonStandardCapability
/**
* This function is used to create a H263 video capability
* This function is used to create a H263 video capability
* structure.
* @param epCap Handle to the endpoint capability
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* @param pctxt Handle to OOCTXT which will be used to allocate memory
* for new video capability.
* @param dir Direction in which the newly created capability will be
* @param dir Direction in which the newly created capability will be
* used.
*
* @return Newly created video capability on success, NULL on
* @return Newly created video capability on success, NULL on
* failure.
*/
struct H245VideoCapability* ooCapabilityCreateH263VideoCapability
@ -616,9 +616,9 @@ struct H245VideoCapability* ooCapabilityCreateH263VideoCapability
* can be supported by the endpoint.
* @param call Handle to the call.
* @param audioCap Handle to the audio capability.
* @param dir Direction in which support is desired.
* @param dir Direction in which support is desired.
*
* @return Handle to the copyof capability which supports audioCap,
* @return Handle to the copyof capability which supports audioCap,
* Null if none found
*/
ooH323EpCapability* ooIsAudioDataTypeSupported
@ -629,9 +629,9 @@ ooH323EpCapability* ooIsAudioDataTypeSupported
* can be supported by the endpoint.
* @param call Handle to the call.
* @param pVideoCap Handle to the video capability.
* @param dir Direction in which support is desired.
* @param dir Direction in which support is desired.
*
* @return Handle to the copy of capability which supports video
* @return Handle to the copy of capability which supports video
* capability, Null if none found
*/
ooH323EpCapability* ooIsVideoDataTypeSupported
@ -642,14 +642,14 @@ ooH323EpCapability* ooIsVideoDataTypeSupported
* can be supported by the endpoint.
* @param call Handle to the call.
* @param pH263Cap Handle to the H263 video capability.
* @param dir Direction in which support is desired.
* @param dir Direction in which support is desired.
* @param picFormat Picture type(cif, qcif etc.)
*
* @return Handle to the copy of capability which supports H263
* @return Handle to the copy of capability which supports H263
* capability, Null if none found
*/
ooH323EpCapability* ooIsVideoDataTypeH263Supported
(struct OOH323CallData *call, H245H263VideoCapability* pH263Cap, int dir,
(struct OOH323CallData *call, H245H263VideoCapability* pH263Cap, int dir,
OOPictureFormat picFormat);
/**
@ -657,9 +657,9 @@ ooH323EpCapability* ooIsVideoDataTypeH263Supported
* can be supported by the endpoint.
* @param call Handle to the call.
* @param data Handle to the capability type.
* @param dir Direction in which support is desired.
* @param dir Direction in which support is desired.
*
* @return Handle to the copy of capability which supports specified
* @return Handle to the copy of capability which supports specified
* capability type, Null if none found
*/
ooH323EpCapability* ooIsDataTypeSupported
@ -705,7 +705,7 @@ EXTERN int ooRemoveCapFromCapPrefs(struct OOH323CallData *call, int cap);
EXTERN int ooAppendCapToCapPrefs(struct OOH323CallData *call, int cap);
/**
* This function is used to change preference order of a particular capability
* This function is used to change preference order of a particular capability
* in the preference list.
* @param call Handle to call, if call's preference list has to be modified
* else NULL, to modify endpoint's preference list.
@ -786,13 +786,11 @@ int ooCapabilityAddT38Capability
/**/
/**
* @}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -109,7 +109,7 @@ int ooWriteStackCommand(OOStackCommand *cmd)
return OO_FAILED;
}
ast_mutex_unlock(&gCmdChanLock);
return OO_OK;
}
int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd)
@ -144,14 +144,14 @@ int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd)
return OO_FAILED;
}
ast_mutex_unlock(call->CmdChanLock);
return OO_OK;
}
int ooReadAndProcessStackCommand()
{
OOH323CallData *pCall = NULL;
OOH323CallData *pCall = NULL;
unsigned char buffer[MAXMSGLEN];
int i, recvLen = 0;
OOStackCommand cmd;
@ -174,10 +174,10 @@ int ooReadAndProcessStackCommand()
else {
switch(cmd.type) {
case OO_CMD_MAKECALL:
OOTRACEINFO2("Processing MakeCall command %s\n",
case OO_CMD_MAKECALL:
OOTRACEINFO2("Processing MakeCall command %s\n",
(char*)cmd.param2);
ooH323NewCall ((char*)cmd.param2);
break;
@ -210,7 +210,7 @@ int ooReadAndProcessStackCommand()
}
}
break;
case OO_CMD_ANSCALL:
pCall = ooFindCallByToken((char*)cmd.param1);
if(!pCall) {
@ -231,13 +231,13 @@ int ooReadAndProcessStackCommand()
ooH323ForwardCall((char*)cmd.param1, (char*)cmd.param2);
break;
case OO_CMD_HANGCALL:
OOTRACEINFO3("Processing Hang call command %s with q931 cause %d\n",
case OO_CMD_HANGCALL:
OOTRACEINFO3("Processing Hang call command %s with q931 cause %d\n",
(char*)cmd.param1, *(int *) cmd.param3);
ooH323HangCall((char*)cmd.param1,
ooH323HangCall((char*)cmd.param1,
*(OOCallClearReason*)cmd.param2, *(int *) cmd.param3);
break;
case OO_CMD_SENDDIGIT:
pCall = ooFindCallByToken((char*)cmd.param1);
if(!pCall) {
@ -259,7 +259,7 @@ int ooReadAndProcessStackCommand()
break;
case OO_CMD_STOPMONITOR:
case OO_CMD_STOPMONITOR:
OOTRACEINFO1("Processing StopMonitor command\n");
ooStopMonitorCalls();
break;
@ -303,7 +303,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
if (cmd.plen1 > 0) {
cmd.param1 = malloc(cmd.plen1 + 1);
if (!cmd.param1)
if (!cmd.param1)
return OO_FAILED;
memset(cmd.param1, 0, cmd.plen1 + 1);
memcpy(cmd.param1, bPoint, cmd.plen1);
@ -312,7 +312,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
if (cmd.plen2 > 0) {
cmd.param2 = malloc(cmd.plen2 + 1);
if (!cmd.param2)
if (!cmd.param2)
return OO_FAILED;
memset(cmd.param2, 0, cmd.plen2 + 1);
memcpy(cmd.param2, bPoint, cmd.plen2);
@ -321,7 +321,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
if (cmd.plen3 > 0) {
cmd.param3 = malloc(cmd.plen3 + 1);
if (!cmd.param3)
if (!cmd.param3)
return OO_FAILED;
memset(cmd.param3, 0, cmd.plen3 + 1);
memcpy(cmd.param3, bPoint, cmd.plen3);
@ -333,11 +333,11 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
else {
switch(cmd.type) {
case OO_CMD_MAKECALL:
OOTRACEINFO2("Processing MakeCall command %s\n",
case OO_CMD_MAKECALL:
OOTRACEINFO2("Processing MakeCall command %s\n",
(char*)cmd.param2);
ooH323MakeCall ((char*)cmd.param1, (char*)cmd.param2,
ooH323MakeCall ((char*)cmd.param1, (char*)cmd.param2,
(ooCallOptions*)cmd.param3);
break;
@ -354,7 +354,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
}
}
break;
case OO_CMD_ANSCALL:
ooSendConnect(call);
break;
@ -365,13 +365,13 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
ooH323ForwardCall((char*)cmd.param1, (char*)cmd.param2);
break;
case OO_CMD_HANGCALL:
OOTRACEINFO2("Processing Hang call command %s with q931 cause %d\n",
case OO_CMD_HANGCALL:
OOTRACEINFO2("Processing Hang call command %s with q931 cause %d\n",
(char*)cmd.param1);
ooH323HangCall((char*)cmd.param1,
ooH323HangCall((char*)cmd.param1,
*(OOCallClearReason*)cmd.param2, *(int *) cmd.param3);
break;
case OO_CMD_SENDDIGIT:
if(call->jointDtmfMode & OO_CAP_DTMF_H245_alphanumeric) {
ooSendH245UserInputIndication_alphanumeric(
@ -427,4 +427,3 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
return OO_OK;
}

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooCmdChannel.h
* @file ooCmdChannel.h
* This file contains stack commands which an user application can use to make
* call, hang call etc.
* call, hang call etc.
*/
#ifndef OO_CMDCHANNEL_H
@ -40,13 +40,13 @@ extern "C" {
#define OO_DEFAULT_CMDLISTENER_PORT 7575
/**
* @addtogroup channels
* @addtogroup channels
* @{
*/
/**
* This function is used to setup a command connection with the main stack
* thread. The application commands are sent over this connection to stack
* This function is used to setup a command connection with the main stack
* thread. The application commands are sent over this connection to stack
* thread.
*
* @return OO_OK, on success; OO_FAILED, on failure
@ -55,7 +55,7 @@ EXTERN int ooCreateCmdConnection(void);
EXTERN int ooCreateCallCmdConnection(OOH323CallData*);
/**
* This function is used to close a command channel setup with the stack
* This function is used to close a command channel setup with the stack
* thread.
*
* @return OO_OK, on success; OO_FAILED, on failure
@ -65,7 +65,7 @@ EXTERN int ooCloseCallCmdConnection(OOH323CallData*);
/**
* This function is used by stack api to write stack commands to command
* This function is used by stack api to write stack commands to command
* channel.
*
* @return OO_OK, on success; OO_FAILED, on failure
@ -74,7 +74,7 @@ EXTERN int ooWriteStackCommand(OOStackCommand *cmd);
EXTERN int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd);
/**
* This function is used by stack thread to read and process stack commands
* This function is used by stack thread to read and process stack commands
* received over command channel.
*
* @return OO_OK, on success; OO_FAILED, on failure
@ -83,8 +83,8 @@ EXTERN int ooReadAndProcessStackCommand(void);
EXTERN int ooReadAndProcessCallStackCommand(OOH323CallData*);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooCommon.h
/**
* @file ooCommon.h
* Common runtime constant and type definitions.
*/
#ifndef _OOCOMMON_H_
@ -43,7 +43,7 @@
#endif
#include <semaphore.h>
/**
/**
* @ingroup cruntime C Runtime Common Constant and Type Definitions.
* @{
*/
@ -119,7 +119,7 @@ typedef struct _OOMsgBuf {
#endif /* _DLL */
#endif /* EXTERN */
/**
* @}
/**
* @}
*/
#endif /* _OOCOMMON_H_ */

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -69,7 +69,7 @@ static uint64 calcEpocOffset() {
// Gets high resolution by spinning up to 15ms. Don't call this often!!!
static uint64 getRawCurMsSpin() {
FILETIME tm;
FILETIME tm;
uint64 t_now;
static uint64 epocOffset = 0;
@ -121,7 +121,7 @@ int gettimeofday(struct timeval* tv, void* null) {
baselineMs = getRawCurMsSpin();
tickBaseline = timeGetTime();
}
uint64 now_ms = (baselineMs + (curTicks - tickBaseline));
*tv = oo_ms_to_tv(now_ms);
return 0;
@ -170,7 +170,6 @@ int ooGetTimeOfDay (struct timeval *tv, struct timezone *tz)
long ooGetTimeDiff(struct timeval *tv1, struct timeval *tv2)
{
return ( ((tv2->tv_sec-tv1->tv_sec)*1000) +
return ( ((tv2->tv_sec-tv1->tv_sec)*1000) +
((tv2->tv_usec-tv1->tv_usec)/1000) );
}

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooDateTime.h
/**
* @file ooDateTime.h
* Time functions that reconcile differences between Windows and UNIX.
*/
#ifndef _OOTIME_H_
@ -28,10 +28,10 @@ extern "C" {
#endif
/**
* This function provides an abstraction for the UNIX 'gettimeofday'
* This function provides an abstraction for the UNIX 'gettimeofday'
* function which is not available on Windows.
*
* @param tv Pointer to time value structure to receive
* @param tv Pointer to time value structure to receive
* current time value.
* @param tz Point to time zone information.
* @return Completion status of operation: 0 = success,

File diff suppressed because it is too large Load Diff

View File

@ -2,22 +2,22 @@
* Copyright (C) 2005 by Page Iberica, S.A.
* Copyright (C) 2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooGkClient.h
* This file contains functions to support RAS protocol.
* @file ooGkClient.h
* This file contains functions to support RAS protocol.
*
*
*/
@ -73,7 +73,7 @@ extern "C" {
#define OO_ARQ_TIMER (1<<3)
#define OO_DRQ_TIMER (1<<4)
/**
/**
* @defgroup gkclient Gatekeeper client
* @{
*/
@ -111,7 +111,7 @@ enum OOGkClientState {
GkClientFailed,
GkClientStopped
};
typedef struct RasGatekeeperInfo
{
@ -136,9 +136,9 @@ struct OOAliases;
/**
* NOTE- This functionality is not yet fully completed.
* This is a callback function which is triggered when registration confirm
* This is a callback function which is triggered when registration confirm
* message is received from the gatekeeper. The first parameter is the message
* received. The second parameter provides updated list of aliases after the
* received. The second parameter provides updated list of aliases after the
* message was processed by the stack.
* @param rcf Handle to the received registration confirm message
*/
@ -148,9 +148,9 @@ typedef int (*cb_OnReceivedRegistrationConfirm)
/**
* NOTE- This functionality is not yet fully completed.
* This is a callback function which is triggered when unregistration confirm
* This is a callback function which is triggered when unregistration confirm
* message is received. The first parameter is the message received. The second
* parameter provides updated list of aliases after the message was processed
* parameter provides updated list of aliases after the message was processed
* by the stack.
*/
typedef int (*cb_OnReceivedUnregistrationConfirm)
@ -158,7 +158,7 @@ typedef int (*cb_OnReceivedUnregistrationConfirm)
/**
* NOTE- This functionality is not yet fully completed.
* This is a callback function which is triggered when unregistration request
* This is a callback function which is triggered when unregistration request
* message is received. The first parameter is the message received. The second
* parameter provides the list of aliases requested to be unregistered.
*/
@ -220,20 +220,20 @@ struct OOH323CallData;
* @param iGkPort Gk port.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*
*
*/
EXTERN int ooGkClientInit
(enum RasGatekeeperMode eGkMode, char *szGkAddr, int iGkPort );
/**
* This function is used to print the gatekeeper client configuration
* This function is used to print the gatekeeper client configuration
* information to log.
* @param pGkClient Handle to gatekeeper client.
*/
EXTERN void ooGkClientPrintConfig(ooGkClient *pGkClient);
/**
* This function is used to destroy Gatekeeper client. It releases all the
* This function is used to destroy Gatekeeper client. It releases all the
* associated memory.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -243,17 +243,17 @@ EXTERN int ooGkClientDestroy(void);
/**
* This function is used to start the Gatekeeper client functionality.
* @param pGkClient Pointer to the Gatekeeper Client.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooGkClientStart(ooGkClient *pGkClient);
/**
* This function is invoked to set a gatekeeper mode.
* @param pGkClient Handle to gatekeeper client.
* @param eGkMode Gatekeeper mode selected. One of the following:
* - RasNoGatekeeper (DEFAULT), No Gatekeeper.
* - RasDiscoverGatekeeper, to discover a gatekeeper
* This function is invoked to set a gatekeeper mode.
* @param pGkClient Handle to gatekeeper client.
* @param eGkMode Gatekeeper mode selected. One of the following:
* - RasNoGatekeeper (DEFAULT), No Gatekeeper.
* - RasDiscoverGatekeeper, to discover a gatekeeper
* automatically.
* - RasUseSpecificGatekeeper, to use a specific gatekeeper.
* @param szGkAddr Gatekeeper address (only when using specific gatekeeper).
@ -261,8 +261,8 @@ EXTERN int ooGkClientStart(ooGkClient *pGkClient);
*
* @return Completion status - OO_OK on success, OO_FAILED on failure
*/
EXTERN int ooGkClientSetGkMode(ooGkClient *pGkClient,
enum RasGatekeeperMode eGkMode, char *szGkAddr,
EXTERN int ooGkClientSetGkMode(ooGkClient *pGkClient,
enum RasGatekeeperMode eGkMode, char *szGkAddr,
int iGkPort );
/**
@ -288,7 +288,7 @@ EXTERN int ooGkClientCloseChannel(ooGkClient *pGkClient);
* identifier.
* @param pGkClient Pointer to gatekeeper client.
* @param psVendor Pointer to vendor identifier to be filled.
*
*
*/
EXTERN void ooGkClientRasFillVendor
(ooGkClient *pGkClient, H225VendorIdentifier *psVendor);
@ -299,14 +299,14 @@ EXTERN void ooGkClientRasFillVendor
* @param pGkClient Handle to Gatekeeper client for which message has to be
* received.
*
* @return Completion status - OO_OK on success, OO_FAILED on
* @return Completion status - OO_OK on success, OO_FAILED on
* failure
*/
EXTERN int ooGkClientReceive(ooGkClient *pGkClient);
/**
* This function is used to handle a received RAS message by a gatekeeper
* This function is used to handle a received RAS message by a gatekeeper
* client.
* @param pGkClient Handle to gatekeeper client.
* @param pRasMsg Handle to received Ras message.
@ -322,14 +322,14 @@ EXTERN int ooGkClientHandleRASMessage
* @param pGkClient Handle to the gatekeeper client.
* @param pRasMsg Handle to Ras message to be sent.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
* @return OO_OK, on success. OO_FAILED, otherwise.
*/
EXTERN int ooGkClientSendMsg(ooGkClient *pGkClient, H225RasMessage *pRasMsg);
/**
* This function is used to send Gatekeeper request message.
* @param pGkClient Handle to gatekeeper client for which GRQ message has to
* @param pGkClient Handle to gatekeeper client for which GRQ message has to
* be sent.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -360,9 +360,9 @@ EXTERN int ooGkClientHandleGatekeeperConfirm
/**
* This function is used to send Registration request message.
* @param pGkClient Handle to gatekeeper client for which RRQ message has to
* @param pGkClient Handle to gatekeeper client for which RRQ message has to
* be sent.
* @param keepAlive Indicates whether keepalive lightweight registration has
* @param keepAlive Indicates whether keepalive lightweight registration has
* to be sent.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -392,9 +392,9 @@ EXTERN int ooGkClientHandleRegistrationReject
/**
* This function is used to send UnRegistration request message.
* @param pGkClient Handle to gatekeeper client for which URQ message has to
* @param pGkClient Handle to gatekeeper client for which URQ message has to
* be sent.
* @param aliases List of aliases to be unregistered. NULL, if all the
* @param aliases List of aliases to be unregistered. NULL, if all the
* aliases have to be unregistered.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -413,21 +413,21 @@ EXTERN int ooGkClientHandleUnregistrationRequest
/**
* This function is used to send an unregistration confirm message to
* This function is used to send an unregistration confirm message to
* gatekeeper.
* @param pGkClient Handle to gatekeeper client.
* @param reqNo Request Sequence number for the confirm message.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooGkClientSendUnregistrationConfirm(ooGkClient *pGkClient,
EXTERN int ooGkClientSendUnregistrationConfirm(ooGkClient *pGkClient,
unsigned reqNo);
/**
* This function is invoked to request bandwith admission for a call.
* This function is invoked to request bandwith admission for a call.
* @param pGkClient Gatekeeper client to be used
* @param call Handle to the call.
* @param retransmit Indicates whether new call or retransmitting for
* @param retransmit Indicates whether new call or retransmitting for
* existing call.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -447,8 +447,8 @@ EXTERN int ooGkClientHandleAdmissionConfirm
/**
* This function is used to handle a received Admission Reject message. It
* finds the associated call and marks it for cleaning with appropriate
* This function is used to handle a received Admission Reject message. It
* finds the associated call and marks it for cleaning with appropriate
* call end reason code.
* @param pGkClient Handle to Gatekeeper client.
* @param pAdmissionReject Handle to received admission reject message.
@ -459,7 +459,7 @@ EXTERN int ooGkClientHandleAdmissionReject
(ooGkClient *pGkClient, H225AdmissionReject *pAdmissionReject);
/**
* This function is invoked to request call disengage to gatekeeper.
* This function is invoked to request call disengage to gatekeeper.
* @param pGkClient Gatekeeper client to be used.
* @param call Call Handle
*
@ -520,7 +520,7 @@ EXTERN int ooGkClientARQTimerExpired(void* pdata);
EXTERN int ooGkClientCleanCall(ooGkClient *pGkClient, struct OOH323CallData *call);
/**
* This function is used to handle gatekeeper client failure or gatekeeper
* This function is used to handle gatekeeper client failure or gatekeeper
* failure which can be detected by unresponsiveness of gk.
* @param pGkClient Handle to gatekeeper client.
*
@ -538,7 +538,7 @@ EXTERN int ooGkClientHandleClientOrGkFailure(ooGkClient *pGkClient);
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooGkClientUpdateRegisteredAliases
(ooGkClient *pGkClient, H225_SeqOfH225AliasAddress *pAddresses,
(ooGkClient *pGkClient, H225_SeqOfH225AliasAddress *pAddresses,
OOBOOL registered);
/**
@ -551,8 +551,8 @@ EXTERN int ooGkClientUpdateRegisteredAliases
*/
int ooGkClientSetCallbacks
(ooGkClient *pGkClient, OOGKCLIENTCALLBACKS callbacks);
/**
* @}
/**
* @}
*/
int ooGkClientReInit(ooGkClient *pGkClient);

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -23,8 +23,8 @@
/** Global endpoint structure */
extern OOH323EndPoint gH323ep;
OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
int sessionID, char *dir,
OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
int sessionID, char *dir,
ooH323EpCapability *epCap)
{
OOLogicalChannel *pNewChannel=NULL, *pChannel=NULL;
@ -32,7 +32,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
OOTRACEDBGC5("Adding new media channel for cap %d dir %s (%s, %s)\n",
epCap->cap, dir, call->callType, call->callToken);
/* Create a new logical channel entry */
pNewChannel = (OOLogicalChannel*)memAlloc(call->pctxt,
pNewChannel = (OOLogicalChannel*)memAlloc(call->pctxt,
sizeof(OOLogicalChannel));
if(!pNewChannel)
{
@ -40,7 +40,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
"(%s, %s)\n", call->callType, call->callToken);
return NULL;
}
memset(pNewChannel, 0, sizeof(OOLogicalChannel));
pNewChannel->channelNo = channelNo;
pNewChannel->sessionID = sessionID;
@ -51,12 +51,12 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
pNewChannel->chanCap = epCap;
OOTRACEDBGC4("Adding new channel with cap %d (%s, %s)\n", epCap->cap,
call->callType, call->callToken);
/* As per standards, media control port should be same for all
call->callType, call->callToken);
/* As per standards, media control port should be same for all
proposed channels with same session ID. However, most applications
use same media port for transmit and receive of audio streams. Infact,
testing of OpenH323 based asterisk assumed that same ports are used.
Hence we first search for existing media ports for same session and use
testing of OpenH323 based asterisk assumed that same ports are used.
Hence we first search for existing media ports for same session and use
them. This should take care of all cases.
*/
if(call->mediaInfo)
@ -72,7 +72,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
pMediaInfo = pMediaInfo->next;
}
}
if(pMediaInfo)
{
OOTRACEDBGC3("Using configured media info (%s, %s)\n", call->callType,
@ -80,7 +80,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
pNewChannel->localRtpPort = pMediaInfo->lMediaRedirPort ? pMediaInfo->lMediaRedirPort : pMediaInfo->lMediaPort;
/* check MediaRedirPort here because RedirCPort is ReditPort + 1 and can't be 0 ;) */
pNewChannel->localRtcpPort = pMediaInfo->lMediaRedirPort ? pMediaInfo->lMediaRedirCPort : pMediaInfo->lMediaCntrlPort;
/* If user application has not specified a specific ip and is using
/* If user application has not specified a specific ip and is using
multihomed mode, substitute appropriate ip.
*/
if(!strcmp(pMediaInfo->lMediaIP, "0.0.0.0") || !strcmp(pMediaInfo->lMediaIP, "::"))
@ -102,7 +102,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
pNewChannel->localRtcpPort = ooGetNextPort (OORTP);
strcpy(pNewChannel->localIP, call->localIP);
}
/* Add new channel to the list */
pNewChannel->next = NULL;
if(!call->logicalChans) {
@ -113,7 +113,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
while(pChannel->next) pChannel = pChannel->next;
pChannel->next = pNewChannel;
}
/* increment logical channels */
call->noOfLogicalChannels++;
OOTRACEINFO3("Created new logical channel entry (%s, %s)\n", call->callType,
@ -144,22 +144,22 @@ OOLogicalChannel* ooFindLogicalChannelByLogicalChannelNo(OOH323CallData *call,
return pLogicalChannel;
}
OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
H245OpenLogicalChannel *olc)
{
H245DataType * psDataType=NULL;
H245H2250LogicalChannelParameters * pslcp=NULL;
OOTRACEDBGC4("ooFindLogicalChannel by olc %d (%s, %s)\n",
OOTRACEDBGC4("ooFindLogicalChannel by olc %d (%s, %s)\n",
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
if(olc->m.reverseLogicalChannelParametersPresent)
{
OOTRACEDBGC3("Finding receive channel (%s,%s)\n", call->callType,
OOTRACEDBGC3("Finding receive channel (%s,%s)\n", call->callType,
call->callToken);
psDataType = &olc->reverseLogicalChannelParameters.dataType;
/* Only H2250LogicalChannelParameters are supported */
if(olc->reverseLogicalChannelParameters.multiplexParameters.t !=
T_H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters){
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
return NULL;
}
@ -168,14 +168,14 @@ OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
return ooFindLogicalChannel(call, pslcp->sessionID, "receive", psDataType);
}
else{
OOTRACEDBGC3("Finding transmit channel (%s, %s)\n", call->callType,
OOTRACEDBGC3("Finding transmit channel (%s, %s)\n", call->callType,
call->callToken);
psDataType = &olc->forwardLogicalChannelParameters.dataType;
/* Only H2250LogicalChannelParameters are supported */
if(olc->forwardLogicalChannelParameters.multiplexParameters.t !=
if(olc->forwardLogicalChannelParameters.multiplexParameters.t !=
T_H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters)
{
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
return NULL;
}
@ -184,7 +184,7 @@ OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
}
}
OOLogicalChannel * ooFindLogicalChannel(OOH323CallData *call, int sessionID,
OOLogicalChannel * ooFindLogicalChannel(OOH323CallData *call, int sessionID,
char *dir, H245DataType * dataType)
{
OOLogicalChannel * pChannel = NULL;
@ -246,7 +246,7 @@ OOLogicalChannel* ooGetTransmitLogicalChannel
while(pChannel)
{
OOTRACEINFO6("Listing logical channel %d cap %d state %d for (%s, %s)\n",
pChannel->channelNo, pChannel->chanCap->cap, pChannel->state,
pChannel->channelNo, pChannel->chanCap->cap, pChannel->state,
call->callType, call->callToken);
if(!strcmp(pChannel->dir, "transmit") && pChannel->state != OO_LOGICALCHAN_IDLE &&
pChannel->state != OO_LOGICALCHAN_PROPOSEDFS)
@ -283,14 +283,14 @@ int ooClearAllLogicalChannels(OOH323CallData *call)
OOTRACEINFO3("Clearing all logical channels (%s, %s)\n", call->callType,
call->callToken);
temp = call->logicalChans;
while(temp)
{
prev = temp;
temp = temp->next;
ooClearLogicalChannel(call, prev->channelNo);/* TODO: efficiency - This causes re-search
of of logical channel in the list. Can be
ooClearLogicalChannel(call, prev->channelNo);/* TODO: efficiency - This causes re-search
of logical channel in the list. Can be
easily improved.*/
}
call->logicalChans = NULL;
@ -321,7 +321,7 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
if(epCap->stopReceiveChannel)
{
epCap->stopReceiveChannel(call, pLogicalChannel);
OOTRACEINFO4("Stopped Receive channel %d (%s, %s)\n",
OOTRACEINFO4("Stopped Receive channel %d (%s, %s)\n",
channelNo, call->callType, call->callToken);
}
else{
@ -336,12 +336,12 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
if(epCap->stopTransmitChannel)
{
epCap->stopTransmitChannel(call, pLogicalChannel);
OOTRACEINFO4("Stopped Transmit channel %d (%s, %s)\n",
OOTRACEINFO4("Stopped Transmit channel %d (%s, %s)\n",
channelNo, call->callType, call->callToken);
}
else{
OOTRACEERR4("ERROR:No callback registered for stopTransmitChannel"
" %d (%s, %s)\n", channelNo, call->callType,
" %d (%s, %s)\n", channelNo, call->callType,
call->callToken);
}
}
@ -355,11 +355,11 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
int ooRemoveLogicalChannel(OOH323CallData *call, int ChannelNo)
{
OOLogicalChannel * temp = NULL, *prev=NULL;
OOLogicalChannel * temp = NULL, *prev=NULL;
if(!call->logicalChans)
{
OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found "
"Empty channel List(%s, %s)\n", ChannelNo, call->callType,
"Empty channel List(%s, %s)\n", ChannelNo, call->callType,
call->callToken);
return OO_FAILED;
}
@ -381,23 +381,23 @@ int ooRemoveLogicalChannel(OOH323CallData *call, int ChannelNo)
prev = temp;
temp = temp->next;
}
OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found "
"(%s, %s)\n", ChannelNo, call->callType, call->callToken);
return OO_FAILED;
}
/*
Change the state of the channel as established and close all other
channels with same session IDs. This is useful for handling fastStart,
/*
Change the state of the channel as established and close all other
channels with same session IDs. This is useful for handling fastStart,
as the endpoint can open multiple logical channels for same sessionID.
Once the remote endpoint confirms it's selection, all other channels for
Once the remote endpoint confirms it's selection, all other channels for
the same sessionID must be closed.
*/
int ooOnLogicalChannelEstablished
(OOH323CallData *call, OOLogicalChannel * pChannel)
{
OOLogicalChannel * temp = NULL, *prev=NULL;
OOLogicalChannel * temp = NULL, *prev=NULL;
OOTRACEDBGC3("In ooOnLogicalChannelEstablished (%s, %s)\n",
call->callType, call->callToken);
pChannel->state = OO_LOGICALCHAN_ESTABLISHED;
@ -417,4 +417,3 @@ int ooOnLogicalChannelEstablished
}
return OO_OK;
}

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooLogChan.h
* @file ooLogChan.h
* This file contains structures and functions for maintaining information
* on logical channels within the stack.
*/
@ -34,13 +34,13 @@ extern "C" {
struct ooH323EpCapability;
struct OOH323CallData;
/**
/**
* Logical channel states.
*/
typedef enum {
OO_LOGICAL_CHAN_UNKNOWN,
OO_LOGICALCHAN_IDLE,
OO_LOGICALCHAN_PROPOSED,
OO_LOGICAL_CHAN_UNKNOWN,
OO_LOGICALCHAN_IDLE,
OO_LOGICALCHAN_PROPOSED,
OO_LOGICALCHAN_ESTABLISHED,
OO_LOGICALCHAN_PROPOSEDFS,
OO_LOGICALCHAN_CLOSEPENDING
@ -60,7 +60,7 @@ typedef struct OOLogicalChannel {
int localRtpPort;
int localRtcpPort;
char localIP[2+8*4+7];
OOLogicalChannelState state;
OOLogicalChannelState state;
struct ooH323EpCapability *chanCap;
struct OOLogicalChannel *next;
} OOLogicalChannel;
@ -70,7 +70,7 @@ typedef struct OOLogicalChannel {
/**
* This function is used to add a new logical channel entry into the list
* of currently active logical channels.
* @param call Pointer to the call for which new logical channel
* @param call Pointer to the call for which new logical channel
* entry has to be created.
* @param channelNo Channel number for the new channel entry.
* @param sessionID Session identifier for the new channel.
@ -80,26 +80,26 @@ typedef struct OOLogicalChannel {
* @return Pointer to logical channel, on success. NULL, on failure
*/
EXTERN ooLogicalChannel* ooAddNewLogicalChannel
(struct OOH323CallData *call, int channelNo, int sessionID,
(struct OOH323CallData *call, int channelNo, int sessionID,
char *dir, ooH323EpCapability *epCap);
/**
* This function is used to find a logical channel using the logical
* This function is used to find a logical channel using the logical
* channel number as a key.
* @param call Pointer to the call for which logical channel is
* @param call Pointer to the call for which logical channel is
* required.
* @param channelNo Forward Logical Channel number for the logical channel
*
* @return Pointer to the logical channel if found, NULL
* otherwise.
* @return Pointer to the logical channel if found, NULL
* otherwise.
*/
EXTERN ooLogicalChannel* ooFindLogicalChannelByLogicalChannelNo
(struct OOH323CallData *call, int channelNo);
/**
* This function is called when a new logical channel is established. It is
* particularly useful in case of faststart. When the remote endpoint selects
* one of the proposed alternatives, other channels for the same session type
* This function is called when a new logical channel is established. It is
* particularly useful in case of faststart. When the remote endpoint selects
* one of the proposed alternatives, other channels for the same session type
* need to be closed. This function is used for that.
*
* @param call Handle to the call which owns the logical channel.
@ -110,24 +110,24 @@ EXTERN int ooOnLogicalChannelEstablished
(struct OOH323CallData *call, OOLogicalChannel * pChannel);
/**
* This function is used to retrieve a logical channel with a particular
* sessionID. Note that there can be two entries of logical channel, one in
* each direction. This function will return the first channel which has the
* This function is used to retrieve a logical channel with a particular
* sessionID. Note that there can be two entries of logical channel, one in
* each direction. This function will return the first channel which has the
* same session ID.
* @param call Handle to the call which owns the channels to be searched.
* @param sessionID Session id of the session which is to be searched for.
* @param dir Direction of the channel.(transmit/receive)
*
* @return Returns a pointer to the logical channel if found, NULL
* @return Returns a pointer to the logical channel if found, NULL
* otherwise.
*/
EXTERN ooLogicalChannel* ooGetLogicalChannel
(struct OOH323CallData *call, int sessionID, char *dir);
/**
* This function is used to remove a logical channel from the list of
* This function is used to remove a logical channel from the list of
* channels within the call structure.
* @param call Pointer to the call from which logical channel has
* @param call Pointer to the call from which logical channel has
* to be removed.
* @param ChannelNo Forward logical channel number of the channel to be
* removed.
@ -137,7 +137,7 @@ EXTERN int ooRemoveLogicalChannel (struct OOH323CallData *call, int ChannelNo);
/**
* This function is used to cleanup a logical channel. It first stops media if
* it is still active and then removes the channel from the list, freeing up
* it is still active and then removes the channel from the list, freeing up
* all the associated memory.
* @param call Handle to the call which owns the logical channel.
* @param channelNo Channel number identifying the channel.
@ -147,7 +147,7 @@ EXTERN int ooRemoveLogicalChannel (struct OOH323CallData *call, int ChannelNo);
EXTERN int ooClearLogicalChannel (struct OOH323CallData *call, int channelNo);
/**
* This function is used to cleanup all the logical channels associated with
* This function is used to cleanup all the logical channels associated with
* the call.
* @param call Handle to the call which owns the channels.
*
@ -184,8 +184,8 @@ EXTERN OOLogicalChannel * ooFindLogicalChannel
EXTERN OOLogicalChannel* ooGetTransmitLogicalChannel(struct OOH323CallData *call);
EXTERN OOLogicalChannel* ooGetReceiveLogicalChannel(struct OOH323CallData *call);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -17,6 +17,10 @@
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#ifdef SOLARIS
#include <sys/sockio.h>
#endif
#include "asterisk/io.h"
#include "asterisk/lock.h"
#include "asterisk/utils.h"
@ -81,10 +85,10 @@ int ooSocketsInit ()
WSADATA wsaData;
int err;
if (inited) return ASN_OK;
if (inited) return ASN_OK;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup (wVersionRequested, &wsaData);
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
@ -102,58 +106,58 @@ int ooSocketsInit ()
// ws32 = LoadLibrary ("WSOCK32.DLL");
ws32 = LoadLibrary ("WS2_32.DLL");
if (ws32 == NULL) return ASN_E_NOTINIT;
wsaStartup = (LPFN_WSASTARTUP) GetProcAddress (ws32, "WSAStartup");
if (wsaStartup == NULL) return ASN_E_NOTINIT;
send = (LPFN_SEND) GetProcAddress (ws32, "send");
if (send == NULL) return ASN_E_NOTINIT;
socket = (LPFN_SOCKET) GetProcAddress (ws32, "socket");
if (socket == NULL) return ASN_E_NOTINIT;
setsockopt = (LPFN_SETSOCKOPT) GetProcAddress (ws32, "setsockopt");
if (setsockopt == NULL) return ASN_E_NOTINIT;
bind = (LPFN_BIND) GetProcAddress (ws32, "bind");
if (bind == NULL) return ASN_E_NOTINIT;
htonl = (LPFN_HTONL) GetProcAddress (ws32, "htonl");
if (htonl == NULL) return ASN_E_NOTINIT;
htons = (LPFN_HTONS) GetProcAddress (ws32, "htons");
if (htons == NULL) return ASN_E_NOTINIT;
connect = (LPFN_CONNECT) GetProcAddress (ws32, "connect");
if (connect == NULL) return ASN_E_NOTINIT;
listen = (LPFN_LISTEN) GetProcAddress (ws32, "listen");
if (listen == NULL) return ASN_E_NOTINIT;
accept = (LPFN_ACCEPT) GetProcAddress (ws32, "accept");
if (accept == NULL) return ASN_E_NOTINIT;
inet_addr = (LPFN_INET_ADDR) GetProcAddress (ws32, "inet_addr");
if (inet_addr == NULL) return ASN_E_NOTINIT;
ntohl = (LPFN_NTOHL) GetProcAddress (ws32, "ntohl");
if (ntohl == NULL) return ASN_E_NOTINIT;
ntohs = (LPFN_NTOHS) GetProcAddress (ws32, "ntohs");
if (ntohs == NULL) return ASN_E_NOTINIT;
recv = (LPFN_RECV) GetProcAddress (ws32, "recv");
if (recv == NULL) return ASN_E_NOTINIT;
shutdown = (LPFN_SHUTDOWN) GetProcAddress (ws32, "shutdown");
if (shutdown == NULL) return ASN_E_NOTINIT;
closesocket = (LPFN_CLOSESOCKET) GetProcAddress (ws32, "closesocket");
if (closesocket == NULL) return ASN_E_NOTINIT;
getsockname = (LPFN_GETSOCKNAME) GetProcAddress (ws32, "getsockname");
if (getsockname == NULL) return ASN_E_NOTINIT;
ioctlsocket = (LPFN_IOCTLSOCKET) GetProcAddress(ws32, "ioctlsocket");
if(ioctlsocket == NULL) return ASN_E_NOTINIT;
@ -174,15 +178,15 @@ int ooSocketsInit ()
gethostbyname = (LPFN_GETHOSTBYNAME) GetProcAddress (ws32, "gethostbyname");
if (gethostbyname == NULL) return ASN_E_NOTINIT;
WSAGetLastError = (LPFN_WSAGETLASTERROR) GetProcAddress (ws32,
WSAGetLastError = (LPFN_WSAGETLASTERROR) GetProcAddress (ws32,
"WSAGetLastError");
if (WSAGetLastError == NULL) return ASN_E_NOTINIT;
WSACleanup = (LPFN_WSACLEANUP) GetProcAddress (ws32, "WSACleanup");
if (WSACleanup == NULL) return ASN_E_NOTINIT;
if (wsaStartup (MAKEWORD(1, 1), &wsaData) == -1) return ASN_E_NOTINIT;
#endif
return ASN_OK;
@ -195,7 +199,7 @@ typedef int OOSOCKLEN;
typedef socklen_t OOSOCKLEN;
#endif
int ooSocketCreate (OOSOCKET* psocket, int family)
int ooSocketCreate (OOSOCKET* psocket, int family)
{
int on;
OOSOCKET sock;
@ -214,14 +218,14 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
SOCK_STREAM,
0);
}
if (sock == OOSOCKET_INVALID){
OOTRACEERR1("Error:Failed to create TCP socket\n");
return ASN_E_INVSOCKET;
}
on = 1;
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
(const char* ) &on, sizeof (on)) == -1)
{
OOTRACEERR1("Error:Failed to set socket option SO_REUSEADDR\n");
@ -229,7 +233,7 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
}
linger.l_onoff = 1;
linger.l_linger = 0;
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
(const char* ) &linger, sizeof (linger)) == -1)
{
OOTRACEERR1("Error:Failed to set socket option linger\n");
@ -246,7 +250,7 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
return ASN_OK;
}
int ooSocketCreateUDP (OOSOCKET* psocket, int family)
int ooSocketCreateUDP (OOSOCKET* psocket, int family)
{
int on;
OOSOCKET sock;
@ -266,7 +270,7 @@ int ooSocketCreateUDP (OOSOCKET* psocket, int family)
}
on = 1;
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
(const char* ) &on, sizeof (on)) == -1)
{
OOTRACEERR1("Error:Failed to set socket option SO_REUSEADDR\n");
@ -276,7 +280,7 @@ int ooSocketCreateUDP (OOSOCKET* psocket, int family)
/*
linger.l_onoff = 1;
linger.l_linger = 0;
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
(const char* ) &linger, sizeof (linger)) == -1)
return ASN_E_INVSOCKET;
*/
@ -292,7 +296,7 @@ int ooSocketClose (OOSOCKET socket)
return ASN_OK;
}
int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
{
struct ast_sockaddr m_addr;
@ -300,7 +304,7 @@ int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
if (socket == OOSOCKET_INVALID)
{
{
OOTRACEERR1("Error:Invalid socket passed to bind\n");
return ASN_E_INVSOCKET;
}
@ -345,7 +349,7 @@ int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, int *fam
host = ast_sockaddr_stringify_addr(&addr);
if(host && strlen(host) < (unsigned)len)
strcpy(ip, host);
strcpy(ip, host);
else{
OOTRACEERR1("Error:Insufficient buffer for ip address - "
"ooSocketGetIpAndPort\n");
@ -363,7 +367,7 @@ int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, int *fam
return ASN_OK;
}
int ooSocketListen (OOSOCKET socket, int maxConnection)
int ooSocketListen (OOSOCKET socket, int maxConnection)
{
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
@ -373,8 +377,8 @@ int ooSocketListen (OOSOCKET socket, int maxConnection)
return ASN_OK;
}
int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
char* destAddr, int* destPort)
int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
char* destAddr, int* destPort)
{
struct ast_sockaddr addr;
char* host = NULL;
@ -386,7 +390,7 @@ int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
if (*pNewSocket <= 0) return ASN_E_INVSOCKET;
if (destAddr != 0) {
if ((host = ast_sockaddr_stringify_addr(&addr)) != NULL);
if ((host = ast_sockaddr_stringify_addr(&addr)) != NULL)
strncpy(destAddr, host, strlen(host));
}
if (destPort != 0)
@ -395,15 +399,15 @@ int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
return ASN_OK;
}
int ooSocketConnect (OOSOCKET socket, const char* host, int port)
int ooSocketConnect (OOSOCKET socket, const char* host, int port)
{
struct ast_sockaddr m_addr;
if (socket == OOSOCKET_INVALID)
{
{
return ASN_E_INVSOCKET;
}
memset (&m_addr, 0, sizeof (m_addr));
ast_parse_arg(host, PARSE_ADDR, &m_addr);
ast_sockaddr_set_port(&m_addr, port);
@ -416,13 +420,13 @@ int ooSocketConnect (OOSOCKET socket, const char* host, int port)
}
/*
// **Need to add check whether complete data was sent by checking the return
// **value of send and if complete data is not sent then add mechanism to
// **value of send and if complete data is not sent then add mechanism to
// **send remaining bytes. This will make ooSocketSend call atomic.
*/
int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata, ASN1UINT size)
{
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
if (send (socket, (const char*) pdata, size, SEND_FLAGS) == -1)
return ASN_E_INVSOCKET;
return ASN_OK;
@ -433,14 +437,14 @@ int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata, ASN1UINT size,
{
struct sockaddr_in m_addr;
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
memset (&m_addr, 0, sizeof (m_addr));
m_addr.sin_family = AF_INET;
m_addr.sin_port = htons ((unsigned short)port);
m_addr.sin_addr.s_addr = inet_addr (host);
if (sendto (socket, (const char*) pdata, size, SEND_FLAGS,
(const struct sockaddr*)&m_addr,
if (sendto (socket, (const char*) pdata, size, SEND_FLAGS,
(const struct sockaddr*)&m_addr,
sizeof(m_addr)) == -1)
return ASN_E_INVSOCKET;
return ASN_OK;
@ -478,8 +482,8 @@ int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf, ASN1UINT bufsize,
addrlen = sizeof(m_addr);
memset (&m_addr, 0, sizeof (m_addr));
if ((len = recvfrom (socket, (char*) pbuf, bufsize, 0,
if ((len = recvfrom (socket, (char*) pbuf, bufsize, 0,
(struct sockaddr*)&m_addr, (socklen_t *) &addrlen)) == -1)
return ASN_E_INVSOCKET;
@ -496,12 +500,12 @@ int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf, ASN1UINT bufsize,
return len;
}
int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval * timeout)
{
int ret;
int ret;
#if defined (_WIN32)
ret = select(nfds, readfds, writefds, exceptfds,
ret = select(nfds, readfds, writefds, exceptfds,
(const struct timeval *) timeout);
#else
ret = select(nfds, readfds, writefds, exceptfds, timeout);
@ -517,7 +521,7 @@ int ooSocketPoll(struct pollfd *pfds, int nfds, int timeout)
int ooPDRead(struct pollfd *pfds, int nfds, int fd)
{
int i;
for (i=0;i<nfds;i++)
for (i=0;i<nfds;i++)
if (pfds[i].fd == fd && (pfds[i].revents & POLLIN))
return 1;
return 0;
@ -548,8 +552,8 @@ int ooGetLocalIPAddress(char * pIPAddrs)
if (hp->h_addrtype == AF_INET6) {
struct in6_addr i;
memcpy(&i, hp->h_addr, sizeof(i));
strcpy(pIPAddrs, (inet_ntop(AF_INET6, &i,
hostname, sizeof(hostname))) == NULL ? "::1" :
strcpy(pIPAddrs, (inet_ntop(AF_INET6, &i,
hostname, sizeof(hostname))) == NULL ? "::1" :
inet_ntop(AF_INET6, &i, hostname, sizeof(hostname)));
} else {
struct in_addr i;
@ -566,7 +570,7 @@ int ooGetLocalIPAddress(char * pIPAddrs)
return ASN_OK;
}
/* int ooSocketStrToAddr (const char* pIPAddrStr, OOIPADDR* pIPAddr)
/* int ooSocketStrToAddr (const char* pIPAddrStr, OOIPADDR* pIPAddr)
{
int b1, b2, b3, b4;
int rv = sscanf (pIPAddrStr, "%d.%d.%d.%d", &b1, &b2, &b3, &b4);
@ -574,7 +578,7 @@ int ooGetLocalIPAddress(char * pIPAddrs)
(b1 < 0 || b1 > 256) || (b2 < 0 || b2 > 256) ||
(b3 < 0 || b3 > 256) || (b4 < 0 || b4 > 256))
return ASN_E_INVPARAM;
*pIPAddr = ((b1 & 0xFF) << 24) | ((b2 & 0xFF) << 16) |
*pIPAddr = ((b1 & 0xFF) << 24) | ((b2 & 0xFF) << 16) |
((b3 & 0xFF) << 8) | (b4 & 0xFF);
return ASN_OK;
}
@ -596,9 +600,9 @@ int ooSocketConvertIpToNwAddr(char *inetIp, unsigned char *netIp)
OOTRACEERR1("Error:Failed to convert address\n");
return -1;
}
#endif
memcpy(netIp, (char*)&sin.sin_addr.s_addr, sizeof(unsigned long));
return ASN_OK;
}
@ -608,7 +612,7 @@ int ooSocketAddrToStr (OOIPADDR ipAddr, char* pbuf, int bufsize)
char buf1[5], buf2[5], buf3[5], buf4[5];
int cnt = 0;
if (bufsize < 8)
if (bufsize < 8)
return ASN_E_BUFOVFLW;
cnt += sprintf (buf1, "%lu", (ipAddr >> 24) & 0xFF);
@ -656,7 +660,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
if(ooSocketCreateUDP(&sock, 4)!= ASN_OK)
{
OOTRACEERR1("Error:Failed to create udp socket - "
"ooSocketGetInterfaceList\n");
"ooSocketGetInterfaceList\n");
return -1;
}
#ifdef SIOCGIFNUM
@ -668,7 +672,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
#else
ifNum = 50;
#endif
ifc.ifc_len = ifNum * sizeof(struct ifreq);
ifc.ifc_req = (struct ifreq *)memAlloc(pctxt, ifNum *sizeof(struct ifreq));
if(!ifc.ifc_req)
@ -688,7 +692,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
#ifdef ifr_netmask
char mask[50];
#endif
pIf = (struct OOInterface*)memAlloc(pctxt, sizeof(struct OOInterface));
pName = (char*)memAlloc(pctxt, strlen(ifName->ifr_name)+1);
if(!pIf)
@ -698,15 +702,15 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
return -1;
}
OOTRACEDBGA2("\tInterface name: %s\n", ifName->ifr_name);
strcpy(ifReq.ifr_name, ifName->ifr_name);
strcpy(pName, ifName->ifr_name);
pIf->name = pName;
/* Check whether the interface is up*/
if (ioctl(sock, SIOCGIFFLAGS, &ifReq) < 0) {
OOTRACEERR2("Error:Unable to determine status of interface %s\n",
OOTRACEERR2("Error:Unable to determine status of interface %s\n",
pName);
memFreePtr(pctxt, pIf->name);
memFreePtr(pctxt, pIf);
@ -721,9 +725,9 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
}
/* Retrieve interface address */
if (ioctl(sock, SIOCGIFADDR, &ifReq) < 0)
if (ioctl(sock, SIOCGIFADDR, &ifReq) < 0)
{
OOTRACEWARN2("Warn:Unable to determine address of interface %s\n",
OOTRACEWARN2("Warn:Unable to determine address of interface %s\n",
pName);
memFreePtr(pctxt, pIf->name);
memFreePtr(pctxt, pIf);
@ -742,11 +746,11 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
return -1;
}
strcpy(pIf->addr, addr);
#ifdef ifr_netmask
if (ioctl(sock, SIOCGIFNETMASK, &ifReq) < 0)
if (ioctl(sock, SIOCGIFNETMASK, &ifReq) < 0)
{
OOTRACEWARN2("Warn:Unable to determine mask for interface %s\n",
OOTRACEWARN2("Warn:Unable to determine mask for interface %s\n",
pName);
memFreePtr(pctxt, pIf->name);
memFreePtr(pctxt, pIf->addr);
@ -795,7 +799,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
*/
}
}
}
return ASN_OK;
}
#endif

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooSocket.h
/**
* @file ooSocket.h
* Common runtime constants, data structure definitions, and run-time functions
* to support the sockets' operations.
*/
@ -60,7 +60,7 @@ extern "C" {
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
/**
* @defgroup sockets Socket Layer
* @{
*/
@ -75,7 +75,7 @@ typedef int OOSOCKET; /**< Socket's handle */
#define OOSOCKET_INVALID ((OOSOCKET)-1)
/**
/**
* The IP address represented as unsigned long value. The most significant 8
* bits in this unsigned long value represent the first number of the IP
* address. The least significant 8 bits represent the last number of the IP
@ -115,7 +115,7 @@ typedef struct OOInterface{
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
EXTERN int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
char* destAddr, int* destPort);
/**
@ -185,7 +185,7 @@ EXTERN int ooSocketConnect (OOSOCKET socket, const char* host, int port);
EXTERN int ooSocketCreate (OOSOCKET* psocket, int family);
/**
* This function creates a UDP datagram socket.
* This function creates a UDP datagram socket.
*
* @param psocket The pointer to the socket's handle variable to receive
* the handle of new socket.
@ -204,7 +204,7 @@ EXTERN int ooSocketCreateUDP (OOSOCKET* psocket, int family);
EXTERN int ooSocketsInit (void);
/**
* This function terminates use of sockets by an application. This function
* This function terminates use of sockets by an application. This function
* must be called after done with sockets.
*
* @return Completion status of operation: 0 (ASN_OK) = success,
@ -256,17 +256,17 @@ EXTERN int ooSocketRecvPeek
* @return If no error occurs, returns the number of bytes
* received. Otherwise, the negative value is error code.
*/
EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
ASN1UINT bufsize);
/**
* This function receives data from a connected/unconnected socket. It is used
* to read incoming data on sockets. It populates the remotehost and
* remoteport parameters with information of remote host. See description of
* to read incoming data on sockets. It populates the remotehost and
* remoteport parameters with information of remote host. See description of
* 'recvfrom' socket function for further details.
*
* @param socket The socket's handle created by call to ooSocketCreate
*
*
* @param pbuf Pointer to the buffer for the incoming data.
* @param bufsize Length of the buffer.
* @param remotehost Pointer to a buffer in which remote ip address
@ -279,7 +279,7 @@ EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
* received. Otherwise, negative value.
*/
EXTERN int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf,
ASN1UINT bufsize, char * remotehost,
ASN1UINT bufsize, char * remotehost,
ASN1UINT hostBufLen, int * remoteport);
/**
* This function sends data on a connected socket. It is used to write outgoing
@ -293,47 +293,47 @@ EXTERN int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf,
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata,
EXTERN int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata,
ASN1UINT size);
/**
* This function sends data on a connected or unconnected socket. See
* This function sends data on a connected or unconnected socket. See
* description of 'sendto' socket function for further details.
*
* @param socket The socket's handle created by call to ::rtSocketCreate
* or ::rtSocketAccept function.
* @param pdata Buffer containing the data to be transmitted.
* @param size Length of the data in pdata.
* @param remotehost Remote host ip address to which data has to
* @param remotehost Remote host ip address to which data has to
* be sent.
* @param remoteport Remote port ip address to which data has to
* @param remoteport Remote port ip address to which data has to
* be sent.
*
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata,
EXTERN int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata,
ASN1UINT size, const char* remotehost,
int remoteport);
/**
* This function is used for synchronous monitoring of multiple sockets.
* For more information refer to documnetation of "select" system call.
* For more information refer to documnetation of "select" system call.
*
* @param nfds The highest numbered descriptor to be monitored
* @param nfds The highest numbered descriptor to be monitored
* plus one.
* @param readfds The descriptors listed in readfds will be watched for
* @param readfds The descriptors listed in readfds will be watched for
* whether read would block on them.
* @param writefds The descriptors listed in writefds will be watched for
* whether write would block on them.
* @param exceptfds The descriptors listed in exceptfds will be watched for
* exceptions.
* @param timeout Upper bound on amout of time elapsed before select
* returns.
* @param timeout Upper bound on amout of time elapsed before select
* returns.
* @return Completion status of operation: 0 (ASN_OK) = success,
* negative return value is error.
*/
EXTERN int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
EXTERN int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval * timeout) attribute_deprecated;
EXTERN int ooSocketPoll(struct pollfd *pfds, int nfds, int timeout);
@ -379,7 +379,7 @@ EXTERN int ooPDWrite(struct pollfd *pfds, int nfds, int fd);
EXTERN int ooGetLocalIPAddress(char * pIPAddrs);
EXTERN int ooSocketGetSockName(OOSOCKET socket, struct sockaddr_in *name,
EXTERN int ooSocketGetSockName(OOSOCKET socket, struct sockaddr_in *name,
socklen_t *size);
@ -389,7 +389,7 @@ EXTERN short ooSocketHTONS(short val);
/**
* This function is used to retrieve the ip and port number used by the socket
* passed as parameter. It internally uses getsockname system call for this
* passed as parameter. It internally uses getsockname system call for this
* purpose.
* @param socket Socket for which ip and port has to be determined.
* @param ip Buffer in which ip address will be returned.
@ -403,12 +403,11 @@ EXTERN int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, i
EXTERN int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* _OOSOCKET_H_ */

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -57,14 +57,14 @@ int isRunning(char *callToken) {
return 0;
}
OOStkCmdStat ooMakeCall
OOStkCmdStat ooMakeCall
(const char* dest, char* callToken, size_t bufsiz, ooCallOptions *opts)
{
OOStackCommand cmd;
if(!callToken)
return OO_STKCMD_INVALIDPARAM;
/* Generate call token*/
if (ooGenerateOutgoingCallToken (callToken, bufsiz) != OO_OK){
@ -86,14 +86,14 @@ OOStkCmdStat ooMakeCall
}
strcpy((char*)cmd.param1, dest);
cmd.param2 = (void*) malloc(strlen(callToken)+1);
if(!cmd.param2)
{
free(cmd.param1);
return OO_STKCMD_MEMERR;
}
strcpy((char*)cmd.param2, callToken);
if(!opts)
@ -122,7 +122,7 @@ OOStkCmdStat ooMakeCall
return OO_STKCMD_SUCCESS;
}
OOStkCmdStat ooRunCall
OOStkCmdStat ooRunCall
(const char* dest, char* callToken, size_t bufsiz, ooCallOptions *opts)
{
OOStackCommand cmd;
@ -145,7 +145,7 @@ OOStkCmdStat ooRunCall
if(!callToken)
return OO_STKCMD_INVALIDPARAM;
memset(&cmd, 0, sizeof(OOStackCommand));
cmd.type = OO_CMD_MAKECALL;
@ -157,14 +157,14 @@ OOStkCmdStat ooRunCall
strcpy((char*)cmd.param1, dest);
cmd.plen1 = strlen(dest);
cmd.param2 = (void*) malloc(strlen(callToken)+1);
if(!cmd.param2)
{
free(cmd.param1);
return OO_STKCMD_MEMERR;
}
strcpy((char*)cmd.param2, callToken);
cmd.plen2 = strlen(callToken);
@ -230,7 +230,7 @@ OOStkCmdStat ooManualRingback(const char *callToken)
}
strcpy((char*)cmd.param1, callToken);
cmd.plen1 = strlen(callToken);
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
{
free(cmd.param1);
@ -274,7 +274,7 @@ OOStkCmdStat ooManualProgress(const char *callToken)
}
strcpy((char*)cmd.param1, callToken);
cmd.plen1 = strlen(callToken);
if(ooWriteCallStackCommand(call, &cmd) != OO_OK)
{
free(cmd.param1);
@ -315,7 +315,7 @@ OOStkCmdStat ooAnswerCall(const char *callToken)
return OO_STKCMD_MEMERR;
}
strcpy((char*)cmd.param1, callToken);
cmd.plen1 = strlen(callToken);
cmd.plen1 = strlen(callToken);
if(ooWriteCallStackCommand(call, &cmd) != OO_OK)
{
@ -426,7 +426,7 @@ OOStkCmdStat ooHangCall(const char* callToken, OOCallClearReason reason, int q93
free(cmd.param1);
free(cmd.param2);
free(cmd.param3);
return OO_STKCMD_SUCCESS;
}
@ -443,7 +443,7 @@ OOStkCmdStat ooStopMonitor()
memset(&cmd, 0, sizeof(OOStackCommand));
cmd.type = OO_CMD_STOPMONITOR;
if(ooWriteStackCommand(&cmd) != OO_OK)
return OO_STKCMD_WRITEERR;
@ -485,7 +485,7 @@ OOStkCmdStat ooSendDTMFDigit(const char *callToken, const char* dtmf)
cmd.plen1 = strlen(callToken);
strcpy((char*)cmd.param2, dtmf);
cmd.plen2 = strlen(dtmf);
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
{
free(cmd.param1);
@ -533,7 +533,7 @@ OOStkCmdStat ooSetANI(const char *callToken, const char* ani)
cmd.plen1 = strlen(callToken);
strcpy((char*)cmd.param2, ani);
cmd.plen2 = strlen(ani);
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
{
free(cmd.param1);
@ -643,7 +643,7 @@ OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode)
cmd.plen1 = strlen(callToken);
*((int *) cmd.param2) = isT38Mode;
cmd.plen2 = sizeof(int);
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
{
free(cmd.param1);
@ -672,11 +672,10 @@ const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat)
case OO_STKCMD_WRITEERR:
return "Stack command - write error";
case OO_STKCMD_CONNECTIONERR:
case OO_STKCMD_CONNECTIONERR:
return "Stack command - Failed to create command channel";
default:
return "Invalid status code";
}
}

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooStackCmds.h
* @file ooStackCmds.h
* This file contains stack commands which an user application can use to make
* call, hang call etc.
* call, hang call etc.
*/
#ifndef OO_STACKCMDS_H
@ -38,7 +38,7 @@ extern "C" {
/**
/**
* @defgroup stackcmds Stack Control Commands
* @{
*/
@ -70,11 +70,11 @@ typedef enum OOStackCmdID {
OO_CMD_REQMODE, /*!< Request new mode */
OO_CMD_SETANI, /*! <Set conncted info */
OO_CMD_UPDLC /*! <Update Logical channels */
} OOStackCmdID;
/**
* This structure is used to queue a stack command for processing in
* This structure is used to queue a stack command for processing in
* the event handler loop.
*/
typedef struct OOStackCommand {
@ -99,7 +99,7 @@ typedef struct OOStackCommand {
*
* @return Returns OOStkCmdStat value indication success or failure.
*/
EXTERN OOStkCmdStat ooMakeCall
EXTERN OOStkCmdStat ooMakeCall
(const char* dest, char *callToken, size_t bufsiz, ooCallOptions *opts);
@ -108,7 +108,7 @@ EXTERN OOStkCmdStat ooMakeCall
* This function is used to send a manual ringback message (alerting message)
* for a call. Effective only when manual-ringback is enabled.
* @param callToken Unique token for the call.
*
*
* @return Returns OOStkCmdStat value indication success or failure.
*/
EXTERN OOStkCmdStat ooManualRingback(const char *callToken);
@ -117,7 +117,7 @@ EXTERN OOStkCmdStat ooManualProgress(const char *callToken);
/**
* This function is used to answer a call
* @param callToken Unique token for the call
*
*
* @return Returns OOStkCmdStat value indication success or failure.
*/
EXTERN OOStkCmdStat ooAnswerCall(const char *callToken);
@ -142,7 +142,7 @@ EXTERN OOStkCmdStat ooForwardCall(const char* callToken, char *dest);
EXTERN OOStkCmdStat ooHangCall(const char* callToken, OOCallClearReason reason, int q931cause);
/**
* This command function can be used by an user application to send a DTMF
* This command function can be used by an user application to send a DTMF
* sequence using H.245 UserInputIndication message.
* @param callToken Unique token for the call
* @param alpha Alphanumeric string reperesenting dtmf sequence
@ -168,8 +168,8 @@ EXTERN OOStkCmdStat ooStopMonitor(void);
* @return Text description corresponding to the code.
*/
EXTERN const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat);
/**
* @}
/**
* @}
*/
EXTERN OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode);

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -29,13 +29,13 @@
#endif
/**
* This is a timer list used by test application chansetup only.
* This is a timer list used by test application chansetup only.
*/
DList g_TimerList;
OOTimer* ooTimerCreate
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
OOTimer* ooTimerCreate
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
OOBOOL reRegister)
{
OOTimer* pTimer = (OOTimer*) memAlloc (pctxt, sizeof(OOTimer));
@ -108,7 +108,7 @@ void ooTimerFireExpired (OOCTXT* pctxt, DList *pList)
if (ooTimerExpired (pTimer)) {
/*
* Re-register before calling callback function in case it is
* a long duration callback.
* a long duration callback.
*/
if (pTimer->reRegister) ooTimerReset (pctxt, pList, pTimer);
@ -150,8 +150,8 @@ struct timeval* ooTimerNextTimeout (DList *pList, struct timeval* ptimeout)
ooGetTimeOfDay (&tvstr, 0);
ptimeout->tv_sec =
OOMAX ((int) 0, (int) (ptimer->expireTime.tv_sec - tvstr.tv_sec));
ptimeout->tv_sec =
OOMAX ((int) 0, (int) (ptimer->expireTime.tv_sec - tvstr.tv_sec));
ptimeout->tv_usec = ptimer->expireTime.tv_usec - tvstr.tv_usec;
@ -166,7 +166,7 @@ struct timeval* ooTimerNextTimeout (DList *pList, struct timeval* ptimeout)
return (ptimeout);
}
/*
/*
* Reregister a timer entry. This function is responsible for moving
* the current pointer in the timer list to the next element to be
* processed..

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the LICENSE.txt file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooTimer.h
/**
* @file ooTimer.h
* Timer structures and functions.
*/
#ifndef _OOTIMER_H_
@ -41,7 +41,7 @@ extern "C" {
#endif
/**
* This function computes the relative expiration time from the current
* This function computes the relative expiration time from the current
* time for the given timer object.
*
* @param pTimer Pointer to timer object.
@ -59,7 +59,7 @@ EXTERN void ooTimerComputeExpireTime (OOTimer* pTimer);
* @param reRegister Should timer be re-registered after it expires?
* @return Pointer to created timer object.
*/
EXTERN OOTimer* ooTimerCreate
EXTERN OOTimer* ooTimerCreate
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
OOBOOL reRegister);
@ -80,13 +80,13 @@ EXTERN void ooTimerDelete (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
EXTERN OOBOOL ooTimerExpired (OOTimer* pTimer);
/**
* This function loops through the global timer list and fires all
* This function loops through the global timer list and fires all
* expired timers by calling the registered callback functions.
*/
EXTERN void ooTimerFireExpired (OOCTXT* pctxt, DList* pList);
/**
* This function inserts the given timer object into the correct
* This function inserts the given timer object into the correct
* chronological position in the global timer list.
* @param pctxt Pointer to OOCTXT structure used for memory allocation.
* @param pList List in which timer has to be inserted.
@ -96,7 +96,7 @@ EXTERN void ooTimerFireExpired (OOCTXT* pctxt, DList* pList);
EXTERN int ooTimerInsertEntry (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
/**
* This function calculates the relative time from the current time
* This function calculates the relative time from the current time
* that the first timer in global timer list will expire.
* @param pList Handle to timer list
* @param ptimeout timeval structure to receive timeout value.
@ -105,7 +105,7 @@ EXTERN int ooTimerInsertEntry (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
EXTERN struct timeval* ooTimerNextTimeout (DList* pList, struct timeval* ptimeout);
/**
* This function resets the given timer object if its reregister flag
* This function resets the given timer object if its reregister flag
* is set. Otherwise, it is deleted.
* @param pctxt Pointer to OOCTXT structre used for memory allocation.
* @param pList Pointer to timer list.

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -30,7 +30,7 @@ OOBOOL ooUtilsIsStrEmpty (const char* str)
}
OOBOOL ooIsDailedDigit(const char* str)
OOBOOL ooIsDailedDigit(const char* str)
{
if(str == NULL || *str =='\0') { return FALSE; }
while(*str != '\0')

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooUtils.h
* This file contains general utility functions.
* @file ooUtils.h
* This file contains general utility functions.
*/
#ifndef _OOUTILS_H_
#define _OOUTILS_H_
@ -29,11 +29,11 @@
* @param tabsiz Number of items in the table
* @return Text for item or '?' if idx outside bounds of table
*/
EXTERN const char* ooUtilsGetText
EXTERN const char* ooUtilsGetText
(OOUINT32 idx, const char** table, size_t tabsiz);
/**
* Test if given string value is empty. String is considered to empty
* Test if given string value is empty. String is considered to empty
* if value is NULL or there are no characters in string (strlen == 0).
*
* @param str String to test
@ -43,7 +43,7 @@ EXTERN OOBOOL ooUtilsIsStrEmpty (const char * str);
/**
* Test if given string value is digit string.
* Test if given string value is digit string.
*
* @param str String to test
* @return TRUE if string contains all digits; FALSE otherwise

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooasn1.h
/**
* @file ooasn1.h
* Common ASN.1 runtime constants, data structure definitions, and run-time
* functions to support ASN.1 PER encoding/decoding as defined in the
* functions to support ASN.1 PER encoding/decoding as defined in the
* ITU-T standards.
*/
#ifndef _OOASN1_H_
@ -31,8 +31,8 @@
#include <stddef.h>
#include "dlist.h"
#include "ootrace.h"
/**
* @defgroup cruntime C Runtime Common Functions
/**
* @defgroup cruntime C Runtime Common Functions
* @{
*/
@ -237,7 +237,7 @@ defined(_WIN32)
#elif defined(__IBMC__) || defined(__GNUC__) || defined(__SUNPRO_C) || \
defined(__SUNPRO_CC) || defined(__CC_ARM) || \
defined(__HPUX_CC__) || defined(__HP_aCC)
defined(__HPUX_CC__) || defined(__HP_aCC)
#define ASN1INT64 long long
#else /* !MSC_VER && !__IBMC__ etc */
@ -423,7 +423,7 @@ typedef struct OOCTXT { /* context block */
#endif
/**
* @defgroup mem Memory Allocation Macros and Functions
* @defgroup mem Memory Allocation Macros and Functions
* @ingroup cruntime
*
* Memory allocation functions and macros handle memory management for the
@ -570,7 +570,7 @@ decodeConstrainedStringEx (pctxt, pvalue, permCharSet, 8, 7, 7)
/* Context management functions */
/**
* @defgroup cmfun Context Management Functions
* @defgroup cmfun Context Management Functions
* @{
*
* Context initialization functions handle the allocation, initialization, and
@ -601,7 +601,7 @@ decodeConstrainedStringEx (pctxt, pvalue, permCharSet, 8, 7, 7)
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int initContextBuffer
EXTERN int initContextBuffer
(OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz);
/**
@ -643,17 +643,17 @@ EXTERN int initSubContext (OOCTXT* pctxt, OOCTXT* psrc);
EXTERN void setCtxtFlag (OOCTXT* pctxt, ASN1USINT mask);
EXTERN void clearCtxtFlag (OOCTXT* pctxt, ASN1USINT mask);
EXTERN int setPERBuffer
EXTERN int setPERBuffer
(OOCTXT* pctxt, ASN1OCTET* bufaddr, ASN1UINT bufsiz, ASN1BOOL aligned);
EXTERN int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource);
#define ZEROCONTEXT(pctxt) memset(pctxt,0,sizeof(OOCTXT))
/**
/**
* @} cmfun
*/
/**
* @defgroup errfp Error Formatting and Print Functions
* @defgroup errfp Error Formatting and Print Functions
* @{
*
* Error formatting and print functions allow information about the
@ -664,7 +664,7 @@ EXTERN int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource);
/**
* This function adds an integer parameter to an error information structure.
* Parameter substitution is done in much the same way as it is done in C
* printf statments. The base error message specification that goes along with
* printf statements. The base error message specification that goes along with
* a particular status code may have variable fields built in using '%'
* modifiers. These would be replaced with actual parameter data.
*
@ -680,7 +680,7 @@ EXTERN int errAddIntParm (ASN1ErrInfo* pErrInfo, int errParm);
/**
* This function adds an string parameter to an error information structure.
* Parameter substitution is done in much the same way as it is done in C
* printf statments. The base error message specification that goes along with
* printf statements. The base error message specification that goes along with
* a particular status code may have variable fields built in using '%'
* modifiers. These would be replaced with actual parameter data.
*
@ -691,13 +691,13 @@ EXTERN int errAddIntParm (ASN1ErrInfo* pErrInfo, int errParm);
* @param errprm_p The typed error parameter.
* @return The status of the operation.
*/
EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
const char* errprm_p);
/**
* This function adds an unsigned integer parameter to an error information
* structure. Parameter substitution is done in much the same way as it is done
* in C printf statments. The base error message specification that goes along
* in C printf statements. The base error message specification that goes along
* with a particular status code may have variable fields built in using '%'
* modifiers. These would be replaced with actual parameter data.
*
@ -711,7 +711,7 @@ EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
EXTERN int errAddUIntParm (ASN1ErrInfo* pErrInfo, unsigned int errParm);
EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
ASN1ErrInfo* pDestErrInfo);
/**
@ -719,8 +719,8 @@ EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
* associated with an error message. These parameters are maintained on an
* internal linked list maintained within the error information structure. The
* list memory must be freed when error processing is complete. This function
* is called from within errPrint after teh error has been printed out. It is
* also called in teh freeContext function.
* is called from within errPrint after the error has been printed out. It is
* also called in the freeContext function.
*
* @param pErrInfo A pointer to a structure containing information on the
* error to be printed. Typically, the error info
@ -764,7 +764,7 @@ EXTERN void errPrint (ASN1ErrInfo* pErrInfo);
*/
EXTERN int errReset (ASN1ErrInfo* pErrInfo);
/**
/**
* This function sets error information in an error information structure. The
* information set includes status code, module name, and line number. Location
* information (i.e. module name and line number) is pushed onto a stack within
@ -787,7 +787,7 @@ EXTERN int errReset (ASN1ErrInfo* pErrInfo);
* information and return the status value in one line of
* code.
*/
EXTERN int errSetData (ASN1ErrInfo* pErrInfo, int status,
EXTERN int errSetData (ASN1ErrInfo* pErrInfo, int status,
const char* module, int lno);
#ifndef _COMPACT
@ -802,8 +802,8 @@ errSetData(&(ctxt)->errInfo,stat,__FILE__,__LINE__)
#define LOG_ASN1ERR_AND_FREE(pctxt,stat,lctxt) \
freeContext ((lctxt)), LOG_ASN1ERR(pctxt, stat)
/**
* @}
/**
* @}
*/
#define RT_MH_DONTKEEPFREE 0x1
@ -819,12 +819,12 @@ freeContext ((lctxt)), LOG_ASN1ERR(pctxt, stat)
* @{
*/
/**
* Allocate memory. This macro allocates the given number of bytes. It is
* Allocate memory. This macro allocates the given number of bytes. It is
* similar to the C \c malloc run-time function.
*
*
* @param pctxt - Pointer to a context block
* @param nbytes - Number of bytes of memory to allocate
* @return - Void pointer to allocated memory or NULL if insufficient memory
* @return - Void pointer to allocated memory or NULL if insufficient memory
* was available to fulfill the request.
*/
#define memAlloc(pctxt,nbytes) \
@ -833,41 +833,41 @@ memHeapAlloc(&(pctxt)->pTypeMemHeap,nbytes)
/**
* Allocate and zero memory. This macro allocates the given number of bytes
* and then initializes the memory block to zero.
*
*
* @param pctxt - Pointer to a context block
* @param nbytes - Number of bytes of memory to allocate
* @return - Void pointer to allocated memory or NULL if insufficient memory
* @return - Void pointer to allocated memory or NULL if insufficient memory
* was available to fulfill the request.
*/
#define memAllocZ(pctxt,nbytes) \
memHeapAllocZ(&(pctxt)->pTypeMemHeap,nbytes)
/**
* Reallocate memory. This macro reallocates a memory block (either
* expands or contracts) to the given number of bytes. It is
* Reallocate memory. This macro reallocates a memory block (either
* expands or contracts) to the given number of bytes. It is
* similar to the C \c realloc run-time function.
*
*
* @param pctxt - Pointer to a context block
* @param mem_p - Pointer to memory block to reallocate. This must have been
* @param mem_p - Pointer to memory block to reallocate. This must have been
* allocated using the memHeapAlloc macro or the memHeapAlloc function.
* @param nbytes - Number of bytes of memory to which the block is to be
* @param nbytes - Number of bytes of memory to which the block is to be
* resized.
* @return - Void pointer to allocated memory or NULL if insufficient memory
* was available to fulfill the request. This may be the same as the pmem
* @return - Void pointer to allocated memory or NULL if insufficient memory
* was available to fulfill the request. This may be the same as the pmem
* pointer that was passed in if the block did not need to be relocated.
*/
#define memRealloc(pctxt,mem_p,nbytes) \
memHeapRealloc(&(pctxt)->pTypeMemHeap, (void*)mem_p, nbytes)
/**
* Free memory pointer. This macro frees memory at the given pointer.
* The memory must have been allocated using the memHeapAlloc (or similar)
* macros or the mem memory allocation macros. This macro is
* Free memory pointer. This macro frees memory at the given pointer.
* The memory must have been allocated using the memHeapAlloc (or similar)
* macros or the mem memory allocation macros. This macro is
* similar to the C \c free function.
*
*
* @param pctxt - Pointer to a context block
* @param mem_p - Pointer to memory block to free. This must have
* been allocated using the memHeapAlloc or memAlloc macro or the
* @param mem_p - Pointer to memory block to free. This must have
* been allocated using the memHeapAlloc or memAlloc macro or the
* memHeapAlloc function.
*/
#define memFreePtr(pctxt,mem_p) \
@ -875,34 +875,34 @@ if (memHeapCheckPtr (&(pctxt)->pTypeMemHeap, (void*)mem_p)) \
memHeapFreePtr(&(pctxt)->pTypeMemHeap, (void*)mem_p)
/**
* Free memory associated with a context. This macro frees all memory
* held within a context. This is all memory allocated using the
* memHeapAlloc (and similar macros) and the mem memory allocation
* Free memory associated with a context. This macro frees all memory
* held within a context. This is all memory allocated using the
* memHeapAlloc (and similar macros) and the mem memory allocation
* functions using the given context variable.
*
*
* @param pctxt - Pointer to a context block
*/
#define memFree(pctxt) \
memHeapFreeAll(&(pctxt)->pTypeMemHeap)
/**
* Reset memory associated with a context. This macro resets all memory
* held within a context. This is all memory allocated using the memHeapAlloc
* (and similar macros) and the mem memory allocation functions using the
* Reset memory associated with a context. This macro resets all memory
* held within a context. This is all memory allocated using the memHeapAlloc
* (and similar macros) and the mem memory allocation functions using the
* given context variable.
*
* <p>The difference between this and the ASN1MEMFREE macro is that the
* memory blocks held within the context are not actually freed. Internal
* pointers are reset so the existing blocks can be reused. This can
* provide a performace improvement for repetitive tasks such as decoding
* <p>The difference between this and the ASN1MEMFREE macro is that the
* memory blocks held within the context are not actually freed. Internal
* pointers are reset so the existing blocks can be reused. This can
* provide a performace improvement for repetitive tasks such as decoding
* messages in a loop.
*
*
* @param pctxt - Pointer to a context block
*/
#define memReset(pctxt) \
memHeapReset(&(pctxt)->pTypeMemHeap)
/* Alias for __cdecl modifier; if __cdecl keyword is not supported,
/* Alias for __cdecl modifier; if __cdecl keyword is not supported,
* redefine it as empty macro. */
#if !defined(OSCDECL)
@ -931,10 +931,10 @@ EXTERN void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_);
EXTERN void memHeapRelease (void** ppvMemHeap);
EXTERN void memHeapReset (void** ppvMemHeap);
EXTERN void* memHeapMarkSaved
EXTERN void* memHeapMarkSaved
(void** ppvMemHeap, const void* mem_p, ASN1BOOL saved);
EXTERN void memHeapSetProperty
EXTERN void memHeapSetProperty
(void** ppvMemHeap, ASN1UINT propId, void* pProp);
@ -1049,7 +1049,7 @@ csetvar.charSetAlignedBits = abits;
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeBits
EXTERN int decodeBits
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits);
/**
@ -1072,7 +1072,7 @@ EXTERN int decodeBits
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeBitString
EXTERN int decodeBitString
(OOCTXT* pctxt, ASN1UINT* numbits_p, ASN1OCTET* buffer,
ASN1UINT bufsiz);
@ -1100,7 +1100,7 @@ EXTERN int decodeBitString
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeBMPString
EXTERN int decodeBMPString
(OOCTXT* pctxt, ASN1BMPString* pvalue, Asn116BitCharSet* permCharSet);
/**
@ -1128,7 +1128,7 @@ EXTERN int decodeByteAlign (OOCTXT* pctxt);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConsInteger
EXTERN int decodeConsInteger
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower, ASN1INT upper);
/**
@ -1144,7 +1144,7 @@ EXTERN int decodeConsInteger
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConsUnsigned
EXTERN int decodeConsUnsigned
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower, ASN1UINT upper);
/**
@ -1160,7 +1160,7 @@ EXTERN int decodeConsUnsigned
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
ASN1UINT8* pvalue, ASN1UINT lower, ASN1UINT upper);
/**
@ -1176,7 +1176,7 @@ EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConsUInt16
EXTERN int decodeConsUInt16
(OOCTXT* pctxt, ASN1USINT* pvalue, ASN1UINT lower, ASN1UINT upper);
/**
@ -1196,7 +1196,7 @@ EXTERN int decodeConsUInt16
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConsWholeNumber
EXTERN int decodeConsWholeNumber
(OOCTXT* pctxt, ASN1UINT* padjusted_value, ASN1UINT range_value);
/**
@ -1218,7 +1218,7 @@ EXTERN int decodeConsWholeNumber
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeConstrainedStringEx
EXTERN int decodeConstrainedStringEx
(OOCTXT* pctxt, const char** string, const char* charSet,
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits);
@ -1262,7 +1262,7 @@ EXTERN int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeDynOctetString
EXTERN int decodeDynOctetString
(OOCTXT* pctxt, ASN1DynOctStr* pOctStr);
/**
@ -1321,14 +1321,14 @@ EXTERN int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeOctetString
EXTERN int decodeOctetString
(OOCTXT* pctxt, ASN1UINT* numocts_p, ASN1OCTET* buffer,
ASN1UINT bufsiz);
/**
* This function will decode an ASN.1 open type. This used to be the ASN.1 ANY
* type, but now is used in a variety of applications requiring an encoding
* that can be interpreted by a decoder without prior knowledge of the type
* type, but now is used in a variety of applications requiring an encoding
* that can be interpreted by a decoder without prior knowledge of the type
* of the variable.
*
* @param pctxt Pointer to a context structure. This provides a storage
@ -1342,7 +1342,7 @@ EXTERN int decodeOctetString
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeOpenType
EXTERN int decodeOpenType
(OOCTXT* pctxt, const ASN1OCTET** object_p2, ASN1UINT* numocts_p);
/**
@ -1360,7 +1360,7 @@ EXTERN int decodeOpenType
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeSmallNonNegWholeNumber
EXTERN int decodeSmallNonNegWholeNumber
(OOCTXT* pctxt, ASN1UINT* pvalue);
/**
@ -1374,7 +1374,7 @@ EXTERN int decodeSmallNonNegWholeNumber
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeSemiConsInteger
EXTERN int decodeSemiConsInteger
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower);
/**
@ -1389,7 +1389,7 @@ EXTERN int decodeSemiConsInteger
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int decodeSemiConsUnsigned
EXTERN int decodeSemiConsUnsigned
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower);
/**
@ -1420,7 +1420,7 @@ decodeSemiConsUnsigned(pctxt, pvalue, 0U)
EXTERN int decodeVarWidthCharString (OOCTXT* pctxt, const char** pvalue);
/**
* This function will encode a variable of the ASN.1 BOOLEAN type in
* This function will encode a variable of the ASN.1 BOOLEAN type in
* a single bit.
*
* @param pctxt Pointer to a context structure. This provides a storage
@ -1440,7 +1440,7 @@ EXTERN int encodeBit (OOCTXT* pctxt, ASN1BOOL value);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeBits
EXTERN int encodeBits
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits);
/**
@ -1456,7 +1456,7 @@ EXTERN int encodeBits
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeBitString
EXTERN int encodeBitString
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
/**
@ -1482,7 +1482,7 @@ EXTERN int encodeBitString
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeBMPString
EXTERN int encodeBMPString
(OOCTXT* pctxt, ASN1BMPString value, Asn116BitCharSet* permCharSet);
/**
@ -1532,7 +1532,7 @@ EXTERN int encodeCheckBuffer (OOCTXT* pctxt, ASN1UINT nbytes);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeConstrainedStringEx
EXTERN int encodeConstrainedStringEx
(OOCTXT* pctxt, const char* string, const char* charSet,
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits);
@ -1548,7 +1548,7 @@ EXTERN int encodeConstrainedStringEx
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeConsInteger
EXTERN int encodeConsInteger
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower, ASN1INT upper);
/**
@ -1566,7 +1566,7 @@ EXTERN int encodeConsInteger
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeConsUnsigned
EXTERN int encodeConsUnsigned
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower, ASN1UINT upper);
/**
@ -1584,7 +1584,7 @@ EXTERN int encodeConsUnsigned
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeConsWholeNumber
EXTERN int encodeConsWholeNumber
(OOCTXT* pctxt, ASN1UINT adjusted_value, ASN1UINT range_value);
/**
@ -1608,7 +1608,7 @@ EXTERN int encodeExpandBuffer (OOCTXT* pctxt, ASN1UINT nbytes);
* to get the pointer and length of the message. It is normally used when
* dynamic encoding is specified because the message pointer is not known until
* encoding is complete. If static encoding is used, the message starts at the
* beginning of the specified buffer adn the encodeGetMsgLen function can be
* beginning of the specified buffer adn the encodeGetMsgLen function can be
* used to obtain the lenght of the message.
*
* @param pctxt Pointer to a context structure. This provides a storage
@ -1675,7 +1675,7 @@ EXTERN int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeOctets
EXTERN int encodeOctets
(OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits);
/**
@ -1690,7 +1690,7 @@ EXTERN int encodeOctets
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeOctetString
EXTERN int encodeOctetString
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
/**
@ -1708,7 +1708,7 @@ EXTERN int encodeOctetString
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeOpenType
EXTERN int encodeOpenType
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
/**
@ -1729,15 +1729,15 @@ EXTERN int encodeOpenType
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeOpenTypeExt
EXTERN int encodeOpenTypeExt
(OOCTXT* pctxt, DList* pElemList);
EXTERN int encodeOpenTypeExtBits
EXTERN int encodeOpenTypeExtBits
(OOCTXT* pctxt, DList* pElemList);
/**
* This function will endcode a small, non-negative whole number as specified
* in Section 10.6 of teh X.691 standard. This is a number that is expected to
* in Section 10.6 of the X.691 standard. This is a number that is expected to
* be small, but whose size is potentially unlimited due to the presence of an
* extension marker.
*
@ -1762,7 +1762,7 @@ EXTERN int encodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT value);
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeSemiConsInteger
EXTERN int encodeSemiConsInteger
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower);
/**
@ -1776,7 +1776,7 @@ EXTERN int encodeSemiConsInteger
* - 0 (ASN_OK) = success,
* - negative return value is error.
*/
EXTERN int encodeSemiConsUnsigned
EXTERN int encodeSemiConsUnsigned
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower);
/**
@ -1791,15 +1791,15 @@ EXTERN int encodeSemiConsUnsigned
#define encodeUnconsInteger(pctxt,value) \
encodeSemiConsInteger(pctxt,value,ASN1INT_MIN)
EXTERN int encodeVarWidthCharString (OOCTXT* pctxt, const char* value);
EXTERN int encodeVarWidthCharString (OOCTXT* pctxt, const char* value);
EXTERN int addSizeConstraint (OOCTXT* pctxt, Asn1SizeCnst* pSize);
EXTERN ASN1BOOL alignCharStr
EXTERN ASN1BOOL alignCharStr
(OOCTXT* pctxt, ASN1UINT len, ASN1UINT nbits, Asn1SizeCnst* pSize);
EXTERN int bitAndOctetStringAlignmentTest
(Asn1SizeCnst* pSizeList, ASN1UINT itemCount,
EXTERN int bitAndOctetStringAlignmentTest
(Asn1SizeCnst* pSizeList, ASN1UINT itemCount,
ASN1BOOL bitStrFlag, ASN1BOOL* pAlignFlag);
EXTERN int getPERMsgLen (OOCTXT* pctxt);
@ -1811,20 +1811,20 @@ EXTERN Asn1SizeCnst* getSizeConstraint (OOCTXT* pctxt, ASN1BOOL extbit);
EXTERN int checkSizeConstraint(OOCTXT* pctxt, int size);
EXTERN ASN1UINT getUIntBitCount (ASN1UINT value);
EXTERN Asn1SizeCnst* checkSize
EXTERN Asn1SizeCnst* checkSize
(Asn1SizeCnst* pSizeList, ASN1UINT value, ASN1BOOL* pExtendable);
EXTERN void init16BitCharSet
EXTERN void init16BitCharSet
(Asn116BitCharSet* pCharSet, ASN116BITCHAR first,
ASN116BITCHAR last, ASN1UINT abits, ASN1UINT ubits);
EXTERN ASN1BOOL isExtendableSize (Asn1SizeCnst* pSizeList);
EXTERN void set16BitCharSet
EXTERN void set16BitCharSet
(OOCTXT* pctxt, Asn116BitCharSet* pCharSet, Asn116BitCharSet* pAlphabet);
#ifdef __cplusplus
}
#endif
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file oochannels.h
* This file contains functions to create and use channels.
* @file oochannels.h
* This file contains functions to create and use channels.
*/
#ifndef _OOCHANNELS_H_
#define _OOCHANNELS_H_
@ -46,7 +46,7 @@ extern "C" {
struct OOH323CallData;
struct Q931Message;
/**
/**
* @defgroup channels Channel Management
* @{
*/
@ -60,7 +60,7 @@ EXTERN int ooCreateH323Listener(void);
/**
* This function is used to create a listener for incoming H.245 connections.
* @param call Pointer to call for which H.245 listener has to be created
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCreateH245Listener(struct OOH323CallData *call);
@ -75,7 +75,7 @@ EXTERN int ooCloseH245Listener(struct OOH323CallData *call);
/**
* This function is used to accept incoming H.225 connections.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooAcceptH225Connection(void);
@ -84,16 +84,16 @@ EXTERN int ooAcceptH225Connection(void);
* This function is used to accept an incoming H.245 connection.
* @param call Pointer to a call for which H.245 connection request has
* arrived.
*
*
* @return OO_OK, on succes. OO_FAILED, on failure.
*/
EXTERN int ooAcceptH245Connection(struct OOH323CallData *call);
/**
* This function is used to create an H.225 connection to the remote end point.
* @param call Pointer to the call for which H.225 connection has to be
* @param call Pointer to the call for which H.225 connection has to be
* setup.
* @return OO_OK, on succes. OO_FAILED, on failure.
* @return OO_OK, on succes. OO_FAILED, on failure.
*/
EXTERN int ooCreateH225Connection(struct OOH323CallData *call);
@ -108,17 +108,17 @@ EXTERN int ooCreateH245Connection(struct OOH323CallData *call);
/**
* This function is used to close an H.225 connection
* @param call Pointer to the call for which H.225 connection has to be
* @param call Pointer to the call for which H.225 connection has to be
* closed.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooCloseH225Connection(struct OOH323CallData *call);
/**
* This function is used to close an H.245 connection for a call.
* This function is used to close an H.245 connection for a call.
*
* @param call Pointer to call for which H.245 connection has
* @param call Pointer to call for which H.245 connection has
* to be closed.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
@ -127,7 +127,7 @@ EXTERN int ooCloseH245Connection(struct OOH323CallData *call);
/**
* This function is used to start monitoring channels for the calls. It has
* an infinite loop which uses select to monitor various channels.
*
*
*/
EXTERN int ooMonitorChannels(void);
EXTERN int ooMonitorCmdChannels(void);
@ -144,22 +144,22 @@ EXTERN void ooStopMonitorCallChannels(OOH323CallData *);
/**
* This function is used to receive an H.2250 message received on a calls
* H.225 channel. It receives the message, decodes it and calls
* H.225 channel. It receives the message, decodes it and calls
* 'ooHandleH2250Message' to process the message.
* @param call Pointer to the call for which the message has to be
* @param call Pointer to the call for which the message has to be
* received.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH2250Receive(struct OOH323CallData *call);
/**
* This function is used to receive an H.245 message received on a calls
* H.245 channel. It receives the message, decodes it and calls
* H.245 channel. It receives the message, decodes it and calls
* 'ooHandleH245Message' to process it.
* @param call Pointer to the call for which the message has to be
* @param call Pointer to the call for which the message has to be
* received.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH245Receive(struct OOH323CallData *call);
@ -175,7 +175,7 @@ EXTERN int ooH245Receive(struct OOH323CallData *call);
EXTERN int ooSendH225Msg(struct OOH323CallData *call, struct Q931Message *msg);
/**
* This function is used to Send a message on the channel, when channel is
* This function is used to Send a message on the channel, when channel is
* available for write.
* @param call Pointer to call for which message has to be sent.
* @param type Type of the message.
@ -197,11 +197,11 @@ EXTERN int ooSendMsg(struct OOH323CallData *call, int type);
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooOnSendMsg
(struct OOH323CallData *call, int msgType, int tunneledMsgType,
(struct OOH323CallData *call, int msgType, int tunneledMsgType,
int associatedChan);
/**
* This function is used to check the status of tcp connection.
* This function is used to check the status of tcp connection.
* @param call Handle to the call to which connection belongs.
* @param sock Connected socket.
*
@ -209,11 +209,10 @@ EXTERN int ooOnSendMsg
*/
EXTERN OOBOOL ooChannelsIsConnectionOK(OOH323CallData *call, OOSOCKET sock);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooh245.h
* This file contains functions to support H245 negotiations.
* @file ooh245.h
* This file contains functions to support H245 negotiations.
*/
#ifndef _OOH245HDR_H_
#define _OOH245HDR_H_
@ -43,7 +43,7 @@ extern "C" {
struct OOH323CallData;
/**
/**
* @defgroup h245 H.245 Message Handling
* @{
*/
@ -59,15 +59,15 @@ typedef struct H245Message {
/**
* Creates an outgoing H245 message of the type specified by the type
* argument for the Application context.
* argument for the Application context.
*
* @param msg A pointer to pointer to message which will be assigned to
* @param msg A pointer to pointer to message which will be assigned to
* allocated memory.
* @param type Type of the message to be created.
* (Request/Response/Command/Indication)
*
* @return Completion status of operation: 0 (OO_OK) = success,
* negative return value is error.
* negative return value is error.
*/
EXTERN int ooCreateH245Message(OOH323CallData* call, H245Message **msg, int type);
@ -77,7 +77,7 @@ EXTERN int ooCreateH245Message(OOH323CallData* call, H245Message **msg, int type
* @param call Handle to the call
* @param pmsg Pointer to an H245 message structure.
*
* @return OO_OK, on success. OO_FAILED, on failure
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooFreeH245Message(struct OOH323CallData *call, H245Message *pmsg);
@ -92,8 +92,8 @@ EXTERN int ooFreeH245Message(struct OOH323CallData *call, H245Message *pmsg);
EXTERN int ooSendH245Msg(struct OOH323CallData *call, H245Message *msg);
/**
* This function is used to retrieve an H.245 message enqueued in the outgoing
* queue.
* This function is used to retrieve an H.245 message enqueued in the outgoing
* queue.
* @param call Pointer to the call for which message has to be retrieved.
* @param msgbuf Pointer to a buffer in which the message will be returned.
* @param len Pointer to an int variable which will contain length of
@ -103,17 +103,17 @@ EXTERN int ooSendH245Msg(struct OOH323CallData *call, H245Message *msg);
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooGetOutgoingH245Msgbuf(struct OOH323CallData *call,
ASN1OCTET *msgbuf,
EXTERN int ooGetOutgoingH245Msgbuf(struct OOH323CallData *call,
ASN1OCTET *msgbuf,
int *len, int *msgType);
/**
* This function is used to send out a terminal capability set message.
* This function is used to send out a terminal capability set message.
*
* @param call Pointer to a call for which TerminalCapabilitySet message
* will be sent.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooSendTermCapMsg(struct OOH323CallData *call);
EXTERN int ooSendEmptyTermCapMsg(struct OOH323CallData *call);
@ -128,10 +128,10 @@ EXTERN ASN1UINT ooGenerateStatusDeterminationNumber(void);
/**
* This fuction is used to handle received MasterSlaveDetermination procedure
* messages.
* messages.
* @param call Pointer to the call for which a message is received.
* @param pmsg Pointer to MSD message
* @param msgType Message type indicating whether received message is MSD,
* @param msgType Message type indicating whether received message is MSD,
* MSDAck, MSDReject etc...
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -152,11 +152,11 @@ EXTERN int ooSendMasterSlaveDetermination(struct OOH323CallData *call);
* This function is used to send a MasterSlaveDeterminationAck message.
* @param call Pointer to call for which MasterSlaveDeterminationAck has
* to be sent.
* @param status Result of the determination process(Master/Slave as it
* @param status Result of the determination process(Master/Slave as it
* applies to remote endpoint)
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooSendMasterSlaveDeterminationAck
(struct OOH323CallData* call, char * status);
@ -164,19 +164,19 @@ EXTERN int ooSendMasterSlaveDeterminationAck
* This function is used to send a MasterSlaveDeterminationReject message.
* @param call Pointer to call for which message is to be sent.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooSendMasterSlaveDeterminationReject (struct OOH323CallData* call);
/**
* This function is used to handle MasterSlaveReject message. If number of
* retries is less than max allowed, then it restarts the
* retries is less than max allowed, then it restarts the
* MasterSlaveDetermination procedure.
* @param call Handle to the call for which MasterSlaveReject is
* @param call Handle to the call for which MasterSlaveReject is
* received.
* @param reject Poinetr to the received reject message.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooHandleMasterSlaveReject
(struct OOH323CallData *call, H245MasterSlaveDeterminationReject* reject);
@ -193,13 +193,13 @@ EXTERN int ooHandleOpenLogicalChannel
(struct OOH323CallData* call, H245OpenLogicalChannel *olc);
/**
* This is a helper function used to handle a received OpenLogicalChannel
* This is a helper function used to handle a received OpenLogicalChannel
* message. It builds an OpenLogicalChannelAck message and sends it.
*
* @param call Pointer to cll for which OLC was received.
* @param olc The received OpenLogicalChannel message.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooHandleOpenLogicalChannel_helper
(struct OOH323CallData *call, H245OpenLogicalChannel*olc);
@ -222,22 +222,22 @@ int ooSendOpenLogicalChannelReject
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooOnReceivedOpenLogicalChannelAck(struct OOH323CallData *call,
EXTERN int ooOnReceivedOpenLogicalChannelAck(struct OOH323CallData *call,
H245OpenLogicalChannelAck *olcAck);
/**
* This function is used to handle the received OpenLogicalChannelReject
* This function is used to handle the received OpenLogicalChannelReject
* message.
* @param call Handle to the call for which the message is received.
* @param olcRejected Pointer to received OpenLogicalChannelReject message.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
H245OpenLogicalChannelReject *olcRejected);
/**
* This message is used to send an EndSession command. It builds a EndSession
* This message is used to send an EndSession command. It builds a EndSession
* command message and queues it into the calls outgoing queue.
* @param call Pointer to call for which EndSession command has to be
* sent.
@ -246,7 +246,7 @@ int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
EXTERN int ooSendEndSessionCommand(struct OOH323CallData *call);
/**
* This function is used to handle a received H245Command message.
* This function is used to handle a received H245Command message.
* @param call Pointer to call for which an H245Command is received.
* @param command Pointer to a command message.
*
@ -259,7 +259,7 @@ EXTERN int ooHandleH245Command
/**
* This function is used to handle a received UserInput Indication message.
* It extracts the dtmf received through user-input message and calls endpoints
* onReceivedDTMF callback function, if such a function is registered by the
* onReceivedDTMF callback function, if such a function is registered by the
* endpoint.
* @param call Handle to the call for which user-input indication
* message is received.
@ -272,7 +272,7 @@ EXTERN int ooOnReceivedUserInputIndication
/**
* This function is called on receiving a TreminalCapabilitySetAck message.
* If the MasterSlaveDetermination process is also over, this function
* If the MasterSlaveDetermination process is also over, this function
* initiates the process of opening logical channels.
* @param call Pointer to call for which TCSAck is received.
*
@ -282,9 +282,9 @@ EXTERN int ooOnReceivedTerminalCapabilitySetAck(struct OOH323CallData* call);
/**
* This function is called to close all the open logical channels. It sends
* CloseLogicalChannel message for all the forward channels and sends
* CloseLogicalChannel message for all the forward channels and sends
* RequestCloseLogicalChannel message for all the reverse channels.
* @param call Pointer to call for which logical channels have to be
* @param call Pointer to call for which logical channels have to be
* closed.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -311,10 +311,10 @@ EXTERN int ooSendCloseLogicalChannel
* closeLogicalChannelAck message to the remote endpoint.
* @param call Pointer to call for which CloseLogicalChannel message is received.
* @param clc Pointer to received CloseLogicalChannel message.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
H245CloseLogicalChannel* clc);
/**
@ -322,10 +322,10 @@ EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
* channel and removes it from the list of active logical channels.
* @param call Pointer to call for which CLCAck message is received.
* @param clcAck Pointer to the received CloseLogicalChannelAck message.
*
*
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooOnReceivedCloseChannelAck(struct OOH323CallData* call,
EXTERN int ooOnReceivedCloseChannelAck(struct OOH323CallData* call,
H245CloseLogicalChannelAck* clcAck);
/**
@ -365,27 +365,27 @@ EXTERN int ooH245AcknowledgeTerminalCapabilitySet(struct OOH323CallData *call);
* @param call Pointer to call for which logical channels have to be opened.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooOpenLogicalChannels(struct OOH323CallData *call);
/**
* This function is used to send OpenLogicalChannel message for audio/video
* This function is used to send OpenLogicalChannel message for audio/video
* channel.
* @param call Pointer to call for which channel has to be opened.
* @param capType Type of media channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooOpenLogicalChannel(struct OOH323CallData *call,
EXTERN int ooOpenLogicalChannel(struct OOH323CallData *call,
enum OOCapType capType);
/**
* This function is used to build and send OpenLogicalChannel message using
* capability passed as parameter.
* @param call Pointer to call for which OpenLogicalChannel message
* @param call Pointer to call for which OpenLogicalChannel message
* has to be built.
* @param epCap Pointer to capability
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooOpenChannel
@ -415,7 +415,7 @@ EXTERN int ooSendH245UserInputIndication_signal
/**
* This function is used to request a remote end point to close a logical
* channel.
* channel.
* @param call Pointer to call for which the logical channel has to
* be closed.
* @param logicalChan Pointer to the logical channel structure which needs
@ -423,7 +423,7 @@ EXTERN int ooSendH245UserInputIndication_signal
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooSendRequestCloseLogicalChannel(struct OOH323CallData *call,
EXTERN int ooSendRequestCloseLogicalChannel(struct OOH323CallData *call,
ooLogicalChannel *logicalChan);
/**
@ -447,11 +447,11 @@ int ooSendRequestChannelCloseRelease
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooOnReceivedRequestChannelClose(struct OOH323CallData *call,
EXTERN int ooOnReceivedRequestChannelClose(struct OOH323CallData *call,
H245RequestChannelClose *rclc);
/**
* This function is used to handle a received RequestChannelCloseReject
* This function is used to handle a received RequestChannelCloseReject
* response message.
* @param call Handle to the call.
* @param rccReject Pointer to the received reject response message.
@ -462,7 +462,7 @@ int ooOnReceivedRequestChannelCloseReject
(struct OOH323CallData *call, H245RequestChannelCloseReject *rccReject);
/**
* This function is used to handle a received RequestChannelCloseAck
* This function is used to handle a received RequestChannelCloseAck
* response message.
* @param call Handle to the call.
* @param rccAck Pointer to the received ack response message.
@ -473,21 +473,21 @@ int ooOnReceivedRequestChannelCloseAck
(struct OOH323CallData *call, H245RequestChannelCloseAck *rccAck);
/**
* Builds an OLC for faststart with an audio/video capability passed as
* Builds an OLC for faststart with an audio/video capability passed as
* parameter.
* @param call Handle to call for which OLC has to be built.
* @param olc Pointer to an OLC structure which will be populated.
* @param epCap Pointer to the capability which will be used to
* @param epCap Pointer to the capability which will be used to
* build OLC.
* @param pctxt Pointer to an OOCTXT structure which will be used
* @param pctxt Pointer to an OOCTXT structure which will be used
* to allocate additional memory for OLC.
* @param dir Direction of OLC
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
H245OpenLogicalChannel *olc,
ooH323EpCapability *epCap,
EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
H245OpenLogicalChannel *olc,
ooH323EpCapability *epCap,
OOCTXT*pctxt, int dir);
/**
@ -496,16 +496,16 @@ EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
* of the olc received in SETUP.
* @param call Handle to call for which OLC has to be built.
* @param olc Pointer to an received OLC structure.
* @param epCap Pointer to the capability which will be used for
* @param epCap Pointer to the capability which will be used for
* this channel.
* @param pctxt Pointer to an OOCTXT structure which will be used
* @param pctxt Pointer to an OOCTXT structure which will be used
* to allocate additional memory for OLC.
* @param dir Direction of channel OORX, OOTX etc.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooPrepareFastStartResponseOLC
(OOH323CallData *call, H245OpenLogicalChannel *olc,
(OOH323CallData *call, H245OpenLogicalChannel *olc,
ooH323EpCapability *epCap, OOCTXT*pctxt, int dir);
/**
@ -533,7 +533,7 @@ int ooSendMasterSlaveDeterminationRelease(struct OOH323CallData * call);
/**
* This function is used to send a terminal capability set reject message
* to the remote endpoint.
* @param call Handle to the call for which reject message has to
* @param call Handle to the call for which reject message has to
* be sent.
* @param seqNo Sequence number of the TCS message to be rejected.
* @param cause Cause for rejecting a TCS message.
@ -546,7 +546,7 @@ int ooSendTerminalCapabilitySetReject
/**
* This function is used to send a TerminalCapabilitySetRelease message after
* capability exchange timer has expired.
* @param call Handle to call for which release message has to be
* @param call Handle to call for which release message has to be
* sent.
*
* @return OO_OK, on success; OO_FAILED, on failure.
@ -557,26 +557,26 @@ int ooSendRequestMode(OOH323CallData* call, int isT38Mode);
/**
* This is an helper function used to extract ip address and port info from
* This is an helper function used to extract ip address and port info from
* H245TransportAddress structure.
* @param call Handle to associated call.
* @param h245Address Handle to H245TransportAddress structure from which
* @param h245Address Handle to H245TransportAddress structure from which
* information has to be extracted.
* @param ip Pointer to buffer in which ip address will be
* @param ip Pointer to buffer in which ip address will be
* returned. Make sure that buffer has sufficient length.
* @param port Pointer to integer in which port number will be
* @param port Pointer to integer in which port number will be
* returned.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooGetIpPortFromH245TransportAddress
(OOH323CallData *call, H245TransportAddress *h245Address, char *ip,
(OOH323CallData *call, H245TransportAddress *h245Address, char *ip,
int *port);
/**
* This is a callback function for handling an expired master-slave
* This is a callback function for handling an expired master-slave
* determination timer.
* @param data Callback data registered at the time of creation of
* @param data Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -584,9 +584,9 @@ int ooGetIpPortFromH245TransportAddress
int ooMSDTimerExpired(void *data);
/**
* This is a callback function for handling an expired capability exchange
* This is a callback function for handling an expired capability exchange
* timer.
* @param data Callback data registered at the time of creation of
* @param data Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -594,9 +594,9 @@ int ooMSDTimerExpired(void *data);
int ooTCSTimerExpired(void *data);
/**
* This is a callback function for handling an expired OpenLogicalChannel
* This is a callback function for handling an expired OpenLogicalChannel
* timer.
* @param pdata Callback data registered at the time of creation of
* @param pdata Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -604,9 +604,9 @@ int ooTCSTimerExpired(void *data);
int ooOpenLogicalChannelTimerExpired(void *pdata);
/**
* This is a callback function for handling an expired CloseLogicalChannel
* This is a callback function for handling an expired CloseLogicalChannel
* timer.
* @param pdata Callback data registered at the time of creation of
* @param pdata Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -614,9 +614,9 @@ int ooOpenLogicalChannelTimerExpired(void *pdata);
int ooCloseLogicalChannelTimerExpired(void *pdata);
/**
* This is a callback function for handling an expired RequestChannelClose
* This is a callback function for handling an expired RequestChannelClose
* timer.
* @param pdata Callback data registered at the time of creation of
* @param pdata Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
@ -625,14 +625,14 @@ int ooRequestChannelCloseTimerExpired(void *pdata);
/**
* This is a callback function for handling an expired EndSession timer.
* @param pdata Callback data registered at the time of creation of
* @param pdata Callback data registered at the time of creation of
* the timer.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
*/
int ooSessionTimerExpired(void *pdata);
/**
* @}
/**
* @}
*/
int ooRTDTimerExpired(void *pdata);

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooh323.h
* This file contains functions to support H.225 messages.
* @file ooh323.h
* This file contains functions to support H.225 messages.
*/
#ifndef _OOH323HDR_H_
#define _OOH323HDR_H_
@ -81,7 +81,7 @@ EXTERN int ooHandleH2250Message
/**
* This function is used to process a received Facility message.
* @param call Handle to the call for which message has been received.
* @param pQ931Msg Pointer the the received Facility message.
* @param pQ931Msg Pointer the received Facility message.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
@ -95,7 +95,7 @@ EXTERN int ooOnReceivedFacility
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
H225H323_UU_PDU * pH323UUPdu);
/**
@ -103,7 +103,7 @@ EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
* @param call Handle to the call
* @param facility Pointer to the facility message.
*/
EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
H225Facility_UUIE *facility);
/**
@ -112,13 +112,13 @@ EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
* @param call Handle to the call.Null when retrieving registered
* aliases.
* @param pAddresses Pointer to the sequence of alias addresses.
* @param aliasList Handle to alias list to be populated with retrieved
* @param aliasList Handle to alias list to be populated with retrieved
* aliases.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323RetrieveAliases
(struct OOH323CallData *call, H225_SeqOfH225AliasAddress *pAddresses,
(struct OOH323CallData *call, H225_SeqOfH225AliasAddress *pAddresses,
OOAliases **aliasList);
/**
@ -133,16 +133,16 @@ EXTERN int ooPopulatePrefixList(OOCTXT *pctxt, OOAliases *pAliases,
* @param pAliases Pointer to aliases to be used for populating list.
* @param pAliasList Pointer to alias list to be populated.
*
* @return OO_OK, on success. OO_FAILED, otherwise.
* @return OO_OK, on success. OO_FAILED, otherwise.
*/
EXTERN int ooPopulateAliasList(OOCTXT *pctxt, OOAliases *pAliases,
H225_SeqOfH225AliasAddress *pAliasList, int pAliasType);
H225_SeqOfH225AliasAddress *pAliasList, int pAliasType);
/**
* This function is used to search a particular alias in the alias list. The
* search can be on the basis of alias type or value or both.
* @param aliasList Handle to the alias list to be searched.
* @param type Type of the alias, if search has to consider type as
* @param type Type of the alias, if search has to consider type as
* criterion, otherwise 0.
* @param value Value of the alias, if the search has to consider value as
* criterion, NULL otherwise.
@ -153,7 +153,7 @@ EXTERN OOAliases* ooH323GetAliasFromList
/**
* This function is used to add a new alias to alias list.
* @param pAliasList Pointer to Alias list.
* @param pctxt Pointer to OOCTXT structure to be used for memory
* @param pctxt Pointer to OOCTXT structure to be used for memory
* allocation.
* @param pAliasAddress New alias address to be added.
*
@ -169,12 +169,12 @@ EXTERN OOAliases* ooH323AddAliasToList
* @param h225Address Pointer to H225TransportAddress structure
* @param ip Pointer to the buffer in which dotted ip address will
* be returned.
* @param port Pointer to the integer in which port value will be
* @param port Pointer to the integer in which port value will be
* returned.
*
* @return OO_OK, on success; OO_FAILED, on failure.
*/
int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
H225TransportAddress *h225Address, char *ip, int *port);
/**
* @}
@ -184,4 +184,3 @@ int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
#endif
#endif

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -34,9 +34,9 @@ ast_mutex_t bindPortLock;
extern DList g_TimerList;
int ooH323EpInitialize
(enum OOCallMode callMode, const char* tracefile)
(enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max)
{
memset(&gH323ep, 0, sizeof(ooEndPoint));
initContext(&(gH323ep.ctxt));
@ -46,25 +46,25 @@ int ooH323EpInitialize
{
if(strlen(tracefile)>= MAXFILENAME)
{
printf("Error:File name longer than allowed maximum %d\n",
snprintf(errstr, errstr_max, "Error:File name longer than allowed maximum %d\n",
MAXFILENAME-1);
return OO_FAILED;
}
strcpy(gH323ep.traceFile, tracefile);
}
else{
strcpy(gH323ep.traceFile, DEFAULT_TRACEFILE);
strcpy(gH323ep.traceFile, DEFAULT_TRACEFILE);
}
gH323ep.fptraceFile = fopen(gH323ep.traceFile, "a");
if(gH323ep.fptraceFile == NULL)
{
printf("Error:Failed to open trace file %s for write.\n",
snprintf(errstr, errstr_max, "Error:Failed to open trace file %s for write.\n",
gH323ep.traceFile);
return OO_FAILED;
}
/* Initialize default port ranges that will be used by stack.
/* Initialize default port ranges that will be used by stack.
Apps can override these by explicitely setting port ranges
*/
@ -79,12 +79,12 @@ int ooH323EpInitialize
gH323ep.rtpPorts.start = RTPPORTSSTART;
gH323ep.rtpPorts.max = RTPPORTSEND;
gH323ep.rtpPorts.current = RTPPORTSSTART;
OO_SETFLAG(gH323ep.flags, OO_M_FASTSTART);
OO_SETFLAG(gH323ep.flags, OO_M_TUNNELING);
OO_SETFLAG(gH323ep.flags, OO_M_AUTOANSWER);
OO_CLRFLAG(gH323ep.flags, OO_M_GKROUTED);
gH323ep.aliases = NULL;
gH323ep.termType = DEFAULT_TERMTYPE;
@ -107,7 +107,7 @@ int ooH323EpInitialize
ooH323EpSetCallerID(DEFAULT_CALLERID);
gH323ep.myCaps = NULL;
gH323ep.noOfCaps = 0;
gH323ep.callList = NULL;
@ -116,7 +116,7 @@ int ooH323EpInitialize
ast_mutex_init(&newCallLock);
ast_mutex_init(&bindPortLock);
gH323ep.dtmfmode = 0;
gH323ep.callingPartyNumber[0]='\0';
gH323ep.callingPartyNumber[0]='\0';
gH323ep.callMode = callMode;
gH323ep.isGateway = FALSE;
@ -164,7 +164,7 @@ int ooH323EpSetLocalAddress(const char* localip, int listenport)
strcpy(gH323ep.signallingIP, localip);
OOTRACEINFO2("Signalling IP address is set to %s\n", localip);
}
if(listenport)
{
gH323ep.listenPort = listenport;
@ -332,7 +332,7 @@ int ooH323EpSetH225MsgCallbacks(OOH225MsgCallbacks h225Callbacks)
return OO_OK;
}
int ooH323EpSetH323Callbacks(OOH323CALLBACKS h323Callbacks)
{
gH323ep.h323Callbacks.onNewCallCreated = h323Callbacks.onNewCallCreated;
@ -376,10 +376,10 @@ int ooH323EpDestroy(void)
if(gH323ep.listener)
{
ooSocketClose(*(gH323ep.listener));
gH323ep.listener = NULL;
gH323ep.listener = NULL;
}
ooGkClientDestroy();
ooGkClientDestroy();
if(gH323ep.fptraceFile)
{
@ -461,7 +461,7 @@ int ooH323EpEnableH245Tunneling(void)
OO_SETFLAG(gH323ep.flags, OO_M_TUNNELING);
return OO_OK;
}
int ooH323EpDisableH245Tunneling(void)
{
OO_CLRFLAG(gH323ep.flags, OO_M_TUNNELING);
@ -527,7 +527,7 @@ int ooH323EpSetCallingPartyNumber(const char* number)
int ret=OO_OK;
if(number)
{
strncpy(gH323ep.callingPartyNumber, number,
strncpy(gH323ep.callingPartyNumber, number,
sizeof(gH323ep.callingPartyNumber)-1);
ret = ooH323EpAddAliasDialedDigits((char*)number);
return ret;
@ -544,7 +544,7 @@ int ooH323EpSetTraceLevel(int traceLevel)
void ooH323EpPrintConfig(void)
{
OOTRACEINFO1("H.323 Endpoint Configuration is as follows:\n");
OOTRACEINFO2("\tTrace File: %s\n", gH323ep.traceFile);
if(!OO_TESTFLAG(gH323ep.flags, OO_M_FASTSTART))
@ -575,7 +575,7 @@ void ooH323EpPrintConfig(void)
OOTRACEINFO1("\tAutoAnswer - enabled\n");
else
OOTRACEINFO1("\tAutoAnswer - disabled\n");
OOTRACEINFO2("\tTerminal Type - %d\n", gH323ep.termType);
OOTRACEINFO2("\tT35 CountryCode - %d\n", gH323ep.t35CountryCode);
@ -585,7 +585,7 @@ void ooH323EpPrintConfig(void)
OOTRACEINFO2("\tManufacturer Code - %d\n", gH323ep.manufacturerCode);
OOTRACEINFO2("\tProductID - %s\n", gH323ep.productID);
OOTRACEINFO2("\tVersionID - %s\n", gH323ep.versionID);
OOTRACEINFO2("\tLocal signalling IP address - %s\n", gH323ep.signallingIP);
@ -595,8 +595,8 @@ void ooH323EpPrintConfig(void)
OOTRACEINFO2("\tCallerID - %s\n", gH323ep.callerid);
OOTRACEINFO2("\tCall Establishment Timeout - %d seconds\n",
gH323ep.callEstablishmentTimeout);
OOTRACEINFO2("\tCall Establishment Timeout - %d seconds\n",
gH323ep.callEstablishmentTimeout);
OOTRACEINFO2("\tMasterSlaveDetermination Timeout - %d seconds\n",
gH323ep.msdTimeout);
@ -609,7 +609,7 @@ void ooH323EpPrintConfig(void)
OOTRACEINFO2("\tSession Timeout - %d seconds\n", gH323ep.sessionTimeout);
return;
return;
}
@ -620,7 +620,7 @@ int ooH323EpAddG711Capability(int cap, int txframes, int rxframes, int dir,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
@ -631,7 +631,7 @@ int ooH323EpAddG728Capability(int cap, int txframes, int rxframes, int dir,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
@ -642,89 +642,89 @@ int ooH323EpAddG729Capability(int cap, int txframes, int rxframes, int dir,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
dir, startReceiveChannel, startTransmitChannel,
dir, startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel, FALSE);
}
int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooH323EpAddG726Capability(int cap, int txframes, int rxframes,
int ooH323EpAddG726Capability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooH323EpAddSpeexCapability(int cap, int txframes, int rxframes,
int ooH323EpAddSpeexCapability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
silenceSuppression, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
OOBOOL comfortNoise, OOBOOL scrambled, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddGSMCapability(NULL, cap, framesPerPkt, comfortNoise,
scrambled, dir, startReceiveChannel,
return ooCapabilityAddGSMCapability(NULL, cap, framesPerPkt, comfortNoise,
scrambled, dir, startReceiveChannel,
startTransmitChannel, stopReceiveChannel,
stopTransmitChannel, FALSE);
}
int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
unsigned qcifMPI, unsigned cifMPI,
unsigned cif4MPI, unsigned cif16MPI,
unsigned maxBitRate, int dir,
int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
unsigned qcifMPI, unsigned cifMPI,
unsigned cif4MPI, unsigned cif16MPI,
unsigned maxBitRate, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
cb_StopTransmitChannel stopTransmitChannel)
{
return ooCapabilityAddH263VideoCapability(NULL, sqcifMPI, qcifMPI, cifMPI,
return ooCapabilityAddH263VideoCapability(NULL, sqcifMPI, qcifMPI, cifMPI,
cif4MPI, cif16MPI, maxBitRate,dir,
startReceiveChannel, startTransmitChannel,
stopReceiveChannel, stopTransmitChannel,
stopReceiveChannel, stopTransmitChannel,
FALSE);
}
@ -805,7 +805,7 @@ int ooH323EpSetTCPPortRange(int base, int max)
gH323ep.tcpPorts.start = base;
if(max > 65500)
gH323ep.tcpPorts.max = 65500;
else
else
gH323ep.tcpPorts.max = max;
if(gH323ep.tcpPorts.max<gH323ep.tcpPorts.start)
@ -815,7 +815,7 @@ int ooH323EpSetTCPPortRange(int base, int max)
return OO_FAILED;
}
gH323ep.tcpPorts.current = gH323ep.tcpPorts.start;
OOTRACEINFO1("TCP port range initialize - successful\n");
return OO_OK;
}
@ -828,18 +828,18 @@ int ooH323EpSetUDPPortRange(int base, int max)
gH323ep.udpPorts.start = base;
if(max > 65500)
gH323ep.udpPorts.max = 65500;
else
else
gH323ep.udpPorts.max = max;
if(gH323ep.udpPorts.max<gH323ep.udpPorts.start)
{
OOTRACEERR1("Error: Failed to set udp ports- Max port number"
" less than Start port number\n");
return OO_FAILED;
}
gH323ep.udpPorts.current = gH323ep.udpPorts.start;
OOTRACEINFO1("UDP port range initialize - successful\n");
return OO_OK;
@ -853,18 +853,17 @@ int ooH323EpSetRTPPortRange(int base, int max)
gH323ep.rtpPorts.start = base;
if(max > 65500)
gH323ep.rtpPorts.max = 65500;
else
else
gH323ep.rtpPorts.max = max;
if(gH323ep.rtpPorts.max<gH323ep.rtpPorts.start)
{
OOTRACEERR1("Error: Failed to set rtp ports- Max port number"
" less than Start port number\n");
return OO_FAILED;
}
gH323ep.rtpPorts.current = gH323ep.rtpPorts.start;
OOTRACEINFO1("RTP port range initialize - successful\n");
return OO_OK;
}

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooh323ep.h
* This file contains H323 endpoint related functions.
* @file ooh323ep.h
* This file contains H323 endpoint related functions.
*/
#ifndef OO_H323EP_H_
#define OO_H323EP_H_
@ -53,7 +53,7 @@ extern "C" {
#endif /* EXTERN */
struct OOCapPrefs;
/**
/**
* @defgroup h323ep H323 Endpoint management functions
* @{
*/
@ -67,7 +67,7 @@ struct OOCapPrefs;
/**
* This structure is used to define the port ranges to be used
* by the application.
@ -78,19 +78,19 @@ typedef struct OOH323Ports {
int current; /*!< Current port number. */
} OOH323Ports;
/**
/**
* Structure to store all configuration information related to the
* endpoint created by an application
* endpoint created by an application
*/
typedef struct OOH323EndPoint {
/**
/**
* This context should be used for allocation of memory for
* items within the endpoint structure.
*/
OOCTXT ctxt;
/**
/**
* This context should be used for allocation of memory for
* message structures.
*/
@ -107,11 +107,11 @@ typedef struct OOH323EndPoint {
/** Range of port numbers to be used for RTP connections */
OOH323Ports rtpPorts;
ASN1UINT flags;
int termType; /* 50 - Terminal entity with No MC,
60 - Gateway entity with no MC,
int termType; /* 50 - Terminal entity with No MC,
60 - Gateway entity with no MC,
70 - Terminal Entity with MC, but no MP etc.*/
int t35CountryCode;
int t35Extension;
@ -163,17 +163,17 @@ typedef struct OOH323EndPoint {
* @return OO_OK, on success. OO_FAILED, on failure
*/
EXTERN int ooH323EpInitialize
(enum OOCallMode callMode, const char* tracefile);
(enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max);
/**
* This function is used to represent the H.323 application endpoint as
* This function is used to represent the H.323 application endpoint as
* gateway, instead of an H.323 phone endpoint.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetAsGateway(void);
EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int manufacturer,
EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int manufacturer,
char* vendor, char* version);
/**
@ -183,7 +183,7 @@ EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int ma
* @param listenport Port to be used for listening for incoming calls.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooH323EpSetLocalAddress(const char* localip, int listenport);
/**
@ -192,7 +192,7 @@ EXTERN int ooH323EpSetLocalAddress(const char* localip, int listenport);
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetTCPPortRange(int base, int max);
@ -202,7 +202,7 @@ EXTERN int ooH323EpSetTCPPortRange(int base, int max);
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetUDPPortRange(int base, int max);
@ -212,7 +212,7 @@ EXTERN int ooH323EpSetUDPPortRange(int base, int max);
* @param base Starting port number for the range
* @param max Ending port number for the range.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpSetRTPPortRange(int base, int max);
@ -252,7 +252,7 @@ EXTERN int ooH323EpAddAliasURLID(const char* url);
/**
* This function is used to add an email id as an alias for the endpoint.
* @param email Email id to be set as an alias.
*
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddAliasEmailID(const char* email);
@ -266,7 +266,7 @@ EXTERN int ooH323EpAddAliasEmailID(const char* email);
EXTERN int ooH323EpAddAliasTransportID(const char* ipaddress);
/**
* This function is used to clear all the aliases used by the
* This function is used to clear all the aliases used by the
* H323 endpoint.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -284,9 +284,9 @@ EXTERN int ooH323EpSetH225MsgCallbacks(OOH225MsgCallbacks h225Callbacks);
/**
* This function is used to set high level H.323 callbacks for the endpoint.
* Make sure all unused callbacks in the structure are set to NULL before
* Make sure all unused callbacks in the structure are set to NULL before
* calling this function.
* @param h323Callbacks Callback structure containing various high level
* @param h323Callbacks Callback structure containing various high level
* callbacks.
* @return OO_OK, on success. OO_FAILED, on failure
*/
@ -294,8 +294,8 @@ EXTERN int ooH323EpSetH323Callbacks(OOH323CALLBACKS h323Callbacks);
/**
* This function is the last function to be invoked after done using the
* stack. It closes the H323 Endpoint for an application, releasing all
* This function is the last function to be invoked after done using the
* stack. It closes the H323 Endpoint for an application, releasing all
* the associated memory.
*
* @return OO_OK on success
@ -321,8 +321,8 @@ EXTERN int ooH323EpEnableAutoAnswer(void);
EXTERN int ooH323EpDisableAutoAnswer(void);
/**
* This function is used to enable manual ringback. By default the stack sends
* alerting message automatically on behalf of the endpoint application.
* This function is used to enable manual ringback. By default the stack sends
* alerting message automatically on behalf of the endpoint application.
* However, if endpoint application wants to do alerting user part first before
* sending out alerting message, it can enable this feature.
*
@ -331,7 +331,7 @@ EXTERN int ooH323EpDisableAutoAnswer(void);
EXTERN int ooH323EpEnableManualRingback(void);
/**
* This function is used to disable manual ringback. By default the
* This function is used to disable manual ringback. By default the
* manual ringback feature is disabled, i.e, the stack sends alerting on behalf
* of the application automatically.
*
@ -407,7 +407,7 @@ EXTERN int ooH323EpDisableGkRouted(void);
* @param productID New value for the product id.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooH323EpSetProductID (const char * productID);
/**
@ -429,7 +429,7 @@ EXTERN int ooH323EpSetCallerID (const char * callerID);
/**
* This function is used to set calling party number to be used for outbound
* calls.Note, you can override it for a specific call by using
* calls.Note, you can override it for a specific call by using
* ooCallSetCallingPartyNumber function.
* @param number e164 number to be used as calling party number.
*
@ -438,7 +438,7 @@ EXTERN int ooH323EpSetCallerID (const char * callerID);
EXTERN int ooH323EpSetCallingPartyNumber(const char * number);
/**
* This function is used to print the current configuration information of
* This function is used to print the current configuration information of
* the H323 endpoint to log file.
*/
void ooH323EpPrintConfig(void);
@ -447,7 +447,7 @@ void ooH323EpPrintConfig(void);
/**
* This function is used to add G728 capability to the H323 endpoint.
* @param cap Type of G728 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -455,10 +455,10 @@ void ooH323EpPrintConfig(void);
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG728Capability
(int cap, int txframes, int rxframes, int dir,
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -467,7 +467,7 @@ EXTERN int ooH323EpAddG728Capability
/**
* This function is used to add G729 capability to the H323 endpoint.
* @param cap Type of G729 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -475,10 +475,10 @@ EXTERN int ooH323EpAddG728Capability
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG729Capability
(int cap, int txframes, int rxframes, int dir,
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -488,7 +488,7 @@ EXTERN int ooH323EpAddG729Capability
/**
* This function is used to add G7231 capability to the H323 endpoint.
* @param cap Type of G7231 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param silenceSuppression Silence Suppression support
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
@ -497,9 +497,9 @@ EXTERN int ooH323EpAddG729Capability
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
OOBOOL silenceSuppression, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
@ -509,7 +509,7 @@ EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
/**
* This function is used to add G711 capability to the H323 endpoint.
* @param cap Type of G711 capability to be added.
* @param txframes Number of frames per packet for transmission.
* @param txframes Number of frames per packet for transmission.
* @param rxframes Number of frames per packet for reception.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -517,10 +517,10 @@ EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddG711Capability
(int cap, int txframes, int rxframes, int dir,
(int cap, int txframes, int rxframes, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -530,8 +530,8 @@ EXTERN int ooH323EpAddG711Capability
/**
* This function is used to add a new GSM capability to the endpoint.
* @param cap Type of GSM capability to be added.
* @param framesPerPkt Number of GSM frames pre packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param framesPerPkt Number of GSM frames pre packet.
* @param comfortNoise Comfort noise spec for the capability.
* @param scrambled Scrambled enabled/disabled for the capability.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -539,10 +539,10 @@ EXTERN int ooH323EpAddG711Capability
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
OOBOOL comfortNoise,OOBOOL scrambled,int dir,
EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
OOBOOL comfortNoise,OOBOOL scrambled,int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,
@ -550,18 +550,18 @@ EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
/**
* This function is used to add H263 video capability to the H323 endpoint.
* @param cap Capability type - OO_H263VIDEO
* @param sqcifMPI Minimum picture interval for encoding/decoding
* @param sqcifMPI Minimum picture interval for encoding/decoding
* of SQCIF pictures.
* @param qcifMPI Minimum picture interval for encoding/decoding
* @param qcifMPI Minimum picture interval for encoding/decoding
* of QCIF pictures.
* @param cifMPI Minimum picture interval for encoding/decoding
* @param cifMPI Minimum picture interval for encoding/decoding
* of CIF pictures.
* @param cif4MPI Minimum picture interval for encoding/decoding
* @param cif4MPI Minimum picture interval for encoding/decoding
* of CIF4 pictures.
* @param cif16MPI Minimum picture interval for encoding/decoding
* @param cif16MPI Minimum picture interval for encoding/decoding
* of CIF16 pictures.
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
* which a transmitter can transmit video or a
* which a transmitter can transmit video or a
* receiver can receive video.
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
* @param startReceiveChannel Callback function to start receive channel.
@ -569,12 +569,12 @@ EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
* @param stopReceiveChannel Callback function to stop receive channel.
* @param stopTransmitChannel Callback function to stop transmit channel.
*
* @return OO_OK, on success. OO_FAILED, on failure.
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
unsigned qcifMPI, unsigned cifMPI,
unsigned cif4MPI, unsigned cif16MPI,
unsigned maxBitRate, int dir,
EXTERN int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
unsigned qcifMPI, unsigned cifMPI,
unsigned cif4MPI, unsigned cif16MPI,
unsigned maxBitRate, int dir,
cb_StartReceiveChannel startReceiveChannel,
cb_StartTransmitChannel startTransmitChannel,
cb_StopReceiveChannel stopReceiveChannel,

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -19,4 +19,3 @@
#endif

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -90,7 +90,7 @@ int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip)
}
}
#ifdef _WIN32
#ifdef _WIN32
int ooBindOSAllocatedPort(OOSOCKET socket, char *ip)
{
OOIPADDR ipAddrs;
@ -98,14 +98,14 @@ int ooBindOSAllocatedPort(OOSOCKET socket, char *ip)
struct sockaddr_in name;
size = sizeof(struct sockaddr_in);
ret= ooSocketStrToAddr (ip, &ipAddrs);
if((ret=ooSocketBind(socket, ipAddrs,
if((ret=ooSocketBind(socket, ipAddrs,
0))==ASN_OK)
{
ret = ooSocketGetSockName(socket, &name, &size);
if(ret == ASN_OK)
{
return name.sin_port;
}
}

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooports.h
* This file contains functions to manage ports used by the stack.
* @file ooports.h
* This file contains functions to manage ports used by the stack.
*/
#ifndef _OOPORTS_H_
@ -43,7 +43,7 @@ extern "C" {
/**
* Get the next port of type TCP/UDP/RTP from the corresponding range.
* When max value for the range is reached, it starts again from the
* When max value for the range is reached, it starts again from the
* first port number of the range.
*
* @param ep Reference to the H323 Endpoint structure.
@ -69,7 +69,7 @@ EXTERN int ooGetNextPort (OOH323PortType type);
EXTERN int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip);
/**
* This function is supported for windows version only.
* This function is supported for windows version only.
* Windows sockets have problem in reusing the addresses even after
* setting SO_REUSEADDR, hence in windows we just allow os to bind
* to any random port.
@ -80,7 +80,7 @@ EXTERN int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip);
* socket is bound and in case of failure just returns
* a negative value.
*/
#ifdef _WIN32
#ifdef _WIN32
EXTERN int ooBindOSAllocatedPort(OOSOCKET socket, char *ip);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ooq931.h
* This file contains functions to support call signalling.
* @file ooq931.h
* This file contains functions to support call signalling.
*/
#ifndef _OOQ931HDR_H_
@ -37,7 +37,7 @@ extern "C" {
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
/**
* @defgroup q931 Q.931/H.2250 Message Handling
* @{
*/
@ -48,11 +48,11 @@ extern "C" {
#define OO_MAX_CALL_TOKEN 999999
/* Q.931 packet must be at least 5 bytes long */
#define Q931_E_TOOSHORT (-1001)
#define Q931_E_TOOSHORT (-1001)
/* callReference field must be 2 bytes long */
#define Q931_E_INVCALLREF (-1002)
#define Q931_E_INVCALLREF (-1002)
/* invalid length of message */
#define Q931_E_INVLENGTH (-1003)
#define Q931_E_INVLENGTH (-1003)
enum Q931MsgTypes {
Q931NationalEscapeMsg = 0x00,
@ -217,8 +217,8 @@ enum Q931UserInfoLayer1Protocol{
/*
Structure to build store outgoing encoded UUIE
The different fields in the structure have octet lengths
as specified in the spec.
The different fields in the structure have octet lengths
as specified in the spec.
*/
typedef struct Q931InformationElement {
int discriminator;
@ -228,8 +228,8 @@ typedef struct Q931InformationElement {
} Q931InformationElement;
/**
* Q.931 message structure. Contains context for memory allocation,
* protocol discriminator, call reference, meesage type and list of
* Q.931 message structure. Contains context for memory allocation,
* protocol discriminator, call reference, meesage type and list of
* user-user information elements (IEs).
*/
typedef struct Q931Message {
@ -240,7 +240,7 @@ typedef struct Q931Message {
ASN1UINT tunneledMsgType; /* The H245 message this message is tunneling*/
ASN1INT logicalChannelNo; /* channel number associated with tunneled */
/* message, 0 if no channel */
DList ies;
DList ies;
Q931InformationElement *bearerCapabilityIE;
Q931InformationElement *callingPartyNumberIE;
Q931InformationElement *calledPartyNumberIE;
@ -266,13 +266,13 @@ struct OOH323CallData;
/*
* These are message callbacks which can be used by user applications
* to perform application specific things on receiving a particular
* to perform application specific things on receiving a particular
* message or before sending a particular message. For ex. user application
* can change values of some parameters of setup message before it is actually
* sent out.
*/
/**
* This callback is triggered when an H.225 SETUP message is received by
* This callback is triggered when an H.225 SETUP message is received by
* the application.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
@ -282,7 +282,7 @@ typedef int (*cb_OnReceivedSetup)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered when an H.225 CONNECT message is received by
* This callback is triggered when an H.225 CONNECT message is received by
* the application.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
@ -292,8 +292,8 @@ typedef int (*cb_OnReceivedConnect)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered after an H.225 SETUP message has been
* constructed and is ready to be sent out. It provides the application
* This callback is triggered after an H.225 SETUP message has been
* constructed and is ready to be sent out. It provides the application
* with an opportunity to add additional non-standard information.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
@ -303,8 +303,8 @@ typedef int (*cb_OnBuiltSetup)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This callback is triggered after an H.225 CONNECT message has been
* constructed and is ready to be sent out. It provides the application
* This callback is triggered after an H.225 CONNECT message has been
* constructed and is ready to be sent out. It provides the application
* with an opportunity to add additional non-standard information.
* @param call The call the message is associated with.
* @param pmsg Q.931 message structure.
@ -314,7 +314,7 @@ typedef int (*cb_OnBuiltConnect)
(struct OOH323CallData *call, struct Q931Message *pmsg);
/**
* This structure holds the various callback functions that are
* This structure holds the various callback functions that are
* triggered when H.225 messages are received or constructed.
* @see ooH323EpSetH225MsgCallbacks
*/
@ -326,8 +326,8 @@ typedef struct OOH225MsgCallbacks {
} OOH225MsgCallbacks;
/**
* This function is invoked to decode a Q931 message.
*
* This function is invoked to decode a Q931 message.
*
* @param call Handle to call which owns the message.
* @param msg Pointer to the Q931 message
* @param length Length of the encoded data
@ -335,18 +335,18 @@ typedef struct OOH225MsgCallbacks {
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooQ931Decode
EXTERN int ooQ931Decode
(struct OOH323CallData *call, Q931Message* msg, int length, ASN1OCTET *data, int docallbacks);
/**
* This function is used to decode the UUIE of the message from the list of
* ies. It decodes the User-User ie and populates the userInfo field of the
* message.
* @param q931Msg Pointer to the message whose User-User ie has to be
* decoded.
* @param q931Msg Pointer to the message whose User-User ie has to be
* decoded.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
*/
EXTERN int ooDecodeUUIE(OOCTXT* pctxt, Q931Message *q931Msg);
/**
@ -360,20 +360,20 @@ EXTERN int ooDecodeUUIE(OOCTXT* pctxt, Q931Message *q931Msg);
EXTERN int ooEncodeUUIE(OOCTXT* pctxt, Q931Message *q931msg);
/**
* This function is invoked to retrieve an IE element from a Q931 message.
*
* This function is invoked to retrieve an IE element from a Q931 message.
*
* @param q931msg Pointer to the Q931 message
* @param ieCode IE code for the IE element to be retrieved
*
* @return Pointer to a Q931InformationElement contating
* @return Pointer to a Q931InformationElement contating
* the IE element.
*/
EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg,
EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg,
int ieCode);
/**
* This function is invoked to print a Q931 message.
*
* This function is invoked to print a Q931 message.
*
* @param q931msg Pointer to the Q931 message
*
* @return - none
@ -382,8 +382,8 @@ EXTERN void ooQ931Print (const Q931Message* q931msg);
/**
* This function is invoked to create an outgoing Q931 message.
*
* This function is invoked to create an outgoing Q931 message.
*
* @param msg Reference to the pointer of type Q931 message.
* @param msgType Type of Q931 message to be created
*
@ -392,7 +392,7 @@ EXTERN void ooQ931Print (const Q931Message* q931msg);
EXTERN int ooCreateQ931Message(OOCTXT* pctxt, Q931Message **msg, int msgType);
/**
* This function is invoked to generate a unique call reference number.
* This function is invoked to generate a unique call reference number.
*
* @return - call reference number
*/
@ -409,8 +409,8 @@ EXTERN ASN1USINT ooGenerateCallReference(void);
EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
/**
* This function is invoked to release the memory used up by a Q931 message
*
* This function is invoked to release the memory used up by a Q931 message
*
* @param q931Msg Pointer to a Q931 message which has to be freed.
*
* @return Completion status - 0 on success, -1 on failure
@ -418,10 +418,10 @@ EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
EXTERN int ooFreeQ931Message(OOCTXT* pctxt, Q931Message *q931Msg);
/**
* This function is invoked to retrive the outgoing message buffer for
* This function is invoked to retrive the outgoing message buffer for
* Q931 message
*
* @param call Pointer to call for which outgoing Q931 message has to be
* @param call Pointer to call for which outgoing Q931 message has to be
* retrieved.
* @param msgbuf Pointer to a buffer in which retrieved message will
* be returned.
@ -436,11 +436,11 @@ EXTERN int ooGetOutgoingQ931Msgbuf
(struct OOH323CallData *call, ASN1OCTET * msgbuf, int* len, int *msgType);
/**
* This function is invoked to send a ReleaseComplete message for
* This function is invoked to send a ReleaseComplete message for
* the currently active call.
*
* @param call Pointer to the call for which ReleaseComplete message have
* to be sent.
* @param call Pointer to the call for which ReleaseComplete message have
* to be sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
@ -451,18 +451,18 @@ EXTERN int ooSendReleaseComplete(struct OOH323CallData *call);
* received setup message.
*
* @param call Pointer to the call for which CallProceeding message have to
* be sent.
* be sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
EXTERN int ooSendCallProceeding(struct OOH323CallData *call);
/**
* This function is invoked to send alerting message in response to received
* setup message.
* This function is invoked to send alerting message in response to received
* setup message.
*
* @param call Pointer to the call for which Alerting message have to be
* sent.
* @param call Pointer to the call for which Alerting message have to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
@ -477,8 +477,8 @@ EXTERN int ooSendStatusInquiry(struct OOH323CallData *call);
/**
* This function is invoked to send Facility message.
*
* @param call Pointer to the call for which Facility message have to be
* sent.
* @param call Pointer to the call for which Facility message have to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
@ -497,11 +497,11 @@ EXTERN int ooQ931SendDTMFAsKeyPadIE
(struct OOH323CallData *call, const char* data);
/**
* This function is invoked to send a Connect message in response to received
* setup message.
* This function is invoked to send a Connect message in response to received
* setup message.
*
* @param call Pointer to the call for which connect message has to be
* sent.
* @param call Pointer to the call for which connect message has to be
* sent.
*
* @return Completion status - 0 on success, -1 on failure
*/
@ -509,7 +509,7 @@ EXTERN int ooSendConnect(struct OOH323CallData *call);
/**
* This function is used to send a SETUP message for outgoing call. It first
* creates an H.225 TCP connection with the remote end point and then sends
* creates an H.225 TCP connection with the remote end point and then sends
* SETUP message over this connection.
* @param dest Destination - IP:Port/alias.
* @param callToken Unique token for the new call.
@ -541,7 +541,7 @@ EXTERN int ooH323HandleCallFwdRequest(struct OOH323CallData *call);
/**
* This function is used for forwarding/redirecting a call to third party.
* @param callToken callToken for the call which has to be redirected.
* @param dest Address to which call has to be forwarded. Can be
* @param dest Address to which call has to be forwarded. Can be
* IP:Port or alias.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -559,7 +559,7 @@ EXTERN int ooH323ForwardCall(char* callToken, char *dest);
EXTERN int ooH323HangCall(char * callToken, OOCallClearReason reason, int q931);
/**
/**
* Function to accept a call by sending connect. This function is used
* as a helper function to ooSendConnect.
* @param call Pointer to the call for which connect has to be sent
@ -602,7 +602,7 @@ int ooGenerateCallToken (char *callToken, size_t size);
/**
* This function sends an encoded H.245 message buffer as a tunneled
* This function sends an encoded H.245 message buffer as a tunneled
* H.245 Facility message.
* @param call Pointer to the call for which H.245 message has to
* be tunneled.
@ -617,28 +617,28 @@ int ooGenerateCallToken (char *callToken, size_t size);
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooSendAsTunneledMessage
(struct OOH323CallData *call, ASN1OCTET* msgbuf,
int h245Len, int h245MsgType, int associatedChan);
(struct OOH323CallData *call, ASN1OCTET* msgbuf,
int h245Len, int h245MsgType, int associatedChan);
/**
* This function is used to encode an H.225 message.
* @param call Handle to the call.
* @param pq931Msg Pointer to the message to be encoded.
* @param msgbuf Pointer to the buffer in which encoded message will
* @param msgbuf Pointer to the buffer in which encoded message will
* be returned.
* @param size Size of the buffer passed.
*
* @return OO_OK, on success. OO_FAILED, on failure.
*/
int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg,
int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg,
char *msgbuf, int size);
/**
* This is a callback function which is called when there is no CONNECT
* This is a callback function which is called when there is no CONNECT
* response from the remote endpoint after the SETUP has been sent and timeout
* period has passed.
* @param data The callback data registered at the time of timer
* @param data The callback data registered at the time of timer
* creation.
*
* @return OO_OK, on success. OO_FAILED, on failure.
@ -670,8 +670,8 @@ EXTERN int ooQ931SetKeypadIE(OOCTXT* pctxt, Q931Message *pmsg, const char* data)
* @return OO_OK on success, OO_FAILED, on failure.
*/
EXTERN int ooSetBearerCapabilityIE
(OOCTXT* pctxt, Q931Message *pmsg, enum Q931CodingStandard codingStandard,
enum Q931InformationTransferCapability capability,
(OOCTXT* pctxt, Q931Message *pmsg, enum Q931CodingStandard codingStandard,
enum Q931InformationTransferCapability capability,
enum Q931TransferMode transferMode, enum Q931TransferRate transferRate,
enum Q931UserInfoLayer1Protocol userInfoLayer1);
@ -703,10 +703,10 @@ EXTERN int ooQ931SetCalledPartyNumberIE
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931SetCallingPartyNumberIE
(OOCTXT* pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type,
(OOCTXT* pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type,
unsigned presentation, unsigned screening);
/**
/**
* This function is used to set a cause ie for a q931 message.
* @param pmsg Valid Q931 Message
* @param cause Q931 Cause Value
@ -716,15 +716,15 @@ EXTERN int ooQ931SetCallingPartyNumberIE
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931SetCauseIE
(OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
(OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
unsigned location);
EXTERN int ooQ931SetCallStateIE
(OOCTXT *pctxt, Q931Message *pmsg, unsigned char callstate);
/**
* This function is used to convert a call clear reason to cause and
* reason code. It is used when local user is endoing the call and
* This function is used to convert a call clear reason to cause and
* reason code. It is used when local user is endoing the call and
* sending releaseComplete.
* @param clearReason Reason for ending call.
* @param cause Pointer to Q931CauseVaules enum in which cause
@ -735,7 +735,7 @@ EXTERN int ooQ931SetCallStateIE
* @return OO_OK, on success. OO_FAILED, on failure.
*/
EXTERN int ooQ931GetCauseAndReasonCodeFromCallClearReason
(OOCallClearReason clearReason, enum Q931CauseValues *cause,
(OOCallClearReason clearReason, enum Q931CauseValues *cause,
unsigned *reasonCode);
/**
@ -750,7 +750,7 @@ EXTERN OOCallClearReason ooGetCallClearReasonFromCauseAndReasonCode
(enum Q931CauseValues cause, unsigned reasonCode);
/**
* This function is used to retrieve the description text for a
* This function is used to retrieve the description text for a
* message type.
*
* @param msgType Message type.
@ -775,8 +775,8 @@ EXTERN int ooSendStartH245Facility(struct OOH323CallData *call);
EXTERN int ooSendFSUpdate(struct OOH323CallData *call);
EXTERN int ooHandleFastStartChannels(struct OOH323CallData *pCall);
/**
* @}
/**
* @}
*/
#ifdef __cplusplus
}

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -47,7 +47,7 @@ void ooTrace(OOUINT32 traceLevel, const char * fmtspec, ...) {
if(traceLevel > gs_traceLevel) return;
va_start (arglist, fmtspec);
/* memset(logMessage, 0, MAXLOGMSGLEN);*/
vsprintf(logMessage, fmtspec, arglist);
vsprintf(logMessage, fmtspec, arglist);
va_end(arglist);
ooTraceLogMessage(logMessage);
}
@ -59,18 +59,18 @@ void ooTraceLogMessage(const char * logMessage)
static int lasttime=25;
int printDate =0;
static int printTime=1;
#ifdef _WIN32
SYSTEMTIME systemTime;
GetLocalTime(&systemTime);
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "HH':'mm':'ss",
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "HH':'mm':'ss",
timeString, 100);
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "H", currtime, 3);
if(lasttime> atoi(currtime))
printDate=1;
lasttime = atoi(currtime);
#else
struct tm *ptime;
char dateString[10];
@ -80,10 +80,10 @@ void ooTraceLogMessage(const char * logMessage)
strftime(currtime, 3, "%H", ptime);
if(lasttime>atoi(currtime))
printDate = 1;
lasttime = atoi(currtime);
lasttime = atoi(currtime);
#endif
#ifdef _WIN32
if(printDate)
{
@ -92,25 +92,25 @@ void ooTraceLogMessage(const char * logMessage)
systemTime.wMonth, systemTime.wDay, systemTime.wYear);
}
if(printTime) {
fprintf(gH323ep.fptraceFile, "%s:%03d %s", timeString,
fprintf(gH323ep.fptraceFile, "%s:%03d %s", timeString,
systemTime.wMilliseconds, logMessage);
}
else
fprintf(gH323ep.fptraceFile, "%s", logMessage);
fflush(gH323ep.fptraceFile);
#else
if(printDate)
{
printDate = 0;
strftime(dateString, 10, "%d", ptime);
fprintf(gH323ep.fptraceFile, "---------Date %s---------\n",
fprintf(gH323ep.fptraceFile, "---------Date %s---------\n",
dateString);
}
if(printTime) {
struct timeval systemTime;
gettimeofday(&systemTime, NULL);
fprintf(gH323ep.fptraceFile, "%s:%03ld %s", timeString,
fprintf(gH323ep.fptraceFile, "%s:%03ld %s", timeString,
(long) systemTime.tv_usec/1000, logMessage);
}
else
@ -118,7 +118,7 @@ void ooTraceLogMessage(const char * logMessage)
fflush(gH323ep.fptraceFile);
#endif
if(strchr(logMessage, '\n'))
printTime = 1;
else
@ -131,4 +131,3 @@ int ooLogAsn1Error(int stat, const char * fname, int lno)
OOTRACEERR4("Asn1Error: %d at %s:%d\n", stat, fname, lno);
return stat;
}

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file ootrace.h
* @file ootrace.h
* This file defines the trace functionality
*/
#include "ooCommon.h"
@ -67,7 +67,7 @@
#define OOTRACEINFO4(a,b,c,d) ooTrace(OOTRCLVLINFO,a,b,c,d)
#define OOTRACEINFO5(a,b,c,d,e) ooTrace(OOTRCLVLINFO,a,b,c,d,e)
#define OOTRACEINFO6(a,b,c,d,e,f) ooTrace(OOTRCLVLINFO,a,b,c,d,e, f)
#ifndef _COMPACT
#ifndef _COMPACT
#define OOTRACEDBGA1(a) ooTrace(OOTRCLVLDBGA,a)
#define OOTRACEDBGA2(a,b) ooTrace(OOTRCLVLDBGA,a,b)
#define OOTRACEDBGA3(a,b,c) ooTrace(OOTRCLVLDBGA,a,b,c)
@ -83,13 +83,13 @@
#define OOTRACEDBGC4(a,b,c,d) ooTrace(OOTRCLVLDBGC,a,b,c,d)
#define OOTRACEDBGC5(a,b,c,d,e) ooTrace(OOTRCLVLDBGC,a,b,c,d,e)
#else
#define OOTRACEDBGA1(a)
#define OOTRACEDBGA1(a)
#define OOTRACEDBGA2(a,b)
#define OOTRACEDBGA3(a,b,c)
#define OOTRACEDBGA4(a,b,c,d)
#define OOTRACEDBGA5(a,b,c,d,e)
#define OOTRACEDBGB1(a)
#define OOTRACEDBGB2(a,b)
#define OOTRACEDBGB2(a,b)
#define OOTRACEDBGB3(a,b,c)
#define OOTRACEDBGB4(a,b,c,d)
#define OOTRACEDBGC1(a)
@ -113,11 +113,11 @@ extern "C" {
/**
* This function is used to set the trace level.
* @param traceLevel New trace level. Various values are: OOTRCLVLERR,
* @param traceLevel New trace level. Various values are: OOTRCLVLERR,
* OOTRCLVLWARN, OOTRCLVLINFO, OOTRCLVLDBGA, OOTRCLVLDBGB,
* OOTRCLVLDBGC
*
* @return None
* @return None
*/
EXTERN void ooSetTraceThreshold(OOUINT32 traceLevel);
@ -126,7 +126,7 @@ EXTERN void ooSetTraceThreshold(OOUINT32 traceLevel);
*
* @param traceLevel Trace level for the message.
* @param fmtspec Printf style format spec.
* @param ... Printf style variable list of arguments
* @param ... Printf style variable list of arguments
*
* @return - none
*/

View File

@ -1,50 +1,50 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/*! \mainpage
/*! \mainpage
* <H1>ooH323c Stack Functions</H1>
*
* The <B>Objective Open H.323 for C (ooH323c)</B> protocol stack is an
* open source applications program interface (API) for building H.323 based
* applications. The stack implements Q.931/H.225 call signaling procedures,
* H.245 logical channel operations, and Registration, Admission, and Status
* The <B>Objective Open H.323 for C (ooH323c)</B> protocol stack is an
* open source applications program interface (API) for building H.323 based
* applications. The stack implements Q.931/H.225 call signaling procedures,
* H.245 logical channel operations, and Registration, Admission, and Status
* (RAS) messaging for Gatekeeper communications.
*
* The categories of user functions provided are as follows:
* <UL>
* <LI>Stack command functions. These are high level functions used to
* initiate common H.323 telephony operations (for example, to make a
* <LI>Stack command functions. These are high level functions used to
* initiate common H.323 telephony operations (for example, to make a
* call).</LI>
* <LI>Gatekeeper functions. These are high level functions for
* <LI>Gatekeeper functions. These are high level functions for
* managing communications with a gatekeeper using RAS messages.</LI>
* <LI>H.323 endpoint management functions. These are function for
* <LI>H.323 endpoint management functions. These are function for
* used for managing the global H.323 endpoint.</LI>
* <LI>Call management functions. These are functions used to manage
* <LI>Call management functions. These are functions used to manage
* active calls within the stack.</LI>
* <LI>Capability management functions. These functions are used for
* <LI>Capability management functions. These functions are used for
* negotiating capabilities between two different terminals.</LI>
* <LI>H.225 and H.245 message handling functions. Functions for
* <LI>H.225 and H.245 message handling functions. Functions for
* creating and handling H.323 standard ASN.1 messages.</LI>
* <LI>Q.931 functions. Functions for the execution of various
* <LI>Q.931 functions. Functions for the execution of various
* standard Q.931 operations.</LI>
* <LI>TCP/IP and UDP socket communication functions. Low-level
* <LI>TCP/IP and UDP socket communication functions. Low-level
* functions for writing data to and receiving data from sockets.</LI>
* </UL>
*/
*/
/**
* @file ootypes.h
* @file ootypes.h
* This file contains definitions of common constants and data structures.
*/
#ifndef _OOTYPES_H_
@ -71,7 +71,7 @@
#endif /* MAKE_DLL */
#endif /* EXTERN */
/**
/**
* @defgroup ootypes Common type and constant definitions.
* @{
*/
@ -86,7 +86,7 @@
*/
typedef enum OOMasterSlaveState {
OO_MasterSlave_Idle,
OO_MasterSlave_DetermineSent,
OO_MasterSlave_DetermineSent,
OO_MasterSlave_AckReceived,
OO_MasterSlave_Master,
OO_MasterSlave_Slave
@ -97,25 +97,25 @@ typedef enum OOMSAckStatus {
OO_msAck_remoteReceived
} OOMSAckStatus;
/**
* States defined for the capability exchange procedure.
/**
* States defined for the capability exchange procedure.
*/
typedef enum {
OO_LocalTermCapExchange_Idle,
OO_LocalTermCapSetSent,
OO_LocalTermCapSetAckRecvd,
OO_RemoteTermCapExchange_Idle,
OO_RemoteTermCapSetRecvd,
OO_LocalTermCapExchange_Idle,
OO_LocalTermCapSetSent,
OO_LocalTermCapSetAckRecvd,
OO_RemoteTermCapExchange_Idle,
OO_RemoteTermCapSetRecvd,
OO_RemoteTermCapSetAckSent
} OOCapExchangeState;
/**
/**
* Call clear reason codes.
*/
typedef enum OOCallClearReason {
OO_REASON_UNKNOWN=0,
OO_REASON_UNKNOWN=0,
OO_REASON_INVALIDMESSAGE,
OO_REASON_TRANSPORTFAILURE,
OO_REASON_TRANSPORTFAILURE,
OO_REASON_NOROUTE,
OO_REASON_NOUSER,
OO_REASON_NOBW,
@ -125,10 +125,10 @@ typedef enum OOCallClearReason {
OO_REASON_GK_UNREACHABLE,
OO_REASON_GK_CLEARED,
OO_REASON_NOCOMMON_CAPABILITIES,
OO_REASON_REMOTE_FWDED,
OO_REASON_REMOTE_FWDED,
OO_REASON_LOCAL_FWDED,
OO_REASON_REMOTE_CLEARED,
OO_REASON_LOCAL_CLEARED,
OO_REASON_REMOTE_CLEARED,
OO_REASON_LOCAL_CLEARED,
OO_REASON_REMOTE_BUSY,
OO_REASON_LOCAL_BUSY,
OO_REASON_REMOTE_NOANSWER,
@ -154,45 +154,45 @@ typedef enum OOCallClearReason {
/**
Various message types for H225 and H245 messages
*/
#define OO_MSGTYPE_MIN 101
#define OOQ931MSG 101
#define OOH245MSG 102
#define OOSetup 103
#define OOCallProceeding 104
#define OOAlert 105
#define OOConnect 106
#define OOReleaseComplete 107
#define OOFacility 108
#define OOInformationMessage 109
#define OOMasterSlaveDetermination 110
#define OOMasterSlaveAck 111
#define OOMasterSlaveReject 112
#define OOMasterSlaveRelease 113
#define OOTerminalCapabilitySet 114
#define OOTerminalCapabilitySetAck 115
#define OOTerminalCapabilitySetReject 116
#define OOTerminalCapabilitySetRelease 117
#define OOOpenLogicalChannel 118
#define OOOpenLogicalChannelAck 119
#define OOOpenLogicalChannelReject 120
#define OOOpenLogicalChannelRelease 121
#define OOOpenLogicalChannelConfirm 122
#define OOCloseLogicalChannel 123
#define OOCloseLogicalChannelAck 124
#define OORequestChannelClose 125
#define OORequestChannelCloseAck 126
#define OORequestChannelCloseReject 127
#define OORequestChannelCloseRelease 128
#define OOEndSessionCommand 129
#define OOUserInputIndication 130
#define OORequestModeAck 131
#define OORequestModeReject 132
#define OORequestMode 133
#define OORequestDelayResponse 134
#define OORequestDelayRequest 135
#define OOStatus 136
#define OO_MSGTYPE_MIN 0x65
#define OOQ931MSG 0x65
#define OOH245MSG 0x66
#define OOSetup 0x67
#define OOCallProceeding 0x68
#define OOAlert 0x69
#define OOConnect 0x6a
#define OOReleaseComplete 0x6b
#define OOFacility 0x6c
#define OOInformationMessage 0x6d
#define OOMasterSlaveDetermination 0x6e
#define OOMasterSlaveAck 0x6f
#define OOMasterSlaveReject 0x70
#define OOMasterSlaveRelease 0x71
#define OOTerminalCapabilitySet 0x72
#define OOTerminalCapabilitySetAck 0x73
#define OOTerminalCapabilitySetReject 0x74
#define OOTerminalCapabilitySetRelease 0x75
#define OOOpenLogicalChannel 0x76
#define OOOpenLogicalChannelAck 0x77
#define OOOpenLogicalChannelReject 0x78
#define OOOpenLogicalChannelRelease 0x79
#define OOOpenLogicalChannelConfirm 0x7a
#define OOCloseLogicalChannel 0x7b
#define OOCloseLogicalChannelAck 0x7c
#define OORequestChannelClose 0x7d
#define OORequestChannelCloseAck 0x7e
#define OORequestChannelCloseReject 0x7f
#define OORequestChannelCloseRelease 0x80
#define OOEndSessionCommand 0x81
#define OOUserInputIndication 0x82
#define OORequestModeAck 0x83
#define OORequestModeReject 0x84
#define OORequestMode 0x85
#define OORequestDelayResponse 0x86
#define OORequestDelayRequest 0x87
#define OOStatus 0x88
#define OO_MSGTYPE_MAX 136
#define OO_MSGTYPE_MAX 0x88
/* Timer types */
#define OO_CALLESTB_TIMER (1<<0)
@ -241,8 +241,8 @@ typedef enum OOCallMode {
/*TODO: Should add caller-id, callername etc. So that they can be changed per
call basis*/
/**
* This structure defines options that can be set at the level of an
* individual call. They override options set in the H.323 endpoint
* This structure defines options that can be set at the level of an
* individual call. They override options set in the H.323 endpoint
* structure.
*/
typedef struct ooCallOptions {
@ -252,7 +252,7 @@ typedef struct ooCallOptions {
OOCallMode callMode; /*!< Type of channel to setup with FastStart */
int transfercap; /* q931 cap */
}ooCallOptions;
struct OOH323CallData;
@ -266,4 +266,3 @@ typedef struct ooTimerCallback{
* @}
*/
#endif

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -23,7 +23,7 @@
ASN1BOOL isExtendableSize (Asn1SizeCnst* pSizeList);
static ASN1BOOL isFixedSize (Asn1SizeCnst* pSizeList);
ASN1BOOL alignCharStr
ASN1BOOL alignCharStr
(OOCTXT* pctxt, ASN1UINT len, ASN1UINT nbits, Asn1SizeCnst* pSize)
{
if (TRUE) {
@ -59,16 +59,16 @@ ASN1BOOL alignCharStr
return FALSE;
}
int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
ASN1UINT itemCount,
int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
ASN1UINT itemCount,
ASN1BOOL bitStrFlag,
ASN1BOOL* pAlignFlag)
{
ASN1UINT threshold = (bitStrFlag) ? 16 : 2;
if (pSizeList == 0 || itemCount > threshold)
if (pSizeList == 0 || itemCount > threshold)
*pAlignFlag = TRUE;
else if (isFixedSize(pSizeList))
else if (isFixedSize(pSizeList))
*pAlignFlag = FALSE;
else {
@ -91,8 +91,8 @@ int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
return (ASN_OK);
}
Asn1SizeCnst* checkSize (Asn1SizeCnst* pSizeList,
ASN1UINT value,
Asn1SizeCnst* checkSize (Asn1SizeCnst* pSizeList,
ASN1UINT value,
ASN1BOOL* pExtendable)
{
Asn1SizeCnst* lpSize = pSizeList;
@ -132,7 +132,7 @@ int addSizeConstraint (OOCTXT* pctxt, Asn1SizeCnst* pSize)
lpSize = pSize;
while (lpSize) {
if (pctxt->pSizeConstraint->lower <= lpSize->lower ||
pctxt->pSizeConstraint->upper >= lpSize->upper)
pctxt->pSizeConstraint->upper >= lpSize->upper)
{
/* Set the extension flag to the value of the size */
/* constraint structure that the item falls within.. */
@ -196,32 +196,32 @@ int checkSizeConstraint(OOCTXT* pctxt, int size)
}
ASN1UINT getUIntBitCount (ASN1UINT value)
{
{
/* Binary search - decision tree (5 tests, rarely 6) */
return
((value < 1<<15) ?
((value < 1<<7) ?
((value < 1<<3) ?
((value < 1<<1) ? ((value < 1<<0) ? 0 : 1) :
((value < 1<<1) ? ((value < 1<<0) ? 0 : 1) :
((value < 1<<2) ? 2 : 3)) :
((value < 1<<5) ? ((value < 1<<4) ? 4 : 5) :
((value < 1<<5) ? ((value < 1<<4) ? 4 : 5) :
((value < 1<<6) ? 6 : 7))) :
((value < 1<<11) ?
((value < 1<<9) ? ((value < 1<<8) ? 8 : 9) :
((value < 1<<9) ? ((value < 1<<8) ? 8 : 9) :
((value < 1<<10) ? 10 : 11)) :
((value < 1<<13) ? ((value < 1<<12) ? 12 : 13) :
((value < 1<<13) ? ((value < 1<<12) ? 12 : 13) :
((value < 1<<14) ? 14 : 15)))) :
((value < 1<<23) ?
((value < 1<<19) ?
((value < 1<<17) ? ((value < 1<<16) ? 16 : 17) :
((value < 1<<17) ? ((value < 1<<16) ? 16 : 17) :
((value < 1<<18) ? 18 : 19)) :
((value < 1<<21) ? ((value < 1<<20) ? 20 : 21) :
((value < 1<<21) ? ((value < 1<<20) ? 20 : 21) :
((value < 1<<22) ? 22 : 23))) :
((value < 1<<27) ?
((value < 1<<25) ? ((value < 1<<24) ? 24 : 25) :
((value < 1<<25) ? ((value < 1<<24) ? 24 : 25) :
((value < 1<<26) ? 26 : 27)) :
((value < 1<<29) ? ((value < 1<<28) ? 28 : 29) :
((value < 1<<30) ? 30 :
((value < 1<<29) ? ((value < 1<<28) ? 28 : 29) :
((value < 1<<30) ? 30 :
((value < 1UL<<31) ? 31 : 32))))));
}
@ -257,7 +257,7 @@ static ASN1BOOL isFixedSize (Asn1SizeCnst* pSizeList)
return FALSE;
}
void set16BitCharSet
void set16BitCharSet
(OOCTXT* pctxt, Asn116BitCharSet* pCharSet, Asn116BitCharSet* pAlphabet)
{
/* Permitted alphabet range can either be specified as a range of */
@ -267,7 +267,7 @@ void set16BitCharSet
int nocts = pAlphabet->charSet.nchars * 2;
pCharSet->charSet.nchars = pAlphabet->charSet.nchars;
pCharSet->charSet.data =
pCharSet->charSet.data =
(ASN116BITCHAR*) ASN1MALLOC (pctxt, nocts);
if (pCharSet->charSet.data != NULL)
@ -286,4 +286,3 @@ void set16BitCharSet
pCharSet->alignedBits <<= 1;
}

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/* This is an implementation of a simple print handler. It outputs
the fields of an encoded PER message to stdout in a structured output
/* This is an implementation of a simple print handler. It outputs
the fields of an encoded PER message to stdout in a structured output
format..
*/
#include "asterisk.h"
@ -35,10 +35,10 @@ AST_MUTEX_DEFINE_STATIC(printlock);
static const char* pVarName;
static int gIndentSpaces;
static const char* bitStrToString
static const char* bitStrToString
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz);
static const char* octStrToString
static const char* octStrToString
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz);
void printCharStr32BitValue (ASN1UINT nchars, ASN132BITCHAR* data);
@ -231,7 +231,7 @@ void printOpenTypeValue (ASN1UINT numocts, const ASN1OCTET* data)
OOTRACEDBGB1 ("< encoded data >\n");
}
static const char* bitStrToString
static const char* bitStrToString
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz)
{
size_t i;
@ -257,7 +257,7 @@ static const char* bitStrToString
return buffer;
}
static const char* octStrToString
static const char* octStrToString
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz)
{
size_t i;
@ -268,7 +268,7 @@ static const char* octStrToString
if (bufsiz > 1) buffer[1] = '\0';
for (i = 0; i < numocts; i++) {
if (i < bufsiz - 1) {
sprintf (lbuf, "%02x", (unsigned)data[i]);
sprintf (lbuf, "%02hhx", (unsigned char)data[i]);
strcat (&buffer[(i*2)+1], lbuf);
}
else break;

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
@file printHandler.h
This is an implementation of a simple print handler. It outputs
the fields of an encoded PER message to stdout in a structured output
@file printHandler.h
This is an implementation of a simple print handler. It outputs
the fields of an encoded PER message to stdout in a structured output
format..
*/

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/

View File

@ -1,21 +1,21 @@
/*
* Copyright (C) 1997-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
/**
* @file rtctype.h
/**
* @file rtctype.h
*/
#ifndef _RTCTYPE_H_
#define _RTCTYPE_H_
@ -83,4 +83,3 @@ extern EXTERN const ASN1OCTET rtCtypeTable[256];
#endif
#endif /* _RTCTYPE_H_ */

View File

@ -1,15 +1,15 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
@ -116,7 +116,7 @@ void* ooh323c_call_thread(void* dummy)
} while (mycthread->call != NULL && res >= 0);
ast_mutex_destroy(&mycthread->lock);
close(mycthread->thePipe[0]);
@ -240,10 +240,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g711 ulaw capability to H323 endpoint\n");
}
ret= ooH323EpAddG711Capability(OO_G711ULAW64K, gtxframes, grxframes,
ret= ooH323EpAddG711Capability(OO_G711ULAW64K, gtxframes, grxframes,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
if(ast_format_cmp(format, ast_format_alaw) == AST_FORMAT_CMP_EQUAL)
@ -251,10 +251,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g711 alaw capability to H323 endpoint\n");
}
ret= ooH323EpAddG711Capability(OO_G711ALAW64K, gtxframes, grxframes,
ret= ooH323EpAddG711Capability(OO_G711ALAW64K, gtxframes, grxframes,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -263,27 +263,27 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g729A capability to H323 endpoint\n");
}
ret = ooH323EpAddG729Capability(OO_G729A, 2, 24,
ret = ooH323EpAddG729Capability(OO_G729A, 2, 24,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
if (gH323Debug) {
ast_verb(0, "\tAdding g729 capability to H323 endpoint\n");
}
ret |= ooH323EpAddG729Capability(OO_G729, 2, 24,
ret |= ooH323EpAddG729Capability(OO_G729, 2, 24,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
if (gH323Debug) {
ast_verb(0, "\tAdding g729b capability to H323 endpoint\n");
}
ret |= ooH323EpAddG729Capability(OO_G729B, 2, 24,
ret |= ooH323EpAddG729Capability(OO_G729B, 2, 24,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -292,10 +292,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g7231 capability to H323 endpoint\n");
}
ret = ooH323EpAddG7231Capability(OO_G7231, 1, 1, FALSE,
ret = ooH323EpAddG7231Capability(OO_G7231, 1, 1, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -305,10 +305,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g726 capability to H323 endpoint\n");
}
ret = ooH323EpAddG726Capability(OO_G726, gtxframes, grxframes, FALSE,
ret = ooH323EpAddG726Capability(OO_G726, gtxframes, grxframes, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -318,10 +318,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding g726aal2 capability to H323 endpoint\n");
}
ret = ooH323EpAddG726Capability(OO_G726AAL2, gtxframes, grxframes, FALSE,
ret = ooH323EpAddG726Capability(OO_G726AAL2, gtxframes, grxframes, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -331,10 +331,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding h263 capability to H323 endpoint\n");
}
ret = ooH323EpAddH263VideoCapability(OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
ret = ooH323EpAddH263VideoCapability(OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -344,10 +344,10 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding gsm capability to H323 endpoint\n");
}
ret = ooH323EpAddGSMCapability(OO_GSMFULLRATE, 4, FALSE, FALSE,
ret = ooH323EpAddGSMCapability(OO_GSMFULLRATE, 4, FALSE, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -357,17 +357,17 @@ int ooh323c_set_capability
if (gH323Debug) {
ast_verb(0, "\tAdding speex capability to H323 endpoint\n");
}
ret = ooH323EpAddSpeexCapability(OO_SPEEX, 4, 4, FALSE,
ret = ooH323EpAddSpeexCapability(OO_SPEEX, 4, 4, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
ao2_ref(format, -1);
ao2_ref(format, -1);
}
if(dtmf & H323_DTMF_CISCO)
ret |= ooH323EpEnableDTMFCISCO(0);
if(dtmf & H323_DTMF_RFC2833)
@ -386,7 +386,7 @@ int ooh323c_set_capability_for_call
{
int ret = 0, x, txframes;
if (gH323Debug) {
ast_verb(0, "\tAdding capabilities to call(%s, %s)\n", call->callType,
ast_verb(0, "\tAdding capabilities to call(%s, %s)\n", call->callType,
call->callToken);
}
if(dtmf & H323_DTMF_CISCO || 1)
@ -399,7 +399,7 @@ int ooh323c_set_capability_for_call
ret |= ooCallEnableDTMFH245Signal(call);
if (t38support)
ooCapabilityAddT38Capability(call, OO_T38, OORXANDTX,
ooCapabilityAddT38Capability(call, OO_T38, OORXANDTX,
&ooh323c_start_receive_datachannel,
&ooh323c_start_transmit_datachannel,
&ooh323c_stop_receive_datachannel,
@ -412,15 +412,15 @@ int ooh323c_set_capability_for_call
if(ast_format_cmp(format, ast_format_ulaw) == AST_FORMAT_CMP_EQUAL)
{
if (gH323Debug) {
ast_verb(0, "\tAdding g711 ulaw capability to call(%s, %s)\n",
ast_verb(0, "\tAdding g711 ulaw capability to call(%s, %s)\n",
call->callType, call->callToken);
}
txframes = ast_format_cap_get_format_framing(cap, format);
ret= ooCallAddG711Capability(call, OO_G711ULAW64K, txframes,
txframes, OORXANDTX,
ret= ooCallAddG711Capability(call, OO_G711ULAW64K, txframes,
txframes, OORXANDTX,
&ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
if(ast_format_cmp(format, ast_format_alaw) == AST_FORMAT_CMP_EQUAL)
@ -430,11 +430,11 @@ int ooh323c_set_capability_for_call
call->callType, call->callToken);
}
txframes = ast_format_cap_get_format_framing(cap, format);
ret= ooCallAddG711Capability(call, OO_G711ALAW64K, txframes,
txframes, OORXANDTX,
ret= ooCallAddG711Capability(call, OO_G711ALAW64K, txframes,
txframes, OORXANDTX,
&ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -448,7 +448,7 @@ int ooh323c_set_capability_for_call
ret = ooCallAddG726Capability(call, OO_G726, txframes, grxframes, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -463,23 +463,23 @@ int ooh323c_set_capability_for_call
ret = ooCallAddG726Capability(call, OO_G726AAL2, txframes, grxframes, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
if(ast_format_cmp(format, ast_format_g729) == AST_FORMAT_CMP_EQUAL)
{
txframes = (ast_format_cap_get_format_framing(cap, format))/10;
if (gH323Debug) {
ast_verb(0, "\tAdding g729A capability to call(%s, %s)\n",
call->callType, call->callToken);
}
ret= ooCallAddG729Capability(call, OO_G729A, txframes, txframes,
ret= ooCallAddG729Capability(call, OO_G729A, txframes, txframes,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
if (g729onlyA)
continue;
@ -487,19 +487,19 @@ int ooh323c_set_capability_for_call
ast_verb(0, "\tAdding g729 capability to call(%s, %s)\n",
call->callType, call->callToken);
}
ret|= ooCallAddG729Capability(call, OO_G729, txframes, txframes,
ret|= ooCallAddG729Capability(call, OO_G729, txframes, txframes,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
if (gH323Debug) {
ast_verb(0, "\tAdding g729B capability to call(%s, %s)\n",
call->callType, call->callToken);
}
ret|= ooCallAddG729Capability(call, OO_G729B, txframes, txframes,
ret|= ooCallAddG729Capability(call, OO_G729B, txframes, txframes,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -510,10 +510,10 @@ int ooh323c_set_capability_for_call
ast_verb(0, "\tAdding g7231 capability to call (%s, %s)\n",
call->callType, call->callToken);
}
ret = ooCallAddG7231Capability(call, OO_G7231, 1, 1, FALSE,
ret = ooCallAddG7231Capability(call, OO_G7231, 1, 1, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -524,10 +524,10 @@ int ooh323c_set_capability_for_call
ast_verb(0, "\tAdding h263 capability to call (%s, %s)\n",
call->callType, call->callToken);
}
ret = ooCallAddH263VideoCapability(call, OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
ret = ooCallAddH263VideoCapability(call, OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -535,26 +535,26 @@ int ooh323c_set_capability_for_call
if(ast_format_cmp(format, ast_format_gsm) == AST_FORMAT_CMP_EQUAL)
{
if (gH323Debug) {
ast_verb(0, "\tAdding gsm capability to call(%s, %s)\n",
ast_verb(0, "\tAdding gsm capability to call(%s, %s)\n",
call->callType, call->callToken);
}
ret = ooCallAddGSMCapability(call, OO_GSMFULLRATE, 4, FALSE, FALSE,
ret = ooCallAddGSMCapability(call, OO_GSMFULLRATE, 4, FALSE, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
if(ast_format_cmp(format, ast_format_speex) == AST_FORMAT_CMP_EQUAL)
{
if (gH323Debug) {
ast_verb(0, "\tAdding Speex capability to call(%s, %s)\n",
ast_verb(0, "\tAdding Speex capability to call(%s, %s)\n",
call->callType, call->callToken);
}
ret = ooCallAddSpeexCapability(call, OO_SPEEX, 4, 4, FALSE,
ret = ooCallAddSpeexCapability(call, OO_SPEEX, 4, 4, FALSE,
OORXANDTX, &ooh323c_start_receive_channel,
&ooh323c_start_transmit_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_receive_channel,
&ooh323c_stop_transmit_channel);
}
@ -569,7 +569,7 @@ int ooh323c_set_aliases(ooAliases * aliases)
while(cur)
{
switch(cur->type)
{
{
case T_H225AliasAddress_dialedDigits:
ooH323EpAddAliasDialedDigits(cur->value);
break;
@ -589,7 +589,7 @@ int ooh323c_set_aliases(ooAliases * aliases)
}
return 1;
}
int ooh323c_start_receive_channel(ooCallData *call, ooLogicalChannel *pChannel)
{
struct ast_format *tmpfmt = NULL;
@ -694,5 +694,3 @@ struct ast_format *convertH323CapToAsteriskCap(int cap)
return NULL;
}

View File

@ -1,20 +1,20 @@
/*
* Copyright (C) 2004-2005 by Objective Systems, Inc.
*
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* This software is furnished under an open source license and may be
* used and copied only in accordance with the terms of this license.
* The text of the license may generally be found in the root
* directory of this installation in the COPYING file. It
* can also be viewed online at the following URL:
*
* http://www.obj-sys.com/open/license.html
*
* Any redistributions of this file including modified versions must
* Any redistributions of this file including modified versions must
* maintain this copyright notice.
*
*****************************************************************************/
#ifndef _OO_H323CDRIVER_H_
#define __OO_H323DRIVER_H_
#define _OO_H323CDRIVER_H_
#include "chan_ooh323.h"
#include "ootypes.h"
#include "ooh323ep.h"

View File

@ -35,7 +35,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/stat.h>
#include <mysql/mysql.h>
#include <mysql/mysql_version.h>
#include <mysql/errmsg.h>
#include "asterisk/channel.h"
@ -126,7 +125,6 @@ static char *handle_cli_realtime_mysql_status(struct ast_cli_entry *e, int cmd,
static char *handle_cli_realtime_mysql_cache(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static int load_mysql_config(struct ast_config *config, const char *category, struct mysql_conn *conn);
static int require_mysql(const char *database, const char *tablename, va_list ap);
static int internal_require(const char *database, const char *table, ...) attribute_sentinel;
static struct ast_cli_entry cli_realtime_mysql_status[] = {
AST_CLI_DEFINE(handle_cli_realtime_mysql_status, "Shows connection information for the MySQL RealTime driver"),
@ -165,16 +163,6 @@ static struct mysql_conn *find_database(const char *database, int for_write)
#define release_database(a) ast_mutex_unlock(&(a)->lock)
static int internal_require(const char *database, const char *table, ...)
{
va_list ap;
int res;
va_start(ap, table);
res = require_mysql(database, table, ap);
va_end(ap);
return res;
}
static void destroy_table(struct tables *table)
{
struct columns *column;
@ -316,6 +304,11 @@ static char *decode_chunk(char *chunk)
return orig;
}
#define IS_SQL_LIKE_CLAUSE(x) ((x) && ast_ends_with(x, " LIKE"))
/* MySQL requires us to escape the escape... yo dawg */
static char *ESCAPE_CLAUSE = " ESCAPE '\\\\'";
static struct ast_variable *realtime_mysql(const char *database, const char *table, const struct ast_variable *rt_fields)
{
struct mysql_conn *dbh;
@ -328,6 +321,7 @@ static struct ast_variable *realtime_mysql(const char *database, const char *tab
char *stringp;
char *chunk;
char *op;
char *escape = "";
const struct ast_variable *field = rt_fields;
struct ast_variable *var=NULL, *prev=NULL;
@ -358,20 +352,29 @@ static struct ast_variable *realtime_mysql(const char *database, const char *tab
/* Create the first part of the query using the first parameter/value pairs we just extracted
If there is only 1 set, then we have our query. Otherwise, loop thru the list and concat */
if (!strchr(field->name, ' '))
op = " =";
else
if (!strchr(field->name, ' ')) {
op = " =";
} else {
op = "";
if (IS_SQL_LIKE_CLAUSE(field->name)) {
escape = ESCAPE_CLAUSE;
}
}
ESCAPE_STRING(buf, field->value);
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'", table, field->name, op, ast_str_buffer(buf));
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'%s", table, field->name, op, ast_str_buffer(buf), escape);
while ((field = field->next)) {
if (!strchr(field->name, ' '))
op = " =";
else
escape = "";
if (!strchr(field->name, ' ')) {
op = " =";
} else {
op = "";
if (IS_SQL_LIKE_CLAUSE(field->name)) {
escape = ESCAPE_CLAUSE;
}
}
ESCAPE_STRING(buf, field->value);
ast_str_append(&sql, 0, " AND %s%s '%s'", field->name, op, ast_str_buffer(buf));
ast_str_append(&sql, 0, " AND %s%s '%s'%s", field->name, op, ast_str_buffer(buf), escape);
}
ast_debug(1, "MySQL RealTime: Retrieve SQL: %s\n", ast_str_buffer(sql));
@ -429,6 +432,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
char *stringp;
char *chunk;
char *op;
char *escape = "";
const struct ast_variable *field = rt_fields;
struct ast_variable *var = NULL;
struct ast_config *cfg = NULL;
@ -444,7 +448,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
release_database(dbh);
return NULL;
}
if (!(cfg = ast_config_new())) {
/* If I can't alloc memory at this point, why bother doing anything else? */
ast_log(LOG_WARNING, "Out of memory!\n");
@ -475,17 +479,29 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
/* Create the first part of the query using the first parameter/value pairs we just extracted
If there is only 1 set, then we have our query. Otherwise, loop thru the list and concat */
if (!strchr(field->name, ' '))
if (!strchr(field->name, ' ')) {
op = " =";
else
} else {
op = "";
if (IS_SQL_LIKE_CLAUSE(field->name)) {
escape = ESCAPE_CLAUSE;
}
}
ESCAPE_STRING(buf, field->value);
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'", table, field->name, op, ast_str_buffer(buf));
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'%s", table, field->name, op, ast_str_buffer(buf), escape);
while ((field = field->next)) {
if (!strchr(field->name, ' ')) op = " ="; else op = "";
escape = "";
if (!strchr(field->name, ' ')) {
op = " =";
} else {
op = "";
if (IS_SQL_LIKE_CLAUSE(field->name)) {
escape = ESCAPE_CLAUSE;
}
}
ESCAPE_STRING(buf, field->value);
ast_str_append(&sql, 0, " AND %s%s '%s'", field->name, op, ast_str_buffer(buf));
ast_str_append(&sql, 0, " AND %s%s '%s'%s", field->name, op, ast_str_buffer(buf), escape);
}
if (initfield) {
@ -508,9 +524,8 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
while ((row = mysql_fetch_row(result))) {
var = NULL;
cat = ast_category_new("", "", -1);
cat = ast_category_new_anonymous();
if (!cat) {
ast_log(LOG_WARNING, "Out of memory!\n");
continue;
}
for (i = 0; i < numFields; i++) {
@ -541,7 +556,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
static int update_mysql(const char *database, const char *tablename, const char *keyfield, const char *lookup, const struct ast_variable *rt_fields)
{
struct mysql_conn *dbh;
my_ulonglong numrows;
uint64_t numrows;
const struct ast_variable *field = rt_fields;
struct ast_str *sql = ast_str_thread_get(&sql_buf, 100), *buf = ast_str_thread_get(&scratch_buf, 100);
struct tables *table;
@ -600,11 +615,6 @@ static int update_mysql(const char *database, const char *tablename, const char
ESCAPE_STRING(buf, field->value);
ast_str_set(&sql, 0, "UPDATE %s SET `%s` = '%s'", tablename, field->name, ast_str_buffer(buf));
/* If the column length isn't long enough, give a chance to lengthen it. */
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
}
while ((field = field->next)) {
/* If the column is not within the table, then skip it */
if (!(column = find_column(table, field->name))) {
@ -614,11 +624,6 @@ static int update_mysql(const char *database, const char *tablename, const char
ESCAPE_STRING(buf, field->value);
ast_str_append(&sql, 0, ", `%s` = '%s'", field->name, ast_str_buffer(buf));
/* If the column length isn't long enough, give a chance to lengthen it. */
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
}
}
ESCAPE_STRING(buf, lookup);
@ -638,7 +643,7 @@ static int update_mysql(const char *database, const char *tablename, const char
release_table(table);
release_database(dbh);
ast_debug(1, "MySQL RealTime: Updated %llu rows on table: %s\n", numrows, tablename);
ast_debug(1, "MySQL RealTime: Updated %" PRIu64 " rows on table: %s\n", numrows, tablename);
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
* An integer greater than zero indicates the number of rows affected
@ -652,7 +657,7 @@ static int update_mysql(const char *database, const char *tablename, const char
static int update2_mysql(const char *database, const char *tablename, const struct ast_variable *lookup_fields, const struct ast_variable *update_fields)
{
struct mysql_conn *dbh;
my_ulonglong numrows;
uint64_t numrows;
int first;
const struct ast_variable *field;
struct ast_str *sql = ast_str_thread_get(&sql_buf, 100), *buf = ast_str_thread_get(&scratch_buf, 100);
@ -703,11 +708,6 @@ static int update2_mysql(const char *database, const char *tablename, const stru
ESCAPE_STRING(buf, field->value);
ast_str_append(&where, 0, "%s `%s` = '%s'", first ? "" : " AND", field->name, ast_str_buffer(buf));
first = 0;
/* If the column length isn't long enough, give a chance to lengthen it. */
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
}
}
first = 1;
@ -721,11 +721,6 @@ static int update2_mysql(const char *database, const char *tablename, const stru
ESCAPE_STRING(buf, field->value);
ast_str_append(&sql, 0, "%s `%s` = '%s'", first ? "" : ",", field->name, ast_str_buffer(buf));
first = 0;
/* If the column length isn't long enough, give a chance to lengthen it. */
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
}
}
release_table(table);
@ -745,7 +740,7 @@ static int update2_mysql(const char *database, const char *tablename, const stru
numrows = mysql_affected_rows(&dbh->handle);
release_database(dbh);
ast_debug(1, "MySQL RealTime: Updated %llu rows on table: %s\n", numrows, tablename);
ast_debug(1, "MySQL RealTime: Updated %" PRIu64 " rows on table: %s\n", numrows, tablename);
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
* An integer greater than zero indicates the number of rows affected
@ -755,11 +750,10 @@ static int update2_mysql(const char *database, const char *tablename, const stru
return (int)numrows;
}
static int store_mysql(const char *database, const char *table, const struct ast_variable *rt_fields)
{
struct mysql_conn *dbh;
my_ulonglong insertid;
struct ast_str *sql = ast_str_thread_get(&sql_buf, 16);
struct ast_str *sql2 = ast_str_thread_get(&sql2_buf, 16);
struct ast_str *buf = ast_str_thread_get(&scratch_buf, 16);
@ -792,15 +786,11 @@ static int store_mysql(const char *database, const char *table, const struct ast
ast_str_set(&sql, 0, "INSERT INTO %s (`%s`", table, field->name);
ast_str_set(&sql2, 0, ") VALUES ('%s'", ast_str_buffer(buf));
internal_require(database, table, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
while ((field = field->next)) {
ESCAPE_STRING(buf, field->value);
if (internal_require(database, table, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL) == 0) {
ast_str_append(&sql, 0, ", `%s`", field->name);
ast_str_append(&sql2, 0, ", '%s'", ast_str_buffer(buf));
}
ast_str_append(&sql, 0, ", `%s`", field->name);
ast_str_append(&sql2, 0, ", '%s'", ast_str_buffer(buf));
}
ast_str_append(&sql, 0, "%s)", ast_str_buffer(sql2));
ast_debug(1,"MySQL RealTime: Insert SQL: %s\n", ast_str_buffer(sql));
@ -812,24 +802,17 @@ static int store_mysql(const char *database, const char *table, const struct ast
return -1;
}
/*!\note The return value is non-portable and may change in future versions. */
insertid = mysql_insert_id(&dbh->handle);
release_database(dbh);
ast_debug(1, "MySQL RealTime: row inserted on table: %s, id: %llu\n", table, insertid);
ast_debug(1, "MySQL RealTime: row inserted on table: %s\n", table);
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
* An integer greater than zero indicates the number of rows affected
* Zero indicates that no records were updated
* -1 indicates that the query returned an error (although, if the query failed, it should have been caught above.)
*/
return (int)insertid;
return 1;
}
static int destroy_mysql(const char *database, const char *table, const char *keyfield, const char *lookup, const struct ast_variable *rt_fields)
{
struct mysql_conn *dbh;
my_ulonglong numrows;
uint64_t numrows;
struct ast_str *sql = ast_str_thread_get(&sql_buf, 16);
struct ast_str *buf = ast_str_thread_get(&scratch_buf, 16);
const struct ast_variable *field;
@ -881,7 +864,7 @@ static int destroy_mysql(const char *database, const char *table, const char *ke
numrows = mysql_affected_rows(&dbh->handle);
release_database(dbh);
ast_debug(1, "MySQL RealTime: Deleted %llu rows on table: %s\n", numrows, table);
ast_debug(1, "MySQL RealTime: Deleted %" PRIu64 " rows on table: %s\n", numrows, table);
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
* An integer greater than zero indicates the number of rows affected
@ -891,13 +874,13 @@ static int destroy_mysql(const char *database, const char *table, const char *ke
return (int)numrows;
}
static struct ast_config *config_mysql(const char *database, const char *table, const char *file, struct ast_config *cfg, struct ast_flags config_flags, const char *unused, const char *who_asked)
{
struct mysql_conn *dbh;
MYSQL_RES *result;
MYSQL_ROW row;
my_ulonglong num_rows;
uint64_t num_rows;
struct ast_variable *new_v;
struct ast_category *cur_cat = NULL;
struct ast_str *sql = ast_str_thread_get(&sql_buf, 200);
@ -935,7 +918,7 @@ static struct ast_config *config_mysql(const char *database, const char *table,
if ((result = mysql_store_result(&dbh->handle))) {
num_rows = mysql_num_rows(result);
ast_debug(1, "MySQL RealTime: Found %llu rows.\n", num_rows);
ast_debug(1, "MySQL RealTime: Found %" PRIu64 " rows.\n", num_rows);
/* There might exist a better way to access the column names other than counting,
* but I believe that would require another loop that we don't need. */
@ -951,8 +934,8 @@ static struct ast_config *config_mysql(const char *database, const char *table,
}
if (strcmp(last, row[0]) || last_cat_metric != atoi(row[3])) {
if (!(cur_cat = ast_category_new(row[0], "", -1))) {
ast_log(LOG_WARNING, "Out of memory!\n");
cur_cat = ast_category_new_dynamic(row[0]);
if (!cur_cat) {
break;
}
strcpy(last, row[0]);
@ -989,105 +972,14 @@ static int unload_mysql(const char *database, const char *tablename)
return cur ? 0 : -1;
}
static int modify_mysql(const char *database, const char *tablename, struct columns *column, require_type type, int len)
{
/*!\note Cannot use ANY of the same scratch space as is used in other functions, as this one is interspersed. */
struct ast_str *sql = ast_str_thread_get(&modify_buf, 100), *escbuf = ast_str_thread_get(&modify2_buf, 100);
struct ast_str *typestr = ast_str_thread_get(&modify3_buf, 30);
int waschar = strncasecmp(column->type, "char", 4) == 0 ? 1 : 0;
int wasvarchar = strncasecmp(column->type, "varchar", 7) == 0 ? 1 : 0;
int res = 0;
struct mysql_conn *dbh;
if (!(dbh = find_database(database, 1))) {
return -1;
}
do {
if (type == RQ_CHAR || waschar || wasvarchar) {
if (wasvarchar) {
ast_str_set(&typestr, 0, "VARCHAR(%d)", len);
} else {
ast_str_set(&typestr, 0, "CHAR(%d)", len);
}
} else if (type == RQ_UINTEGER1) {
ast_str_set(&typestr, 0, "tinyint(3) unsigned");
} else if (type == RQ_INTEGER1) {
ast_str_set(&typestr, 0, "tinyint(4)");
} else if (type == RQ_UINTEGER2) {
ast_str_set(&typestr, 0, "smallint(5) unsigned");
} else if (type == RQ_INTEGER2) {
ast_str_set(&typestr, 0, "smallint(6)");
} else if (type == RQ_UINTEGER3) {
ast_str_set(&typestr, 0, "mediumint(8) unsigned");
} else if (type == RQ_INTEGER3) {
ast_str_set(&typestr, 0, "mediumint(8)");
} else if (type == RQ_UINTEGER4) {
ast_str_set(&typestr, 0, "int(10) unsigned");
} else if (type == RQ_INTEGER4) {
ast_str_set(&typestr, 0, "int(11)");
} else if (type == RQ_UINTEGER8) {
ast_str_set(&typestr, 0, "bigint(19) unsigned");
} else if (type == RQ_INTEGER8) {
ast_str_set(&typestr, 0, "bigint(20)");
} else if (type == RQ_DATETIME) {
ast_str_set(&typestr, 0, "datetime");
} else if (type == RQ_DATE) {
ast_str_set(&typestr, 0, "date");
} else if (type == RQ_FLOAT) {
ast_str_set(&typestr, 0, "FLOAT(%d,2)", len);
} else {
ast_log(LOG_ERROR, "Unknown type (should NEVER happen)\n");
res = -1;
break;
}
ast_str_set(&sql, 0, "ALTER TABLE %s MODIFY `%s` %s", tablename, column->name, ast_str_buffer(typestr));
if (!column->null) {
ast_str_append(&sql, 0, " NOT NULL");
}
if (!ast_strlen_zero(column->dflt)) {
ESCAPE_STRING(escbuf, column->dflt);
ast_str_append(&sql, 0, " DEFAULT '%s'", ast_str_buffer(escbuf));
}
if (!mysql_reconnect(dbh)) {
ast_log(LOG_ERROR, "Unable to add column: %s\n", ast_str_buffer(sql));
res = -1;
break;
}
/* Execution. */
if (mysql_real_query(&dbh->handle, ast_str_buffer(sql), ast_str_strlen(sql))) {
ast_log(LOG_WARNING, "MySQL RealTime: Failed to modify database: %s\n", mysql_error(&dbh->handle));
ast_debug(1, "MySQL RealTime: Query: %s\n", ast_str_buffer(sql));
res = -1;
}
} while (0);
release_database(dbh);
return res;
}
#define PICK_WHICH_ALTER_ACTION(stringtype) \
if (table->database->requirements == RQ_WARN) { \
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) { \
table_altered = 1; \
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) { \
table_altered = 1; \
} else { \
res = -1; \
}
static int require_mysql(const char *database, const char *tablename, va_list ap)
{
struct columns *column;
struct tables *table = find_table(database, tablename);
char *elm;
int type, size, res = 0, table_altered = 0;
int type;
int size;
int res = 0;
if (!table) {
ast_log(LOG_WARNING, "Table %s not found in database. This table should exist if you're using realtime.\n", tablename);
@ -1097,55 +989,54 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
while ((elm = va_arg(ap, char *))) {
type = va_arg(ap, require_type);
size = va_arg(ap, int);
AST_LIST_TRAVERSE(&table->columns, column, list) {
if (strcmp(column->name, elm) == 0) {
/* Char can hold anything, as long as it is large enough */
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
if ((size > column->len) && column->len != -1) {
if (table->database->requirements == RQ_WARN) {
ast_log(LOG_WARNING, "Realtime table %s@%s: Column '%s' should be at least %d long, but is only %d long.\n", database, tablename, column->name, size, column->len);
res = -1;
} else if (modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
ast_log(LOG_WARNING, "Realtime table %s@%s: Column '%s' should be at least %d long, but is only %d long.\n", database, tablename, column->name, size, column->len);
res = -1;
}
} else if (strcasestr(column->type, "unsigned")) {
if (!ast_rq_is_int(type)) {
if (table->database->requirements == RQ_WARN) {
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
database, tablename, column->name, column->type,
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" : "a rather stiff drink");
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
database, tablename, column->name, column->type,
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" : "a rather stiff drink");
res = -1;
} else if (strncasecmp(column->type, "tinyint", 1) == 0) {
if (type != RQ_UINTEGER1) {
PICK_WHICH_ALTER_ACTION(unsigned tinyint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "smallint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 && type != RQ_UINTEGER2) {
PICK_WHICH_ALTER_ACTION(unsigned smallint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "mediumint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
type != RQ_UINTEGER3) {
PICK_WHICH_ALTER_ACTION(unsigned mediumint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "int", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
type != RQ_UINTEGER4) {
PICK_WHICH_ALTER_ACTION(unsigned int)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "bigint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
@ -1153,45 +1044,52 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
type != RQ_UINTEGER4 && type != RQ_INTEGER4 &&
type != RQ_UINTEGER8) {
PICK_WHICH_ALTER_ACTION(unsigned bigint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
}
} else if (strcasestr(column->type, "int")) {
if (!ast_rq_is_int(type)) {
if (table->database->requirements == RQ_WARN) {
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
database, tablename, column->name, column->type,
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" :
"to get a life, rather than writing silly error messages");
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
database, tablename, column->name, column->type,
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" :
"to get a life, rather than writing silly error messages");
res = -1;
} else if (strncasecmp(column->type, "tinyint", 1) == 0) {
if (type != RQ_INTEGER1) {
PICK_WHICH_ALTER_ACTION(tinyint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "smallint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 && type != RQ_INTEGER2) {
PICK_WHICH_ALTER_ACTION(smallint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "mediumint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
type != RQ_INTEGER3) {
PICK_WHICH_ALTER_ACTION(mediumint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "int", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
type != RQ_INTEGER4) {
PICK_WHICH_ALTER_ACTION(int)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
} else if (strncasecmp(column->type, "bigint", 1) == 0) {
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
@ -1199,131 +1097,41 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
type != RQ_UINTEGER4 && type != RQ_INTEGER4 &&
type != RQ_INTEGER8) {
PICK_WHICH_ALTER_ACTION(bigint)
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
"the required data length: %d (detected stringtype)\n", \
tablename, database, column->name, size); \
res = -1; \
}
}
} else if (strncmp(column->type, "float", 5) == 0 && !ast_rq_is_int(type) && type != RQ_FLOAT) {
if (table->database->requirements == RQ_WARN) {
} else if (strncmp(column->type, "float", 5) == 0) {
if (!ast_rq_is_int(type) && type != RQ_FLOAT) {
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
} else if ((strncmp(column->type, "datetime", 8) == 0 || strncmp(column->type, "timestamp", 9) == 0) && type != RQ_DATETIME) {
if (table->database->requirements == RQ_WARN) {
} else if (strncmp(column->type, "datetime", 8) == 0 || strncmp(column->type, "timestamp", 9) == 0) {
if (type != RQ_DATETIME) {
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
} else if ((strncmp(column->type, "date", 4) == 0) && type != RQ_DATE) {
if (table->database->requirements == RQ_WARN) {
} else if (strncmp(column->type, "date", 4) == 0) {
if (type != RQ_DATE) {
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
res = -1;
}
} else { /* Other, possibly unsupported types? */
if (table->database->requirements == RQ_WARN) {
ast_log(LOG_WARNING, "Possibly unsupported column type '%s' on column '%s'\n", column->type, column->name);
res = -1;
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
table_altered = 1;
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
table_altered = 1;
} else {
}
ast_log(LOG_WARNING, "Possibly unsupported column type '%s' on column '%s'\n", column->type, column->name);
res = -1;
}
break;
}
}
if (!column) {
if (table->database->requirements == RQ_WARN) {
ast_log(LOG_WARNING, "Table %s requires a column '%s' of size '%d', but no such column exists.\n", tablename, elm, size);
} else {
struct ast_str *sql = ast_str_thread_get(&modify_buf, 100), *fieldtype = ast_str_thread_get(&modify3_buf, 16);
if (table->database->requirements == RQ_CREATECHAR || type == RQ_CHAR) {
ast_str_set(&fieldtype, 0, "CHAR(%d)", size);
} else if (type == RQ_UINTEGER1 || type == RQ_UINTEGER2 || type == RQ_UINTEGER3 || type == RQ_UINTEGER4 || type == RQ_UINTEGER8) {
if (type == RQ_UINTEGER1) {
ast_str_set(&fieldtype, 0, "TINYINT(3) UNSIGNED");
} else if (type == RQ_UINTEGER2) {
ast_str_set(&fieldtype, 0, "SMALLINT(5) UNSIGNED");
} else if (type == RQ_UINTEGER3) {
ast_str_set(&fieldtype, 0, "MEDIUMINT(8) UNSIGNED");
} else if (type == RQ_UINTEGER4) {
ast_str_set(&fieldtype, 0, "INT(10) UNSIGNED");
} else if (type == RQ_UINTEGER8) {
ast_str_set(&fieldtype, 0, "BIGINT(20) UNSIGNED");
} else {
ast_log(LOG_WARNING, "Somebody should check this code for a rather large bug... it's about to squash Tokyo.\n");
continue;
}
} else if (ast_rq_is_int(type)) {
if (type == RQ_INTEGER1) {
ast_str_set(&fieldtype, 0, "TINYINT(3)");
} else if (type == RQ_INTEGER2) {
ast_str_set(&fieldtype, 0, "SMALLINT(5)");
} else if (type == RQ_INTEGER3) {
ast_str_set(&fieldtype, 0, "MEDIUMINT(8)");
} else if (type == RQ_INTEGER4) {
ast_str_set(&fieldtype, 0, "INT(10)");
} else if (type == RQ_INTEGER8) {
ast_str_set(&fieldtype, 0, "BIGINT(20)");
} else {
ast_log(LOG_WARNING, "Somebody should check this code for a rather large bug... it's about to eat Cincinnati.\n");
continue;
}
} else if (type == RQ_FLOAT) {
ast_str_set(&fieldtype, 0, "FLOAT");
} else if (type == RQ_DATE) {
ast_str_set(&fieldtype, 0, "DATE");
} else if (type == RQ_DATETIME) {
ast_str_set(&fieldtype, 0, "DATETIME");
} else {
continue;
}
ast_str_set(&sql, 0, "ALTER TABLE %s ADD COLUMN %s %s", tablename, elm, ast_str_buffer(fieldtype));
ast_mutex_lock(&table->database->lock);
if (!mysql_reconnect(table->database)) {
ast_mutex_unlock(&table->database->lock);
ast_log(LOG_ERROR, "Unable to add column: %s\n", ast_str_buffer(sql));
continue;
}
/* Execution. */
if (mysql_real_query(&table->database->handle, ast_str_buffer(sql), ast_str_strlen(sql))) {
ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n");
ast_debug(1, "MySQL RealTime: Query: %s\n", ast_str_buffer(sql));
ast_debug(1, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&table->database->handle));
} else {
table_altered = 1;
}
}
ast_log(LOG_WARNING, "Table %s requires a column '%s' of size '%d', but no such column exists.\n", tablename, elm, size);
}
}
release_table(table);
/* If we altered the table, we must refresh the cache */
if (table_altered) {
unload_mysql(database, tablename);
release_table(find_table(database, tablename));
}
return res;
}
@ -1512,7 +1320,7 @@ static int load_mysql_config(struct ast_config *config, const char *category, st
ast_debug(1, "MySQL RealTime database name: %s\n", conn->name);
ast_debug(1, "MySQL RealTime user: %s\n", conn->user);
ast_debug(1, "MySQL RealTime password: %s\n", conn->pass);
if(conn->charset)
if(!ast_strlen_zero(conn->charset))
ast_debug(1, "MySQL RealTime charset: %s\n", conn->charset);
return 1;
@ -1527,13 +1335,13 @@ static int mysql_reconnect(struct mysql_conn *conn)
/* mutex lock should have been locked before calling this function. */
reconnect_tryagain:
if ((!conn->connected) && (!ast_strlen_zero(conn->host) || conn->sock) && !ast_strlen_zero(conn->user) && !ast_strlen_zero(conn->name)) {
if ((!conn->connected) && (!ast_strlen_zero(conn->host) || !ast_strlen_zero(conn->sock)) && !ast_strlen_zero(conn->user) && !ast_strlen_zero(conn->name)) {
if (!mysql_init(&conn->handle)) {
ast_log(LOG_WARNING, "MySQL RealTime: Insufficient memory to allocate MySQL resource.\n");
conn->connected = 0;
return 0;
}
if(conn->charset && strlen(conn->charset) > 2){
if(strlen(conn->charset) > 2){
char set_names[255];
char statement[512];
snprintf(set_names, sizeof(set_names), "SET NAMES %s", conn->charset);
@ -1754,4 +1562,3 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "MySQL RealTime Config
.reload = reload,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
);

Some files were not shown because too many files have changed in this diff Show More