Commit Graph

4519 Commits

Author SHA1 Message Date
Kevin Harwell 48ef239a01 Merge "res_rtp_asterisk: Add support for raising additional RTCP messages." 2018-03-29 15:19:17 -05:00
Ross Beer f65488f546 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-28 16:20:11 -06:00
Joshua Colp e14b0e960d res_rtp_asterisk: Add support for raising additional RTCP messages.
This change extends the existing AST_FRAME_RTCP frame type to be
able to contain additional RTCP message types, such as feedback
messages. The payload type is contained in the subclass which allows
knowing what is in the frame itself.

The RTCP feedback message type is now handled and REMB[1] messages
are raised with their containing information.

This also fixes a bug where all feedback messages were triggering
video updates instead of just FIR and FUR.

Finally RTCP frames are now passed up through the Asterisk core to
what is handling the channel, mapped appropriately in the case of
bridging, and written to an outgoing stream. Since RTCP frames are
on a per-stream basis this is only done on multistream capable
channels.

[1] https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03

ASTERISK-27758
ASTERISK-26366

Change-Id: I680da0ad8d5059d5e9655d896fb9d92e9da8491e
2018-03-27 08:39:00 -06:00
Jenkins2 39ba6aacf8 Merge "rtp: Add REMB RTP property and set it on PJSIP video RTP." 2018-03-21 10:38:32 -05:00
Joshua Colp 0bfc83ee4f Merge "BuildSystem: Remove unused dependency on libltdl." 2018-03-20 06:37:09 -05:00
Jenkins2 5843a19797 Merge "loader: Convert reload_classes to built-in modules." 2018-03-19 12:53:12 -05:00
Joshua Colp 115939caeb rtp: Add REMB RTP property and set it on PJSIP video RTP.
This change adds a property to RTP instances to indicate that
REMB support is enabled and that sending/receiving should be
passed through.

This also enables it on video RTP instances in PJSIP if
WebRTC support is enabled.

Finally the goog-remb extension is added to the SDP using
the rtcp-fb attribute to indicate our support for it.

Details about REMB can be found on the draft document for it:
https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03

Change-Id: I1902dda1c0882bd1a0d71b2f120684b44b97e789
2018-03-19 07:48:47 -06:00
Alexander Traud 10a978829e 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 11:00:06 +01:00
Ross Beer 92158b7f37 res_pjsip_rfc3326.c: Account for more than one 'Reason' header
ASTERISK-27741

Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf
2018-03-14 17:49:56 -06:00
Joshua Colp 6d81a2a684 Merge "res_srtp: Add support for libsrtp2.x on openSUSE." 2018-03-14 06:16:40 -05:00
Corey Farrell 572a508ef2 loader: Convert reload_classes to built-in modules.
* acl (named_acl.c)
* cdr
* cel
* ccss
* dnsmgr
* dsp
* enum
* extconfig (config.c)
* features
* http
* indications
* logger
* manager
* plc
* sounds
* udptl

These modules are now loaded at appropriate time by the module loader.
Unlike loadable modules these use AST_MODULE_LOAD_FAILURE on error so
the module loader will abort startup on failure of these modules.

Some of these modules are still initialized or shutdown from outside the
module loader.  logger.c is initialized very early and shutdown very
late, manager.c is initialized by the module loader but is shutdown by
the Asterisk core (too much uses it without holding references).

Change-Id: I371a9a45064f20026c492623ea8062d02a1ab97f
2018-03-14 05:20:12 -04:00
Jenkins2 4b7872c9db Merge "core: Remove ABI effects of MALLOC_DEBUG." 2018-03-13 13:54:19 -05:00
Jenkins2 1485719531 Merge "Replace direct checks of option_debug with DEBUG_ATLEAST macro." 2018-03-12 10:44:46 -05:00
Jenkins2 ffdd4b1c39 Merge "Complete deprecating legacy modules." 2018-03-12 07:50:01 -05:00
Jenkins2 114c25e706 Merge "res_pjsip_session: properly handle SDP from a forked call with early media" 2018-03-12 07:23:26 -05:00
Jenkins2 e5a6c72cd7 Merge "BuildSystem: Depend not implicitly but explicitly on external libraries." 2018-03-12 07:08:14 -05:00
Alexander Traud 9164be19d2 res_srtp: Add support for libsrtp2.x on openSUSE.
Since ASTERISK-27253, no symbols from the header srtp2/crypto_types.h are used
anymore. Therefore, its include statement can be removed. This allows to compile
Asterisk on platforms which do not offer this private header, like openSUSE.

ASTERISK-27733

Change-Id: I25c5cb8fa966043d1506ebef449e5a724412b4b6
2018-03-12 10:11:15 +01:00
Jenkins2 ffdc5c6398 Merge "res_http_post: Enable GMime in NetBSD." 2018-03-09 00:19:46 -06:00
Richard Mudgett e6738b79b3 Complete deprecating legacy modules.
The menuselect comment was updated to deprecate these modules but the
AST_MODULE_INFO block at the end of file was missed.

ASTERISK-27671

Change-Id: I63070b5c4d4f08af010c6034acd4793c1bcef839
2018-03-08 13:53:09 -06:00
Corey Farrell c8a521b6c8 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 16:03:01 -06:00
Ross Beer 88cef40f6e res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints
ASTERISK-27554

Change-Id: If61c7faab7d2fa1031c056ed6268fe928e2391cf
2018-03-07 10:08:09 -06:00
lvl 3fb26df4ac res_pjsip_session: properly handle SDP from a forked call with early media
In handle_negotiated_sdp(), use session->active_media_state when
session->pending_media_state is empty.  The 200's SDP should be fed into
handle_negotiated_sdp_session_media() together with the already negotiated
state, which is now in session->active_media_state instead.  Only if both
the session's pending and active media are empty should
handle_negotiated_sdp() abort.

