Commit Graph

28375 Commits

Author SHA1 Message Date
zuul
4a2371f1cd Merge "channel: No hung-up on failing security requirements." into 14 2016-08-26 19:36:28 -05:00
Alexander Traud
1d2d4e2ae9 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:34 -05:00
Richard Mudgett
1a7d5989d6 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:11:17 -05:00
Richard Mudgett
aaef3b7175 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:11:17 -05:00
Richard Mudgett
a53aebabbc 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:11:17 -05:00
Richard Mudgett
a6448b01a2 res_fax.c: Add chan locked precondition comments.
Change-Id: Ic10ae434536bbf7fb7055d6ab36cc50b8748a4e7
2016-08-25 17:11:17 -05:00
Richard Mudgett
5869bb22db 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:11:17 -05:00
Richard Mudgett
fc859dfee9 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:11:17 -05:00
Joshua Colp
5a48843185 Merge "res_rtp_multicast: Fix SEGV in ast_multicast_rtp_create_options" into 14 2016-08-24 18:53:06 -05:00
George Joseph
b729072431 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:52 -05:00
Corey Farrell
a8b3d8d7f9 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:18 -05:00
Mark Michelson
415f95ed00 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:56 -05:00
Joshua Colp
6999fabdbc Merge "Revert "ConfBridge: Rework announcer channel methodology"" into 14 2016-08-23 05:54:52 -05:00
Joshua Colp
937093f768 Revert "ConfBridge: Rework announcer channel methodology"
This reverts commit d974988736.

Change-Id: I517a38f4d821dbccc335f7cba0e675da5f8ed675
2016-08-23 05:54:45 -05:00
zuul
57002bdf15 Merge "ConfBridge: Rework announcer channel methodology" into 14 2016-08-22 20:20:25 -05:00
zuul
73eaec5e74 Merge "compilation failed with -Werror=maybe-uninitialized" into 14 2016-08-22 11:57:50 -05:00
zuul
d48d6eed6a Merge "res_odbc_transaction: add dep on generic_odbc" into 14 2016-08-22 11:08:29 -05:00
zuul
a04cae4755 Merge "pjproject_bundled: Allow IPv4/IPv6 (Dual Stack) configurations." into 14 2016-08-22 09:21:29 -05:00
Alexei Gradinari
bba715ecad 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-22 08:56:38 -05:00
Joshua Colp
5dd72f9a2e Merge "res_ari: Add http prefix to generated docs" into 14 2016-08-22 06:50:10 -05:00
David M. Lee
9dd4ec7d03 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:55:54 -05:00
Alexander Traud
dbfe4a9011 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:43 -05:00
zuul
283f809be1 Merge "sip_to_pjsip: Map externhost/ip to Transports." into 14 2016-08-19 17:54:50 -05:00
Torrey Searle
1466737dbc 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
(cherry picked from commit 6f448f32fe)
2016-08-19 16:58:45 -05:00
zuul
4474bc5d31 Merge "res_odbc: Correct the dependency relationship with res_odbc_transaction" into 14 2016-08-19 16:14:16 -05:00
zuul
d0f4e71c88 Merge "sip.conf: tlsclientmethod is using sslv23 as default." into 14 2016-08-19 14:20:36 -05:00
zuul
c87ff471a7 Merge "rest-api: Swagger scripts were not replacing format variable in file brief" into 14 2016-08-19 12:54:17 -05:00
zuul
330ea54a92 Merge "sip_to_pjsip: Add cert_file." into 14 2016-08-19 12:40:41 -05:00
zuul
1866fa9d06 Merge "res_format_attr_g729: Add annexb=no format parameter to SDPs" into 14 2016-08-19 11:03:42 -05:00
zuul
b1600bccf5 Merge "res_pjsip: Add contact_user to endpoint" into 14 2016-08-19 10:36:11 -05:00
zuul
7952f7f478 Merge "ari: Add documentation that path parameters are case-sensitive" into 14 2016-08-19 07:07:52 -05:00
Alexander Traud
9ca84fa2e8 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:07:43 -05:00
Alexander Traud
d192cd125c 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:27 -05:00
Joshua Colp
4437db8d89 Merge "sip_to_pjsip: Write cos and tos." into 14 2016-08-18 18:55:41 -05:00
Kevin Harwell
d2bee6b535 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:14:45 -05:00
Kevin Harwell
03c7e5e1ea 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:09:29 -05:00
George Joseph
85a1de9f72 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 15:30:38 -05:00
Kevin Harwell
81e3b8f141 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:17 -05:00
Joshua Colp
e251482d88 Merge "sip_to_pjsip: Parse register even with transport." into 14 2016-08-18 11:50:21 -05:00
Joshua Colp
f9e2be625b Merge "sip_to_pjsip: Write local_net, contact_acl, contact_deny, and contact_permit." into 14 2016-08-18 11:50:00 -05:00
Joshua Colp
0c315e58e6 Merge "sip_to_pjsip: Map (session-)timers correctly." into 14 2016-08-18 11:49:24 -05:00
Joshua Colp
78ffb5d89c Merge "sip_to_pjsip: Add cert_file and ca_list_path." into 14 2016-08-18 11:48:37 -05:00
Joshua Colp
122749fe1a Merge "sip_to_pjsip: Write username even without authname." into 14 2016-08-18 11:48:04 -05:00
Joshua Colp
c61dbc6318 Merge "sip_to_pjsip: Map the TLS method correctly." into 14 2016-08-18 11:47:18 -05:00
Joshua Colp
55a81c3a12 Merge "sip_to_pjsip: Add compactheaders, timerb, timert1, and useragent." into 14 2016-08-18 11:46:51 -05:00
Joshua Colp
21d927000e Merge "sip_to_pjsip: Write media_encryption." into 14 2016-08-18 11:45:50 -05:00
Joshua Colp
62a59d6c20 Merge "sip_to_pjsip: Add defaultexpiry, maxexpiry, and minexpiry." into 14 2016-08-18 11:45:03 -05:00
Mark Michelson
d974988736 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-18 09:51:14 -05:00
Alexander Traud
94d1076e69 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:33:10 -05:00
Alexander Traud
9f86d27f60 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:53 -05:00