ASTERISK-27441

Change-Id: If0d5150ffe6f38d8a854831fef37942258d4629c
2018-03-06 13:35:22 -06:00
Alexander Traud 162fc4fba6 BuildSystem: Depend not implicitly but explicitly on external libraries.
ASTERISK-27722

Change-Id: Ie7b8c30d86cb00a54d6ac4e09e6f28f42d2bd52c
2018-03-06 14:33:14 +01:00
Alexander Traud 99b6a14737 res_http_post: Enable GMime in NetBSD.
ASTERISK-27719

Change-Id: I230c5f9f316b2e9465c093c13580f72ebbaf67a7
2018-03-05 15:15:03 +01:00
Jenkins2 debe4fe751 Merge "pjproject: Add cache_pools debugging option." 2018-03-05 08:09:11 -06:00
Richard Mudgett c711e4076a core: Remove ABI effects of MALLOC_DEBUG.
This allows asterisk to be compiled with MALLOC_DEBUG to load modules
built without MALLOC_DEBUG.  Now pre-compiled third-party modules will
still work regardless of MALLOC_DEBUG being enabled or not.

Change-Id: Ic07ad80b2c2df894db984cf27b16a69383ce0e10
2018-03-01 13:13:55 -06:00
Jenkins2 97485eefaf Merge "res_pjsip_refer.c: Fix attended transfer race condition crash." 2018-03-01 08:44:21 -06:00
Richard Mudgett 1a36a452bd 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:41:30 -06:00
Ben Ford 0be1c388e4 Add extended properties to rtp_engine for RTP retransmission support.
A couple of additional properties are needed in rtp_engine to enable
support for packet retransmission: AST_RTP_PROPERTY_RETRANS_RECV and
AST_RTP_PROPERTY_RETRANS_SEND. These will both be enabled automatically
if an endpoint has the webrtc option enabled. While this adds no
functionality currently, it will serve as a building block for future
changes for RTP retransmission support.

For more information, refer to the wiki page:
https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements

Change-Id: Ic598acd042a045f9d10e5bdccb66f4efc9e587cc
2018-02-23 12:56:00 -06:00
George Joseph 01510df672 Merge "res_rtp_asterisk: Fix ICE candidate nomination" 2018-02-23 08:26:50 -06:00
Richard Mudgett bb9c1938a0 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:15:25 -06:00
Kevin Harwell 2220be2349 Merge "AST-2018-006: Properly handle WebSocket frames with 0 length payload." 2018-02-21 14:11:50 -06:00
George Joseph 5458175744 Merge "AST-2018-005: res_pjsip_transport_management: Move to core" 2018-02-21 10:42:28 -06:00
George Joseph a4db014fd6 Merge "AST-2018-005: Fix tdata leaks when calling pjsip_endpt_send_response(2)" 2018-02-21 10:42:19 -06:00
George Joseph 121cbc98cb Merge "AST-2018-005: Add a check for NULL tdata in ast_sip_failover_request" 2018-02-21 10:42:07 -06:00
Sean Bright 6436137959 AST-2018-006: Properly handle WebSocket frames with 0 length payload.
In ast_websocket_read() we were not adequately checking that the
payload_len was non-zero before passing it to ws_safe_read(). Calling
ws_safe_read with a len argument of 0 will result in a busy loop until
the underlying socket is closed.

ASTERISK-27658 #close

Change-Id: I9d59f83bc563f711df1a6197c57de473f6b0663a
2018-02-21 10:31:52 -06:00
George Joseph 758409de56 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 08:14:56 -07:00
George Joseph de871515ba 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 08:14:47 -07:00
George Joseph c53d8dcb68 AST-2018-005: Add a check for NULL tdata in ast_sip_failover_request
It was discovered that there are some corner cases where a pjsip tsx
might have no last_tx so calling ast_sip_failover_request with
a NULL last_tx as its tdata would cause a crash.

ASTERISK-27618
Reported By:  Sandro Gauci

Change-Id: Ic2b63f6d4ae617c4c19dcdec2a7a6156b54fd15b
2018-02-21 08:14:40 -07:00
Joshua Colp d424850d58 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 08:30:31 -06:00
Jenkins2 71de3deffe Merge "res_http_websocket: Don't leak memory on read failure" 2018-02-20 13:55:58 -06:00
Jenkins2 c80ecbc5ae Merge "res_pjsip_header_funcs: Various cleanups" 2018-02-19 18:02:32 -06:00
Jenkins2 f063ea650e Merge "res_pjsip: Use pjsip_sip_uri.user_param instead of other_param" 2018-02-19 08:54:56 -06:00
Thomas Guebels 4b555d7147 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 07:38:02 -06:00
Sean Bright 8b18247af6 res_http_websocket: Don't leak memory on read failure
Change-Id: Ic449ea832bc81a1671c0e910c5fbe8c683e3da89
2018-02-19 07:24:51 -06:00
Jenkins2 ddc607f85a Merge "Deprecate legacy modules." 2018-02-19 06:59:00 -06:00
Sean Bright e4a5c9ccf4 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 08:07:17 -06:00
Sean Bright 65a4084060 res_pjsip: Endpoint destruction does not free DTLS configuration
ASTERISK-27679 #close
Reported by: Mak Dee

Change-Id: I89a2783a11be0763bf123d1619ed176b6225cf42
2018-02-16 13:38:21 -06:00
Alexander Traud 5fd59014a5 res_calendar: Specialized calendars depend on symbols of general calendar.
ASTERISK-27680

Change-Id: Ifb77912e424fe3710a025c18526fada673ec0b79
2018-02-16 13:52:37 +01:00
Sean Bright 303e43f8a6 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 13:36:25 -06:00